개인정보별 점수화
- 10점: 고유 식별 정보 및 민감 정보 → 권장 조치: 업로드 차단 / 암호화 저장 / 일정 기간 내 삭제 권고 등.
- 주민등록번호, 여권번호, 운전면허번호 등
- 8점: 금융 정보 및 생체 정보 → 권장 조치: 업로드 차단 / 암호화 저장 / 일정 기간 내 삭제 권고 등.
- 신용카드 번호, 계좌번호, 지문, 얼굴 인식 데이터 등
- 5점: 직접 식별 가능 정보 → 권장 조치: 불필요한 항목 삭제, 마스킹, 최소한의 공유 범위 설정 등.
- 전체 이름, 상세 주소, 휴대폰 번호
- 3점: 간접 식별 정보 (다른 정보와 결합 시 식별 가능한 정보) → 권장 조치: 보관 기간 축소, 접근 권한 최소화 등.
- IP 주소, MAC 주소, 접속 기록(로그), 쿠키
파일을 스캔할 수 없을 때 → 가이드라인에 따로 경고 메시지 추가
- 암호화/비밀번호가 걸려있어서 내용을 볼 수 없는 경우
- 경고 메시지 예시) 이 파일은 암호화되어 있어 자동 검사에 실패했습니다. 민감한 개인정보가 포함되었을 수 있으므로, 꼭 필요한 경우에만 제한된 범위에서 공유하고, 불필요하다면 삭제를 권장합니다.
- 단순 미지원/손상된 파일이어서 내용을 볼 수 없는 경우
- 경고 메시지 예시) 현재 지원하지 않는 형식이거나 손상된 파일이라 자동 검사에 실패했습니다. 신뢰할 수 있는 출처인지 확인하고, 필요하지 않다면 삭제를 권장합니다.
각 식별자 정규식 개요
※지문과 얼굴 인식은 정규식이 없음
{
"KR_RRN": {
"label": "주민등록번호",
"regex": "(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12][0-9]|3[01]))-[1-4][0-9]{6}",
"score": 10
},
"PASSPORT": {
"label": "여권번호",
"regex": "[MS][A-Z0-9]{8,9}",
"score": 10
},
"DRIVER_LICENSE": {
"label": "운전면허번호",
"regex": "[0-9]{2}-[0-9]{2}-[0-9]{6}-[0-9]{2}",
"score": 10
},
"CREDIT_CARD": {
"label": "신용카드번호",
"regex": "(?:4\\\\d{3}|5[1-5]\\\\d{2}|3[47]\\\\d{2}|6(?:011|5\\\\d{2}))-?\\\\d{4}-?\\\\d{4}-?\\\\d{4}",
"score": 8
},
"BANK_ACCOUNT": {
"label": "계좌번호",
"regex": "\\\\d{2,4}-?\\\\d{3,6}-?\\\\d{3,6}",
"score": 8
},
"NAME": {
"label": "이름(한글)",
"regex": "(?<![가-힣])[가-힣]{2,4}(?![가-힣])",
"score": 5
},
"PHONE_NUMBER": {
"label": "전화번호",
"regex": "(?:01[016789]-\\\\d{3,4}-\\\\d{4})|(?:0[2-8]\\\\d?-\\\\d{3,4}-\\\\d{4})",
"score": 5
},
"ADDRESS": {
"label": "주소(상세)",
"regex": "(?:[가-힣0-9]+(시|도)\\\\s*[가-힣0-9]+(구|군)|[가-힣0-9]+(동|읍|면)\\\\s*\\\\d+-?\\\\d*)",
"score": 5
},
"IP_ADDRESS": {
"label": "IP 주소",
"regex": "\\\\b(?:\\\\d{1,3}\\\\.){3}\\\\d{1,3}\\\\b",
"score": 3
},
"MAC_ADDRESS": {
"label": "MAC 주소",
"regex": "\\\\b(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\\\\b",
"score": 3
},
"COOKIE": {
"label": "쿠키 / 세션 ID",
"regex": "(?i)\\\\b(?:JSESSIONID|SESSIONID|SID|SESSION_TOKEN)=([A-Za-z0-9\\\\-_]{16,})",
"score": 3
},
"LOG_ENTRY": {
"label": "접속 기록(로그)",
"regex": "\\\\b(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)\\\\s+\\\\/[^\\\\s]*\\\\s+HTTP\\\\/1\\\\.[01]\\\\b",
"score": 3
}
}
데이터 형식 정의
{
// 사용자가 업로드한 파일 이름
"filename": "string",
// 파일의 MIME 타입 (예: text/plain, application/pdf 등)
"mime_type": "string",
// 스캔 상태: "ok" | "failed" | "not_supported"
"scan_status": "ok",
// 스캔 실패 사유 (scan_status가 "failed"일 때만 사용)
// 예: "encrypted" | "corrupted" | "unsupported" | "too_large" | "timeout"
"fail_reason": null,
// 전체 파일의 위험 점수 (발견된 항목들의 최대값 또는 합산값)
// 스캔 불가 파일이면 null 또는 0으로 둘 수 있음
"overall_score": 0,
// 점수 기반 위험 등급
// 예: low | medium | high
"risk_level": "low",
// 발견된 개인정보 목록
"findings": [
{
// 개인정보 유형 코드 (엔진 내부용)
// 예: KR_RRN(주민등록번호), CREDIT_CARD(카드 번호), PHONE_NUMBER(전화번호) 등
"type_code": "KR_RRN",
// 사람이 읽기 쉽게 표시할 라벨
"type_label": "주민등록번호",
// 민감도 점수 (10점/8점/5점/3점)
"score": 10,
// 어떤 부분에서 발견되었는지
// 예: "content" | "filename" | "metadata" | "url_query" 등
"location": "content",
// 마스킹 처리된 개인정보 (실제 원본을 그대로 노출하면 안 됨)
"value_preview": "990101-1******",
}
],
// 점수 기반 요약 정보
"summary": {
// 점수별 발견된 항목 개수
"score_breakdown": {
"10": 1,
"8": 0,
"5": 0,
"3": 0
},
// 개인정보 유형별 개수
"by_type": {
"KR_RRN": 1
}
}
}
개인정보가 발견되는 위치
- 파일명 (업로드된 파일 이름 전체 문자열에서 개인정보 패턴을 1차로 탐지)
- 파일 내용 (의심스러운 파일명, 확장자일 때 파일 내용 탐색)
- .csv (고객 정보, 전화번호·이메일 목록이 가장 자주 들어감)
- .xlsx / .xls (엑셀 파일: 이름·전화번호·주소 같은 개인정보를 표로 관리하는 대표 포맷)
- .pdf (신분증 스캔, 계약서, 민원 서류 등 민감한 자료가 매우 자주 포함됨)
- .txt / .doc / .docx / .hwp (자유 형식 텍스트 문서로, 메모·보고서·양식 등에서 개인정보가 섞여 있을 수 있음)
- 압축 파일
- .zip / .7z / .rar / .tar / .gz (내부에 민감한 문서·이미지·엑셀 등이 통째로 들어 있어 위험도 최상위 → 가능하면 압축 내부 파일까지 스캔 )
- 바이오 정보 파일
- .min (지문 정보 전용 표준 확장자)
- .face (얼굴 정보 전용 표준 확장자)
- 메타데이터 (문서 작성자, 제목, 코멘트, 태그, EXIF GPS 좌표 등 파일 메타데이터에 포함된 이름, 이메일, 전화번호, 위치 정보 등을 스캔)
- 클라우드가 자동 생성하는 로그 (IP 주소, 계정 ID, 쿠키/세션 ID, URL 파라미터에 포함된 개인정보를 탐지)
- URL 또는 쿼리 파라미터에 포함되는 개인정보 (URL 경로와 쿼리 파라미터에 포함된 전화번호, 이메일, 계정 ID, 토큰 등이 있는지 검사)
PII(개인 식별 정보) 탐지 오픈소스
- Microsoft Presidio
- 텍스트·이미지·구조화 데이터에서 이름, 전화번호, 이메일, 카드번호 같은 PII를 탐지·마스킹·익명화까지 해주는 프레임워크.
- Python 라이브러리로 쓸 수도 있고, Docker로 서비스 띄워서 다른 백엔드에서 API로 호출할 수도 있음.
- 깃허브 주소: https://github.com/microsoft/presidio
- Presidio 공식 웹사이트(기능 설명, 설치 방법 등): https://microsoft.github.io/presidio/
'과제' 카테고리의 다른 글
| 5주차 (Flask, Github) (0) | 2025.05.11 |
|---|---|
| 4주차 (pwnable 문제 풀이) (0) | 2025.04.10 |
| 3주차 (cheat engine으로 리버싱 문제 풀이) (0) | 2025.04.06 |
| 2주차 (FTK Imager과 Volatility 이용한 분석) (0) | 2025.03.31 |
| 1주차 (웹 해킹) (0) | 2025.03.24 |