Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

安全论文每日读 2015.03.26

今天介绍的论文When Firmware Modifications Attack: A Case Study of Embedded Exploitation是一篇不折不扣的逆向工程炫技论文,作者展示了通过一个完整的Firmware逆向工程来实施对打印机这种看似非常安全的设备的攻击!

论文下载

Background

  • 本文作者在2011年的欧洲黑客会议Chaos Communication Congress上做过一个题为”Print Me If You Dare: Firmware Modification Attacks and the Rise of Printer Malware”的报告。在报告上他通过对固件中远程升级(Remote Firmware Update)分析和漏洞利用的过程,完全控制了一台HP打印机。
  • 本文发表于2014年的NDSS会议,主要介绍了了3年前的报告中未介绍的一些细节,并从该例子展开,讨论了与嵌入式设备相关的安全问题

Firmware Modification Attack

  • 这一节首先介绍对嵌入式设备进行Firmware Modification Attack的可能性
    • Feasibility:
      1. 大部分的Firmware都有远程更新的功能(Remote Firmware Update, RFU)
      2. 之前的一些研究也发现网络上存在大量使用弱口令的嵌入式设备
      3. 一些设备使用网路启动,而且使用不安全的连接方式(TFTP),因此存在在2层使用ARP攻击的可能性、
    • Fail-Safe:
      1. 大部分设备都会检查收到的固件是否与自身匹配,来避免用户使用错误固件进行升级导致的设备故障。这降低了攻击者发起错误的攻击的代价(reduces the penalty of a misdirected attack.),而且令大规模的攻击成为可能。
      2. 为了避免不必要的错误,厂商提供的固件的时候还可以选择只更新固件的一部分(bootloader,OS)。因此攻击者也可以利用这一特性只对bootloader进行修改。因此,一次攻击需要的流量可以从几M降低降低到几百K。(例如,之前攻击者扫描到了一个有弱口令的路由器,但是只能识别出路由器的厂商,那么几百个型号全部尝试一遍,流量就从几百M降低到几十M)
    • Platform Independence:
      1. 虽然不同设备的架构,硬件配置都不同,但是一个厂商的一个系列的设备的固件的源代码大部分都是相同的,这就意味着,一个漏洞(或者后门)会“平台无关”的出现在一个系列甚至跨系列的设备中,
    • 对固件校验签名显然并不能完全杜绝被攻击的可能

Case Study: HP LASERJET Exploitation

  • 在接下来的这个部分,作者将讲述了他从几乎为0开始对HP的P2055DN进行逆向工程,并讲述了自己发现这个HP-RFU漏洞的过程
  • 在开始分析之前,作者知道的只有(从HP官方网站):
    1. HP的RFU依托打印机的标准协议的PJL(printer job language)实现
    2. 标准的PJL头后面跟一个没有文档的ACL格式数据
  • Discover Process:
    • 首先,对RFU binary的每个字节进行统计,分布情况表明数据被压缩但是没有被加密。
    • 没有文档,怎么办,只能猜,作者看了下头部的数据,然后,猜出了头部的一点数据格式: 固件各个分块压缩后的长度和压缩前的长度
    • 但是连压缩算法是什么都不不知道。。于是作者决定。。买台机子拆了。。。
    • 然后从主板上:
      1. 作者看到了SoC上型号,于是知道了是Marvell的一个ARM架构的芯片
      2. 看到了flash的规格:8M
    • 然后,把flash焊下来,接在一个Arduino上,把整个flash的内容读了出来
    • 好的。。可以上IDA了。。从flash第一个字节开始逆。。。。作者把bootload逆掉了,然后,checksum和压缩的算法都知道了(结果是个zlib…),作者还指出bootloader使用的zlib版本似乎有已知漏洞。。。
      • PS:整个分析过程完成于2011年前,那是时候应该还没有binwalk之类的工具
  • Proof of Concept Printer Malware
    • 作者首先写了一个HPacker提供解包和重打包功能,
    • 然后,作者确认了是个vxworks(ELF image)
      • 开始识别里面的各种函数,以编写malware..
        • 作者的目标是识别出socketlib, print job processing, raw network I/O interface..
        • 然后,首先用IDA 手工识别socketlib,
        • 然后patch了内核,把所有打印到UART的调试信息重定向到TCP
        • 然后。。。借助这些信息,找到了vxworks文档中的更多的函数。。
        • 然后。。写了个rootkit,放到了固件里。。
    • 最后,作者利用这些信息,用2800行汇编代码,完成了可以反向链接的C&C rootkit,并成功植入了固件中

Figure 1

Figure 2

Threat Model And Assessment

  • 在这一节,作者以HP RFU的这个漏洞,介绍了读者可能没意识到的嵌入式系统与PC环境的差异
  • Threat Model Characterization & Threat Assessment
    1. 攻击者当然可以直接连接到打印机上进行攻击
    2. 但是另外一种攻击方式是,通过XSS脚本,让内网的用户帮助你发送恶意的RFU请求到打印机上,然后打印机就会变成攻击者渗透到内网的入口
    3. 或者诱使用户打印恶意的文档,完成攻击

Figure 3

  • Compounding Factors: 针对HP RFU还有更多的问题加剧了危害
    1. RFU更新功能根本不需要认证….就是说一个XSS就跪了….
    2. RFU更新默认打开…
    3. RFU作为advanced feature并不能在HTTP或者TELENT上进行配置,用户需要装一个叫WJA的300M+的软件并且装了SQL才能进行配置。。。
    4. 而且,这个漏洞报告给HP的时候,HP发布了第一版的公告上,有很多型号都没有列上去。。。因为,当时WJA也没有提供关闭那些型号的RFU的功能。。。然后直到WJA更新,HP才将第一版做了修改加上了其他的型号
    5. 最后,这款打印机的flash具有One-Time-Programmable特性,也就是说,攻击者愿意的话,他把rootkit放进去,你就只能把flash悍下来了。。。

Vulnerable Device Population Analysis

  • 作者做了全网扫描,74770个识别出的HP打印机中中只有808个补了漏洞,211个不需要补。。&这一千多台没漏洞的里面还有253台有弱口令。。。。
  • We also identified the following populations of vulnerable printers within two notable organizations:
    • United States Department of Defense: 201 printers
    • HP: 6 printers
  • 后面作者还顺便做了还做了一些目前在使用的HP打印机的年龄,以及其中使用的第三方库版本的分析,简而言之,大量已知的安全问题还遗留在这些设备中