Linux ipsecデコード

ipsecトンネル内のトラフィックダンプを削除することが必要になる場合があります。 Wiresharkを使用したPSK認証を使用するLinuxサーバーで発生したipsecの場合、これを行う方法を説明します。







トラフィックのデコードを成功させるには、ipsecを上げた直後にダンプを開始する必要があります。

トラフィックをキャプチャするには、たとえば次のようにtcpdumpを使用します。



# tcpdump -i any -s 0 -w ipsec.pcap esp









次に、ipsecを上げます。



# /etc/init.d/ipsec start









ipsecはPSK(事前共有キー)認証を使用して構成されているため、デコードを成功させるにはセッションキーを知る必要があります。 これは、setkeyコマンドを使用して実行できます。

このコマンドは、debianの場合、ipsec-toolsパッケージに含まれています。 ルートとして実行する必要があります。



 # setkey -D 10.1.1.1 10.2.2.2 esp mode=tunnel spi=2548102798(0x97e0f68e) reqid=16389(0x00004005) E: aes-cbc 2a787e41 bbdc2f94 9ced721c 7fcf934e A: hmac-sha1 6af6847a 477bea9f 5c9a8d13 7ea9a5b5 9a318d29 seq=0x00000000 replay=32 flags=0x00000000 state=mature created: Oct 16 10:37:52 2012 current: Oct 16 11:04:26 2012 diff: 1594(s) hard: 0(s) soft: 0(s) last: hard: 0(s) soft: 0(s) current: 0(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 0 hard: 0 soft: 0 sadb_seq=1 pid=9195 refcnt=0
      
      







以下が必要です。

1)IPアドレス

2)spi-セキュリティパラメータインデックス

3)文字列「E:」(暗号化アルゴリズムとセッションキー)、この例では、aes-cbc暗号化アルゴリズム、および128ビットAESキー「2a787e41 bbdc2f94 9ced721c 7fcf934e」

4)文字列「A:」(認証アルゴリズムとそのキー)。この例ではhmac-sha1であり、キーは「6af6847a 477bea9f 5c9a8d13 7ea9a5b5 9a318d29」です。



なぜなら AES-CBCを使用しているため、(-CBCプレフィックスのため)ipsecトンネルが発生した時点からすべてのトラフィックが必要になります(CBC-暗号ブロックチェーン)。 他のアルゴリズムですべてのトラフィックを取得する必要はないかもしれませんが、これはわかりませんが、ipsecトンネルが発生した時点からすべてのトラフィックが必要になる可能性が高いと思います。



デコードと表示には、wiresharkを使用します(1.8.2、以前のバージョンを使用できますが、ここでは少し異なります)。



これらのパラメーターは、wiresharkに組み込む必要があります。 「編集->設定」設定ウィンドウを開き、「プロトコル-> ESP」を選択して、「暗号化されたESPペイロードを検出/デコードしよう」、「暗号化されたESPペイロードを検出/デコードしよう」、「チェックしよう」のボックスをチェックする必要がありますESP認証。」







次に、「編集」ボタン(「編集」->「作成」)をクリックし、setkeyで取得したIPアドレス、spi、およびキーを入力します。







入力した変更を保存した後、デコードされたトラフィックを受信する必要があります。







Wiresharkのセットアップを容易にするために、setkey -Dを実行し、出力をwireshark設定形式にフォーマットする小さなperlユーティリティを作成しました。



 #!/usr/bin/perl -w %ealg = ( 'aes-cbc' => 'AES-CBC [RFC3602]', '3des-cbc' => 'TripleDES-CBC [RFC2451]', 'aes-ctr' => 'AES-CTR [RFC3686]', 'todo' => 'DES-CBC [RFC2405]', 'todo' => 'CAST5-CBC [RFC2144]', 'blowfish-cbc' => 'BLOWFISH-CBC [RFC2451]', 'twofish-cbc' => 'TWOFISH-CBC' ); %aalg = ( 'hmac-sha1' => 'HMAC-SHA-1-96 [RFC2404]', 'hmac-sha256' => 'HMAC-SHA-256-96 [draft-ietf-ipsec-ciph-sha-256-00]', 'todo' => 'HMAC-SHA-256-128 [RFC4868]', 'todo' => 'HMAC-MD5-96 [RFC2403]', 'todo' => 'MAC-RIPEMD-160-96 [RFC2857]', 'todo' => 'ANY 96 bit authentication [no checking]', 'todo' => 'ANY 128 bit authentication [no checking]', 'todo' => 'ANY 192 bit authentication [no checking]', 'todo' => 'ANY 256 bit authentication [no checking]' ); open KEYS, "setkey -D |"; while (defined($l = <KEYS>)) { if ($l =~ /^\d/) { ($ip_src, $ip_dst) = (split(/\s+/, $l))[0,1]; } elsif ($l =~ /^\s+esp mode=.*? spi=\d+\((0x.*?)\)/) { $spi = $1; } elsif ($l =~ /^\s+E: ([^\s]+)\s+(.*)$/) { ($ealg, $ekey) = ($1, $2); $ealg = ($ealg{$ealg} or die "Unknown encr alg: '$ealg'"); $ekey =~ s/\s+//g; } elsif ($l =~ /^\s+A: ([^\s]+)\s+(.*)$/) { ($aalg, $akey) = ($1, $2); $aalg = ($aalg{$aalg} or die "Unknown auth alg: '$aalg'"); $akey =~ s/\s+//g; print qq#"IPv4","$ip_src","$ip_dst","$spi",$ealg,"0x$ekey","$aalg","0x$akey"\n#; ($ip_src, $ip_dst, $spi, $ealg, $ekey, $aalg, $akey) = (); } } close KEYS
      
      







結果はファイル〜/ .wireshark / esp_saに書き込まれる必要があります。 次に、wiresharkを再起動します。



スクリプトが機能せず、「Unknown encr alg」または「Unknown auth alg」というエラーが表示される場合、setkeyユーティリティのこのアルゴリズムと、wiresharkの対応する値の対応をハッシュテーブル%ealgまたは%aalgに入力する必要があります。 私はaes-cbcとhmac-sha1でのみテストしました。



wiresharkウェブサイトの追加情報(少し古い)。



All Articles