【颖奇L’AmoreのWiFi安全系列】#2 破解WPA/WPA2-PSK原理与实现 2 min read
本文最后更新于 265 天前,其中的信息可能已经有所发展或是发生改变。

Author:颖奇L’Amore

Blog:www.gem-love.com

技术水平有限,有错误还请指正。


0x01 WPA认证模式

在第一篇中我已经介绍了WPA或WPA2都分为企业版(802.1x认证)和个人版(预共享密钥认证)

对于企业版需要Radius(Remote Authentication Dial-In User Service,远程认证拨号用户服务)服务器做AAA

dot1x协议在实现整个认证的过程中,Supplicant/Authenticator/Auth Server之间是通过不同的通信协议进行交互的,其中认证系统和认证服务器之间是EAP(Extensible Authentication Protocol,可扩展的认证协议)报文。EAP是一个认证框架,比如EAP-MD5、LEAP、EAP-GTC、EAP-TLS、EAP-TTLS、EAP-PEAP等。不同的厂商还有不同的私有EAP类型,不能全部讲解清楚,也不是任何EAP的方法都有安全漏洞(至少现在没有披露出来)。

虽说“没有绝对的安全”,但相比下企业版往往是“很安全”的。所以本系列文章主要介绍对预共享密钥的破解。

关于EAP,更多请参考思科官方发布的Describing EAP Authentications。


0x02 客户端连接AP过程

一个客户端与AP建立无线链路,需要经历3个过程:

  1. 扫描
  2. 链路认证
  3. 关联
①Scan

扫描又分为被动扫描和主动扫描

Passive Scan:STA接收AP定期发出的Beacon信标帧来扫描网络。相当于AP一直在向外告诉“我在这 我在这”。我们打开WLAN列表等一两秒就会出现附近的所有无线网络,这就是通过被动扫描得知的。AP发送的Beacon帧中携带了SSID等(如果隐藏了SSID则SSID处为空)信息来告诉客户端们。

Active Scan:STA向信道主动发送Probe Request,AP收到后会回复Probe Response。相当于STA主动寻找说“你在哪”然后AP回复“我在这里”。对于关闭了SSID广播的无线网络,想要连接就必须通过主动扫描方式才可以。其实对于没有关闭SSID的网络也是可以主动扫描的,因为Probe Request中可以携带SSID也可以不携带,如果携带代表STA在寻找特定的网络,不携带则代表扫描所有的网络。

②Link Authentication

这个认证并不是“WiFi密码”认证,而是进行链路的认证

由图可知,WPA的链路认证必是open,进行认证很大程度上在走形式,不像WEP的共享密钥认证还有可能进行链路认证失败,WPA是必会完成链路认证的。

③Association

认证完毕后,STA发送association request帧,AP返回association response,关联的过程中他们会互相交换一些参数,比如速率等等。关联结束表示一个无线链路建立的真正完成。

但是!

你会发现,客户端还没有进行认证,没有验证输入的无线密码是否正确。是的,因为这是接入认证,在关联后才做的。这张图能说明这个过程:

对于WPA/WPA2-PSK,“接入认证密钥协商”这个过程才是验证密码的过程。请看后文的四次握手。


0x03 四次握手

在介绍4-Way Handshake之前先介绍几种密钥

PSK

Pre-Shared Key,预共享密钥。

MSK

Master Session Key,主会话密钥。是从802.1X/EAP生成或者从预共享密钥认证派生的。

PMK

Pairwise Master Key,成对主密钥。它的生成使用PBKDF2-SHA1这个哈希算法,在WPA2-Personal中,当客户端向AP做认证时就会生成PMK。

PBKDF2_SHA1(PSK, SSID, SSID length, 4096)

PTK

Pairwise Transit Key,成对临时密钥。设计四次握手时候希望PMK尽可能的隐藏和保密,所以需要一个密钥来加密流量(仅用于Unicast流量,对于组播和广播使用GTK),PTK就产生了。PTK由PMK、随机数、MAC地址计算得到,公式:

PTK = PRF(PMK + Anonce + SNonce + AP’s Mac+ STA’s Mac)

其中PRF为伪随机数函数,PMK是成对主密钥,SNonce是请求方也就是客户端生成的随机数,Anonce是AP生成的随机数,另外的就是mac地址了。

GMK/GTK

GMK(Group Master Key,组主密钥)来生成GTK(group temporal key,组临时密钥),GTK用来加密Multicast和Broadcast的流量。

4-Way Handshake

在开始认证之前双方都已哈希生成了PMK,这个PMK并不参与握手包的传输。示意图:

  • Message 1:AP发送一个EAPoL-Key的单播帧,其中包含AP的随机数,给客户端去生成PTK。此时客户端拥有:自己的PMK、AP随机数、自己生成一个随机数、自己的mac、ap的mac(因为已经完成了关联),现在就可以利用上面的公式来计算PTK。
  • Message 2:客户端生成完PTK,向AP也发送一个单播EAPoL-Key,也包含一个客户端生成的随机数,除此之外还有被KCK加密的MIC(message integrity check,消息完整性检验),这个MIC是让AP来验证消息是否被修改/被损坏以及客户端是否拥有真正的PMK(如果没有正确PMK代表没有正确的PSK)的。AP此时有了对方的随机数,还有自己的PMK、自己的随机数、双方MAC,也能通过PRF来计算生成PTK。实际上后面的两个包也都包含MIC,如果验证失败,握手终止。
  • Message 3:AP验证成功Message2的MIC后再次发送EAPoL-Key,该消息携带被KEK加密的GTK、KCK加密的MIC、安装PTK。和Message2一样,这个消息发给客户端后也需要客户端进行计算验证,验证成功则发送Message4以及安装密钥(所谓安装密钥指的是将流量用该密钥加密)。
  • Message 4:发送MIC,实际上这条消息是对于Message3安装密钥的一个ACK,之后双方安装PTK。

也就是说,PSK、PMK、PTK都不参与四次握手的帧传输,MIC起到了密钥的作用来进行认证。第一个包后STA生成PTK,之后通过Message2发送MIC给AP,AP验证成功说明双方拥有相同的PMK,也就证明客户端输入的密码正确。之后告知双方来安装密钥。


0x04 WPA-PSK离线字典破解原理

四次握手中用来验证的MIC,其他的key不参与传输,第三方的攻击者也无法获取到,对于离线字典破解攻击,只能通过MIC来判定字典中的PSK是否正确。思科IUWNE的PPT中对MIC这样描述:

  1. MIC通过MIC密钥、源目MAC、数据负载计算得来
  2. 使用Michael算法
  3. 算法相对简单,不太消耗资源,能在网卡硬件内实现

MIC是在破解过程中起到至关重要作用的。实际上,字典破解通过PSK生成PMK,再结合握手包中的信息计算PTK和MIC,之后把本地计算的MIC和握手包中的MIC进行比较,比较成功则表示本地的PSK正确,破解成功


0x05 离线字典攻击实现

整个攻击的流程实际上只有两大部分:抓包+破解。所有使用的工具都在Kali Linux自带了。

①监听

在抓包之前 需要将网卡置于监听模式

通过ifconfig查看网卡信息,如果只有一个无线网卡的话一般都是命名为wlan0

之后通过airmon-ng start wlan0将wlan0置于监听模式,此时的网卡名为wlan0mon,表示已经成功进入监听模式

②网络探测与抓包

在实际抓握手包之前,我们可以仅“抓包”但不存储,目的是充分了解网络信息。当我们了解目标Wi-Fi网络的信息后,可以进行有针对性的抓包,大大减少不必要的流量,提高效率。

airodump-ng wlan0mon

这样就开始了探测模式,界面如下:

可以看到其大致分为了上下两个区域,下面进行一下解读:

  • BSSID AP的mac地址(IBSS中其为发起IBSS的STA随机生成的地址)下面的not associated表示客户端没有连上,可能只是在进行主动探测(后面写无线社会工程学攻击时候再详细介绍)
  • PWR 信号强度,越大表示离AP越近、信号越好。比如-35>-72,说明-35的网络信号好。
  • Beacons 无线ap发的信标帧,周期发送
  • #Data 抓到的数据包数量
  • CH 信道
  • MB 数字表示最大传输速率(网络标准),e表示802.11e,“.”表示短前导码。注:前导码是数据包的一组比特组,用来让接收者同步 并准备接收实际的数据。
  • ENC 加密算法体系,可以是OPN(开放)、WEP、WPA、WPA2。
  • CIPHER 加密算法,一般WPA对应TKIP、WPA2对应CCMP(AES加密)。
  • AUTH 认证,可能是MGT(WPA企业版)、PSK(WPA个人版)、OPN(不加密)、SKA(WEP)
  • ESSID wifi的名字。 <length:  8>这样的表示未广播,但是airodump-ng如果收到针对其的Probe Request主动探测,则会把SSID再显示出来
  • STATION 客户端的MAC地址。
  • RATE 传输率 比如300M无线路由器
  • Lost 最近的10秒内的丢包数,通过seq得知
  • Frames 来自客户端的数据frame的数量
  • Probe 主动探测时Probe Request携带的ESSID

在得知了目标网络信息后,可以有针对性的对其进行抓包:

airodump-ng -c [channel] --bssid [ap mac] -w [保存路径与文件名] wlan0mon

可以看到,此时只针对它一个人进行抓包

③De-Authentication Attack

对于没有客户端连接的无线网络,只能静静等待有客户端来连接,只有客户端与AP发生了四次握手才能抓到握手包。

比如我手动连接上这个wifi

那么就会抓到握手包

这固然可以。但是如果没有新来的客户端进行连接又该怎么办呢?

802.11的管理帧不需要经过AP与STA的官方授权,这意味着攻击者可以进行管理帧的伪造。攻击者可以伪造AP向客户端发起解除认证帧或者解除关联帧,客户端收到后会自动断开连接。但是由于现代手机、电脑的特性,断开连接后将自动进行重连,重连就会有四次握手,这时候就能够抓到握手包了。唯一的攻击条件就是需要有活跃的客户端。

现在我们进行抓包,发现有一个客户端在线:

我们可以使用mdk3 mdk4(Pegasus Team维护) aireplay-ng等工具进行deauth攻击,以aireplay-ng为例:

aireplay-ng -0 10 -a [ap's mac] -c [sta's mac] wlan0mon

-0也可以写成–deauth,后面跟的数字表示帧数量。其他工具在后面写拒绝服务攻击时候介绍。进行Deauth工具发现客户端发生了断网重连,抓到了握手包:

抓到握手包就可以ctrl+c停掉了。

④破解握手包

假设在airodump-ng抓包时-w后面写了gem-love.com这个文件名,那么第一次抓包保存的就是gem-love.com-01,第二次就是02依次类推

破解握手包有多种方式,不通的方式有着不同的破解速度,比如可以通过GPU加速跑包,关于跑包加速问题请参考我以前的文章:

多种方式进行WPA破解与跑握手包

这里只介绍最基本的方法

进行离线字典破解,顾名思义需要有字典,如果PSK在字典里就会最终破解成功,如果不在就一定不会破解成功。所以理论上所有的握手包都是可以破解成功的,只要字典强大、时间充足、硬件给力。

为了模拟真实情况,这里我用了一个包含30W个密钥的字典,把我们的Wi-Fi密码放进去(不然不会破解成功)

使用aircrack-ng破解方法:

aircrack-ng -w [字典] [文件名-xx.cap]

在破解中,可以看到每秒测试多少key、破解进程、PMK等信息:

一旦破解成功,就会给出KEY FOUND和密码:

⑤加速问题

我们已经知道了,破解密码实际上实在验证MIC,而计算MIC之前需要计算PMK、PTK,计算PMK需要SSID+PSK两个必要要素,不同的网络SSID是不同的,因此我们不能制作PMK字典。而PSK生成PMK这个过程正是破解速度的关键所在,能够进行PMK生成提速就能进行握手包破解提速。

目前并没有哪一种方式有着明显的优势,有人说彩虹表速度快有人说hashtable速度快什么什么的,验证密钥时候确实快,但也不要忽略了生成彩虹表的过程,总共用的时间实际上也没快多少。

目前使用最广的方法就是EWSA进行GPU加速(上面引用的那篇多种方式跑包的文章有介绍),另外国外也有一些云破解服务器,有需要也可以考虑。


0x06 References

https://wenku.baidu.com/view/cf93b8ede009581b6bd9ebd9.html

https://blog.csdn.net/lunar521/article/details/83758756

https://en.wikipedia.org/wiki/IEEE_802.11i-2004#Four-way_handshake

https://blog.csdn.net/eydwyz/article/details/70048858

https://www.anquanke.com/post/id/152210

https://www.wifi-professionals.com/2019/01/4-way-handshake

颖奇L'Amore原创文章,转载请注明作者和文章链接

本文链接地址:https://www.gem-love.com/wlan/1427.html

注:本站定期更新图片链接,转载后务必将图片本地化,否则图片会无法显示

暂无评论

发送评论 编辑评论

上一篇
下一篇