Enkidu est un outil de pentest automatique spécialisé dans l'analyse et l'exploitation de binaires.
Enkidu est un projet open-source développé dans le cadre d'un projet technique en master de cybersécurité. Ce projet vise à fournir un outil robuste et automatisé pour les tests de pénétration sur des binaires, permettant d'énumérer automatiquement des binaires et de découvrir et exploiter des vulnérabilités.
Pour la partie enumération du binaire, Enkidu utilise la sortie des commandes :
-
file
-
checksec
-
strings
-
ldd
Ensuite, Enkidu traite la sortie de chacune de ces commandes afin de l'unifier dans un json qui servira de base pour l'analyse.
Pour obtenir le code assembleur du binaire, Enkidu cherche dans le contenue des sections .text
, .rodata
etc.. grâce aux librairies elftools
& capstone
.
Pour l'obtention du pseudo code C, Enkidu utilise Ghidra
et son scripts AnalyseHeadless
afin d'executer Ghidra en ligne de commande avec mon script de decompilateur dans /decompile_zone/script/decompiler.py
.
Afin d'avoir un pseudo code C lisible avec des noms de fonctions et de variable compréhensibles, l'utilisateur peut choisir grâce à l'argument -ai / --aiAssist
de modifier le pseudo code et d'obtenir un paragraphe explicatif du code grâce à l'API de ChatGPT
.
En ce qui concerne la génération de rapports, Enkidu utilise :
-
markdown
pour convertir le texte formaté en Markdown en HTML. Cela permet une flexibilité dans la rédaction du contenu du rapport, qui peut ensuite être facilement converti en un format web visualisable. -
WeasyPrint
pour convertir des documents HTML en PDF. Elle joue un rôle crucial dans report.py en transformant le contenu HTML généré à partir de Markdown en un document PDF final, permettant une distribution et un archivage faciles des rapports.
-
Enumération d'information binaire :
-
Traitement de la commande
file
. -
Traitement de la commande
checksec
. -
Traitement de la commande
strings
:-
Fonctions.
-
Messages d'erreur/succès.
-
-
Traitement de la commande
ldd
. -
Récupération des sections du binaire.
-
Obtention du code assembleur.
-
-
Obtention de pseudo code C.
-
Analyse automatique des binaires pour identifier les vulnérabilités :
-
Déterminer les fonctions vulnérables.
-
Analyse des sécurités du binaire.
-
-
Analyser les outputs grâce à ChatGPT.
-
Tentatives d'exploitation automatiques pour contourner les défenses des binaires.
-
Fuzztesting des entrées utilisateurs.
-
level 0 : Test avec les strings récupéré avant.
-
level 1 : fuzztesting avancé. (annulé pour l'instant)
-
-
Tentative d'exploitation binaire.
-
Tentative d'exploitation de format de chaine.
-
-
Génération de rapport.
-
Rapport en
markdown
fait. -
Rapport en
HTML/CSS
fait. -
Rapport
PDF
fait.
-
-
Interface utilisateur intuitive pour faciliter l'utilisation et l'interprétation des résultats.
-
Prise en charge de différents types de binaires et architectures.
Pour installer Enkidu, suivez les étapes suivantes :
- Clonez ce référentiel sur votre machine locale :
git clone https://github.com/Igaemas/Enkidu.git
- Accédez au répertoire Enkidu :
cd enkidu
- Installer les dépendances et outils:
chmod +x setup.sh
./setup.sh
- Pour utiliser l'option IA, créé une clé api openai puis:
echo "OPENAI_API_KEY=<openaiAPIkey>" > app/ai_assist/.env #(si vous avec une clé API openai)
source venv/bin/activate
python3 -m app.main -t <path_to_binary>
python3 -m app.main -h
usage: main.py [-h] -t TARGET [-v] [-ai]
Target File
options:
-h, --help show this help message and exit
-t TARGET, --target TARGET
Mettre un binaire en input
-v, --verbose Affiche plus d\'informations sur l\'execution en cours
-ai, --aiAssist Permet d\'améliorer la compréhension des résultats grâce à l\'API de ChatGPT.
Enkidu/
├── app/ # Répertoire principal de l'application
│ ├── ai_assist/ # Scripts pour l'assistance AI
│ │ ├── ai_analyse.py # Script pour l'analyse AI
│ │ └── __init__.py
| |
│ ├── analyse/ # Contient des scripts pour l'analyse de binaire
│ │ ├── analyse.py # Script d'initialisation des analyses
│ │ ├── assembly.py # Script pour analyser le code assembleur
│ │ ├── get_src_code.py # Script pour obtenir le code source
│ │ ├── sections.py # Script pour analyser les sections du binaire
│ │ └── __init__.py
| |
│ ├── decompile_zone/ # Scripts pour la décompilation
│ │ ├── function_filter.py # Filtrage des fonctions
│ │ ├── get_disassembly_code.py # Récupération du code désassemblé
│ │ ├── projects/ # Projets de décompilation
│ │ ├── script/ # Scripts de décompilation
│ │ └── __init__.py
| |
│ ├── enumeration/ # Scripts pour l'énumération des binaires
│ │ ├── enum_cmd.py # Commandes pour l'énumération
│ │ ├── enum.py # Script pour lancer l'énumération
│ │ └── __init__.py
| |
│ ├── exploit_test/ # Scripts pour les tests d'exploitation
│ │ ├── buffer_overflow.py # Script pour tester les débordements de tampon
│ │ ├── exploit_test.py # Script principal pour lancer les tests d'exploitation
│ │ └── __init__.py
│ │
│ ├── __init__.py
│ ├── main.py # Point d'entrée principal du projet
│ ├── output_functions.py # Fonctions pour gérer les sorties (log, affichage)
│ ├── fuzztesting.py # Script pour le fuzz testing des binaires
│ ├── report.py # Script pour générer les rapports Markdown, HTML/CSS, PDF
│ ├── styles/ # Dossier pour les fichiers CSS et autres ressources de style
│ └── testFile/ # Dossier contenant des fichiers de test ou exemples de binaires
|
├── LICENSE # Fichier de licence pour le projet
├── login_report_2024-06-11/ # Exemple de rapport généré
│ ├── disassembly_code/ # Code désassemblé du binaire
│ ├── login_report.html # Rapport en format HTML
│ ├── login_report.md # Rapport en format Markdown
│ └── login_report.pdf # Rapport en format PDF
|
├── README.md # Fichier Markdown fournissant des informations sur le projet
├── requirements.txt # Liste des dépendances Python nécessaires
└── venv/ # Environnement virtuel Python
Les contributions sont les bienvenues ! Pour contribuer à Enkidu, veuillez suivre ces étapes :
-
Fork le projet sur GitHub.
-
Créez une nouvelle branche avec une fonctionnalité ou une correction de bug que vous souhaitez apporter.
-
Faites vos modifications et testez-les.
-
Soumettez une demande de tirage avec une description détaillée de vos modifications.
Ce projet est sous licence MIT.