广告

在嵌入式设备中寻找软件错误

开放获取

摘要

本章的目的是向读者介绍作为物联网核心的嵌入式系统中的bug发现领域。嵌入式软件有许多特殊性,这使得它与通用软件略有不同。特别是,嵌入式设备更容易受到软件攻击,但防御级别较低,经常无人看管。同时,分析它们的安全性更加困难,因为它们非常“不透明”,而自定义和嵌入式软件的执行往往与硬件和外设纠缠在一起。这些差异影响了我们在这些系统中发现软件错误的能力。本章讨论如何在软件生命周期的不同阶段识别软件漏洞,例如在开发期间,在集成不同组件期间,在测试期间,在设备部署期间,或在第三方现场。

11.1嵌入式设备和软件的挑战

我们认为嵌入式软件的安全问题是由多种因素造成的,包括系统地缺乏透明度、控制和抵抗攻击。改善这种情况的一种特殊方法是分析这些设备的软件,其特定目标是识别软件漏洞,以便尽早纠正它们。

11.1.1缺乏透明度

今天,许多智能设备在大规模攻击中被攻破,并可能被滥用形成大型僵尸网络攻击(受损设备的网络)。据报道,创纪录的分布式拒绝服务(DDoS)攻击(即网络洪泛)产生了620 Gbps到1 Tbps的流量[241344].据报道,这些DDoS攻击使用了数十万个被入侵的嵌入式/智能设备,包括几十种不同型号的商用现货(COTS)产品,如IP/CCTV摄像头和家庭路由器。这些设备大多是使用制造商设置的默认或硬编码凭据而被入侵的[345].运行在这些设备上的恶意软件完全控制了产生的流量,而且大多数智能设备不嵌入任何感染检测或预防机制。更糟糕的是,设备的用户或所有者往往没有意识到这个问题,也无法解决它。事实上,设备的设计并不是为了供最终用户检查和修改的(例如,如第4章中讨论的用于进行取证)。13).

11.1.2缺乏控制

另一个重要的问题是,智能设备通常是作为固定的软件(即固件)和硬件平台提供的,通常与云服务绑定,并捆绑在一起作为一个用户几乎无法控制的封闭系统。这种客户锁定的负面后果的一个例子是Revolv智能恒温器。Revolv谷歌的制造商被其竞争对手Nest收购,一年后,Nest停止了云服务,提供了Revolv安装在家中的恒温器无法使用[271].对于设备应该运行哪种软件,使用哪种云服务,或者设备应该做什么,用户通常没有选择余地。为这类设备选择、安装和使用替代软件即使不是不可能,也是很困难的,这往往是因为硬件和软件设计的单一用途、缺乏公开文件,以及制造商采取的任何反篡改措施。

11.1.3缺乏对攻击的抵抗力

实际上,互联网扫描僵尸网络非常活跃,一些设备在连接到互联网后几分钟内就会被破坏[344].为了被认为是值得信任的,设备需要有一定程度的抵抗攻击。这是令人震惊的,因为在本质上,许多反复出现的智能设备安全问题已经“解决”多年。如果漏洞和相应的攻击情况最终可以避免,那么很重要的一点是,除了恶意软件作者之外,谁应该为被入侵的智能设备造成的损害负责。设备所有者可能在法律上负有责任,但终端用户通常没有任何方法来检测或防止这种妥协,或应用安全配置。另一方面,制造商目前往往没有法律责任,因此没有动机(如经济、法律)来防止潜在的脆弱性和妥协。

11.1.4本章组织机构

解决这些问题需要分析嵌入式设备的软件和固件,并识别和修复它们的漏洞。本章描述了系统和一致地实现这一目标的可能步骤。我们首先提供一个适合于分析的嵌入式系统分类。然后我们描述分析它们的可能步骤。我们从获取用于分析的软件的方法开始,这对于嵌入式设备本身通常是一个挑战。然后,我们描述如何对获得的固件包执行静态分析,这有许多优点,如速度和可伸缩性。然后,我们描述了可用于动态分析固件的技术,与静态分析相比,动态分析具有更大的代码覆盖率和更低的误报率的优势。

11.1.5嵌入式系统的分类

嵌入式系统的一般定义很难建立[261].然而,嵌入式设备与现代通用计算机(如普通的台式电脑或智能手机)之间有两个被广泛接受的差异,即:(a)它们被设计来实现一个特定的目的,以及(b)它们与物理世界通过外围设备.上述两个标准涵盖了各种各样的设备,从硬盘控制器到家庭路由器,从数码相机到可编程逻辑控制器(plc)。这些族可以根据以下几个方面进一步分类,例如它们的实际计算能力[171,它们与计算和物理环境的交互程度,它们的使用领域,或施加在它们身上的时间限制。

不幸的是,这些分类很少告诉我们在给定设备上可用的安全机制的类型。Muench等[430]根据嵌入式系统使用的操作系统类型来分类。虽然操作系统肯定不是安全特性的唯一来源,但它提供了几种安全原语,处理从错误状态恢复,并经常充当附加的、更复杂的安全机制的构建块。因此,我们使用以下分类法对嵌入式设备进行分类:
输入0

多用途/非嵌入式系统。

我们使用Type-0是为了引用传统的通用系统。

i型

通用的基于操作系统的设备(例如,基于linux的)。

Linux操作系统内核在嵌入式领域得到了广泛的应用。然而,与桌面和服务器上的传统GNU/Linux相比,嵌入式系统通常遵循更简约的方法。例如,在面向消费者的产品以及工业控制系统(ICS)中可以找到的一种非常常见的配置是基于Linux内核耦合的BusyBox而且uClibc

ⅱ型

基于嵌入式操作系统的设备。

这些针对嵌入式设备系统的专用操作系统特别适用于低计算能力的设备,由于成本原因,这通常被强制用于嵌入式系统。操作系统,如uClinuxFreeRTOS适用于没有内存管理单元(MMU)的系统,通常采用在单一用途的用户电子设备上,如IP摄像头、DVD播放机和机顶盒(STB)。

iii型

没有OS-Abstraction设备。

这些设备采用所谓的“单片固件”,其操作通常基于一个控制回路和由外设触发的中断,以处理外部事件。单片固件可以在各种各样的硬件组件的控制器中找到,如cd -reader, wifi卡或gps适配器。

11.2获取固件及其组件

尽管在某种程度上和在某些情况下可以对嵌入式设备进行完整的黑盒分析,但获得固件会大大帮助并使更高级的分析成为可能。有两种获取给定设备固件的主要方法-作为固件包(例如,在线,支持媒体)和通过从设备本身提取。

11.2.1收集固件包

嵌入式系统部署的环境是异构的,跨越各种设备、供应商、CPU/硬件架构、指令集、操作系统和定制组件。这使得编译一个代表而且平衡数据集是固件软件包的一个难以解决的问题。缺乏集中的收集点,比如由软件/应用市场、防病毒供应商或恶意软件分析领域的公共沙箱提供的收集点,使得研究人员很难收集到大型的、经过良好筛选的数据集。固件通常需要从供应商的Web页面和FTP站点下载,而且要判断两个固件包是否用于同一物理设备并不总是那么简单,即使对人来说也是如此。

在固件分析和逆向工程过程中经常遇到的一个挑战是从固件包中可靠地提取元数据的困难。这些元数据可能包括设备的供应商、产品代码和用途、固件版本或处理器架构,以及无数其他细节。

11.2.2从设备中提取固件

从在线存储库中获取固件作为固件包是很方便的,因此是首选的,但这并不总是可能的。首先,固件可能不可用,例如,因为还没有更新,也没有计划更新。有时固件只通过授权和合格的维护代理分发,例如,在工业或关键系统的情况下。为了防止假冒产品、软件逆向工程或保护其安全性,固件根本不发布的情况也很常见。

在这种情况下,最好的(有时也是唯一的)解决方案是从设备本身提取固件。有多种可能的方法来解决这个问题([529]和[564提供过程的详细概述),每种方法都有自己的一组优点和问题。在最简单的情况下,固件可以通过连接到一个调试接口(例如,JTAG,和串行端口,如UART, SPI, I2C)来提取。需要注意的是,JTAG是一个低层协议,许多不同的机制可以在它之上实现。调试机制允许转储一些内存(例如,ROM, RAM或Flash内存后面的Flash控制器),但不一定要转储其他内存。当闪存被焊接到印刷电路板(PCB)上,并且独立于处理器时,可以使用Flash编程器/读取器将其解焊并提取其内容。不幸的是,闪存的标准、类型和pinouts种类繁多。你可以设计自己的闪存芯片适配器来读取和转储内存内容(如代码、数据)[75].然而,一些廉价的通用程序员可能足以转储足够多的Flash存储器模型[38].最后,高级Flash程序员甚至支持数十万种不同的Flash内存模型[198].

然而,当设备是一个Flash微控制器时,Flash存储器集成在微控制器中,通常是不能直接访问的。在这种情况下,微控制器本身提供了访问Flash存储区域的机制,但通常这种机制还附带一些Flash区域保护机制,这些机制通常是任意的和微控制器特定的。由于保护措施本身的实施存在漏洞,有时可以绕过这种保护机制[447556].然而,这样的攻击可能并不总是成功,人们可能会使用更昂贵的入侵硬件攻击,如线性代码提取(LCE) [549或用显微镜直接读出存储器[158是唯一的选择。

11.2.3开箱固件

固件包分析的下一步是解包并提取其中包含的文件或资源。这个阶段的输出很大程度上取决于固件的类型,以及所使用的拆包和提取工具。在某些示例中,可执行代码和资源(如图形文件或HTML代码)可能直接嵌入到二进制blob中,该blob被设计为由引导加载程序直接复制到内存中,然后执行。其他一些固件包是在一个压缩和模糊包中分发的,其中包含一个逐块的Flash内存映像副本。这样的映像可能包含几个分区,这些分区包含一个引导加载程序、一个内核、一个文件系统,或者这些分区的任意组合。

11.2.4固件开箱框架

解包任意固件包的主要工具有:binwalk [263], FRAK [161],二进制分析工具包(BAT) [558)和固件。再保险公司(155)(表11.1比较每个框架的性能):
  • Binwalk可能是克雷格·赫夫纳开发的最著名和最常用的固件解包工具[263].它使用模式匹配来从二进制blob中定位和雕刻文件。此外,它还提取一些元数据,如许可字符串。
    表11.1

    Binwalk、BAT、FRAK、Firmware的拆封性能比较。RE上的几个例子固件包(根据[155])

    设备

    供应商

    操作系统

    Binwalk

    蝙蝠

    FRAK

    固件。再保险

    个人电脑

    英特尔

    BIOS

    相机

    STL

    Linux

    路由器

    Bintec

    - - - - - -

    ADSL网关

    合勤科技

    ZynOS

    PLC)

    西门子

    - - - - - -

    DSLAM

    - - - - - -

    - - - - - -

    个人电脑

    英特尔

    BIOS

    ISDN服务器

    地球

    - - - - - -

    网络电话

    Asotel

    Vxworks

    调制解调器

    - - - - - -

    - - - - - -

    家庭自动化

    贝尔金

    Linux

    55%

    64%

    0%

    82%

  • FRAK是崔等人首先提出的一个开放工具包。[162].据报道1支持有限数量的设备供应商和型号,如HP打印机和多功能外设(MFP)。

  • 二进制分析工具包(BAT),前身为GPLtool,最初由Armijn Hemel和Tjaldur软件设计,用于检测违反GPL许可的行为[269558].为此,它递归地从二进制blob中提取文件,并将字符串与来自GPL项目和许可的已知字符串数据库进行匹配。BAT还支持类似binwalk的文件雕刻,以及一个非常灵活的面向插件的扩展接口。

  • 固件。再保险公司(155]扩展了BAT,提供了额外的解包方法和特定的分析,以执行自动化的大规模分析。当发布时,它实现了较低的误报率时,解包固件相比binwalk。

11.2.5修改和重新包装固件

在分析固件和设备安全性期间,修改和重新包装固件可能是一个可选步骤。修改可以在整个固件包级别上执行,也可以在单独解包的文件级别上执行(这些文件最后重新打包到固件包中)。这样的步骤在测试一些东西时可能是有用的。首先,它可以检查特定固件是否有错误、修改和新版本固件的真实性检查。如果这些检查缺失或执行不当,那么固件更新机制就会被用作攻击矢量,或作为对系统进行进一步分析的一种方式[57162].其次,它可以用来增加固件的额外安全相关功能,如漏洞、良性恶意软件和更高级的分析工具。例如,当没有其他方法来交付漏洞时(例如,非网络本地漏洞,如内核特权升级),或者提供一些(部分)形式的对运行的设备/固件的内省,这可能是有用的。163].

firmware-mod-kit工具(262是最有名的(可能是为数不多的)固件修改工具。不幸的是,它支持的固件格式数量有限,虽然可以扩展它以支持更多的格式,但这需要大量的手工工作。此外,对于某些格式,它依赖于外部工具来执行一些重新打包。这些工具是由不同的人或实体以不同的形状和形式开发和维护的,因此没有统一的方法来修改和重新打包固件包。

11.3静态固件分析

一旦代码被提取出来,就可以执行进一步的分析。在一般的计算系统上可以进行两类主要的分析:静态分析和动态分析。原则上,这两者之间的区别很容易:在静态分析中,代码不需要执行就会被分析,相反,只需要对其进行推理,而在动态设置中,分析是在代码执行时进行的。然而,有了更先进的分析技术,这个边界就稍微模糊了。例如,符号执行允许通过考虑一些变量的未知值来分析软件(即,它们是不受约束的)。符号执行有时被认为是静态分析,有时被认为是动态分析。在本节中,我们将首先描述可以在固件包上高效执行的简单静态分析,然后我们将讨论更高级的静态分析方法。最后,我们将介绍静态分析的局限性,在下一节中重点介绍固件包的动态分析。

11.3.1固件包的简单静态分析

11.3.1.1配置分析

对于绝大多数复杂的嵌入式设备(如第1节所述的i型设备)。11.1.5),而服务配置存储在设备的文件系统中,用户可配置的信息通常存储在其他地方——存储在内存中一个称为非易失随机访问存储器(NVRAM)的区域中,NVRAM在电源循环之间保持其状态(在某些方面类似于闪存)。许多设备将NVRAM视为键值存储,并包括诸如此类的实用程序nvram-get而且nvram-set,以及用于获取和设置存储在那里的值的专用库。例如,在路由器上,当前的Wi-Fi密码短语和基于web的配置接口凭证通常会存储在NVRAM中,软件会查询NVRAM,以便于设备及其服务的身份验证。

所有其他设备配置,不执行固件升级,将是静态的。因此,任何硬编码的密码或证书(如在[151),可以被对手利用来破坏设备。为此,Costin等人[155]显示了许多设备配置的用户帐户和密码是弱的、完全丢失的或以纯文本形式存储的实例。因此,固件静态分析的第一步是检查其服务的配置:检查配置不正确的服务,例如,由于使用不安全的默认值和硬编码的凭证。在没有对设备进行物理访问的情况下,配置文件在估计所使用的程序集和设备的初始全局配置方面还有进一步的作用。例如,通过检查它的引导脚本,我们能够了解它的固件中存在的哪些服务(可能有数百个)被设备实际使用,这可以帮助减少后面描述的更复杂的分析方法所花费的时间。

手动方法通常足以分析一些固件映像,并且在有限的范围内,可以分析设备配置等内容。例如,要估计由固件启动的进程集,可以检查启动脚本的内容,例如:/etc/rcS

数字11.1详细说明了从IP摄像头的固件中获取的引导脚本。我们可以观察到设备的主要功能是由/bin/webs二进制,然后我们将使用Sect中详细的方法进一步分析它。11.3.2
图11.1

从IP摄像头获取的启动脚本示例

11.3.1.2软件版本的分析

许多设备的设计目的不是接收固件更新。这禁止针对已知的安全漏洞打补丁,并且经常会使设备对终端用户无用。这样可以防止将固件更新当作攻击载体。然而,当漏洞被发现时,唯一有效的缓解措施是用新的设备替换该设备。

许多设备被设计为可更新的,供应商提供固件更新。然而,应用这些更新的机制通常不是标准化的,而且很大程度上是临时的。它们还严重依赖于最终用户的努力(确定更新是可用的)和行动(实际应用更新)。这样做的最终结果是,绝大多数设备对已知的漏洞没有打补丁。因此,固件分析的进一步步骤是识别它所包含的软件版本(包括程序和库),并将这些版本与已知的漏洞(例如,CVE数据库)联系起来。

有几种可能的方法来实现这一点。例如,[155使用模糊哈希[340507]作为一种关联固件映像中的文件的方法。该方法的有效性在几个例子中得到了证明,特别是发现许多物联网和嵌入式设备是所谓的“白标签”产品。2最后,机器学习可以用来识别固件图像[157]或搜寻已知的漏洞[585].

11.3.2固件包的静态代码分析

开发用于在嵌入式设备固件上执行自动静态代码分析的工具,与在商用PC系统(即Type-0设备)的软件上执行分析相比,具有许多复杂性。第一个挑战是CPU架构的多样性。这就限制了可以使用的现有工具的数量,当尝试大规模分析工具时,将不可避免地不得不处理来自许多不同架构的固件。在这种情况下,为了便于分析,算法要么必须为每个被分析的体系结构重新实现,要么必须将特定于体系结构的拆卸固件指令提升为一种常见的,所谓的中间语言(IL)或中间表示(IR)。对于更简单的设备(例如,那些类型iii),一个进一步的困难是通常的非标准方法,通过不同的设备固件执行(例如,它可以是中断驱动的),并与内存和外部外设交互。更复杂的固件(例如,Type-I设备的固件)倾向于更紧密地跟随更传统的设备(Type-0设备)的执行行为。

11.3.2.1嵌入式固件的代码分析

尽管执行嵌入式设备固件的自动化分析的复杂性增加了,但是已经提出了一些针对目标和大规模静态分析的技术。Eschweiler等[202和Feng等[212使用数值特征向量来执行基于图形的程序比较[191有效)。它们在这些特征向量中编码控制流和指令信息,以识别设备固件中的已知漏洞。这两种方法都提供了一种方法,可以使用引用漏洞作为输入查询二进制文件的数据集,并识别包含的构造的二进制文件子集类似的(但不一定相同)与输入漏洞的区别。工作在[585]通过依赖神经网络来提高这些方法的性能。

11.3.2.2使用静态分析发现后门

除了漏洞发现之外,还有一小部分工作试图自动识别设备固件中类似后门的构造。静态分析最适合检测这样的结构,因为它可以实现完全的程序覆盖。在这种情况下,动态分析不够充分,因为它仅仅依赖于执行跟踪,这些执行跟踪可以从触发标准程序行为(根据定义[551],而后门则不是)。

使湿润3.552]使用机器学习(ML)和静态分析的组合来识别在基于linux的固件中常见的服务中的异常和意外行为。ML首先用于识别固件二进制文件的类型,例如web服务器,然后驱动对每个二进制文件进行分类特定的静态分析。加湿尝试验证二进制文件不执行任何预期的软件类型以外的功能。例如,加湿能够从腾达路由器固件中检测到web服务器中的后门4它包含一个附加的UDP侦听线程,该线程作为根用户执行提供给它的shell命令(没有身份验证)。

斯金格5550]试图在基于linux的固件中定位类似后门的行为。它自动发现与导致执行的静态数据的比较独特的程序功能,它模拟后门通过硬编码的凭证对或无文档的命令提供对无文档功能的访问的情况。Stringer根据静态数据比较对其控制流的影响程度,为二进制文件中的函数提供排序警卫以其他方式无法访问的功能。作者展示了Stringer能够从许多制造商的设备中检测未记录的功能和硬编码的证书后门。

Firmalice [528是一款通过符号执行检测认证绕过漏洞和固件后门的工具。它以一个所谓的安全策略作为输入,指定程序(或固件)在达到身份验证状态时将显示的条件。使用这个安全策略,它试图通过发现一个输入在给程序时满足达到那个状态的条件,来证明它可以达到一个经过身份验证的状态。为了发现这样的输入,Firmalice使用符号执行程序切片,从作为输入源的程序点到表示该程序处于验证状态的点。如果它能够满足这两点之间存在路径的所有约束条件,并且能够具体化满足这些约束条件的输入变量,那么它就发现了身份验证旁路后门(和触发输入)——这样的输入在非后门身份验证例程中是无法发现的。不幸的是,Firmalice需要一定程度的人工干预来执行它的分析,例如识别安全策略、输入点和特权程序位置。因此,它不容易适应大规模分析。

11.3.2.3发现代码解析器的静态分析示例

为了与远程服务器或连接客户端交互(例如,用于远程配置),大多数网络化嵌入式设备的固件将包含客户/服务器组件,例如,一个web服务器,或专有的、领域特定的客户/服务器软件。在所有情况下,固件本身或包含在其中的软件(对于更复杂的设备)将实现用于处理与相应的客户机/服务器实体通信所需的协议消息的解析器。这样的解析器是错误的常见来源,无论是它们的实现以导致内存损坏的方式错误地处理输入,还是在协议的状态机逻辑中允许无效的状态转换。因此,在二进制软件中识别这些结构是执行目标分析的前提。为此,Cojocar等人[150,这是一个自动检测固件二进制程序中的解析例程的工具。PIE利用了一个监督学习分类器,该分类器根据已知包含解析逻辑的固件组件的LLVM IL表示的许多简单特性进行训练。这些特性包括:基本块计数,块的入边数,以及函数调用者的数量。PIE提供了一种方法来识别负责在输入固件包或软件组件中执行解析的特定函数。斯金格(550],在教派中描述。11.3.2.2,类似地提供了一种自动识别解析器例程(用于基于文本的输入)的方法;除了识别例程之外,它还能够识别由解析器处理的单个(基于文本的)命令。

11.4动态固件分析

静态分析确实是一种健壮的技术,它可以帮助发现广泛的漏洞类,例如错误配置或后门。但是,它不一定最适合其他类型的漏洞,特别是当它们依赖于程序的复杂运行时状态时。

与静态分析类似,强大的动态分析技术和工具已被开发用于传统系统和通用计算机。然而,嵌入式系统的独特特性和挑战使得直接应用这些已被证实的方法变得困难,如果不是不可能的话。为此,嵌入式系统的动态分析有几个不同的方向,我们在下面简要地讨论它们。

11.4.1无仿真的设备交互动态分析

当分析设备时,设备交互动态分析的最简单形式是用“黑盒”方式测试设备。这种方法的一般想法是在正常操作中设置和运行分析下的设备(例如,连接到以太网LAN, WLAN,智能手机),然后用各种工具和手工技术(例如,通用或专门的模糊器,网络渗透)测试它,并通过外部可观察的副作用,如设备重启,网络守护进程崩溃,或XSS工件[439].一些独立和互补的研究报告了类似的方法和结果[259280292].

虽然简单且易于执行,但这种动态分析类型有一定的局限性,其中一些是由于方法的“黑盒”性质造成的。例如,在执行动态分析时,很难知道整个系统/设备发生了什么,也就是说,系统的内省缺失或很难实现。此外,在这种方法中,不容易详细控制正在执行和分析的具体内容,分析主要是由提供给设备的数据和操作驱动的。除此之外,某些类型的漏洞可能不会立即产生副作用[430]或外部可见(例如,守护进程的崩溃并不一定会暴露网络端口),因此在分析过程中可能会遗漏或错误解释这些错误。

11.4.2设备交互动态分析与仿真

作为上述方法的扩展,仿真可以与设备交互动态分析相结合,以提供所需的深度和广度,因此优于其他静态或动态分析方法。这种方法的一般思想是在分析主机和实际运行的设备之间分割嵌入式固件的执行。分析主机通过调试(如JTAG)或串行(如UART)接口与设备连接。因此,一个要求是所分析的设备必须至少提供这样的接口,无论是否有文档记录。分析宿主然后运行一个动态分析环境,它通常是一个模拟器(例如,基于qemu的),通过附加层和插件(如符号执行和污染分析)进行扩充或扩展。分析主机可以访问模拟器和运行设备的执行和内存状态。固件首先在扩展模拟器环境中进行分析。在固件模拟和分析过程中,分析主机将分析固件的某些部分从模拟器传输到正在运行的设备上执行。这有时是必需的,例如,当固件需要在设备上有外设但模拟器中没有外设的情况下执行I/O操作时。与设备之间的运行和状态传输通过连接的调试或串行接口进行。 On the one hand, by using this approach it is possible to control exactly what is to be analyzed because the emulator is under the full supervision of the analysis host. On the other hand, this approach enables broader and deeper coverage of the execution because the device can complement the execution of firmware parts that are impossible to execute within the emulator.

这是《阿凡达》所遵循的方法[591,其目的是提供S2E的符号执行[140,而Avatar2 [429着重于与更多工具更好的互操作性。前景(312]探究系统调用层的转发和代理[341提供了一个非常快的调试接口。《盗梦空间》(125]提供了在测试期间使用的分析环境,当源代码可用时。

11.4.3无设备动态分析与仿真

以设备交互的方式执行动态分析肯定有它的优点,但是这种方法有许多限制,并且很难完全自动化。首先,与设备与仿真交互方法相关的许多任务中,不容易扩展人工操作人员的干预和所需的专业知识。其次,与大量设备的获取、拆卸、连接、配置和重置相关的物流操作的自动化和规模化具有挑战性。因此,需要更容易和更可行的动态分析技术来扩展和自动化。其中一种技术是基于完全或部分仿真的无设备分析。

Davidson等[175)提出了5MSP430微控制器家族的固件bug检测工具。外资企业利用KLEE [120]对固件进行符号执行,以检测内存安全违规(如缓冲区溢出和内存越界访问),以及外设误用(如试图写入只读内存)。5需要源代码的可用性,这是不常见的,并且能够处理各种细微差别和固件自动化分析期间面临的挑战,特别是在处理类型iii设备的固件时。然而,当从设备读取I/O时,总是假设读取的值返回不受约束(完全是符号)的值,这导致了状态爆炸问题。这限制了可分析的程序的大小。

在[156],作者通过自动化和大规模的嵌入式固件仿真来进行无设备的动态安全性分析。同样的,FIRMADYNE137提出了一个自动化的、可扩展的系统,用于对基于linux的嵌入式固件进行仿真和动态分析。

这两种工作的总体思想是抓取固件包,然后将其解压缩到最小的根文件系统(即,rootfs),可以随后通过“系统模拟”(与“用户模拟”相反)作为一个整体进行虚拟化和执行,例如使用QEMU [69].模拟器首先用于启动特定于体系结构的模拟主机操作系统,例如用于ARM或MIPS的Debian,这取决于正在动态分析其固件的设备的体系结构。然后将固件根文件系统上传到模拟主机操作系统,在那里启动它的Linux引导序列脚本,很可能是在chroot在仿真主机操作系统下的环境。一旦固件的Linux引导序列结束,所分析的设备/固件的各种服务(例如web服务器、SSH、telnet和FTP)应该正在运行,并为日志、跟踪、检测和调试做好准备。工作在[137]通过运行一个定制的操作系统内核来扩展这种方法,该内核能够模拟一些缺失的驱动程序。

11.5结论

我们提供了该领域的一个简短概述:从我们的远足中可以清楚地看到,分析物联网/嵌入式设备的软件并找到其中的安全漏洞仍然是一项具有挑战性的任务。虽然该领域正在积极探索和开发多个方向和技术,但仍需要更多的研究、见解和工具。

不幸的是,现有的成熟技术(例如,静态、动态、混合分析)不能直接应用于嵌入式设备及其软件/固件。原因之一是支持嵌入式/物联网系统的技术空间高度异构和碎片化。另一个原因是嵌入式设备的“不透明”性质,这可以被视为类似于“通过模糊实现安全”原则。与传统系统相比,这些原因使得嵌入式系统更难分析。

事实上,当前的嵌入式固件“种群”可能仍然包含许多潜在的后门和漏洞,包括已知的和未知的。然而,正如我们在本章中详述的那样,检测嵌入式软件bug的积极和有前途的途径正在变得越来越多。这些途径包括大规模分析和相关技术,模拟固件或运行设备的混合/动态分析,以及专门检测后门的高级技术。

脚注

  1. 1

    尽管作者提到该工具将公开发布,但它尚未发布。

  2. 2

    以知名品牌销售的非专利产品。

  3. 3.
  4. 4
  5. 5

参考文献

  1. 38.
    Autoelectric。XGecu TL866II。http://autoelectric.cn/EN/TL866_main.html
  2. 57.
    扎克里·贝斯奈特,乔纳森·巴兹,小胡安·洛佩兹和托马斯·杜贝。对可编程逻辑控制器的固件修改攻击。国际关键基础设施保护杂志, 2013年。谷歌学者
  3. 69.
    法布里斯。Qemu,一款快速便携的动态翻译软件。在USENIX年度技术会议,FREENIX Track,第41卷,第46页,2005。谷歌学者
  4. 75.
    艾玛·伯努瓦,纪尧姆·海耶斯和菲利普·图文。Quarkslab博客文章:Flash dump, 2017年9月。https://blog.quarkslab.com/flash-dumping-part-i.html
  5. 120.
    克里斯蒂安·卡达尔,丹尼尔·邓巴和道森·恩格尔。复杂系统程序的高覆盖率测试的无辅助和自动生成。在第八届USENIX操作系统设计与实现会议论文集, osdi ' 08, 2008。谷歌学者
  6. 125.
    Giovanni Camurati和Aurélien Francillon。Inception:对真实的嵌入式系统软件进行系统范围的安全性测试。在USENIX安全研讨会, 2018年。谷歌学者
  7. 137.
    大明·D·陈、曼纽尔·埃格勒、马华力·吴和大卫·布鲁姆利。面向基于linux的嵌入式固件的自动化动态分析。在ISOC组织nds 2016, 2016年。谷歌学者
  8. 140.
    Vitaly Chipounov, Volodymyr Kuznetsov和George Candea。S2e:一个用于软件系统体内多路径分析的平台。Acm Sigplan通知46(3): 265 - 278年,2011年。CrossRef谷歌学者
  9. 150.
    Lucian Cojocar, Jonas Zaddach, Roel Verdult, Herbert Bos, Aurélien Francillon,和Davide Balzarotti。PIE:嵌入式系统中的解析器识别。计算机安全应用年会(ACSAC), 2015年12月。谷歌学者
  10. 151.
    证券交易委员会咨询。密钥屋:行业范围的HTTPS证书和SSH密钥重用危及全球数百万设备。博客,11月2015年,25日。谷歌学者
  11. 155.
    Andrei Costin, Jonas Zaddach, Aurélien Francillon和Davide Balzarotti。嵌入式固件的大规模安全性分析。在第23届USENIX安全研讨会论文集(USENIX Security), 2014年8月。谷歌学者
  12. 156.
    Andrei Costin, Apostolis Zarras和Aurélien Francillon。大规模自动化动态固件分析:嵌入式Web界面的案例研究。在第十一届ACM计算机与通信安全亚洲会议, 2016年5月16日。谷歌学者
  13. 157.
    Andrei Costin, Apostolis Zarras和Aurélien Francillon。实现了固件图像的自动分类和嵌入式设备的识别。在信息通信技术系统安全和隐私保护国际会议, 233 - 247页。beplay登入施普林格,2017年。谷歌学者
  14. 158.
    弗兰克·库尔本,谢尔盖·斯科洛博加托夫,克里斯托弗·伍兹。利用扫描电子显微镜反向工程闪存EEPROM存储器。在智能卡研究与先进应用-第十五届国际会议,CARDIS 2016, 2016年第57-72页。谷歌学者
  15. 161.
    和崔。利用FRAK搜索嵌入式设备固件漏洞。防御20, 2012年。谷歌学者
  16. 162.
    崔昂,迈克尔·科斯特洛和塞尔瓦托尔·J·斯托尔福。当固件修改攻击:嵌入式利用的案例研究。在第20届网络与分布式系统安全研讨会论文集, nds的13所示。互联网协会,2013年。谷歌学者
  17. 163.
    崔昂和塞尔瓦托尔·斯托尔福。用软件共生体保护嵌入式系统。在Robin Sommer, Davide Balzarotti和Gregor Maier的编辑中,入侵检测的最新进展,第6961卷计算机科学课堂讲稿, 358 - 377页。beplay登入施普林格,2011年。谷歌学者
  18. 171.
    李拉B Das。嵌入式系统:集成方法.印度培生教育,2012年。谷歌学者
  19. 175.
    德鲁·戴维森,本杰明·门奇,托马斯·里斯滕帕特和索梅什·贾哈。固件上的FIE:利用符号执行发现嵌入式系统漏洞。在第22届USENIX安全研讨会论文集, SEC ' 13, 2013。谷歌学者
  20. 191.
    托马斯·杜林和罗尔夫·罗尔斯。可执行对象的基于图的比较。在安全技术、信息和通信研讨会, sstic ' 05, 2005。谷歌学者
  21. 198.
  22. 202.
    Sebastian Eschweiler, Khaled Yakdan,和Elmar gerhard - padilla。discover:有效的跨架构识别二进制代码中的错误。在ISOC组织nds 2016, 2016年。谷歌学者
  23. 212.
    冯倩,周润东,徐承成,程瑶,Brian Testa,尹恒。固件映像的可扩展的基于图的Bug搜索。在ACM CCS 2016, 2016年。谷歌学者
  24. 241.
    丹Goodin。据报道,破纪录的ddos攻击是由> 145k被黑的摄像头提供的。Ars Technica, 2016年9月。谷歌学者
  25. 259.
    玛丽亚Hatalova。小型办公室家庭路由器的安全.博士论文,Masarykova univerzita, Fakulta informatiky, 2015。谷歌学者
  26. 261.
    史蒂夫·希斯。嵌入式系统设计.Newnes, 2002年。谷歌学者
  27. 262.
    C Heffner和J Collake。固件mod工具包修改固件镜像,无需重新编译,2015。谷歌学者
  28. 263.
    克雷格·凯西。Binwalk -固件分析工具,旨在协助分析,提取和反向工程的固件图像。https://github.com/ReFirmLabs/binwalk
  29. 269.
    Armijn Hemel, Karl Trygve Kalleberg, Rob Vermaas和Eelco Dolstra。通过二进制代码克隆检测发现软件许可违反。在第八届采矿软件库工作会议论文集, MSR的11所示。ACM, 2011年。谷歌学者
  30. 271.
    亚历克斯苍鹭。谷歌的Nest关闭智能家居公司,Revolv设备陷入困境。卫报,2016年4月。https://www.theguardian.com/technology/2016/apr/05/revolv-devices-bricked-google-nest-smart-home
  31. 280.
    惠普企业(HPE)。物联网研究研究- 2015年报告,2015。谷歌学者
  32. 292.
    Independen安全评估。利用SOHO路由器,2013年4月。谷歌学者
  33. 312.
    Markus Kammerstetter, Christian Platzer和Wolfgang Kastner。前景:外围代理支持嵌入式代码测试。在第九届ACM信息、计算机和通信安全研讨会论文集, 329 - 340页。ACM, 2014年。谷歌学者
  34. 340.
    杰西·d·Kornblum)。使用上下文触发分段哈希来识别几乎相同的文件。在数码法证研讨会论文集, 2006年。谷歌学者
  35. 341.
    Karl Koscher, Tadayoshi Kohno和David Molnar。代理:支持嵌入式系统的近实时动态分析。在第九届USENIX进攻性技术会议论文集.USENIX协会,2015。谷歌学者
  36. 344.
    布莱恩克雷布斯。krebsonsecurityhit With Record DDoS。Krebs On Security, 2016年9月。谷歌学者
  37. 345.
    布莱恩克雷布斯。谁让物联网受到攻击?Krebs On Security, 2016年10月。谷歌学者
  38. 429.
    Marius Muench, Dario Nisi, Aurélien Francillon和Davide Balzarotti。Avatar2:多目标业务流程平台。在二元分析研究研讨会(与NDSS研讨会同时举办)2018年2月,BAR 18。谷歌学者
  39. 430.
    Marius Muench, Jan Stijohann, Frank Kargl, Aurélien Francillon和Davide Balzarotti。你破坏的不是你破坏的:模糊嵌入式设备的挑战。在ISOC组织nds 2018, 2018年。谷歌学者
  40. 439.
    Marcus Niemietz和Jörg Schwenk。拥有你的家庭网络:重新审视路由器安全。在第九届Web 2.0安全与隐私研讨会(W2SP) 2015,2015年。谷歌学者
  41. 447.
    Johannes Obermaier和Stefan Tatschner。对微控制器的固件保护太过关注。在第11届USENIX进攻性技术工作坊(woot17),温哥华,加拿大,2017年。USENIX协会。谷歌学者
  42. 507.
    Vassil Roussev。基于相似摘要的数据指纹。在IFIP数字取证国际会议, 207-226页,2010。谷歌学者
  43. 528.
    Yan Shoshitaishvili,王若玉,Christophe Hauser, Christopher Kruegel和Giovanni Vigna。firmalice -自动检测二进制固件中的认证绕过漏洞。在教你们,2015年。谷歌学者
  44. 529.
    O. Shwartz, Y. Mathov, M. Bohadana, Y. Oren和Y. Elovici。反向工程物联网设备:有效的技术和方法。IEEE物联网杂志,第1-1页,2018年。谷歌学者
  45. 549.
    奥利维尔·托马斯和德米特里·内多斯帕索夫。对自动化集成电路分析过程的影响。BlackHat 2015, 2015年8月。谷歌学者
  46. 550.
    山姆·l·托马斯,汤姆·乔西亚和弗拉维奥·d·加西亚。Stringer:衡量静态数据比较对检测后门和未归档功能的重要性。在第22届欧洲计算机安全研究研讨会论文集《传道书》17章,2017年。谷歌学者
  47. 551.
    Sam L. Thomas和Aurélien Francillon。后门:定义、可推诿性和检测。在攻击、入侵与防御研究研讨会(RAID).beplay登入施普林格,2018年9月。谷歌学者
  48. 552.
    山姆·l·托马斯,弗拉维奥·d·加西亚和汤姆·乔西亚。加湿:一个用于检测固件中隐藏功能的工具。在第14届入侵和恶意软件检测及漏洞评估国际会议论文集2017年,2017年。谷歌学者
  49. 556.
    安德鲁•蒂尔尼(@cybergibbons)。绕过微控制器上的代码读出保护,2018年1月。谷歌学者
  50. 558.
    Tjaldur软件治理解决方案。二进制分析工具(BAT)。谷歌学者
  51. 564.
    S. Vasile, D. Oswald和T. Chothia。打破一切-物联网设备固件提取技术的系统调查。在CARDIS, 2018年。谷歌学者
  52. 585.
    徐晓军,刘畅,冯倩,尹恒,宋乐,宋黎明。基于神经网络的图形嵌入跨平台二进制代码相似度检测。在计算机与通信安全会议, CCS ' 17,2017。谷歌学者
  53. 591.
    乔纳斯·扎达奇,卢卡·布鲁诺,Aurélien弗朗西隆和大卫·巴尔扎罗蒂。阿凡达:一个支持嵌入式系统固件动态安全分析的框架。在nds 2014, 2014年2月。谷歌学者

版权信息

©作者(s) 2021

开放获取本章根据知识共享署名4.0国际许可协议(http://creativecommons.org/licenses/by/4.0/),它允许以任何媒介或格式使用、共享、改编、分发和复制,只要您适当地注明原作者和来源,提供创作共用许可的链接,并说明是否进行了更改。

本章中的图像或其他第三方材料均包括在本章的创作共用许可中,除非材料的信用额度另有说明。如果材料不包括在本章的创作共用许可中,并且您的预期使用不被法定法规允许或超过允许的使用,您将需要直接获得版权持有人的许可。

作者和联系

  1. 1.EURECOMSophia Antipolis法国
  2. 2.伯明翰大学伯明翰英国
  3. 3.资讯科技学院Jyvaskyla大学Jyvaskyla芬兰

个性化推荐