このプロジェクトは、 pcap
ファイルを解析して TCP パケット内に見つかった曖昧さを返す使いやすいツールを構築することを目的としています。現在、UDP および ARP 分析の実装にも取り組んでいます。
概要:
貢献: あらゆるコメント/アイデア/貢献を歓迎します。
make
./p2a -v ./pcap_files/some_pcap_file.pcap -s results.json
$ ./p2a -h
Usage: ./p2a [OPTIONS] FILE
-h,--help: display this help message
-v,--verbose: verbose option
-d,--debug: debug option
-x,--exclude OPTIONS: exclude some possible ambiguities from analysis
--exclude ret,mac,ttl
ret: exclude retransmission analysis
mac: exclude MAC addresses analysis
ttl: exclude TTL analysis
-s,--save FILENAME: saves results to file FILENAME
JSON format - FILENAME should contain the JSON extension
Examples:
./p2a -v ./pcap_files/some_pcap_file.pcapng
./p2a --exclude mac,ttl --verbose my-pcap-file.pcap -s results.json
すべての結果を JSON ファイルに保存するオプションを追加しました。これを行うには、 --save file.json
オプションを使用できます。あいまいさが見つかったかどうかに関係なく、すべてのセッションがこのファイルに保存されます。私は現在、(JavaScript を使用して) HTML ファイルで JSON ファイルを適切にレンダリングする方法に取り組んでいます。
SHA(IP, Port)
sha
スクリプトをデバッグ目的で利用できるようにしました。引数として IP アドレスとポート番号を受け取り、(IP|ポート) の SHA1 ハッシュを返します。この値は、 p2a
スクリプトでセッション識別子として使用されます。
make sha
./sha -h
Usage:
./sha IP PORT
./sha 127.0.0.1 12345
IP: 127.0.0.1
Port: 12345
SHA1: 21bf549a8095063f49cff573e689b6b10365f4c8
IPアドレスとwhois
1 つのセッションが疑わしい場合、それが何に関連しているかを知ることが役立つ場合があります。これを行うには、Wireshark を使用し、指定されたセッションのみを表示する表示フィルターを適用します。
より簡単なアプローチは、 whois
使用して IP アドレスの所有者を知ることです。
キャプチャ ファイルのすべての IP アドレスでwhois
使用するには:
for ip in $( tshark -r file.pcapng -T fields -e ip.dst -e ip.src | egrep -o " [0-9]+.[0-9]+.[0-9]+.[0-9]+ " | sort | uniq ) ; do whois $ip | egrep " ^[Oo]rgani[sz]ation " ; done
tshark
機能しない場合は、同じことを行う C スクリプトを次に示します。
IP パケットのTime To Live (TTL) フィールドは、そのパケットがルーターによってドロップされるまでにネットワーク上を移動することが「許可される」長さに対応します。これは 8 ビットの値で、通常はホップごとに 1 ずつ減ります。
TTL 期限切れ攻撃に関する Cisco のページによると、次のようになります。
「IOS デバイスが TTL 値が 1 以下のパケットを受信すると、 ICMPv4 タイプ 11、コード 0メッセージが IOS デバイスによって送信され、それに応じて CPU に影響が生じます。この影響は、CPU の使用量が増えるために発生します。 TTL 値が 1 より大きいパケットを単に転送するのではなく、TTL 値が 1 より小さいパケットに応答する (TTL を超過したパケットを使用する) 処理が必要です。」
「TTL 期限切れの動作により、ネットワーク機器に対するサービス拒否 (DoS) 攻撃ベクトルが作成されます。ネットワーク デバイスは、通常のパケットをできるだけ早く転送するように設計されています。期限切れの TTL 値を持つパケットなどの例外パケットが発生すると、その量は変化します。ルータが適切に応答するために、多くの労力が費やされます。」
分析/コード:
utils.c
では、 TTL_THRESHOLD
(現時点では = 10) を定義しました。パケットの TTL がこの値より低い場合、TTL が低いことを示すフラグが立てられます。このようなフラグが多すぎる場合は、TTL 期限切れ攻撃である可能性があります。
サンプル pcap ファイル (TTL が低いパケットを含む) は、 ./attack_scripts/low_ttl
Attack_scripts/low_ttl ディレクトリにあるスクリプトを使用してキャプチャされました。
ARP ポイズニングは、ホストをだまして、自分がデフォルト ゲートウェイであると信じ込ませることです。被害者は定期的にデフォルト ゲートウェイにMAC アドレス (ARP プロトコル) を問い合わせます。しかし、攻撃者は、デフォルト ゲートウェイが別の MAC アドレス (攻撃対象の MAC アドレスなど) にあるという被害パケットを送信する可能性があります。攻撃者は、被害者がデフォルト ゲートウェイから実際のメッセージを「破棄」できるように、これらのパケットを「十分に定期的に」送信するだけで済みます。
これにより、攻撃者は中間者、DoS、ブラックホールなど、さまざまな方法で被害者を攻撃することが可能になります。
例:
被害者の IP アドレスは192.168.10.2
で、デフォルト ゲートウェイは192.168.1.1
です。
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
攻撃者は、 192.168.1.1
攻撃者の MAC アドレスであることを伝える被害者 ARP パケットを送信し続けます。そうすることで、被害者はパケットを (インターネットを目的として) 攻撃者に送信しますが、攻撃者はパケットをリダイレクトしません (パケットをリダイレクトする-r
オプション)。
分析/コード:
分析では、(今のところ)IP パケットのみを調べているため、 p2a
、遭遇したすべてのペア(MAC address, IP address)
リンク リストに保存します。新しい指定されたペアをチェックするとき、リンク リストを調べ、IP アドレスがすでに別の MAC アドレスに関連付けられている場合はエラーを返します。
上の例の場合、スクリプトは192.168.1.1
(デフォルト ゲートウェイ) が 2 つの異なる MAC アドレス (実際の MAC アドレス) に関連付けられていることを検出します。攻撃者が侵入して被害者にそれがデフォルト ゲートウェイであることを伝え、その MAC アドレスが取得されるまで続きます。 (被害者の視点から)デフォルト ゲートウェイに関連付けられます。
TCP 接続で送信されるデータの各バイトには、関連付けられたシーケンス番号があります。これは、 TCP ヘッダーのシーケンス番号フィールドに示されます。
受信側ソケットがデータの着信セグメントを検出すると、TCP ヘッダー内の確認応答番号を使用して受信を示します。データのパケットを送信した後、送信者は可変長の再送信タイマーを開始します。タイマーが期限切れになる前に確認応答を受信しなかった場合、送信者はセグメントが失われたと想定し、セグメントを再送信します。
別のパケットが現在のパケットと同じ確認応答およびシーケンス番号を所有している場合、 TCP 再送信が確認できます。
TCP の再送信は非常に一般的であり、まったく正常である可能性があります (1 つのパケットが正当に失われたために再送信された場合) が、ネットワークまたは通信上の問題の兆候である可能性もあります。
IP フラグメントの重複エクスプロイトは、同じ IP パケット内に含まれる 2 つのフラグメントに、パケット内での位置が互いに重複していることを示すオフセットがある場合に発生します。これは、フラグメント A がフラグメント B によって完全に上書きされているか、フラグメント A がフラグメント B によって部分的に上書きされていることを意味する可能性があります。一部のオペレーティング システムは、このように重複するフラグメントを適切に処理せず、例外をスローしたり、その他の望ましくない動作をする可能性があります。重複するフラグメントを受信したとき。これがティアドロップ攻撃の基礎となります。 (ウィキペディアより)
重複するフラグメントは、侵入検知システムをバイパスする目的で使用される場合もあります。このエクスプロイトでは、攻撃の一部が追加のランダム データとともにフラグメントで送信されます。将来のフラグメントにより、攻撃の残りの部分でランダム データが上書きされる可能性があります。完成したパケットが IDS で適切に再組み立てされない場合、攻撃は検出されません。
ティアドロップ攻撃:重複した特大ペイロードを含む壊れた IP フラグメントをターゲット マシンに送信します。
まだ実装されていません
特定のセッションで複数の TTL 値が観察された場合、ルートが変更されたことを意味する可能性があります。これは、パケットが接続の終了時に最初と同じパスをたどらないことを意味します。これは外部からの本物の変更が原因である可能性がありますが、攻撃者がパケットのルートを変更したことを意味している可能性もあります (たとえば、MiTM 攻撃を行うため)。
ただし、ほとんどの場合、1 つのセッションには接続全体を通じて 2 つまたは 3 つの異なる TTL 値が存在します。ほとんどの場合、クライアントとサーバーは同じ初期 TTL 値を使用しません。
特定のセッションに 3 つ以上の異なる TTL 値がある場合、スクリプトはエラーを返します。
ディレクトリ | 説明/内容 |
---|---|
./attack_scripts | 一部の TCP あいまいさ (スプーフィング、低 TTL) をテストして記録するための単純なスクリプト |
./pcap_files | p2a テストするための PCAP ファイル |
./tests_libpcap | libpcap テストして使用を開始するための 2 つのスクリプト |
libpcap
pcap
アプリpcap
サンプル ファイルtcpdump
フィルターlibpcap
チュートリアルlibpcap
の使用pcap.h
マニュアル ページ