作者:360漏洞研究院
原文链接:https://vul.360.net/archives/413

0x01 简介

lot设备漏洞挖掘,其实核心就是拿到运行在硬件设备内的“软件”,然后就变成了常规的软件漏洞挖掘。剩下的就是常规的漏洞挖掘步骤就跟软件漏洞挖掘步骤一致,进行逆向和审计即可。本文主要介绍机架式、虚拟镜像形式的防火墙堡垒机等安全设备的漏洞挖掘步骤及思路。文后也将展示部分相关设备的漏洞挖掘成果。

0x02 固件存储位置及提取方法

通常路由器或摄像头等小型IOT设备的固件一般存放于各种小型flash芯片中,而机架式硬件类型防火墙、VPN类设备区别于其他固件存放的位置在于其多用SSD固态硬盘、SATA2接口的机械硬盘、CF卡、nandflash中,如下图。

这种类型的固件存储方式,通常需要购买相应的读取设备来完成固件提取,例如多功能读卡器、硬盘底座以及iot小型设备研究中常见flash的编程器等,如下图。

无论是物理设备或者一般虚拟机镜像类型设备的固件一般都存放于实体或者物理磁盘中。读取的时候,可以直接使用linux系统直接将虚拟磁盘或者硬件磁盘挂载读取,如下图。

0x03 固件加密情况

在将上一步获取的虚拟或硬件磁盘、CF卡直接挂载到linux系统上的时,一般情况下都会直接弹出来磁盘相关文件系统分区内容,如下图,还有时候会遇到加密情况例如弹出需要输入密码才能查阅分区文件系统的固件。对于这种情况,可以使用网上给出的一种方法来进行解密。

这里提到一篇安全客上的文章 (https://www.anquanke.com/post/id/266078) 。此文章是虽然研究目标为Sonicwall虚拟镜像设备,但对于大多数此类型的磁盘加密的情况都是通用的,核心思路都在于使用QEMU去模拟执行,然后下断点执行操作。

0x04 Shell获取

进行设备分析之前,像通常的iot设备漏洞挖掘一样,获取到shell将有助于设备的分析,因为在很多情况下,一些重要文件都是在设备运行的时候才会被释放到某个文件夹下。这些文件通常对逆向分析有很大的帮助。而且也可以在可能发生溢出的位置进行调试。

这里就可以使用大多数iot设备漏洞挖掘获取shell的一般思路。

  1. 盲测找到命令注入漏洞获取shell。
  2. 修改解包后的固件然后重打包植入shell。
  3. 连接调试接口获取shell。
  4. 将设备磁盘挂载到本地机器上修改固件启动脚本获取shell。
  5. 网上查找已存在的公开的漏洞获取shell。
  6. 其他一些 … 的方法。

0x05固件拖拽

在不对设备磁盘进行操作的情况下,如果想从拿到的shell中获取设备固件,思路想法和iot常规小型设备挖掘常用到的固件打包方式一样。思路有以下几种:

  1. 使用内置tar或者zip 等压缩命令将想要拖拽的文件打包到某个http资源目录下,例如js、css等静态文件目录下,然后使用设备自带的http接口获取文件。
  2. 如果内部有java、python 等命令 可以创建一个临时http服务下载。
  3. 可使用内置telnet、nc 等命令将相关文件直接传输到本地。

0x06 攻击面分析

对于这类型大型的安全类设备的漏洞挖掘,最主要的研究方向还是在于未授权的可利用性的漏洞挖掘,有时候是直接在未授权接口就可以挖掘到漏洞达到RCE的效果,有时是需要结合一个绕过认证的漏洞加授权后RCE的漏洞来达到利用的效果。

总而言之,最重要的分析面其实还是未授权的端口,所以这里将所有的未授权接口全部看作攻击面。所以首先就需要去分析整个设备默认状态下所有的可进行未授权交互的所有逻辑,至于如何查看设备所有未授权端口及服务,基本思路和常规iot设备没什么差别,例如利用netstat、nmap命令等等,此处不再赘述。

0x07 漏洞挖掘

对于进行漏洞挖掘,其实并没有什么统一的套路,就是常规的软件漏洞挖掘流程。

对于web模块,绝大多数的大型设备内嵌的都是PHP和JAVA写的web服务,所以仅仅需要做相关代码的审计即可。少数情况会遇到纯二进制类型的web服务,逆向分析即可。

对于其他服务,大多数都是二进制类型的程序在监听,所以进行常动静态规逆向即可。

0x08 漏洞展示

下面展示部分利用上述步骤挖掘到的国内外部分设备的高危漏洞(已脱敏)。漏洞点不详细标明,读者可自行发现。

示例一(认证绕过):

示例二(堆栈溢出):

示例三(SQL执行):

示例四(堆栈溢出):


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1918/