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

在某些情况下,Binwalk是否有其他替代方法可能会更好地工作,或者可能是商业版本这样的工具?

评论

Binwalk的弱点是它基于签名。您寻求什么样的功能?代码段检测?可视化? ISA识别?人们需要利用多种工具来理解未知的二进制文件。没有单一的工具可以完成所有工作,有时二进制文件中可用的信息很少,以至于用任何工具都做不了什么。

@SYS_V感谢您提出这些不同的阶段,如果您详细介绍它们并提及可以在这些阶段中使用的工具,我会选择它作为正确的答案

这出现在我今天的Twitter feed中:github.com/attify/firmware-analysis-toolkit

@SYS_V Binwalk的弱点是它基于签名。出于好奇,如果您想重新编写binwalk,您认为Binwalk缺少哪些功能并将实现该功能,以及基于签名的方法的反面是什么?

@ user22363为了回答您的问题,我设计了一个名为离心机的工具,该工具使用统计信息和机器学习算法执行分析,而不是扫描签名。

#1 楼

2020-08:有关最新信息,请参阅下面讨论ISAdetect和离心机的答案

工具本身不如分析方法重要。而不是寻找更好或更多的工具,而是寻求开发一种在分析二进制文件时采用的合理方法。
我是一名业余爱好者(学生),不能声称了解太多,因此开始尝试固件分析2017年3月,请带着我在这里写的一丁点盐。但是通过将我处理固件分析挑战的方法立足于专业人员的工作方式,并在分析新的和不熟悉的数据集时借鉴数据科学中采用的方法,即使使用简单的工具,结果通常也不错。您不必相信我的话;请随意查看此处提供的固件分析并自行确定。
这里有两个示例:

lzma:无法识别文件格式[附上详细信息]
提取方法二进制文件中的有用信息
这里是一种可能方法的摘要:
1。可视化
可视化是确定二进制文件是压缩还是加密的最快方法。如果二进制文件经过压缩或加密,则在对其进行解压缩/解密之前,将无法执行其他任何操作。请参见此问题的示例,该示例说明某个熟练的技术人员和经验丰富的人如何浪费时间分析加密的二进制文件而一无所获,仅仅是因为他们没有意识到二进制文件实际上是加密的:拆卸VxWorks固件
使用binvis.io和binwalk -E可视化二进制文件的结构及其熵级别。仅此一项就可以揭示二进制文件的组织方式,以及二进制文件是否经过压缩/加密。包含代码的区域通常比不包含代码的区域具有更高的熵,这将在熵扫描中显示。数据通常是重复的,并且熵低。熵级可视化非常有用,因为它可以揭示二进制文件中是否没有目标代码。
2。探索
通常,只有在建立了二进制文件之后,至少存在一些可访问的信息才有意义。盯着一个加密的blob合理多长时间?无论如何,在此时此刻可以完成几件事:


使用binwalk执行签名扫描


使用binwalk -A执行操作码扫描。据我所知,大多数恶意软件都针对x86或x86-64体系结构,但是大多数固件二进制文件针对MIPS或ARM CPU。嵌入式设备有许多不同的体系结构,例如PowerPC,AVR,Xtensa,s390,sh4,Sparc等。除了固件中的目标代码可能针对的所有这些不同体系结构之外,可能根本没有目标代码的情况,所以操作码扫描只会帮助您解决问题,因为binwalk仅扫描了少数几个
请注意,目前没有公开可用的工具可以高精度地识别二进制和连续代码区域中目标代码的存在,还可以识别指令集体系结构(ISA)代码。这是研究的主题,也是Praetorian机器学习挑战的一部分。使用binwalk -A代替这种工具就可以了。


strings通常会显示有趣的数据,而签名扫描则不会。


如果我有理由认为该固件是由使用Unicode编码字符集的计算机的开发人员开发的,则可以在strings的搜索功能中补充radare2


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


3。分析
至此,已经确定二进制文件包含值得分析的可访问信息。这可以包括有趣的数据结构(例如标头)以及提取的数据(例如可以反汇编的内核和文件系统和/或目标代码)。
对于存在明文标头结构后紧跟压缩的情况对于binwalk不能检测到签名的块,十六进制编辑器(例如wxHexEditor)可能非常有用。专业的安全研究人员@ebux提供了十六进制编辑器如何帮助分析的好例子:

解压缩IpCam固件-Binwalk提取问题
将blob解码为原始文件

如果认为存在目标代码,但不知道设备的CPU /体系结构,则需要先确定体系结构,然后才能分解代码。虽然不是很令人兴奋,但是如果开发人员提供了技术文档,那么就需要在此处进行阅读,不仅是识别CPU,而且还需要发现固件映像的基址,以便在识别ISA时就可以了。可以使用IDA或radare2正确分解图像。
识别二进制ISA的方法从简单的统计方法(例如检查字节n-gram频率)到更复杂的基于机器学习的方法,在此进行详细讨论:

实现固件的自动分类
嵌入式设备的图像和识别
使用机器对目标代码进行自动分类
学习

摘要
Arsenal:


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


评论


谢谢!我希望这对很多刚开始的人有帮助

– pzirkind
18年1月24日在13:57

@pzirkind没问题,我也希望如此。发展最快的方法是亲身体验。祝好运。

– julian♦
18年1月24日在13:58

#2 楼

您可以尝试二进制分析,也许可以帮忙

评论


“可能”如何提供帮助?与binwalk相比有什么优势?

–杂件
18年1月24日在10:10

优点是它具有自己的“魔术字节”列表

– Vido
18年1月24日,11:52



#3 楼

有一个云端版本的binwalk(binwalk pro),您可以在其中上传固件并解压缩。支持比开放源代码版本更多的文件系统。越野车也更少。由binwalk的创建者Craig Heffner开发。

#4 楼

我在2018年发布的原始答案现在已经有些过时了。同时发布了2个工具,可帮助您了解二进制文件中的内容。 ISAdetect是一种工具,专门用于识别CPU中可执行二进制目标中的代码。它使用机器学习来实现。
另一个工具Centrifuge也使用机器学习,但并不专门关注机器代码。而是,该工具旨在帮助分析人员确定二进制文件中编码了哪些类型的数据(完整披露,我是该工具的创建者)。为此,它提供了许多功能,可使用Python绘图库可视化二进制文件中的数据,并通过使用scikit-learn的DBSCAN算法实现来找到统计上相似的数据簇。 Centrifuge还使用ISAdetect的Web API来识别二进制文件中找到的所有机器代码。
以下是Centrifuge可以从二进制文件中的数据创建的可视化示例:



从这些图像中可以看到,该工具采用的方法是统计方法。通过对文件中数据的统计分析,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.

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

对于有兴趣的人,这是一个笔记本电脑,解释如何使用它:离心机简介。

评论


感谢对此问题的更新,这非常有用

– pzirkind
8月19日13:34