
Uno strumento di ispezione di rete.
Uno strumento di ispezione del traffico di rete
Utilizza libnids (tramite i suoi binding Python di Jon Oberheide: pynids) per deframmentare IP e riassemblare i pacchetti TCP (l'UDP viene ispezionato su base pacchetto singolo) per generare flussi di rete. Questi flussi vengono poi ispezionati usando una delle quattro modalità di ispezione:
Le corrispondenze regex vengono eseguite usando la libreria re2 e i suoi binding Python, pyre2, che supporta PCRE, corrispondenze case-insensitive, invertite e multilinea, ecc. Ha enormi guadagni di prestazioni rispetto al modulo re integrato in Python (che viene usato come fallback nel caso re2 non sia installato).
Le funzionalità di corrispondenza fuzzy di stringhe sono realizzate tramite il modulo fuzzywuzzy. Aiuta a eseguire sia una corrispondenza esatta che relativa delle stringhe. Una soglia di corrispondenza predefinita di 75 viene usata come default e può essere sovrascritta tramite cli.
Libemu e i suoi binding Python, pylibemu, sono usati per il rilevamento di shellcode. L'euristica GetPC usata da libemu fornisce un discreto tasso di rilevamento. Ci sono alcuni casi in cui libemu semplicemente fallisce, ma per la maggior parte dei casi d'uso è abbastanza buono.
Yara è uno strumento di identificazione e classificazione dei malware basato su firme. I suoi binding yara-python forniscono un'API per usare file di firme esistenti/personalizzati su un buffer di input che in questo caso è un flusso di rete.
L'ispezione può essere richiesta per una qualsiasi delle direzioni CTS/STC/ANY o loro combinazioni. I buffer di ispezione vengono popolati man mano che il traffico di rete arriva e quindi le corrispondenze CTS (CTS o ANY) avvengono per prime. Se viene richiesta più di una modalità di ispezione, i flussi vengono ispezionati nel seguente ordine: regex, fuzzy, libemu e infine yara. Per TCP, se una qualsiasi delle modalità di ispezione riesce, il flusso corrispondente non verrà ispezionato ulteriormente. Questo è un approccio ottimistico ed è abilitato per impostazione predefinita. Tuttavia, se per un determinato caso d'uso un flusso TCP deve essere ispezionato più volte, può essere richiesto esplicitamente tramite cli.
L'ispezione può essere completamente disabilitata, se necessario, tramite l'opzione cli linemode. Questa modalità è davvero utile e, se combinata con un outmode adatto, aiuta a osservare la comunicazione di rete così com'è mentre avviene sul filo. Linemode viene abilitato automaticamente come fallback se nessuna modalità di ispezione viene fornita tramite cli.
Per UDP, le corrispondenze avvengono su base pacchetto singolo e quindi i pacchetti successivi verranno testati anche dopo che una corrispondenza è già stata trovata su un flusso UDP. Poiché vengono ispezionati solo i pacchetti successivi e il loro contenuto, ciò garantisce che i dati già corrispondenti durante i cicli di ispezione precedenti non vengano ispezionati di nuovo.
L'ambito di corrispondenza può essere limitato tramite espressioni BPF, modificatori di contenuto offset-depth simili a Snort o tramite opzioni cli di limite di ispezione di pacchetti/flussi. Per TCP, i flussi corrispondenti possono anche essere terminati se necessario. I flussi possono anche essere registrati su file oltre che essere scaricati su stdout. Alcune modalità di output utili (quite, meta, hex, print, raw) aiutano con ulteriori analisi. La modalità di output meta è particolarmente utile perché mostra alcuni dettagli davvero importanti specifici della corrispondenza, come la dimensione totale del contenuto corrispondente, l'offset dell'inizio di una corrispondenza nel flusso di rete, gli ID dei pacchetti su cui si estende una corrispondenza, la direzione del pacchetto su cui è avvenuta una corrispondenza, ecc.
È supportata anche la generazione di pcap per i flussi corrispondenti. Se abilitata, scaricherà tutti i pacchetti dall'inizio fino alla fine del flusso. I flussi TCP corrispondenti vengono scaricati non appena viene visto un close/reset, e per quei flussi in cui non vediamo un close/reset, vengono scaricati prima che lo strumento esca. Per UDP, poiché non ci sono informazioni di stato simili a close/reset disponibili, vengono scaricati solo quando lo strumento esce. Ciò garantisce che tutti i pacchetti, anche quelli che arrivano dopo la corrispondenza, vengano catturati nella pcap del flusso. Eccetto per l'header globale pcap personalizzato, l'header pcap per pacchetto e l'header L2 Ethernet II (che non è visto da flowinspect), tutto il resto rimane invariato nelle catture di pacchetti scaricate.
HELP: -----```c ______ _ __ / / /_ _ () _________ ___ / / / // / __ \ | /| / / / __ / / __ / _ / / __/ / __/ / // / |/ |/ / / / / ( ) // / / // / // //_/|/|/// /// ._/_/___/_/ //
flowinspect v0.2 - A network inspection tool Ankur Tyagi (7h3rAm [at] gmail [dot] com)
usage: flowinspect.py [-h] (-p --pcap | -d --device) [-c --cregex] [-s --sregex] [-a --aregex] [-i] [-m] [-G --cfuzz] [-H --sfuzz] [-I --afuzz] [-r fuzzminthreshold] [-C --cdfa] [-S --sdfa] [-A --adfa] [-l] [-X --dfaexpr] [-g [graphdir]] [-P --cyararules] [-Q --syararules] [-R --ayararules] [-M] [-y] [-Y --emuprofileoutsize] [-O --offset] [-D --depth] [-T --maxinspstreams] [-U --maxinsppackets] [-t --maxdispstreams] [-u --maxdisppackets] [-b --maxdispbytes] [-w [logdir]] [-o {quite,meta,hex,print,raw}] [-f --bpf] [-v] [-V] [-e] [-k] [-j] [-Z] [-n] [-L]
optional arguments: -h, --help show this help message and exit -p --pcap input pcap file -d --device listening device
RegEx per Direction: -c --cregex regex to match against CTS data -s --sregex regex to match against STC data -a --aregex regex to match against ANY data
RegEx Options: -i ignore case -m disable multiline match
Fuzzy Patterns per Direction: -G --cfuzz string to fuzzy match against CTS data -H --sfuzz string to fuzzy match against STC data -I --afuzz string to fuzzy match against ANY data
Fuzzy Options: -r fuzzminthreshold threshold for fuzzy match (1-100) - default 75
DFAs per Direction ('m[0-9][1-9]='): -C --cdfa DFA expression to match against CTS data -S --sdfa DFA expression to match against STC data -A --adfa DFA expression to match against ANY data
DFA Options: -l switch default boolean operator to 'or' -X --dfaexpr expression to test chain members -g [graphdir] generate DFA transitions graph
Yara Rules per Direction: -P --cyararules Yara rules to match on CTS data -Q --syararules Yara rules to match on STC data -R --ayararules Yara rules to match on ANY data