逆向工程恶意软件,Ghidra 第 3 部分:分析 WannaCry 勒索软件

更新日期:2021 年 11 月 30 日

欢迎回来,我有抱负的网络战士!

原文链接:https://www.hackers-arise.com/post/reverse-engineering-malware-ghidra-part-3-analyzing-the-wannacry-ransomware

逆向工程是最受欢迎和最有价值的网络安全/信息安全技能之一。很少有人发展自己的技能水平以精通这种备受追捧的技能。Ghidra 是美国间谍机构 NSA 提供的一种相对较新且免费的逆向工程工具。

在本教程中,我们将研究最臭名昭著的作品之一

历史上的恶意软件

勒索软件,WannaCry。它感染了超过 300,000 台计算机

如果不是一个人 Marcus Hutchens aka MalwareTech 的工作和技能,可能会造成严重破坏。Marcus Hutchens 获得了该恶意软件的副本,并立即开始检查其代码。在其中,他发现了通常被称为“killswitch”的东西。实际上,他发现的是用于该勒索软件的命令和控制 (C&C) 的 URL。当他意识到这个 URL 还没有被注册时,他就注册了。通过这样做,他拒绝了勒索软件作者对其恶意软件的控制权,从而拯救了互联网!

在这里,我们将研究寻找 URL 的恶意软件的初始感染向量,并尝试了解它是如何启动其恶意活动的。

在开始本教程之前,我建议您阅读;

逆向工程恶意软件:Ghidra,第 1 部分

逆向工程恶意软件:Ghidra,第 2 部分

此外,您会很高兴阅读;

逆向工程,第 4 部分:Windows 内部结构

第 1 步:准备环境并安装 Ghidra

对于本教程,我建议您使用带有 Kali 或其他操作系统的 VM。这是为了确保您不会意外地将 WannaCcy 释放到您的其他系统或网络中(这通常是使用恶意软件时的好习惯)。接下来,下载 WannaCry。您可以从许多地方获取它,例如 VirusTotal。

确保您在 Ghidra 目录中并启动 Ghidra。

kali > sudo ./ghidraRunn

当 Ghidra 启动时,通过单击File > New Project打开一个项目。

然后将 WannaCry 勒索软件文件拖放到 Dragon 或转到File -> Import File。

导入文件后,您将看到如下所示的屏幕,其中包含文件的所有详细信息。

接下来,您将看到一个详细说明分析选项的屏幕。保留所有默认值并添加反编译器参数 ID(这将为函数创建参数和局部变量。它可以为大文件的分析增加相当多的时间,但对于 WannaCry 来说这不会导致任何问题)。

在 Ghidra 分析 WannaCry 时,您可能会收到以下错误消息。不用担心,只需单击OK

现在,您应该拥有 Ghidra 的以下用户界面,其中包含来自 WannaCry 的数据。

步骤 #2:找到 Main() 函数

下一步是寻找启动 WannaCry 这个恶意软件的函数。正如我们在将恶意软件加载到 Ghidra 时所指出的,WannaCry 是一个便携式可执行文件 (PE)。每个 Windows 程序都有一个入口点,通常命名为 WinMain 或 wWinMain。请参阅下面的 Microsoft 文档。

当我们转到符号树并展开函数文件夹时,我们看不到 WinMain 或 wWinMain 函数,但我们看到了一个入口函数。这可能与 WinMain() 具有相同的目的。让我们检查一下。

双击它,它将同时出现在列表窗口和反编译窗口中。

步骤#3:找到“killswitch”

现在,向下扫描 Decompile 窗口,我们可以看到该函数调用了另一个函数 FUN_00408140。双击它来分析它。

几乎立即,您应该会在列表窗口和反编译窗口中看到似乎是 URL 的内容。

它似乎将 URL 放入名为puVar3的变量中。

进一步向下扫描反编译器,我们可以看到对InternetOpenUrlA函数的引用。

我们可以通过 Microsoft Technet 搜索,发现InternetOpenUrlA函数正如您所期望的那样,它调用并打开指定的 URL。

在InternetOpenUrlA下方,我们看到几行使用InternetCloseHandle。这些指定如果 iVar2 为 0 ,则关闭句柄并运行FUN_00408090,否则关闭句柄并终止程序。

这是 Marcus Hutchins 在第一次检查和分析 WannaCry 时注意到的。这是命令和控制 (C&C) URL 的 URL。如果程序尝试访问 URL 并返回 0,则程序自动终止。如果它没有终止,则执行FUN_00408140。让我们关注FUN_00408140。

第 4 步:顺其自然

在下一步中,让我们按照FUN_00408140 的流程进行操作。转到 Ghidra 顶部的 Window 选项卡,然后单击Function Graph

正如您在上面看到的,Ghidra 为我们提供了一个易于阅读的来自该函数的流图,包括上游和下游。可以看到入口函数是 FUN 00408140 的上游,下游是InternetOpenAInternetOpenUrlAInternetCloseHandleFUN_00408090

回到反编译窗口,让我们双击FUN_00408090来尝试确定它的作用。

反编译窗口应如下所示。

请注意,反编译器显示恶意软件会尝试OpenServiceA。这包括打开mssecv2.0_004312fc的参数。这似乎打开了 Microsoft 安全服务。现在这很有趣…

当我们搜索微软的 Technet 时,我们发现没有这样的服务存在。该恶意软件正在启动一项似乎是合法的 Microsoft 安全服务的新服务,以掩盖其真实性质。

概括

Wannacry 勒索软件有可能在 2017 年对互联网造成毁灭性打击。它利用最近发布的 EternalBlue 漏洞进入计算机系统,然后加密所有数据,直到他们支付赎金。显然,由朝鲜在 Windows 系统修补之前仓促发布它,他们未能掩盖或混淆恶意软件,最重要的是,未能注册命令和控制域。感谢 Marcus Hutchins,他检测到“杀戮开关”并解除了这种可能使人衰弱的勒索软件,从而减轻了它的影响。

既然您有能力做同样的事情,也许您将成为下一个拯救互联网的人?

发表评论

您的电子邮箱地址不会被公开。