Binwalk 替代方案

逆向工程 固件
2021-06-22 03:42:28

检查bin固件文件时,Binwalk 是一个非常有用的工具。有时虽然 Binwalk 是空的,需要更多的挖掘才能理解数据。

在某些情况下,是否有 Binwalk 的替代品可能更好用,或者可能是此类工具的商业版本?

4个回答

2020-08:有关更多最新信息,请参阅下面讨论ISAdetectCentrifuge答案


工具本身不如分析方法重要。与其寻找更好或更多的工具,不如寻求开发一种在分析二进制文件时使用的合理方法。

我是一名业余爱好者(一名学生)并且不能声称知道很多,我在 2017 年 3 月左右开始尝试固件分析,所以对我在这里写的内容持保留态度。但是,通过将我处理固件分析挑战的方式基于专业人士的做法,并在分析新的和不熟悉的数据集时借鉴数据科学中采用的方法,即使使用简单的工具,结果通常也很好。你不必相信我的话;随意查看此处提供的固件分析并做出自己的决定。

这里有2个例子:

  1. lzma:无法识别文件格式 [附上详细信息]
  2. 从二进制文件中提取有用信息的方法

以下是一种可能的方法的摘要:

1. 可视化

可视化是确定二进制文件是压缩还是加密的最快方法。如果二进制文件被压缩或加密,则在解压缩/解密之前不能做太多其他事情。请参阅此问题的示例,了解一些技术熟练且经验丰富的人如何浪费时间分析加密的二进制文件却一无所获,仅仅因为他们没有意识到二进制文件实际上已加密:反汇编 VxWorks 固件

使用binvis.iobinwalk -E可视化二进制结构及其熵级别。仅此一项就可以揭示二进制文件的组织方式,以及它是否被压缩/加密。包含代码的区域通常比不包含代码的区域具有更高的熵,这将显示在熵扫描中。数据通常是重复的并且具有低熵。熵级可视化非常有用,因为它可以揭示二进制文件中是否没有目标代码。

2. 探索

一般来说,只有在确定二进制文件中至少有一些可访问的信息之后,才有意义继续前进。盯着加密的 blob 多长时间是合理的?无论如何,在这个时刻可以做几件事:

  1. 执行签名扫描使用 binwalk

  2. 使用binwalk -A. 大多数恶意软件针对 x86 或 x86-64 架构,但据我所知,大多数固件二进制文件针对 MIPS 或 ARM CPU。嵌入式设备有许多不同的架构,例如 PowerPC、AVR、Xtensa、s390、sh4、Sparc 等。除了固件中的目标代码可能针对的所有这些不同的体系结构之外,可能根本没有目标代码存在的情况,因此操作码扫描只能让您到此为止,因为binwalk仅扫描少数体系结构.

    请注意,目前还没有公开可用的工具可以以高准确度识别二进制和连续代码区域中目标代码的存在,而且还可以识别代码的指令集架构 (ISA)。这是研究的主题,也是Praetorian 机器学习挑战赛的一部分代替这样的工具,binwalk -A就差不多了。

  3. strings 经常会出现有趣的数据,而签名扫描不会。

  4. 如果我有理由相信,固件开发人员,其机器使用Unicode编码的字符集,我的补充开发stringsradare2的搜索功能。

  5. hexdump -C 可用于快速探索标头结构(如果存在),以及寻找二进制文件中其他地方的有趣结构

三、分析

在这一点上,已经确定二进制文件包含值得分析的可访问信息。这可以包括有趣的数据结构(例如标头)以及提取的数据(例如内核和文件系统和/或可以反汇编的目标代码)。

对于明文标题结构后跟binwalk未检测到签名的压缩块的情况,十六进制编辑器(例如wxHexEditor)可能非常有用。专业安全研究员@ebux提供了十六进制编辑器如何帮助分析的好例子

如果认为存在目标代码但设备的 CPU/架构未知,则需要在反汇编代码之前识别架构。虽然不是很令人兴奋,但如果开发人员提供技术文档,则此时需要阅读它,不仅要识别 CPU,还要发现固件映像的基地址,以便在识别 ISA 时图像可以使用IDAradare2正确反汇编

识别二进制 ISA 的方法包括从简单的统计方法(例如检查字节 n-gram 频率)到更复杂的基于机器学习的方法(此处详细讨论):

概括

兵工厂:

  • binwalk + 插件
  • binvis.io
  • strings
  • hexdump
  • wxHexEditor
  • radare2
  • IDA
  • 技术参考手册
  • 统计和机器学习

你可以试试binaryanalysis也许它可以帮助

我在 2018 年发布的原始答案现在有些过时了。同时发布了 2 个工具,可以帮助理解二进制文件中的内容。一个工具ISAdetect专门用于识别 CPU 可执行二进制目标中的代码。它使用机器学习来实现这一点。

另一个工具Centrifuge也使用机器学习,但并不专门关注机器代码。相反,该工具旨在帮助分析师识别二进制文件中编码的数据类型(完全公开,我是该工具的创建者)。为此,它提供了许多使用 Python 绘图库将二进制文件中的数据可视化的函数,并通过使用 scikit-learn 的DBSCAN算法实现来查找统计上相似的数据簇Centrifuge 还使用 ISAdetect 的 Web API 来识别在二进制文件中找到的任何机器代码。

以下是 Centrifuge 可以从二进制文件中的数据创建的一些可视化示例:

自读集群

固件机器码

AVR 集群箱线图

从这些图像中可以看出,该工具采用的方法是统计方法。通过对文件中的数据进行统计分析,Centrifuge 能够识别可能存在的数据类型。在撰写本文时,可以识别 3 种不同的数据类型:机器代码、UTF-英语和压缩/加密。

例如,以下是 Centrifuge 分析的固件二进制文件的输出:

Searching for machine code
--------------------------------------------------------------------

[+] Checking Cluster 0 for possible match
[+] Closely matching CPU architecture reference(s) found for Cluster 0
[+] Sending sample to https://isadetect.com/
[+] response:

{
    "prediction": {
        "architecture": "mips",
        "endianness": "little",
        "wordsize": 32
    },
    "prediction_probability": 0.93
}


Searching for utf8-english data
-------------------------------------------------------------------

[+] UTF-8 (english) detected in Cluster 1
    Wasserstein distance to reference: 7.861589780632858


Searching for high entropy data
-------------------------------------------------------------------

[+] High entropy data found in Cluster 2
    Wasserstein distance to reference: 0.4625352842771307
[*] This distance suggests the data in this cluster could be
    a) encrypted
    b) compressed via LZMA with maximum compression level
    c) something else that is random or close to random.

对于上下文,这里是同一个二进制信息的可视化:

固件集群

对于那些感兴趣的人,这里有一个说明如何使用它的笔记本:离心机简介

有一个云版本的 binwalk (binwalk pro),您只需上传固件并解压即可。支持比开源版本更多的文件系统。马车也少。由 binwalk 的创建者 Craig Heffner 开发。