随着宽带用户的爆炸式增长,它被带入了每家每户,但其安全漏洞直到今天并没有受到足够的重视,成为一种低成本、全杀路由器的攻击手段。
PPP 是一种将点对点协议 (PPP) 封装在以太网 () 帧中的网络隧道协议。它由 、 和 开发,并于 1999 年在 RFC 2516 中发布。
近二十年后,该协议已广泛应用于网络接入场景,其中比较著名的ADSL已成为几乎所有家用路由器的默认功能之一。随着宽带用户的爆发式增长,它被带入了家家户户,但其安全漏洞却并未得到足够的重视,直到今天,它已成为一种成本极低且极为有效的路由器攻击手段。
以下是本文讨论的重点:“古老的漏洞、数亿受影响的设备、极低的攻击门槛、没有完美的修复方案、危害极大的攻击场景——从获取宽带密码到隐藏的后门”
极低的攻击门槛
我们很容易就能在网上搜索到使用各种平台的各种工具来抓取密码的文章,相信大家按照描述都能在很短的时间内复现出来。
由于这些文章大多是出于验证目的,在考虑实际攻击场景时,大家往往会陷入需要身体接触、发出巨大噪音的误区。于是我在手机上移植了一个嗅探器,打开程序几秒内就能获取到账号信息。见下面的 demo:
工作原理及缺陷
该协议的工作流程包括两个阶段——发现阶段和会话阶段,如下两张图所示。
在发现阶段,会广播PADI进行搜索,攻击者可以收到PADI请求,通过搭建自托管会话建立会话。进入会话阶段后,LCP协商时需要用到PAP(一种明文认证方式),然后就可以使用等工具嗅探到明文传输的PAP账号和密码,如下图所示。
没有完美的解决办法
该漏洞的关键在于用户在广播搜索时遭到钓鱼,并被要求以明文认证的方式传递账号和密码。
协议中的 和 分别对应用户的路由器设备和运营商的认证设备,人们很容易认为只要路由器阉割掉PAP认证,就能抵御攻击。然而任何商用产品都是以保证可用性为首要条件的,目前还有很多使用场景(比如小型运营商或者校园宽带)只能使用PAP认证,因此不可能要求商用产品减少其使用范围。
宽带账号一键学习功能
相比于安全漏洞带来的无奈,路由器厂商借此解决了一个痛点——“一键更换路由器功能”。在更换新路由器时,很多用户都会经历“找回密码”的过程,需要打电话给运营商重置或者现场协助,带来诸多变化。而他们利用的漏洞刚好可以解决“找回宽带账号”的问题。他们在路由器里内置了一个嗅探器,只要把旧路由器连上去就能自动学习,非常方便。
危险的攻击场景
通过前面的内容,我们大致了解了该攻击的原理和条件。攻击需要目标设备保持二层网络可达(比如通过网线直连)。当你在朋友家有路由器可以访问时,就可以像演示中一样直接连接抓包账号(好吧,这个好像只是娱乐一下,没有其他价值)。此外,在小型运营商或者校园网等大型二层网络中,可以进行批量钓鱼。很有意思,但是还有其他危害更大的攻击场景吗?
过去,很多家用无线路由器因为默认密码问题,很容易被黑客入侵。比如我去别人家做客,经常会走到路由器前,自己按一下WPS键连接无线网络,然后一般就能用默认密码进入后台了。如今的路由器已经有所改进,在初始化的时候需要设置一定强度的密码,所以看上去只要密码不泄露,就很安全。
前不久出差期间,我突然发现了一个有趣的攻击场景。
为了省钱,我们选择了民宿。当晚无线网络不太好,自然想检查一下后台,但后台密码却拦住了我。心想只要知道宽带账号,就可以无忧无虑地重置路由器了。我跑到路由器前,嗅探账号,重置路由器并迅速恢复原有配置(宽带、无线热点等)。整个过程大概花了2分钟。值得注意的是,由于恢复后的网络通讯和无线热点配置与之前一样,我的几个同事甚至没有发现任何明显异常,而我已经可以进入路由器后台了!
这个方法我叫“路由器无感知重置绕过法”,可以干掉所有家用路由器,获取后端权限后,除了可以篡改DNS,还可以开启远程Web管理,绑定动态域名解析,打造远程控制后门。
我查阅了《2017民宿行业发展研究报告》,报告指出2017年民宿总数已经达到20万家,对于规模较小的民宿来说,廉价且易于实现的家庭宽带几乎是最主流的上网方式,而路由器则会被放置在住客可进入的区域,这几乎完美匹配了嗅探攻击场景。每一个入住房间的用户都有可能对路由器进行不可察觉的重置以绕过攻击并植入后门,也有可能被前一个用户植入的后门监听。我将整个攻击流程总结为下图:
减轻
完美的解决方案是禁用PAP认证或者更新替换,这种涉及上下游不同行业的方案按照惯例不可行。这几个月我做过几次演讲(比如FIT),主题都是“利用手机盗取路由器宽带账号”,希望引起大家对这个问题的关注,但效果不是很好。
后来我想到了一个混淆方案来缓解这种重置绕过攻击:宽带密码的常见格式是身份证最后几位、固定数字或其他乱码。用户填写账号后,我们可以以此为基础生成一批相似度较高的字符串,加上内置的常见格式字符串,形成混淆字典。在PAP认证时,发送随机混淆字符串进行混淆。理论上,在可接受的等待时间内,尽可能多地发送混淆后的账号,可以大大缓解重置绕过攻击。(未实际测试过,请厂商朋友参考并给出可行性建议)
后记
虽然这个漏洞的发现和利用已经非常“古老”,但我们希望一些小小的推动能够帮助它尽快达到“解决”的状态。