我们如何确定恶意软件是相关的?

逆向工程 恶意软件
2021-07-02 21:28:23

我很想知道研究人员如何知道不同的恶意软件何时相关。例如:Stuxnet、Flame 或 Duqu,被告知由同一组编写。有谁知道他们是怎么算出来的?

我读了一些文章,但它们不是很具体。他们只说他们很相似。是否有您可以分辨的签名,或相同的风格或语言或其他什么?

什么迹象表明 2 个恶意软件是相关的或来自同一个人???

2个回答

归因很难。但是,您可以在这里和那里看到一些特定的代码片段(在汇编中),它们告诉您,这些代码可能是由同一团队编写的。就我自己而言,我认为图匹配是一种非常值得信赖的方法,以确定恶意软件是否由同一团队创建,以及我通常为此目的使用的方法。

基本上,图形匹配的工作原理是这样的:如果文件完全解包后,两个或更多二进制文件具有非常相似的调用图和非常相似的控制流图,只有少数函数不同,或者只有一个特定函数中的一些基本块,或者只是例如,某个基本块中的一些指令,这些文件可能是由同一团队或作者创建的,并且很可能是同一软件的新版本。除非我们谈论的是使用ThemidaVMProtect等工具创建的虚拟机,否则这通常是正确的。

这个想法激发了由 Zynamics 创建的(不再公开的)产品 VxClass 或我自己编写CAMAL集群引擎(示例在这里这里)。如果您更喜欢阅读开源方法来完成此操作,我建议您查看GCluster这是一个基于命令行的工具,使用Pyew API 对 2 或各种解压缩的恶意软件文件(PE 和 ELF 可执行文件)进行聚类,以确定它们的相似程度。

正如@Mick 所指出的,您还可以使用基于二进制内容(字节)的 Yara 签名或模糊哈希。但是,它们可能会产生大量误报(您正在考虑字节并查找字节流,而不是像图形匹配那样比较可执行文件的结构)。

许多人使用Yarassdeep等工具来查找二进制文件之间的共性。通常,他们正在寻找已知的代码重用,这表明恶意软件可能共享了部分或全部相同的源代码。

例如,如果我编写一个函数将 shellcode 注入进程,它可能与尝试相同任务的其他人至少略有不同。因此,如果研究人员在多个二进制文件中发现我编译的代码,则怀疑我的代码被重用是合理的。