vncpcap2john を使ってVNCパスワードを解析する方法徹底解説! 💻

セキュリティツール

ネットワークキャプチャからVNC認証情報を抽出し、John the Ripperでパスワードクラックを行う手順

はじめに:VNCとパスワード解析の基礎知識

VNC (Virtual Network Computing) は、ネットワーク経由で他のコンピュータのデスクトップ画面を遠隔操作するための便利なプロトコルです。多くのプラットフォームで利用可能であり、システム管理やリモートサポートなどで広く使われています。しかし、その利便性の裏側には、セキュリティリスクも潜んでいます。特に、認証に使われるパスワードが脆弱な場合、第三者に不正アクセスされる可能性があります。

VNC接続の際には、通常、パスワード認証が行われます。この認証プロセスでは、サーバーとクライアント間でチャレンジレスポンス認証と呼ばれるやり取りが行われます。具体的には、サーバーがランダムな「チャレンジ」データをクライアントに送り、クライアントはパスワードを使ってチャレンジを暗号化し、「レスポンス」としてサーバーに返します。サーバーは自身が知っているパスワードで同じ計算を行い、結果が一致すれば認証成功となります。

注意: 古いバージョンのVNC(特にチャレンジレスポンス認証にDESを使用するもの)では、パスワードの取り扱いに注意が必要です。DES暗号は鍵長が56ビットに制限されており、ASCII文字(7ビット)で考えると最大8文字までしか有効ではありません。また、パスワードをそのまま使うのではなく、各バイトのビット順序を反転させるなどの変換が行われる場合があります。

もし、このVNC認証時のネットワーク通信(パケット)をキャプチャできれば、そのデータからパスワードのハッシュ情報を抽出できる可能性があります。そして、そのハッシュ情報を強力なパスワード解析ツールにかけることで、元のパスワードを推測(クラック)できる場合があります。

ここで登場するのが、vncpcap2johnJohn the Ripper (通称 JtR) です。

  • vncpcap2john: VNCの通信を記録したPCAPファイルから、John the Ripperが解析できる形式のハッシュ情報を抽出するためのツールです。John the Ripper のツールスイートの一部として提供されています。
  • John the Ripper: オープンソースで非常に強力なパスワードクラッキングツールです。様々な種類のハッシュ形式に対応しており、辞書攻撃や総当たり攻撃(ブルートフォースアタック)など、多様な手法でパスワード解析を行います。

この記事では、vncpcap2john を使ってVNCのネットワークキャプチャファイル(PCAP)からパスワードハッシュを抽出し、それを John the Ripper で解析する具体的な手順を、詳しく解説していきます。✨

【重要】 この記事で解説する内容は、あくまでセキュリティテストや教育目的での利用を想定しています。許可なく他者のネットワーク通信をキャプチャしたり、パスワードを解析したりする行為は、法律で禁止されており、重大な犯罪となります。 必ず、自身が管理する環境や、明確な許可を得た環境でのみ実施してください。倫理的な観点を常に念頭に置き、技術を悪用しないようにしましょう。

ステップ1:準備 – 必要なツールとファイル

VNCパスワード解析を始める前に、いくつかの準備が必要です。

vncpcap2john は、John the Ripper の “jumbo” バージョンに含まれるツールです。そのため、まずは John the Ripper jumbo をインストールする必要があります。

多くのLinuxディストリビューション(Kali Linuxなど)では、パッケージマネージャを使って簡単にインストールできます。

Debian/Ubuntu/Kali Linux の場合:

sudo apt update
sudo apt install john

Fedora/CentOS/RHEL の場合:

sudo dnf install john
または
sudo yum install john

macOSの場合は、Homebrew を使うと便利です。

macOS (Homebrew) の場合:

brew update
brew install john-jumbo

Windowsの場合は、公式サイトからバイナリをダウンロードするか、WSL (Windows Subsystem for Linux) を利用してLinux環境を構築し、そこでインストールするのが一般的です。

公式サイト: https://www.openwall.com/john/

インストール後、ターミナル(コマンドプロンプト)で john と入力して、ヘルプメッセージが表示されれば成功です。また、vncpcap2john コマンドも利用可能になっているはずです。(環境によっては、フルパス `/usr/sbin/vncpcap2john` などで実行する必要があるかもしれません)

vncpcap2john が処理するのは、VNCの認証ハンドシェイクが含まれたネットワークキャプチャファイルです。このファイルは通常 .pcap または .pcapng という拡張子を持ちます。

PCAPファイルを入手する方法はいくつかあります。

  • 自身でキャプチャする: tcpdumpWireshark といったパケットキャプチャツールを使って、VNC接続時の通信を記録します。
  • テスト用のサンプルファイルを利用する: WiresharkのWikiなどで、学習目的で公開されているサンプルPCAPファイルを利用できます。(例:Wireshark Sample Captures
  • CTF (Capture The Flag) やペネトレーションテストの演習で提供されるファイル: セキュリティ演習の一環として、解析対象のPCAPファイルが提供されることがあります。

次のセクションでは、tcpdump を使って自分でVNC通信をキャプチャする方法を簡単に説明します。

ステップ2:VNC通信のキャプチャ (tcpdump を使用)

vncpcap2john で解析するためのPCAPファイルがない場合は、自分でキャプチャする必要があります。ここでは、Linuxで広く使われているコマンドラインツール tcpdump を使った基本的なキャプチャ方法を紹介します。

VNCは通常、TCPポート 5900番台(5900, 5901, 5902…)を使用します。また、Webブラウザ経由でJavaアプレットを使用する場合は5800番台が使われることもあります。ここでは、標準的なポート5900番を対象とします。

ヒント: Wireshark のようなGUIツールを使えば、より視覚的にパケットを確認しながらキャプチャできます。使い慣れたツールがある場合は、そちらを利用しても問題ありません。重要なのは、VNCの認証ハンドシェイクを含むパケットを確実に記録することです。

以下のコマンドは、特定のネットワークインターフェース(例:eth0)で、TCPポート5900番宛または送信元の通信をキャプチャし、vnc_capture.pcap というファイルに保存します。

sudo tcpdump -i eth0 -w vnc_capture.pcap tcp port 5900
  • sudo: 管理者権限で実行するために必要です(ネットワークインターフェースへのアクセスに権限が必要なため)。
  • -i eth0: キャプチャ対象のネットワークインターフェースを指定します。環境に合わせて適切なインターフェース名(wlan0, ens33 など)に変更してください。-i any とすると、すべてのインターフェースを対象にできます。
  • -w vnc_capture.pcap: キャプチャしたデータを指定したファイルに書き込みます。
  • tcp port 5900: キャプチャするパケットのフィルタ条件です。TCPプロトコルで、ポート番号が5900の通信のみを対象とします。

このコマンドを実行した状態で、別の端末やマシンから対象のVNCサーバーへ接続を試みます。パスワード認証が行われると、その通信データが vnc_capture.pcap に記録されます。

認証シーケンス(接続開始からパスワード入力、認証結果の応答まで)が終わったら、tcpdump を実行しているターミナルで Ctrl + C を押してキャプチャを停止します。

これで、vncpcap2john で処理するためのPCAPファイルが準備できました 🎉。

暗号化されたVNC通信について: RealVNCなどの一部のVNC実装では、TLSなどを用いて通信全体を暗号化するオプションがあります。通信が暗号化されている場合、単にパケットをキャプチャしただけでは、認証に必要なチャレンジやレスポンスのデータを平文で取得することはできません。この記事で解説する方法は、暗号化されていない、または比較的古い認証方式(チャレンジレスポンスが平文で見える)のVNC通信を対象としています。

ステップ3:vncpcap2john の使い方 – ハッシュの抽出

PCAPファイルの準備ができたら、いよいよ vncpcap2john を使って、John the Ripper が解析できる形式のハッシュ情報を抽出します。

基本的な使い方は非常にシンプルです。ターミナルで以下のコマンドを実行します。

vncpcap2john <pcapファイル名>

例えば、前のステップで作成した vnc_capture.pcap を処理する場合は、次のようになります。

vncpcap2john vnc_capture.pcap

成功すると、標準出力に以下のような形式でハッシュ情報が表示されます。

<送信元IP> to <宛先IP>:$vnc$*<チャレンジ>*<レスポンス>

具体例:

192.168.1.100 to 192.168.1.50:$vnc$*1A2B3C4D5E6F78901A2B3C4D5E6F7890*01ABCDEF01ABCDEF01ABCDEF01ABCDEF
  • 192.168.1.100 to 192.168.1.50: 通信の送信元と宛先のIPアドレスを示します(これはJohn the Ripperの解析には直接使われませんが、どの接続に関するハッシュか識別するのに役立ちます)。
  • $vnc$: このハッシュがVNC認証のものであることを示す識別子です。
  • *<チャレンジ>*: VNCサーバーから送信された16バイト(32桁の16進数)のチャレンジデータです。
  • <レスポンス>: VNCクライアントがパスワードを使ってチャレンジを暗号化して返した16バイト(32桁の16進数)のレスポンスデータです。

この出力されたハッシュ情報を、テキストファイルに保存します。例えば、vnc_hash.txt というファイル名で保存するには、リダイレクトを使います。

vncpcap2john vnc_capture.pcap > vnc_hash.txt

これで、John the Ripper で解析するためのハッシュファイル (vnc_hash.txt) が作成できました 👍。

もしハッシュが出力されない場合は?

  • PCAPファイルに有効なVNC認証ハンドシェイクが含まれていない可能性があります。キャプチャ範囲やフィルタ条件を確認してください。
  • vncpcap2john が対応していないVNCプロトコルのバージョンや認証方式である可能性があります。(vncpcap2john は主にRFBプロトコルバージョン 3.3, 3.7, 3.8 のチャレンジレスポンス認証に対応しています)
  • PCAPファイルが破損しているか、形式が正しくない可能性があります。Wiresharkなどで開けるか確認してみてください。
  • vncpcap2john の実行に必要なライブラリ(libpcapなど)が正しくインストールされていない可能性があります。

なお、vncpcap2john 自体には多くのオプションはありませんが、John the Ripper 本体には多数のオプションが存在します。次のステップでは、John the Ripper を使って実際にパスワードを解析します。

ステップ4:John the Ripper でパスワード解析 🔑

vncpcap2john で抽出したハッシュファイル (vnc_hash.txt) を使って、いよいよ John the Ripper でパスワード解析を実行します。

John the Ripper にはいくつかの解析モードがありますが、ここでは代表的なものを紹介します。

最も簡単な方法は、John the Ripper に解析モードを自動で選択させることです。以下のコマンドを実行します。

john vnc_hash.txt

John the Ripper はまず「シングルクラックモード」を試みます。これは、ハッシュファイルに含まれるユーザー名などの情報からパスワードを推測するモードです(VNCハッシュの場合はあまり効果がないかもしれません)。次に、「辞書モード」に移り、デフォルトの辞書ファイル (password.lst) とルールを使って解析を試みます。最後に、「インクリメンタルモード」(総当たり攻撃)に移行します。

特定の辞書ファイルを使って解析を行いたい場合は、--wordlist オプションを使用します。一般的なパスワードリスト (rockyou.txt など) を使うと、解析成功率が上がることがあります。

john --wordlist=/path/to/your/wordlist.txt vnc_hash.txt

(/path/to/your/wordlist.txt は実際の辞書ファイルのパスに置き換えてください)

さらに、--rules オプションを使うことで、辞書内の単語に特定の変化(大文字小文字変換、数字や記号の追加など)を加える「ルール」を適用できます。これにより、単純な単語だけでなく、より複雑なパスワードも発見できる可能性が高まります。

john --wordlist=/path/to/your/wordlist.txt --rules vnc_hash.txt

(デフォルトのルールセットが適用されます。特定のルールセットを指定することも可能です)

辞書攻撃でパスワードが見つからない場合、考えられる文字の組み合わせをすべて試す総当たり攻撃(ブルートフォース)であるインクリメンタルモードを試します。このモードは非常に時間がかかる可能性があります。

john --incremental vnc_hash.txt

特定の文字種(数字のみ、英小文字のみなど)や長さを指定することも可能です。詳細は John the Ripper のドキュメントを参照してください。

John the Ripper の実行中に任意のキー(スペースキーなど)を押すと、現在の進行状況(試行速度、経過時間、次に試行するパスワード候補など)が表示されます。Ctrl + C を押すと、現在の状態を保存して中断できます (john --restore で再開可能)。

パスワードの解析に成功すると、以下のように表示されます。

Loaded 1 password hash (VNC)
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (192.168.1.100 to 192.168.1.50)
1g 0:00:00:05 DONE (2025-03-31 06:00) 0.1886g/s 12345p/s 12345c/s 12345C/s qwerty..admin
Use the "--show" option to display all of the cracked passwords reliably
Session completed

上記の例では、パスワード password123 が発見されたことを示しています。

解析が完了した後や、中断したセッションでクラック済みのパスワードを確認するには、--show オプションを使います。

john --show vnc_hash.txt

成功していれば、以下のようにハッシュとクラックされたパスワードが表示されます。

192.168.1.100 to 192.168.1.50:password123

1 password hash cracked, 0 left

クラックされたパスワードは、John the Ripper の作業ディレクトリにある john.pot というファイルにも記録されます。

解析成功! これで、VNCのパスワードを特定できました。

解析時間について: パスワードの複雑さ(長さ、文字種)や使用するマシンの性能、辞書ファイルの質によって、解析にかかる時間は大きく異なります。単純なパスワードなら数秒で見つかることもありますが、複雑なパスワードの場合は数日、数週間、あるいはそれ以上かかることもあります。

vncpcap2john が対応する認証方式

vncpcap2john は、すべてのVNC認証方式に対応しているわけではありません。主に、伝統的なVNCチャレンジレスポンス認証 (VNC Authentication) をターゲットとしています。この方式は、RFB (Remote Framebuffer) プロトコルのバージョン 3.3, 3.7, 3.8 などで使われています。

この認証方式では、前述の通り、サーバーからの16バイトのチャレンジと、クライアントからの16バイトのレスポンス(チャレンジをパスワードから派生したDESキーで暗号化したもの)がネットワーク上を流れます。vncpcap2john は、PCAPファイルからこのチャレンジとレスポンスのペアを特定し、John the Ripper が処理できる形式 ($vnc$*<challenge>*<response>) に変換します。

以下の認証方式や状況では、vncpcap2john は基本的に機能しません。

  • None Authentication: パスワード認証なしで接続できる場合。
  • TLS Security Type: VeNCrypt拡張などを使用し、TLS/SSLによって通信全体が暗号化されている場合。チャレンジレスポンス自体が暗号化されているため、キャプチャしても解析できません。
  • その他の独自認証方式: 特定のVNCソフトウェアが実装している独自またはより高度な認証方式。

対応状況の確認

確実な対応状況については、使用している John the Ripper (jumbo) のバージョンに含まれる vncpcap2john のソースコード (vncpcap2john.cpp など) や、関連ドキュメントを確認するのが最も正確です。

GitHubリポジトリ例: https://github.com/openwall/john/blob/bleeding-jumbo/src/vncpcap2john.c

したがって、vncpcap2john を利用する際は、対象のVNC接続が、解析可能な認証方式(主に暗号化されていないチャレンジレスポンス認証)を使用していることが前提となります。

注意点と倫理的考慮事項 ⚠️

vncpcap2johnJohn the Ripper は非常に強力なツールですが、その使用には重要な注意点と倫理的な責任が伴います。

法的・倫理的な問題:

  • 許可なきアクセス・解析の禁止: 他人のコンピュータシステムやネットワーク通信に対して、所有者や管理者の明確な許可なくアクセス、キャプチャ、解析を行うことは、不正アクセス禁止法などの法律に違反する可能性があります。これは重大な犯罪行為であり、絶対に行ってはいけません。
  • 目的外利用の禁止: セキュリティ評価やパスワード強度テストなどの正当な目的以外でこれらのツールを使用することは、倫理的に問題があります。
  • 責任ある使用: ツールの使用によって生じるいかなる結果についても、使用者が責任を負います。
  • 解析時間: パスワードのクラッキングには、パスワードの複雑さやマシンスペックによっては非常に長い時間がかかることがあります。
  • 成功の保証なし: 強力なパスワード(長く、複雑で、辞書に載っていないもの)は、現実的な時間内にクラックできない可能性が高いです。
  • リソース消費: 特にブルートフォース攻撃は、CPUリソースを大量に消費します。
  • 暗号化通信: TLSなどで暗号化されたVNC通信に対しては、ここで説明した手法は通用しません。
  • ツールのバージョン: John the Ripper や vncpcap2john は継続的に開発されています。最新の機能や修正を利用するために、定期的にアップデートを確認することが推奨されます。

ペネトレーションテスト(侵入テスト)のシナリオにおいて、脆弱性評価の一環としてVNCサービスのパスワード強度をテストするために vncpcap2john と John the Ripper が利用されることがあります。しかし、その場合でも以下の点が重要です。

  • 明確な合意と許可: テスト対象システムの所有者から、テストの範囲、期間、手法について、書面による明確な合意と許可を得ている必要があります。
  • 影響の最小化: テスト対象システムへの負荷や影響を最小限に抑えるよう配慮する必要があります。
  • 機密保持: テスト中に得られた情報(パスワードを含む)は、厳重に管理し、許可された報告以外の目的で使用してはいけません。

技術は使い方次第で善にも悪にもなり得ます。これらのツールを使用する際は、常に倫理観を持ち、法律を遵守し、責任ある行動を心がけてください。

まとめ

この記事では、VNCのネットワーク通信キャプチャ(PCAPファイル)からパスワードハッシュを抽出し、それを解析するためのツール vncpcap2johnJohn the Ripper の使い方について詳しく解説しました。

  1. 準備: John the Ripper (jumbo) をインストールし、解析対象のVNC認証ハンドシェイクを含むPCAPファイルを用意します。
  2. キャプチャ (任意): 必要であれば、tcpdump や Wireshark を使ってVNC通信をキャプチャします。
  3. ハッシュ抽出: vncpcap2john <pcapファイル> > <ハッシュファイル> コマンドで、PCAPファイルから $vnc$*... 形式のハッシュを抽出します。
  4. パスワード解析: john <ハッシュファイル> コマンドを実行し、John the Ripper にパスワード解析を行わせます。必要に応じて --wordlist--rules--incremental などのオプションを使用します。
  5. 結果確認: john --show <ハッシュファイル> で解析結果を確認します。

vncpcap2john は、特定のVNC認証方式(主に暗号化されていないチャレンジレスポンス認証)に対するパスワード強度テストやセキュリティ監査において有用なツールです。しかし、その使用は必ず法的・倫理的な範囲内で行う必要があります。

VNCを含むあらゆるシステムにおいて、推測されにくい強力なパスワードを設定し、可能であれば多要素認証を導入するなど、適切なセキュリティ対策を講じることが非常に重要です。🔐

参考情報

コメント

タイトルとURLをコピーしました