現代のコミュニケーションにおいて、VoIP (Voice over IP) 技術は欠かせない存在となりました。その中でも SIP (Session Initiation Protocol) は、通話セッションの確立や管理に広く利用されているプロトコルです。しかし、その利便性の裏側で、セキュリティ上の懸念も存在します。特に、認証に使われるパスワードの強度は、システム全体の安全性を左右する重要な要素です。
この記事では、ネットワークセキュリティの専門家やペネトレーションテスターが利用するツールの一つである John the Ripper スイートに含まれる sipdump2john
というスクリプトに焦点を当て、その使い方を詳しく解説します。sipdump2john
は、SIP 通信のキャプチャデータから、パスワードクラック試行に必要な情報を抽出するためのツールです。このツールを正しく理解し、適切に活用することで、SIP システムのパスワード強度を評価し、セキュリティ対策を強化する手助けとなります。💪
⚠️ 注意: この記事で紹介するツールや技術は、正当な権限を持つシステムに対するセキュリティ評価や監査の目的でのみ使用してください。許可なく他者のシステムや通信に対してこれらのツールを使用することは、法律で禁止されており、重大な結果を招く可能性があります。常に倫理的な観点を持ち、法律と規則を遵守してください。
SIP と Digest 認証の基礎知識
sipdump2john
の使い方を理解する前に、SIP とその認証方式について基本的な知識を押さえておきましょう。
SIP (Session Initiation Protocol) とは?
SIP は、IP ネットワーク上でマルチメディアセッション(音声通話、ビデオ会議、インスタントメッセージングなど)を開始、変更、終了するためのシグナリングプロトコルです。テキストベースのプロトコルであり、HTTP に似たリクエスト/レスポンスモデルを採用しています。
主な SIP メソッドには以下のようなものがあります。
REGISTER
: ユーザーエージェント (UA) が自身の現在位置 (IP アドレスなど) をレジストラサーバーに登録する。INVITE
: 通話セッションの開始を要求する。ACK
:INVITE
に対する最終応答 (200 OK
など) を確認する。BYE
: セッションを終了する。CANCEL
: 保留中のリクエストを取り消す。OPTIONS
: サーバーの能力を問い合わせる。
SIP Digest 認証とは?
SIP では、ユーザー認証のためにいくつかの方法が利用可能ですが、最も一般的に使用されるのが Digest 認証 (ダイジェスト認証) です。これは HTTP Digest 認証に基づいた仕組みで、パスワードを平文でネットワーク上に送信することなく、ユーザーを認証することができます。
Digest 認証の基本的な流れは以下の通りです。
- クライアント (UA) がサーバー (プロキシサーバーやレジストラサーバー) に
REGISTER
やINVITE
などのリクエストを送信します。 - サーバーは、認証が必要な場合、
401 Unauthorized
(プロキシ経由の場合は407 Proxy Authentication Required
) という応答を返します。この応答には、WWW-Authenticate
(またはProxy-Authenticate
) ヘッダが含まれており、認証方式 (Digest)、レルム (realm)、ノンス (nonce) などの情報が含まれます。 - クライアントは、受け取ったレルム、ノンス、そしてユーザー名とパスワードを使用して、レスポンスダイジェストと呼ばれるハッシュ値を計算します。
- クライアントは、計算したレスポンスダイジェストを含む
Authorization
(またはProxy-Authorization
) ヘッダを付けて、再度リクエストを送信します。 - サーバーは、クライアントから送られてきた情報と、自身が保持しているユーザー情報 (通常は `ユーザー名:レルム:パスワード` の MD5 ハッシュ) を使って、同じようにレスポンスダイジェストを計算します。
- サーバーが計算したダイジェストと、クライアントから送られてきたダイジェストが一致すれば、認証成功 (
200 OK
など) となります。一致しなければ認証失敗です。
この方式により、パスワードそのものがネットワーク上を流れることはありません。しかし、サーバーとクライアント間で交換される情報 (ユーザー名、レルム、ノンス、レスポンスダイジェストなど) をキャプチャできれば、オフラインでパスワードのクラックを試みることが可能になります。sipdump2john
は、まさにこのキャプチャされた情報から、John the Ripper が解析できる形式のハッシュを生成する役割を担います。
sipdump2john の概要と準備
sipdump2john とは?
sipdump2john
は、sipdump
というツールが出力したダンプファイル、または直接 pcap (Packet Capture) ファイルを処理し、SIP Digest 認証の情報を抽出して、John the Ripper が理解できる形式のハッシュ文字列に変換する Python スクリプトです。
John the Ripper は非常に強力なパスワードクラッキングツールであり、多くのハッシュ形式に対応していますが、特定のプロトコルやアプリケーション固有の認証情報を直接扱うことはできません。そのため、sipdump2john
のような補助スクリプト (これらは総称して `*2john` ツールと呼ばれます) を使って、まず John the Ripper が扱える形式にデータを変換する必要があります。
前提条件
sipdump2john
を使用するには、以下のものが必要です。
-
John the Ripper (Jumbo バージョン):
sipdump2john.py
は通常、John the Ripper の “Jumbo” バージョンに含まれています。これは、コミュニティによって多くの機能拡張や対応フォーマットが追加されたバージョンです。公式サイト (https://www.openwall.com/john/) からダウンロードおよびインストールできます。多くの Linux ディストリビューション (Kali Linux など) では、パッケージマネージャを通じて簡単にインストールできます。# Debian/Ubuntu ベースの場合 sudo apt update sudo apt install john
-
SIP トラフィックを含むキャプチャファイル (pcap): ネットワーク上で SIP の認証が行われている通信をキャプチャしたファイルが必要です。これは
tcpdump
やWireshark
などのツールを使用して取得できます。# tcpdump を使って SIP (通常 UDP/TCP ポート 5060) トラフィックをキャプチャする例 sudo tcpdump -i eth0 -s 0 -w sip_capture.pcap port 5060
(
eth0
は適切なネットワークインターフェース名に置き換えてください) -
Python 環境:
sipdump2john.py
は Python スクリプトなので、Python インタープリタが必要です。通常、現代的な Linux システムにはデフォルトでインストールされています。
sipdump2john.py の場所
John the Ripper (Jumbo) をインストールすると、sipdump2john.py
スクリプトは通常、John the Ripper の実行ファイル (john
) があるディレクトリ (多くの場合 `/usr/bin` や `/usr/sbin` へのシンボリックリンク元である `/opt/john/run` や、ソースからビルドした場合はその中の `run` ディレクトリなど) に一緒に配置されます。あるいは、`/usr/share/john/` や `/usr/lib/john/` などの共有ディレクトリ内に含まれることもあります。
見つからない場合は、システム全体を検索してみてください。
find / -name sipdump2john.py 2>/dev/null
以降の説明では、John the Ripper の `run` ディレクトリに移動して作業するか、スクリプトへのフルパスを指定することを想定します。
cd /path/to/john/run
sipdump2john の基本的な使い方
sipdump2john
の最も基本的な使い方は、SIP トラフィックが含まれる pcap ファイルを引数として指定することです。
./sipdump2john.py <pcap_file>
例えば、`sip_capture.pcap` という名前のキャプチャファイルがある場合、以下のように実行します。
./sipdump2john.py sip_capture.pcap
このコマンドは、指定された pcap ファイルを解析し、SIP Digest 認証に関連する情報を検出します。具体的には、401 Unauthorized
や 407 Proxy Authentication Required
の応答と、それに対する認証情報付きの再送リクエスト (例: REGISTER
や INVITE
) のペアを探します。
認証情報が見つかると、sipdump2john
は標準出力に John the Ripper 形式のハッシュ文字列を出力します。出力形式は通常、以下のようになります。
username:$sip$*realm*nonce*method*uri*response*cnonce*qop*nc*nonce_count*username
各フィールドの意味は以下の通りです。
フィールド | 説明 |
---|---|
username |
認証に使用されたユーザー名。最初のフィールドと最後のフィールドの両方に出現します。 |
$sip$ |
John the Ripper がこのハッシュを SIP Digest 形式として認識するための識別子。 |
* |
フィールドの区切り文字。 |
realm |
サーバーから提示された認証レルム。 |
nonce |
サーバーから提示されたノンス値 (一度限りのランダムな文字列)。 |
method |
SIP リクエストのメソッド (例: REGISTER, INVITE)。 |
uri |
リクエスト URI。 |
response |
クライアントが計算したレスポンスダイジェスト。これがクラックのターゲットとなる重要な情報です。 |
cnonce |
クライアントノンス (オプション)。クライアントが生成するランダムな文字列で、リプレイ攻撃への耐性を高めます。 |
qop |
Quality of Protection (保護品質、オプション)。通常 ‘auth’ または ‘auth-int’。 |
nc |
Nonce Count (ノンスカウント、オプション)。ノンスが使用された回数を示す 16 進数。 |
nonce_count |
(nc と同じ意味で使われることがある) |
例えば、以下のような出力が得られるかもしれません (実際の値は異なります)。
1001:$sip$*asterisk*4a1b9c8d*REGISTER*sip:192.168.1.1*a1b2c3d4e5f6...*f0e9d8c7*auth*00000001*1001
この出力は、そのままファイルに保存して John the Ripper に渡すことができます。
./sipdump2john.py sip_capture.pcap > sip_hashes.txt
これで、`sip_hashes.txt` ファイルに、John the Ripper が解析可能な形式のハッシュが保存されました。👍
John the Ripper でハッシュを解析する
sipdump2john
で抽出したハッシュファイル (`sip_hashes.txt`) を使って、いよいよ John the Ripper によるパスワードクラックを試みます。John the Ripper にはいくつかの攻撃モードがあります。
1. シングルクラックモード (Single Crack Mode)
このモードは、ユーザー名自体や、それに関連する情報 (例: GECOS フィールド情報、ただし SIP ハッシュには直接適用されにくい) を基にパスワードを推測します。比較的早く終わりますが、単純なパスワードしか見つけられないことが多いです。
./john --single sip_hashes.txt
2. 辞書モード (Wordlist Mode)
最も一般的に使われるモードの一つです。パスワードとして使われそうな単語を集めたリスト (辞書ファイル) を用意し、そのリスト内の単語をそのまま、または特定のルール (例: 大文字小文字変換、数字や記号の追加) を適用して試行します。強力な辞書ファイルとルールセットを使えば、多くのパスワードを発見できる可能性があります。
John the Ripper にはデフォルトの辞書 (`password.lst`) とルールセットが付属しています。
# デフォルトの辞書とルールを使用
./john --wordlist=password.lst --rules sip_hashes.txt
# より大規模な辞書ファイル (例: rockyou.txt) を指定
# rockyou.txt は別途入手・解凍が必要な場合があります
./john --wordlist=/path/to/rockyou.txt sip_hashes.txt
# ルールを無効にして辞書ファイルのみを使用
./john --wordlist=/path/to/rockyou.txt --rules=none sip_hashes.txt
効果的な辞書ファイルやルールセットは、インターネット上で多数公開されています (例: SecLists)。
3. インクリメンタルモード (Incremental Mode)
このモードは、指定された文字セット (例: すべての ASCII 文字、数字のみ) を使って、可能な限りの組み合わせを総当たりで試行します。単純なパスワードはすぐに見つかりますが、パスワードが長くなったり、複雑な文字セットが含まれたりすると、解析に必要な時間は指数関数的に増加します。
# デフォルトの文字セット (ASCII) で試行
./john --incremental sip_hashes.txt
# 数字のみで試行 (モード指定)
./john --incremental=Digits sip_hashes.txt
John the Ripper の設定ファイル (`john.conf` または `john.ini`) で、インクリメンタルモードの挙動 (文字セット、長さなど) をカスタマイズできます。
解析結果の確認
John the Ripper がパスワードのクラックに成功すると、その結果は `$JOHN/john.pot` (通常は `run` ディレクトリ内の `john.pot`) というファイルに保存されます。`.pot` ファイルは、`ハッシュ文字列:平文パスワード` という形式で記録されます。
特定のハッシュファイルに対してクラックされたパスワードを表示するには、`–show` オプションを使用します。
./john --show sip_hashes.txt
以下のような形式で、クラックされたパスワードが表示されます。
1001:password123:1001:$sip$*asterisk*4a1b9c8d*REGISTER*sip:192.168.1.1*a1b2c3d4e5f6...*f0e9d8c7*auth*00000001*1001
1 password hash cracked, 0 left
この例では、ユーザー `1001` のパスワードが `password123` であることが判明しました。🎉
解析には時間がかかる場合があります。セッションはいつでも `Ctrl+C` で中断でき、後で `–restore` オプションで再開できます。
# セッションの中断 (Ctrl+C)
# ...後で再開
./john --restore
実践的な考慮事項と注意点
倫理的な使用と法的遵守
繰り返しになりますが、sipdump2john
と John the Ripper は強力なツールであり、その使用は 必ず許可された範囲内 に留めなければなりません。自社ネットワークのセキュリティ評価、クライアントからの明示的な依頼に基づくペネトレーションテストなど、正当な目的でのみ使用してください。不正アクセスや盗聴は犯罪です。🚫
キャプチャの品質
sipdump2john
がハッシュを抽出するためには、pcap ファイル内に SIP の認証プロセス (チャレンジ応答シーケンス) が完全な形で含まれている必要があります。パケットロスがあったり、キャプチャが認証シーケンスの途中で開始・終了していたりすると、ハッシュを正しく抽出できない場合があります。
パスワードの強度
John the Ripper によるクラックの成功率は、ターゲットとなるパスワードの強度に大きく依存します。短く、単純で、辞書に載っているようなパスワードは比較的容易にクラックされますが、長く、ランダムで、複雑なパスワード (大文字、小文字、数字、記号を組み合わせたもの) は、クラックに膨大な時間と計算リソースが必要になるか、現実的な時間内では不可能になることがあります。
ハッシュ形式の互換性
sipdump2john
は、標準的な SIP Digest 認証 (MD5 ベース) を想定しています。もし特殊な認証方式や独自実装が使われている場合、正しくハッシュを抽出できない可能性があります。
他の *2john ツール
John the Ripper (Jumbo) には、sipdump2john
以外にも、さまざまなファイル形式やプロトコルからハッシュを抽出するための `*2john` ツールが多数含まれています。例えば、以下のようなものがあります。
zip2john
: ZIP ファイルのパスワードハッシュを抽出rar2john
: RAR ファイルのパスワードハッシュを抽出pdf2john
: PDF ファイルのパスワードハッシュを抽出ssh2john
: SSH 秘密鍵のパスフレーズハッシュを抽出wpapcap2john
: WPA/WPA2 のハンドシェイク情報 (pcap) からハッシュを抽出
これらのツールも同様の考え方で、対象のデータから John the Ripper が扱える形式のハッシュを生成します。
まとめ
sipdump2john
は、SIP 通信のキャプチャデータから Digest 認証の情報を抽出し、John the Ripper で解析可能なハッシュ形式に変換するための便利なツールです。このツールと John the Ripper を組み合わせることで、SIP システムで使用されているパスワードの強度を評価し、潜在的な脆弱性を発見することができます。
手順の要約:
- SIP 認証トラフィックを含む pcap ファイルを準備する。
sipdump2john.py
を使用して pcap ファイルから John the Ripper 形式のハッシュを抽出する。./sipdump2john.py <pcap_file> > sip_hashes.txt
- John the Ripper を使用して、抽出したハッシュ (`sip_hashes.txt`) に対してパスワードクラックを試みる (辞書モード、インクリメンタルモードなど)。
./john --wordlist=<dictionary_file> sip_hashes.txt
- `–show` オプションでクラック結果を確認する。
./john --show sip_hashes.txt
SIP システムのセキュリティを確保するためには、強力なパスワードポリシーを適用し、定期的な監査を通じてその有効性を確認することが重要です。sipdump2john
と John the Ripper は、その監査プロセスにおいて役立つツールとなり得ます。ただし、その使用は常に倫理的かつ合法的な範囲に留める必要があります。🔒✅
この記事が、sipdump2john
の使い方を理解し、SIP セキュリティ評価に役立てるための一助となれば幸いです。😊
コメント