如何在物联网设备中寻找复杂的恶意软件(上)
2021-06-03
来源:嘶吼专业版
智能手表、智能家居设备甚至智能汽车等互联设备纷纷加入物联网生态系统,因此确保其安全性的重要性已显而易见。
众所周知,如今智能设备已成为我们生活中不可分割的一部分,且已经成为网络攻击的对象。针对物联网设备的恶意软件已经存在了十多年。Hydra是第一个自动运行的路由器恶意软件,它于2008年以一种开源工具的形式出现。Hydra是路由器恶意软件的开源原型,Hydra之后不久,针对网络设备的恶意软件也被发现。从那时起,各种僵尸网络家族已经出现并得到广泛传播,其中包括Mirai,Hajime和Gafgyt等家族。
今年5月安全研究团队就发现了一种名为“Kaiji”的恶意软件,该恶意软件专门用于感染基于Linux的服务器和智能物联网(IoT)设备,然后黑客会滥用这些系统发起DDoS攻击。
根据Allot的数据,到2022年,将有120亿台联网设备,这些设备可能会使5G网络的安全过载,并扩大勒索软件和僵尸网络等威胁的范围。
一些已知的主要分布式拒绝服务(DDoS)攻击或拒绝分布式服务都是基于物联网设备的。最著名的例子之一是2016年10月由Mirai恶意软件中的物联网僵尸网络引起的1GbpsDDoS网络攻击。黑客摧毁了DNS提供商的服务器,瘫痪了美国东海岸的大部分互联网,包括Twitter、Netflix和CNN等服务。现在,Mirai的一个新变种BotnetMukashi出现了,主要针对连接到网络的存储设备上的关键漏洞。
随着带宽和5G在运营商网络中产生新的威胁和攻击手段的不断提高,实时的威胁检测显得尤为重要。不幸的是,目前可用的保护笔记本电脑和手机等设备的安全解决方案在保护物联网设备(如监控摄像头和数字信号)方面毫无准备。除了上述恶意软件外,物联网设备(例如Zigbee)中使用的通信协议中还存在一些漏洞,攻击者可以利用这些漏洞来将设备定为目标并将恶意软件传播到网络中的其他设备,类似于计算机蠕虫。
在这项研究中,我们专注于寻找针对物联网设备的低级复杂攻击,特别是,更深入地研究物联网设备的固件,以发现后门植入、启动过程的修改以及对固件不同部分的其他恶意修改。
现在,让我们讨论一下物联网设备的固件结构,以便更好地了解不同的组件。
物联网固件结构
无论物联网设备的CPU架构如何,启动过程都包括以下几个阶段:启动加载程序,内核和文件系统(如下图所示)。当物联网设备打开时,板载SoC (System on Chip) ROM中的代码将控制权传递给启动加载程序,该启动加载程序加载内核,然后内核安装根文件系统。
启动加载程序、内核和文件系统也包含典型的物联网固件的三个主要组件。
物联网启动过程
在物联网设备中有各种各样的CPU架构,因此要想分析和理解固件的不同组件,需要对这些架构以及它们的指令集有良好的了解。物联网设备中最常见的CPU架构是:
· ARM
· MIPS
· PowerPC
· SPARC
可能的攻击场景
通过了解固件结构,我们可以考虑攻击者在部署难以检测的隐身攻击时如何利用各种组件。
启动加载程序是控制系统的第一个组件,因此,针对启动加载程序为攻击者提供了执行恶意任务的绝好机会,这也意味着重新启动后攻击可以保持持久性。
攻击者还可以操纵内核模块,大多数物联网设备使用Linux内核。对于开发人员来说,自定义Linux内核并从中选择所需的内容非常容易,设法访问和操纵设备固件的攻击者也可以添加或编辑内核模块。
继续讨论文件系统,物联网设备中还使用了许多常用文件系统。这些文件系统通常易于使用。攻击者可以从固件中提取、解压缩并安装原始文件系统,添加恶意模块然后使用常用工具再次对其进行压缩。例如,SquashFS是Linux的压缩文件系统,在物联网制造商中非常普遍。使用Linux实用程序“squashfs”和“unsquashfs”挂载或解压缩SquashFS文件系统非常简单。
获取固件
有多种获取固件的方法,有时你希望所获取的固件属于具有相同规格的完全相同的设备。并且你还希望通过某些特定方式将其部署在设备上。例如,你怀疑更新固件所通过的网络已经被破坏,并且考虑固件在供应商服务器和设备之间的转换过程中被操纵的可能性,因此你希望调查更新的固件以验证其完整性。在另一个示例场景中,你可能从第三方供应商购买了设备,并对固件的真实性产生怀疑。
在众多的物联网设备中,制造商没有通过任何方式来访问固件,甚至不进行更新,该设备将在其使用寿命内从制造商处发布并附带固件。
在这种情况下,获取确切固件的最可靠方法是从设备本身提取固件。这里的主要挑战是,此过程需要具有特定领域的知识,以及使用嵌入式系统的专业硬件/软件经验。如果你希望找到针对物联网设备的复杂攻击,那么这种方法也缺乏可扩展性。
在获取物联网固件的各种方法中,最简单的方法是从设备制造商的网站下载固件。但是,并非所有制造商都在其网站上发布其固件。通常,只能通过设备物理界面或用于管理设备的特定软件应用程序(例如移动应用程序)来更新大量物联网设备。
从供应商的网站下载固件时,常见的问题是你可能无法找到特定设备型号的固件的较早版本。我们也不要忘记,在许多情况下,发布的固件二进制文件都是加密的,只能通过设备上安装的较旧的固件模块进行解密。
了解固件
根据维基百科的说法,“固件是一类特定的计算机软件,可为设备的特定硬件提供底层控制。固件既可以为更复杂的设备软件提供标准化的操作环境(允许更多的硬件独立性),也可以为不那么复杂的设备充当设备的完整操作系统,执行所有控制、监控和数据处理功能。”
尽管固件的主要组件几乎总是相同的,但没有针对固件的标准体系结构。
固件的主要组件通常是启动加载程序、内核模块和文件系统。但是在固件二进制文件中可以找到许多其他组件,例如设备树、数字证书以及其他设备特定的资源和组件。
从供应商的网站上检索到固件二进制文件后,我们就可以开始对其进行分析并拆解。考虑到固件的特殊性,其分析非常具有挑战性,并且相当复杂。要获取有关这些挑战以及如何应对这些挑战的更多详细信息,请参阅“物联网固件分析”部分。
在固件中查找可疑元素
提取固件的组件后,你可以开始寻找可疑的模块、代码片段或任何对组件的恶意修改。
首先,很简单的步骤是根据一组YARA规则扫描文件系统内容,这些规则可以基于已知的物联网恶意软件或启发式规则,你也可以使用防病毒扫描程序扫描提取的文件系统内容。
你可以做的其他事情就是在文件系统中查找启动脚本,这些脚本包含每次系统启动时都会加载的模块列表,恶意模块的地址可能是出于恶意目的而被插入到了这样的脚本中。
这样,Firmwalker工具可以帮助扫描提取的文件系统中可能存在漏洞的文件。
另一个需要研究的地方是启动加载程序组件,不过这更具有挑战性。
物联网设备中使用了许多常见的启动加载程序,其中最常见的是U Boot。U Boot具有高度可定制性,这使得很难确定编译后的代码是否已被操纵。使用不常见或自定义的启动加载程序,查找恶意修改会变得更加复杂。