現代のコミュニケーションにおいて、VoIP (Voice over IP) 技術は不可欠なものとなりました。その中でも、SIP (Session Initiation Protocol) は、音声通話やビデオ通話などのマルチメディアセッションを確立、変更、終了するための主要なプロトコルとして広く利用されています。しかし、その利便性の裏側には、セキュリティ上のリスクも潜んでいます。特に、認証情報の管理が不十分な場合、不正アクセスや盗聴の被害に遭う可能性があります。
この記事では、VoIP環境のセキュリティ評価やペネトレーションテストにおいて重要な役割を果たすツール「SIPdump」に焦点を当て、その使い方と、強力なパスワードクラッキングツール「John the Ripper」との連携方法について詳しく解説します。SIPdumpを使いこなすことで、ネットワーク上のSIP通信から認証情報を抽出し、John the Ripperを用いてその強度を評価することが可能になります。セキュリティ担当者やネットワーク管理者にとって、自社のVoIPシステムの脆弱性を理解し、適切な対策を講じるための一助となれば幸いです。
注意:この記事で紹介するツールやテクニックは、教育目的および正当な権限の下でのセキュリティ評価にのみ使用してください。許可なく他者のシステムやネットワークに対してこれらのツールを使用することは、法律で禁止されており、重大な結果を招く可能性があります。倫理観と法的遵守を最優先に行動してください。
SIPとSIP認証の基礎知識 📞
SIPdumpの使い方を理解する前に、まずSIPプロトコルと、その認証方式であるDigest認証について基本的な知識を押さえておきましょう。
SIP (Session Initiation Protocol) とは?
SIPは、インターネット上で音声通話、ビデオ会議、インスタントメッセージングなどのリアルタイムコミュニケーションセッションを開始、管理、終了するためのシグナリングプロトコルです。HTTPやSMTPに似たテキストベースのプロトコルであり、リクエストとレスポンスのモデルで動作します。例えば、電話をかける際には「INVITE」リクエストが送信され、相手が応答するとセッションが確立されます。
SIP自体はメディア(音声や映像データ)を直接転送するわけではなく、メディアの転送にはRTP (Real-time Transport Protocol) などの別のプロトコルが利用されます。SIPは、セッションの参加者、使用するメディアの種類、コーデックなどをネゴシエーション(交渉)する役割を担います。
SIP Digest認証の仕組み 🔑
多くのVoIPシステムでは、ユーザー(SIPクライアント)がサービスを利用する際に認証が必要です。SIPでは、主にHTTP Digest認証(RFC 2617、RFC 3261、RFC 8760で規定・更新)を流用した認証方式が用いられます。これは、パスワードを平文でネットワーク上に送信することなく、ユーザーを認証するためのチャレンジ/レスポンス方式のメカニズムです。
Digest認証の大まかな流れは以下の通りです。
- 初期リクエスト: SIPクライアント(UAC: User Agent Client)がSIPサーバー(UAS: User Agent Server または Proxy Server)に対して、認証が必要なリクエスト(例: REGISTER, INVITE)を送信します。
- チャレンジ: サーバーは、クライアントが認証されていない場合、「
401 Unauthorized
」または「407 Proxy Authentication Required
」というレスポンスを返します。このレスポンスには、「WWW-Authenticate
」または「Proxy-Authenticate
」ヘッダーが含まれており、その中に認証に必要な情報(realm
,nonce
,algorithm
,qop
など)が含まれています。realm
: 認証の保護領域(通常はドメイン名など)を示します。nonce
: サーバーが生成する一度限りのランダムな文字列で、リプレイ攻撃を防ぐために使用されます。algorithm
: ハッシュ計算に使用するアルゴリズム(通常はMD5。RFC 8760ではSHA-256なども追加)。qop
(Quality of Protection): 保護品質を指定します(例: “auth”, “auth-int”)。”auth”が一般的です。
- レスポンス計算: クライアントは、受け取ったチャレンジ情報(特に nonce)と、自身のユーザー名、パスワード、リクエストメソッド、URIなどを使用して、特定の計算式に基づいてレスポンスダイジェスト(ハッシュ値)を計算します。この計算には通常MD5ハッシュ関数が用いられます。
- 認証付きリクエスト再送: クライアントは、計算したレスポンスダイジェスト、ユーザー名、realm、nonce、cnonce(クライアントが生成するnonce)、nc(nonceカウント)、qopなどの情報を含む「
Authorization
」または「Proxy-Authorization
」ヘッダーを付加して、元のリクエストを再送信します。 - サーバーによる検証: サーバーは、クライアントから受信した情報と、自身が保持しているユーザーのパスワード情報(通常はパスワード自体ではなく、パスワードから計算されたハッシュ値)を使用して、同じようにレスポンスダイジェストを計算します。クライアントから送られてきたレスポンスダイジェストと、サーバー側で計算したダイジェストが一致すれば、認証成功となります。
この仕組みにより、パスワードそのものがネットワーク上を流れることなく認証が行えるため、平文認証よりも安全性が高まります。しかし、サーバーからクライアントに送信されるチャレンジ情報(nonceなど)と、クライアントからサーバーに送信されるレスポンスダイジェストを傍受できれば、オフラインでパスワードを推測するブルートフォース攻撃や辞書攻撃が可能になります。SIPdumpは、まさにこのチャレンジとレスポンスの情報をネットワークトラフィックから抽出するためのツールなのです。
SIPdumpとは? 🤔
SIPdumpは、もともと「SIPcrack」というスイートに含まれていたツールの一部です。SIPcrackは、SIPのDigest認証情報をネットワーク上から盗聴(sniff)し、その認証情報(特にパスワードのハッシュ)を解読(crack)するための一連のツール群です。
その中で、SIPdumpの主な役割は以下の通りです。
- ネットワークインターフェースを流れるSIPトラフィックをリアルタイムで監視する。
- または、事前にキャプチャされたネットワークパケットファイル(PCAP形式が一般的)を読み込む。
- SIPメッセージの中から、Digest認証に関連するチャレンジ(401 Unauthorized や 407 Proxy Authentication Required レスポンス内の WWW-Authenticate / Proxy-Authenticate ヘッダー)と、それに対応するレスポンス(Authorization / Proxy-Authorization ヘッダーを含むリクエスト)を探し出す。
- 見つけた認証情報を、John the Ripperが解読できる特定の形式(ハッシュ形式)に整形してファイルに出力する。
つまり、SIPdumpはSIP通信における認証のやり取りを「覗き見」し、パスワードクラッキングに必要な「証拠」を集めるためのツールと言えます。
なお、現在では、より高機能なパスワードクラッキングツールであるJohn the Ripper (Jumboバージョン) に、SIPdumpと同様の機能を持つスクリプト(例: `sip2john.py`)や、SIPハッシュ形式 (`$sip$` など) のサポートが含まれています。そのため、必ずしもオリジナルのSIPcrackに含まれるSIPdumpを使用する必要はなく、John the Ripper (Jumbo) をインストールすれば、SIP認証情報の抽出と解析を一貫して行える場合が多いです。この記事では、John the Ripper (Jumbo) に含まれるツールや機能を前提として解説を進めます。
入手とインストール
John the Ripper (Jumbo) は、多くのLinuxディストリビューションのパッケージマネージャからインストールできます。例えば、Debian/Ubuntu系では以下のコマンドでインストールできます。
sudo apt update
sudo apt install john
Kali Linuxなどのペネトレーションテスト用ディストリビューションには、最初から含まれていることが多いです。
最新版や特定の機能を利用したい場合は、公式GitHubリポジトリからソースコードを取得し、コンパイルすることも可能です。
git clone https://github.com/openwall/john -b bleeding-jumbo john
cd john/src/
./configure && make -s clean && make -sj4
コンパイル後、実行ファイルは `john/run/` ディレクトリ以下に生成されます。SIP認証情報をPCAPファイルから抽出するためのツール `sip2john.py` もこのディレクトリに含まれています。
補足: オリジナルの `sipdump` ツール(SIPcrackパッケージの一部)も、古いバージョンのLinuxディストリビューションや特定のアーカイブサイトで見つけることができる場合がありますが、メンテナンス状況や互換性を考慮すると、John the Ripper (Jumbo) の利用が推奨されます。
SIPdump (sip2john.py) の使い方 🛠️
ここでは、John the Ripper (Jumbo) に含まれる `sip2john.py` スクリプトを使用して、PCAPファイルからSIP認証情報を抽出する方法を中心に解説します。
前提:SIPトラフィックのキャプチャ
`sip2john.py` は、ネットワークトラフィックが記録されたPCAPファイルを入力として受け取ります。PCAPファイルは、`tcpdump`や`Wireshark`といったパケットキャプチャツールを使用して作成します。
例えば、`tcpdump` を使用して特定のネットワークインターフェース (`eth0`) 上のSIP通信(デフォルトポート 5060/UDP および 5061/TCP/TLS)をキャプチャし、`sip_traffic.pcap` というファイルに保存するには、以下のようなコマンドを実行します(root権限が必要な場合があります)。
sudo tcpdump -i eth0 -w sip_traffic.pcap port 5060 or port 5061
特定のホスト(例: 192.168.1.100)とのSIP通信のみをキャプチャする場合は、フィルタを追加します。
sudo tcpdump -i eth0 -w sip_traffic.pcap host 192.168.1.100 and (port 5060 or port 5061)
注意: ネットワークトラフィックのキャプチャは、プライバシーに関わる情報を取得する可能性があるため、必ず適切な権限と許可の下で行ってください。また、TLSで暗号化されたSIP通信(SIPS、ポート5061)の場合、秘密鍵がなければ認証情報を抽出することは困難です。
sip2john.py の実行
`sip2john.py` は、John the Ripper (Jumbo) の `run` ディレクトリにあります。基本的な使い方は非常にシンプルです。
python /path/to/john/run/sip2john.py <pcap_file> > <output_hash_file>
例えば、先ほどキャプチャした `sip_traffic.pcap` ファイルからSIP認証情報を抽出し、`sip_hashes.txt` というファイルに保存するには、以下のコマンドを実行します。
cd /path/to/john/run/
python sip2john.py ../../sip_traffic.pcap > sip_hashes.txt
これにより、`sip_hashes.txt` ファイルには、John the Ripperが解析できる形式のSIPハッシュが出力されます。
出力されるハッシュ形式
`sip2john.py` が出力するハッシュは、通常以下のような形式になります (John the Ripper の `$sip$` 形式)。
$sip$*<realm>*<nonce>*<method>*<uri>*<user>*<response>*<cnonce>*<qop>*<nc>
各フィールドの意味は以下の通りです。
フィールド | 説明 | 例 |
---|---|---|
<realm> |
認証レルム (WWW-Authenticate/Proxy-Authenticateヘッダから) | asterisk |
<nonce> |
サーバーが生成した nonce (WWW-Authenticate/Proxy-Authenticateヘッダから) | 4a7f3d8e |
<method> |
SIPリクエストメソッド (例: REGISTER, INVITE) | REGISTER |
<uri> |
リクエストURI (例: sip:example.com) | sip:example.com |
<user> |
認証に使用されたユーザー名 (Authorization/Proxy-Authorizationヘッダから) | 1001 |
<response> |
クライアントが計算したレスポンスダイジェスト (Authorization/Proxy-Authorizationヘッダから) | a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 |
<cnonce> |
クライアントが生成した nonce (Authorization/Proxy-Authorizationヘッダから、存在する場合) | 9f8e7d6c |
<qop> |
保護品質 (Authorization/Proxy-Authorizationヘッダから、存在する場合) | auth |
<nc> |
Nonceカウント (Authorization/Proxy-Authorizationヘッダから、存在する場合) | 00000001 |
これらの情報が `*` (アスタリスク) で区切られて1行の文字列として出力されます。John the Ripperはこの文字列を読み込み、`<user>` に対応するパスワードを推測しようと試みます。
オリジナルの sipdump (SIPcrack) の場合
参考までに、オリジナルの `sipdump` コマンドを使用する場合の基本的な構文も紹介します。このツールはJohn the Ripperとは別の形式でダンプファイルを出力しますが、John the Ripper (Jumbo) はこの形式も読み込める場合があります。
sipdump [options] <dump_file>
主なオプション:
-i <interface>
: 監視するネットワークインターフェースを指定します (例:-i eth0
)。-p <pcap_file>
: 読み込むPCAPファイルを指定します (例:-p sip_traffic.pcap
)。-f "<filter>"
: libpcap形式のフィルタを指定します (例:-f "host 192.168.1.100"
)。<dump_file>
: 抽出した認証情報を保存するファイル名を指定します (例:logins.dump
)。
例:
# リアルタイム監視
sudo sipdump -i eth0 logins.dump
# PCAPファイルから抽出
sipdump -p sip_traffic.pcap logins.dump
この `logins.dump` ファイルを、後述する `sipcrack` コマンドや `john` コマンドの入力として使用します。
John the Ripperでのパスワード解析 💣
`sip2john.py` (または `sipdump`) でSIP認証情報のハッシュを抽出したら、いよいよJohn the Ripperを使ってパスワードの解析(クラッキング)を行います。John the Ripperは非常に強力で多機能なパスワードクラッキングツールであり、様々な攻撃モードを備えています。
基本的な実行方法
最も基本的な使い方は、抽出したハッシュファイル (`sip_hashes.txt`) をJohn the Ripper (`john` コマンド) に渡すだけです。John the Ripperは自動的にハッシュ形式を認識し、デフォルトのモード(シングルクラックモード、辞書モード、インクリメンタルモードを組み合わせたもの)で解析を開始します。
cd /path/to/john/run/
./john sip_hashes.txt
解析が完了するか、中断されるまで処理が続きます。発見されたパスワードは、通常、ターミナルに表示されるほか、`$JOHN/john.pot` (デフォルトでは `~/.john/john.pot` または `run` ディレクトリ内の `john.pot`) というファイルに記録されます。
再度クラックされたパスワードを確認するには、以下のコマンドを使用します。
./john --show sip_hashes.txt
これにより、「ユーザー名:パスワード」の形式で解析済みの認証情報が表示されます。
攻撃モードの指定
より効率的に解析を行うために、John the Ripperの攻撃モードを明示的に指定することができます。
1. シングルクラックモード (`–single`)
このモードは、ハッシュファイルに含まれるユーザー名や、ユーザー名から派生した単語(大文字小文字変換、数字の追加など)をパスワード候補として試します。非常に高速ですが、単純なパスワードしか見つけられません。
./john --single sip_hashes.txt
2. 辞書モード (`–wordlist`)
指定された辞書ファイル(ワードリスト)に含まれる単語をパスワード候補として試します。最も一般的に使用されるモードの一つです。効果的な辞書ファイルを用意することが重要です。有名なワードリストとして「RockYou」などがあります。
# ワードリストのみを使用
./john --wordlist=/path/to/wordlist.txt sip_hashes.txt
# ワードリストにルールを適用 (--rules)
./john --wordlist=/path/to/wordlist.txt --rules=Default sip_hashes.txt
`–rules` オプションを使用すると、辞書の単語に対して様々な変換ルール(例: `password` -> `Password123`, `p@sswOrd!` など)を適用し、より多くの候補を試すことができます。John the Ripperにはデフォルトでいくつかのルールセットが (`john.conf` 内で定義) 含まれています。
3. インクリメンタルモード (`–incremental`)
設定ファイル (`john.conf`) で定義された文字セットと長さの範囲に基づいて、全ての可能性のある文字の組み合わせ(ブルートフォース)を試します。非常に時間がかかりますが、理論上はあらゆるパスワードを発見できます(現実的な時間内に終わるかは別問題)。
# デフォルトの文字セットを使用
./john --incremental sip_hashes.txt
# 特定の文字セットを指定 (例: 数字のみ)
./john --incremental=Digits sip_hashes.txt
4. マスクモード (`–mask`)
パスワードのパターン(マスク)を指定してブルートフォース攻撃を行います。パスワードの一部が分かっている場合や、特定の形式(例: 大文字1文字 + 小文字5文字 + 数字2文字)を持つことが分かっている場合に非常に効果的です。
# 例: 8文字のパスワードで、最初の文字が大文字、残り7文字が小文字の場合
# ?u = 大文字, ?l = 小文字
./john --mask='?u?l?l?l?l?l?l?l' sip_hashes.txt
# 例: 6桁の数字の場合
# ?d = 数字
./john --mask='?d?d?d?d?d?d' sip_hashes.txt
# 例: "pass" で始まり、その後に4桁の数字が続く場合
./john --mask='pass?d?d?d?d' sip_hashes.txt
マスクモードで使用できるプレースホルダ(`?u`, `?l`, `?d`, `?s` (記号) など)やカスタム文字セットの定義については、John the Ripperのドキュメントを参照してください。
セッション管理
John the Ripperは、解析の進捗状況を自動的にセッションファイル (`.rec` ファイル) に保存します。これにより、解析を中断しても後で再開することができます。
# 中断したセッションを再開
./john --restore
特定のセッション名を指定して実行・再開することも可能です。
# セッション名を指定して実行
./john --session=mysipcrack --wordlist=/path/to/wordlist.txt sip_hashes.txt
# 特定のセッションを再開
./john --restore=mysipcrack
重要: パスワードクラッキングは計算資源(CPU時間)を大量に消費する可能性があります。特に複雑なパスワードや強力なハッシュアルゴリズムに対しては、解析に数時間、数日、あるいはそれ以上かかることも珍しくありません。
実践的なシナリオと注意点 ⚠️
SIPdumpとJohn the Ripperの組み合わせは、VoIPシステムのセキュリティを評価する上で強力なツールとなりますが、その利用には責任と注意が伴います。
ペネトレーションテストにおける活用
企業や組織が自社のVoIPシステムのセキュリティ強度を評価するためにペネトレーションテストを実施する際、SIPdump (sip2john.py) とJohn the Ripperは以下のような目的で使用されます。
- 弱いパスワードの検出: システム内に設定されているSIPアカウントのパスワード強度をテストし、容易に推測可能なパスワード(例: “1234”, “password”, ユーザー名と同じパスワードなど)が使用されていないかを確認します。
- パスワードポリシーの有効性評価: 組織で定められているパスワードポリシー(最低文字数、複雑さの要件など)が、実際にパスワードクラッキングに対してどの程度の耐性を持つかを評価します。
- 不正アクセス経路の特定: もしパスワードがクラックされた場合、そのアカウントが持つ権限でどのような操作が可能か、さらなる侵入や盗聴につながるかなどを調査します。
テスト結果に基づき、パスワードポリシーの見直し、ユーザーへのセキュリティ教育、システム設定の強化などの対策を講じることが目的です。
SIP通信の盗聴リスクと対策
SIPdumpが機能するということは、ネットワーク経路上でSIP通信の内容(認証情報を含むシグナリング)が傍受可能であることを意味します。特に暗号化されていないUDPやTCP上でSIP通信が行われている場合、中間者攻撃(Man-in-the-Middle attack)などによって容易に盗聴されるリスクがあります。
このリスクに対する最も効果的な対策は、TLS (Transport Layer Security) を使用してSIPシグナリングを暗号化することです (SIPS)。TLSを使用すれば、たとえ通信が傍受されても、内容を解読することは極めて困難になります。
また、メディアストリーム(音声/映像データ)の盗聴を防ぐためには、SRTP (Secure Real-time Transport Protocol) を使用してRTPパケットを暗号化することが推奨されます。
強力なパスワード設定の重要性
たとえDigest認証が使用されていても、パスワードが脆弱であれば、John the Ripperのようなツールによって比較的短時間で解読されてしまう可能性があります。以下の点を考慮し、強力なパスワードポリシーを適用・徹底することが重要です。
- 十分な長さ: 最低でも12文字以上、できれば15文字以上を推奨します。
- 複雑さ: 大文字、小文字、数字、記号を組み合わせることを要求します。
- 推測困難性: ユーザー名、サービス名、辞書に載っている単語、単純なパターン(”qwerty”, “123456”)などを避けます。
- 定期的な変更: 一定期間ごとにパスワードの変更を強制します(ただし、頻繁すぎると逆に弱いパスワードが使われる原因にもなりうるためバランスが重要です)。
- パスワードの使い回し禁止: 他のサービスと同じパスワードを使用しないように指導します。
法的・倫理的な注意点 ⚖️
繰り返しになりますが、SIPdumpやJohn the Ripperのようなツールは、許可なく他者のシステムやネットワークに対して絶対に使用してはいけません。これは不正アクセス行為として法的に罰せられる可能性があります。
これらのツールを使用する際は、以下の点を厳守してください。
- 自身が管理するシステム、または明確な許可を得たシステムに対してのみ使用する。
- テストの目的、範囲、期間などを事前に明確にし、関係者と合意する。
- テスト中に得られた機密情報(クラックされたパスワードなど)は厳重に管理し、目的外利用や漏洩を防ぐ。
- テスト後は、発見された脆弱性に関する報告と、具体的な対策案を提示する。
倫理的なハッキングとセキュリティ評価の原則に従い、責任ある行動を心がけてください。
まとめ ✨
この記事では、SIP通信から認証情報を抽出し、その強度を評価するための一連のプロセス、特にSIPdump (sip2john.py) とJohn the Ripperの使い方について詳しく解説しました。
SIPdump (sip2john.py) は、ネットワークトラフィック(ライブまたはPCAPファイル)からSIP Digest認証のチャレンジ/レスポンス情報を抽出し、John the Ripperが解析可能なハッシュ形式に変換します。John the Ripperは、そのハッシュ情報と様々な攻撃モード(辞書攻撃、ブルートフォース攻撃、マスク攻撃など)を駆使して、元のパスワードを推測しようと試みます。
これらのツールは、VoIPシステムのセキュリティ担当者が自システムの脆弱性を評価し、パスワードポリシーの有効性を確認するために非常に有用です。しかし、その強力さゆえに、悪用されれば深刻な被害につながる可能性もあります。ツールの使用にあたっては、必ず法と倫理を遵守し、正当な権限の下でのみ利用してください。
VoIPシステムの安全性を確保するためには、以下の対策が不可欠です。
- TLSによるSIPシグナリングの暗号化 (SIPS)
- SRTPによるメディアストリームの暗号化
- 強力なパスワードポリシーの適用と徹底
- 不要なSIPポートの公開停止、ファイアウォールによるアクセス制御
- SIPサーバソフトウェアの脆弱性対策(定期的なアップデート)
- 定期的なセキュリティ監査とペネトレーションテストの実施
これらの対策を講じることで、SIPdumpやJohn the Ripperを用いた攻撃のリスクを大幅に低減し、安全なVoIPコミュニケーション環境を維持することができます。💪
参考情報 📚
この記事を作成するにあたり、以下の情報を参考にしました。
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper Community Wiki (GitHub): https://github.com/openwall/john/wiki
- RFC 3261 – SIP: Session Initiation Protocol: https://datatracker.ietf.org/doc/html/rfc3261
- RFC 2617 – HTTP Authentication: Basic and Digest Access Authentication: https://datatracker.ietf.org/doc/html/rfc2617
- RFC 8760 – The Session Initiation Protocol (SIP) Digest Access Authentication Scheme: https://datatracker.ietf.org/doc/html/rfc8760
- Kali Linux Tools – sipcrack: https://www.kali.org/tools/sipcrack/ (sipdumpが含まれるパッケージの情報)
- JPCERT/CC Alert 2013-09-06 – SIP サーバの不正利用に関する注意喚起: https://www.jpcert.or.jp/at/2013/at130036.html
コメント