IoT环境下的渗透测试之构建高效WiFi破解字典
0x00:前言
在网络安全领域,有很多专家说:“引入新功能必然会引入新的攻击面”。我认为这句话非常准确,尤其是在当前火热的物联网领域。许多物联网设备通过802.11系列协议(无线通信)接入企业或互联网,相比传统的物理线路接入,这样做省去了不少成本,因为购买高质量的网线和美观的走线需要花费不少钱,尤其是在大范围应用场景下。然而,无线网络天生存在无法避免他人嗅探和攻击的缺陷。为了更好地对企业和机构进行全面有效的红队渗透测试服务,并尽可能发现企业内部面临的“无线安全”漏洞,我们希望通过这篇文章分享我们的经验和想法。
0x01:如何破解WiFi
目前,市面上的WiFi大多采用WPA2作为默认的认证方式,并且默认密码不再是弱口令(例如,电信光猫自带的WiFi),有些设备甚至强制用户在初次使用时设置密码并检测密码强度(例如,Tp-Link)。在这种严峻形势下,再加上攻击者与接入点之间的距离、设备厂商的安全策略、抓包时间段以及接入点所有者的网络安全意识等因素,实际情况下,定向破解WiFi(例如,邻居家的WiFi)真的很困难。
从目前情况来看,常见的WiFi破解方法包括:
- 通过WiFi共享软件破解WiFi密码:这种方法没有定向性,且严重依赖于接入点所有者的安全意识。某些手机甚至需要在无root情况下查看已连接并保存的WiFi密码。因此,这种方法可以解决“蹭网”问题,但无法定向破解邻居家的WiFi。
- 在线WiFi破解工具:这种方法严重依赖于字典和攻击者与被攻击者之间的物理位置。一个好处是只要接入点在线,就可以进行破解,无需进行De-Auth攻击,也就是说不需要合法用户连接到接入点上。如果有耐心和决心,找一个超大的密码字典,再配上一个高增益的WiFi网卡,也许可以破解邻居家的WiFi。然而,在线破解对信号的稳定性要求较高,高增益网卡可以让手机或电脑上的WiFi信号看起来“满格”,但由于距离或障碍物(例如砖墙、门板等)的存在,信号稳定性较差,很多破解密码可能因此被忽略,导致破解失败。因此,在线破解存在许多不稳定因素,这也许是为什么这些年来没有多少人进行WiFi在线破解的原因之一。
- 抓取和破解WiFi握手包:根据802.11系列协议,对于采用预共享密钥(PSK)等需要认证的无线路由器而言,终端和接入点必须通过网络握手包进行密码确认,然后才能连接接入点并上网。然而,握手包中的加密密钥包括接入点的SSID(网卡地址)等信息,因此无法使用彩虹表进行破解,目前只能基于握手包逐个尝试明文字典中的密码。这种方法的好处是不需要一直趴在墙根儿在线破解邻居家的WiFi,但必须等邻居回家后连接到WiFi才有可能抓到用于破解的握手包。抓到握手包后,剩下的就是时间、字典和计算机的事情了。
- 基于社交工程欺骗的Fluxion[1]:Fluxion本质上是伪造WiFi热点和进行社交工程欺骗的工具。如果前面的方法都尝试过了,仍然无法破解邻居家的WiFi,那么可以考虑使用这种方法。通过进行社交工程,可以在邻居在家时进行操作。例如,如果你猜到邻居半夜12点一定会看片,那么你可以尝试在这个时间段频繁断网,然后弹出一个框让邻居确认WiFi密码,应该能够成功破解。
0x02:关于WiFi密码的一些事实
由于前面提到的种种原因,WiFi密码的破解难度越来越大,但由于WiFi密码在设置上存在一定的共性,因此我们可以利用这些共性来约束WiFi字典,从而生成能够一定程度上提高密码破解成功率的字典。由于接入点所有者具有很强的地域性特征,加之地域性特征与许多社会属性相关联(区号、邮编、车牌、座机、手机等),因此我们可以充分利用这些属性和关联信息针对特定地理位置(范围)的接入点构建破解字典或优化破解字典。例如:
- WiFi密码一旦设定,几乎不会更改:除非发生明显的网络安全攻击事件或严重的网络拥塞,接入点所有者几乎不会更改WiFi密码。这是攻击者愿意付出代价破解WiFi的一个原因,也是家庭网络甚至机构网络被入侵的主要原因之一。此外,企业内部员工的不合规行为也会极大诱惑黑客,例如利用公司网络线路私自安装WiFi路由器[2]。
- WiFi密码的设置与所有者的个人及社会属性密切相关:这是构建高效WiFi破解字典或设置字典约束的一个基本前提。具体包括地域、特定接入点所有者、特定机构等。例如,手机热点和家庭用户通常将WiFi密码设置为“12345678”,餐馆和麻将馆通常将密码设置为“88888888”,稍微有一些品牌意识的店铺或机构通常会将密码设置为自家的座机号码或400号码。这些密码具有社会属性,可以约束WiFi字典的范围。
- 预共享密钥(PSK)的密码限制措施:PSK通常被限制为不少于8位密码(无密码共享WiFi除外),这使得我们可以忽略所有8位以下的字符、数字和符号组合。此外,针对特定运营商而言,运营商提供的WiFi版光猫设备的密码也有一定的规则或限制。例如,四川范围内的电信运营商提供的WiFi版光猫都设置了一个长度为8位的WiFi密码,密码只包含小写字符和数字(目前为止是这样的),并且没有小写字符“o”和“l”,因为这两个字符与数字“0”和“1”容易混淆。面对许多中老年用户,年轻、善良且有爱的电信工程师可能不想给自己找麻烦。
- 弱口令的广泛存在:每年安全公司都会公布各类弱口令,例如通用弱口令、SSH弱口令、网管人员弱口令[3]。因此,弱口令在WiFi破解中应用广泛,虽然不能提高破解成功率,但可以大大提高破解效率。需要注意的是,破解成功率和效率是两个不同的概念,只有在成功破解的基础上,才能谈论破解的效率。破解效率和破解系统的跑包率是正相关的,跑包越快,破解效率就越高。
0x03:针对四川范围内用户构建高效WiFi破解字典
由于字典的构建和密码信息的收集需要长期的时间积累,因此为了方便验证,我们在这里只针对四川地区构建了一个具有一定区域适用性的WiFi密码破解字典。再次声明:我们进行这个测试只是为了验证这种方式可以构建用于IoT环境下渗透测试的字典!
- 弱口令字典:我们收集了抓包网卡网店商家提供的弱口令字典作为构建依据,并通过CSDN、百度云盘等技术论坛下载了大量的弱口令来补充。由于弱口令是从密码使用概率的角度抽取出的一部分常用密码,因此从各个途径搜集到的密码存在很大的重复。为了去重,我们使用了Linux下的uniq命令,但如果有更高效的去重处理方法,希望各位大侠不吝赐教!
- 四川范围内手机号码字典:我们通过搜集全国号段信息构建了一个四川范围内的手机号码数据库。通过一个简单的shell脚本和crunch字典工具,我们很快就完成了四川地区三大运营商号码数据的构建。此外,我们还可以结合社交工程手段收集的信息,在字典的每个密码前面(或后面)增加姓氏拼音的首字符(大写/小写)和姓名的拼音首字符(大写/小写),从而衍生出更多、更复杂的字典。
- 四川范围内座机号码:我们使用crunch工具制作了以8和6打头的成都座机号段字典。由于成都市的座机号段信息比较混乱,且可能的座机号总量与手机号段相比几乎可以忽略,我们没有进一步优化座机号码字典。这两个字典的体量都很小,如果破解所用的计算资源充足,完全可以与其他字典并行进行破解,很快就能得到结果。
- 生日信息字典:生日信息在各种密码中占有重要地位,因此我们在构建高效破解字典时不能忽略这个重要密码属性。我们选择了最常用的生日密码格式“yyyymmdd”,并通过一个shell脚本控制字典生成的过程,防止生成无效数据。整个字典大小为396KB,非常小,甚至可以用于WiFi的在线破解(尽管WiFi在线破解成功的概率极小)。
0x04:实测和对比
- WiFi握手包抓取:我们在Google系列手机上进行了抓包操作,通过shell脚本简化了操作。抓取到的握手包数量和大小不同,如果文件大小不足100字节,则肯定没有握手包。具体情况如下:
- 106.ivs: 1.9K
- 104-02.ivs: 1.1K
- 304.ivs: 3.7K
- 211-01.ivs: 3.0K
- 王二娃是猪.ivs: 1.9K
- xiaoyuyu-01.ivs: 1.1K
- iPhone7X-01.ivs: 4.5K
- 204.ivs: 1.9K
- miaomiao.ivs: 1.8K
破解软硬件:我们使用Intel i5、16GB内存、500GB硬盘和集成显卡的硬件,以及Aircrack-ng软件进行破解。由于高温天气,全速运行EWSA会导致过热和死机,因此我们换成了Aircrack-ng。每次运行8个Aircrack-ng进程,每秒钟能够破解约2000个密码。
破解字典的选择与使用:根据之前收集到的字典,我们按照特定顺序进行破解。具体字典包括弱口令字典(200MB)、生日字典(396KB)、全川手机号字典(1GB)、成都座机号字典(200MB)和泄露数据库字典(20GB)。
破解情况:对于抓取到的WiFi握手包,我们按照上述顺序逐一破解,大致情况如下:
- 106: 未知
- 104: 未知
- 304: 99xx1299xx12
- 211: 未知
- 王二娃是猪: 199xxxx2546
- xiaoyuyu: 191006xx
- iPhoneX: 12345678x
- 204: 未知
- miaomiao: zk200106xx
目前,我们只针对这些WiFi握手包进行了破解(其中x表示不便公开的字符或数字)。这些WiFi密码的破解很大程度上都是通过“弱口令字典”实现的。至于4个没有破解成功的WiFi密码,我们尝试了构建的所有字典,包括泄露密码库字典,但全部失败。确切地说,没有一个WiFi密码是通过泄露数据库破解的,这让我们感到困惑,甚至倍感挫败。我们多次尝试分析原因,但未能找到令人信服的结论。当然,我们的泄露密码字典仍在不断增长。
0x05:方法评估
根据前面的实验情况来看,目前要想通过单一方法破解WiFi密码的难度越来越大。原因包括WiFi所有者的安全性提高、设备安全性提高以及软硬件开发人员对安全的重视程度增加。然而,WiFi密码的安全性仍有待提高。从前面的测试情况来看,我们可以得出以下结论:
- 由于WiFi所有者的社会属性,WiFi被攻击的可能性增大。许多用户仍然会选择与个人社会属性相关的信息作为WiFi密码,这些密码看似“很强”,但对于精心构造的WiFi密码破解字典来说,却易于攻破。
- 从当前样本来看,破解成功率较高。抛开抓取握手包失败的情况,从目前的测试数据来看,破解成功率已经超过60%,这是一个不错的实验结果。
- 预期之外的情况。在实验初期,我们认为泄露密码库与WiFi密码应该存在较强的相关性,但目前的情况表明,没有一个WiFi密码是通过泄露密码库破解的。尽管项目尚未结束,我们仍在不断积累泄露密码,希望能够取得更好的效果。
0x06:写在最后
随着物联网设备的快速增长,加上应用场景和网络建设的经费限制,802.11系列协议的应用越来越广泛,但也引入了越来越难以忽视的“无线攻击面”。本文在前期观察和测试的基础上,提出了一种构建高效WiFi破解字典的方法,希望能够帮助白帽子们更好地进行IoT环境下的渗透测试。
后续,我们将开源整个项目,包括收集的弱口令、构建字典的各种脚本、数据抽取和清洗的脚本,以及各种软硬件平台下WiFi破解的实验数据和对比分析结果。然而,考虑到个人信息安全,我们不会公布收集和积累的泄露密码库。
参考文献:
- 刘亮等,《基于 Fluxion 的 WIFI 密码防窃取研究》,科技经济导刊 2019,27(33)。
- 《私人电脑引发企业安全风险》。
- Ang010ela,《2019弱密码top 200,12345登顶》。