
Analyseur statique de vulnérabilités dans les binaires utilisant l'interprétation abstraite sur le Pcode de Ghidra. Détecte des classes CWE telles que les débordements de tampon, les utilisations après libération et les injections de commandes via l'exécution symbolique avec Z3.
BinAbsInspector (Binary Abstract Inspector) est un analyseur statique pour la rétro-ingénierie automatisée et la recherche de vulnérabilités dans les binaires. Il s'agit d'un projet de recherche à long terme hébergé chez Keenlab. Il est basé sur l'interprétation abstraite avec le support de Ghidra. Il fonctionne sur le Pcode de Ghidra plutôt que sur l'assembleur. Actuellement, il prend en charge les binaires sur x86, x64, armv7 et aarch64.
z3-${version}-win/binz3-${version}-glibc-${version}/bin/*.so vers /usr/local/lib/Compilez l'extension vous-même, si vous souhaitez développer une nouvelle fonctionnalité, veuillez vous référer au guide de développement.
gradle buildExtension à la racine du dépôtdist/${GhidraVersion}_${date}_BinAbsInspector.zipVous pouvez exécuter BinAbsInspector en mode headless, en mode GUI, ou avec Docker.
$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"
<projectPath> -- Chemin du projet Ghidra.
<projectName> -- Nom du projet Ghidra.
<scriptParams> -- Les arguments pour notre analyseur, fournissant les options suivantes :
| Paramètre | Description |
|---|---|
[-K <kElement>] | Limite de taille KSet K |
[-callStringK <callStringMaxLen>] | Longueur maximale de la chaîne d'appel K |
[-Z3Timeout <timeout>] | Timeout Z3 |
[-timeout <timeout>] | Timeout d'analyse |
[-entry <address>] | Adresse d'entrée |
[-externalMap <file>] | Configuration du modèle de fonction externe |
[-json] | Sortie au format json |
[-disableZ3] | Désactiver Z3 |
[-all] | Activer tous les checkers |
[-debug] | Activer les logs de débogage |
[-check "<cweNo1>[;<cweNo2>...]"] | Activer des checkers spécifiques |
Avec la GUI de Ghidra
Window -> Script Manager et trouvez BinAbsInspector.javaBinAbsInspector.java, définissez les paramètres dans la fenêtre de configuration et cliquez sur OKAvec 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>
Jusqu'à présent, BinAbsInspector prend en charge les checkers suivants :
La structure de ce projet est la suivante, veuillez vous référer aux détails techniques ou à l'article en version chinoise pour plus de détails.
├── main
│ ├── java
│ │ └── com
│ │ └── bai
│ │ ├── checkers implémentation des checkers
│ │ ├── env
│ │ │ ├── funcs modélisation des fonctions
│ │ │ │ ├── externalfuncs modélisation des fonctions externes
│ │ │ │ └── stdfuncs modélisation de la std C++
│ │ │ └── region modélisation de la mémoire
│ │ ├── solver noyau d'analyse et module de graphe
│ │ └── util utilitaires
│ └── resources
└── test
Vous pouvez également construire la javadoc avec gradle javadoc ; la documentation de l'API sera générée dans ./build/docs/javadoc.
Nous utilisons Ghidra comme fondation et tirons souvent parti de JImmutable Collections pour de meilleures performances.
Nous tenons à les remercier pour leur grande aide !