
Un outil de déception basé sur les polices de caractères pour le red teaming, la recherche en sécurité, et tout le reste.
Un outil de déception basé sur les polices pour le red teaming, la recherche en sécurité, et tout le reste.
EvilFontTool dissimule du texte lisible par machine dans un document qui affiche un texte complètement différent au lecteur humain. Pour ce faire, il utilise des Evil Fonts — des polices qui trompent intentionnellement l'observateur en affichant une lettre différente de celle comprise par un ordinateur. En remappant les glyphes de la police, les caractères visibles du document montrent une chose aux humains tandis que les terminaux, les systèmes d'IA et le copier-coller en voient une autre.
Les démos au format Word docx ne fonctionnent PAS sur mobile à cause de la manière dont les téléphones mobiles rendent les polices.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
Pour le développement (installation éditable) :
pip install -e .
Installées automatiquement via pip :
fonttools — parsing et manipulation de policesbrotli — compression WOFF2 (utilisé par fonttools)python-docx — génération de DOCXreportlab — génération de PDFpdf2image — conversion PDF vers imagepdfminer.six — extraction de texte/disposition PDFPillow — traitement d'images pour le pipeline PDFExigences système (non installées par pip — doivent être dans votre PATH) :
pdf, qui fait appel à soffice --headless pour convertir le DOCX en PDF. La commande pdf est expérimentale sous Windows et peut ne pas fonctionner comme prévu.
sudo apt install libreofficebrew install --cask libreofficepdf2image pour rendre les pages PDF de la commande pdf
sudo apt install poppler-utilsbrew install popplerInstallez poppler dans ~\Documents\poppler et ajoutez-le au chemin.
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 est expérimentale sous Windows et peut ne pas fonctionner comme prévu.pdf ne fonctionne pas avec les documents Word complexes, ex. les colonnes. N'hésitez pas à ouvrir une issue si vous voulez vraiment qu'une fonctionnalité soit prise en charge.doc --ttf-dir <ttffonts_dir> (EvilFontTool les intègre lui-même) ou Word sous Windows. L'option "intégrer les polices" de LibreOffice ne fonctionne pas avec les Evil Fonts.La commande pdf ne repose pas du tout sur les Evil Fonts. Elle convertit le DOCX en image (la page visible est donc une image, pas du texte), puis dessine le vrai texte machine par-dessus sous forme de texte entièrement invisible et sélectionnable. Le copier-coller et l'extraction de texte lisent cette couche invisible à la place. Il existe quelques autres outils capables de faire cela, mais rien d'aussi simple que la commande pdf quand vous avez déjà un DOCX qui vous convient.
Si vous voulez un véritable PDF Evil Font, vous devez créer le document Word sans lettres invisibles (les lettres invisibles ne survivent pas à la conversion PDF). Ensuite, exportez directement depuis Word ou utilisez "Imprimer au format PDF". Cela conserve tout sur une seule couche, donnant au document des IOC différents du célèbre truc à deux couches utilisé par la commande pdf. La commande pdf existe uniquement parce que ce processus manuel est fastidieux, et parfois vous voulez juste une copie PDF rapide d'un document Word.
TLDR;
pdf → PDF à deux couches, même mécanisme que les autres outils (plus connu/détectable).Si quelqu'un trouve comment réussir l'option 2 avec des lettres invisibles, je lui dois un verre. Ouvrez une issue et je vous créditerai dans le README.
Toutes les fonctionnalités sont exposées via une seule interface CLI avec quatre sous-commandes.
create — Générer la famille de polices pour une utilisation dans les fichiers HTML ou DOCevilfonttool create <reference_font> <output_dir> <font_name>
| Argument | Description |
|---|---|
reference_font | Chemin vers une police source .ttf ou .woff |
output_dir | Répertoire dans lequel écrire les polices et le CSS |
Exemple :
evilfonttool create fonts/Arial.ttf output/ 'Arial'
Sorties :
output/fonts/*.woff — polices web, une par caractèreoutput/ttffonts/*.ttf — polices TTF pour l'intégration dans les documentsoutput/fonts.css — déclarations @font-face pour une utilisation web.txt simples.computer_file doit être égale ou plus longue que la ligne correspondante du human_fileweb — Générer un fichier HTML Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Nécessite que
fonts.csset les polices générées soient dans le répertoire de sortie pour que le fichier HTML puisse les utiliser (ou modifiez le chemin dans le fichier HTML).
| Argument | Description |
|---|---|
input_human_file | Texte visible par les lecteurs humains. Peut comporter plusieurs lignes |
input_computer_file | Texte visible par les machines / l'IA. Peut comporter plusieurs lignes |
output_file | Chemin du fichier HTML généré |
Exemple :
evilfonttool web human.txt computer.txt output/index.html
doc — Générer un fichier DOCX Evil Fontevilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]
Le
font_namedoit correspondre au nom utilisé à l'étapecreate. Les polices TTF doivent être installées sur le système, intégrées via--ttf-dir, ou intégrées manuellement dans Word (fichier -> options -> enregistrement -> intégrer les polices) pour que la tromperie s'affiche correctement.
L'option d'enregistrement "intégrer les polices" de Word fonctionne bien, mais celle de LibreOffice non — je n'ai jamais réussi à lui faire intégrer correctement les Evil Fonts. Utilisez plutôt --ttf-dir : EvilFontTool intègre lui-même les polices, directement dans le .docx, sans dépendre du tout de l'intégration de Word ou de LibreOffice.
Exemple :
evilfonttool doc human.txt computer.txt output/secret.docx MyFont --author "Finance Team" --ttf-dir output/ttffonts
pdf — Convertir un DOCX Evil Font en un PDF sûr pour le copier-collerevilfonttool pdf <input_docx> <output_file> [--ttf-dir DIR] [--dpi DPI] [--soffice PATH] [--ink-font FONT] [--title TITLE] [--author AUTHOR] [--subject SUBJECT] [--producer PRODUCER]
Convertit le DOCX avec LibreOffice pour que le PDF soit identique au document, puis superpose la charge utile cachée en couche de copie invisible afin qu'elle survive au copier-coller dans tous les lecteurs.
Windows : Cette commande est expérimentale sous Windows et peut ne pas fonctionner comme prévu.
Nécessite LibreOffice (
soffice) etpoppler-utils— voir Dépendances.
Exemple :
evilfonttool pdf output/secret.docx output/secret.pdf --ttf-dir output/fonts/ttffonts --title secret
Vous êtes responsable de l'utilisation que vous faites de cet outil. Déployer cette technique contre des systèmes ou des individus sans autorisation explicite est contraire à l'éthique et peut être illégal. Les auteurs fournissent cet outil pour aider les défenseurs à comprendre et tester cette classe de vulnérabilité — pas pour faciliter des attaques.
Cet outil a été créé pour aider les red teamers à valider les risques des attaques basées sur les polices contre leurs organisations. Il a également été créé pour aider les blue teamers, les chercheurs et les propriétaires de systèmes à comprendre les failles de sécurité laissées par la confiance intrinsèque accordée aux polices fournies par l'utilisateur. Voici quelques recommandations pratiques destinées aux individus et à l'industrie pour traiter ou atténuer les problèmes que les polices posent dans les systèmes d'exploitation et applications modernes.
curl directement dans bash / Invoke-Expression. Il est facile pour un attaquant de détourner le site à partir duquel vous téléchargez.Win + R avec un popup effrayant indiquant à quel point c'est risqué la première fois qu'ils le font (je ne sais pas pourquoi ça n'existe pas déjà...).Les contributions sont les bienvenues. Si vous avez trouvé une nouvelle surface d'attaque, une amélioration du pipeline de génération de polices, ou une technique de défense qui mérite d'être documentée, veuillez ouvrir une issue ou une PR.
git checkout -b feature/my-feature)Cet outil est vraiment difficile à tester en raison de la complexité des documents Word, des PDF et des polices. Si vous rencontrez un problème reproductible, veuillez ouvrir une issue GitHub et je m'en occuperai dès que possible.
Veuillez inclure les éléments suivants dans l'issue :
mismatch)..docx / une entrée minimale qui reproduit le problème, si vous pouvez en partager un.font_name | Préfixe de nom interne pour la famille de polices générée |
| Argument | Description |
|---|
input_human_file | Texte visible par les lecteurs humains. Peut comporter plusieurs lignes |
input_computer_file | Texte visible par les machines / l'IA. Peut comporter plusieurs lignes |
output_file | Chemin du fichier DOCX généré |
font_name | Nom de la famille de polices (doit correspondre à l'étape create) |
--author | Métadonnée d'auteur du document DOCX (par défaut : aucune) |
--ttf-dir | Répertoire des TTF Evil Font (ex. <output_dir>/ttffonts). S'il est fourni, les polices réellement utilisées sont intégrées directement dans le .docx, afin que la tromperie s'affiche correctement sans les installer à l'échelle du système. N'intègre que les lettres présentes dans le fichier humain. |
| Argument | Description |
|---|
input_docx | Chemin vers le DOCX Evil Font (issu de l'étape doc) |
output_file | Chemin du fichier PDF généré |
--ttf-dir | Répertoire des TTF Evil Font (ex. <output_dir>/ttffonts), exposé à LibreOffice pour que le déguisement s'affiche. À omettre uniquement si les polices sont installées à l'échelle du système ou intégrées dans le fichier |
--dpi | Qualité de rastérisation de la couche visible (par défaut : 200) |
--soffice | Chemin vers le binaire LibreOffice (par défaut : soffice) |
--ink-font | TTF pour la couche de copie invisible (par défaut : une sans-serif système) |
--title | Métadonnée de titre du document PDF (par défaut : Untitled) |
--author | Métadonnée d'auteur du document PDF (par défaut : aucune) |
--subject | Métadonnée de sujet du document PDF (par défaut : aucune) |
--producer | Métadonnée de producteur du document PDF (par défaut : aucune) |