看我如何黑掉你的路由器
前段时间我一个在信息安全领域的朋友让我干一件很奇怪的事情.他让我入侵他.为了保持匿名,就让我们叫他比尔吧.无辜的人名和地名也都已经匿名.供应商的名字依然保留以便追究责任.
入侵大公司很容易.他们拥有的信息资产跨越全球,并且不太注重对各种各样的防护技术的投入.跟踪所有资料实在有难度.它要求对组织内所有资产有禅宗般每天严格遵守”扫描-打补丁-重复”的原则,不能有一点闪失 .
针对个人的入侵则是很恼人的.黑帽子确实在关于信息安全上有不对称优势.有时候只要有一个漏洞就足够了.但是针对个人的攻击面相对于一个公司而言是相当小的.此外大多数人信任大提供商和他们的信息也相信云提供商会有有效措施来保护人们.
我要从最基本的侦查工作开始.我比较喜欢Maltego.Meltego就像是checkusernames.com, knowem.com, pipl search这些网络搜索工具或者其他的在线搜索工具.还有经典的google+,Facebook和Linkedin.Meltego可以在你做这些事情的时候帮助你在Facebook伪造身份.一个好的伪身份可以迷惑你的目标.在你利用社会化搜索引擎提取信息的时候它可以帮到你的.
关于线上资源,密码重置问题往往是最容易搞定的.我见到有的邮箱账号的重置问题就是目标人的人人网个人信息.我敢打包票大多数人从来没意识到这其中的联系.因为可能他们是5年前设置的这些密码重置问题.当然了这些东西对于我当前的情况是不适用的.我的目标曾经是个信息安全专家而且而且知道我要来.
这场战斗是需要点时间的.首先我要检查一下他有没有在家庭网络连接什么东西.他可能在不知道的情况下已经连上了什么东西.很多应用和设备开启了UPnP服务,但是只有用户级别的防火墙而且没有明确声明,这就给了我可乘之机.有时候攻击成功所需要的仅仅是一个网络存储器或者是媒体服务器,一个后门即可. 要找到他家的IP地址,我需要一个skype解析器,比如resolveme.org. 真的非常好用.我扫描了他的IP和他邻近的几个IP,看看能不能发现什么设备.当然一无所获…他肯定知道我会这么做的.
下一步,无线协议.无线网络是一个非常不错的攻击媒介.我用两台设备都是i7CPU 瑞昱6900用来破解WPA散列.我用马尔科夫的单词预测生成器作为oclHashcat的散列种子.它在八小时内平均有百分之八十的破解率.
于是我立即着手把比尔的地址分配给几个无线网卡.当前情况下我实际上是知道比尔的地址的,我其实也可以从通过侦查或者是社会工程学得到.严格意义上这个不算是秘密.成功捕获到WPA握手我就开始运行破解器,一个星期之后仍然一无所获.这个方法对于大多数人是有效的,但是比尔是一个信息安全专家.他的WPA密码长度可能大于32个字符.
到了这时候你或许会奇怪为什么我不直接用一个未公开漏洞一举拿下他呢.答案很简单-我了解我的攻击目标.他深得软件安全的精髓:”扫描-打补丁-重复”.甚至都没装Java.但是如果我确实手里有一个浏览器的未公开漏洞.我应该会在最后一个星期用的来赢得这个比赛.
我去了一趟比尔家里之后我确实得到了一些有用的信息,我得到了他路由器的无线MAC地址:06:A1:51:E3:15:E3.因为我有了OUI(组织唯一标识符).我可以知道这是一个网件公司的路由器,他们家的路由器之前确实是有一些漏洞的,但是比尔的那个跑的是最新的固件.不过最新的固件也并不意味着所有的漏洞都打了补丁了.唯一的办法就是买一个一样的网件路由器回来我自己测试.
知道具体买哪种型号不太可能(至少远程不行).消费者手中不同型号的设备之间有很大差异,比如片上系统来自Broadcom还是Atheros.我知道比尔还是比较节俭的.所以我买的是入门级设备WNDR3400v3.
看了一下之前这个设备有的一些漏洞之后我写了两个测试模块,第一个模块里用的是 CSRF bug to POST to the UPnP interface 而且还开了一个远程登陆路由器的后门.不少设备都有这个漏洞,值得尝试.
如果你能通过CSRF欺骗UPnP请求,那么你就能把整个网络翻个底朝天.
还有更重要的一点,我想要做的是打开一个端口. 然后可以通过被攻击者的浏览器用Ajax请求配置子网里面每一个IP的NAT设置,迅速禁用防火墙.当然,UPnP NAT条目的数量是有限制的,但是大多数设备还是有足够的条目允许给大约一百个主机设置关键端口的.
为了引诱比尔掉入我的陷阱,我给他发送了一封嵌入链接的电子邮件. Cobalt Strike 有一个工具可以拷贝已有的电子邮件(包括邮件头部和正文),基本上是整套的工具.所有你需要做的只是改一下链接.那么什么邮件是所有人即使是一个信息安全专家都会点击的呢? Linkedin 邀请.
编者的话:有些读者可能会有所怀疑,为什比尔会栽在这上面呢.即使是粗略的检查一下发送者的主机名和链接就彻底暴露了.这场角逐的关键点在于托词.关于托词的背景知识请参考 这篇文章. 那天下午他刚刚见过本案例中的邀请发起人.而且这个会面是一个非正式的工作面试.我假定了这么一个情况:他想确认他已经得到这个工作.
在我发送这封邮件之前我需要跟踪我的攻击效果.默认情况下网件路由器的远程登录接口会打开但是服务是无应答的.你必须连接上这个端口并且发送特定的解锁密钥.这个确实已经有了公开密钥可用,但是我实在太喜欢Ruby了所以我还是自己写了另外一个 MSF模块,
比尔点击了这个链接,我一看到应答就立即启动了第二个模块并且远程登录了路由器,获得最高权限之后我就立即将路由器的DNS设置成了我自己控制的一个DNS服务器.
控制DNS服务器是非常有用的.DNS可以快速提供”可定制的”"中间人”.众多的中间人攻击工具里面我最喜欢的还是可藏匿行踪的 Evilgrade .Evilgrade已经多年无更新了但是依然很好用(一些修改是必须的了).一个星期之后比尔决定升级他的notepad++.他实际上获得的notepad++新版本是有一个后门的,一个Meterpreter shell就会自动安装.我马上给他发了一封邮件,里面是一些截图和击键记录.几分钟后他断开了他的电脑.
作为对我所取得成就的奖励:六瓶装的啤酒,真是爱死Ruby了.