
Инструмент обмана на основе шрифтов для red teaming, исследований в области безопасности и всего остального.
Инструмент обмана на основе шрифтов для red teaming, исследований безопасности и всего остального.
EvilFontTool скрывает машиночитаемый текст внутри документа, который отображает человеку совершенно другой текст. Это достигается с помощью Evil Fonts — шрифтов, которые намеренно обманывают зрителя, отображая другую букву, чем понимает компьютер. Переопределяя глифы шрифта, видимые символы документа показывают человеку одно, а терминалы, ИИ-системы и копирование/вставка из буфера обмена видят другое.
Демо-файлы 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 — генерация DOCXreportlab — генерация PDFpdf2image — преобразование PDF в изображенияpdfminer.six — извлечение текста/макета из PDFPillow — обработка изображений для PDF-конвейераСистемные требования (не устанавливаются через pip — должны быть в вашем PATH):
pdf, которая вызывает soffice --headless для преобразования DOCX в PDF. Команда pdf является экспериментальной в Windows и может работать некорректно.
sudo apt install libreofficebrew install --cask libreofficepdf2image для рендеринга страниц PDF для команды pdf
sudo apt install poppler-utilsbrew install popplerУстанавливает poppler в ~\Documents\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 и может работать некорректно.pdf не работает со сложными документами Word, например с колонками. Не стесняйтесь открывать issue, если вам нужна функция, которую вы действительно хотите.doc --ttf-dir <ttffonts_dir> (EvilFontTool встраивает их сам) или Word в Windows. Собственная опция LibreOffice «встраивать шрифты» не работает для Evil Fonts.Команда pdf вообще не полагается на Evil Fonts. Она преобразует DOCX в изображение (таким образом, видимая страница — это картинка, а не текст), затем поверх наносит настоящий компьютерный текст как полностью невидимый выделяемый текст. Копирование/вставка и извлечение текста читают этот невидимый слой. Есть несколько других инструментов, которые умеют это делать, но ни один не так прост, как команда pdf, если у вас уже есть подходящий DOCX.
Если вам нужен настоящий PDF на основе Evil Font, нужно создать документ Word без невидимых букв (невидимые буквы не переживают преобразование в PDF). Затем экспортируйте напрямую из Word или используйте «Печать в PDF». Это сохраняет всё в одном слое, давая документу другие IOCs, чем известный двухслойный трюк, используемый командой pdf. Команда pdf существует именно потому, что ручной процесс утомителен, и иногда нужно просто быстро получить PDF-копию документа Word.
Короче;
pdf → двухслойный PDF, тот же механизм, что и в других инструментах (более известный/обнаруживаемый).Если кто-нибудь разберётся, как выполнить Вариант 2 с невидимыми буквами, я ставлю вам выпивку. Откройте issue, и я укажу вас в README.
Все функции доступны через единый CLI с четырьмя подкомандами.
create — Создание семейства шрифтов для использования в HTML или DOC-файлахevilfonttool create <reference_font> <output_dir> <font_name>
| Аргумент | Описание |
|---|---|
reference_font | Путь к исходному шрифту .ttf или .woff |
output_dir | Каталог для записи шрифтов и CSS |
Пример:
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 — Создание HTML-файла с Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Требуется, чтобы
fonts.cssи созданные шрифты находились в выходном каталоге, чтобы HTML-файл мог их использовать (или измените путь в HTML-файле).
| Аргумент | Описание |
|---|---|
input_human_file | Текст, видимый человеку. Может быть многострочным |
input_computer_file | Текст, видимый машинам / ИИ. Может быть многострочным |
output_file | Путь для создаваемого HTML-файла |
Пример:
evilfonttool web human.txt computer.txt output/index.html
doc — Создание DOCX-файла с Evil Fontevilfonttool 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 встраивает шрифты сам, прямо в .docx, вообще не полагаясь на встраивание Word или LibreOffice.
Пример:
evilfonttool doc human.txt computer.txt output/secret.docx MyFont --author "Finance Team" --ttf-dir output/ttffonts
pdf — Преобразование DOCX с Evil Font в 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]
Преобразует DOCX с помощью LibreOffice, поэтому PDF выглядит идентично документу, затем накладывает скрытую полезную нагрузку в виде невидимого слоя для копирования, чтобы она сохранялась при копировании/вставке в любом просмотрщике.
Windows: Эта команда экспериментальна в Windows и может работать некорректно.
Требует LibreOffice (
soffice) иpoppler-utils— см. Зависимости.
Пример:
evilfonttool pdf output/secret.docx output/secret.pdf --ttf-dir output/fonts/ttffonts --title secret
Вы несёте ответственность за то, как вы используете этот инструмент. Применение этой техники к системам или лицам без явного разрешения неэтично и может быть незаконным. Авторы предоставляют этот инструмент, чтобы помочь защитникам понять и протестировать этот класс уязвимостей, а не для организации атак.
Этот инструмент был создан, чтобы помочь специалистам red team проверить риски атак на основе шрифтов против их организаций. Он также был создан, чтобы помочь специалистам blue team, исследователям и владельцам систем понять пробелы в безопасности, которые остаются из-за доверия к пользовательским шрифтам. Ниже приведены практические рекомендации для частных лиц и индустрии по устранению или смягчению проблемы, которую шрифты представляют в современных операционных системах и приложениях.
curl напрямую в bash / Invoke-Expression. Злоумышленнику легко подменить сайт, с которого вы загружаете.Win + R, пугающим всплывающим окном о том, что это очень рискованно, при первом использовании (понятия не имею, почему этого ещё нет...).Вклад приветствуется. Если вы нашли новую поверхность атаки, улучшение конвейера генерации шрифтов или технику защиты, которую стоит задокументировать, пожалуйста, откройте issue или PR.
git checkout -b feature/my-feature)Этот инструмент очень сложно тестировать из-за сложности документов Word, PDF и шрифтов. Если вы нашли воспроизводимую проблему, пожалуйста, откройте issue на GitHub, и я займусь ею как можно скорее.
Пожалуйста, укажите в issue следующее:
mismatch)..docx / вводные данные, воспроизводящие проблему, если вы можете их предоставить.font_name |
| Префикс внутреннего имени для создаваемого семейства шрифтов |
| Аргумент | Описание |
|---|
input_human_file | Текст, видимый человеку. Может быть многострочным |
input_computer_file | Текст, видимый машинам / ИИ. Может быть многострочным |
output_file | Путь для создаваемого DOCX-файла |
font_name | Название семейства шрифтов (должно совпадать с шагом create) |
--author | Метаданные автора документа DOCX (по умолчанию: нет) |
--ttf-dir | Каталог TTF-шрифтов Evil Font (например, <output_dir>/ttffonts). Если указан, фактически используемые шрифты встраиваются непосредственно в .docx, так что обман отображается корректно без установки в системе. Встраиваются только буквы, входящие в human-файл. |
| Аргумент | Описание |
|---|
input_docx | Путь к DOCX с Evil Font (из шага doc) |
output_file | Путь для создаваемого PDF-файла |
--ttf-dir | Каталог TTF-шрифтов Evil Font (например, <output_dir>/ttffonts), доступный LibreOffice, чтобы маскировка отображалась. Опускайте, только если шрифты установлены в системе или встроены в файл |
--dpi | Качество растеризации видимого слоя (по умолчанию: 200) |
--soffice | Путь к исполняемому файлу LibreOffice (по умолчанию: soffice) |
--ink-font | TTF для невидимого слоя копирования (по умолчанию: системный шрифт без засечек) |
--title | Метаданные заголовка PDF-документа (по умолчанию: Untitled) |
--author | Метаданные автора PDF-документа (по умолчанию: нет) |
--subject | Метаданные темы PDF-документа (по умолчанию: нет) |
--producer | Метаданные производителя PDF-документа (по умолчанию: нет) |