歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

申博_安全工具 申博 95次浏览 已收录 0个评论

你是不是想过歹意软件开辟者在开辟时的最初主意是什么?他们怎样构建他们的东西?他们怎样组织他们的开辟项目?他们运用什么样的盘算机和软件?

经由过程探究歹意软件调试信息,我们尝试回覆个中的一些问题。起首,我们发明歹意软件开辟人员为所开辟的文件夹和代码所起的称号,一般都明白的表清楚明了其所包含的功用。因而,当运用标记调试信息编译歹意软件项目时,这些形貌性称号将显现在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)文件中

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

经由过程Windows资本管理器看到的歹意Visual Studio解决方案HtaDotnet和对应的“Test”项目文件夹,文件夹和文件的称号则明白形貌了它们的功用

歹意软件开辟者然后在默许的“Debug”设置中编译他们的“Test”项目Visual Studio(图3),并将Test.exe和Test.pdb写入子文件夹(图4)。

默许编译设置的Visual Studio输出

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

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途径。

观察歹意软件中的PDB途径

在与APT41有无数衔接的Shadowhammer操纵中,每一个示例都有一个简朴但形貌性的PDB途径:

D:\C++\AsusShellCode\Release\AsusShellCode.pdb

可以看出,这个定名异常有意义。该歹意软件旨在伪装成华硕公司的软件,流传歹意的shellcode,歹意软件开辟人员依据歹意软件自身的功用和角色为该项目定名。

假如我们接收人机协议的商定,迫使开辟人员采纳这些定名商定,那末我们以为这些商定将有用于其他进击者、歹意软件家属和入侵操纵。一些研讨团队喜好从入侵集合猎取看似无害的特征,并揣摸这些特征的进击性。比方什么是一般的,什么是不一般的?什么是环球盛行的进击,什么是稀有的进击?歹意软件开辟者的做法与非歹意软件开辟人员的做法有何差别?我们可以做出哪些假定并加以权衡?

出于好奇心,我们将CodeView调试信息组织调整为正则表达式(图8),并开辟了Yara划定规矩(图9)来观察数据集。这协助我们辨认共性,并使我们可以仅依据PDB途径字符串中的功用检察哪些要挟参与者和歹意软件系列可“检测”。

第一届DC·兰州极客沙龙 9月21日兰州开启安全新征程

网络安全态势 近年来,随着网络在个人、企业、政府及军事等领域的不断更新和应用,网络安全也进入到一个全新的时代,层出不穷的网络攻击,导致出现勒索病毒、信息泄露等一系列安全问题!即在网络安全形势日益严峻的今天,我们必须时刻高举“没有网络安全就没有国家安全”的鲜明旗帜,深入贯彻“中央网络安全和信息化领导小组”提出的建立高素质的网络安全和信息化人才队伍等一系列重要指示,严格遵守国家网络安全法律法规,使安全与发展并存! DEFCON简介 DEFCON•世

可执行文件中PDB7调试信息的perl兼容正则表达式(PCRE),个中以包含特定的症结字符

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

模板Yara划定规矩,用于搜刮与症结字婚配的PDB文件的可执行文件

PDB途径展现:歹意软件定名商定

我们在事宜响应和歹意软件库中观察了1000多万个样本,发明很多罕见的PDB途径症结词好像来自差别的泉源、受害者、受影响地区、受影响行业和参与者效果。为了协助申明歹意软件开辟人员的广泛共性,我们细致引见了一些较强的症结字,以及示例PDB途径,个中包含示意歹意软件家属和要挟组,个中至少有一个示例具有有用的症结字。

请注意,示例途径和示意的歹意软件家属和组是从全部数据集合挑选的,它们不一定互相关联或以其他体式格局关联。这是为了申明PDB途径与症结字的广泛存在,以及歹意软件开辟人员怎样在不斟酌泉源、目的和效果的情况下,终究在定名中运用一些雷同的单词。我们以为,这类共性增加了歹意软件的进击面,并为检测和搜刮带来了新的时机。

PDB途径症结字异常广泛

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

PDB途径中挑选的罕见症结字,包含观察到的歹意组和软件家属和示例

PDB途径展现:可疑的开辟人员环境术语

一般用于形貌歹意软件的症结字的强度足以引发正告,然则PDB途径中另有其他一些罕见的术语或特征,它们可以表明可执行文件是在非企业设置中编译的。比方,任何包含“Users”目次的PDB途径都可以通知你,该可执行文件多是在Windows Vista/7/10上编译的,而且可以不代表“官方”或“贸易”开辟环境。术语“用户”在保真度上比“shellcode”弱很多,以至更低,但正如我们下面所演示的,这些术语确切存在于很多歹意软件中,可以用于微小的检测信号。

PDB途径术语的广泛性

PDB途径中罕见术语的挑选,以及观察到的歹意组和软件家属以及示例

PDB途径展现:探究异常

除了症结字和术语以外,我们还发清楚明了一些不罕见的特征,这些特征,可以对将来的研讨和检测时机感兴趣。

非ascii字符

在我们的数据集合,任何非ascii字符的PDB途径的歹意软件与非歹意软件的比率都很高,此信号的强弱仅仅是由于我们的歹意软件语料库和客户群中存在数据误差。然则,假如此数据误差是一致的,我们可以在PDB途径中运用非ASCII字符作为可执行文件值得进一步检察的信号。在重要运用ASCII的组织中,我们以为这将是一个猛烈的信号。下面我们在Yara中表达这类手艺的逻辑:

rule ConventionEngine_Anomaly_NonAscii
{
    meta:
        author = "@stvemillertime"
    strings:
        $pcre = /RSDS[\x00-\xFF]{20}[a-zA-Z]:\\[\x00-\xFF]{0,500}[^\x00-\x7F]{1,}[\x00-\xFF]{0,500}\.pdb\x00/
    condition:
        (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550 and $pcre
}

单个文件中的多个途径

每一个编译的顺序应当只要一个PDB途径。单个对象中存在多个PDB途径示意该对象具有子文件可执行文件,你可以从中揣摸父对象具有“删除”或“装置”其他文件的才能。虽然作为dropper或装置顺序自身并非歹意的,然则将这些分类应用于文件对象的替换要领可以有助于表现歹意运动。在此示例中,我们还可以运用Yara搜刮此功用:

rule ConventionEngine_Anomaly_MultiPDB_Triple
{
    meta:
        author = "@stvemillertime"
    strings:
        $anchor = "RSDS"
        $pcre = /RSDS[\x00-\xFF]{20}[a-zA-Z]:\\[\x00-\xFF]{0,200}\.pdb\x00/
    condition:
        (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550 and #anchor == 3 and #pcre == 3
}

在调试部份以外

编译文件时,调试信息的条目位于IMAGE_DEBUG_DIRECTORY中。与在单个文件中看到多个PDB途径相似,当我们在没有调试目次的可执行文件中看到调试信息时,可以揣摸该文件具有子文件可执行文件,而且可以具有dropper或装置顺序功用。在此划定规矩中,我们运用Yara的PE 模块来搜检IMAGE_DIRECTORY_ENTRY_DEBUG条目的相对虚拟地点(RVA),假如是零,我们可以假定没有调试条目,因而CodeView PDB途径的存在表明有子文件。

rule ConventionEngine_Anomaly_OutsideOfDebug
{
    meta:
        author = "@stvemillertime"
        description = "Searching for PE files with PDB path keywords, terms or anomalies."
   strings:
        $anchor = "RSDS"
        $pcre = /RSDS[\x00-\xFF]{20}[a-zA-Z]:\\[\x00-\xFF]{0,200}\.pdb\x00/
   condition:
        (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550 and $anchor and $pcre and pe.data_directories[pe.IMAGE_DIRECTORY_ENTRY_DEBUG].virtual_address == 0
}

含有null的PDB途径

在典范的CodeView部份中,我们将看到“RSDS”标头、16字节的GUID、4字节的“age”和PDB途径字符串。但是,我们已肯定了大批的歹意软件样本,个中嵌入的PDB途径地区为空。在这个例子中,我们可以很容易地看到CodeView调试组织,包含header、GUID和age,然后是段的末端的null值。

00147880: 52 53 44 53 18 c8 03 4e 8c 0c 4f 46 be b2 ed 9e : RSDS...N..OF....
00147890: c1 9f a3 f4 01 00 00 00 00 00 00 00 00 00 00 00 : ................
001478a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
001478b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
001478c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................

关于怎样以及为何CodeView PDB途径可以为null,有几种可以性,然则在有意改动的情况下,为了删除东西标记,最简朴的要领是用\x00s手动掩盖PDB途径。经由过程十六进制编辑器手工编辑和掩盖的风险是,如许做很辛苦,而且可以引入其他静态异常,比方校验和毛病。

另一个最简朴的要领是运用一个有用顺序,该有用顺序设计用于删除可执行文件中的调试构件。一个典范的例子是“peupdate”,它不仅用于提取或组织PDB途径信息,还可以从新盘算校验和,并删除Rich标头信息。下面我们将会演示怎样运用peupdate删除PDB途径。

运用peupdate删除歹意软件样本中的PDB途径信息

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

PEview有用顺序中显现的peupdate改动歹意软件,我们看到CodeView部份依然存在,但PDB途径值已被删除

PDB途径异常发生率

歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)

观察到的具有歹意组和软件系列的PDB途径中的异常挑选和示例

鄙人一篇文章中,我们讲接着讨论经由过程PDB途径展现出的异常和其他歹意行动。

本文翻译自:https://www.fireeye.com/blog/threat-research/2019/08/definitive-dossier-of-devilish-debug-details-part-one-pdb-paths-malware.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明歹意软件开发档案解密之依据PDB途径和其他调试细节来推想相干的歹意运动(上)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址