dcrack を使った分散型 WPA パスワードクラッキング入門 🚀

セキュリティツール

はじめに:dcrackとは? 🤔

Wi-Fi のセキュリティをテストする際、特に WPA/WPA2-PSK (Pre-Shared Key) のパスワード強度を検証するために、パスワードクラッキングという手法が用いられることがあります。しかし、複雑なパスワードや長いパスワードの場合、1台のコンピュータでクラッキングを試みると膨大な時間がかかる可能性があります。⏰

ここで登場するのが dcrack です。dcrack は、有名な無線LANセキュリティ監査ツールスイートである Aircrack-ng に含まれるスクリプトの一つで、WPA/WPA2-PSK のパスワードクラッキング処理を複数のコンピュータに分散させるためのツールです。

dcrack は Python スクリプト (dcrack.py) として提供されており、サーバーとクライアントのアーキテクチャを採用しています。サーバーが中心となってクラッキングタスクを管理し、複数のクライアント(他のコンピュータ)が実際の計算処理(パスワードの試行)を分担します。これにより、1台で行うよりも大幅にクラッキング時間を短縮できる可能性があります。まさに「三人寄れば文殊の知恵」ならぬ「複数台寄ればパスワードクラック」ですね!💪

⚠️ 重要: この記事で紹介する技術は、自身が管理するネットワーク、または明示的な許可を得たネットワークに対してのみ、セキュリティ評価の目的で使用してください。許可なく他人のネットワークにアクセスしたり、クラッキングを試みたりすることは、法律で禁止されており、重大な罰則の対象となります。倫理的な利用を心がけてください。

前提条件と必要なもの 🛠️

dcrack を使用するには、以下のものが必要です。

  • Aircrack-ng スイート: dcrack 本体だけでなく、クライアント側でパスワード試行を行うために aircrack-ng コマンドが必要です。Kali Linux などのペネトレーションテスト用ディストリビューションには通常、プリインストールされています。
    (Kali Linux Tools ページ: https://www.kali.org/tools/aircrack-ng/)
  • Python 環境: dcrack.py は Python スクリプトであるため、実行には Python が必要です。Python 2 と Python 3 の両方に対応しているようですが、最新の環境での動作確認が推奨されます。
  • サーバーとクライアントとなるコンピュータ: クラッキング処理を分散させるため、最低1台のサーバーと1台以上のクライアントが必要です。これらはネットワーク経由で相互に通信できる必要があります。LAN 内にあるマシン群などが典型的です。
  • WPA/WPA2 ハンドシェイクを含むキャプチャファイル (.cap): airodump-ng などのツールを使って事前に収集した、ターゲットネットワークの WPA/WPA2 4ウェイハンドシェイクが含まれる .cap または .pcap ファイルが必要です。ハンドシェイクの取得方法は Aircrack-ng の WPA クラッキングチュートリアルなどを参照してください。
    (参考: チュートリアル: WPA/WPA2 のクラッキング方法について – Aircrack-ng)
  • 辞書ファイル (Wordlist): パスワード候補となる単語がリストアップされたテキストファイルです。クラッキングの成功率は、この辞書ファイルの質と量に大きく依存します。

dcrack のアーキテクチャ 🏢

dcrack はシンプルなクライアント/サーバーモデルを採用しています。

  • dcrack サーバー (dcrack_server):
    • クラッキングタスク全体を管理・調整する役割を担います。
    • クライアントからの接続を受け付けます。
    • ユーザー(管理者)からキャプチャファイル (.cap) と辞書ファイルを受け取ります。
    • 辞書ファイルをチャンク(塊)に分割し、各クライアントに割り当てます。
    • クライアントの処理能力(クラッキング速度)を評価し、それに応じて作業量を調整します。
    • クライアントからの結果(パスワードが見つかったかどうか)を受け取り、管理者に報告します。
    • 通常、1つの dcrack 環境に1台だけ存在します。
  • dcrack クライアント (dcrack_client):
    • 実際のパスワードクラッキング処理(計算)を実行する役割を担います。
    • サーバーに接続し、自身の処理能力を報告します。
    • サーバーから割り当てられた辞書ファイルのチャンクを受け取ります。
    • ローカルの aircrack-ng コマンドを使用して、受け取った辞書チャンクとキャプチャファイルに基づきパスワードの試行を行います。
    • パスワードを発見した場合、または割り当てられたチャンクの処理が完了した場合、その結果をサーバーに報告します。
    • 通常、複数台存在し、多ければ多いほど全体のクラッキング速度が向上します。
  • 管理用クライアント (dcrack):
    • サーバーに対して指示(キャプチャファイルや辞書ファイルのアップロード、クラッキング開始、ステータス確認など)を送るために使用します。

これらのコンポーネントは TCP 通信を使用して連携します。デフォルトではポート 1337 を使用するようです。

dcrack アーキテクチャ概要 (テキスト表現)
+-------------------+      +-------------------+      +-------------------+
| dcrack クライアント1 | ---- |   dcrack サーバー   | ---- | dcrack クライアント2 |
| (計算実行)        |      | (タスク管理)      |      | (計算実行)        |
+-------------------+      +---------+---------+      +-------------------+
                              |
                              |
                              |
                      +-------+-------+
                      | 管理用クライアント |
                      | (指示送信)     |
                      +---------------+
        

dcrack サーバーのセットアップ 🖥️

まず、クラッキングタスクを管理するサーバーを起動します。dcrack スクリプトは Aircrack-ng のインストールディレクトリ内の scripts/ サブディレクトリにあることが多いです。もしパスが通っていない場合は、スクリプトへのフルパスを指定するか、scripts/ ディレクトリに移動してから実行してください。

サーバーは dcrack_server というシンボリックリンクまたはラッパースクリプトから起動できる場合があります。もしくは、dcrack.py --server のように直接実行します。


# 例: シンボリックリンク/ラッパーがある場合
dcrack_server [オプション]

# 例: dcrack.py を直接実行する場合
python /path/to/aircrack-ng/scripts/dcrack.py --server [オプション]
    

主なオプションは以下の通りです(dcrack.py --help で確認できます)。

オプション 説明
-l <IPアドレス> or --listen <IPアドレス> サーバーが待ち受ける IP アドレスを指定します。デフォルトは 0.0.0.0(すべてのインターフェース)です。
-p <ポート番号> or --port <ポート番号> サーバーが待ち受ける TCP ポート番号を指定します。デフォルトは 1337 です。
-c <チャンクサイズ> or --chunk <チャンクサイズ> 辞書ファイルを分割する際のチャンクサイズ(行数)を指定します。デフォルトは 10000 です。クライアントの性能やネットワーク状況に応じて調整します。
-d or --debug デバッグ情報を表示します。問題発生時のトラブルシューティングに役立ちます。
-w <ファイルパス> or --wordlist <ファイルパス> サーバー起動時に辞書ファイルを指定します。(ただし、後から管理用クライアントでアップロードするのが一般的です)

実行例:


dcrack_server -p 8888 -c 5000
# または
python /usr/share/aircrack-ng/scripts/dcrack.py --server -p 8888 -c 5000
    

上記の例では、サーバーはすべてのネットワークインターフェースのポート 8888 で待ち受けを開始し、辞書ファイルを5000行ずつのチャンクに分割します。

サーバーが起動すると、クライアントからの接続待ち状態になります。クライアントが接続したり、タスクが進行したりすると、その状況がターミナルに出力されます。

dcrack クライアントのセットアップ 💻

次に、実際のクラッキング処理を行うクライアントを起動します。クライアントとなる各マシンで以下のコマンドを実行します。

クライアントも dcrack_client というシンボリックリンクまたはラッパースクリプト、あるいは dcrack.py --client で起動します。


# 例: シンボリックリンク/ラッパーがある場合
dcrack_client [オプション]

# 例: dcrack.py を直接実行する場合
python /path/to/aircrack-ng/scripts/dcrack.py --client [オプション]
    

主なオプションは以下の通りです。

オプション 説明
-s <サーバーIPアドレス> or --server <サーバーIPアドレス> 接続する dcrack サーバーの IP アドレスを指定します。必須です。
-p <ポート番号> or --port <ポート番号> 接続する dcrack サーバーのポート番号を指定します。サーバー側で変更した場合は、こちらも合わせる必要があります。デフォルトは 1337 です。
-d or --debug デバッグ情報を表示します。
-a <aircrack-ngパス> or --aircrack <aircrack-ngパス> aircrack-ng 実行ファイルのパスを指定します。通常は自動で検出されますが、見つからない場合に指定します。

実行例:


dcrack_client -s 192.168.1.100 -p 8888
# または
python /usr/share/aircrack-ng/scripts/dcrack.py --client -s 192.168.1.100 -p 8888
    

上記の例では、クライアントは IP アドレス 192.168.1.100、ポート 8888 で稼働している dcrack サーバーに接続を試みます。

クライアントは起動すると、まずサーバーに接続し、自身のクラッキング速度を測定してサーバーに報告します(aircrack-ng -S コマンドが内部で使用されるようです)。その後は、サーバーからタスク(辞書チャンクとキャプチャファイルの情報)が割り当てられるのを待ちます。

クラッキングの実行と管理 🕹️

サーバーとクライアントが起動したら、管理用のクライアント(これも dcrack.py または dcrack コマンド)を使ってサーバーに指示を送ります。


# 例: シンボリックリンク/ラッパーがある場合
dcrack [オプション] <コマンド> [コマンド引数]

# 例: dcrack.py を直接実行する場合
python /path/to/aircrack-ng/scripts/dcrack.py [オプション] <コマンド> [コマンド引数]
    

ここでも -s <サーバーIP>-p <ポート> オプションで接続先サーバーを指定します。

主な管理コマンドには以下のようなものがあります。

コマンド 説明
dict <辞書ファイルパス> 指定した辞書ファイルをサーバーにアップロードします。サーバーはこれを受け取り、チャンクに分割してクライアントへの配布準備をします。 dcrack -s 192.168.1.100 dict /usr/share/wordlists/rockyou.txt
cap <キャプチャファイルパス> ハンドシェイクを含むキャプチャファイル (.cap) をサーバーにアップロードします。 dcrack -s 192.168.1.100 cap ./handshake-01.cap
crack <BSSID> 指定した BSSID (アクセスポイントの MAC アドレス) に対して、アップロード済みの辞書とキャプチャファイルを用いたクラッキングを開始するようサーバーに指示します。 dcrack -s 192.168.1.100 crack 00:11:22:33:44:55
status 現在のクラッキング状況(接続中のクライアント数、処理済みのチャンク数、全体の進捗率など)をサーバーに問い合わせて表示します。 dcrack -s 192.168.1.100 status
remove <BSSID> 指定した BSSID のクラッキングタスクを停止・削除します。 dcrack -s 192.168.1.100 remove 00:11:22:33:44:55

一般的な流れ:

  1. dcrack_server を起動する。
  2. 複数のマシンで dcrack_client を起動し、サーバーに接続させる。
  3. 管理用クライアントから dict コマンドで辞書ファイルをアップロードする。
  4. 管理用クライアントから cap コマンドでキャプチャファイルをアップロードする。
  5. 管理用クライアントから crack <BSSID> コマンドでクラッキングを開始する。
  6. サーバーは接続中のクライアントに辞書チャンクとキャプチャ情報を配布する。
  7. 各クライアントは割り当てられた範囲のパスワード試行を開始する。
  8. 管理用クライアントから status コマンドで進捗状況を監視する。
  9. いずれかのクライアントがパスワードを発見すると、サーバーに報告される。
  10. サーバーは発見されたパスワードをログなどに出力し、タスクを終了する。

パスワードが見つかると、サーバーのログや status コマンドの結果で確認できるはずです。🎉 もし辞書ファイル全体を試行しても見つからなければ、その旨が報告されます。

考慮事項とヒント ✨

  • チャンクサイズの調整 (-c オプション): チャンクサイズが小さすぎると、クライアントとサーバー間の通信オーバーヘッドが増加する可能性があります。逆に大きすぎると、クライアントの処理が完了するまでに時間がかかり、一部のクライアントが遊んでしまう時間が長くなる可能性があります。ネットワークの速度やクライアントの数、性能に応じて最適な値を見つけることが重要です。
  • ネットワーク帯域: 最初に辞書ファイルやキャプチャファイルをサーバーにアップロードする際、またサーバーがクライアントにタスクを配布する際にネットワーク帯域を使用します。巨大な辞書ファイルを使用する場合、相応の時間がかかることがあります。
  • クライアントの安定性: クライアントマシンが途中でオフラインになったり、クラッシュしたりすると、そのクライアントに割り当てられていたチャンクの処理が中断されます。サーバーは通常、他の利用可能なクライアントにそのチャンクを再割り当てしようとしますが、頻繁に発生すると効率が低下します。安定したクライアントマシンを用意することが望ましいです。
  • ファイアウォール設定: サーバーとクライアント間で通信が行われるため、各マシンで設定されているファイアウォールが dcrack が使用するポート(デフォルト 1337)での TCP 通信を許可していることを確認してください。
  • 代替ツール: 分散クラッキングの分野では、dcrack の他にも Hashcat の分散クラッキング機能 (Overlay) などが存在します。より高機能であったり、GPU を活用して高速化を図れたりする場合があるので、要件に応じて比較検討する価値があります。
  • 辞書ファイルの重要性: 分散処理でどれだけ高速化しても、辞書ファイルに正解のパスワードが含まれていなければクラッキングは成功しません。効果的な辞書ファイルの選定や作成が、成功の鍵となります。

まとめ 🙏

dcrack は Aircrack-ng スイートに含まれる便利なツールで、複数のコンピュータのリソースを結集して WPA/WPA2-PSK パスワードのクラッキング試行を高速化できます。サーバー/クライアントモデルにより、セットアップも比較的容易です。

しかし、改めて強調しますが、このツールの使用は自身が管理する、または許可を得たネットワークのセキュリティ評価目的に限定してください。不正な目的での使用は絶対に避けるべきです。

この記事が、dcrack の基本的な使い方を理解し、適切な状況で活用するための一助となれば幸いです。Happy (ethical) hacking! 😉

参考情報

コメント

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