欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

黑入Virgin Media Super Hub

来源: 作者: 时间:2019-02-24 21:51 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

Context的研究团队过去曾经研究过大量现成的家用路由器,发现其安全状况几乎普遍堪忧。然而,来自大型ISP(如BT,Sky和Virgin Media)的旗舰路由器却没有受到路由器各种漏洞的影响。是否这些路由器比其他路由器更加安全?我们决定利用一些公共研究时间,对部分设备一探究竟。
针对办公室的一次调查显示, Virgin Media用户占大多数,所以我们把目标锁定在Super Hub。研究期间(2016年10月),Super Hub(SH)的最新版本是SH2AC(VMDG490)。同时,鉴于SH2(VMDG485)的普及,我们也对SH2进行了测试。本博客详细介绍了漏洞研究的方法和发现,其中包括如何从局域网获得root权限。
漏洞研究方法
根据被评估产品类型的不同,Context的的产品安全评估通常遵循以下几个步骤:
确定可利用的攻击面,包括网络接口,输入设备和USB等外部端口。为了节省时间,我们采取通过管理界面进行命令行注入。
了解设备上运行的软件。这包括任何开源组件、固件(如果提供,尝试从供应商处获取),各种组件的版本号,并检查对应版本号现有的CVE漏洞。
全面分析硬件(如果需要提取固件的话),包括识别调试接口,了解存储设备(例如NAND闪存模块)的类型和规格。
漏洞研究和利用。利用产品开源部分或者固件部分尝试在设备上获得未经授权的代码执行。
我们很快发现,Super Hub已经对Web管理界面进行了安全测试——似乎很好的过滤了输入。这是标准家用路由器一个令人耳目一新的变化。
我们决定对运行的软件进行更详细的分析。由于Super Hub 2和2ac都由Netgear制造,故所有GPL组件的源码均可从该网站获得。
虽然源代码有助于了解Hub上运行的内容,但关于这些设备内部运作的具体信息我们仍然知之较少。因为固件更新过程完全自动化,并且明智地使用了安全通道。这意味着,为了进行分析,我们需要查看硬件才能检索出具有代表性的固件映像。
获取固件映像
使用3.3v USB转串口(实现计算机USB接口到通用串口之间的转换)适配器连接到大多数家用路由器的串行接口非常简单,在这里不再强调。只需要几个UART(通用异步收发传输器)接口:一个用于主要的SoC芯片(System-on-Chip)——基于ARM的Intel Puma V,另一个用于Atheros的无线芯片(AR9344)。
粗略来看,Atheros芯片相当稀疏,我们转向主要的SoC芯片。虽然可以看到U-Boot系统引导的输出,但“取消自动引导”功能已被禁用,这意味着我们无法与引导程序进行交互。
下面的截图显示了初始的u-Boot输出。

这种配置会阻止大多数人继续下去,很明智。但是我们喜欢打破砂锅问到底,所以我们思考如何不花费太多的时间和精力中断引导程序。图1中的输出表明U-Boot正在执行一个引导脚本,这正是我们需要分析的。
第一步是通过读取闪存获取引导程序的副本。棘手的是不能通过软件输入字符串,所以我们启动了热风枪,并拆除了Spansion(S25FL129P)NAND闪存芯片。
从闪存芯片中读取数据的方法有很多种,稍后会在另一篇博客中详细介绍。在本例中,由于作为首选的I2C /SPI(串行外设接口)读写器在另一个办公室,所以我们使用BeagleBone Black和Python来手动驱动芯片的SPI总线,如下图所示。

既然有了一个32MB的映像文件,我们可以看到U-Boot引导程序的所有内容。
Super Hub 2和2ac均使用U-Boot脚本来执行引导过程的第二阶段,初始化并运行Linux内核。通过对映像文件中的U-Boot脚本进行稍微改动,我们可以将内核输出重定向到UART连接,并强制引导程序退出,从而启用U-Boot控制台。一旦修改成功,闪存芯片会被重新焊接到板上。这对Super Hub 2可行。但对于Super Hub 2AC,引导程序在NAND和NOR两个芯片上运行,需要U-Boot控制台额外给第二阶段内存中的部分加载程序打补丁,包括在引导程序执行之前修复几个校验和。
最后,通过U-Boot控制台修改内核命令行参数,以通过串行电缆启用详细的内核引导消息。
识别漏洞
现在我们已经能够通过UART接口访问固件映像和内核调试器的输出,便可以进一步检查服务于Web管理界面的cgi-bin二进制文件。这些二进制文件用来实现用户通过Web界面提交的请求,例如添加防火墙规则或ping IP地址。而这些请求容易受到命令注入的攻击。在对这些Web管理界面进行了相当详细的审查之后,我们证实了之前的猜想:输入已被适当过滤。正当我们想要放弃这一审查方式时,我们看看了备份和还原机制。
备份/还原界面用于获取用户对Super Hub自定义配置设置的副本,例如防火墙或端口转发规则。以便用户稍后将此配置文件重新提交给路由器时恢复设置。在设备需要进行出厂设置时,省去了大量手动重新配置,非常有用。此功能有趣的一点在于它会直接上传攻击者控制的数据(一个恶意的配置文件)到Super Hub进行解析。
为了查看数据格式并构造恶意的配置文件,我们从Super Hub抽取了一个配置文件。导出后,我们发现文件被加密了,并且包含120KB的无结构二进制数据,熵接近于1。随着兴趣被激起,我们决定进一步调查。
负责加密和解密配置文件blob的二进制文件libunihan_utilities.so包含两个函数:des3_encrypt_backup和des3_decrypt_backup。该库根据OpenSSL进行编译,并在进行路由器的收/发时,使用DES_ede3_ofb64_encrypt函数执行blob的三重DES加解密。致命的是,用于此过程的密钥在二进制文件中是硬编码的,这意味着,通过使用密钥和算法的知识,我们能够编写一个小型C语言程序来解密从Super Hub抽取到的配置文件blob。
一旦我们拥有一个解密的配置文件blob,接下来尝试识别文件类型。使用xxd和head提取出该文件的前几个字节,显示备份文件似乎是一个开头附加了未知数据的TAR文件。利用强大的Binwalk工具进一步确认这是一个TAR文件,偏移量为0x4。

[1] [2] [3]  下一页

Context的研究团队过去曾经研究过大量现成的家用路由器,发现其安全状况几乎普遍堪忧。然而,来自大型ISP(如BT,Sky和Virgin Media)的旗舰路由器却没有受到路由器各种漏洞的影响。是否这些路由器比其他路由器更加安全?我们决定利用一些公共研究时间,对部分设备一探究竟。
针对办公室的一次调查显示, Virgin Media用户占大多数,所以我们把目标锁定在Super Hub。研究期间(2016年10月),Super Hub(SH)的最新版本是SH2AC(VMDG490)。同时,鉴于SH2(VMDG485)的普及,我们也对SH2进行了测试。本博客详细介绍了漏洞研究的方法和发现,其中包括如何从局域网获得root权限。
漏洞研究方法
根据被评估产品类型的不同,Context的的产品安全评估通常遵循以下几个步骤:
确定可利用的攻击面,包括网络接口,输入设备和USB等外部端口。为了节省时间,我们采取通过管理界面进行命令行注入。
了解设备上运行的软件。这包括任何开源组件、固件(如果提供,尝试从供应商处获取),各种组件的版本号,并检查对应版本号现有的CVE漏洞。
全面分析硬件(如果需要提取固件的话),包括识别调试接口,了解存储设备(例如NAND闪存模块)的类型和规格。

copyright 无奈人生

漏洞研究和利用。利用产品开源部分或者固件部分尝试在设备上获得未经授权的代码执行。
我们很快发现,Super Hub已经对Web管理界面进行了安全测试——似乎很好的过滤了输入。这是标准家用路由器一个令人耳目一新的变化。
我们决定对运行的软件进行更详细的分析。由于Super Hub 2和2ac都由Netgear制造,故所有GPL组件的源码均可从该网站获得。
虽然源代码有助于了解Hub上运行的内容,但关于这些设备内部运作的具体信息我们仍然知之较少。因为固件更新过程完全自动化,并且明智地使用了安全通道。这意味着,为了进行分析,我们需要查看硬件才能检索出具有代表性的固件映像。
获取固件映像
使用3.3v USB转串口(实现计算机USB接口到通用串口之间的转换)适配器连接到大多数家用路由器的串行接口非常简单,在这里不再强调。只需要几个UART(通用异步收发传输器)接口:一个用于主要的SoC芯片(System-on-Chip)——基于ARM的Intel Puma V,另一个用于Atheros的无线芯片(AR9344)。
粗略来看,Atheros芯片相当稀疏,我们转向主要的SoC芯片。虽然可以看到U-Boot系统引导的输出,但“取消自动引导”功能已被禁用,这意味着我们无法与引导程序进行交互。
本文来自无奈人生安全网

下面的截图显示了初始的u-Boot输出。

这种配置会阻止大多数人继续下去,很明智。但是我们喜欢打破砂锅问到底,所以我们思考如何不花费太多的时间和精力中断引导程序。图1中的输出表明U-Boot正在执行一个引导脚本,这正是我们需要分析的。
第一步是通过读取闪存获取引导程序的副本。棘手的是不能通过软件输入字符串,所以我们启动了热风枪,并拆除了Spansion(S25FL129P)NAND闪存芯片。
从闪存芯片中读取数据的方法有很多种,稍后会在另一篇博客中详细介绍。在本例中,由于作为首选的I2C /SPI(串行外设接口)读写器在另一个办公室,所以我们使用BeagleBone Black和Python来手动驱动芯片的SPI总线,如下图所示。

既然有了一个32MB的映像文件,我们可以看到U-Boot引导程序的所有内容。
Super Hub 2和2ac均使用U-Boot脚本来执行引导过程的第二阶段,初始化并运行Linux内核。通过对映像文件中的U-Boot脚本进行稍微改动,我们可以将内核输出重定向到UART连接,并强制引导程序退出,从而启用U-Boot控制台。一旦修改成功,闪存芯片会被重新焊接到板上。这对Super Hub 2可行。但对于Super Hub 2AC,引导程序在NAND和NOR两个芯片上运行,需要U-Boot控制台额外给第二阶段内存中的部分加载程序打补丁,包括在引导程序执行之前修复几个校验和。

内容来自无奈安全网


最后,通过U-Boot控制台修改内核命令行参数,以通过串行电缆启用详细的内核引导消息。
识别漏洞
现在我们已经能够通过UART接口访问固件映像和内核调试器的输出,便可以进一步检查服务于Web管理界面的cgi-bin二进制文件。这些二进制文件用来实现用户通过Web界面提交的请求,例如添加防火墙规则或ping IP地址。而这些请求容易受到命令注入的攻击。在对这些Web管理界面进行了相当详细的审查之后,我们证实了之前的猜想:输入已被适当过滤。正当我们想要放弃这一审查方式时,我们看看了备份和还原机制。
备份/还原界面用于获取用户对Super Hub自定义配置设置的副本,例如防火墙或端口转发规则。以便用户稍后将此配置文件重新提交给路由器时恢复设置。在设备需要进行出厂设置时,省去了大量手动重新配置,非常有用。此功能有趣的一点在于它会直接上传攻击者控制的数据(一个恶意的配置文件)到Super Hub进行解析。
为了查看数据格式并构造恶意的配置文件,我们从Super Hub抽取了一个配置文件。导出后,我们发现文件被加密了,并且包含120KB的无结构二进制数据,熵接近于1。随着兴趣被激起,我们决定进一步调查。
负责加密和解密配置文件blob的二进制文件libunihan_utilities.so包含两个函数:des3_encrypt_backup和des3_decrypt_backup。该库根据OpenSSL进行编译,并在进行路由器的收/发时,使用DES_ede3_ofb64_encrypt函数执行blob的三重DES加解密。致命的是,用于此过程的密钥在二进制文件中是硬编码的,这意味着,通过使用密钥和算法的知识,我们能够编写一个小型C语言程序来解密从Super Hub抽取到的配置文件blob。

www.wnhack.com


一旦我们拥有一个解密的配置文件blob,接下来尝试识别文件类型。使用xxd和head提取出该文件的前几个字节,显示备份文件似乎是一个开头附加了未知数据的TAR文件。利用强大的Binwalk工具进一步确认这是一个TAR文件,偏移量为0x4。
无奈人生安全网

[1] [2] [3]  下一页 无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。