【THM】Intro to Malware Analysis(恶意软件分析简介)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/intromalwareanalysis

本文相关内容:简单介绍一下遇到可疑的恶意软件应该怎么处理。

image-20240115183424818

简介

当我们在担任SOC(安全运营中心)分析师时,有时会遇到一些可疑的内容(文件或流量),并且我们必须确定这些可疑内容是否为恶意的,为此,本文将介绍一些步骤来帮助我们针对特定的可疑文件做出初步判断。

image-20240116175407881

在本文中,我们将简单了解以下内容:

  • 什么是恶意软件?
  • 如何开始分析恶意软件。
  • 静态恶意软件分析和动态恶意软件分析。
  • 可以帮助我们更好地分析恶意软件的相关资源。

概念介绍

恶意软件

malware(恶意软件)一词派生于术语“MALicious softWARE”,任何具有恶意目的的软件都可以被视为恶意软件。恶意软件根据其行为可以被进一步分为不同的类别,在此我们并不进行详细讨论,我们在本文中将考虑的是:如果我们在计算机中发现了可疑软件,我们应该采取什么步骤来判断其是否为恶意软件。

进行恶意软件分析的目的

恶意软件分析是一项重要的技能,它通常由安全行业的以下人员执行:

  • 安全运营(Security Operations)团队分析恶意软件以便编写针对企业网络中恶意活动的检测规则。
  • 事件响应(Incident Response)团队分析恶意软件以确定其对网络环境所造成的损害,从而展开修复/恢复措施。
  • 威胁狩猎(Threat Hunt)团队分析恶意软件以识别IOCs,并使用IOC来搜寻网络环境中的恶意软件。
  • 安全产品供应商团队中的恶意软件研究人员(Malware Researchers)分析恶意软件,以便在安全产品中添加对恶意软件的检测方法。
  • 微软和谷歌等操作系统供应商的威胁研究(Threat Research)团队分析恶意软件,以便发现被利用的漏洞,并为操作系统/应用程序添加更多的安全功能。

总而言之,安全行业中的不同职业角色都将出于各种原因来进行恶意软件分析。

关于恶意软件分析的注意事项

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

  • 切勿在不以分析恶意软件为唯一目的的计算机上分析恶意软件(或疑似恶意的软件)。
  • 当我们不分析恶意软件样本或者想将其移动到其他位置时,请始终将恶意软件保存在受密码保护的zip/rar或其他存档中,从而尽量避免恶意软件意外运行。
  • 仅在隔离环境中从受密码保护的存档中提取恶意软件,并且只在需要进行分析时才提取。
  • 创建专门用于恶意软件分析的隔离虚拟机,此虚拟机能够在完成分析之后恢复到干净状态。
  • 在分析恶意软件时,请确保所有相关的互联网连接已经关闭或者至少受到监控。
  • 完成一次恶意软件分析之后,请将相关虚拟机重新恢复到干净状态以便进行下一次恶意软件分析(避免上一个恶意软件执行的残留物干扰我们的下一次分析)。

image-20240118094344852

答题

阅读本小节内容,并回答以下问题。

image-20240118094535477

恶意软件分析常用技术

进行恶意软件分析就像解决一个难题,我们需要使用不同的工具和技术找到这个难题的各个部分(就像拼图一样),将这些部分连接起来可以让我们更加全面地了解恶意软件的行为。

image-20240118095419452

在大多数时候,我们会尝试分析可执行文件(也被称为二进制文件或PE文件)、恶意文档文件、已捕获的网络数据包文件(Pcap),其中可移植可执行(PE)文件是我们在执行恶意软件分析时最常见的一种可疑文件类型。

tips:Pcap-Packet Capture。

在进行恶意软件分析时,我们通常会使用各种工具、技巧,所涉及的技术可以被分为以下两类:

  • Static Analysis:静态分析;
  • Dynamic Analysis:动态分析。

静态分析

当我们在不执行恶意软件的情况下开始进行分析时,被称为静态分析。静态分析的示例包括:检查可疑软件中的字符串、检查PE头中与不同节表相关的信息、使用反汇编技术查看代码等。

image-20240119011110034

恶意软件通常会采取一些技术来避免被静态分析所检测到,例如混淆、加壳或其他能够隐藏恶意属性的方法,为了对抗这些技术,我们通常还需要进行动态分析。

动态分析

恶意软件所面临的窘境是,它必须得到执行才能实现其恶意目的,无论代码中添加了多少混淆措施,一旦恶意软件得到运行,它就会成为容易被检测到的目标。

image-20240119011759141

虽然静态分析可以为我们提供有关恶意软件的一些重要信息,但有时这还不够;因此,我们可能需要在受控环境中尝试运行恶意软件,以观察它的行为。此外,恶意软件通常会隐藏其属性以阻碍静态分析的进行,所以为了更有效地检测恶意软件,在大多数情况下我们将有必要进行动态分析。

动态分析技术包括在虚拟机中运行恶意软件,或者以手动方式安装监控恶意软件活动的工具,或者以沙箱的形式自动执行监控恶意软件活动的过程。一旦我们在受控环境中运行了恶意软件,我们就可以利用Windows取证知识来确定它在受控环境中具体做了什么;这样做的好处是,由于我们可以控制恶意软件的运行环境,我们就可以配置环境以避免其他软件活动的干扰,比如来自合法用户或Windows服务的活动;这样就能保证我们在隔离环境中所观察到的一切活动都指向恶意软件,从而能够更加容易地识别恶意软件在隔离环境中所做的事情。

高级恶意软件分析

高级恶意软件分析技术可用于分析那些尝试规避基础静态分析、基础动态分析的恶意软件。为了执行高级恶意软件分析,可以使用反汇编工具和调试器。反汇编程序能够将恶意软件的代码从二进制转换为汇编,以便分析人员可以静态地查看恶意软件的指令。调试器则附加在程序上,并能允许分析人员在恶意软件运行时监控其指令。调试器允许分析人员在不同时间点停止或运行恶意软件,以识别有趣的信息片段,同时还会提供关于系统内存和CPU的概述。

注意:在本文中,我们不会展开介绍高级恶意软件分析技术。

答题

阅读本小节内容,并回答以下问题。

image-20240121181304285

基础静态分析

当分析一个新的恶意软件时,第一步通常是执行基础的静态分析。基础静态分析可以帮助我们针对恶意软件进行初级评估,以便我们在深入分析恶意软件之前尝试找到它的一些静态属性。有时候,静态分析可能会为我们提供一些关键信息,例如,恶意软件正在调用哪些API、恶意软件是否已加壳;然而,在其他时候,静态分析可能只会为我们提供概述信息,来帮助我们确定恶意软件的规模,并能让我们了解分析恶意软件所需的工作量。

警告!

虽然静态分析是在不运行恶意软件的情况下进行的,但还是强烈建议在隔离的虚拟机中执行此类恶意软件分析。我们可以在执行任何恶意软件分析之前为虚拟机创建一个干净的快照,并在每次分析结束之后将其重新恢复为干净状态以便再次开始。不要在一台非专门用于执行恶意软件分析的机器上进行恶意软件分析。在本文中,我们将使用THM实验房间所附带的Remnux虚拟机。Remnux (Reverse Engineering Malware Linux)是一个专门用于进行恶意软件分析的Linux发行版系统,该系统会预装很多执行恶意软件分析所需的工具。

Remnux VM使用文档:https://docs.remnux.org/

部署并访问实验虚拟机

我们可以在与本文相关的THM实验房间中一键部署实验环境:

image-20240121184502282

完成环境部署之后,我们可以使用浏览器内置分页访问实验虚拟机,或者使用以下凭据通过本地Kali攻击机远程登录到实验虚拟机:

  • Username: ubuntu
  • Password: 123456

检查文件类型

尽管我们可以基于可见的文件扩展名来初步判断恶意软件的文件类型,但是有时候恶意软件制作者也会尝试使用具有误导性的文件扩展名来欺骗目标用户。在这种情况下,了解如何在不依赖文件扩展名的情况下确定文件的实际文件类型会很有帮助。在Linux中,我们可以使用file命令来识别文件的文件类型,如果想了解此命令的作用,我们可以阅读该命令的man page或使用--help选项(man file/file --help)。

具体而言,我们可以在Linux系统中使用以下命令来查找文件的文件类型:

file <filename>

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

image-20240123103735777

在实验虚拟机的桌面上有一个名为Samples的文件夹,我们将使用该文件夹中的示例来进行分析。如上述终端内容所示,file wannacry命令的输出结果显示了wannacry是一个带有图形用户界面的PE32可执行文件,该文件是为运行带有基于Intel 80386的处理器的Microsoft Windows的系统而编译的,Intel 80386处理器是有史以来最早的32位处理器之一,为80386设计的指令集仍然可被32位Intel处理器使用,所以上述输出中的80386告诉我们wannacry应用程序是为32位Intel处理器而设计的。

检查字符串

另一个非常重要的命令是strings,它能为我们提供关于文件的有用信息,此命令将列出文件中存在的字符串。

如果想了解strings命令的作用,我们可以阅读该命令的man page或使用--help选项:

man strings/strings --help

具体而言,我们可以在Linux系统中使用以下命令来查找文件中的字符串:

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
.
.
.

如上所示,我们针对wannacry样本文件运行strings 命令,然后我们将看到输出以DOS Stub部分开始,即文本内容"!This program cannot be run in DOS mode"。在上述输出结果中存在一些有用内容,例如一些看起来像是Windows API的字符串(CloseHandle、GetExitCodeProcess、TerminateProcess等),此外我们还可以看到文本内容"inflate 1.1.3 Copyright 1995-1998 Mark Adler",这是zlib数据压缩库的一部分,它表明了样本文件可能正在使用zlib库。

tips:DOS Stub(DOS残留部分)是指在可执行文件(如Windows PE格式的可执行文件)中的一个小的DOS头部,它是为了向旧版的MS-DOS提供兼容性而存在的。当我们运行一个Windows PE可执行文件时,操作系统首先会检查DOS Stub部分,如果该文件是在MS-DOS中运行,那么DOS Stub就会执行,否则就会被忽略,然后真正的Windows执行代码会被加载和执行。DOS Stub包含了一些用于向用户显示信息的文本和图标,以及一些用于MS-DOS运行的指令,这样,即使用户尝试在旧版的MS-DOS下运行Windows可执行文件,他们至少会看到一些友好的提示,而不会让程序崩溃或无响应。总体来说,DOS Stub是一种为了兼容旧版MS-DOS的可执行文件中的小组件,在现代Windows环境下,这个部分通常会被忽略。

有时候,string命令的输出结果会因为内容过多而无法完全显示在一页终端之上,此时我们就可以重定向输出结果以便将它们写入到一个文本文件中,然后我们再使用Vim或者其他文本编辑器来查看具体输出,如下所示,我们可以使用命令将输出结果重定向至一个名为str的文件中。

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

image-20240125104638786

我们也可以使用more或者less命令来以更易于阅读的方式查看string命令的输出结果:

#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--

image-20240125104957590

我们可以使用空格键向下滚动查看上述的字符串列表。

计算哈希值

文件的哈希值能够为我们提供一个固定大小的唯一编号来标识具体文件,因此,文件哈希可以被视为文件的唯一标识符。

哈希是恶意软件分析中的一个重要概念,它可以用作识别特定恶意软件的标识符,已知的恶意软件所对应的哈希值可以被共享至网络,以便后来的恶意软件分析师参考。请注意,两个文件之间只要存在一点差异就会导致文件所对应的哈希值不相同。

常见的文件哈希值类型有md5sum、sha1sum和sha256sum等,在Linux中,我们可以使用md5sum命令来简单计算文件哈希值:

md5sum <filename>

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

image-20240125110947936

如上所示,我们可以看到wannacry文件的md5哈希值。

类似地,我们也可以使用sha1sumsha256sum命令来计算文件的sha1哈希值、sha256哈希值。

AV扫描和VirusTotal使用

针对可疑文件进行AVs(反病毒)扫描或者在VirusTotal上检索文件哈希值,可以为安全研究人员提供对于恶意软件分类有用的信息。在此,我们建议使用VirusTotal等在线检测平台搜索恶意软件的哈希值而不是针对可疑文件进行在线上传处理,这样可以避免在线泄露一些敏感信息。

我们可以在VirusTotal主页中搜索Wantacry样本文件的md5哈希值:

image-20240125113759919

VirusTotal具有多种方便的功能,针对Wantacry样本,它能够提供60多个AV软件供应商的扫描结果以及每个AV软件供应商怎么对可疑样本进行分类。

image-20240125114303060

Details(详细信息)选项卡部分会列出样本的历史记录、首次提交时间、最后提交时间以及样本的元数据。

image-20240125114743360

有时候,VirusTotal还会提供有关样本行为及其在不同在线环境中所能看到的关系的信息。

image-20240125115247380

image-20240125115329934

我们还可以在VirusTotal上找到社区对样本文件的评论情况,有时这可以提供有关样本的其他背景信息。

image-20240125115716573

image-20240125115924203

从上述评论可以看出,我们正在查看的是wannacry勒索软件的样本。

答题

阅读本小节内容,并回答以下问题。

使用实验虚拟机,计算样本文件下的redline文件的md5哈希值:

cd Samples/
ls
md5sum redline

image-20240126201603604

redline文件的md5文件哈希为:ca2dc5a3f94c4f19334cc8b68f256259

在Virustotal平台上搜索上述文件哈希值,并查看分析结果中的“详细信息”选项卡。

tips:https://www.virustotal.com/gui/home/upload

image-20240126202147703

image-20240126202310444

redline文件的创建时间为:2020-08-01 02:44:18 UTC

image-20240126202356536

PE文件头

PE标头

PE文件头包含了有关PE(可移植可执行)文件的元数据,这些数据可以帮助我们找到很多有用的信息,以便更好地进行恶意软件分析。

在本小节中,我们仅对PE标头中的一些重要信息进行解释。

image-20240125184737769

tips:上图是使用PE Tree工具得出的分析结果,该工具也可以作为IDA的插件使用。

Imports/Exports函数

PE文件很少会包含它自己在系统上运行所需的所有代码,大多数时候,它会重用操作系统本身提供的代码。这样做是为了使用更少的空间,并利用操作系统既定的框架来执行任务,而Imports(导入)则是指PE文件从外部导入以执行不同任务的那些函数。

例如,如果开发人员想要查询Windows注册表值,那么他们将导入由Microsoft提供的RegQueryValue函数,而不是自己编写代码;据了解,该函数将出现在任何可以运行开发人员代码的Windows机器上,因此它并不需要被包含在PE文件本身中。类似地,任何PE文件Export(导出)函数都会暴露给可以使用该函数的其他二进制文件,而不是由原PE文件自己实现,Exports(导出)通常与动态链接库(DLL)文件相关,对于一个非DLL的PE文件来说,一般不会具有大量的Exports(导出)函数。

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

Sections(节表)

PE文件头中所提供的另一部分有用信息是有关PE文件中各Sections(节表)的信息。一个PE文件可以被分为不同的节,这些节具有不同的用途。PE文件中的节信息会取决于用于编译或打包二进制文件的编译器、打包(加壳)器,以下是PE文件中最常见的一些节:

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

使用pecheck分析PE标头

我们可以使用THM实验房间附带的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标头中所提取的信息。我们可以看到上述样本有四个节,.text、.rdata、.data、.rsrc以及它们各自的熵(entropy);同样,我们还能看到样本所对应的各类型的文件哈希值。

Pecheck还向我们展示了PE文件的Imports函数。在终端输出中,我们可以看到IMAGE_IMPORT_DESCRIPTOR,它显示了样本文件从ADVAPI32.dll链接库所导入的函数,类似的,还有针对其他链接库的Imports(导入)函数的描述符。

tips:"Image Import Descriptor"(映像导入描述符)是PE文件结构中的一个重要部分,用于描述文件中引入的外部函数或符号的信息;Image(映像)在这里表示可执行文件或DLL文件。

答题

阅读本小节内容,并回答以下问题。

使用实验虚拟机,在终端中使用pecheck来分析Samples目录中的redline样本文件:

pecheck redline

image-20240126203048834

image-20240126203803596

redline样本文件追踪的.text节的熵是:6.453919

redline样本文件中除了.text、.rdata、.data和.rsrc之外的节是:.ndata

redline样本文件从哪个DLL文件导入了RegOpenKeyExW函数:ADVAPI32.dll

我们还可以使用基于GUI的PE Tree工具来分析redline样本文件,我们在终端中执行以下命令即可:

pe-tree redline

image-20240126204051722

image-20240126204241253

image-20240126204255372

基础动态分析

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

警告!

动态分析需要实时运行具有破坏性的恶意软件样本。强烈建议在隔离的虚拟机中执行针对恶意软件的动态分析。你可以在执行任何恶意软件动态分析之前先创建一个虚拟机的干净快照,并在每次完成分析之后将虚拟机恢复为从干净状态开始。请不要在非专门用于恶意软件动态分析的机器上执行恶意软件动态分析。

沙箱简介

Sandbox(沙箱,沙盒,沙盘)是一个从军队借用而来的术语,顾名思义,我们可以把沙箱看成一盒沙子,用于对必须进行操作的地形进行建模,军事团队可以在沙箱中进行情景演练以模拟可能发生的结果。在恶意软件分析中,沙箱是一个模拟恶意软件实际目标环境的隔离环境,分析人员可以在其中运行样本以了解更多信息。

恶意软件分析沙箱在很大程度上会依赖于虚拟机,它们能够拍摄虚拟机快照并且可以在需要时将虚拟机恢复到干净状态。

image-20240125220639619

关于沙箱的构建

对于需要使用沙箱来进行的恶意软件分析,我们需要考虑以下因素来让分析更加有效:

  • 模拟恶意软件样本实际目标环境的虚拟机。
  • 能够拍摄快照并能恢复到干净状态。
  • 操作系统监控软件,例如Procmon、ProcExplorer或Regshot等。
  • 网络监控软件,如Wireshark、tcpdump等。
  • 通过虚拟DNS服务器和Web服务器对网络进行控制。
  • 一种在不危害主机的情况下将分析日志和恶意软件样本移进以及移出虚拟机环境的机制;请注意,如果你用于进行恶意软件分析的虚拟机有一个共享目录,并且该目录在运行恶意软件时仍然可以被访问,那么恶意软件就可能会影响此共享目录中的所有文件。

开源沙箱

虽然了解一个沙箱是由什么组成的有助于我们更好地理解沙箱机制,但是从头开始构建沙箱并不总是必要的。恶意软件分析师可以选择设置开源沙箱,这些开源沙箱提供了执行基础动态分析的框架,并且还可以在很大程度上由使用者进行定制。

Cuckoo沙箱

Cuckoo sandbox是恶意软件分析社区中最广为人知的沙箱之一,它是作为2010年Google Summer of Code项目的一部分而被开发的,是一个经常会被部署在SOC(安全运营中心)环境中的开源项目。

Cuckoo沙箱的优点包括庞大的社区支持、易于理解的文档和大量的自定义功能,你可以在你的网络上部署这个沙箱环境,并让相关社区签名来指导你识别哪些文件是恶意的,哪些文件是良性的,因为此沙箱环境附带了大量的社区签名库。

Cuckoo沙箱并不支持Python 3,因此它现在可能已经过时了,但幸运的是我们还可以选择使用其他沙箱。

tips:Cuckoo,布谷鸟。

CAPE沙箱

CAPE Sandbox是基于Cuckoo沙箱而开发得到的更高级版本,它支持调试和内存转储以便对加壳的恶意软件进行脱壳处理。虽然初学者能够直接使用CAPE沙箱,但是使用者往往还需具备一些高级知识才能充分利用此沙箱。CAPE沙箱的社区版本可以在线获取,该沙箱迄今为止仍在进行积极开发并且能够支持Python 3。

在线沙箱

设置和维护沙箱可能是一项耗时的任务,考虑到这一点,我们还可以选择使用在线沙箱,一些常用的在线沙箱如下所示:

尽管在线沙箱可以充当一个有用的实用分析工具,但是最好不要在线提交可疑样本文件,除非我们确定自己正在做什么。更好的使用在线沙箱的方法是在我们正在使用的服务上搜索可疑样本的哈希值,以查看是否有人已经提交了它。

接下来让我们看看Hybrid Analysis在线沙箱的使用示例,看看它能针对我们的样本文件提供什么样的有趣分析。

使用Hybrid Analysis分析样本

访问Hybrid Analysis在线网站,然后我们将看到如下所示的页面:

tips:https://hybrid-analysis.com/

image-20240126104955769

正如我们在上文中所提及的那样,我们可以不提交样本文件,而是去搜索样本的哈希值。我们可以在上图所示的页面中搜索wannacry样本的md5哈希值,然后我们可以看到该样本有多次提交记录,我们从已提交的结果中进行选择查看即可。

image-20240126110744060

让我们打开一个由Windows 7 64 位机器所提交的记录。

image-20240126110649506

image-20240126110550143

当我们点击已提交的记录中的样本文件时,我们可以看到具体的分析报告,并且我们可以在分析报告页面的右侧看到一个导航目录,它会突出显示分析报告的不同组成部分。从上述分析报告可知,相关可疑样本被认为是恶意的、威胁评分为100/100、AV检测率为98%。

点击分析报告页面中“MITRE ATT&CK™ Techniques Detection”部分的view all details按钮,我们可以看到关于样本行为所映射的MITRE ATT&CK技术。

image-20240126111639119

image-20240126111546270

继续往下查看样本分析报告,我们还可以看到样本的一些技术指标(Indicators)、上下文信息以及一些静态分析信息,至于有关样本的动态分析信息则如下所示:

image-20240126112321699

Hybrid Analysis部分为我们提供了关于样本文件在沙箱中运行时的行为的大量信息,我们可以单击上图中每个已经被分析过的进程来查找有关它的更多详细信息。在上图中,我们可以看到cmd.exe的执行信息,它告诉我们样本文件正在运行脚本并会删除备份和卷影副本(卷备份),这是勒索软件经常会执行的操作,目的是阻止受害者从常见备份来源处恢复原文件。

在样本分析报告的下一小节中,我们将看到关于样本文件的网络分析。

image-20240126113647964

在分析报告中还会显示已提取的字符串和已提取的文件,这些内容可以提供关于我们在前述进程中所看到的批处理脚本的信息。

image-20240126114154395

image-20240126114413667

最后在报告末尾还会提供来自社区的评论。

image-20240126114452643

虽然我们可以通过使用在线沙箱来获得很多关于恶意软件样本的分析信息,但是有时候我们还是不足以做出最终决定,在下一节中,我们将简单介绍哪些场景会使得分析恶意软件变得更加困难。

答题

阅读本小节内容,并回答以下问题。

使用Hybrid analysis在线沙箱,检索上文提及的redline样本的md5文件哈希值并查看分析报告:

tips:

image-20240126204900218

image-20240126205012517

image-20240126205304100

在进程树中,启动样本时第一个启动的进程是哪个:setup_installer.exe

在进程树中,恶意软件利用了两个Windows实用程序来执行其活动,这两个实用程序是: cmd.exe、powershell.exe

image-20240126205438026

Anti-analysis(反分析)技术

当安全研究人员正在构思技术和使用工具来分析恶意软件时,恶意软件作者也在努力对抗这些分析技术和工具,以尝试使技术和工具失效。虽然我们在上文中通过使用技术和工具经过分析得到大量有关恶意软件的信息,然而,恶意软件制作者也可以通过多种方式来使得我们的分析过程变得更加困难,接下来我们将简单介绍恶意软件作者可能会采取的一些反分析技术。

加壳(打包)和混淆

恶意软件作者经常会使用加壳和混淆的方式来让恶意软件分析师的工作变得更加困难,有效的加壳器会混淆、压缩或者加密恶意软件的内容。使用这些技术可以使得静态分析变得更困难,具体而言,经过加壳处理的恶意软件在我们对其进行字符串搜索时,可能不会显示一些重要信息。

例如,我们可以针对实验虚拟机中Samples文件夹下的zmsuz3pinwl文件执行字符串搜索操作。

tips: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<
.
.
.
.
.
.

如上所示,从输出结果中,我们只能发现zmsuz3pinwl样本文件中包含的都是一些垃圾字符串,而这些字符串对我们并没有太大的价值。

接下来,让我们使用pecheck工具来分析zmsuz3pinwl样本文件,看看能得到什么输出结果。

#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节,而其他节都具有可执行权限,这表明这些节包含可执行指令或者在执行过程中将填充可执行指令,此外,上述输出内容也并未向我们揭示很多可能将被导入的函数。

tips:为了分析加壳的可执行文件,我们要做的第一步通常是对样本做脱壳处理。

沙箱规避

正如我们之前所看到的,我们始终可以选择在沙箱中运行样本文件来进行恶意软件分析。在许多情况下,使用沙箱可能有助于我们分析那些会规避静态分析技术的可疑样本,然而,恶意软件作者还可以尝试规避基于沙箱的分析:

  • Long sleep calls(长时间休眠调用):恶意软件作者知道沙箱的运行时间有限,因此,他们可以对恶意软件进行编程,使其在运行之后很长时间内并不执行任何活动;这通常是通过长时间的休眠调用来完成的,该技术的目的是等待沙箱运行超时。
  • User activity detection(用户活动检测):某些恶意软件样本会在执行恶意活动之前等待用户活动,该类技术的前提是沙箱中不会有用户(即针对自动化沙箱),因此,沙箱中也不会有常规的鼠标移动或键盘打字行为,此外,使用该技术的高级恶意软件还可以检测自动化沙箱中经常会使用的鼠标移动模式,该技术旨在绕过自动化沙箱检测。
  • Footprinting user activity(跟踪用户活动):某些恶意软件会检查用户文件或用户活动,例如MS Office历史记录或互联网浏览历史记录中是否有任何文件,如果没有发现或发现很少的用户活动,那么恶意软件就会将当前计算机视为沙箱并退出执行过程。
  • Detecting VMs(检测虚拟机):沙箱往往依赖于虚拟机而运行,而虚拟机可能会留下一些可以被恶意软件识别到的artifacts(特征),例如在VMWare或Virtualbox上运行的虚拟机可能会因为安装了某些驱动程序而泄露了该机器是虚拟机的事实,恶意软件作者经常会将虚拟机与沙箱关联起来,一旦检测到虚拟机存在,恶意软件的运行就会终止。

注意:上述的沙箱规避技术并不详尽,还有许多其他技术可用于规避基于沙箱的检测。

在网络安全领域,"artifacts" 通常用于描述在计算机系统或网络中留下的痕迹、数据或信息,这些痕迹可以被用于安全分析、取证或调查;因此,在网络安全上下文中,"artifacts" 可以被理解为与攻击、威胁或异常行为相关的特征。

答题

阅读本小节内容,并回答以下问题。

image-20240121190918412

本文小结

本文所涉及的只是恶意软件分析的基础知识,我们简单介绍了以下内容:

  • 关于恶意软件的静态分析和动态分析;
  • 查找字符串、计算哈希值并对恶意软件运行AV(反病毒)扫描;
  • 介绍PE标头以及如何在恶意软件分析中使用PE标头中的信息;
  • 介绍沙箱以及我们可以使用的不同在线沙箱;
  • 恶意软件将如何规避恶意软件分析技术。

注意:本文相关内容仅为恶意软件分析入门基础,如果想更深入的了解恶意软件分析技术,还需要经历更多的学习和实践过程。

posted @ 2024-01-26 22:38  Hekeatsll  阅读(130)  评论(0编辑  收藏  举报