黑客如何入侵你的路由器?

jopen 7年前

  英文原文:How I Hacked Your Router

  一段时间以前一位从事信息安全的朋友请我做一件奇怪的事情。让我黑掉他的路由器。我们可以叫他 bill,出于保护隐私的原因,其它的名字和地点都会有所改变。但是供应商的名字会被保留。

  入侵一个大公司很容易(也许吧)。他们的信息资源可能分布在全球各地,尽管他们会投资各种各样的防护技术,但这也仅仅是让我们很难追踪他们所有的东西而已。他们得日复一日的为所有资产严格地执行扫描-修补-重启流程,不容有失。

  但是入侵个人则很困难。的确,黑帽技术在非对称的信息安全性方面有它的优势。有时只需要一个 bug(就可以成功黑掉大公司)。但是与大公司相比,个体目标暴露的攻击区域是非常的小的。此外,很多人都相信大型供应商提供的信息,以及云供应商通常会 做保护人们免受攻击这样高尚的事情。

  我从最基本的侦察开始。我喜欢使用 Maltego,再附加上像 checkusernames.com、knowem.com、piple search 这样的网站,以及其他工具来计算在线状态。同样还有一些比较经典的网站如 Google+,非死book 以及 Linkedin。我们可以使用 非死book 上的一些假资料来做这样的工作。你需要为你的目标准备好的诱饵信息,这样可以通过社交引擎提取额外的信息。

  而在线状态方面,密码重置问题是非常好的“低垂的果实(唾手可得的东西)”。我见过有些 web 邮箱账户询问的信息是可以直接从目标的 非死book 资料里面找到的。我确信大多数人甚至都不会意识到这一点,他们可能在五年前写的这些重置问题(而现在早忘了)。然而现在这些东西在这里都不管用了。要知道 我的目标是个搞信息安全的书呆子,而他正期待着我。

  是时候跟他决斗了。首先,我检查了他是否有在他的家庭网络连接上托管任何东西。他可能以前做过但没有注意。很多的应用和设备使用 UPnP 在消费级的防火墙上面打孔。有时候我们只需要一个 NAS 或媒体服务器来开启一个后门即可。为了找到他的家庭 IP 地址,我使用了一个 Skype 解析器,比如 resolvme.org。它非常棒。我扫描了他的 ip 地址(以及一些邻居的 ip)来看是否可以找到一些服务。虽然没有骰子…但我确信他认为我会这样做。

  好吧,接下来,821.11。无线网络是一个非常棒的攻击媒介。我有两块 Radeon 6990′s的显卡在 i7 平台上,通过 WPA 哈希值咬合在一起。我使用一个马尔科夫预测字表生成器来为 oclHashcat 提供预测值。它在 8 小时内能达到 80% 的平均破解率。

  所以我从 bill 的地址着手(用各种 Alfa wifi 卡)。实际上我也是知道 Bill 的地址的,可能我之前已经通过侦察或社交引擎得到了这些信息。这可不是什么秘密。在我成功的捕捉到一个 WPA 握手之后,我运行了一周的破解器,还是不行。也许对大多数人来说这是有用的,但 Bill 是个从事信息安全的家伙。他的 WPA 的 key 很可能大于 32 个字符长度。

  此时你可能会想为什么我没有利用 java 0-day 漏洞对他鱼叉式钓鱼然后享受我的胜利啤酒。答案很简单——我知道我的目标。他精于扫描-修复-重复的咒语。我要手上真有一个浏览器0-day 漏洞,上周就赢了。

  在我参观了 Bill 的地盘后,带了一点有用的信息离开了。他的无线路由器的 MAC 地址(BSSID):06:A1:51:E3:15:E3。由于我有 OUI (MAC 的前 3 个字节),我知道这是 Netgear 的路由器。我当然也知道 Netgear 的路由器有一些问题,但 Bill 运行的是最新的固件。可这并不意味着所有的漏洞都在这个固件中被修复了。想要确定唯一的办法就是自己买一个 Netgear 路由器并亲自测试它。

  要获取准确的型号也许不可能(反正从远程是不行)。消费者设备可能在不同型号间有许多变体,因为参考平台来自于 Soc 供应商,比如 Broadcom 和 Atheros。我知道 Bill 有点简朴,所以我选了 WNDR3400v3——入门级的产品。

  在了解了一些该设备的一些弱点后,我做了两个 Metasploit 模块。在第一个模块,我用一个 CSRF 漏洞发送 post 请求到 UPnP 接口并打了个孔来访问路由器自身的远程连接服务。这个问题在很多其他设备上都存在,而且非常值得重视。

  如果你能通过 CSRF 欺骗 UPnP 请求,你可以将整个网络闹的天翻地覆。

  这是非常关键的一点。我开启了一个单独的端口。你可以从受害者的浏览器上使用 Ajax 请求为每一个子网中的 IP 配置 NAT 入口,从而有效的禁用防火墙。当然对于 UPnP 的 NAT 入口数量有很多硬限制,但是大多数设备都会允许有足够的入口来为 100 台左右的主机映射一些关键端口。

  为了引诱 Bill 走到我设的陷阱上,我给他发送了一封内置链接的邮件。Cobalt Strike 有个工具可以拷贝一封已存在的邮件(标题和所有),所以就很简单了。我需要做的仅仅是修改这个链接。那么什么邮件是每个人都会点的呢?哪怕是个从事信息安全的家伙?——邀请。

  编辑:有些读者可能会怀疑为什么 Bill 会喜欢这个。哪怕简单的检查下发件人域或是链接都会发现有问题。一个好的借口是成功的关键所在。至于借口的背景,我们看这篇文章。在这种情况下,邀请似乎从那个下午他与某个人的会议就发出了。好吧,是还有很多非正式的工作面谈,我想这是个确认偏差——他愿意相信自己得到了这个工作。

  在我发送这封邮件之前,我需要一个跟踪负载。默认情况下 telnet 端口在 Netgear 路由器上是开启的,但是服务没有响应。你必须连接到端口并发送一个特殊的解锁码。事实上存在对这个漏洞的公开利用,但我还是写了另一个 MSF 模块,因为我喜欢我的 Ruby(以及 Metasploit)。

  Bill 点击了这个链接。在我看到回调时,我触发了第二个模块然后通过 telnet 登陆到了路由器。在我获得路由器的 root 访问权限后,我立即更改了 DNS 设置让其指向一个由我控制的 DNS 服务器。

  控制 DNS 是一件非常过瘾的事情,它有效的为你提供所需要的中间人攻击。有很多的 MITM 攻击载体,但我还是喜欢 Evilgrade—— 因为其隐秘性。Evilgrade 已经问世很多年了,但仍然很棒(有一些必要的修改)。在 Bill 决定升级 notepad++ 到新版本之前我等了大概一周的时间。当他做时,他送了一个有后门的版本,这也在他的电脑上给我提供了一个 Meterpreter shell。我立即发了封带有截图和击键记录的邮件,几分钟后他拔去了电脑的插头。

  最后,我得到了 6 瓶装的 Ruby 啤酒的奖励。我爱我的 Ruby!

  翻译: 伯乐在线 - deathmonkey

  译文链接: http://blog.jobbole.com/65624/

来自: 伯乐在线