热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分析BelkinSURF路由器中的多个漏洞

 0x00 前言2019年6月,我们发布了一篇文章,介绍如何在Belkin SURF N300路由器上设置硬件调试环境。在本文中,我们将分析由Josep Pi Rodriguez以及Pedro Gui

 

0x00 前言

2019年6月,我们发布了一篇文章,介绍如何在Belkin SURF N300路由器上设置硬件调试环境。在本文中,我们将分析由Josep Pi Rodriguez以及Pedro Guillén Núñez在该平台上发现的十多个漏洞。虽然Belkin已确认我们的报告,但表示该产品已经停产,不再提供支持服务。这些漏洞会影响Belkin SuperTask! RTOS,特别是其中的UPnP功能。这些漏洞包括多个基于栈的缓冲区溢出问题,涉及AddPortMappingGetSpecificPortMappingEntryDeletePortMapping SOAP接口以及upgrade.exednsproxydhcpd中的缓冲区溢出问题。

研究人员最开始通过分析Belkin N150(Model F9K1001)以及Belkin N300(Model F9K1002)固件发现这些问题,我们也在Belkin N300(Model F7D2301v1)路由器上验证了这些漏洞报告。

 

0x01 UPnP问题

UPnP(Universal Plug and Play,通用即插即用)是为了简化一般用户的网络配置过程而提出的一种协议,方便各组件“正常工作”,该协议允许本地客户端配置路由器。然而,这个过程的前提是假设所有本地客户端都是可信的单元,但恶意软件可以轻松利用该功能,在启用UPnP的路由器上打洞穿透防火墙。因此UPnP通常被认为是不安全协议,包括FBI在内的各单位都建议用户禁用并不再使用该功能。

研究人员发现路由器UPnP功能的WANPPPConnection:1Service中存在多个栈缓冲区溢出漏洞。当路由器处理AddPortMapping SOAP请求时,会调用strcpy()将攻击者可控的NewRemoteHost参数拷贝至大小固定为0x20字节的栈缓冲区中,同时没有去验证参数的大小。

图1. 利用恶意UPnP请求触发漏洞

路由器在处理图1中的请求时,会使用strcpy()将过长的NewRemoteHost参数盲目地拷贝到空间不足的栈缓冲区中。因此,strcpy()会超出栈缓冲区执行越界写操作,使用攻击者控制的数据覆盖函数返回地址。存在漏洞的函数返回时,会尝试返回到被覆盖的返回地址(0x41414141),最终串行终端会记录崩溃信息,路由器会重启。

图2. 串行终端崩溃日志

在下图中,我们可以看到存在漏洞的strcpy()函数调用。在0x80178C90地址处,大小固定的栈缓冲区指针存放在$a0寄存器中。在0x80178C98处,攻击者控制的缓冲区指针存放在$a1寄存器中。即便该指令位于jal strcpy指令之后,由于我们目标采用的是MIPS CPU架构,因此也会在该分支后执行这条延迟指令。

图3. 存在漏洞的strcpy()函数调用

这个UPnP服务处理逻辑中存在13个bug,每个bug都存在相似的原因。实际上,在上图中我们可以看到0x80178CCC处由存在漏洞的另一个strcpy()调用。我们还可以在其他if-else分支块中找到更多的strcpy()调用。在图4中,我们使用红色高亮标出了存在漏洞的每个strcpy()调用:

图4. 高亮标记函数中存在漏洞的strcpy()调用

这里我们没有看到目标设备部署了能够缓解栈缓冲区溢出漏洞的措施,例如ASLR以及Stack Canary。因此这些漏洞利用起来非常直接,攻击者只需要简单使用shellcode地址覆盖程序计数器地址就能执行任意代码。

 

0x02 后门账户

除了栈缓冲区漏洞之外,研究人员还发现固件中内置了后门账户凭据。

图5. 固件中硬编码的后门账户

固件中总共有3个后门账户:engineerwlan_config以及wlan_power。这些账户并不能通过Web接口访问,终端用户也没有办法修改或移除这些账户。当攻击者发送如下请求时,路由器会将攻击者IP标记为“logged in”(已登录)。随后攻击者可以通过已授权的IP地址访问高权限页面。

图6. 使用内置的wlan_config凭据发送授权HTTP请求

一旦绕过授权认证,攻击者就可以利用另一个已授权漏洞,即高权限upgrade.exe CGI脚本中的缓冲区溢出漏洞。这个缓冲区溢出漏洞的根本原因在于路由器会使用strcpy()将攻击者可控的multipart HTTP POST请求头部中的boundary字段值拷贝到一个全局变量中。

图7. 带有过长boundary头部值的恶意HTTP POST请求

图8. 存在漏洞的strcpy()调用周围的反汇编代码

在上图中,攻击者可控的数据存放在$a1中,存在漏洞的全局缓冲区位于0x802965CA地址处。当攻击者发送恶意请求时,串行终端中会记录如下崩溃信息,然后路由器会重启。

图9. 串行终端中的崩溃日志

 

0x03 精心构造的DNS报文

这个缓冲区溢出漏洞会影响路由器的DNS代理功能。路由器在处理精心构造的某个DNS报文时,会使用memcpy()将攻击者控制的数据拷贝到大小为80字节的一个栈缓冲区。由于目的缓冲区大小与传递给memcpy()的大小参数不匹配,因此会出现栈缓冲区溢出问题。

图10. 恶意DNS请求

当如上DNS消息发送给存在漏洞的路由器时,串行终端中就会看到如下异常日志,目标设备也会重启:

图11. 串行终端崩溃日志

这里我们可以看到攻击者控制的地址(0x42424242)会成功覆盖程序计数器,存在漏洞的memcpy()调用如下图所示:

图12. 存在漏洞的memcpy()调用附近的反汇编代码

0x80119D48处,代码会执行两个指针的减法操作,计算传递给memcpy()的字节数参数大小。计算出的结果值会大于目标缓冲区大小,因此memcpy()会盲目地在目标缓冲区末尾处执行拷贝操作,导致缓冲区溢出。

 

0x04 总结

这个路由器固件的多个不同组件中存在大量漏洞,而这些漏洞的根本成因都非常相似,这表明厂商在产品开发过程中缺乏安全的软件研发生命周期实践,这很有可能表明固件中可能存在更多漏洞,实际上这一点我们猜测地非常准确。在这些漏洞的披露过程中,研究人员又提交了关于该产品的其他问题。然而,我们发现厂商已经不再为该产品提供补丁支持,因此我们拒绝了这些漏洞提交报告。即便如此,探索这些漏洞对研究人员来说也是非常有趣的一个过程,可以以此类推研究嵌入式系统中的其他问题。

我们建议终端用户升级存在漏洞的路由器,使用目前仍在厂商支持周期内的设备。


推荐阅读
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • Web3隐私协议Manta Network与区块链互操作性平台Axelar达成战略合作,共同推进跨链资产的隐私保护。 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文探讨了如何通过优化SOAP服务调用和多线程处理来减少生成的事件数量,并提高加载大量实体的效率。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 在使用Python 3.x的argparse模块时,如果输入参数中包含&符号,会遇到解析错误。本文介绍了如何解决这一问题,确保输入参数能够正确解析。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • Mantis Bug Tracker:高效缺陷管理与跟踪系统
    缺陷管理平台Mantis,也做MantisBT,全称MantisBugTracker。Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺 ... [详细]
  • 《精通ArcGIS Server 应用与开发》——2.4 ArcGIS Server的安装与配置
    本节书摘来自异步社区《精通ArcGISServer应用与开发》一书中的第2章,第2.4节,作者:何正国,杜娟,毛海亚更多章节内容可以访问云栖社区“异步社 ... [详细]
  • 之前学习过get信息的方法,就是通过接口得到数据,然后对数据进行处理json处理和xml处理最近学习了post,所以小小的总结一下先说一下使用系统的NSURLConnectio ... [详细]
author-avatar
谢超4444
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有