
Uno strumento di machine learning che classifica le stringhe in base alla loro rilevanza per l'analisi di malware.
StringSifter è uno strumento di machine learning che classifica automaticamente le stringhe in base alla loro rilevanza per l'analisi di malware.
StringSifter richiede Python 3.9 o versioni successive. Esegui i seguenti comandi per ottenere il codice, eseguire i test unitari e utilizzare lo strumento:
pip install stringsifter
Per lo sviluppo, usa poetry:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with dev
Per eseguire i test unitari dalla directory di installazione di StringSifter:
poetry run tests -v
Il comando pip install installa due script eseguibili, flarestrings e rank_strings, nell'ambiente Python. Quando sviluppi dal sorgente, usa pipenv run flarestrings e pipenv run rank_strings.
flarestrings riproduce le funzionalità di strings di GNU binutils, mentre rank_strings accetta input tramite pipe, ad esempio:
flarestrings <my_sample> | rank_strings
rank_strings supporta numerosi argomenti da riga di comando. L'argomento posizionale input_strings specifica un file di stringhe da classificare. Gli argomenti opzionali sono:
Le stringhe classificate vengono scritte sullo standard output, a meno che non venga specificata l'opzione --batch, che fa sì che gli output classificati vengano scritti in file denominati <input_file>.ranked_strings.
flarestrings supporta l'opzione -n (o --min-len) per stampare sequenze di caratteri lunghe almeno min-len caratteri, invece del valore predefinito 4. Ad esempio:
flarestrings -n 8 <my_sample> | rank_strings
stamperà e classificherà solo le stringhe di lunghezza pari o superiore a 8.
docker build -t stringsifter -f docker/Dockerfile .
flarestrings o rank_strings per usare il rispettivo comando. I comandi containerizzati possono essere usati nelle pipeline:cat <my_sample> | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings
-v per esporre una directory dell'host al container:docker run -v <my_malware>:/samples -it stringsifter
dove <my_malware> contiene i campioni da analizzare, ad esempio:
docker run -v $HOME/malware/binaries:/samples -it stringsifter
flarestrings /samples/<my_sample> | rank_strings <options>
Tutti gli argomenti da riga di comando sono supportati negli script containerizzati.
StringSifter può essere applicato a elenchi arbitrari di stringhe, risultando utile per i professionisti che desiderano trarre informazioni da fonti alternative di raccolta intelligence, come dump di memoria live, esecuzioni in sandbox o binari che contengono stringhe offuscate. Ad esempio, FireEye Labs Obfuscated Strings Solver (FLOSS) estrae stringhe stampabili proprio come Strings, ma rivela inoltre stringhe offuscate che sono state codificate, impacchettate o costruite manualmente sullo stack. Può essere usato come sostituto diretto di Strings, il che significa che StringSifter può essere invocato analogamente sull'output di FLOSS usando il seguente comando:
$PY2_VENV/bin/floss –q <options> <my_sample> | rank_strings <options>
Note:
–q sopprime le intestazioni e la formattazione per mostrare solo le stringhe estratte. Per saperne di più sulle opzioni aggiuntive di FLOSS, consulta la sua documentazione sull'uso.floss e rank_strings deve includere un percorso relativo che fa riferimento a un ambiente virtuale Python.stringsQuesta distribuzione include il programma flarestrings per garantire un output prevedibile su tutte le piattaforme. Se scegli di usare il comando strings installato sul sistema, tieni presente che le sue opzioni non sono coerenti tra versioni e piattaforme:
La maggior parte delle distribuzioni Linux include il programma strings di GNU Binutils. Per estrarre sia le stringhe "wide" che quelle "narrow", il programma deve essere eseguito due volte, reindirizzando l'output su un file:
strings <my_sample> > strs.txt # narrow strings
strings -el <my_sample> >> strs.txt # wide strings. note the ">>"
Alcune versioni di BSD strings incluse in MacOS non supportano le stringhe "wide". Nota anche che l'opzione -a per scansionare l'intero file potrebbe essere disabilitata nella configurazione predefinita. Senza -a, le stringhe informative potrebbero andare perse. Consigliamo di installare GNU Binutils tramite Homebrew o MacPorts per ottenere una versione di strings che supporti i caratteri "wide". Fare attenzione a invocare la versione corretta di strings.
strings non è installato per impostazione predefinita su Windows. Consigliamo di installare Windows Sysinternals, Cygwin o Malcode Analyst Pack per ottenere un strings funzionante.
Questa versione di StringSifter è stata addestrata usando output di Strings provenienti da binari malware campionati associati al primo dataset EMBER. Le etichette ordinali sono state generate tramite procedure di weak supervision, e l'apprendimento supervisionato è eseguito da Gradient Boosted Decision Trees con una funzione obiettivo learning-to-rank. Per ulteriori dettagli tecnici, vedi Collegamenti rapidi. Tieni presente che attualmente non sono disponibili né dati etichettati né codice di addestramento, anche se potremmo riconsiderare questo approccio nelle versioni future.
Utilizziamo GitHub Issues per segnalare bug e richieste di funzionalità.
flarestrings deriva dall'ottimo strumento FLOSS.| Opzione |
|---|
| Significato |
|---|
| --scores (-s) | Includi i punteggi di classificazione nell'output |
| --limit (-l) | Limita l'output alle prime limit stringhe classificate |
| --min-score (-m) | Limita l'output alle stringhe con punteggio >= min-score |
| --batch (-b) | Specifica una cartella di output di strings per l'elaborazione in batch |