
Uno strumento di inganno basato sui font per red teaming, ricerca sulla sicurezza e quant'altro.
Uno strumento di inganno basato sui font per red teaming, ricerca sulla sicurezza e qualsiasi altra cosa.
EvilFontTool nasconde testo leggibile dalla macchina all'interno di un documento che mostra testo completamente diverso a un lettore umano. Lo fa usando Evil Fonts — font che ingannano deliberatamente l'osservatore visualizzando una lettera diversa da quella compresa da un computer. Rimappando i glifi dei font, i caratteri visibili del documento mostrano agli umani una cosa, mentre terminali, sistemi AI e copia/incolla degli appunti ne vedono un'altra.
Le demo in formato docx NON funzionano su mobile a causa del modo in cui i telefoni renderizzano i font.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
Per lo sviluppo (installazione modificabile):
pip install -e .
Installate automaticamente tramite pip:
fonttools — parsing e manipolazione dei fontbrotli — compressione WOFF2 (usata da fonttools)python-docx — generazione di DOCXreportlab — generazione di PDFpdf2image — conversione da PDF a immaginepdfminer.six — estrazione di testo/layout da PDFPillow — gestione delle immagini per il pipeline PDFRequisiti di sistema (non installati da pip — devono essere nel tuo PATH):
pdf, che chiama soffice --headless per convertire DOCX in PDF. Il comando pdf è sperimentale su Windows e potrebbe non funzionare come previsto.
sudo apt install libreofficebrew install --cask libreofficepdf2image per renderizzare le pagine PDF per il comando pdf
sudo apt install poppler-utilsbrew install popplerInstalla poppler in ~\Documents\poppler e aggiungilo al 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 è sperimentale su Windows e potrebbe non funzionare come previsto.doc --ttf-dir <ttffonts_dir> (EvilFontTool li incorpora da solo) oppure Word su Windows. L'opzione "embed fonts" di LibreOffice non funziona con gli Evil Fonts.Il comando pdf non si basa affatto sugli Evil Fonts. Renderizza il DOCX come immagine (quindi la pagina visibile è un'immagine, non testo), poi disegna sopra il vero testo leggibile dalla macchina come testo completamente invisibile e selezionabile. Copia e incolla e l'estrazione del testo leggono quel livello invisibile. Ci sono alcuni altri strumenti che possono farlo, ma niente è semplice come il comando pdf quando hai già un DOCX che ti piace.
Se vuoi un vero PDF con Evil Font, devi creare il documento Word senza lettere invisibili (le lettere invisibili non sopravvivono alla conversione in PDF). Da lì, esporta direttamente da Word oppure usa "Stampa su PDF". Questo mantiene tutto su un singolo livello, dando al documento IOC diversi rispetto al noto trucco a due livelli usato dal comando pdf. Il comando pdf esiste unicamente perché quel processo manuale è noioso, e a volte vuoi solo una rapida copia PDF di un documento Word.
TLDR;
Se qualcuno scopre come realizzare l'Opzione 2 con lettere invisibili, ti devo un drink. Apri un issue e ti accrediterò nel README.
Tutte le funzionalità sono esposte tramite una singola CLI con quattro sottocomandi.
create — Genera la famiglia di font per l'uso in file HTML o DOCevilfonttool create <reference_font> <output_dir> <font_name>
| Argomento | Descrizione |
|---|---|
reference_font | Percorso di un font sorgente .ttf o .woff |
output_dir | Directory in cui scrivere font e CSS |
Esempio:
evilfonttool create fonts/Arial.ttf output/ 'Arial'
Output:
output/fonts/*.woff — web font, uno per carattereoutput/ttffonts/*.ttf — font TTF per l'incorporamento nei documentioutput/fonts.css — dichiarazioni @font-face per l'uso sul web.txt semplici.computer_file deve essere uguale o più lunga della riga corrispondente in human_fileweb — Genera un file HTML con Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Richiede che
fonts.csse i font generati siano nella directory di output così il file HTML può usarli (o modifica il percorso nel file HTML).
| Argomento | Descrizione |
|---|---|
input_human_file | Testo visibile ai lettori umani. Può avere più righe |
input_computer_file | Testo visibile alle macchine / AI. Può avere più righe |
output_file | Percorso per il file HTML generato |
Esempio:
evilfonttool web human.txt computer.txt output/index.html
doc — Genera un file DOCX con Evil Fontevilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]
Il
font_namedeve corrispondere al nome usato nel passaggiocreate. I font TTF devono essere installati sul sistema, incorporati tramite--ttf-dir, oppure incorporati manualmente in Word (file -> opzioni -> salvataggio -> incorpora i font) affinché l'inganno venga renderizzato correttamente.
L'opzione di salvataggio "incorpora font" di Word funziona bene, ma quella di LibreOffice no — non sono mai riuscito a fargli incorporare correttamente gli Evil Fonts. Usa invece --ttf-dir: EvilFontTool incorpora i font da solo, direttamente nel .docx, senza dipendere affatto dall'incorporamento di Word o LibreOffice.
Esempio:
evilfonttool doc human.txt computer.txt output/secret.docx MyFont --author "Finance Team" --ttf-dir output/ttffonts
pdf — Converte un DOCX con Evil Font in un PDF sicuro per copia e incollaevilfonttool pdf <input_docx> <output_file> [--ttf-dir DIR] [--dpi DPI] [--soffice PATH] [--ink-font FONT] [--title TITLE] [--author AUTHOR] [--subject SUBJECT] [--producer PRODUCER]
Renderizza il DOCX con LibreOffice così il PDF appare identico al documento, poi sovrappone il payload nascosto come livello di copia invisibile, così sopravvive al copia e incolla in ogni visualizzatore.
Windows: Questo comando è sperimentale su Windows e potrebbe non funzionare come previsto.
Richiede LibreOffice (
soffice) epoppler-utils— vedi Dipendenze.
Esempio:
evilfonttool pdf output/secret.docx output/secret.pdf --ttf-dir output/fonts/ttffonts --title secret
Sei responsabile dell'uso che fai di questo strumento. Implementare questa tecnica contro sistemi o individui senza un'autorizzazione esplicita è antietico e potrebbe essere illegale. Gli autori forniscono questo strumento per aiutare i difensori a capire e testare questa classe di vulnerabilità — non per abilitare attacchi.
Questo strumento è stato creato per aiutare i red teamer a validare i rischi degli attacchi basati sui font contro le loro organizzazioni. È stato creato anche per aiutare i blue teamer, i ricercatori e i proprietari di sistemi a comprendere le lacune di sicurezza lasciate dalla fiducia intrinseca nei font forniti dall'utente. Di seguito alcune raccomandazioni pratiche per individui e industria per affrontare o mitigare il problema che i font pongono nei sistemi operativi e nelle applicazioni moderne.
curl in bash / Invoke-Expression. È facile per un attaccante cambiare il sito da cui stai scaricando.Win + R con un popup spaventoso che dice quanto sia rischioso la prima volta che lo fanno (non so perché non esista già...).I contributi sono benvenuti. Se hai trovato una nuova superficie d'attacco, un miglioramento al pipeline di generazione dei font, o una tecnica di difesa che vale la pena documentare, apri pure un issue o una PR.
git checkout -b feature/my-feature)Questo strumento è davvero difficile da testare a causa della complessità dei documenti Word, dei pdf e dei font. Se trovi un problema riproducibile, apri un GitHub issue e ci darò un'occhiata appena possibile.
Includi nel issue quanto segue:
mismatch)..docx / input minimale che lo riproduce, se puoi condividerlo.font_name | Prefisso del nome interno per la famiglia di font generata |
| Argomento | Descrizione |
|---|
input_human_file | Testo visibile ai lettori umani. Può avere più righe |
input_computer_file | Testo visibile alle macchine / AI. Può avere più righe |
output_file | Percorso per il file DOCX generato |
font_name | Nome della famiglia di font (deve corrispondere al passaggio create) |
--author | Metadati autore del documento DOCX (default: nessuno) |
--ttf-dir | Directory dei TTF degli Evil Fonts (es. <output_dir>/ttffonts). Se specificata, i font effettivamente usati vengono incorporati direttamente nel .docx, così l'inganno viene renderizzato correttamente senza installarli a livello di sistema. Incorpora solo le lettere presenti nel file human. |
| Argomento | Descrizione |
|---|
input_docx | Percorso del DOCX con Evil Font (dal passaggio doc) |
output_file | Percorso per il file PDF generato |
--ttf-dir | Directory dei TTF degli Evil Fonts (es. <output_dir>/ttffonts), esposta a LibreOffice affinché il travestimento venga renderizzato. Ometti solo se i font sono installati a livello di sistema o incorporati nel file |
--dpi | Qualità di rasterizzazione del livello visibile (default: 200) |
--soffice | Percorso del binario di LibreOffice (default: soffice) |
--ink-font | TTF per il livello di copia invisibile (default: un sans di sistema) |
--title | Metadati del titolo del documento PDF (default: Untitled) |
--author | Metadati dell'autore del documento PDF (default: nessuno) |
--subject | Metadati dell'oggetto del documento PDF (default: nessuno) |
--producer | Metadati del produttore del documento PDF (default: nessuno) |