Help us understand the problem. What is going on with this article?

WireSharkでIKEトンネルを復号化するメモ

More than 3 years have passed since last update.

はじめに

WireSharkでIKEトンネルを復号化する方法を調べてみましたので、ご紹介します。1, 2
VPNサーバとして、strongSwanとSoftEther VPNを取り上げます。

IKEのシーケンス

IKEはフェーズ1の第5メッセージ以降、ISAKMP SAで暗号化されます。したがって、それ以降のシーケンスをWireSharkでキャプチャして動作を確認しようとしても、暗号化されていて、読むことができません。このISAKMP SAにより暗号化されている部分を復号化する方法をご紹介します。

IKE.png

通常、以下のように暗号化されたことだけが表示されます。

ScreenClip.png

復号化のためには、暗号化に用いられた鍵の取得が必要です。

strongswanで暗号化鍵を取得する方法

strongSwanが動作しているサーバでログレベルを変更します。

# strongswan stroke loglevel ike 4

IPSec接続した後に、ログを確認すると、以下のように出力されているはずですので、5F...59の部分と13...73の部分が鍵文字列になりますので、これをコピーしておきます。

Nov 15 11:18:31 ip-10-0-1-99 charon: 14[IKE] encryption key Ka => 32 bytes @ 0x1aef120
Nov 15 11:18:31 ip-10-0-1-99 charon: 14[IKE]    0: 5F D2 67 B3 28 10 52 EC B5 3B 14 84 A5 1A 71 59  _.g.(.R..;....qY
Nov 15 11:18:31 ip-10-0-1-99 charon: 14[IKE]   16: 13 25 86 3F 9E 41 7C 0C A9 34 C2 BA B8 27 EB 73

SoftEther VPNで暗号化鍵を取得する方法

SoftEther VPNではstrongSwanのようにログ出力されないようですので(やり方はあるかも)、少々強引に、ソースコードを編集してキーを出力させます。

  • Linux版
  • ソースからインストール

インストールされているディレクトリで以下のようにソースコードを編集、キーを取得

# vpnserver stop
# vim src/Cedar/IPsec_IKE.c

(3700行前後、sa-CryptoKey = ...のコードの後で以下を挿入)

BinToStrEx(tmp, sizeof(tmp), sa->CryptoKey->Data, sa->CryptoKey->Size);
FILE *file;
file = fopen("/tmp/test.txt", "a");
fprintf(file, tmp);
fclose(file);

# make; make install; vpnserver start
# cat /tmp/test.txt
008B 32 D7 DA 44 79 86 24 FB 48 B0 96 77 7F E2 05 0E AC C2 60 D0 7C A7 212c0d83c02c0d8cf0
(↑でいう、8B...21がキーなのでこれをコピーしておく)

鍵取得後の復号化の方法

  1. VPN接続を試験し、その時のパケットキャプチャを取得する
  2. 切断/キャプチャ停止後、Edit->Preferences->Protocols->ISAKMP->IKEv1 Decryption Table [Edit]
  3. Initiator's COOKIEをキャプチャファイルのISAKMPヘッダより確認し、入力。Encryption Keyに上記で取得したキーを入力し、「OK」押下
  4. 正しく処理されれば以下のように暗号化部分が復号化されて表示される

ScreenClip.png

参考

IPsec(ISAKMP、ESP)の復号化手順 - sai’s diary
http://saitoh.hatenablog.jp/entry/2014/09/29/022926
 

マスタリングTCP/IP IPsec編
谷口 功 水澤 紀子
オーム社
売り上げランキング: 195,690

  1. Windowsであれば、ESPトンネルについてはMicrosoft Message Analyzerにより簡単に復号化できます。 

  2. 本手順を実施しても、WireShark 1.系では安定して復号処理が行えませんでしたが、WireShark 2.系であれば、安定して複合処理が行えました。WireSharkは2.系になって非常に高速/軽量になりました。バグも多数改善されたようです。  

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away