实验目的
-
完成教材上lab1-01至Lab1-04的题目;
-
根据理论课要求提交所有样本在VIrusTotal和MicroSoft Defender AntiVirus上的的分析结果
实验原理
恶意代码分析
恶意代码分析是信息安全领域的重要任务之一,旨在识别、分类和分析恶意软件的行为与特征,以便及时防御和修补系统漏洞。通过使用反病毒引擎(如VirusTotal)和分析工具(如IDA Pro、PEiD、Resource Hacker等),可以识别文件是否为恶意软件,推测其具体功能及潜在危害。本实验结合理论课内容,使用上述工具对给定的恶意软件样本进行深入分析,评估其威胁等级和潜在危害。
具体方法包括:
-
静态分析:通过反编译工具和PE文件分析工具,确定文件编译时间、导入函数和是否加壳等信息,推测恶意软件的基本特征。
-
动态分析:通过运行恶意软件样本或观察其运行时的行为,确认其在实际系统中可能产生的影响,并从中提取网络交互、文件修改等动态特征。
-
恶意软件检测引擎:使用VirusTotal和Microsoft Defender等反病毒引擎,可以快速判断文件是否为恶意软件,查看其在不同安全软件中的检测结果。
yara规则
YARA 规则由以下部分组成:
- 规则名称:标识该规则的唯一名称。
- 字符串部分:定义需要在目标文件或内存中搜索的字符串或字节序列。
- 条件部分:指定匹配这些字符串的条件,例如是否需要匹配所有字符串,或只匹配其中一个字符串。 一个简单的YARA规则例子如下:
rule ExampleRule {
strings:
$a = "malicious_string"
$b = { 6A 40 68 00 30 00 00 }
condition:
$a or $b
}
这个规则表示,如果文件中包含字符串“malicious_string”或字节序列 6A 40 68 00 30 00 00
,该文件将会触发此规则。
实验过程
Lab 1-1
1.将文件上传至http://www.VirusTotal.com 进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
如下图所示,均出现xx security vendors and x sandbox flagged this file as malicious,且其中的数字较大,说明较多生产商和沙盒都把这两个可执行文件标记为病毒。并且在图下方可以看到许多公司的安全分析结果,因此可以肯定该exe和dll均为危险的病毒。
lab01_01.exe:
lab01_01.dll:
2.这些文件是什么时候编译的?
lab01_01.exe:
编译时间为2010-12-19 16:16:19
lab01_01.dll:
编译时间为2010-12-19 16:16:38
3.这两个文件中是否存在迹象说明它们是否被加壳或混淆了?如果是,这些迹象在哪里?
首先使用PEid查壳,发现dll和exe均无加壳:
4.是否有导入函数显示出了这个恶意代码是做什么的?如果是,是什么导入函数?
lab01_01.exe:
- 发现了 FindNextFileA 和 FindFirstFileA , CreateFileA , UnmapViewOfFile ,
MapViewOfFile , OpenMutexA 等导入函数。据此推测该病毒文件可能有搜索特定目录下的文
件,然后创建文件或复制文件, 同时操纵别的文件的内存映射,进行病毒的植入等行为。
lab01_01.dll:
- CreateMutexA 和 OpenMutexA:用于创建和操作互斥对象,确保资源只能被一个进程使用。
- CreateProcessA:创建并启动新进程,若恶意软件创建新进程,则需进一步分析该进程的行为。
- Sleep:使程序休眠,当互斥对象被锁时,其他进程将调用该函数等待资源释放。
因此,推测该 DLL 通过创建互斥对象来控制资源的独占访问,若资源被锁定,其他进程将进入休眠状态以等待资源释放。
5.是否有任何其他文件或基于主机的迹象,让你可以在受感染系统上查找?
使用IDA PRO进行分析,观察string窗口:
出现了 kernel32.dll 中的‘l’被替换成了‘1’,初步猜测可能是把其dll伪装成了kernel32.dll。
因此,我们可以在主机上搜索“kerne132.dll”来发现受感染的迹象。
6.是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?
继续根据第五题的观察结果分析:
- 发现在dll的导入字符串中有一个ip地址127.26.152.13,初步猜测该程序与该地
址进行交互,作为一个后门来控制受侵害的机器
7.你猜这些文件的目的是有什么?
从文件的导入函数和网络分析来看,这些文件可能的目的是:
- 文件感染和传播:通过操作文件的内存映射、创建新进程以及互斥对象,可能用于在受感染系统中进行文件植入、复制和传播。
- 后门程序:通过与外部 IP 地址(如 127.26.152.13)的网络交互,可能充当后门程序,允许攻击者远程控制受感染机器。
- 资源控制:利用互斥对象确保独占资源访问,防止多个实例同时运行,进而提高恶意软件的稳定性和隐蔽性。
- 混淆和伪装:通过伪装系统文件名(如 kerne132.dll)以逃避检测工具。
这些行为表明,恶意代码的主要目的是在受感染系统中保持持久性,窃取信息或提供后门访问权限,同时通过伪装和资源控制避免被安全软件和系统管理员发现。
Lab 1-2
1.将 Lab01-02.exe 文件上传至http://www.VirusTotal.com 进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
可见其病毒特征繁多,被诸多引擎识别了出来。
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
使用Peid分析lab01_02.exe:
说明该文件已经被加壳了
使用upx进行脱壳
脱壳成功:
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
查看脱壳后导入函数:
{ height=200px }
- 发现 CreateServiceA , StartServiceCtrlDispatcherA , InternetOpenUrlA ,InternetOpenA ,猜测该病毒使用了网络服务,打开网页的操作。
4.哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
在IDA PRO中分析:
- 有一个很可疑的网址
- 还有很可疑的字符串malservice
Lab 1-3
1.将 Lab01-03.exe 文件上传至http://www.VirusTotal.com进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
上传到VirusTotal:
可以看出,这个文件都已被一些安全软件识别为病毒,匹配到了已有的反病毒软件特征。
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
在PEid中分析:
说明该文件已经被加壳了。
使用用脱壳工具 LinxerUnpacker 进行壳特征脱壳
脱壳失败
调试一番后脱壳成功
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,哪些导入函数,它们告诉你什么?
在VirusTotal上查看脱壳后的导入函数:
- 推测该程序将有开启或创建服务、联网等行为
4.哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
使用 IDA 分析文件 Lab01-02.exe,观察 Strings 窗口,如下:
- 出现ole32.vd,JOLEAULT等可疑字符串
Lab 1-4
1. 将 Lab01-04.exe 文件上传至 http://www.VirusTotal.com 进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
可以看出,这个文件都已被一些安全软件识别为病毒,匹配到了已有的反病毒软件特征。
2. 是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
使用查壳工具 PEid 扫描文件:
该文件没有被加壳或混淆。
3. 这个文件是什么时候被编译的?
- 文件的编译时间为 2019-08-30 22:26:59
- 但是明显是错误的,如图可见该文件中很早之前就被修改过
4. 有没有任何导入函数能够暗示出这个程序的功能?如果是,是什么导入函数,它们会告诉你什么?
发现诸多可能被恶意代码利用的函数,如 MoveFileA , CreateRemoteThread ,
OpenProcess , FindResourceA 等,可以推测该恶意代码连接远程主机进行下载,并且复制拷
贝了下载下来的文件,以此来引入更多恶意代码
5. 有哪些基于主机或基于网络的迹象,可以用来确定被这个恶意代码所感染的机器?
在IDAPRO中分析:
- 字符串”\system32\wupdmgr.exe”表示这个程序会在这个位置创建或者修改文件。
6. 这个文件在资源段中包含一个资源。使用 Resource Hacker 工具来检查资源,然后抽取资源。从资源中你能发现什么吗?
使用Resource Hacker查看,发现其中含有二进制资源:
可以发现其含有PE文件头,是一个PE文件的格式,将其抽取出来,并使用idapro查看其中的字符串
发现了一个可疑网址,可能是从可疑网址中下载其他恶意代码。
实验心得
通过本次实验,我深刻理解了恶意软件分析的基本流程,尤其是通过VirusTotal等自动化工具快速判断恶意软件是否存在的能力。此外,深入的静态分析手段(如IDA Pro、PEiD等工具)也让我认识到,尽管一些恶意软件可以通过加壳等方式隐藏其行为,但通过合理的分析流程仍能揭示其潜在的危害。
通过多个恶意软件样本的实际操作,我学会了如何通过导入函数推断恶意软件的行为,以及如何从静态分析中提取线索以确定感染迹象。实验中的每一个步骤,从文件的静态特征到资源段的提取和分析,均是恶意软件分析中的重要环节。通过这样的实验,未来在面对真实的安全威胁时,我将能够更有针对性地进行分析和防御。
实验样本在VirusTotal和MicroSoft Defender AntiVirus上的报告
lab01_01.exe:
lab01_02.exe:
lab01_03.exe:
lab01_04.exe:
MicroSoft Defender AntiVirus
YARA
编写yara规则
- 首先简单地对所有可疑字符串进行匹配
rule Lab1
{
meta:
description = "rules for Lab1 "
date = "2024.9.18"
author = "lixinyang_2213130"
strings:
$a = "kerne132.dll"
$b = "127.26.152.13"
$c = "http://www.malwareanalysisbook.com"
$d = "wupdmgr"
$e = "}OLEAUTLA"
$f = "ole32.vd"
$g = "_getmas"
condition:
any of them
}
发现lab01_02.exe没有被检测出来
- 经检查发现是MalService等可疑字符串没进行匹配
rule Lab1
{
meta:
description = "rules for Lab1 "
date = "2024.9.18"
author = "lixinyang_2213130"
strings:
$a = "kerne132.dll"
$b = "127.26.152.13"
$c = "http://www.malwareanalysisbook.com"
$d = "wupdmgr"
$e = "}OLEAUTLA"
$f = "ole32.vd"
$g = "_getmas"
$h = "MalService"
condition:
any of them
}
所有病毒都被检测出来
- 检测一下是否会误判
扫描了桌面所有文件,只有lab1的样本和其他lab的样本被扫描出来,没有正常文件被误判为恶意代码
优化速率
- 使用二进制模式匹配
- 将字符串匹配转换为二进制字节匹配,特别是在匹配特定的文件头、文件结构或签名时,这样可以提高扫描速度。
- 例如,将字符串
"kerne132.dll"
转换为其十六进制形式。
- 减少不必要的匹配
- 仅使用病毒文件中最具特征性的字符串,避免使用在多个良性文件中可能存在的通用字符串。
- 对类似
"http://www.malwareanalysisbook.com"
这样的网址,可以缩减到其域名或使用部分字符串匹配。
- 结合文件大小或类型条件
- 通过限定扫描的文件类型或大小,可以减少对不相关文件的扫描,从而提高速率。例如,添加对文件类型、大小的条件。
rule Lab1
{
meta:
description = "optimized rules for Lab1"
date = "2024.9.18"
author = "lixinyang_2213130"
strings:
// 使用二进制模式匹配
$a = { 6B 65 72 6E 65 31 33 32 2E 64 6C 6C } // "kerne132.dll"
$b = { 31 32 37 2E 32 36 2E 31 35 32 2E 31 33 } // IP "127.26.152.13"
$c = "malwareanalysisbook.com" // 只匹配域名部分
$d = "wupdmgr"
$e = { 7D 4F 4C 45 41 55 54 4C 41 } // "}OLEAUTLA" in hex
$f = { 6F 6C 65 33 32 2E 76 64 } // "ole32.vd" in hex
$g = "_getmas"
$h = "MalService"
condition:
// 结合文件大小限制和任意匹配条件
(filesize < 500KB) and any of them at entrypoint
}
验证
扫描结果正确
速度有明显提高