洞见RSA2022 | 对IP视频监控系统进行固件分析时面临的挑战

概述

本篇议题由来自 Nozomi Networks 公司的研究员提供,Nozomi Networks是一家工业控制操作系统服务提供商,为工业控制系统提供网络安全和操作可见性解决方案。

议题围绕IP视频监控系统展开,分析比较的目标设备分别来自Ananke、大华和Axis,通过对比以上供应商三款产品的分析过程,提出的观点是:尽管供应商对设备固件采取加密和限制访问等措施能产生一种明显的安全感,但从长远来看,透明的设计对评估产品的安全状况以及采取及时的事件响应才有更多的好处。

接下来,将首先介绍研究背景,然后来看三款产品的分析过程对比,最后再依次展示详细分析过程。

研究背景

随着智慧安防技术的不断发展,目前主流视频监控系统均采用基于IP网络的高清摄像机进行网络组建,IP摄像机通过内置嵌入式操作系统满足智慧安防在各领域的应用场景及业务需求,各种IP摄像机还会通过互联网与手机及业务系统进行对接和数据交互,以方便远程查看和管理。

据统计,2020年全球视频监控市场总值超过 450亿美元,预计到 2025年将增长至 750亿美元。包括交通、城市监控、公共场所和公用事业在内的基础设施部门预计在此期间将实现最高增长。

与此同时,IP 视频监控系统和很多传统网络设备一样,也面临着诸多网络安全风险。它们不仅仅是物联网僵尸网络青睐的“猎物”,而且也是高级攻击者的战略目标。那么在这种情况下,资产所有者能否及时评估IP视频监控系统的安全态势和完整性就显得格外重要。

CISA和NSA联合发布的《选择和加固VPN的安全指南》中也强调了产品易被评估、检查的重要性。“部分VPN厂商对设备进行了加密,导致发生事故时无法及时响应。那些不允许产品所有者对设备进行全面检查的产品会引入额外的风险,并可能导致制造商成为产品支持的瓶颈。而且事件响应过程的延迟将会让攻击者有足够的时间来掩盖他们的踪迹”。

那么决定系统能否被轻松快速评估的主要因素是什么呢?答案有以下三条:

  1. 固件的可得性,即获得固件的难易程度;
  2. 固件的可分析性,即固件是否容易被分析,固件是否做了加密或者混淆的处理?
  3. 设备的可访问性,设备是否允许被检查?

另外,还有一点需要明确,即厂商对固件加密并不等于保证了固件在后期一定不会被篡改,因为接下来的分析成果展示中就将介绍如何修改被加密了的固件。既然加密也并不总能有效地保护固件,那该如何保护呢?作者提出,数字签名能为保证软件(包括设备固件、二进制文件等)完整性提供更有效的帮助。

Part 1三款设备分析过程对比

1.1 设备简介

研究的三款设备分别是:Ananke N48PBB、大华 DHI-ASI7213X-T1还有Axis Companion Recorder。

Annke N48PBB是一款 NVR,能够显示和记录多达 8个以太网供电 (PoE) IP 安全摄像机的镜头。

大华 DHI-ASI7213X-T1是一款人脸门禁一体机。

安讯士(Axis Communications) Recorder是一款紧凑型 NVR,能够支持多达 8个直接连接到它的 PoE IP 摄像机。

Tips:

NVR 的全称是Network Video Recorders,能够连接到本地以太网并捕获来自同一网络中所有明确配置的 IP 摄像机的传入视频。在设置 IP 摄像机进行监控时,NVR 用作监控和记录所有视频的专用设备。它还提供对整个 IP 摄像机系统的集中管理。通过访问 NVR 的网络面板,操作员可以观看来自所有连接上的摄像头的实时流,并播放存储在设备上的所有视频内容。此外,管理员可以通过对所有连接的摄像机执行维护操作或为任何摄像机设置全局警报来检测特定事件来远程管理摄像机系统。

1.2 Ananke N48PBB

利用之前提到的三个维度对分析过程进行衡量:

固件可得性:

  • 在网上未找到公开提供的固件;
  • 联系官方支持获取,未成功;
  • 最终从硬件中 dump 出固件;
固件的可分析性:

  • 在网上搜索到一个加/解密工具,并且是可用的;

设备的可访问性:

  • SSH 是启用的,但由于 shell 保护而无法直接登录;
  • 修改固件,重新打包并刷回硬件,在完整性检查的时候失败;
  • 对执行完整性检查的代码进行逆向工程;
  • 将更新了完整性检查的固件,重新打包并刷回硬件上去;

事件记录:

  • 第一次附加调试器执行时,由于存在看门狗而失败;
  • 通过逆向寻找去除看门狗的方法;
  • 拆除看门狗,测试环境准备就绪;
1.3 大华 DHI-ASI7213X-T1

固件的可得性:

  • 有公开提供的固件;
固件的可分析性:

  • 固件是加密的,在网上搜索,没有找到可以直接使用的工具;
  • 对内核解密部分进行逆向工程;
  • 开发解密工具,在内核上成功,但在其他分区上失败;
  • 对分区解密部分进行逆向工程;
  • 更新工具,解密所有其他分区;

设备的可访问性:

  • 启用SSH,但由于受保护而无法使用;
  • 修改固件,重新打包并刷回硬件,在完整性检查的时候失败;
  • 对执行完整性检查的代码进行逆向工程;
  • 将更新了完整性检查的固件,重新打包并刷回硬件上去;

事件记录

  • 第一次附加调试器执行时,由于存在看门狗而失败;
  • 通过逆向寻找去除看门狗的方法;
  • 拆除看门狗,测试环境准备就绪;
1.4 Axis Companion Recorder

固件的可用性:

  • 官网上有公开提供固件;

固件的可分析性:

  • 固件可以用通用工具直接解包;

设备可访问性:

  • SSH拥有完整访问权限;

事件分析:

  • 第一次调试器执行,环境搭建成功;
1.5 小结

对比以上三款设备的分析过程,可以看出分析所花费的时间和精力有明显的区别。应对厂商为固件设置的保护措施以及访问限制往往会花费比预期更长的时间,这会给大家带来一种安全感,认为同等情况下攻击者为了创建攻击载荷,也需要投入大量的精力对混淆步骤进行逆向工程,需要绞尽脑汁才有可能获得对设备的完整访问权限。可是必须强调的一点是,这对产品中是否存在漏洞没有任何影响,而且这样做的一个副作用是,安全研究人员和资产所有者需要投入相同的精力来发现漏洞并负责任地向供应商披露漏洞,这将极有可能导致一些组织决定放弃审查并将安全状态未知的产品继续保留在他们的网络中。

Part 2 详细分析及成果

2.1 Ananke N48PBB 漏洞

N48PBB 在其网络服务中开放了一个 Web 应用程序,通过该应用程序可以观看摄像头直播、通过回放功能进行搜索、管理用户等。

Web 应用程序中有三种账户类型:

  • 管理员:此角色的账户拥有完整的系统权限;
  • 操作员:该角色具有操作控制客户端和Web客户端上应用程序的所有权限。可以在创建用户时设置自定义权限。
  • 用户:此角色具有有限的应用程序操作权限(默认情况下可实时查看、观看回放)。同样,可以在用户创建时设置自定义权限。
N48PBB 的播放功能允许所有已启用的用户(默认为所有用户)搜索存储在 NVR 上的摄像片段,客户端只需要发送以下 HTTP 请求即可:

在对 HTTP 请求的所有可能字段进行模糊测试时,发现发送任意字符结尾的开始时间,例如“AAAAAAAAAA…”,将立即导致设备关闭连接并重新启动。后来,测试证明这种情况可以系统性地重现,也就是说这里存在一个拒绝服务 (DoS) 漏洞。考虑到该漏洞或许可能导致更严重的影响,于是有了下面进一步的分析。

Annke Web 界面中允许启用设备上的SSH服务,通过该SSH服务可以执行有限数量的命令。为了获得完全不受限制的 SSH 访问,有必要直接在硬件级别上进行干预来调试系统。

最终通过连接到设备的板载存储器提取出了固件,并对提取出的固件做了如下修改:禁用所有 SSH 限制、添加了几个调试工具(例如gdbserver)。然后又重新将固件写入设备的存储器中。

下图是N48PBB的主板。

在找到与设备进行 Web 交互所用到的二进制文件后,将 gdbserver 连接到 NVR,并使用 IDA 对程序执行调试,最终定位到了漏洞代码位置。问题是由易受攻击的“sscanf”函数导致的基于栈的缓冲区溢出。下图中以红色突出显示的是格式化字符串,以橙色突出显示的是缓冲区地址。

此外,函数的返回地址(上图中以蓝色框标识)几乎位于缓冲区之后,并且没有Stack Canaries保护(用于检测栈溢出攻击的机制)或任何其他检查。

查看“ps”的输出最终确认存在漏洞的二进制文件在设备上是以 root 权限运行的。这意味着最初归类为 DoS 的内存损坏漏洞实际上是具有 root 权限的远程代码执行 (RCE) 。如果被利用,此漏洞可能会导致设备完全被控制。

由于默认情况下设备的所有用户都可以访问搜索功能,因此恶意操作员或用户可以直接利用该漏洞(在未修补的 NVR 上)来提升他们在系统上的权限。

此外,由于在该功能中没有发现反 CSRF(跨站点请求伪造)的缓解措施,因此外部攻击者可以在“drive-by download”攻击中间接利用该漏洞。管理员、操作员或用户浏览一个专门制作的网页,同时登录到设备的网络界面,就有可能导致设备本身执行外部恶意代码。

2.2 大华 DHI-ASI7213X-T1 固件解密

许多供应商分发的固件镜像是通过一些标准构建过程生成的,它们通常不会记录选择的文件系统或使用的压缩算法等细节。但是,具有一定经验的研究人员可以快速确定这些技术细节并继续进行评估。

DHI-ASI7213X-T1 的Web 管理界面可用于配置访问控制。可以启用 SSH 访问,但是发现在 Web 界面设置的凭证实际上并不能用于远程 shell,估计SSH 访问仅适用于大华官方支持。

DHI-ASI7213X-T1的固件可以从官网下载,但是当使用 Binwalk 解压二进制文件时,会发现解包过程并没有按预期进行。用Binwalk成功提取到了一系列 uImage 文件,但其中大多数二进制文件的内容都使用专有方法进行了加密。特别是内核和包含最终可执行文件的分区镜像无法访问。

从之前解压缩的文件中,发现存储在 dhboot.bin.img 中的引导加载程序未加密。然后,对这个二进制文件的一部分进行逆向工程后,找到了负责解密内核的函数。

解密算法采用的是 AES-ECB,其密钥是硬编码密钥的 SHA256。由于解密函数在分组密码的基础上包含了一些自定义,在不想浪费更多时间重新实现整个方案的情况下,最终通过基于仿真的方法,让原始代码执行解密。

由于bootloader希望映射到的地址与用户空间内存布局兼容,因此编写了一个加载程序,这个加载程序将bootloader二进制文件作为输入并将其映射到正确的地址上。

然后,为要模拟的解密程序定义了函数指针,并在映射的可执行代码中设置了相应的地址。加载程序准备好后,运行它成功解密了内核,如下图所示。

然后对包含设备分区的加密文件尝试了相同的过程,但该过程不成功。由于内核是在bootloader之后立即执行的,因此还需要通过对新解密的代码进行逆向工程来继续分析过程。

该设备的内核是带有一些定制的 Linux-4.9.37。它的规模庞大且复杂,这就不得不求助于一些启发式方法来找到负责解密剩余镜像的函数。

这里将 AES 使用的常数作为起点,因为一旦可以清楚地定义 AES 实现的边界,就可以遍历所有引用分组密码算法的函数。

最后,找到了和之前在bootloader中相同的解密程序。不过需要注意的是,密钥导出函数不在解密代码附近。通过进一步分析,确定了密钥导出函数,并发现分区的加密方案与内核使用的加密方案相同。不同的只是一个简单的位置参数。

这一发现意味着接下来可以简单地调整现有的解密工具并使用它来解密剩余的固件,最终在解密后的squashfs镜像上运行Binwalk解包成功。有了对可执行二进制文件的完全访问权,之后就可以进行常规分析了。

2.3 Axis Companion Recorder 漏洞

分析的这款Axis Companion Recorder允许通过 SSH 服务进行不受限制的远程访问,SSH服务可以直接通过 Web 界面启用。

其次,可以从 Axis 网站免费下载固件镜像并进行分析。binwalk工具可用于解包镜像。在下图中,被提取出来的固件版本是 9.80.2.2,并可看到 “/usr/bin”目录下的内容。

Axis提供了一个极好的分析基础,当安全研究人员或资产所有者想要进行审查或调查任何异常行为时,所有必要的访问权限和条件都已具备。

通过分析,发现Axis Companion Recorder 中存在以下漏洞:

  • 基于堆的缓冲区溢出(CVE-2021-31986、CVSSv3 6.7)
  • 网络测试功能中的收件人验证不当(CVE-2021-31987、CVSSv3 4.1)
  • 邮件测试功能中的 SMTP 头注入(CVE-2021-31988,CVSSv3 5.5)
2.3.1 CVE-2021-31986:基于堆的缓冲区溢出

第一个漏洞完全是通过静态分析发现的,用其他方法很难发现。问题出现在“libhttp_smtp_notify.so”库的read_callback函数中(该函数通过 libcurl“CURLOPT_READFUNCTION”选项设置),read_callback函数中未能对拷贝到 libcurl 目标缓冲区中的数据长度做有效验证,未能保证拷贝过去的数据长度不超过“size”*“nitems”个字节。

在复制的字节中,read_callback将libcurl目标缓冲区中的“to”、“from”、“subject”和“body”这些http请求参数复制到CGI端点“/axis-cgi/smtptest.cgi”。这个请求通常是一个 GET 请求,因此参数通过 URL 中的查询字符串传递,并限制为少于 10,000 个字符,太少的话无法触发漏洞。但是,借助固件辅助的手动分析证明端点也可接受 POST 请求,而且不受限制。

通过诱使用户在登录 Companion Recorder Web 应用程序时访问特制网页,远程攻击者能够在“smtptest.cgi”上下文中触发设备上的内存损坏漏洞并可能执行任意代码。

2.3.2 CVE-2021-31987:网络测试功能中的收件人验证不当

第二个漏洞再次证实了透明安全设计的重要性。HTTP、电子邮件和 TCP 收件人的测试功能存在blocklist-based安全检查,用以阻止与暴露于 localhost 的网络服务交互,但是可以被绕过。

通过静态分析固件可以发现blocklist,“httptest.cgi”中的漏洞代码如下:

此外,向设备上传 “tcpdump”工具的可能性也证实了向本地主机暴露的服务发送请求的可行性。

2.3.3 CVE-2021-31988:电子邮件测试功能中的 SMTP 标头注入

第三个漏洞是SMTP 头注入,位于 SMTP 测试功能中。

静态查看固件可以精确识别易受攻击的参数并验证是否缺少输入验证功能,如“smtptest.cgi”中易受攻击的代码:

Part 3 绿盟科技解读

演讲者分享该议题的初衷必然不是为了针对某个供应商,而是想促进关于这个问题的良性讨论。

在过去几年中,确实可以看到供应商积极混淆或加密固件的趋势,目的是阻止其他人进行纯黑盒交互以外的任何类型的分析。供应商的这种思路完全可以理解,不过作者从实际经验角度提出的观点也值得深入考虑,设备尽可能透明和开放将允许设备所有者和安全研究人员拥有必要的访问权限和工具来进行分析,从长远来看,这样更有助于提升设备本身的安全性。

附录 参考文献

[1]https://www.nozominetworks.com/blog/new-annke-vulnerability-shows-risks-of-iot-security-camera-systems/

[2]https://www.nozominetworks.com/blog/firmware-security-research-dahua-facial-recognition-station/

[3]http://www.airportse.cn/2020/02/26/%E5%A2%83%E5%A4%96%E9%BB%91%E5%AE%A2%E7%9B%AF%E4%B8%8A%E8%A7%86%E9%A2%91%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F%EF%BC%8C%E6%9C%BA%E5%9C%BA%E5%A6%82%E4%BD%95%E9%98%B2%E8%8C%83%EF%BC%9F%EF%BC%88%E4%BA%8C/

[4]https://dahuawiki.com/Thermal/DHI-ASI7213X-T1 下载固件

[5]https://www.dahuasecurity.com/in/products/All-Products/Access-ControlTime-Attendance/AI/Standalone/ASI7213X-V1-T1

[6]https://www.nozominetworks.com/blog/firmware-security-research-dahua-facial-recognition-station/

[7]https://www.nozominetworks.com/blog/new-axis-os-security-research-aided-by-transparent-design/

版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author