0x00 企业级无线渗透
注:
这篇文章里我详细说一下针对企业802.1X的安全解析,还有一些针对数据协议的分析方法和浅析关于个人渗透太多太啰嗦我就不写了,有机会在说。
因为我不想一部分一部分的写,所以索性就把三个内容写在了一起,如果大家觉得那里有问题,欢迎指正与交流。
一.关于网卡
工欲善其事,必先利其器。在无线渗透或者是无线攻击中,并不是任何支持linux的网卡都支持无线工具的。推荐过一款网卡 :‘AWUS036H’我用过这款网卡,是RT8187芯片的。确实不错,完美的支持工具。当然,也可以选用RTL3070芯片。其实除了不兼容工具外, 选好网卡还有个很重要的因素就是质量问题,质量不好的可能不稳定,造成断开,或者是蓝屏,嗅探抓包时出现丢包等状况。
二.企业级无线渗透
互联网企业里只要有一定规模的公司,一般无线架设都会选用Radius。WPA+Radius应该算是标配了。
这是一个简单的Radius的工作原理图,我画图画不好,就弄个简单的,复杂的也不一定有人看,能表示就行了。
在个人无线网设置里面会有一些让我们选择认证机制和加密方式(WPA-WPA2 TKIP-AES CCMP)等 。在802.11X中也有一些认证机制,最多使用的是基于TLS的身份验证。TLS是出自IETF组织。就跟802.11出自IEEE一个道理。现在有三 种标准被开发并被部署到了无线网中。
- EAP-TLS : EAP传输层安全
- EAP-TTLS : 隧道传输层安全
- EAP-PEAP : 受保护的PEAP
EAP是一个802.1x认证的协议。EAP给802.1X提供了一个验证框架,是一个可扩展性协议,支持多种验证方式。
EAP在企业WPA-802.11X的认证方式(果然还是老外的图易懂):
802.1X协议是在第二层,上一层是EAP。EAP上一层是各种认证方法,最底层是802.11(图不画了。请君脑补。) 整个EAP通信,包括EAP的协商都是通过TLS隧道执行。
上面刚刚列举了三种现在常用的机制,其实认证机制有好多,什么Leap,eap-MD5等等....最火的就是这三种。
因为本身EAP是没有保护的,它的EAP-Identity明文显示,EAP-Success等信息被仿冒或抓取:
(1)EAP-TLS:它是一个双向认证的机制,Server与client之间完成的认证。它哪里都好,就是两个缺点致命:(1)是传输用户名用的是明文可以抓到(2)是他要求企业部署PKI,因为它基于这个证书体系。但是PKI太庞大太复杂了。所以....
(2)EAP-TTLS&&PEAP:因为上面的那个缺陷,所以有了EAP-TTLS,这两个可以放在一起说,就像是WPA/WPA2 相似度很高。它们也要证书,不过是要Server端的而不是Client的。这两个相比,还是peap从各个方面来说方便,而且兼容好。所以企业一般都是 PEAP。
EAP需要进行保护,EAP协商就在安全隧道(TLS)内部来做,保证所有通信的数据安全性。那么它在内部也会选择一些认证来:【EAP-MS-CHAPv2】【EAP-GTC】
这是WPA/WPA2允许的两个PEAP子类型。企业使用最多的就是第一种域架构【EAP-MS-CHAPv2】。说了这么多,可能公司企业无线部署是这样情况的能明白,没遇到种架构的可能比较难脑补。我给几张图:
就是这样的,一般情况下,用你的域账号登陆进去,就可以连接你公司的无线网络了。
关于MSCHAPV2
其实在MSCHAPV2之前是有个MSCHAPV1版本的,是因为前者安全性的加密和认证都比后者好而把它取代。
在PEAP-MSCHAPV2认证流程中呢,会有一些Server与client的交互,这里面包含了EAP- Respons/Identitye和challenge字符串。在PEAP的保护下,因为它们的认证是在内部TLS隧道里,所以我们很难直接对 MSCHAPV2做什么手脚,但是MSCHAPV2爆出了漏洞可被暴力破解。所以我们就可以对它进行fake AP从而取得它们的hash。
如果没有验证服务器的TLS证书.那么通过模拟的AP,攻击者就可以诱骗客户连接到恶意接入点,并获得客户的内部认证。很遗憾,上面已经说过了 pki的问题。就这样,黑客就进入到了你的企业域。具体的攻击方式呢,就是利用 hostapd-wpe这个工具。它替代了freeradius-wpe.
Github: https://github.com/OpenSecurityResearch/hostapd-wpe
支持EAP的类型:
- EAP-FAST/MSCHAPv2
- PEAP/MSCHAPv2
- EAP-TTLS/MSCHAPv2
- EAP-TTLS/MSCHAP
- EAP-TTLS/CHAP
- EAP-TTLS/PAP
当我们建立伪AP的同时,会产生两个相同的SSID。如果我们是指定目标攻击,而我们我目标已经连上了正常的无线网络,那我们可以对此SSID进行Deauth攻击,使其强制断线重连到我们的Fake AP。
命令: aireplay-ng -0 10 –a <ap mac> -c <my mac> mon0
当目标连接到我们的Fake AP 上时:
这是抓取到的hash。你所有抓取的hash都在 hostapd目录下的一个名为host-wpe.log的文件内。
当我们抓到这些hash以后,需要破解它,可以用asleap破解密码。Kali内置了好像。也可以自己去github。
可能有的人觉得,一个暴力破解,关键还是要看字典,密码设置的复杂就没有关系。但是大家有没有想过,一个无线架构在radius的企业,我假设它 有2000人。2000人中我保守一点估计抓了1000的人hash。难道我连1000/5的概率都没有么?更何况无线其他攻击也很多,拿到几个域账号根 本没难度。组合攻击的手法还是不容小觑的。
EAP-MD5
还有一种认证是EAP—MD5,这个可能现在见不到了,不过应该也有吧,凡事不绝对,遇到了就简单提一下,它的认证我就不说了,其实也没什么可说 的,没安全性可言,数据不受ssl保护,只有个MD5,只提供了最低级加密,MD5hash能被字典破掉,而且不支持密钥生成,所以就根本不适合企业加 密。我也不知道这是谁想出来的,可能开发这个加密的时候还没无线安全呢吧。抓包就能抓出来。
这是一个在连接了EAP-MD5认证的AP。通过抓包我们直接可以看到了它的challenge. 我们把他们通讯的整个过程抓下来。就像WPA/WPA2的握手包一样。捕获数据包之后,有一个专门针对EAP-MD5的破解工具叫做:eapmd5Pass。
使用方法也简单:
eapmd5pass -r <握手包文件名> -w <字典>
LEAP
Cisco的东西。叫轻量级EAP,特点也是数据不受SSL保护,用的是MS-CHAPV1,也就是我上面说的那个第一个版本。这就更别说了,还不如个WEP,03年就能黑了。
EAP-FAST
LEAP的升级版,有个受保护的访问凭证(PAC)在TLS端验证,说也是有漏洞,但是我对这个加密接触不是太多,也没遇到过,可能见识短吧,大家有遇到的可以交流交流,但是估计也没啥价值。
LEAP的破解方法也是捕获四次握手,然后暴力破解。具体方法见上面都一个道理。简单的东西不多说.
针对一些高复杂的密码呢,我们可以去试试John the Ripper。 也叫JTR,也不错。支持的算法也多:
https://github.com/magnumripper/JohnTheRipper
在我们针对一个未知的不了解的企业热点进行渗透时,我们需要事先清楚它是采用什么加密,我们可以通过wireshark过滤一下类型:
也算个小技巧,受用。
顺便再贴一个MDK3关于802.1X的攻击方法。
#!bash
mdk3 mon0 x
0 - EAPOL Start packet flooding #EAPOL格式的报文洪水攻击
-n <ssid>
-t <bssid> #目标客户端的mac地址
-w <WPA type>
Set WPA type (1: WPA, 2: WPA2/RSN; default: WPA)
-u <unicast cipher>
Set unicast cipher type (1: TKIP, 2: CCMP; default: TKIP)
-m <multicast cipher>
Set multicast cipher type (1: TKIP, 2: CCMP; default: TKIP)
-s <pps> #速率,默认400
1 - EAPOL Logoff test #注销认证攻击
-t <bssid> #目标客户端的mac地址
-c <bssid> #目标ap的合法客户端mac
-s <pps> #速率,默认400
MDK3 X 1 -t <目标mac地址> -c <客户端mac地址>
再推荐个工具吧:3vilTiwnAttacker
老外写的一款做无线劫持,嗅探为一体的工具。新出的,觉得不错大家可以试试。
https://github.com/joridos/3vilTiwnAttacker 里面附带演示视频
其实呢,我觉得吧,大家如果是真想研究的话呢,不妨去自己下载个FreeRadius去研究下。
买个路由器,一般里面都有设置Radius的选项,没用的也可以刷个固件。虽说安装环节有点慢,但是真能学到很多东西,我本来是想把每一步涉及到Radius的设置和配置文件说一下的,无奈学校上网客户端的限制我安不了路由器,悲催了,以后再说吧。
还有一个关于企业wifi的backdoor,worm的一个思路,我放个pdf大家有兴趣的看下:
关于防御策略
前些日子我看了一篇文章: http://drops.wooyun.org/wireless/15269?from=timeline&isappinstalled=0
很巧合的是,这个作者是我去年暑假实习时候的同事。ID换了,不过给了微博,微博ID是没换的。
他在里面提出了关于证书机制的缺陷。确实如此,但是这个东西做起来是个繁琐的工程。就算解决了这个,也会有别的攻击可以破坏到无线网络。不如我们 去开发一些策略去全面保护无线网络。其实我也是近期才想到了一些,我只把简单的想法说一下,还并没有什么实体化的东西做出来,有兴趣的咱们也可以聊聊。
1.因为无线网络的特殊性,我们去真正检测一个攻击行为是否真实存在时,多少会有一些误差。简单例子:
这个客户端对这个 AP发起了Deauth 攻击,那我该将它判定为洪水还是捕获握手包?
因为Deauth包是使其AP断线重连捕获数据的。一个是DOS攻击,一个是密码威胁。还有就是,我如果输错了几次密码是不是也会报警?
所以这些都是问题,这个参数很难去设置。我曾经想过去计算他们之间正常差值然后把精确度提到最高,但是还是觉得不够好,我只能从数据变化和流量方面去做,因为后面它是离线攻击。
还有,企业问题一般员工建个私人热点,一旦被攻破,那也是很严重的一件事,所以这方面的意识还是要去培养。
2.还有一种就是针对伪AP的这种。
如上图,我们可以用一些mac地址的策略去识别这些‘fake AP’。
有款工具叫做“Airdrop-ng”它开始是个‘Deauth’工具,但是后来被用于做了IPS。真应了那句话:‘工具是把双刃剑,看你怎么使用它.’
Airdrop的玩法很多,也能有蜜罐的效果哦。具体可以参照:
https://github.com/aircrack-ng/aircrack-ng/tree/master/scripts/airdrop-ng
功能差不多就是一个黑白名单的机制,根据自己的要求可以写一些规则。
有个老外写了个IDS,不过针对个人的地方比较多,但也可以借鉴下。
https://github.com/SYWorks/waidps
这哥们脑洞挺大的,以前写过一个针对WPA无client的破解脚本。当然了,还是跟条件有关系的东西,但是人家能想到也确实比咱们强,不服也是不行的。
我心里也是有一些针对其他攻击的规则但不想说了,因为还需要完善,不过我觉得应该挺有用,等真正没问题的时候再发吧。
0x01 无线数据分析
说一些数据分析吧,802.11 有好几个标准,像什么802.11g 802.11n 等等之类的,不同的标准对应着不同的频道。分析数据肯定是避免不了的,况且无线就是协议的东西。 我就简单说一下常见的,时常用到的。就算你不分析,起码遇到了能看懂不是。
802.11数据包有三种类型。
- 管理数据包:认证:authentication 关联:association 信号:beacon
- 控制包:是一些请求用的基本上
- 数据包:这里面是一些有用的,通信数据什么的。
也许有人听过有个叫beacon包的东西,其实最重要的东西也就是这个,beacon里面包含了一些AP功能、信息网络名称、配置、安全信息等等东西。所以MDK3里面也有个模式叫做Beacon flood的模式。
这不是完整的数据,只是其中一部分,它的头部的‘type’定义为beacon。它是作为一个广播数据包由wap发送。
这不是全部的,简单点我们可以看出的信息有:它的头部给它定义的类型为:Beacon. 设备信息是:Huawei. MAC地址之类的。下面可以看出SSID的名称。用的802.11B协议。工作11信道。
也可以通过分析得知AP与站点是否加密一致:
先看下 Authentiction数据中的 Authentiction Algorithm:open System(0)数值是否为0 ,则说明并非Shared加密模式,而是Open加密或WPA加密。和下面的Beacon数据中的数值是否为(1)来判定是否启用加密。AP与STA的认 证一致。
当然加密还有别的。只举一例了。
还有就是关于DOS攻击的分析,这个更简单了,DOS攻击很多,什么beacon flood Authentication DoS Deauthentication/Disassociation 等等。。 就拿Authentication Flood 举个例子吧。
从type类型和请求可以看出是什么样的攻击类型 (Authentiction) 。
- Destination address:被攻击的AP MAC
- Source address:源MAC (也可能是伪造的client Mac)
其他类型的攻击也大体差不多,稍有出入相信大家也能辨别。
还有就是针对于802.11 无线信道和频率的
信道 | 中心频率(MHZ) |
---|---|
1 | 2412 |
2 | 2417 |
3 | 2422 |
4 | 2427 |
5 | 2432 |
6 | 2437 |
7 | 2442 |
8 | 2447 |
9 | 2452 |
10 | 2457 |
11 | 2462 |
12 | 2467 |
13 | 2472 |
这就是只显示10信道的数据。
其实无线数据里面头疼的也就是它的封包结构,控制帧、管理帧、数据帧。全都弄懂真心不容易。我现在也还在学习中,如果是简单分析是用不太多这些东西的。我给大家提供一些802.11的type与subtype类型。方便大家对照
还有一些wireshark的过滤参数:
这个不全,老外整理了一篇 集 过滤参数、802.11模型和数据值解释为一体的pdf:
http://www.willhackforsushi.com/papers/80211_Pocket_Reference_Guide.pdf 我觉得超级牛B,新手看也容易懂。
如果大家想分析指定的AP包的话,可以
我们也可以分析下握手包,下面以Wpa为例,
因为WPA-psk (个人版)在STA和ap建立数据后使用了EAPOL协议处理用户登录认证。然后由四次握手组成。支持WPA的AP工作时候呢,如果客户端里面有 Radius服务器的话就用802.1X认证。要没有就用psk的方式认证。上面是第四次握手中抓到的数据,别的都好懂,这个MIC我说一下,这个值是最 后握手成功的一个重点。
在认证过程中,SSID和password使用特定的算法产生这个PSK。 那么客户端接收到AP发来的信息后也会用这个算法产生PSK。然后这两部分分别用算法进行认证,最后会提取到一个MIC KEY 。STA和AP的MIC KEY 如果相等,他们就成功,如果不等就失败。
说实话我觉得我现在写的那都不对着那。好乱好迷茫的感觉,可能我不怎么会写文章的缘故吧,我总想把自己知道的都写出来,但是有的low,有的繁 琐。我很想写分析 WPA/WPA2和802.1X的数据 但是几百条数据每条加注释确实不是个小工作量,况且我宿舍没路由搭建不了802.1X。以后也许我会单独写一篇关于这些的。如果你正好用到用也可私我,我 可以把我知道的全部free。写的有点驴唇不对马嘴.因为802.11协议的东西太多太繁琐.我也有点抓不住重点了.对不住各位了。
再延伸一点知识,关于 802.11 fuzzing 的东西。
现在Fuzzer是很流行的一种挖掘漏洞手段,不管是在web还是其他安全,fuzz现在都很热,但是无线fuzz以前火过,最近好像没啥动静了。资料更是少之又少。简单提一下。
借老外的一张图吧:
其实跟溢出的解释差不多吧。其实最初的办法也就是投放大量的ssid,如果超出了其长度,来实现崩溃。等还有一些其他的CVE,是跟无线驱动程序有关的。
有人开发过一个关于802.11堆栈的fuzz脚本叫wifuzz。
https://github.com/0x90/wifuzz
它利用的Scapy包生成的。所以环境要下载Scapy
先要用airmon-ng把网卡监听一下。
下面的参数对应着攻击类型。
#!bash
$ sudo python wifuzz.py -s admin auth
Wed Sep 28 10:38:36 2011 {MAIN} Target SSID: admin; Interface: wlan0; Ping timeout: 60;PCAP directory: /dev/shm; Test mode? False; Fuzzer(s): auth;
Wed Sep 28 10:38:36 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:38:36 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:38:36 2011 {WIFI} Starting fuzz 'auth'
Wed Sep 28 10:38:36 2011 {WIFI} [R00001] Sending packets 1-100
Wed Sep 28 10:38:50 2011 {WIFI} [R00001] Checking if the AP is still up...
Wed Sep 28 10:38:50 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:38:50 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:38:50 2011 {WIFI} [R00002] Sending packets 101-200
Wed Sep 28 10:39:04 2011 {WIFI} [R00002] Checking if the AP is still up...
Wed Sep 28 10:39:04 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:39:04 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:39:04 2011 {WIFI} [R00003] Sending packets 201-300
Wed Sep 28 10:39:18 2011 {WIFI} [R00003] Checking if the AP is still up...
Wed Sep 28 10:39:18 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:39:19 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:39:19 2011 {WIFI} [R00004] Sending packets 301-400
Wed Sep 28 10:39:42 2011 {WIFI} [R00004] recv() timeout exceeded! (packet #325)
Wed Sep 28 10:39:42 2011 {WIFI} [R00004] Checking if the AP is still up...
Wed Sep 28 10:39:42 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:40:42 2011 {WIFI} [!] The AP does not respond anymore. Latest test-case has been written to '/dev/shm/wifuzz-eK97nb.pcap'
Admin就是SSID名 用的auth的FUzz。到最后的时候发现已经崩溃了
Wed Sep 28 10:40:42 2011 {WIFI} [!] The AP does not respond anymore. Latest test-case has been written to '/dev/shm/wifuzz-eK97nb.pcap'
Wifuzz可以自己进行检测Bacon frame,会假定目标已经崩溃,然后生成一个pacp来重现崩溃。
其实在Metasploit里面也内置了一些fuzzer的脚本。要想在Metasploit进行fuzz的话,要安装一个lorcon2模块。这个模块是专门用于无线注入的。Google把代码撤了。如果想自己安的话,环境变量要自己设置.
自己airodump一个STA 的mac。因为是Beacon fuzz,它要制出大量的ssid。
可以看下该频道的ESSID。 这就证明开始fuzz了。
没办法,802.11的fuzz能表示出来的就这么点东西,也许有更难的我没看到,还有一些是驱动层的东西,但我不太会,也不着重看过。
其实真的还有很多东西没写出来。就在脑子里,也真是不知道咋写出来了。可能是太懒了,人一呆着就容易有惰性啊。有想交流的可以一起交流。
也非常感谢在 unicorn Team的两个月,时隔一年整,短短两个月我看到了自己的不足,也让我更清晰了方向,回来努力补过。感谢 Ir0smith Sweeper 在当时对我的各种方面的帮助。我至今还记得我去的第一天,Sweeper让我看了Vivek Ramachandran的视频,当时没放心上,后来看了之后也挺困难的,印度方言,很是雷我。不过看了好几遍连续,看懂之后受益匪浅。再次感谢帮助过我 的人。