30 秒看懂
FireEye 的 FLARE 团队创始人 Michael Sikorski 讲解如何通过静态分析、隔离运行和反汇编揭示恶意软件的行为。他以 WannaCry 和 NotPetya 为例,说明分析师如何找到减缓特定攻击的传播的方法,并判断受损文件是否能够恢复。
- 1从可观察的线索入手哈希值、字符串、文件行为和网络流量帮助分析师在深入指令之前找到方向。
- 2判断能否恢复逆向分析可以揭示加密错误、内嵌密钥,或连攻击者也无法挽回的损坏。
- 3WannaCry 的域名检查注册一个程序查询的域名,让原始样本走向退出分支,为防守方争取了时间。
- 4NotPetya 的标记文件存在性检查提示了一种针对特定样本的临时防护措施。
要点建议
- 静态和动态分析能提供有用线索,但擅长逃避检测的恶意软件可能需要代码层面的逆向分析。
- 密钥的处理方式和实现错误决定了加密文件能否恢复。
- WannaCry 的域名检查提供了中断最初那波传播的方法,但变种可以修改这一机制。
- NotPetya 的破坏性行为使支付赎金无法可靠地恢复受影响的系统。
- 文件标记可以暂时保护系统免受所分析的特定 NotPetya 样本侵害,但并非适用于所有变种。
按章节阅读整理后的全文
为什么勒索软件值得关注
Sikorski 将 Maersk 和 Baltimore 遭遇的中断与日常生活联系起来,并介绍事件响应工作。
开场幻灯片上的船属于集装箱航运公司 Maersk。勒索软件瘫痪了它的货物运输能力,直到系统重建才恢复,损失约 3 亿美元。这不只是新闻故事:Baltimore 遭到攻击后,我也无法在线支付房产税和水费。这些事件不仅影响直接受害的组织,也影响普通人的生活。
在分析勒索软件和查看真实的汇编代码之前,我想先介绍我的团队做什么、恶意软件分析如何进行,以及它为什么对安全很重要。我是一名恶意软件分析师、研究员、作者和教师。我在 Mandiant 工作多年,起初从事各种安全咨询,后来专注于事件响应。
事件响应就是在组织遭到入侵后受邀介入,处理留下的混乱。我们尤其熟悉中国的攻击团体及其工具和方法。《纽约时报》遭入侵时,我们的知识帮助我们高效地展开调查;大约同时,Mandiant 发布了 APT1 报告,讲述中国的网络间谍活动和知识产权窃取。
FireEye 收购了 Mandiant。我的恶意软件团队通过拆解样本、解释其工作方式,为事件响应和情报工作提供支持。团队最初只有两名逆向工程师,后来扩大到约 50 人,每年分析数千个样本。我们投入技术和效率改进,与社区分享工具,还举办逆向工程竞赛,数千名参赛者中只有一小部分能够完成。
恶意软件分析师的工具箱
静态和动态分析可以揭示特征,隔离环境和逆向分析则能发现基本测试中隐藏的行为。
恶意软件分析是一项专业技能,需要花时间掌握,也需要不断练习才能保持水平。这是一场猫捉老鼠的游戏:攻击者故意修改软件,干扰我们的分析工具。有一段时间,我们发现恶意软件会寻找 FLARE 工具,找到后便改变自身行为。
恶意软件分析不同于取证和事件响应,但能为两者提供依据。如果我们发现恶意软件如何在重启后继续存在,响应人员就可以在整个企业中搜索这一特征并将其清除。工作范围从基本的静态和动态分析,一直到深入得多的逆向工程。
基本静态分析不运行文件:我们将哈希值与已知样本比较,并提取可能暴露域名或其他线索的字符串。攻击者常常对字符串进行编码,直到运行时才解码,因此我们的 FLOSS 工具可以帮助解码。文件格式信息也能提供更多关于样本的背景。
基本动态分析会运行样本,同时监测主机和网络,查看它安装了什么、与哪里通信。这很危险,因此隔离至关重要。FakeNet 在不让恶意软件连接真实互联网的情况下模拟网络服务,使其以为已经访问了网站并继续运行。
沙箱将同样的基本思路自动化:它可以打开附件和链接,观察可疑行为并隔离邮件。沙箱也可以检查网络流量和文件。我们使用虚拟机和快照,让样本破坏环境之后可以恢复;我们的 FLARE VM 发行版集成了 Windows 恶意软件分析工具。
基本分析有局限。一个样本可能先休眠五天才开始作恶,而邮件沙箱不可能等那么久才投递邮件。为了发现这种延迟行为,我们会拆解可执行文件、检查指令,有时还会通过调试观察其内部状态。
编译器把源代码转换为机器指令。反汇编器将这些指令呈现为汇编代码;反编译器试图恢复更高层次的表示,但依我的经验,它无法可靠地还原整个复杂的原始程序。分析师花大量时间阅读汇编代码,弄清它在做什么。
IDA Pro 和 NSA 的开源工具 Ghidra 等工具将控制流显示为图,方便我们浏览指令。在一个例子中,我能认出一条 switch 语句:四个方框代表不同输入值对应的路径。这种视图把大量指令变成一道可以追踪的谜题。
金融恶意软件与勒索软件
案例涵盖支付卡数据窃取和勒索软件。实际问题包括如何遏制传播以及能否恢复文件。
金融恶意软件有很多形式。僵尸网络可以利用他人的计算能力挖掘加密货币或窃取钱包。银行木马会干扰浏览器以获取银行信息;银行卡数据抓取程序则从内存中寻找支付数据,有时在中央服务器上抓取,而不必逐个攻击终端。
我们还在 ATM 和销售点终端上见过恶意软件。在一次零售商调查中,我们清理了受感染的终端,却发现新开的门店不断感染。攻击者破坏了用于部署新门店的标准镜像,因此零售商每次都在无意中自行安装恶意软件。
以牟利为目的的攻击背后的参与者也发生了变化。除了犯罪团伙,我们还看到与国家有关联的行为者寻求资金。我以朝鲜和俄罗斯为例,说明一些国家的行动除了间谍活动和长期网络访问,也包括通过窃取获取收入。
勒索软件是用于网络敲诈的恶意软件:它可能加密文件或锁定系统,要求付费后才恢复访问。加密货币让攻击者更容易收款,虽然受害者获取加密货币可能有困难。这些软件的复杂程度各不相同:我们见过一个样本只是重命名文件,却仍让人相信自己的数据无法访问。
我们调查过的一家律师事务所面临高额赎金要求,并让 FBI 介入。调查找到了国内的攻击者,律所没有付款就恢复了数据。律所已经为可能发生的付款购买了比特币,而其价值在调查期间上涨;我记得这个不同寻常的结果是大约获利 100 万美元。
逆向分析有助于回答紧迫的问题:如何阻止传播、防止进一步加密、恢复文件?付款不一定能解决问题。有些程序会损坏数据,或者包含错误,使作者自己也无法恢复;另一些实现则存在弱点,分析师可以利用它们不付赎金就恢复数据。
找到加密过程
文件 API、密钥处理和密码学特征帮助分析师缩小调查范围。
为了在 Windows 恶意软件中找到相关代码,我们可以查找 ReadFile 和 WriteFile 等文件 API,再从写入操作向前追踪处理数据的代码。其他样本会将文件映射到内存并在那里修改。这些线索让我们可以聚焦大型可执行文件中的一小部分。
加密设计非常关键。AES 等对称算法使用同一把密钥加密和解密,速度很快,但攻击者必须防止受害者获得密钥。样本可能生成密钥并发送给命令与控制服务器,向服务器请求密钥,或者把密钥内嵌在恶意软件中。内嵌密钥可能使恢复容易得多。
非对称密码学使用公钥和私钥组成的密钥对。公钥可以留在恶意软件中用于加密数据,而私钥由攻击者持有。管理许多受感染系统的密钥会带来运营工作;具体样本的细节决定了是否存在恢复途径以及如何恢复。
我们利用特征和自己的工具,在反汇编器中识别熟悉的加密或压缩代码。加密函数的控制流图可能非常庞大,逆向分析每条指令的代价很高。有时只要拿到密钥,就可以直接提取并复用函数,无须重新弄清算法的每个细节。
WannaCry 与终止开关
Sikorski 解释这一蠕虫及其后果,以及域名检查如何阻止原始样本运行。
WannaCry 是一种蠕虫,利用针对 SMB 的 EternalBlue 漏洞利用程序在网络中传播。勒索界面要求以比特币付款,恶意软件针对许多文件扩展名。影响不仅波及企业系统,也波及医院和设备;我提到了约 40 亿美元的损失估计,并描述了服务中断的情况。
只有系统收到并安装更新,补丁才有意义。WannaCry 在存在漏洞的网络中迅速传播,第一波疫情平息之前,分析师几乎没有时间理解并阻止它。Microsoft 等机构将攻击归因于朝鲜;我们的团队也根据多种迹象得出了这一判断。
大型团队可以将复杂样本分解为多个部分:加密和解密程序、漏洞利用、网络通信和反取证行为。当疫情传播速度超过单个分析师的调查速度时,这种并行工作有助于快速给出答案。
一位名叫 MalwareTech 的研究员注意到 WannaCry 查询了一个尚未注册的域名,于是注册了它。由此建立的汇聚点帮助阻止了最初那波传播。有趣的逆向分析问题是:为什么注册一个看似随机的域名会改变恶意软件的行为?
在 IDA Pro 中,样本的主函数很早就出现了一个分支。沿着路径向前追踪,可以看到尝试打开 URL 的调用。如果请求成功,这条路径就会退出进程;否则恶意软件会继续执行有害行为。注册域名使受影响的实例能够走上退出路径。

我认为这一检查是一种反沙箱措施:模拟互联网响应的沙箱可能甚至会为随机域名返回网页,从而提醒恶意软件自己正在被观察。攻击者可以在后续变种中更改域名或移除检查。汇聚点为防守方了解疫情、给系统打补丁争取了时间;它并非适用于所有可能变种的通用开关。
NotPetya 与文件标记
一次破坏性攻击及其标记检查展示了代码级分析如何发现临时防御办法。
NotPetya,在本次演讲中也称为 EternalPetya,展示了另一种结果:计算机可能实际上遭到破坏,而不是被勒索后还能恢复。它显示 300 美元的赎金要求,窃取凭据,并利用漏洞和其他机制传播。受影响的不仅有 Maersk,还有杂货店等普通企业。
该样本安装了启动组件并加密了主文件表,后者记录文件及其内容的位置。我们的分析表明,攻击者无法获得撤销这种破坏所需的密钥。在这种情况下,出现赎金通知不意味着攻击者有能力恢复系统;受影响的机器可能需要重建。
NotPetya 没有相同的终止开关,但分析发现了一种针对我们所研究样本的临时防护措施。恶意软件常常检查标记,以确定系统中是否已有一个副本,从而避免同一系统运行多个实例。在这个案例中,一个文件起到了标记作用。
反汇编结果显示一条通向 ExitProcess 的分支。如果标记文件存在,程序就退出;否则恶意软件会创建标记并继续运行。从该分支向前追踪,进入辅助函数,我们就能知道样本检查的是哪条路径。

辅助函数获取恶意软件当前的文件路径,提取文件名,将其与 Windows 目录结合并去掉扩展名。对这个例子中的分发文件名而言,得到的标记是 C:\Windows\perfc。在防守方遏制传播和部署补丁期间,创建该文件可以保护系统免受这个特定样本侵害;不同的分发文件名或变种可能改变这一检查。
逆向分析能回答什么
演讲最后讨论从代码层面分析恶意软件的价值与局限。
这些例子的重点是分析过程。逆向工程可以揭示攻击者的目标、安装方法和特征,也能说明恢复是否有可能。有时它能找到减缓攻击的传播或保护特定系统的方法。这项工作可能需要数小时、数天或数周,特别是当恶意软件故意攻击分析师的工具时。
同频道的其他文章
1:48:29EN → 简体中文
1:36:37EN → 简体中文
1:05:45EN → 简体中文
1:25:00EN → 简体中文
1:16:29EN → 简体中文
27:39EN → 简体中文