溯源专题 | 通过PE中PDB路径信息进行溯源

admin 2022年12月19日13:04:02评论76 views字数 1095阅读3分39秒阅读模式

引言






PDB(Program Database),即程序数据库文件。面向Windows平台的大多数编译器可以生成PDB文件,这些编译器将有关可执行文件(Portable Executable File,PE文件)的调试信息存储在独立的PDB文件中,这样既缩小了可执行文件的体积又缩短其加载数据所需的时间。

溯源专题 | 通过PE中PDB路径信息进行溯源

由源代码到生成可执行文件需要进行多次处理(源代码 -> 预处理 -> 编译 -> 汇编(生成目标文件) -> 链接 ->可执行二进制文件),可执行文件的代码部分已经都是由机器语言指令组成。

溯源专题 | 通过PE中PDB路径信息进行溯源

而程序员想进行源码级别的调试,就需要调试器通过PDB获取调试所需要的基本信息,包括源文件名、变量名、函数名、类型数据、对应的行号等等;这样程序员便可以将程序的当前执行状态与源代码关联起来。

由于PDB文件和可执行文件是相互独立的,为了方便调试器加载PDB文件,编译器在生成可执行文件时会默认将PDB文件的路径信息存储在可执行文件中;而该PDB路径信息便是本文溯源的重点。

溯源思路






使用PE工具(IDA也可以)查看可执行文件的调试段便可以看到存储PDB的绝对路径:

溯源专题 | 通过PE中PDB路径信息进行溯源

使用十六进制编辑器直接搜索“pdb”关键字也可以得到PDB路径:

溯源专题 | 通过PE中PDB路径信息进行溯源

文件路径具有强烈的独特性,每个人对于文件的存放目录可以说是迥然不同,而对于工程项目文件的存放也是如此。

假如,狼小蛛在一次应急响应中捕获到一个样本PhaseOne.exe,而它的PDB路径为E:CodeOfKindnessFoobarPhaseOneReleasePhaseOne.pdb。

溯源专题 | 通过PE中PDB路径信息进行溯源

半年后,狼小蛛又捕获到一个恶意样本PhaseTwo.exe,发现该样本PDB路径居然是E:CodeOfKindnessFoobar_newPhaseTwoReleasePhaseTwo.pdb。

溯源专题 | 通过PE中PDB路径信息进行溯源

通过逆向分析发现PhaseTwo.exe和半年前的PhaseOne.exe在代码上高度相似,且两者使用了同一个Foobar框架。

溯源专题 | 通过PE中PDB路径信息进行溯源

结合路径特点(X:CodeOfKindneesFoobar_XXXXReleaseXXX.pdb)和样本使用的框架以及代码特点,由此,狼小蛛高度自信地认为这两个样本出自同一组织之手,并为其命名为CodeOfKindness_FB。

防溯源-隐去PDB路径






这里以微软的VS举例:

溯源专题 | 通过PE中PDB路径信息进行溯源

依次点击 

项目 -> 项目具体属性 -> 配置属性 -> 链接器 -> 调试

然后把"生成调试信息"设置为"否",这样在生成可执行文件中就没有PDB路径。注意:缺少PDB文件会导致本地调试器失效,因此在我们只需要为Release版生成的可执行文件设置。

溯源专题 | 通过PE中PDB路径信息进行溯源

原文始发于微信公众号(狼蛛安全实验室):溯源专题 | 通过PE中PDB路径信息进行溯源

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月19日13:04:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   溯源专题 | 通过PE中PDB路径信息进行溯源http://cn-sec.com/archives/1463737.html

发表评论

匿名网友 填写信息