
Ein Tool zur Malware-Analyse und -Klassifizierung.
Inhale ist ein Werkzeug zur Analyse und Klassifizierung von Malware, das in der Lage ist, viele statische Analysevorgänge zu automatisieren und zu skalieren.
Dies ist die Beta-Release-Version, zu Testzwecken, für Feedback und Community-Entwicklung.
Inhale begann als eine Reihe kleiner Skripte, die ich beim Sammeln und Analysieren einer großen Menge an Malware aus verschiedenen Quellen verwendete. Es gibt viele Frameworks und Werkzeuge für ähnliche Arbeiten, aber keines entsprach wirklich meinem Arbeitsablauf, der darin besteht, schnell Informationen über eine große Anzahl von Dateien zu finden, zu klassifizieren und zu speichern. Einige erfordern auch teure API-Schlüssel und andere kostenpflichtige Dienste.
Letztendlich habe ich diese Skripte in etwas verwandelt, das Leute schnell einrichten und nutzen können, egal ob von einem Forschungsserver, einem Laptop oder einem kostengünstigen Computer wie einem Raspberry Pi.
Dieses Tool ist für den Betrieb unter Linux mit Python3, ElasticSearch, radare2, yara und binwalk ausgelegt. jq wird ebenfalls benötigt, um die Ausgabe aus der Datenbank hübsch zu formatieren. Hier sind einige grundlegende Installationsanweisungen.
Es gibt eine Reihe von Dingen in der config.yml-Datei, die noch nicht eingerichtet sind; lassen Sie sie einfach, sofern in dieser Dokumentation nichts anderes angegeben ist.
Abhängigkeiten installieren
python3 -m pip install -r requirements.txt
Eine Datenbank ist für die Verwendung von Inhale nicht erforderlich. Wenn Sie jedoch eine einrichten möchten, befolgen Sie einfach diese Anweisungen und setzen Sie die config.yml-Option "enable_database" auf 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
Sie können auch manuell installieren, indem Sie dieser Dokumentation folgen
Zusätzlich können Sie einen vollständigen ELK-Stack einrichten für Visualisierungs- und Datenanalysezwecke. Es ist nicht erforderlich, um dieses Tool zu verwenden.
Es ist wichtig, radare2 aus dem Repository zu installieren, nicht über Ihren Paketmanager. Die Versionen der Paketmanager haben nicht alle erforderlichen Funktionen für 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
Wenn Sie Fehler bezüglich Shared Objects erhalten, versuchen Sie Folgendes, um das Problem zu beheben.
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig
Es ist wahrscheinlich am besten, binwalk einfach aus dem Repository zu installieren.
git clone https://github.com/ReFirmLabs/binwalk
cd binwalk
sudo python3 setup.py install
Weitere Informationen zur Installation zusätzlicher Funktionen für binwalk finden Sie hier.
Dies ist eine Bibliothek, die Abschnitte von ELF-Dateien zur Analyse von Malware-Familien hasht. telfhash benötigt tlsh, daher folgen Anweisungen zur Installation beider:
tlsh einrichten
git clone https://github.com/trendmicro/tlsh
cd tlsh
./make.sh
cd py_ext/
python3 ./setup.py build
sudo python3 ./setup.py install
telfhash einrichten
git clone https://github.com/trendmicro/telfhash
cd telfhash
sudo python3 setup.py install
Wenn Sie einen Webserver verwenden möchten, um die inhale-Ausgabe zu hosten und zu teilen, setzen Sie die Variablen in config.yml auf die entsprechenden Pfade und stellen Sie sicher, dass die Verzeichnisse existieren!
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
Um die HTML-Ausgabe zu verwenden, führen Sie inhale wie folgt aus:
python3 inhale.py [alle Ihre Argumente hier] --html
Geben Sie die Datei an, die Sie nach Typ durchsuchen:
-f INFILE Analysiert eine einzelne Datei
-d DIRECTORY Analysiert ein Verzeichnis mit Dateien
-u URLFILE Analysiert eine entfernte Datei (URL)
-r RDIRECTORY Analysiert ein entferntes Verzeichnis (URL)
-l URLLIST Analysiert eine Liste von URLs in einer Textdatei
Weitere Optionen:
-t TAGS Fügt der Ausgabe zusätzliche Tags hinzu.
-b Deaktiviert binwalk-Signaturen
-y YARARULES Gibt benutzerdefinierte Yara-Regeln an
-o OUTDIR Speichert gescrapte Dateien in einem bestimmten Ausgabeverzeichnis (Standard: ./files/<date>/)
-i Nur Informationen anzeigen, keine Dateien zur Datenbank hinzufügen
--html Speichert die Ausgabe als HTML im Webverzeichnis.
Das Ausführen von inhale.py führt alle Analysen für eine bestimmte Datei/ein bestimmtes Verzeichnis/eine bestimmte URL durch und gibt sie auf Ihrem Terminal aus.
Informationen zu /bin/ls anzeigen, aber nicht zur Datenbank hinzufügen
python3 inhale.py -f /bin/ls -i
Verzeichnis 'malwarez' zur Datenbank hinzufügen
python3 inhale.py -d malwarez/
Diese Datei herunterladen und zur Datenbank hinzufügen
python3 inhale.py -u https://thugcrowd.com/chal/skull
Alles in diesem entfernten Verzeichnis herunterladen, alles als "phishing" taggen:
python3 inhale.py -r http://someurl.com/opendir/ -t phishing
PROTIP: Nutzen Sie diese Twitter-Hashtag-Suche, um interessante offene Verzeichnisse zu finden, die möglicherweise Malware enthalten. Nutzung auf eigene Gefahr.
Sie können Ihre eigenen Yara-Regeln mit -y übergeben. Dies ist eine große Baustelle, und fast alles in "YaraRules" stammt von https://github.com/kevthehermit/PasteHunter/tree/master/YaraRules. Ein großes Dankeschön an @KevTheHermit
Verwenden Sie db.sh zum Abfragen (Bald ein schönes Skript)
db.sh *irgendwas* | jq .
Das Folgende ist das aktuelle Datenmodell, das für die Elasticsearch-Datenbank verwendet wird. Nicht alle davon werden für jede Datei verwendet. r2_*-Tags sind normalerweise für Binärdateien reserviert.
Es gibt einige bekannte Probleme mit diesem Projekt (hauptsächlich in Bezug auf Versionen aus Paketmanagern), und hier werde ich alles verfolgen, wofür es eine Lösung gibt.
Wenn Sie einen Fehler wie diesen erhalten:
elasticsearch.exceptions.RequestError: RequestError(400, 'illegal_argument_exception', 'Limit of total fields [1000] in index [inhaled] has been exceeded')
Möglicherweise haben Sie eine ältere Version von ElasticSearch. Sie können ein Upgrade durchführen oder das Feld-Limit mit diesem Einzeiler erhöhen.
curl -XPUT 'localhost:9200/inhaled/_settings' -H 'Content-Type: application/json' -d'{ "index" : { "mapping" : { "total_fields" : { "limit" : "100000" }}}}'
PRs sind willkommen! Wenn Sie spezifisches Feedback geben möchten, können Sie mir auch auf Twitter eine DM an @netspooky schicken.
Ich möchte mich bei allen bedanken, die mir beim Testen dieses Tools geholfen haben. Ich danke auch Plazmaz für die erste Durchsicht des Codes, um ihn ein wenig aufzuräumen.
Grüße an: hermit, plazmaz, nux, x0, dustyfresh, aneilan, sshell, readme, dnz, notdan, rqu, specters, nullcookies, ThugCrowd und alle, die an ThreatLand und der TC Safari Zone beteiligt sind.
| Name | Beschreibung |
|---|
| filename | Der vollständige Pfad der Binärdatei |
| file_ext | Die Dateierweiterung |
| filesize | Die Dateigröße |
| filetype | Dateityp basierend auf Magic-Wert. Nicht so zuverlässig wie binwalk-Signaturen. |
| md5 | Der MD5-Hash der Datei |
| sha1 | Der SHA1-Hash der Datei |
| sha256 | Der SHA256-Hash der Datei |
| added | Das Datum, an dem die Datei hinzugefügt wurde |
| r2_arch | Architektur der Binärdatei |
| r2_baddr | Die Basisadresse der Binärdatei |
| r2_binsz | Die Größe des Programmcodes |
| r2_bits | Architektur-Bits - 8/16/32/64 usw. |
| r2_canary | Ob Stack Canaries aktiviert sind |
| r2_class | Binärklasse |
| r2_compiled | Das Datum, an dem die Binärdatei kompiliert wurde |
| r2_dbg_file | Die Debug-Datei der Binärdatei |
| r2_intrp | Der Interpreter, den die Binärdatei aufruft, wenn sie dynamisch gelinkt ist |
| r2_lang | Die Sprache des Quellcodes |
| r2_lsyms | Ob Debug-Symbole vorhanden sind |
| r2_machine | Der Maschinentyp, normalerweise die CPU, für die die Binärdatei bestimmt ist |
| r2_os | Das Betriebssystem, auf dem die Maschine laufen soll |
| r2_pic | Ob positionsunabhängiger Code vorhanden ist |
| r2_relocs | Ob Relocation-Einträge vorhanden sind |
| r2_rpath | Der Laufzeit-Suchpfad - falls zutreffend |
| r2_stripped | Ob die Binärdatei gestripped ist |
| r2_subsys | Das Subsystem der Binärdatei |
| r2_format | Das Binärformat |
| r2_iorw | Ob ioctl-Aufrufe vorhanden sind |
| r2_type | Der Binärtyp, ob es sich um eine ausführbare Datei, ein Shared Object usw. handelt. |
| yara | Enthält eine Liste von Yara-Treffern |
| binwalk | Enthält eine Liste von binwalk-Signaturen und deren Positionen in der Binärdatei |
| tags | Alle benutzerdefinierten Tags, die mit dem Flag -t übergeben wurden. |
| url | Die Ursprungs-URL, wenn die Datei remote heruntergeladen wurde |
| urls | Alle URLs, die aus der Binärdatei extrahiert wurden |