
ネットワーク検査ツール
ネットワークトラフィック検査ツール
libnids(Jon Oberheide による Python バインディング: pynids)を使用して、IP の断片化を解除し TCP パケットを再構成します(UDP はパケット単位で検査されます)。これによりネットワークフローを生成します。これらのフローは、次の 4 つの検査モードのいずれかを使用して検査されます:
Regex マッチは re2 ライブラリとその Python バインディングである pyre2 を使用して実行されます。これらは PCRE、大文字と小文字を区別しないマッチ、反転、複数行マッチなどをサポートしています。Python に組み込まれている re モジュール(re2 がインストールされていない場合のフォールバックとして使用されます)と比較して、非常に大きなパフォーマンス向上が得られます。
ファジー文字列マッチング機能は fuzzywuzzy モジュールを介して実行されます。これは、完全一致と相対的な文字列マッチングの両方を実行するのに役立ちます。デフォルトのマッチ閾値は 75 で、cli で上書きできます。
Libemu とその Python バインディングである pylibemu は、シェルコード検出に使用されます。libemu が使用する GetPC ヒューリスティックは、かなりの検出率を提供します。libemu が単純に失敗するケースもいくつかありますが、ほとんどのユースケースでは十分です。
Yara は、シグネチャベースのマルウェア識別および分類ツールです。その yara-python バインディングは、入力バッファ(この場合はネットワークストリーム)に対して既存/カスタムシグネチャファイルを使用するための API を提供します。
検査は、CTS/STC/ANY のいずれかの方向、またはそれらの組み合わせに対して要求できます。検査バッファはネットワークトラフィックの到着に応じて満たされるため、CTS マッチ(CTS または ANY)が最初に発生します。複数の検査モードが要求された場合、フローは regex、fuzzy、libemu、最後に yara の順序で検査されます。TCP の場合、いずれかの検査モードが成功すると、マッチしたフローはそれ以上検査されません。これは楽観的なアプローチであり、デフォルトで有効になっています。ただし、特定のユースケースで TCP ストリームを複数回検査する必要がある場合は、cli を使用して明示的に要求できます。
検査は、必要に応じて linemode cli オプションを使用して完全に無効にすることもできます。このモードは非常に便利で、適切な outmode と組み合わせると、ネットワーク通信がワイヤ上で行われている最中にそのまま確認するのに役立ちます。Linemode は、cli で検査モードが提供されない場合のフォールバックとして自動的に有効になります。
UDP の場合、マッチはパケット単位で発生するため、UDP フローでマッチがすでに見つかった後でも、後続のパケットはテストされます。後続のパケットとそのコンテンツのみが検査されるため、以前の検査サイクルでマッチしたデータが再検査されないことが保証されます。
マッチ範囲は、BPF 式、Snort 風の offset-depth コンテンツ修飾子、または packets/streams 検査制限 cli オプションを通じて制限できます。TCP の場合、必要に応じてマッチしたフローを強制終了することもできます。フローは stdout にダンプされることに加えて、ファイルにログ記録することもできます。いくつかの便利な出力モード(quite、meta、hex、print、raw)がさらなる分析に役立ちます。meta outmode は特に便利で、マッチしたコンテンツの合計サイズ、ネットワークストリーム内のマッチ開始オフセット、マッチがまたがるパケット ID、マッチが発生したパケットの方向など、マッチ固有の非常に重要な詳細を表示します。
マッチしたフローの pcap 生成もサポートされています。有効にすると、フローの開始から終了までのすべてのパケットがダンプされます。マッチした TCP フローは、close/reset が確認されるとすぐにダンプされ、close/reset が確認されないフローについては、ツールの終了前にダンプされます。UDP の場合、close/reset のような状態情報が利用できないため、ツールの終了時にのみダンプされます。これにより、マッチ後に到着するパケットを含むすべてのパケットがフロー pcap に確実にキャプチャされます。カスタム pcap グローバルヘッダー、パケットごとの pcap ヘッダー、および Ethernet II L2 ヘッダー(flowinspect では認識されません)を除き、上記のすべてはダンプされたパケットキャプチャ内でそのまま維持されます。
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
Shellcode Detection: -M enable shellcode detection -y generate emulator profile for detected shellcode -Y --emuprofileoutsize emulator profile memory size (default 1024K | max: 10240K)
Content Modifiers: -O --offset bytes to skip before matching -D --depth bytes to look at while matching (starting from offset)
Inspection Limits: -T --maxinspstreams max streams to inspect -U --maxinsppackets max packets to inspect
Display Limits: -t --maxdispstreams max streams to display -u --maxdisppackets max packets to display -b --maxdispbytes max bytes to display
Output Options: -w [logdir] write matching packets/streams -o {quite,meta,hex,print,raw} match output modes
Misc. Options: -f --bpf BPF expression -v invert match -V verbose output -e highlight CTS/STC matches -k kill matching TCP stream -j enable TCP multi match mode -Z write matching flows to pcap -n confirm before initializing NIDS -L enable linemode (disables inspection)
使用例:
---------
__ライブHTTPセッションを表示__:```c
./flowinspect.py -d eth0 -c "^(GET|POST|HEAD|PUT).*" -f "tcp and port 80" -o print
GET / HTTP/1.1
User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Host: www.google.com
Accept: */*
[U] Processed: 0 | Matches: 0 | Shortest: 0B (#0) | Longest: 0B (#0)
[T] Processed: 1 | Matches: 1 | Shortest: 164B (#1) | Longest: 164B (#1)
Metasploit ie_cgenericelement_uaf エクスプロイト(CVE-2013-1347)の HTTP ストリームを検査:```c ./flowinspect.py -p cgenericelement.pcap -s 'CollectGarbage().*mstime_malloc({shellcode:' -b32