是经验丰富的固件分析师建议的工具和技术的组合。让我们从最全面的固件分析工具Binwalk开始,它扫描固件二进制文件并查找已知模式和签名。它收集了大量物联网设备中使用的各种启动程序和文件系统的签名,也有常见的加密和压缩算法的签名,以及相应的解压和解码例程。Binwalk还能够提取它在固件二进制文件中找到的组件。以下屏幕截图显示了示例固件二进制文件的Binwalk扫描输出:Binwalk扫描输出在此屏幕截图中,Binwalk已找到并打印出头文件、引导加载程序和Linux内核以及文件系统。还有从头文件和组件本身中提取的元数据详细信息,例如每个组件的类型和大小、CRC校验和、重要地址、CPU架构、图像名称等。现在,你可以继续使用Binwalk本身来提取上面的部分,或者根据Binwalk找到的startoffset手动计算大小提取部分。解压固件组件后,您可以继续解压、解压甚至挂载文件系统并开始探索文件系统内容。您还可以在反汇编程序中查看引导加载程序代码,或使用调试器对其进行调试。然而,执行固件分析并不总是那么简单。固件种类繁多,理解其结构和提取组件通常很复杂。让我们仔细看看另一个示例固件并尝试了解它的结构。1.Binwalkfirmware.binBinwalk扫描没有显示任何结果,这意味着Binwalk找不到任何已知的签名。Binwalk扫描输出在本文的示例中,我们可以看到简单的Binwalk扫描并不是很有帮助。但是请注意,还有其他工具和技术可用于了解有关此固件结构的更多信息。2.文件firmware.bin接下来让我们尝试在固件二进制文件上使用Linux文件实用程序。文件实用程序输出文件实用程序将文件类型显示为Targa图像数据,通过查看二进制文件的开头并在Google上搜索Targa图像数据签名,这显然是伪造的。固件二进制文件的第一个字节这是因为固件文件的第一个字节0x01010000与Targa图像数据签名匹配,请参见上面的屏幕截图。3.Binwalk:Efirmware.bin让我们使用Binwalk的另一个功能,检查固件二进制文件的熵。使用“-E”命令选项运行Binwalk会提供固件文件的熵图以及一些其他详细信息,例如下降和上升熵的偏移量。EntropyDetailsEntropyMap熵值接近1表示压缩,较低的熵值表示未压缩和未加密的区域。从上面的屏幕截图可以看出,偏移量55296(0xD800)是高熵部分的开始。还有另一个工具可以帮助可视化二进制文件,使用binvis.io,您可以在两个并排的窗格中查看固件文件的内容及其可视化,不同的部分用不同的颜色表示。可视化由binvis.io创建的固件4.Binwalk:firmware.binBinwalk还可以扫描二进制文件以获取常见的可执行操作码签名。ThefirstfunctionprologuefoundinthefileThelastfunctionprologuefoundinthefile从上面的截图我们可以看出,操作码签名检查的结果其实还是蛮有用的!首先我们可以看到固件属于ARM设备。其次,如果我们考虑第一个和最后一个函数序言签名的偏移量,我们会发现这些是包含代码的固件二进制文件部分。从屏幕截图中,我们还可以看到最后一个函数位于函数0xD600处,也就是熵上升部分之前的0x200字节处。由此,我们可以做出有根据的猜测,这个偏移量可能是引导加载程序代码的结尾和压缩内核模块的开头。5.Hexdump-Chexdump-Cfirmware.bin|grep-C4-e"^\*$"现在我们知道了固件文件中某些组件的大致边界,我们可以通过查看固件文件的实际内容来尝试确认这些固件文件围绕这些区域边界偏移。如果我们通过十六进制转储运行固件文件,并查找仅包含星号“*”的行,我们可以找到编译器为每个固件组件添加的填充。固件二进制文件的内容固件二进制文件其他部分的内容Hexdump实用程序的输出以及之前的发现确认固件二进制文件的这一部分包含我们之前怀疑属于引导加载程序的ARM代码。6.字符串:radix=xfirmware.bin接下来,让我们从固件中提取ASCII字符串及其偏移量。在固件二进制文件中找到的最后一个ASCII字符串查看上面的屏幕截图,有一些与模块入口点相关的字符串很好地表明了所涉及代码的性质。在下面的截图中,我们可以从固件二进制文件的开头看到一些其他有趣的字符串。例如,“MctlApplet.cpp”库名称可用于查找来自同一开发商的其他二进制文件或软件包,并且拥有来自同一供应商的其他固件映像有助于更好地理解二进制结构。同一屏幕截图中另一个有趣的字符串是“NotBootingfromsoftloader”,它可以指示进程的状态或此模块的性质。包含“Assert()”的字符串可以提供有关代码的不同信息。使用断言是固件开发中的常见做法,因为它可以帮助开发人员在开发和生产阶段调试和排除代码故障。找到固件二进制文件中的第一个ASCII字符串7.IDA:parmfirmware.bin如您所见,我们从这个固件二进制文件中收集到了很多有价值的信息,这些信息乍一看似乎相当难以理解。现在让我们使用IDA检查代码,因为这个二进制文件不是带有显示ISA的标准头文件的ELF文件,我们需要明确告诉IDA使用ARM指令集来反汇编代码。IDA中部分函数的反汇编视图上面来自IDA的屏幕截图显示了如何使用在前面的分析步骤中找到的字符串来帮助找到对内核模块入口点的调用。8.dd现在,继续提取固件二进制文件的一部分,我们的分析发现它是引导加载程序模块。9.Qemu从固件二进制文件中提取所有模块(文件系统内容、内核模块和其他组件)后,我们可以使用Qemu运行二进制文件,甚至可以模拟与本机架构不同的文件,并开始与它们交互.总结物联网设备的数量每天都在增加,从工业控制系统、智慧城市和智能汽车到手机、网络设备、个人助理、智能手表和各种各样的智能家电。物联网设备起源于已经存在多年的嵌入式系统,并且由于嵌入式设备软件的不同性质,与通用计算机系统相比,嵌入式设备软件的制造和开发始终具有不同的优先级。这些优先级是由设备本身的有限和特定功能,底层硬件的能力和能力有限,以及开发的代码无法用于后续修改和修改而形成的。然而,物联网设备与传统的嵌入式系统有很大不同。如今,大多数物联网设备都在具有类似于通用计算机系统功能的硬件上运行。随着物联网设备的日益普及,它们现在正在访问和控制我们生活和日常互动的许多方面。物联网设备现在可能为恶意攻击者提供前所未有的机会。这凸显了物联网设备安全的重要性以及围绕该主题进行研究的必要性。好消息是,已经有许多工具和技术可用于协助对这一主题的研究。本文翻译自:https://www.trendmicro.com/en_us/research/20/i/exploitable-flaws-found-in-facial-recognition-devices.html
