欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

恶意软件开发档案解密之根据PDB路径和其他调试细节来推测相关的恶意活动(上)

来源:本站整理 作者:佚名 时间:2019-09-16 TAG: 我要投稿


你是否想过恶意软件开发者在开发时的最初想法是什么?他们如何构建他们的工具?他们如何组织他们的开发项目?他们使用什么样的计算机和软件?
通过探索恶意软件调试信息,我们尝试回答其中的一些问题。首先,我们发现恶意软件开发人员为所开发的文件夹和代码所起的名称,通常都明确的表明了其所包含的功能。因此,当使用符号调试信息编译恶意软件项目时,这些描述性名称将显示在PDB路径中。通过调试信息可以让我们深入了解恶意软件开发环境,虽然这些信息不显眼,但只要最够细心,我们可以使用PDB路径和其他调试细节来检测相关的恶意活动。
人机协议
数字存储系统彻底改变了我们的世界,但为了利用我们存储的数据并以有效的方式检索它,我们必须合理地组织它。为此,用户要仔细构建目录,并为文件和文件夹提供唯一的描述性名称。用户通常根据文件内容命名文件夹和文件,而计算机会强制用户根据数据类型,功能和目的标记和注释其数据。这种人机协议意味着大多数存储的数数据会具有一些明确的描述文件,同样,恶意文件也不例外。对于PDB路径尤其如此,它是恶意软件中描述开发环境的工具标记。
PDB
在编译时生成的程序数据库(PDB)文件,通常称为“符号文件”,它会存储关于程序的单个构建的调试信息。 PDB可以存储符号、地址、函数和资源的名称以及可以帮助调试程序找到异常或错误的确切来源的其他信息。
恶意软件就是软件,恶意软件开发人员就是软件开发人员。与任何软件开发人员一样,恶意软件开发者通常必须调试他们的代码,有时还必须在开发过程中创建PDB。如果他们没有花时间调试他们的恶意软件,他们的恶意软件就有可能无法在目标主机上正常运行,或者无法成功地与他们的恶意软件进行远程通信。
PDB路径是如何生成的?
但PDB如何创建并连接到程序呢?让我们通过恶意软件开发人员的视角来研究一个PDB路径的形成(以Smiller为例)。
Smiller有很多编程项目,并在他的计算机上以适当标记的文件夹结构进行组织。此项目用于嵌入在HTML应用程序(HTA)文件中的shellcode加载程序,可以看出,开发人员把它很有逻辑地存储在文件夹中:
D:\smiller\projects\super_evil_stuff\shellcode\

简单的“Test”项目代码文件“Program.cs”,它将一段shellcode和一个可执行的启动程序嵌入到HTML应用程序(HTA)文件中

通过Windows资源管理器看到的恶意Visual Studio解决方案HtaDotnet和对应的“Test”项目文件夹,文件夹和文件的名称则明确描述了它们的功能
恶意软件开发者然后在默认的“Debug”配置中编译他们的“Test”项目Visual Studio(图3),并将Test.exe和Test.pdb写入子文件夹(图4)。

默认编译配置的Visual Studio输出

Test.exe和Test.pdb被写入代码项目文件夹的默认子文件夹
在Test.pdb文件(图5)中,引用了源代码文件的原始路径以及用于调试的其他二进制信息。

Test.pdb包含二进制调试信息和对原始源代码文件的引用,以便在调试时使用
在编译期间,链接程序通过在IMAGE_DEBUG_DIRECTORY中添加一个指定调试信息类型的条目,将PDB文件与构建的可执行文件相关联。在本文的示例中,调试类型是CodeView,因此PDB路径嵌入在文件的IMAGE_DEBUG_TYPE_CODEVIEW部分下。这使调试器能够在调试Test.exe时找到正确的PDB文件Test.pdb。

PEview实用程序中显示的Test.exe,它可以轻松地从可执行文件的IMAGE_DEBUG_TYPE_CODEVIEW部分解析出PDB路径
CodeView调试信息中的PDB路径
CodeView结构
调试信息的确切格式可能因编译器和链接器以及软件开发工具的现代化程度而异。CodeView调试信息存储在IMAGE_DEBUG_TYPE_CODEVIEW下面的结构中:

图7:CodeView调试目录信息的结构
完整与部分PDB路径
通常有两种CodeView PDB路径,一种是完全限定的目录路径,另一种是部分限定的目录路径,它们只指定PDB文件的名称。在这两种情况下,都包含扩展名为. PDB的PDB文件的名称,以确保调试器为程序找到正确的PDB。
部分限定的PDB路径将只列出PDB文件名,例如:
Test.pdb
完全限定的PDB路径通常以卷驱动器号和PDB文件名的目录路径开头,例如:
D:\smiller\projects\super_evil_stuff\shellcode\Test\obj\Debug\Test.pdb
通常,本机Windows可执行程序使用部分限定的PDB路径,因为许多调试PDB文件在Microsoft公共符号服务器上是公开可用的,因此在符号路径(PDB路径)中不需要完全限定的路径。在本文中,我们将主要关注完全限定的PDB路径。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载