
Ein Netzwerk-Inspektionswerkzeug
Ein Netzwerkverkehr-Analysewerkzeug
Es verwendet libnids (über seine Python-Bindings von Jon Oberheide: pynids), um IP zu defragmentieren und TCP-Pakete wieder zusammenzusetzen (UDP wird paketweise untersucht), um Netzwerk-Flows zu erzeugen. Diese Flows werden dann mit einem der vier Untersuchungsmodi geprüft:
Regex-Abgleiche werden mit der re2-Bibliothek und ihren Python-Bindings, pyre2, durchgeführt, die PCRE, Groß-/Kleinschreibung-unabhängige, invertierte und mehrzeilige Abgleiche usw. unterstützt. Gegenüber dem in Python eingebauten re-Modul (das als Rückfall verwendet wird, falls re2 nicht installiert ist) bietet es enorme Leistungsvorteile.
Die Fuzzy-String-Abgleichfunktionen werden über das fuzzywuzzy-Modul umgesetzt. Es hilft, sowohl einen exakten als auch einen relativen String-Abgleich durchzuführen. Ein Standard-Abgleichschwellenwert von 75 wird als Standard verwendet und kann über die CLI überschrieben werden.
Libemu und seine Python-Bindings, pylibemu, werden zur Shellcode-Erkennung verwendet. Die von libemu verwendeten GetPC-Heuristiken liefern eine ordentliche Erkennungsrate. Es gibt einige Fälle, in denen libemu schlicht versagt, aber für die meisten Anwendungsfälle ist es gut genug.
Yara ist ein signaturbasiertes Werkzeug zur Identifizierung und Klassifizierung von Schadsoftware. Seine yara-python-Bindings bieten eine API, um vorhandene/benutzerdefinierte Signaturdateien auf einem Eingabepuffer zu verwenden, der in diesem Fall ein Netzwerkstream ist.
Die Untersuchung kann für jede der Richtungen CTS/STC/ANY oder deren Kombinationen angefordert werden. Die Untersuchungspuffer werden gefüllt, sobald Netzwerkverkehr eintrifft, und daher erfolgen CTS-Abgleiche (CTS oder ANY) zuerst. Wenn mehr als ein Untersuchungsmodus angefordert wird, werden die Flows in der folgenden Reihenfolge untersucht: Regex, Fuzzy, libemu und schließlich Yara. Bei TCP gilt: Wenn einer der Untersuchungsmodi erfolgreich ist, wird der übereinstimmende Flow nicht weiter untersucht. Dies ist ein optimistischer Ansatz und standardmäßig aktiviert. Falls ein TCP-Stream für einen bestimmten Anwendungsfall jedoch mehrfach untersucht werden muss, kann dies explizit über die CLI angefordert werden.
Die Untersuchung kann bei Bedarf vollständig über die Linemode-CLI-Option deaktiviert werden. Dieser Modus ist wirklich hilfreich und ermöglicht in Kombination mit einem passenden Outmode einen Blick auf die Netzwerkkommunikation so, wie sie gerade über das Kabel läuft. Linemode wird automatisch als Rückfall aktiviert, wenn über die CLI kein Untersuchungsmodus angegeben wird.
Bei UDP erfolgen Abgleiche paketweise, und daher werden nachfolgende Pakete auch dann getestet, wenn bereits ein Abgleich in einem UDP-Flow gefunden wurde. Da nur nachfolgende Pakete und deren Inhalt untersucht werden, wird sichergestellt, dass die Daten, die bereits in früheren Untersuchungszyklen abgeglichen wurden, nicht erneut untersucht werden.
Der Abgleichbereich kann über BPF-Ausdrücke, Snort-ähnliche Offset-Depth-Inhaltsmodifikatoren oder über CLI-Optionen zur Begrenzung der Paket-/Stream-Untersuchung eingeschränkt werden. Bei TCP können übereinstimmende Flows bei Bedarf auch beendet werden. Flows können zusätzlich zur Ausgabe auf stdout auch in Dateien protokolliert werden. Einige nützliche Ausgabemodi (quite, meta, hex, print, raw) helfen bei der weiteren Analyse. Der Meta-Outmode ist besonders nützlich, da er einige wirklich wichtige abgleichsspezifische Details anzeigt, wie die Gesamtgröße des übereinstimmenden Inhalts, den Offset des Beginns eines Abgleichs im Netzwerkstream, die Paket-IDs, über die sich ein Abgleich erstreckt, die Richtung des Pakets, auf dem ein Abgleich stattfand, usw.
Die Pcap-Erzeugung für übereinstimmende Flows wird ebenfalls unterstützt. Wenn aktiviert, werden alle Pakete vom Beginn bis zum Ende des Flows ausgegeben. Übereinstimmende TCP-Flows werden ausgegeben, sobald ein Close/Reset gesehen wird, und für solche Flows, bei denen wir kein Close/Reset sehen, werden sie ausgegeben, bevor das Werkzeug beendet wird. Bei UDP, da keine Close/Reset-ähnlichen Zustandsinformationen verfügbar sind, werden sie nur ausgegeben, wenn das Werkzeug beendet wird. Dadurch wird sichergestellt, dass alle Pakete, auch die nach einem Abgleich eintreffenden, im Flow-Pcap erfasst werden. Mit Ausnahme des benutzerdefinierten Pcap-Global-Headers, des Pcap-Headers pro Paket und des Ethernet-II-L2-Headers (der von flowinspect nicht gesehen wird), bleibt alles darüber hinaus in den ausgegebenen Paketerfassungen unverändert.
HILFE: -----```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