
Stringsifter ist ein Werkzeug für maschinelles Lernen, das die Zeichenfolgen automatisch auf der Grundlage ihrer Relevanz für die Malware -Analyse bewertet.
Stringsifter benötigt Python Version 3.9 oder neuer. Führen Sie die folgenden Befehle aus, um den Code zu erhalten, Unit -Tests auszuführen und das Tool zu verwenden:
pip install stringsifterFür die Entwicklung verwenden Sie Gedichte:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with devSo führen Sie Unit -Tests aus dem Stringsifter -Installationsverzeichnis aus:
poetry run tests -v Der Befehl pip install installiert zwei runnable Skripte flarestrings und rank_strings in Ihre Python -Umgebung. Verwenden Sie bei der Entwicklung von Quelle pipenv run flarestrings und pipenv run rank_strings .
flarestrings ahmt Merkmale der strings von Gnu Binutils nach, und rank_strings akzeptiert die Rohrleitungen, z. B.:
flarestrings < my_sample > | rank_strings rank_strings unterstützt eine Reihe von Befehlszeilenargumenten. Das Positionsargument input_strings gibt eine Rangdatei an. Die optionalen Argumente sind:
| Option | Bedeutung |
|---|---|
| -Scores (-s) | Fügen Sie die Rangwerte in die Ausgabe ein |
| -limit (-l) | Limit Output auf die oberen limit beschränken |
| -min-score (-m) | Begrenzen Sie die Ausgabe auf Zeichenfolgen mit einer Punktzahl> = min-score |
| --Batch (-b) | Geben Sie einen Ordner der strings für die Stapelverarbeitung an |
Rangleichte Zeichenfolgen werden in die Standardausgabe geschrieben, es sei denn, die Option --batch ist angegeben, wodurch die Ranglistenausgänge in Dateien mit dem Namen <input_file>.ranked_strings geschrieben werden.
flarestrings unterstützt eine Option -n (oder --min-len ), um Sequenzen von Zeichen zu drucken, die mindestens min-len Zeichen lang sind, anstelle des Standards 4. Zum Beispiel:
flarestrings -n 8 < my_sample > | rank_stringsDrucken und rangieren nur Saiten mit einer Länge von 8 oder mehr.
docker build -t stringsifter -f docker/Dockerfile .flarestrings oder rank_strings -Argument aus, um den jeweiligen Befehl zu verwenden. Die Containerbefehle können in Pipelines verwendet werden: cat < my_sample > | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings-v -Flag, um ein Hostverzeichnis dem Container auszusetzen: docker run -v < my_malware > :/samples -it stringsifter wo <my_malware> enthält Beispiele für die Analyse, zum Beispiel:
docker run -v $HOME /malware/binaries:/samples -it stringsifterflarestrings /samples/ < my_sample > | rank_strings < options >Alle Befehlszeilenargumente werden in den Container -Skripten unterstützt.
Stringsifter kann auf willkürliche Listen von Zeichenfolgen angewendet werden, was es für Praktiker nützlich macht, Einblicke aus alternativen Quellen für Intelligenz-Sammeln wie Live-Speicher-Dumps, Sandbox-Läufe oder Binärdateien zu erhalten, die verschleierte Zeichenfolgen enthalten. Zum Beispiel verschluderte FLOEYEYE LABS -Verschleierung von FLOSS (FLOSS) -Schaden aus, druckbare Saiten wie Saiten , die jedoch zusätzlich verschleierte Zeichenfolgen enthüllt, die codiert, gepackt oder manuell auf dem Stapel konstruiert wurden. Es kann als Inline-Ersatz für Zeichenfolgen verwendet werden, was bedeutet, dass Stringsifter unter Verwendung des folgenden Befehls in ähnlicher Weise auf der Zahnseideausgabe aufgerufen werden kann:
$PY2_VENV /bin/floss –q < options > < my_sample > | rank_strings < options >Anmerkungen:
–q Argument unterdrückt Header und Formatierung, um nur extrahierte Zeichenfolgen zu zeigen. Weitere Informationen zu zusätzlichen Zahnseideoptionen finden Sie in den Verwendungsdokumenten.floss oder rank_strings einen relativen Pfad enthalten, der auf eine virtuelle Python -Umgebung hinweist.strings Diese Verteilung umfasst das flarestrings -Programm, um vorhersehbare Ausgaben über Plattformen hinweg sicherzustellen. Wenn Sie die installierten strings Ihres Systems ausführen, beachten Sie, dass die Optionen über Versionen und Plattformen hinweg nicht konsistent sind:
Die meisten Linux -Verteilungen umfassen das strings -Programm von Gnu Binutils. Um sowohl "breite" als auch "schmale" Zeichenfolgen zu extrahieren, muss das Programm zweimal ausgeführt werden, wobei eine Ausgabedatei verlegt werden muss:
strings < my_sample > > strs.txt # narrow strings
strings -el < my_sample > >> strs.txt # wide strings. note the ">>" Einige Versionen von BSD strings , die mit macOS verpackt sind, unterstützen keine breiten Saiten. Beachten Sie auch, dass die Option -a zu Zeichenfolgen zum Scannen der gesamten Datei in der Standardkonfiguration deaktiviert werden kann. Ohne -a informative Saiten können verloren gehen. Wir empfehlen, Gnu Binutils über Homebrew oder MacPorts zu installieren, um eine Version von strings zu erhalten, die breite Charaktere unterstützt. Sehen Sie sich vor, um die richtige Version von strings aufzurufen.
strings sind standardmäßig unter Windows nicht installiert. Wir empfehlen, Windows Sysinternals, Cygwin oder Malcode Analyst Pack zu installieren, um strings zu erhalten.
Diese Version von Stringsifter wurde unter Verwendung von Strings -Ausgängen aus abgetasteten Malware -Binärdateien trainiert, die dem ersten Ember -Datensatz zugeordnet sind. Ordinale Etiketten wurden unter Verwendung schwacher Überwachungsverfahren erzeugt, und überwachtes Lernen wird durch durchladient gesteigerte Entscheidungsbäume mit einer Ziel-Objektivfunktion durchgeführt. Weitere technische Details finden Sie in Quick -Links. Bitte beachten Sie, dass derzeit weder Data- noch Schulungscode verfügbar sind, obwohl wir diesen Ansatz in zukünftigen Veröffentlichungen möglicherweise überdenken.
Wir verwenden GitHub -Probleme, um Fehler und Funktionsanforderungen zu veröffentlichen.
flarestrings stammen aus dem exzellenten Werkzeug -Zahnseide.