
Un outil d'analyse et de classification de malwares.
Inhale est un outil d'analyse et de classification de malwares capable d'automatiser et de mettre à l'échelle de nombreuses opérations d'analyse statique.
Ceci est la version bêta, destinée aux tests, aux retours et au développement communautaire.
Inhale a commencé comme une série de petits scripts que j'utilisais pour collecter et analyser une grande quantité de malwares provenant de sources diverses. Il existe de nombreux frameworks et outils pour effectuer un travail similaire, mais aucun ne correspondait vraiment à mon flux de travail pour trouver rapidement, classifier et stocker des informations sur un grand nombre de fichiers. Certains nécessitent également des clés API coûteuses et d'autres services payants.
J'ai fini par transformer ces scripts en quelque chose que les gens peuvent rapidement installer et utiliser, que ce soit depuis un serveur de recherche, un ordinateur portable, ou un ordinateur bon marché comme un Raspberry Pi.
Cet outil est conçu pour fonctionner sous Linux avec Python3, ElasticSearch, radare2, yara et binwalk. jq est également nécessaire pour afficher joliment la sortie de la base de données. Voici quelques instructions de base pour l'installation.
Il y a un certain nombre de choses dans le fichier config.yml qui ne sont pas encore configurées, laissez-les tranquilles sauf indication contraire dans cette documentation.
Installer les dépendances
python3 -m pip install -r requirements.txt
Une base de données n'est pas nécessaire pour utiliser Inhale, mais si vous souhaitez en configurer une, suivez ces instructions et définissez l'option "enable_database" du fichier config.yml sur True.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo service elasticsearch start
Vous pouvez également installer manuellement en suivant cette documentation
Vous pouvez également mettre en place une pile ELK complète à des fins de visualisation et d'analyse de données. Ce n'est pas nécessaire pour utiliser cet outil.
Il est important d'installer radare2 depuis le dépôt, et non depuis votre gestionnaire de paquets. Les versions du gestionnaire de paquets ne comportent pas toutes les fonctionnalités nécessaires pour inhale.
git clone https://github.com/radare/radare2
cd radare2
sys/install.sh
sudo apt-get install automake libtool make gcc
wget https://github.com/VirusTotal/yara/archive/v3.10.0.tar.gz
tar xvzf v3.10.0.tar.gz
cd yara-3.10.0/
./bootstrap.sh
./configure
make
sudo make install
Si vous obtenez des erreurs concernant les objets partagés, essayez ceci pour résoudre le problème.
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig
Il est probablement préférable d'installer simplement binwalk depuis le dépôt.
git clone https://github.com/ReFirmLabs/binwalk
cd binwalk
sudo python3 setup.py install
Plus d'informations sur l'installation de fonctionnalités supplémentaires pour binwalk se trouvent ici.
Il s'agit d'une bibliothèque qui hache les sections des fichiers ELF pour l'analyse des familles de malwares. telfhash dépend de tlsh, donc les instructions pour installer les deux sont les suivantes :
Configuration de tlsh
git clone https://github.com/trendmicro/tlsh
cd tlsh
./make.sh
cd py_ext/
python3 ./setup.py build
sudo python3 ./setup.py install
Configuration de telfhash
git clone https://github.com/trendmicro/telfhash
cd telfhash
sudo python3 setup.py install
Si vous souhaitez utiliser un serveur web pour héberger la sortie d'inhale et la partager, définissez les variables dans config.yml avec les chemins appropriés et assurez-vous que les répertoires existent !
web:
gen_html: False
webdir: "/var/www/html/" # The actual web directory
fqdn: "http://threat.land" # Your website
in_path: "/var/www/html/inhaled/" # The path to inhale output
ex_path: "/var/www/html/exhaled/" # The path for db query cache output
Pour utiliser la sortie HTML, exécutez inhale comme ceci :
python3 inhale.py [all your args here] --html
Spécifiez le fichier que vous analysez par type :
-f INFILE Analyser un seul fichier
-d DIRECTORY Analyser un répertoire de fichiers
-u URLFILE Analyser un fichier distant (url)
-r RDIRECTORY Analyser un répertoire distant (url)
-l URLLIST Analyser une liste d'URL dans un fichier texte
Autres options :
-t TAGS Ajouter des balises supplémentaires à la sortie.
-b Désactiver les signatures binwalk
-y YARARULES Spécifier des règles Yara personnalisées
-o OUTDIR Stocker les fichiers analysés dans un répertoire de sortie spécifique (par défaut : ./files/<date>/)
-i Afficher uniquement les informations, ne pas ajouter les fichiers à la base de données
--html Enregistrer la sortie au format HTML dans le répertoire web.
L'exécution de inhale.py effectuera toutes les analyses sur un fichier/répertoire/URL donné et les affichera dans votre terminal.
Afficher les informations sur /bin/ls, sans l'ajouter à la base de données
python3 inhale.py -f /bin/ls -i
Ajouter le répertoire 'malwarez' à la base de données
python3 inhale.py -d malwarez/
Télécharger ce fichier et l'ajouter à la base de données
python3 inhale.py -u https://thugcrowd.com/chal/skull
Télécharger tout le contenu de ce répertoire distant, et tout étiqueter comme "phishing" :
python3 inhale.py -r http://someurl.com/opendir/ -t phishing
ASTUCE : Utilisez cette recherche de hashtag Twitter pour trouver des répertoires ouverts intéressants pouvant contenir des malwares. Utilisez à vos propres risques.
Vous pouvez passer vos propres règles yara avec -y, c'est un énorme travail en cours et presque tout ce qui se trouve dans "YaraRules" provient de https://github.com/kevthehermit/PasteHunter/tree/master/YaraRules. Merci à @KevTheHermit
Utilisez db.sh pour interroger (bientôt un joli script)
db.sh *something* | jq .
Voici le modèle de données actuellement utilisé pour la base de données elasticsearch. Tous ces champs ne seront pas utilisés pour chaque fichier donné. Les balises r2_* sont généralement réservées aux binaires d'une certaine sorte.