IoT环境下的渗透测试之构建高效WiFi破解字典

admin 2023-11-29 20:38:35 AnQuanKeInfo 来源:ZONE.CI 全球网 0 阅读模式

 

作者:Duncan SecTeam

0x00:前言

在网络安全圈儿,很多大佬都说“引入一个新的功能,必然引入一些新的攻击面”。我觉得吧,这句话特靠谱,比如在当先很火的IoT领域。很多IoT设备都是通过802.11系列协议(无线通讯信息)接入企业或者互联网的,较之于传统的物理线路接入而言,省了不少钱,毕竟购买高质量的网线和美观的走线是要花不少银子的,尤其是IoT设备部署范围比较大的应用场景下。然而,无线网络与生俱来的缺陷就是无法避免他人的嗅探和攻击。为了便于更好的对企业和机构进行全面有效的红队渗透测试服务,尽可能检测出企业内部面临的“无线安全”漏洞,我们希望通过这篇文章来分享我们的一些经验和想法。

 

0x01:如何破解WiFi

目前,市面上的WiFi大多采用WPA2作为默认的认证方式,并且默认密码都不再是弱口令(eg,电信光猫自带的WiFi),有些设备甚至强制用户在初次使用时设置密码并且还要检测密码强度(eg,Tp-Link)。在这种严酷的形势下,再加之攻击者与AP之间的距离(信号强弱与稳定性),设备厂商的安全策略,抓包时间段以及AP所有者自身的网络安全意识等因素,现实情况下,定向的WiFi破解(eg,就要破隔壁老王家WiFi)其实真的很难。

从目前的情况来看,常见的WiFi破解方法包括:

1. 通过WiFi(热点)共享软件破解WiFi密码

这种方法不具有定向性,而且严重依赖于AP所有者的安全意识(同龄的年轻人几乎都不用这些玩意儿),某些手机还需要解决在无root情况下查看已已成功连接并且保存的WiFi密码,因此这种方法能够较好的解决“蹭网”问题,但还是没法定向搞掉隔壁老王家的WiFi。

2. 在线WiFi破解工具

这个严重依赖于字典和攻击者与被攻击者之间的物理位置,当然有一个好处是只要AP在线就可以搞,不需要进行De-Auth攻击,也就是说不需要一定有合法用户连接到AP上。如果有耐心和决心,找一个超大的密码字典,再配上一个高增益的WiFi网卡,隔壁老王WiFi是有可能被搞掉的。但是,在线破解对于信号的稳定性要求比较高,高增益网卡虽然可以让手机或者电脑上的WiFi信号看起来“满格”,但是由于距离或者障碍物(eg,砖墙,门板等)会造成信号稳定性差,很多破解密码可能因此而被忽略掉,进而导致破解失败。所以,在线破解的不稳定因素太多了,这或许也是为什么这些年没有什么人在做WiFi在线破解的一个原因吧。

3. 抓取和破解WiFi握手包

按照802.11系列协议,对于采用预制秘钥(PSK)等需要认证的无线路由器而言,终端和AP之间必须先通过网络握手包实现密码确认,然后才能连接AP并上网。但是,这个握手包中的加密秘钥包括了AP的SSID(网卡地址)等信息,因此无法使用彩虹表来进行破解,目前只能基于握手包照着明文字典一条一条的跑。这种方法的好处是不需要一直趴在墙根儿在线破老王家WiFi,但是必须要等老王下班回家连上WiFi后才有可能抓到用于破解的握手包,抓到握手包以后,剩下的就是时间,字典和计算机的事儿了(MAY GOD BE WITH U)。

4. 基于社工欺骗的Fluxion[1]

Fluxion本质上就是伪造WiFi热点和邪恶的社工欺骗,如果你前面的方法都试过了,始终没法搞掉隔壁老王的WiFi,那么逼急了的你或许可以考虑使用这种办法。由于要进行社工,那么这个偏方跟前面的抓包破解一样,必须等老王在家的时候。如果你猜到老王半夜12点一定会看片,那么你可以尝试在这个时间段让他频繁断网,一阵猥琐操作之后,弹个框让它确认WiFi密码,应该能十拿九稳。

 

0x02:关于WiFi密码的一些事实

由于前面提到的种种原因,WiFi密码的破解难度越来越大,但是由于WiFi密码在设置上存在一定的共性,因此我们可以利用这些共性来约束WiFi字典,从而生成能够一定程度上提高密码破解成功率的字典。由于AP所有者具有很强的地域性特征,加之地域性特征与很多社会属性相关联(区号,邮编,车牌,座机,手机等),因此我们可以充分利用这些属性和关联信息针对特定地理位置(范围)的AP构造破解字典或者优化破解字典,比如:

1. WiFi密码一旦设定,几乎不会更改

如果未出现明显的网络安全攻击事件或者造成严重的网络拥塞,其所有者几乎不会再更改WiFi密码。这一点是攻击者愿意付出代价破解WiFi的动因之一,当然也是造成家庭网络甚至是机构网络被入侵的主要原因之一。当然,企业内部员工的不合规行为,也会极大诱惑“黑客”,比如利用公司网络线路私自安装wifi路由器[2]。

2. WiFi密码的设置与所有者的个人及社会属性密切相关

这一点是构建高效WiFi破解字典,或者设置字典约束的一个最基本的前置条件,可以将一个无穷大的字典集合,约束到一个很大的字典集合。这些信息具体包括什么,要根据具体的情况而定,比如地域,特定AP所有者,特定机构等。举个栗子,手机热点和家庭用户往往将WiFi密码设置为“12345678”,餐馆、麻将馆通常将密码设置为“88888888”,稍微有一些品牌意识的店铺或者机构往往会将密码设置为自家的座机号码或者400号码,这就是密码所具有的社会属性,对我们构造WiFi字典可以起到约束字典空间的效果。

3. PSK(预制共享秘钥)的密码限制措施

最基本的,PSK都被限制为不少于8位密码(无密码共享WiFi例外),这让我们可以忽略掉所有8位以下的所有字符、数字和符号组合。再者,针对特定运营商而言,运营商光猫设备自带WiFi的密码也有一定的规则或限制,比如,四川范围内电信运营商所提供的WiFi版光猫都设置了一个长度为8位的WiFi密码,密码构成仅包括了小写字符和数字,注意:只有小写字符(目前为止是这样的),并且没有小写字符“o”,估计也没有小写字母“l”,因为这两个字符与数字“0”和“1”极易混淆,面对众多可能的中老年用户,年轻、善良且有爱的电信工程师估计不想给自己找麻烦。

4. 弱口令(密码)的广泛存在

在安全圈,每年都会有安全公司公布各类弱口令,比如通用弱口令,SSH弱口令,网管人员弱口令[3]。因此,弱口令的手机与在WiFi破解中的应用往往能极大提高破解的效率,虽然未必能提高破解的成功率。注意:破解的成功率和效率是两个不同的概念,只有在成功破解的基础之上,才能台的上破解的效率。当然,破解的效率和破解系统的跑包率是正相关的,跑包越快,破解的效率就会越高。有点拗口,但真不是在学岳云鹏说相声,玩绕口令。

 

0x03:针对四川范围内用户构建高效WiFi破解字典

由于字典的构建、密码信息的收集需要长期的时间积累,因此为了便于验证,我们在这里只针对四川地区构建一个具有一定区域适用性的WiFi密码破解字典。再次声明:我们做这个测试只是为了验证这种方式可以构造用于IoT环境下渗透测试用的字典!

1. 弱口令

弱口令是有效提高WiFi破解效率的重要方式,为了提高破解速度、加快破解效率,弱口令不仅要广泛搜集,还要细心整理,并且作为统一WiFi破解系统中最先尝试的跑包字典。在这里,我们主要收集了抓包网卡网店商家所提供的弱口令字典作为构建依据,然后通过CSDN,百度云盘等技术论坛下载了大量的弱口令来补充。由于弱口令本就是从密码使用概率的角度抽取出的一部分常用密码,因此从各个途径搜集到的密码存在极大的重复,此外很多技术论坛灌水极其厉害,再加之弱口令本身就广泛存在,我们在各个技术站点上收集到的弱口令重复率可以高达90%以上,为了去重,浪费了不少计算资源(弱口令去重,我们主要是采用Linux下的uniq命令来实现的,不知道还有和其它更高效的去重处理办法,希望各位大侠不吝赐教!)。

以下图片是买抓包网卡时,好心卖家送的,真心话,特好用。我们把里面的所有弱口令(仅仅是弱口令)做了一个汇总和去重,然后分割为了2个文件,总共体量在200MB左右,这也是我们弱口令构造的基础。

2. 构建四川范围内手机号码字典

之所以选择做这么一个字典,跟我们前期的测试密切相关,也就是手机号码经常被用作WiFi密码。其实,这样的客观事实是能找到合理解释的,一方面手机几乎是人人一部,另一方面很少会有人记不住自己常用的手机号(主号)。当然,这个概率也没有说高到离谱,具体多高,估计只有那些做“WiFi共享”的科技公司知道了吧。

首先,我们通过各种途经搜集了全国号段信息,其中性价比最高的是一个从CSDN上下载的20M+的txt文件。当然,X宝上找到一家专门卖全国手机号段信息的店家,基础数据开价60RMB,且每次更新还要花20RMB,贫穷限制了我们技术能力的发挥,我们毫不犹豫的认(从)怂(心),选择了CSDN上的手机归属地作为依据构建四川范围内的手机号码数据库。其实,从我们最后的分析来看,这个数据库的号段信息的确应该是2019年9月左右的,因为它包括了各大运营商所新开的所有号段信息。

通过一个简单的shell脚本,再加上crunch字典工具的加持,很快就完成了四川地区三大运营商号码数据构建,当然其中包括了一些无用数据,比如中国移动物联网公司的144号段,这些卡号只会用作智能水表、电表的数据库,因此按照我们前面的推论,这些卡号几乎不可能被WiFi所有者设置为WiFi密码。此外,crunch工具生成的号码未必都是在用号码,比如xxxx5145914,xxxx1414914,xxx1414514, xxx74749174等这些犯忌讳的号码估计也没有谁会用吧。

我们从一个CSDN上下载的txt文档中,抽取出了截止2019年9月的四川地区手机归属地信息,抽取后的文件大小接近2MB,抽取后得到的数据格式如下,包括了号段,归属地,运营商,邮编以及长途区号。

执行以下的脚本之后,我们得到了四川省范围内所有的手机号,包括仅用于上网卡和物联网设备的号段,大小在3GB左右,当然在做定向WiFi破解的时候可以跟WiFi名称中的信息做混合,形成一个更有针对性地字典。

【CODE】
//$1 – 存储号段信息的文件
//$2 – 存储生成手机号码字典的文件
cat $1 | while read line
do
crunch 11 11 -o $2 -t line%%%%%%%
done

3. 四川范围内的座机号码

座机号码之所以被我们纳入WiFi字典的构建,一方面是由于前期测试发现了不少用座机号码作为WiFi密码的案例;另一方面,座机号码天然满足WiFi密码长度8位的要求。有一点需要指出的,四川范围内只有成都市才使用8位的座机号,在没有对其他地市州进行WiFi密码测试的情况下,我们不提出针对四川各地市州座机号码的WiFi字典构建。

由于电信系统经过座机,小灵通的发展,成都市的座机号段信息比较乱,加之成都地区可能的座机号总量与手机号段相比几乎可以忽略,很难很难排除无效座机号码,因此我们没有进一步去优化座机号码字典。我们使用crunch工具制作了8打头以及6打头的座机号段字典。

【CODE】
$crunch 8 8 -o chengdu_8x.dic -t 8%%%%%%%
$crunch 8 8 -o chengdu_6x.dic -t 6%%%%%%%
-rw-r--r-- 1 root root 86M 1 22:05 chengdu_6x.dic
-rw-r--r-- 1 root root 86M 1 22:02 chengdu_8x.dic

但就体量来说的话,这两个已经是非常小的字典了,如果破解所用的计算资源充足的话,完全可以将这两个小字典与其它字典并行跑包,很快就能出结果。

4. 生日信息字典

毋庸置疑,生日信息在各种密码中占有重要一席,尤其是万恶的银行卡密码。因此,我们在构造高效破解字典的时候,决不能忽略这个重要密码属性。最常用的生日密码格式就是“yyyymmdd”,当然也可能是其他格式,比如欧美常用的“mmddyyyy”,考虑到中国人的习惯,我们只选择第一种格式。同样,我们也是基于crunch来生成字典的,当然我们通过一个shell脚本,控制了字典生成的过程,防止生成“yyyy13dd”以及“yyyymm99“这样的无效数据。

考虑到可能的后期大规模使用(包括与其他密码破解的混合使用),我们写了一个很简单的脚本来约束字典的生成,尽可能减少不必要的生日数据,从1900年到2020年,整个字典大小为396KB,非常小,甚至可以用作WiFi的在线破解(WiFi在线破解成功的概率极小)。此外,还可以结合社工手段收集的信息,在这个字典的各条密码前面(后面)增加姓氏拼音的首字符(大/小)写,姓名所需的拼音首字符(大/小写),从而衍生出更多、更复杂的字典。

【CODE】
Birth_dict_gen.sh

5. 基于泄露数据库构建字典

将泄露数据库作为字典构建的一个来源,其实并没有一个综合的测试作为支撑的,我们之所以这么做很大程度上是因为两个原因:第一,泄露字典是真实密码,其效果是优于字典工具生成的密码的,比如 “aaaa1111”;第二,个人密码是具有“粘连性”的,比如同为6位的数字密码,银行卡密码很可能与个人社保密码是一样的。同理,各类网站和应用的密码很有可能也是相同的。按照这一逻辑,我们认为泄露数据库密码是一类有加大加之的WiFi破解密码。当然,我们在抽取密码的后,必须过滤掉那些长度小于8位的密码。此外,考虑到有限的计算资源,我们只使用那些包含明文密码的泄露数据库,而不会去破解和使用泄露的加密密码。

为了避免被请喝茶,我们就不去详细介绍收集了哪些泄露的数据库了,百度一搜还是有那么多的。至于数据的清洗和入库,我们依然是采用的shell脚本来完成,尝试过物理机和虚拟机,感觉处理效率相差不大,估计是shell脚本在读写硬盘的时候出现了瓶颈。如果把数据分片读取到内存中处理,然后整块写入,估计效率要高许多。

 

0x04:实测和对比

1、WiFi握手包抓取

为了延续基于Android设备的pHacking这一系列,我们所有的抓包操作都是在Google系列手机上操作的,当然我们会通过shell脚本简化繁琐操作(通过触屏搞机真的好痛苦)或者通过SSH远程连接手机(很幸福)。

由于抓包时长不同以及抓取到的握手包数量不同,各个ivs文件大小不一。当然,有一点是肯定的,如果ivs文件大小不足100字节,那么这个文件时肯定没有握手包的,具体情况如下:

-rw-r—r— 1 1.9K 9 23 22:11 106.ivs
-rw-r—r— 1 1.1K 9 30 11:12 104-02.ivs
-rw-r—r— 1 3.7K 9 23 20:50 304.ivs
-rw-r—r— 1 3.0K 9 28 22:13 211-01.ivs
-rw-r—r— 1 1.9K 9 21 21:59 王二娃是猪.ivs
-rw-r—r— 1 1.1K 9 27 10:52 xiaoyuyu-01.ivs
-rw-r—r— 1 4.5K 9 29 13:32 iPhone7X-01.ivs
-rw-r—r— 1 1.9K 9 29 13:33 204.ivs
-rw-r—r— 1 1.8K 9 30 23:16 miaomiao.ivs

2、破解软硬件

硬件:Intel i5,16GB,500GBHD,集成显卡
软件:Aircrack-ng
PS:由于实验期间正值三伏天,全速跑EWSA会导致发热量过大,进而死机,因此换为了aircrack-ng。每次运行8个aircrack-ng进程,每秒钟能够跑的密码总数在2000个左右。

3、破解字典的选择与使用

基于之前搜集到的字典,我们做了如下的排列:

1) 弱口令字典:200MB
2) 生日字典:396KB
3) 全川手机号字典:1GB
4) 成都座机号字典:200MB
5) 泄露数据库字典:20GB

4、破解情况

针对前面抓取到的WiFi握手包,我们按照上述破解顺序逐一破解,大致情况如下:

106: unknown
104: unknown
304: 99xx1299xx12
211: unknown
王二娃是猪: 199xxxx2546
xiaoyuyu: 191006xx
iPhoneX: 12345678x
204: unknown
miaomiao: zk200106xx

目前,我们只针对这些wifi握手包进行了破解(其中x表示不便公开的字符或数字),这些wifi之所以能破解出来很大程度上都是通过“弱口令字典”搞定的。至于4个没有跑出来的wifi密码,我们尝试了截止目前构造的所有字典,全部失败,包括泄露密码库字典。确切地说,没有一个wifi密码是通过泄露数据库跑出来的,这让我们很疑惑,甚至倍感受挫,曾多次尝试分析原因,未能找到具有说服力的结论吧。当然,我们的泄露密码字典仍在不断增长。

 

0x05:方法评估

根据前面的实验情况来看,目前要想通过单一方法破解WiFi密码难度越来越大,究其原因包括WiFi所有者安全性的提高,设备安全性的提高以及软硬件开发人员对安全的重视程度越来越高。然而,WiFi密码的安全性仍有待提高。但从前面的测试情况来看,我们基本可以得出以下结论:

1、 由于WiFi所有者的社会属性,导致WiFi被攻击的可能性增大

比如,许多用户仍然会选择与个人社会属性息息相关的信息作为WiFi密码,这些密码但从长度来说看似“很强”,但是经不起精心构造的WiFi密码破解字典的攻击。

2、 仅从当前样本看,破解成功率较高

抛开抓取握手包失败的情况来看(抓包成功的情况下),从目前的测试数据来看,破解成功率已经超过60%,这已经是一个很好的实验结果了。

3、 预期之外的情况

在实验之初,我们认为泄露密码库与WiFi密码应该存在较强的正相关性,但从目前的情况来看,没有一个WiFi密码是由泄漏密码库实现破解的。由于该项目尚未结束,我们会不断积累泄漏密码,期望能够得到更好的效果。

 

0x06:写在最后

由于IoT设备的迅猛增长,加之应用场景和网络建设和升级的经费限制,802.11系列协议应用越来越广泛,当然随着也引入了一个越来越无法忽视的“无线攻击面”。本文在前期观察和测试的基础上,提出了一个构件高效WiFi破解字典的方法,以期帮助各位白帽子更好的进行IoT环境下的渗透测试。

后期,我们会开源整个项目,包括收集的弱口令,构建字典的各种脚本,数据抽取和清洗的脚本以及各种软硬件平台下WiFi破解的各种实验数据及对比分析结果。但是,考虑到个人信息安全,我们不会公布收集和积累的泄露密码库!

Ref:

1、 刘亮等,《基于 Fluxion 的 WIFI 密码防窃取研究 》,科技经济导刊 2019,27(33) 。
2、 《私人电脑引发企业安全风险》,http://blog.itpub.net/10716469/viewspace-937099/
3、 Ang010ela,《2019弱密码top 200,12345登顶》,https://www.4hou.com/posts/zxN8

weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论:0   参与:  0