sai’s diary

プログラミング関連の備忘録とつぶやきを書いています。

IPsec(ISAKMP、ESP)の復号化手順

仕事が忙しくRuby on Railsの勉強が滞っています。。。
なのでまたネットワークネタです。

今回はLinux+strongswanでのISAKMP、ESPの復号化手順です。

環境

環境は以下を使用しています。
CentOS release 6.5 (Final) + strongswan-5.1.3-1.el6.i686 + Wireshark 1.12.1

strongswanの起動とログレベル変更

IPsecを接続する前にstrongswanのログレベルを変更します。

[user@localhost ~]$ sudo strongswan start
[user@localhost ~]$ sudo strongswan stroke loglevel ike 4

ISAKMPの復号化

ISAKMPの復号化にはsyslogに出力されるSk_ai、Sk_ar、Sk_ei、Sk_erを使用します。

今回は以下になります。
Sk_ai:0x68B81C4646E195049A3520D94B0294C541EE0D26
Sk_ar:0x0859C7F91F0F2B936442375023F6ADB22B5D02CC
Sk_ei:0x2AAB872427E6B5542DB6FA9551FCD544
Sk_er:0x3A5DA528181A580A01278F75F2DA39C1

syslogの抜粋

~省略~
charon: 09[IKE] Sk_ai secret => 20 bytes @ 0xad3019e0
charon: 09[IKE]    0: 68 B8 1C 46 46 E1 95 04 9A 35 20 D9 4B 02 94 C5  h..FF....5 .K...
charon: 09[IKE]   16: 41 EE 0D 26                                      A..&
charon: 09[IKE] Sk_ar secret => 20 bytes @ 0xad3019e0
charon: 09[IKE]    0: 08 59 C7 F9 1F 0F 2B 93 64 42 37 50 23 F6 AD B2  .Y....+.dB7P#...
charon: 09[IKE]   16: 2B 5D 02 CC                                      +]..
charon: 09[IKE] Sk_ei secret => 16 bytes @ 0xad3019e0
charon: 09[IKE]    0: 2A AB 87 24 27 E6 B5 54 2D B6 FA 95 51 FC D5 44  *..$'..T-...Q..D
charon: 09[IKE] Sk_er secret => 16 bytes @ 0xad3019e0
charon: 09[IKE]    0: 3A 5D A5 28 18 1A 58 0A 01 27 8F 75 F2 DA 39 C1  :].(..X..'.u..9.
~省略~

Wiresharkの設定

Edit->Preferences->Protocols->ISAKMP->IKEv2 Decryption Table->Newを選択し、複合化に必要な情報を設定します。設定値は16進数ですが、先頭に0xは必要ないので注意ください。

f:id:saitohm:20140929015620p:plain

IKEのSPIはキャプチャから確認出来ます。

f:id:saitohm:20140929015835p:plain

復号化が成功すると以下の様に暗号化されていた部分が表示可能になります。

復号化前

f:id:saitohm:20140929020225p:plain

復号化後

f:id:saitohm:20140929020240p:plain

ESPの復号化

ESPの復号化にはipコマンドで確認する送信先IP、送信元IP、SPI、Encryption Key、Authentication Keyを使用します。

ipコマンド確認結果

[user@localhost ~]$ sudo ip xfrm state
src 192.168.200.100 dst 192.168.200.200
        proto esp spi 0xce320b06 reqid 6 mode tunnel
        replay-window 32 flag 20
        auth hmac(sha1) 0x3f17133b51a808d5c6abfa9b3e51aa96bfd3fb32
        enc cbc(aes) 0x3b48b2ee8affbbebc952fa78babe336b
src 192.168.200.200 dst 192.168.200.100
        proto esp spi 0xc8e6a33c reqid 6 mode tunnel
        replay-window 32 flag 20
        auth hmac(sha1) 0x534a34c4695e97ff49bec212a4923e598807e96a
        enc cbc(aes) 0xd8d106320e00dc603c797f40ee83615d

Wiresharkの設定

Attempt to detect/decode encrypted ESP payloadsのチェックをONにして、 Edit->Preferences->Protocols->ESP->Edit->Newを選択し、複合化に必要な情報を設定します。
IKEと異なり、こちらの設定値は16進数の先頭に0xを付ける必要があるので注意ください。

イニシエータからレスポンダ方向への通信

f:id:saitohm:20140929022323p:plain

レスポンダからイニシエータ方向への通信

f:id:saitohm:20140929022343p:plain

復号化が成功すると以下の様に暗号化されていた部分が表示可能になります。

復号化前

f:id:saitohm:20140929022359p:plain

復号化後

f:id:saitohm:20140929022412p:plain