WEP 的安全性有若干問題。平心而論,它從未打算成為強密碼協定,只想提供「有線等效」。除了關聯與身分的弱點外,密碼協定本身也有問題——部分源自用 CRC32 當完整性檢查、部分源自 IV 的使用方式。
離線暴力破解#
暴力破解永遠是可能的攻擊。WEP 的做法很簡單:擷取幾個封包,用每個可能金鑰試著解密、重算檢查碼、比對。通常需至少兩個封包(單一封包可能用錯金鑰解密後檢查碼仍有效)。
假設每秒 10,000 次破解,40 位元金鑰空間要三年多;即使每秒 20 萬次也要數月。Tim Newsham 攻擊多數 40 位元卡片的金鑰生成弱點,把金鑰空間有效縮到 21 位元,幾分鐘就能破。但 104 位元 WEP 的暴力破解不可行。
Keystream 重用#
若兩個明文用同一 keystream XOR 成兩個密文,把密文互相 XOR 會抵消 keystream,留下兩個明文互相 XOR:
C1 ⊕ C2 = [P1 ⊕ RC4(seed)] ⊕ [P2 ⊕ RC4(seed)] = P1 ⊕ P2
若已知其中一個明文,另一個就能還原。而 Internet 封包結構已知且可預測,能用各種技術還原兩個明文。
IV 本應防止這類攻擊,但 WEP 的 IV 只有 24 位元,幾乎保證會重用。假設 IV 隨機選取,依生日悖論(birthday paradox),僅約 5,000 個封包後就統計上會出現一次 keystream 重用。
生日悖論:為什麼 5,000 個封包就夠
生日悖論說:23 人同房,兩人同生日的機率過半。23 人有 253 對,每對失敗機率約 99.726%,取 253 次方後整體失敗機率約 49.95%——成功略過半。
同理,5,000 個封包有約 1,250 萬對,每對失敗機率 1 − (1/2²⁴),取次方後整體失敗約 47.5%——IV 碰撞機率約 52.5%。IV 又以明文附在封包中,重用極易偵測。
IV 解密字典表#
還原某訊息的明文後,該 IV 的 keystream 也隨之得知,可用來解密任何用同一 IV 的封包。日積月累可建一張以每個可能 IV 為索引的 keystream 表:只有 2²⁴ 種 IV,每個存 1,500 位元組 keystream 也只需約 24 GB。建好後所有後續封包都能輕易解密——但這方法很耗時繁瑣,還有更簡單的方式打敗 WEP。
IP 重導:讓存取點替你解密#
利用 CRC32 是線性無金鑰函式,讓存取點做工
另一種解密法是騙存取點替你做所有工作。若存取點有網路連線:
- 擷取一個加密封包,不解密,把目的位址改成攻擊者控制的 IP。
- 把修改後封包送回存取點,它會解密並直接送到攻擊者的 IP。
之所以能修改封包,是因為 CRC32 檢查碼是線性、無金鑰的函式——封包能被策略性修改而檢查碼不變。
把目的 IP 與想要的 IP 做 XOR、再 XOR 進加密封包(目的 IP 抵消,留下想要的 IP XOR keystream)。為維持檢查碼不變,需策略性修改來源 IP:檢查碼會變動 NH + NL − DH − DL,把此值從來源 IP 的低位 16 位元字扣掉即可。
FMS 攻擊:最致命的一擊#
Fluhrer、Mantin、Shamir(FMS)攻擊是最常用的 WEP 攻擊,被 AirSnort 等工具普及化。它利用 RC4 金鑰排程演算法(KSA)的弱點與 IV 的使用方式。
存在弱 IV 值,會在 keystream 第一位元組洩露祕密金鑰的資訊。由於同一金鑰配不同 IV 反覆使用,收集夠多弱 IV 封包、又知道 keystream 第一位元組,就能推出金鑰。
幸運的是,802.11b 封包第一位元組是 snap 標頭,幾乎總是
0xAA——所以把第一個加密位元組與0xAAXOR 就能輕易得到 keystream 第一位元組。
弱 IV 形如 (A+3, N−1, X)(A 是要攻擊的金鑰位元組、N=256、X 任意)。演算法:
- 做 A+3 步的 KSA(不需知道金鑰,因 IV 占 K 陣列前三位元組;已知的金鑰位元組讓 KSA 能多走幾步)。
- 若
j < 2(S[0] 或 S[1] 被擾動)則丟棄此次嘗試。 - 否則,把 keystream 第一位元組減去 j 與
S[A+3](modulo 256)——這個值約 5% 機率是正確金鑰位元組、95% 機率近乎隨機。 - 用夠多弱 IV(不同 X)就能定出正確金鑰位元組(約 60 個 IV 能讓機率過半)。金鑰位元組須依序攻擊,定出一個再攻下一個。
現代工具與 WPA#
FMS 攻擊如此成功,以致若你期望任何安全性都應改用 WPA。但仍有驚人數量的無線網路只靠 WEP。
現在有相當強健的工具(如 LiveCD 附的 aircrack-ng)實作 FMS 及 KoreK 的新攻擊,收集夠多封包後幾乎能立即還原 WEP 金鑰。
aircrack 普及了一個聰明的收集 IV 技巧:等封包自然累積夠多 IV 要數小時甚至數天,但既然無線仍是網路、就有 ARP 流量,而 WEP 加密不改變封包大小、容易辨認 ARP。此攻擊擷取一個 ARP 請求大小的加密封包,重播到網路上數千次——每次被解密送出、引來一個 ARP 回覆,各自帶新 IV。用這種「搔癢網路」的手法,幾分鐘內就能收集到足夠破解 WEP 金鑰的 IV。