Introduction

偶尔,当您担任 SOC 分析师时,您会遇到看似可疑的内容(文件或流量),并且您必须确定该内容是否是恶意的。对此类内容提供的所有混杂信号感到困惑是正常的。对于刚开始从事网络安全工作的人来说,这有点不知所措,并且开始自我猜测是很常见的。知道采取什么步骤来解决这种情况很有帮助。这个房间将列出一些步骤,以帮助您就特定可疑文件做出初步结论。

值得注意的是,在这个房间里,您将了解:

  • 什么是恶意软件?
  • 如何开始分析恶意软件
  • 静态和动态恶意软件分析
  • 帮助您分析恶意软件的资源

让我们开始吧!

Malware Analysis

恶意软件

恶意软件一词源于“恶意软件”一词。因此,任何具有恶意目的的软件都可以被视为恶意软件。恶意软件根据其行为进一步分为不同的类别。但是,我们不会详细介绍这个房间里的恶意软件。在这里,我们将思考如果我们怀疑在机器中发现恶意软件,我们将采取哪些步骤。那么,让我们开始吧。

恶意软件分析背后的目的

恶意软件分析是一项重要的技能。简要概述一下,恶意软件分析由安全行业的以下人员执行:

  • 安全运营团队分析恶意软件以编写针对其网络中恶意活动的检测。
  • 事件响应团队分析恶意软件以确定对环境造成的损害,以修复和恢复该损害。
  • 威胁搜寻团队分析恶意软件以识别 IOC,他们使用 IOC 在网络中搜寻恶意软件。
  • 安全产品供应商团队中的恶意软件研究人员会分析恶意软件,以便在其安全产品中添加检测功能。
  • 微软和谷歌等操作系统供应商中的威胁研究团队会分析恶意软件,以发现被利用的漏洞,并为操作系统/应用程序添加更多安全功能。

总体而言,似乎有很多不同的人出于许多令人信服的理由进行恶意软件分析。让我们看看如何开始吧!

开始之前!

请注意,恶意软件就像武器一样,如果处理不当,可能会造成巨大伤害。因此,在分析恶意软件时,请务必采取以下预防措施:

  • 切勿在非专门用于分析恶意软件的机器上分析恶意软件或疑似恶意软件。
  • 不分析或将恶意软件样本移动到不同位置时,请始终将其保存在受密码保护的 zip/rar 或其他存档中,以免意外引爆。
  • 仅在隔离环境内从受密码保护的存档中提取恶意软件,并且仅在分析时提取。
  • 专门为恶意软件分析创建一个独立的虚拟机,分析完成后可以恢复到干净的状态。
  • 确保所有互联网连接都已关闭或至少受到监控。
  • 完成恶意软件分析后,将虚拟机恢复到干净的状态,以便进行下一次恶意软件分析,避免上一次恶意软件执行的残留物破坏下一次恶意软件分析。

Techniques of malware analysis

恶意软件分析就像解谜一样。我们使用不同的工具和技术来找到这个谜题的碎片,将这些碎片拼凑起来,我们就能全面了解恶意软件想要做什么。大多数情况下,您会得到一个可执行文件(也称为二进制文件或 PE 文件。PE 代表可移植可执行文件)、一个恶意文档文件或一个网络数据包捕获 (Pcap)。可移植可执行文件是执行恶意软件分析时分析的最普遍的文件类型。

为了找到不同的拼图碎片,您通常会使用各种工具、技巧和捷径。这些技术可以分为以下两类:

  • 静态分析
  • 动态分析

静态分析

分析恶意软件而不执行时,称为静态分析。在这种情况下,分析 PE 文件的不同属性而不运行它。同样,对于恶意文档,探索文档的属性而不分析它,将被视为静态分析。静态分析的示例包括检查恶意软件中的字符串、检查 PE 标头以获取与不同部分相关的信息,或使用反汇编查看代码。稍后我们将在讨论室中介绍其中一些技术。

恶意软件经常使用技术来避免静态分析。其中一些技术使用混淆、打包或其他方式来隐藏其属性。为了规避这些技术,我们经常使用动态分析。

动态分析

恶意软件面临一个困境。它必须执行才能实现其目的,无论在代码中添加多少混淆,一旦运行,它就会成为易于检测的目标。

静态分析可能会为我们提供有关恶意软件的关键信息,但有时这还不够。我们可能需要在受控环境中运行恶意软件,以观察它在这些情况下会做什么。恶意软件通常可以隐藏其属性以阻止静态分析。但是,在大多数情况下,动态分析可以证明是有效的。动态分析技术包括在虚拟机中运行恶意软件,要么以手动方式安装工具来监控恶意软件的活动,要么以沙箱的形式自动执行此任务。我们将在本室后面学习其中一些技术。一旦我们在受控环境中运行恶意软件,我们就可以利用我们在 Windows 取证室中学到的知识来确定它在我们的环境中做了什么。这样做的好处是,由于我们控制环境,我们可以对其进行配置以避免噪音,例如来自合法用户或 Windows 服务的活动。因此,我们在这样的环境中观察到的一切都指向恶意软件活动,这使得识别恶意软件在这种情况下做了什么变得更容易。

然而,恶意软件经常使用技术来阻止分析师执行动态分析。由于大多数动态分析是在受控环境中执行的,因此大多数绕过动态分析的方法都包括检测其运行的环境。因此,在这些情况下,如果恶意软件识别出它是在受控环境中运行的,它就会使用不同的良性代码路径。

高级恶意软件分析

高级恶意软件分析技术用于分析逃避基本静态和动态分析的恶意软件。为了执行高级恶意软件分析,使用反汇编程序和调试器。反汇编程序将恶意软件的代码从二进制转换为汇编,以便分析师可以静态查看恶意软件的指令。调试器附加到程序上,并允许分析师在恶意软件运行时监视其中的指令。调试器允许分析师在不同点停止和运行恶意软件以识别有趣的信息,同时还提供系统内存和 CPU 的概述。我们不会在这个房间中介绍高级恶意软件分析。但是,它将在针对恶意软件分析的未来模块中介绍。

Basic Static Analysis

在分析新的恶意软件时,第一步通常是执行基本的静态分析。基本静态分析可以被视为对恶意软件进行评估,在深入分析之前尝试找到其属性。它为我们提供了正在处理的内容的概述。有时它可能会为我们提供一些关键信息,例如恶意软件正在进行的 API 调用或是否已打包。但是,其他时候,它可能只会为我们提供信息来帮助我们评估恶意软件并让我们了解分析它所需的工作量。

事不宜迟,让我们看看我们可以用来执行基本静态分析的一些技术。

警告!

虽然静态分析是在不运行恶意软件的情况下执行的,但强烈建议您在隔离的虚拟机中执行恶意软件分析。您可以在执行任何恶意软件分析之前创建虚拟机的干净快照,并在每次分析后将其恢复为从干净状态开始。不要在不是专门为恶意软件分析而构建的实时机器上执行恶意软件分析。对于这个房间,我们将使用附加的 Remnux VM。Remnux (Reverse Engineering Malware Linux) 是一个专为恶意软件分析而构建的 Linux 发行版。它已经安装了恶意软件分析所需的许多工具。

检查文件类型

虽然恶意软件的文件类型通常在文件扩展名中可见并且很明显,但有时恶意软件作者会尝试通过使用误导性文件扩展名来欺骗用户。在这种情况下,知道如何在不依赖文件扩展名的情况下找到文件的实际文件类型会很有帮助。在 Linux 中,我们可以使用 file 命令查找文件的文件类型。要了解 file 命令的作用,我们可以阅读其 man page 或使用 --help 选项:

man file` or `file --help

我们会发现这是一个很简单的命令。我们可以使用以下命令来查找文件的文件类型:

file <filename>

Remnux

user@machine$ file wannacry 
wannacry: PE32 executable (GUI) Intel 80386, for MS Windows
user@machine$

附加虚拟机的桌面上有一个名为“Samples”的文件夹。我们将使用该文件夹中的样本进行分析。上面的终端显示在“wannacry”样本上运行的“file”命令。输出显示一个带有图形用户界面的 PE32 可执行文件,该文件是为运行 Microsoft Windows 的系统编译的,该系统带有基于 Intel 80386 的处理器。Intel 80386 处理器是有史以来最早的 32 位处理器之一,为 80386 设计的指令集仍用于 32 位 Intel 处理器,这就是您看到“x86”处理器和代码的原因。这意味着上面输出中的“80386”告诉我们这个应用程序是为 32 位 Intel 处理器设计的。

Examining Strings

另一个为我们提供有关文件的有用信息的重要命令是“strings”命令。此命令列出文件中存在的字符串。要了解 string 命令的作用,我们可以阅读其“手册页”或使用“–help”选项:

man strings` or `strings --help

我们会发现这也是一个简单的命令。我们可以使用以下命令来查找文件中的字符串:

strings <filename>

查看文件中的字符串通常可以提供与恶意软件行为相关的线索。例如,如果我们在 strings 命令的输出中看到 URLDownloadToFile,我们就会知道该恶意软件正在使用 URLDownloadToFile Windows API 执行某些操作。最有可能的是,它正在从互联网上下载文件并将其保存在磁盘上。同样,字符串也可能提供上下文信息,帮助我们在以后进行恶意软件分析。

Remnux

user@machine$ strings wannacry
!This program cannot be run in DOS mode.
Rich
.text
`.rdata
@.data
.rsrc
49t$
TVWj
PVVh
tE9u
.
.
.
.
inflate 1.1.3 Copyright 1995-1998 Mark Adler
n;^
Qkkbal
i]Wb
9a&g
MGiI
wn>Jj
#.zf
+o*7
- unzip 0.15 Copyright 1998 Gilles Vollant
CloseHandle
GetExitCodeProcess
TerminateProcess
WaitForSingleObject
CreateProcessA
GlobalFree
GetProcAddress
LoadLibraryA
GlobalAlloc
SetCurrentDirectoryA
GetCurrentDirectoryA
GetComputerNameW
SetFileTime
SetFilePointer
MultiByteToWideChar
GetFileAttributesW
GetFileSizeEx
.
.
.
.
user@machine$

这里我们可以看到针对“wannacry”样本运行的“strings”命令。我们将看到输出以“DOS Stub”开头,即“!此程序无法在 DOS 模式下运行”的文本。有些值没有多大意义,看起来像垃圾,但您也会看到有用的输出。例如,我们可以在上面看到一些字符串看起来像 Windows API。例如,“CloseHandle”、“GetExitCodeProcess”、“TerminateProcess”等等。同样,我们可以看到文本“inflate 1.1.3 Copyright 1995-1998 Mark Adler”。快速搜索显示它是 zlib 数据压缩库的一部分,这告诉我们该样本可能正在使用这个库。

提示:有时,strings 命令的输出太大,无法完全显示在终端上。我们可以重定向它,将其写入文件,然后使用 vim 或任何其他工具读取它。下面的终端显示输出被重定向到名为 str 的文件:

Remnux

user@machine$ strings wannacry>str
user@machine$

或者,您可以使用 moreless 命令以更明显的方式解析输出:

Remnux

user@machine$ strings wannacry |more
!This program cannot be run in DOS mode.
Rich
.text
`.rdata
@.data
.rsrc
49t$
TVWj
PVVh
tE9u
PVVW
SVWjcf
X_^[
X_^[
^t19
QPPh
tXVP
X_^]
^t)9
X_^[]
WWWWWPj
SjJ3
X[_^
Yu#j
uSh8
Yu8S
SSh
hn!@
SVWj@
--more--

我们可以使用空格键向下滚动此处的字符串列表。如果你有兴趣,这个房间 包含有关字符串的更多信息。

Calculating Hashes

文件哈希为我们提供了一个固定大小的唯一数字来标识文件。因此,文件哈希可以被视为文件的唯一标识符,类似于一个国家公民使用的社会安全号码或国家身份证号码。哈希是恶意软件分析中的一个重要概念。它可以用作特定恶意软件的标识符。正如我们将在本任务后面看到的那样,这个标识符可以与其他分析师共享或在线搜索以用于信息共享目的。请注意,两个文件中的单个位差异会导致不同的哈希值,因此更改文件的哈希值就像更改其中的一个位一样简单。

通常,md5sumsha1sumsha256sum哈希用于文件哈希。我们可以在Linux中使用一个简单的命令来计算文件哈希值,如下所示为md5sum哈希值:

md5sum <filename>

Remnux

user@machine$ md5sum wannacry 
84c82835a5d21bbcf75a61706d8ab549 wannacry
user@machine$

上面,我们可以看到为名为“wannacry”的文件计算了 md5sum 哈希值。

同样,sha1sumsha256sum 命令可用于计算文件的 sha1sumsha256sum(哈希值通常在末尾不带 sum,例如 md5 而不是 md5sum 等等。)

如果您有兴趣了解有关哈希值的更多信息,可以查看[此房间](https://tryhackme.com/room/malresearching)。

AV scans and VirusTotal

使用 AV 扫描文件或在 VirusTotal 上搜索哈希值也可以为安全研究人员提供恶意软件分类的有用信息。但是,在使用在线扫描器时,建议搜索恶意软件的哈希值,而不是在线上传,以避免在线泄露敏感信息。只有当您确定自己在做什么时才上传样本。

让我们看看上面我们计算哈希值的样本是怎么说的。我们可以在 VirusTotal 主页上搜索我们为 wannacry 样本计算的 md5sum:

img

VirusTotal 拥有多种实用功能。它提供来自 60 多家 AV 供应商的扫描结果以及每个 AV 供应商对样本的分类。

img

详细信息选项卡列出了样本的历史记录、第一次提交、最后一次提交以及样本的元数据。

img

有时它还提供有关样本行为及其关系的信息,如在线上不同环境中所见。

img

img

我们还可以在 VirusTotal 上找到社区对该样本的评论,这些评论有时可以提供有关该样本的更多背景信息。

img

也许从上面的截图中可以很清楚地看出,我们正在查看一个 wannacry 勒索软件的样本。

The PE file Header

PE Header

img

PE 文件头包含有关可移植可执行文件的元数据。这些数据可以帮助我们找到很多有用的信息,以帮助我们进行分析。我们将在即将到来的高级路径恶意软件分析模块中详细介绍 PE 头及其包含的信息。但是,下面将解释 PE 头中的一些重要信息:

Imports/Exports

PE 文件很少包含在系统上运行所需的所有代码。大多数情况下,它会重复使用操作系统提供的代码。这样做是为了使用更少的空间并利用操作系统已建立的框架来执行任务,而不是重新发明轮子。导入是 PE 文件从外部导入以执行不同任务的函数。

例如,如果开发人员想要查询 Windows 注册表值,他们将导入 Microsoft 提供的 RegQueryValue 函数,而不是自己编写代码。可以理解的是,此函数将存在于开发人员代码将要运行的任何 Windows 计算机上,因此它不需要包含在 PE 文件本身中。同样,任何 PE 文件导出函数都会暴露给可以使用该函数的其他二进制文件,而不是自己实现它。导出通常与动态链接库(DLL 文件)相关联,非 DLL PE 文件通常不会有大量导出。

由于大多数 PE 文件使用 Windows API 执行大部分工作,因此 PE 文件的导入为我们提供了有关该 PE 文件将执行的操作的重要信息。很明显,导入 InternetOpen 函数的 PE 文件将与互联网通信,URLDownloadToFile 函数显示 PE 文件将从互联网下载某些内容,等等。Windows API 的名称通常直观且不言自明。但是,我们始终可以查阅 Microsoft 文档 来验证特定 Windows 函数的用途。

Sections:

PE 文件头中提供的另一条有用信息是有关 PE 文件中节的信息。PE 文件分为不同的节,这些节具有不同的用途。尽管 PE 文件中的节取决于用于编译或打包二进制文件的编译器或打包器,但以下是 PE 文件中最常见的节。

  • .text:此节通常包含运行 PE 文件时执行的 CPU 指令。此节被标记为可执行。
  • .data:此节包含 PE 文件使用的全局变量和其他全局数据。
  • .rsrc:此节包含 PE 文件使用的资源,例如图像、图标等。

Analyzing PE header using pecheck utility

我们可以使用房间附带的 Remnux VM 中的 pecheck 实用程序来检查 PE 头。

Remnux

user@machine$ pecheck wannacry 
PE check for 'wannacry':
Entropy: 7.995471 (Min=0.0, Max=8.0)
MD5 hash: 84c82835a5d21bbcf75a61706d8ab549
SHA-1 hash: 5ff465afaabcbf0150d1a3ab2c2e74f3a4426467
SHA-256 hash: ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa
SHA-512 hash: 90723a50c20ba3643d625595fd6be8dcf88d70ff7f4b4719a88f055d5b3149a4231018ea30d375171507a147e59f73478c0c27948590794554d031e7d54b7244
.text entropy: 6.404235 (Min=0.0, Max=8.0)
.rdata entropy: 6.663571 (Min=0.0, Max=8.0)
.data entropy: 4.455750 (Min=0.0, Max=8.0)
.rsrc entropy: 7.999868 (Min=0.0, Max=8.0)
Dump Info:
----------DOS_HEADER----------

[IMAGE_DOS_HEADER]
0x0 0x0 e_magic: 0x5A4D
0x2 0x2 e_cblp: 0x90
0x4 0x4 e_cp: 0x3
.
.
.
.
.
[IMAGE_IMPORT_DESCRIPTOR]
0xD5D0 0x0 OriginalFirstThunk: 0xD60C
0xD5D0 0x0 Characteristics: 0xD60C
0xD5D4 0x4 TimeDateStamp: 0x0 [Thu Jan 1 00:00:00 1970 UTC]
0xD5D8 0x8 ForwarderChain: 0x0
0xD5DC 0xC Name: 0xDC84
0xD5E0 0x10 FirstThunk: 0x8000

ADVAPI32.dll.CreateServiceA Hint[100]
ADVAPI32.dll.OpenServiceA Hint[431]
ADVAPI32.dll.StartServiceA Hint[585]
ADVAPI32.dll.CloseServiceHandle Hint[62]
ADVAPI32.dll.CryptReleaseContext Hint[160]
ADVAPI32.dll.RegCreateKeyW Hint[467]
ADVAPI32.dll.RegSetValueExA Hint[516]
ADVAPI32.dll.RegQueryValueExA Hint[503]
ADVAPI32.dll.RegCloseKey Hint[459]
ADVAPI32.dll.OpenSCManagerA Hint[429]
.
.
.
.
.
.

在这里我们可以看到 pecheck 从 wannacry 样本的 PE 头中提取的信息。我们看到样本有 4 个部分,.text、.rdata、.data 和 .rsrc,以及它们各自的熵。同样,它还向我们展示了样本的不同哈希值。Pecheck 还向我们展示了 PE 文件导入的函数。在上面的终端窗口中,我们可以看到 IMAGE_IMPORT_DESCRIPTOR,它显示了它从 ADVAPI32.dll 链接库导入的函数。我们将看到样本导入的所有其他链接库的类似描述符。

我们可以看到 pecheck 向我们展示了比我们在本任务中讨论的更多的信息;但是,讨论所有这些信息超出了本房间的范围。我们将在即将到来的恶意软件分析模块中深入探讨更多细节。我们将从我们看到的信息中获取我们正在寻找的内容,即样本的部分信息和导入。

Basic Dynamic Analysis

虽然基本的静态分析为我们提供了有关样本的有用信息,但大多数情况下,我们需要执行额外的分析才能进一步推进分析过程。找到有关恶意软件行为的更多线索的一种快速而粗略的方法是执行基本的动态分析。恶意软件样本的许多属性在不运行时可能会被隐藏。但是,当我们执行动态分析时,我们可以揭示这些属性并了解有关恶意软件样本行为的更多信息。

Caution!

动态分析需要运行可能具有破坏性的实时恶意软件样本。强烈建议您在独立的虚拟机中执行恶意软件分析。您可以在执行任何恶意软件分析之前创建虚拟机的干净快照,并在每次分析后将其恢复为从干净状态开始。请勿在非专门为恶意软件分析构建的实时机器上执行恶意软件分析。

Introduction to Sandboxesimg

沙盒是一个从军事借用的术语。顾名思义,沙盒就是一个装满沙子的盒子,模拟了行动必须发生的地形,军事小组在其中模拟他们的场景以确定可能的结果。在恶意软件分析中,沙盒是一个模拟恶意软件实际目标环境的隔离环境,分析师可以在其中运行样本以了解更多信息。恶意软件分析沙盒严重依赖虚拟机,以及它们在需要时拍摄快照和恢复到干净状态的能力。

Construction of a sandbox

对于使用沙箱的恶意软件分析,以下考虑因素可使恶意软件分析有效:

  • 虚拟机模拟恶意软件样本的实际目标环境
  • 能够拍摄快照并恢复到干净状态
  • 操作系统监控软件,例如 Procmon、ProcExplorer 或 Regshot 等。
  • 网络监控软件,例如 Wireshark、tcpdump 等。
  • 通过虚拟 DNS 服务器和 Web 服务器控制网络。
  • 一种在不影响主机的情况下将分析日志和恶意软件样本移入和移出虚拟机的机制(请谨慎使用此功能。如果您的恶意软件分析 VM 有一个共享目录,在运行恶意软件时仍可访问,则可能会有恶意软件影响共享目录中的所有文件的风险)

Open Source Sandboxes

虽然了解沙箱的组成是件好事,但从头开始构建沙箱并不总是必要的。人们总是可以设置开源沙箱。这些沙箱提供了执行基本动态分析的框架,并且在很大程度上可以自定义,以帮助那些更具冒险精神的人。

Cuckoo’s Sandbox

Cuckoo 的沙盒 是恶意软件分析社区中最广为人知的沙盒。它是 2010 年 Google Summer of Code 项目的一部分。它是一个开源项目,您经常会看到它部署在 SOC 环境和爱好者的家庭实验室中。Cuckoo 沙盒的优势包括庞大的社区支持、易于理解的文档和大量自定义。您可以将其部署到您的网络上,并让社区签名引导您识别哪些文件是恶意的,哪些是良性的,因为它附带了大量的社区签名。

Cuckoo 的沙盒已存档,更新正在等待中。它也不支持 Python 3,因此现在已过时。但是,一切还不算太糟,因为我们还有其他选择。

CAPE Sandbox

CAPE 沙箱 是 Cuckoo 沙箱的稍微高级一点的版本。它支持调试和内存转储,以支持对加壳的恶意软件进行脱壳(我们将在高级恶意软件分析模块中了解有关加壳和脱壳的更多信息)。虽然初学者可以使用这个沙箱,但要充分利用它需要高级知识。此沙箱的社区版本已在线提供,可用于在安装前进行测试运行。CAPE 沙箱目前仍在积极开发中,并支持 Python 3。

Online Sandboxes:

设置和维护沙箱可能是一项耗时的任务。考虑到这一点,在线沙箱可以提供很大的帮助。一些最常用的在线沙箱如下:

虽然在线沙箱提供了有用的工具,但最好不要在线提交样本,除非您确定自己在做什么。更好的方法是在您使用的服务上搜索样本的哈希值,看看是否有人已经提交了它。让我们看看混合分析,看看它为我们的样本提供了哪些有趣的分析。

Analyzing samples using Hybrid Analysis

在其主页上,我们看到了以下屏幕:

img

正如我们提到的,我们不会提交样本。相反,我们将搜索样本的哈希值。因此,我们将从附加的 VM 中搜索 wannacry 样本的 md5sum。我们将看到它已经提交了多次,我们可以从提交的结果中进行选择。

img

让我们从中打开在Windows 7 64位上提交的那个。

img

点击样本后,我们将看到上述界面。我们可以在右侧看到一个导航窗格,其中突出显示了报告的不同部分。我们还可以看到判定结果为恶意,威胁分数为 100/100,AV 检测率为 95%。在此之下,我们可以看到样本行为的概述。在此之下,我们将看到与 MITRE ATT&CK 技术的映射。单击“查看所有详细信息”时,我们将看到以下映射:

img

下面我们可以看到一些指标和上下文信息,以及该样本的一些静态分析信息。下面是动态分析部分:

img

这部分为我们提供了大量有关样本在沙箱中运行时的行为的信息。我们可以单击每个进程以查找有关它的更多详细信息。在上面的屏幕截图中,特别有趣的是 cmd.exe 的执行。我们可以看到该样本正在运行脚本文件并删除备份和卷影副本,勒索软件操作员经常这样做以阻止受害者从这些来源恢复他们的文件。

在本节下面,我们将看到样本的网络分析:

img

报告中还提供了提取的字符串和提取的文件。它们可以提供有关我们在上述过程中看到的批处理脚本的信息。

img

最后还有来自社区的评论。正如我们所看到的,使用讨论过的技术,我们可以找到恶意软件样本的许多谜题。然而,在某些情况下,这些技术可能不足以做出决定。让我们转到下一个任务,确定哪些场景会使分析恶意软件变得具有挑战性。

Anti-analysis techniques

当安全研究人员正在设计技术和工具来分析恶意软件时,恶意软件作者正在努力使这些工具和技术失效。我们在之前的任务中找到了大量有关我们分析的恶意软件的信息。但是,恶意软件作者可以通过多种方式让我们的生活变得困难。以下是恶意软件作者用来做同样事情的一些技术。

打包和混淆:

恶意软件作者经常使用打包和混淆来让分析师的生活变得困难。打包程序会混淆、压缩或加密恶意软件的内容。这些技术使得静态分析恶意软件变得困难。具体来说,打包的恶意软件在对它进行字符串搜索时不会显示重要信息。例如,让我们对附加 VM 中 Samples 文件夹中名为“zmsuz3pinwl”的文件进行字符串搜索。

Remnux

user@machine$ strings zmsuz3pinwl
!This program cannot be run in DOS mode.
RichH
.rsrc
.data
.adata
dApB
Qtq5
wn;3b:TC,n
*tVlr
D6j[
^sZ"4V
JIoL
j~AI
tYFu
7^V1
vYB09
"PeHy
M4AF#
3134
%}W\+
3A;a5
dLq<
.
.
.
.
.
.

我们会注意到,此样本主要包含垃圾字符串,这些字符串对我们没有多大用处。让我们对样本运行 pecheck,看看还能得到什么。

Remnux

user@machine$ pecheck zmsuz3pinwl 
PE check for 'zmsuz3pinwl':
Entropy: 7.978052 (Min=0.0, Max=8.0)
MD5 hash: 1ebb1e268a462d56a389e8e1d06b4945
SHA-1 hash: 1ecc0b9f380896373e81ed166c34a89bded873b5
SHA-256 hash: 98c6cf0b129438ec62a628e8431e790b114ba0d82b76e625885ceedef286d6f5
SHA-512 hash: 6921532b4b5ed9514660eb408dfa5d28998f52aa206013546f9eb66e26861565f852ec7f04c85ae9be89e7721c4f1a5c31d2fae49b0e7fdfd20451191146614a
entropy: 7.999788 (Min=0.0, Max=8.0)
entropy: 7.961048 (Min=0.0, Max=8.0)
entropy: 7.554513 (Min=0.0, Max=8.0)
.rsrc entropy: 6.938747 (Min=0.0, Max=8.0)
entropy: 0.000000 (Min=0.0, Max=8.0)
.data entropy: 7.866646 (Min=0.0, Max=8.0)
.adata entropy: 0.000000 (Min=0.0, Max=8.0)
Dump Info:
----------Parsing Warnings----------

Suspicious flags set for section 0. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 1. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 2. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 3. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 4. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 5. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 6. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Imported symbols contain entries typical of packed executables.
.
.
.
.
.
.
.

正如怀疑的那样,根据 pecheck,我们发现可执行文件具有典型的打包可执行文件的特征。我们会注意到样本中没有 .text 部分,其他部分具有执行权限,这表明这些部分包含可执行指令或在执行期间将填充可执行指令。我们还将看到,此样本没有太多可能向我们展示其功能的导入,就像我们在上一个样本中看到的那样。

对于打包可执行文件的分析,第一步通常是解压样本。这是一个高级主题,将在后面的房间中介绍。

Sandbox evasion:

正如我们之前所见,我们始终可以在沙盒中运行样本来对其进行分析。在许多情况下,这可能有助于我们分析逃避基本静态分析技术的样本。然而,恶意软件作者有一些阻碍这一努力的秘诀。其中一些技术如下:

  • 长时间休眠调用:恶意软件作者知道沙盒运行的时间有限。因此,他们对恶意软件进行编程,使其在执行后很长时间内不执行任何活动。这通常是通过长时间休眠调用来实现的。此技术的目的是使沙盒超时。
  • 用户活动检测:一些恶意软件样本会等待用户活动,然后再执行恶意活动。此技术的前提是沙盒中没有用户。因此不会有鼠标移动或键盘打字。高级恶意软件还会检测自动沙盒中经常使用的鼠标移动模式。此技术旨在绕过自动沙盒检测。
  • 记录用户活动:某些恶意软件会检查用户文件或活动,例如 MS Office 历史记录或互联网浏览历史记录中是否有任何文件。如果未发现任何活动或发现很少的活动,恶意软件会将机器视为沙盒并退出。
  • 检测虚拟机:沙盒在虚拟机上运行。虚拟机会留下可被恶意软件识别的痕迹。例如,在 VMWare 或 Virtualbox 上运行的虚拟机中安装的一些驱动程序会泄露该机器是虚拟机的事实。恶意软件作者经常将虚拟机与沙盒关联起来,如果检测到虚拟机,就会终止恶意软件。

以上列表并不详尽,但让我们大致了解了分析恶意软件时会发生什么。在未来专门用于恶意软件分析的模块中,我们将讨论这些技术以及检测使用这些技术的恶意软件的方法。

Conclusion

这是关于恶意软件分析的入门知识。然而,这只是触及皮毛。到目前为止,我们学到了:

  • 恶意软件的静态和动态分析
  • 查找字符串、计算哈希值以及对恶意软件运行 AV 扫描
  • PE 标头简介以及如何在恶意软件分析中使用其中的信息
  • 沙盒和我们可以使用的不同在线沙盒
  • 恶意软件如何逃避我们刚刚讨论的技术。

我们将开发一个恶意软件分析模块,该模块将介绍对抗刚刚讨论的反分析技术的方法。

在我们的 Discord 频道Twitter 帐户 上告诉我们您在这个房间里发现了什么有趣的东西。