
레드 팀 활동, 보안 연구, 그리고 기타 모든 용도를 위한 폰트 기반 기만 도구입니다.
레드 팀 운영, 보안 연구, 그리고 그 외 다양한 용도를 위한 폰트 기반 기만 도구입니다.
EvilFontTool은 사람이 읽을 때 완전히 다른 텍스트를 표시하는 문서 안에 기계가 읽을 수 있는 텍스트를 숨깁니다. 이는 Evil Fonts를 사용하여 수행됩니다. Evil Fonts는 컴퓨터가 이해하는 문자와 다른 글자를 렌더링하여 보는 사람을 의도적으로 속이는 폰트입니다. 폰트 글리프를 재매핑함으로써 문서의 표시 문자는 사람에게는 한 가지를 보여주지만 터미널, AI 시스템, 클립보드 복사-붙여넣기에는 다른 내용으로 보입니다.
Word docx 데모는 모바일 폰의 폰트 렌더링 방식 때문에 모바일에서는 작동하지 않습니다.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
개발용(편집 가능한 설치)의 경우:
pip install -e .
pip을 통해 자동으로 설치됩니다:
fonttools — 폰트 파싱 및 조작brotli — WOFF2 압축(fonttools에서 사용)python-docx — DOCX 생성reportlab — PDF 생성pdf2image — PDF를 이미지로 변환pdfminer.six — PDF 텍스트/레이아웃 추출Pillow — PDF 파이프라인의 이미지 처리시스템 요구 사항(pip으로 설치되지 않음 — 반드시 PATH에 있어야 함):
soffice --headless를 호출하는 pdf 명령에 필요합니다. pdf 명령은 Windows에서는 실험적이며 의도한 대로 작동하지 않을 수 있습니다.
sudo apt install libreofficebrew install --cask libreofficepdf 명령을 위해 PDF 페이지를 렌더링하는 pdf2image에 필요합니다
sudo apt install poppler-utilsbrew install poppler~\Documents\poppler에 poppler를 설치하고 path에 추가합니다.
irm (irm https://api.github.com/repos/oschwartz10612/poppler-windows/releases/latest).assets[0].browser_download_url -OutFile ~\Documents\poppler.zip
Expand-Archive ~\Documents\poppler.zip ~\Documents\poppler -Force
$bin = (gci ~\Documents\poppler -Recurse -Filter pdftotext.exe)[0].DirectoryName
[Environment]::SetEnvironmentVariable('Path', [Environment]::GetEnvironmentVariable('Path','User') + ";$bin", 'User'); $env:Path += ";$bin"
/usr/share/fontsC:\Windows\Fontspdf 명령은 Windows에서는 실험적이며 의도한 대로 작동하지 않을 수 있습니다.doc --ttf-dir <ttffonts_dir>을 사용하거나(EvilFontTool이 직접 포함) Windows의 Word를 사용하세요. LibreOffice 자체의 "글꼴 포함" 옵션은 Evil Fonts에는 작동하지 않습니다.pdf 명령은 Evil Fonts에 전혀 의존하지 않습니다. DOCX를 이미지로 렌더링한 다음(따라서 보이는 페이지는 텍스트가 아닌 그림), 그 위에 실제 컴퓨터 텍스트를 완전히 보이지 않는 선택 가능한 텍스트로 그립니다. 복사-붙여넣기와 텍스트 추출은 대신 그 보이지 않는 레이어를 읽습니다. 이 작업을 수행할 수 있는 다른 도구도 몇 가지 있지만, 마음에 드는 DOCX가 이미 있을 때 pdf 명령만큼 쉬운 방법은 없습니다.
진정한 Evil Font PDF를 원한다면 보이지 않는 문자 없이 Word 문서를 만들어야 합니다(보이지 않는 문자는 PDF 변환 과정에서 유지되지 않습니다). 그런 다음 Word에서 직접 내보내거나 "PDF로 인쇄"를 사용하세요. 이렇게 하면 모든 것이 단일 레이어로 유지되어 pdf 명령이 사용하는 잘 알려진 2중 레이어 방식과는 다른 IOCs를 문서에 부여합니다. pdf 명령은 순전히 그 수동 과정이 번거롭고, 때로는 Word 문서의 빠른 PDF 사본이 필요하기 때문에 존재합니다.
요약;
보이지 않는 문자를 포함한 옵션 2를 해내는 방법을 알아내는 분이 있으면 한잔 사겠습니다. 이슈를 열어 주시면 README에 크레딧을 남기겠습니다.
모든 기능은 4개의 하위 명령을 가진 단일 CLI로 제공됩니다.
create — HTML 또는 DOC 파일에서 사용할 폰트 패밀리 생성evilfonttool create <reference_font> <output_dir> <font_name>
| 인자 | 설명 |
|---|---|
reference_font | .ttf 또는 .woff 소스 폰트의 경로 |
output_dir | 폰트와 CSS를 작성할 디렉터리 |
font_name | 생성된 폰트 패밀리의 내부 이름 접두사 |
예시:
evilfonttool create fonts/Arial.ttf output/ 'Arial'
출력 결과:
output/fonts/*.woff — 문자별 웹 폰트output/ttffonts/*.ttf — 문서 포함용 TTF 폰트output/fonts.css — 웹 사용을 위한 @font-face 선언.txt 파일.computer_file의 각 줄은 human_file의 해당 줄보다 같거나 길어야 합니다.web — Evil Font HTML 파일 생성evilfonttool web <human_file> <computer_file> <output_file>
HTML 파일이 사용할 수 있도록
fonts.css와 생성된 폰트가 출력 디렉터리에 있어야 합니다(또는 HTML 파일에서 경로를 변경하세요).
| 인자 | 설명 |
|---|---|
input_human_file | 사람 독자에게 보이는 텍스트. 여러 줄 가능 |
input_computer_file | 기계/AI에 보이는 텍스트. 여러 줄 가능 |
output_file | 생성된 HTML 파일의 경로 |
예시:
evilfonttool web human.txt computer.txt output/index.html
doc — Evil Font DOCX 파일 생성evilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]
font_name은create단계에서 사용한 이름과 일치해야 합니다. 기만이 올바르게 렌더링되려면 TTF 폰트가 시스템에 설치되어 있거나,--ttf-dir을 통해 포함되거나, Word에서 수동으로 포함(파일 -> 옵션 -> 저장 -> 글꼴 포함)되어야 합니다.
Word 자체의 "글꼴 포함" 저장 옵션은 잘 작동하지만 LibreOffice의 것은 그렇지 않습니다 -- Evil Fonts를 올바르게 포함시키는 데는 끝내 성공하지 못했습니다. 대신 --ttf-dir을 사용하세요. EvilFontTool은 Word나 LibreOffice의 포함 기능에 전혀 의존하지 않고 폰트를 직접 .docx에 포함시킵니다.
예시:
evilfonttool doc human.txt computer.txt output/secret.docx MyFont --author "Finance Team" --ttf-dir output/ttffonts
pdf — Evil Font DOCX를 복사-붙여넣기 안전한 PDF로 변환evilfonttool pdf <input_docx> <output_file> [--ttf-dir DIR] [--dpi DPI] [--soffice PATH] [--ink-font FONT] [--title TITLE] [--author AUTHOR] [--subject SUBJECT] [--producer PRODUCER]
LibreOffice로 DOCX를 렌더링하여 PDF가 문서와 동일하게 보이도록 한 다음, 숨겨진 페이로드를 보이지 않는 복사 레이어로 덮어 모든 뷰어에서 복사-붙여넣기 후에도 유지되도록 합니다.
Windows: 이 명령은 Windows에서는 실험적이며 의도한 대로 작동하지 않을 수 있습니다.
LibreOffice(
soffice)와poppler-utils가 필요합니다 — 의존성 참조.
예시:
evilfonttool pdf output/secret.docx output/secret.pdf --ttf-dir output/fonts/ttffonts --title secret
이 도구를 어떻게 사용할지에 대한 책임은 사용자에게 있습니다. 명시적인 승인 없이 시스템이나 개인을 대상으로 이 기법을 사용하는 것은 비윤리적이며 불법일 수 있습니다. 저자들은 공격을 가능하게 하기 위해서가 아니라 방어자들이 이 유형의 취약점을 이해하고 테스트할 수 있도록 이 도구를 제공합니다.
이 도구는 레드 팀이 자신의 조직에 대한 폰트 기반 공격의 위험을 검증할 수 있도록 돕기 위해 만들어졌습니다. 또한 블루 팀, 연구자, 시스템 소유자가 사용자가 제공한 폰트를 본질적으로 신뢰함으로써 발생하는 보안 공백을 이해할 수 있도록 만들어졌습니다. 아래는 현대 운영 체제와 애플리케이션에서 폰트가 제기하는 문제를 해결하거나 완화하기 위한 개인과 업계를 위한 실용적인 권장 사항입니다.
curl 출력을 bash / Invoke-Expression로 직접 파이프하는 명령을 실행하지 마세요. 공격자가 파일을 다운로드하는 웹사이트를 바꿔치기하기 쉽습니다.Win + R을 사용하는 사용자에게 처음 사용 시 이것이 매우 위험하다는 무서운 팝업으로 경고하세요(이미 구현되어 있지 않은 게 이상할 정도로...).기여는 언제나 환영합니다. 새로운 공격 표면, 폰트 생성 파이프라인의 개선, 또는 문서화할 가치가 있는 방어 기법을 발견했다면 이슈나 PR을 열어 주세요.
git checkout -b feature/my-feature)이 도구는 Word 문서, PDF, 폰트의 복잡성 때문에 테스트하기가 매우 어렵습니다. 반복 가능한 문제를 발견하면 GitHub 이슈를 열어 주시면 최대한 빨리 처리하겠습니다.
이슈에 다음 사항을 포함해 주세요:
mismatch 경고)..docx / 입력 파일(공유할 수 있다면).| 인자 | 설명 |
|---|
input_human_file | 사람에게 보이는 텍스트. 여러 줄 가능 |
input_computer_file | 기계/AI에 보이는 텍스트. 여러 줄 가능 |
output_file | 생성된 DOCX 파일의 경로 |
font_name | 폰트 패밀리 이름(create 단계와 일치해야 함) |
--author | DOCX 문서 작성자 메타데이터(기본값: 없음) |
--ttf-dir | Evil Font TTF 디렉터리(예: <output_dir>/ttffonts). 지정하면 실제 사용된 폰트가 .docx에 직접 포함되어 시스템 전체에 설치하지 않아도 기만이 올바르게 렌더링됩니다. human 파일에 포함된 글자만 포함합니다. |
| 인자 | 설명 |
|---|
input_docx | Evil Font DOCX 경로(doc 단계에서 생성된 파일) |
output_file | 생성된 PDF 파일의 경로 |
--ttf-dir | Evil Font TTF 디렉터리(예: <output_dir>/ttffonts). 위장이 렌더링되도록 LibreOffice에 노출됩니다. 폰트가 시스템 전체에 설치되었거나 파일에 포함된 경우에만 생략하세요 |
--dpi | 표시되는 레이어의 래스터화 품질(기본값: 200) |
--soffice | LibreOffice 바이너리 경로(기본값: soffice) |
--ink-font | 보이지 않는 복사 레이어용 TTF(기본값: 시스템 산세리프 폰트) |
--title | PDF 문서 제목 메타데이터(기본값: Untitled) |
--author | PDF 문서 작성자 메타데이터(기본값: 없음) |
--subject | PDF 문서 주제(subject) 메타데이터(기본값: 없음) |
--producer | PDF 문서 생성자(producer) 메타데이터(기본값: 없음) |