
Scanner di vulnerabilità binario statico che utilizza l'interpretazione astratta su Ghidra Pcode. Rileva classi CWE come buffer overflow, use-after-free e iniezione di comandi tramite esecuzione simbolica con Z3.
BinAbsInspector (Binary Abstract Inspector) è un analizzatore statico per il reverse engineering automatizzato e la scansione di vulnerabilità nei binari, un progetto di ricerca a lungo termine incubato presso Keenlab. Si basa sull'interpretazione astratta con il supporto di Ghidra. Lavora sul Pcode di Ghidra invece dell'assembly. Attualmente supporta binari su x86, x64, armv7 e aarch64.
z3-${version}-win/binz3-${version}-glibc-${version}/bin/*.so in /usr/local/lib/Compila l'estensione da solo, se vuoi sviluppare una nuova funzionalità, consulta la guida allo sviluppo.
gradle buildExtension nella root del repositorydist/${GhidraVersion}_${date}_BinAbsInspector.zipPuoi eseguire BinAbsInspector in modalità headless, modalità GUI o con docker.
$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"
<projectPath> -- Percorso del progetto Ghidra.
<projectName> -- Nome del progetto Ghidra.
<scriptParams> -- L'argomento per il nostro analizzatore, fornisce le seguenti opzioni:
Con GUI di Ghidra
Window -> Script Manager e trova BinAbsInspector.javaBinAbsInspector.java, imposta i parametri nella finestra di configurazione e clicca OKCon Docker
git clone [email protected]:KeenSecurityLab/BinAbsInspector.git
cd BinAbsInspector
docker build . -t bai
docker run -v $(pwd):/data/workspace bai "@@<script parameters>" -import <file>
Finora BinAbsInspector supporta i seguenti checker:
La struttura di questo progetto è la seguente, per maggiori dettagli consulta i dettagli tecnici o l'articolo in cinese.
├── main
│ ├── java
│ │ └── com
│ │ └── bai
│ │ ├── checkers implementazione checker
│ │ ├── env
│ │ │ ├── funcs modellazione funzioni
│ │ │ │ ├── externalfuncs modellazione funzioni esterne
│ │ │ │ └── stdfuncs modellazione std cpp
│ │ │ └── region modellazione memoria
│ │ ├── solver modulo nucleo analisi e grafo
│ │ └── util utilità
│ └── resources
└── test
Puoi anche compilare la javadoc con gradle javadoc, la documentazione API verrà generata in ./build/docs/javadoc.
Utilizziamo Ghidra come nostra base e sfruttiamo spesso JImmutable Collections per ottenere prestazioni migliori.
Qui vorremmo ringraziarli per il grande aiuto!
| Parametro | Descrizione |
|---|
[-K <kElement>] | Limite dimensione KSet K |
[-callStringK <callStringMaxLen>] | Lunghezza massima della call string K |
[-Z3Timeout <timeout>] | Timeout Z3 |
[-timeout <timeout>] | Timeout analisi |
[-entry <address>] | Indirizzo di ingresso |
[-externalMap <file>] | Configurazione modello funzioni esterne |
[-json] | Output in formato json |
[-disableZ3] | Disabilita Z3 |
[-all] | Abilita tutti i checker |
[-debug] | Abilita output log di debug |
[-check "<cweNo1>[;<cweNo2>...]"] | Abilita checker specifici |