2014年1月13日 星期一

無線網路安全:破解 WPA/WPA2 - 第一種作法

參考聲明

參考破解 WEP,有一些前備知識在裡面。

WPA 和 WPA2 放在一起講,其實破解的過程是一樣的,以下都以 WPA 稱之。

WPA 的密碼長度介在 8 到 63 個字元之間,目前我所知道的破解方法有以下幾種:
  • 暴力解密
  • 透過 WPS (Wi-Fi Protected Setup) 破解
  • 單方向的中間人攻擊
本文主要先介紹第一種破解 WPA 的作法 - 暴力解密。

暴力猜密碼的方式是目前最穩定的方式,但是也是最無法保證可以成功的方式。暴力猜密碼可以透過字典檔或者是窮舉所有可能字元來運作,因為 WPA 的密碼長度最小要求是 8 個字元,最長是 63 個字元,如果真的有人設定 63 個字元為密碼(前提是要記得而且不能打錯字),那麼破解幾乎是不可能的,因為所需要的時間太長,或許真的拿個榔頭去逼迫設定密碼的人告訴你密碼是什麼,都會比較容易一點(誤)。
從攻擊的角度來看,暴力解密的優缺點如下。

優點:
  • 隱密、合法使用者不容易發現到異狀
  • 絕大部分的無線網卡都可作到
  • 和無線基地台的廠牌或硬體狀態無關
  • 破解軟體成熟穩定,大部分的系統都可安裝執行
缺點:
  • 如果用字典檔的話,只要密碼是字典檔裡沒有的字,就一定無法破解
  • 如果用窮舉法的話,只要密碼長度超過窮舉法所限定的長度,就一定無法破解
WPA 協定所運用的運算,每計算一次密碼,都需要經過 PBKDF2HMACSHA1 三種運算,所以運算成本非常高,這使得暴力解密的路徑更加難走。

目前比較可行的兩種暴力解密軟體,一種是 aircrack-ng,另一種是 pryit。其他也有一些可以解密的軟體,例如有名的 john the ripper,或是其他相關的軟體,但是我認為,aircrack-ng 和 pryit 是兩種速度最快的軟體,其中 pryit 速度驚人,而在速度夠快的情況下,限定一定長度的密碼,例如說 10 甚至 12 個字元長度,窮舉暴力破解法就便得可行。pryit 的主要重點在於利用顯示卡的平行運算能力以及多台電腦的磁碟空間與運算能力來達成速度極快的解密任務。因為我手邊並沒有這樣的硬體配備,因此還沒有機會使用 pryit,但讀者可以到此來看一下 pryit 的解密速度。

破解 WPA 的步驟如下。

步驟一:前置作業

請參考 WEP 的第一步前置作業,作法一樣。
我們需要先預備網卡在 monitor 模式,假設有一個 mon0 虛擬網卡預備好了,透過 airodump-ng 我們也抓到如下資料:
 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH        UPTIME  ESSID

 00:11:22:33:44:55  -67       16        1    0   6  54e  WPA2 CCMP   PSK    2d 13:41:31  wpa-ap

因此知道,頻道為 6,ESSID 是 wpa-ap,另外 BSSID 為 00:11:22:33:44:55。

步驟二:抓取 handshake 資料

暴力破解 WPA 需要合法使用者與無線基地台之間,一開始建立連線的 handshake 交換資料。我們使用 airodump-ng 來抓取所有相關的無線封包,執行指令如下:
$ sudo airodump-ng -c 6 --bssid 00:11:22:33:44:55 -w wpa-handshake mon0

airodump-ng 會將頻道 6,BSSID 為 00:11:22:33:44:55 的無線封包,儲存在 wpa-handshake-01.cap 檔案中。

直到畫面右上方出現字句 WPA handshake: 00:11:22:33:44:55,代表已經抓到 handshake 檔案了,可以按下 ctrl + c 離開程式。

步驟三:等待,或者引起一些波動

如果一直等待卻沒有抓到任何的 handshake,但是你可以看到的確有合法的使用者在連線的話,你可以讓使用者斷線,當他們重新連線的時候,有很高的機會,攻擊者可以抓到 handshake,假設你透過 airodump-ng 看到的畫面如下:
 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 00:11:22:33:44:55  -60  83     1726      171    7   6  54e  WPA2 CCMP   PSK  wpa-ap

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 00:11:22:33:44:55  B8:FF:61:11:22:33  -29   36e-54      9       49

下方的 B8:FF:61:11:22:33 代表一位合法使用者,可以開啟一個新的 terminal 下達以下指令讓他暫時斷線,一般來說,手持裝置會很快的自動連線,但是仍有很小的可能性,使用者會感覺到些微的異狀:
$ sudo aireplay-ng -0 3 -a 00:11:22:33:44:55 -c B8:FF:61:11:22:33 mon0

-0 代表送出斷線封包,3 代表三次,-a 是基地台 BSSID,-c 代表送給 B8:FF:61:11:22:33 裝置,如果一切順利,裝置自動重新連線,此時回到 airodump-ng 畫面,我們應該會收到 WPA handshake。

注意,因為 airodump-ng 處理畫面上有些異常,所以有些時候可能不會顯示 WPA handshake 的字樣,你可能需要放久一點時間確保真的取得 WPA handshake,或者直接檢視輸出檔案。

步驟四:解密

透過 aircrack-ng 來解 WPA 的 handshake,必須搭配字典檔,字典檔案是每行一個字串,並且收集很多字串的檔案,暴力解的方法就是,會一行一行,一筆一筆的將字典檔中的字串取出,並且以它為密碼去解密,如果成功則停止,否則就計算到檔案結束為止。

假設您的字典檔案是 dict.lst,放在當前目錄下,您可以執行以下指令去解密:
$ aircrack-ng --bssid 00:11:22:33:44:55 -w ./dict.lst wpa-handshake-01.cap

注意,不需要 sudo 權限。

如果密碼在字典檔案裡面,最終 aircrack-ng 會解出,並且輸出在螢幕上。

到此完成。

沒有留言:

張貼留言