本文将介绍恶意软件静态分析的基础知识。静态分析是对程序文件的反汇编代码、图形图像、可打印字符串和其他磁盘资源的分析。它是一种不需要实际运行程序的逆向工程。静态分析技术虽然有其不足之处,但可以帮助我们了解各种恶意软件。通过仔细的逆向工程,您将能够更好地了解恶意软件二进制文件在攻击者击中目标后为攻击者提供的好处,以及攻击者可以隐藏并继续攻击受感染计算机的方式。正如您将看到的,本文将描述和示例相结合,每个部分介绍一种静态分析技术,然后说明其在实际分析中的应用。本文中的代码和数据可以通过在公众号后台回复恶意软件下载。您将在数据目录/ch1中找到本文示例中使用的恶意软件样本。为了演示本文中讨论的技术,我们在演示中使用了ircbot.exe,这是一个Internet中继聊天(IRC)机器人,也是每天广泛监控的最常见的恶意软件示例之一。严格来说,这个程序被设计为在连接到IRC服务器时驻留在目标计算机上。ircbot.exe控制目标后,攻击者可以通过IRC控制目标计算机并执行控制命令,如开启网络摄像头偷拍视频、提取目标地理位置和桌面截图、从目标计算机中提取相关文件等。目标机。01MicrosoftWindowsPortableExecutableFileFormat要进行恶意软件静态分析,需要了解WindowsPE文件格式,它描述了当今Windows程序文件如.exe、.dll和.sys的结构,并定义了它们的存储方式.数据的方式。PE文件包含x86指令、图像和文本等数据以及程序运行所需的元数据。PE格式最初设计用于执行以下操作。1)告诉Windows如何将程序加载到内存中PE格式描述了文件的哪些块应该加载到内存中,以及加载到哪里。它还会告诉您Windows应在程序代码的何处开始执行该程序,以及应将哪些动态链接的代码库加载到内存中。2)为正在运行的程序提供执行过程中可能使用的媒体(或资源)。这些资源可能包括字符串,例如GUI对话框或控制台输出的字符串,以及图像或视频。3)提供安全数据,例如数字代码签名Windows使用这些安全数据来确保代码来自受信任的来源。PE格式通过利用图1-1中所示的一系列结构来实现这一点。▲图1-1PE文件格式如图1-1所示,PE文件格式包括一系列的文件头,用来告诉操作系统如何将程序载入内存。它还包括一系列用于包含实际程序数据的段(section)。Windows将这些部分加载到内存中,以便它们在内存中的偏移量与它们在磁盘上出现的位置相对应。让我们更详细地探索这个文件结构,从PE头开始。我们将跳过DOS标头的讨论,它是1980年代微软DOS操作系统的遗留物,仅出于兼容性原因而存在。1.PE头如图1-1底部所示。DOS头上面是PE头,定义了程序的一般属性,比如二进制代码、图像、压缩数据等程序属性。它还告诉我们该程序是为32位还是64位系统设计的。PE标头为恶意软件分析人员提供基本但有用的上下文信息。例如,标头包含一个时间戳字段,该字段给出了恶意软件作者编译文件的时间。通常恶意软件作者会用伪造的值替换此字段,但有时恶意软件作者会忘记替换而发生这种情况。2.OptionalheadersOptionalheaders实际上在今天的PE可执行文件中无处不在,恰恰与它们的名字所暗示的相反。它定义了程序入口点在PE文件中的位置,指的是程序加载后运行的第一条指令。它还定义了Windows在加载PE文件、Windows子系统、目标程序(例如WindowsGUI或Windows命令行)时加载到内存中的数据大小,以及有关该程序的其他高级详细信息。因为程序的入口点告诉逆向工程师从哪里开始逆向工程,所以这个头信息对逆向工程师来说是无价的。3.节头节头描述了PE文件中包含的数据节。PE文件中的section是操作系统加载程序时会映射到内存中的一段数据,或者包含了如何将程序加载到内存中的指令。换句话说,一个部分是磁盘上的一个字节序列,它要么在内存中变成一串连续的字节,要么告诉操作系统有关加载过程的某些方面。节头还告诉Windows应该授予该节什么权限,例如程序在执行时是否应该是可读的、可写的或可执行的。例如,包含x86代码的.text部分通常标记为可读和可执行,但不可写,以防止程序代码在执行期间意外修改自身。图1-1描绘了许多部分,例如.text和.rsrc。执行PE文件时,它们被映射到内存中。.reloc部分等其他特殊部分没有映射到内存中,我们也会讨论这些部分。让我们浏览一下图1-1中所示的部分。1).textsection每个PE程序在其sectionheader中至少包含一个标记为可执行的x86代码段;这些部分几乎总是命名为.text。2).idata部分。idata段,也称为导入段,包含导入地址表(IAT),列出了动态链接库及其函数。IAT是最重要的PE结构之一,在PE二进制文件的初始分析期间需要查看,因为它指出程序调用的库,但是这些调用反过来可能会揭示恶意软件的高级功能。3)数据段PE文件结构中的数据段可能包括.rsrc、.data、.rdata等段,存放鼠标光标图像、按钮图标、音频等程序使用的媒体。例如,图1-1中的.rsrc部分包含程序用来将文本呈现为字符串的可打印字符串。.rsrc(资源)部分中的信息对恶意软件分析人员非常重要,因为通过检查PE文件中的可打印字符串、图形图像和其他资产,他们可以获得有关文件功能的重要线索。在第03节中,您将学习如何使用icoutils工具包(包括icotool和wrestool)从恶意软件二进制文件的资源部分中提取图形图像。然后,在第4节中,您将学习如何从恶意软件资源部分中提取可打印的字符串。4)..relocsectionPEbinary的代码不是位置无关的,这意味着如果它从预期的内存位置移动到新的内存位置,将无法正确执行。.reloc通过允许移动代码而不破坏它来解决这个问题。如果PE文件的代码已被移动,它会告诉Windows操作系统在文件代码中进行内存地址转换,以便代码仍然可以正确运行。这些转换通常涉及添加或减去内存地址的偏移量。02使用pefile解析PE文件格式由EroCarerra编写和维护的Python模块pefile已经成为解析PE文件的行业标准恶意软件分析库。在本节中,我将向您展示如何使用pefile来解析ircbot.exe。清单1-1假定ircbot.exe已经在您当前的工作目录中。输入以下命令安装pefile库,以便我们可以在Python中导入它:$pipinstallpefile现在,使用清单1-1中的命令启动Python,导入pefile模块,并使用pefile打开和解析PE文件ircbot。EXE文件。代码清单1-1加载pefile模块并解析PE文件(ircbot.exe)$python>>>importpefile>>>pe=pefile.PE("ircbot.exe")我们实例化pefile.PE,它是PE的实现模块核心类。它解析PE文件,以便我们可以查看它们的属性。通过调用PE构造函数,我们加载并解析指定的PE文件,在本例中为ircbot.exe。现在我们已经加载并解析了这个文件,运行清单1-2中的代码以从ircbot.exe的pe字段中提取信息。代码清单1-2遍历PE文件的各个部分并打印有关它们的信息(section.Misc_VirtualSize),section.SizeOfRawData)清单1-3显示了打印输出的内容。代码清单1-3使用Python的pefile模块从ircbot.exe中提取部分数据如代码清单1-3所示,我们从PE文件的五个不同部分提取数据:.text、.rdata、.data、.idata和.reloc。输出以五元组的形式给出,每个提取的PE部分一个元素。每行的第一个条目标识PE部分。(你可以忽略这一系列的\\x00空字节,它们只是C风格的空字符串终止符。)其余的字段告诉我们,一旦每个部分被加载到内存中,它的内存利用率将是多少,并且一次已加载,将在内存中找到它。比如0x1000就是加载这些section的虚拟内存地址的基地址,也可以认为是section的内存地址的基地址。virtualsize字段中的0x32830指定了section加载后需要的内存大小。第三个字段的207360表示该段将在该内存块中占用的数据量。我们可以使用它来列出二进制文件将加载的DLL文件,以及它将在这些DLL文件中进行的函数调用,而不是使用pefile来解析程序的节。我们可以通过镜像(转储)PE文件的IAT来做到这一点。清单1-4展示了如何使用pefile来镜像ircbot.exe的IAT。代码清单1-4从ircbot.exe中提取导入信息$pythonpe=pefile.PE("ircbot.exe")forentryinpe.DIRECTORY_ENTRY_IMPORT:printentry.dllforfunctioninentry.imports:print'\t',function.name代码清单1-4生成清单1-5中显示的输出(为简洁起见被截断)。清单1-5ircbot.exe的IAT表内容,其中显示了该恶意软件使用的库函数。如清单1-5所示,此输出对于恶意软件分析很有价值,因为它列出了恶意软件声明和将引用的大量函数。例如,输出的前几行告诉我们恶意软件将使用WriteFile写入文件,使用CreateFileA打开文件,并使用CreateProcessA创建一个新进程。虽然这些只是有关恶意软件的基本信息,但它们是了解恶意软件更详细行为的开始。03检查恶意软件的图像要了解恶意软件是如何设计来欺骗其目标的,让我们看看它在其.rsrc部分中包含的图标。例如,恶意软件二进制文件通常旨在伪装常用软件(如Word文档、游戏安装程序和PDF文件)的图标,以诱使用户单击它们。您还可以在恶意软件中找到攻击者自己感兴趣的程序图像,例如攻击者运行以远程控制受感染机器的网络攻击工具和程序。回到我们的样本图片分析,你可以在本文的数据目录中找到这个名为fakepdfmalware.exe的恶意软件样本。此样本使用Adob??eAcrobat图标诱使用户认为它是Adob??eAcrobat文档,而实际上它是恶意PE可执行文件。在我们使用Linux命令行工具wrestool从fakepdfmalware.exe二进制文件中提取图像之前,我们首先需要创建一个目录来保存我们将提取的图像。清单1-6展示了如何完成所有这些。代码清单1-6从恶意软件样本中提取图像的Shell命令$mkdirimages$wrestool-xfakepdfmalware.exe-output=images$icotool-x-oimagesimages/*.ico我们首先使用mkdirimages创建一个目录来保存提取的图像。接下来,我们使用wrestool将fakepdfmalware.exe中的图片资源提取(-x)到/images目录下,然后使用icotool将Adobe中.ico图标格式的所有资源提取(-x)并转换(-o)为.png图形,以便我们可以使用标准图像浏览工具查看它们。如果您的系统上没有安装wrestool,您可以从这里下载它:http://www.nongnu.org/icoutils/使用wrestool将目标可执行文件中的图像转换为PNG格式后,您可以编辑您喜欢的图像,并查看各种分辨率的Adob??eAcrobat图标。正如我在此处给出的示例所示,从PE文件中提取图像和图标相对简单,并且可以快速揭示有关恶意软件二进制文件的有趣且有用的信息。同样,我们可以轻松地从恶意软件中提取可打印的字符串以获取更多信息,我们接下来将这样做。04用于检查恶意软件的字符串字符串是程序二进制文件中的可打印字符序列。恶意软件分析师通常依靠恶意样本中的字符串来快速了解其中可能发生的事情。这些字符串通常包括用于下载网页和文件的HTTP和FTP命令、告诉您恶意软件连接到的地址的IP地址和主机名,以及类似信息。有时,即使是用于编写字符串的语言也有可能暗示恶意软件二进制文件的来源国家/地区,尽管这可能是伪造的。您甚至可以在字符串中找到一些文本,用网络语言解释恶意二进制文件的用途。该字符串还可以揭示有关二进制文件的更多技术信息。例如,您可能会找到有关用于创建二进制文件的编译器、用于编写二进制文件的编程语言、嵌入式脚本或HTML的信息。虽然恶意软件作者可以混淆、加密和压缩所有这些痕迹,但即使是复杂的恶意软件作者也经常暴露并留下一些痕迹,因此在分析恶意软件时,镜像字符串的仔细检查尤为重要。1、使用字符串程序查看文件中所有字符串的标准方式是使用命令行工具strings,使用语法如下:$stringsfilepath|less该命令将文件中的所有字符串打印到逐行终端。添加|末尾的less防止字符串在终端上被跨越。默认情况下,strings命令查找所有最小长度为4字节的可打印字符串,但您可以设置不同的最小长度并更改命令手册中列出的各种其他参数。我建议只使用默认的最小字符串长度4,但您可以使用-n选项更改最小字符串长度。例如,“string-n10filepath”将只提取最小长度为10个字节的字符串。2.分析镜像字符串既然我们镜像了恶意软件程序的可打印字符串,那么挑战就是理解这些字符串的含义。例如,假设我们将ircbot.exe中的字符串镜像到ircbotstring.txt文件中,我们在本文前面使用pefile库探索过该文件,如下所示:$stringsircbot.exe>ircbotstring.txtircbotstring。txt的内容包含数千行文字,但其中一些应该突出显示。例如,清单1-7显示了从字符串图像中提取的一系列以单词DOWNLOAD开头的行。清单1-7。显示恶意软件可以将攻击者指定的文件下载到目标计算机的字符串输出这些行表明ircbot.exe将尝试将攻击者指定的文件下载到目标计算机。让我们尝试分析另一个。清单1-8中所示的字符串镜像表明ircbot.exe可以充当Web服务器,在目标机器上侦听来自攻击者的连接。清单1-8显示恶意软件具有攻击者可以连接到的HTTP服务器字符串输出。清单1-8显示了ircbot.exe用于实现HTTP服务器的各种HTTP样板。此HTTP服务器可能允许攻击者通过HTTP连接到目标计算机以发出命令,例如截取受害者桌面的屏幕截图并将其传回给攻击者的命令。我们在整个代码清单中看到了HTTP功能的证据。例如,从Internet资源请求数据的GET方法。HTTP/1.0200OK这一行是一个返回状态码200的HTTP字符串,表示HTTP网络事务运行良好,Server:myBot表示HTTP服务器的名字是myBot,是一个内置的HTTP服务器附加到ircbot.exe。所有这些信息都有助于了解和阻止特定的恶意软件样本或恶意活动。例如,知道恶意软件样本有一个HTTP服务器,当您连接到它时会输出特定的字符串,您就可以扫描网络以识别受感染的主机。05总结在本文中,您对静态恶意软件分析有一个大致的了解,静态恶意软件分析涉及在不实际运行恶意程序的情况下检查恶意程序。您了解了PE文件格式,它为Windows操作系统定义了.exe和.dll文件,以及如何使用Python库pefile来解析真实世界的恶意软件ircbot.exe二进制文件。您还可以使用图像分析和字符串分析等静态分析技术从恶意软件样本中提取更多信息。
