
LLM 출력과 AI 생성 콘텐츠가 사용자 또는 다운스트림 시스템에 도달하기 전에 데이터 유출 신호(EchoLeak, CVE-2025-32711)를 스캔합니다.
사용자, 로그 또는 다운스트림 시스템에 도달하기 전에 LLM 출력 및 AI 생성 콘텐츠에서 데이터 유출 신호를 스캔합니다.
최신 LLM 애플리케이션은 민감한 프롬프트, 내부 문서, API 응답, 사용자 데이터를 일상적으로 처리합니다. 이로 인해 새로운 보안 경계가 생겨났습니다: 출력 계층입니다.
EchoLeak 공격 계열( CVE-2025-32711 포함)은 숨겨지거나 난독화된 페이로드가 생성된 텍스트에 삽입되어 도구, 링크 또는 파싱 체인을 통해 데이터를 유출하는 데 사용될 수 있음을 입증했습니다.
기존 스캐너는 파일, 종속성, 런타임 트래픽에 중점을 둡니다. 이들은 생성된 모델 출력을 목적에 맞게 검사하지 않습니다.
exfil-scan은 "LLM 응답용 바이러스 스캐너"를 제공합니다:
| 범주 | 심각도 | 감지 내용 |
|---|---|---|
| 숨겨진 텍스트 | 높음 | 페이로드를 숨기는 데 사용되는 제로폭 및 보이지 않는 유니코드 시퀀스 |
| 인코딩된 데이터 | 높음 | 인코딩된 콘텐츠를 포함할 가능성이 있는 Base64/hex/octal/unicode 이스케이프 연속 |
| URL 내 데이터 | 중간 | 의심스러울 정도로 긴 쿼리 문자열 및 인코딩된 URL 매개변수 페이로드 |
| 메타데이터 유출 | 높음 | 구조화/비구조화 출력의 자격 증명 형태 키 및 토큰 형식 |
| 유니코드 스테가노그래피 | 중간 | 양방향 제어 문자 및 혼합 스크립트 호모글리프 스타일 단어 |
| 구조적 이상 | 낮음 | 극단적인 줄바꿈/탭 연속 및 대체 문자 인코딩 아티팩트 |
low, medium, highstdin, 단일 파일 또는 디렉토리 입력text, json, markdown 또는 html 출력git clone https://github.com/your-org/exfil-scan.git
cd exfil-scan
pip install -e .
pip install exfil-scan
pip install -e ".[dev]"
pytest
echo 'api_key: sk-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456' | exfil-scan
exfil-scan --input output.txt
exfil-scan --directory ./model-logs --recursive
참고:
--input 또는 --directory 중 하나만 사용하세요. 둘 다 사용하지 마세요.stdin에서 읽습니다.1로 종료됩니다.exfil-scan --input suspicious.txt --format text
예상 형식:
exfil-scan report
=================
Scanned targets: 1
Total findings: 2
1. [HIGH] metadata_leaks/known_token_format:openai_key
Location: suspicious.txt:1:10
Description: Matched known credential/token format (openai_key).
exfil-scan --input suspicious.txt --format json
예상 구조:
{
"finding_count": 2,
"scanned_targets": ["suspicious.txt"],
"findings": [
{
"category": "metadata_leaks",
"rule": "known_token_format:openai_key",
"severity": "HIGH",
"description": "Matched known credential/token format (openai_key).",
"location": "suspicious.txt:1:10",
"snippet": "..."
}
]
}
exfil-scan --directory ./outputs --recursive --format html --output report.html
예상 동작:
exfil-scan --input suspicious.txt --format markdown --output report.md
예상 형식:
# exfil-scan Report
- Scanned targets: 1
- Total findings: 2
리포지토리에는 default-config.yaml이 포함되어 있습니다.
--config를 사용하여 자신만의 파일을 전달할 수 있습니다.
민감도 조정:
low: 더 적은 오탐, 더 큰 임계값medium: 균형 잡힌 기본값high: 더 미묘한 패턴을 포착CLI 민감도 재정의:
exfil-scan --input out.txt --sensitivity high
자신만의 토큰 형식과 메타데이터 키를 추가할 수 있습니다:
sensitivity: medium
rules:
metadata_keys:
- api_key
- db_password
- internal_token
token_patterns:
custom_jwt: "\\beyJ[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\b"
corp_secret: "\\bcorp_[A-Za-z0-9]{24,}\\b"
그런 다음 실행합니다:
exfil-scan --input response.log --config ./my-config.yaml
모듈 책임:
exfil_scan/cli.py: 인수 파싱, 입력 선택, 출력 렌더링, 종료 처리exfil_scan/config.py: 기본값, YAML 로딩, 재귀 병합, 프로필 정규화exfil_scan/scanner.py: 여섯 가지 탐지 엔진, 발견 사항 데이터클래스, 보고서 포맷팅tests/test_scan.py: 탐지 및 출력 형식 회귀 테스트실행 흐름:
| 코드 | 의미 |
|---|---|
0 | 발견 사항 없음(깨끗함) |
1 | 발견 사항 감지됨 |
2 | 런타임 또는 인수 오류 |
이로 인해 CI 통합이 간단해집니다:
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
탐지 항목이 발견되면 종료 코드 1을 기준으로 작업이 신속하게 실패할 수 있습니다.
테스트 실행:
pytest
커버리지에는 다음이 포함됩니다:
exfil-scan은 휴리스틱 스캐너입니다.
콘텐츠 안전성을 입증하는 것이 아니라 위험을 줄이고 의심스러운 출력을 표면화하도록 설계되었습니다.
권장 배포 패턴:
이 프로젝트는 MIT 라이선스로 라이선스가 부여됩니다.
전체 약관은 LICENSE를 참조하세요.
기여를 환영합니다. PR을 열 때 다음을 포함하세요:
| 옵션 | 유형 | 기본값 | 설명 |
|---|
-i, --input | path | 없음 | 입력 파일 하나를 스캔합니다 |
-d, --directory | path | 없음 | 디렉토리의 지원되는 모든 파일을 스캔합니다 |
-r, --recursive | flag | false | --directory와 함께 중첩 디렉토리를 재귀적으로 검색합니다 |
-c, --config | path | 없음 | YAML 구성 파일 경로 |
-s, --sensitivity | low|medium|high | config/default | 민감도 프로필을 재정의합니다 |
-f, --format | text|json|html|markdown | text | 보고서 형식을 렌더링합니다 |
-o, --output | path | stdout | 렌더링된 보고서를 파일에 씁니다 |
--version | flag | n/a | CLI 버전을 출력합니다 |
-h, --help | flag | n/a | 사용법 및 인수를 표시합니다 |