Exp4 恶意代码分析
Exp4 恶意代码分析
1.实践原理说明
1.1 实践目标
1.是监控你自己系统的运行状态,看有没有可疑的程序在运行。
2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
3.假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
1.2 实践内容
任务一:系统运行监控
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
任务二:恶意软件分析
分析该软件在:(1)启动回连,(2)安装到目标机,(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
- 读取、添加、删除了哪些注册表项
- 读取、添加、删除了哪些文件
- 连接了哪些外部IP,传输了什么数据(抓包分析)
-
2.实践过程记录
任务一:系统运行监控
-
一、使用schtasks指令监控系统
-
Step1:在C盘根目录下先建立一个 netstatlog.dat 文件。
我们先创建 netstatlog.txt 文件,输入以下内容:
date /t >> c:\netstat1330.txt
time /t >> c:\netstat1330.txt
netstat -bn >> c:\netstat1330.txt

然后将文件后缀改为 .dat 。

Step2:在cmd下输入 schtasks /create /TN netstat1330 /sc MINUTE /MO 2 /TR "c:\netstatlog.bat" 命令创建任务计划 netstat1330
- TN :TaskName的缩写,这里我们创建名为 netstat1330 的任务计划
- sc :计时方式,我们选择用分钟计时,所以写MINUTE
- TR :Task Run的缩写,我们要运行C盘下刚刚写好的脚本文件 netstatlog.bat ,填入即可。
![]()
Step3:打开 任务计划程序 ,如下图所示:

可以看到我们刚刚创建的任务计划 netstat1330
双击我们这个任务计划
点击 操作 ——> 编辑
将 程序或脚本 改为之前创建的 netstat.bat 批处理文件——>点击 确定

注意:这里还需要设置以最高权限运行。
点击 常规 ——>选中 以最高权限运行 ,如下图所示:

Step3:在任务中还可以设置其他的东西,例如:
在 条件 中可以看到电源这里是默认选中“只有在计算机使用交流电源时才启动此任务”,如果我们的电脑没有接入电源,他就不会执行。
所以我们取消这个选项

在 设置 中还可以选择任务运行时间,我们设置为3天

Step4:一段时间之后,我们就可以在 netstat1330.txt 文件中看到我们电脑的联网记录了

Step5:一段时间之后,我们停止执行这个任务,来分析一下数据。
首先我们打开excel新建一个表
由于是新版excel,所以我们需要先添加旧版的导入文本功能。
点击左上角的 文件 ——> 选项 ——> 数据 ,把下面 从文本(T)(旧版) 打勾

然后点击左上角的 文件 ——> 传统向导 ——> 从文本(T)(旧版) ,选择我们的刚刚生成的 netstat1330.txt 文件,就可以导入数据啦~


接下来我们做成统计图,看起来更清晰
选中我们要分析的数据——也就是第二列,点击 数据透视表

以下是我得到的图表:

- 可以看到今天这段时间使用最多的是 chrome 和 QQ ,这是正常的,因为我一直在使用
- wps 和 zerotier这些软件我没有打开过,但是可以看到他们仍然在后台运行
- 其他一些程序都搞不清楚是干啥的,这样看起来这是危险的,可能我以前使用计算机没有很强的安全意识,下载了一些来源不明的软件。今后一定要加强自己的安全意识。
二、系统运行监控——使用sysmon工具监控系统
Step1:下载sysmon

Step2:配置自己的xml文件并存在 Sysmon 所在目录下。
以下是我配置的 sysmon1229.xml 文件:
这里要注意的是:配置文件第一行的 Sysmon 的版本号要和下载的 Sysmon 版本号相同。
右键点击下载的 Sysmon64.exe ,点击 详细信息 查看版本号

sysmon1229.xml 文件内容如下:
<Sysmon schemaversion="13.02">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<ProcessCreate onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
</ProcessCreate>
<ProcessCreate onmatch="include">
<ParentImage condition="end with">cmd.exe</ParentImage>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">127.0.0.1</SourceIp>
</NetworkConnect>
<NetworkConnect onmatch="include">
<DestinationPort condition="is">80</DestinationPort>
<DestinationPort condition="is">443</DestinationPort>
</NetworkConnect>
<CreateRemoteThread onmatch="include">
<TargetImage condition="end with">explorer.exe</TargetImage>
<TargetImage condition="end with">svchost.exe</TargetImage>
<TargetImage condition="end with">firefox.exe</TargetImage>
<TargetImage condition="end with">winlogon.exe</TargetImage>
<SourceImage condition="end with">powershell.exe</SourceImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
配置文件内容解释:
- onmatch 选项可以设置两种
- include 黑名单,记录
- exclude 白名单,不记录
-
sysmon 工具中可以选择一些事件过滤器,包括(按照我配置文件的顺序依次如下):
- ProcessCreate 进程创建。
- 在我的配置文件中,我选择不记录chrome和Firefox两个浏览器的进程
- 但是记录使用了cmd的进程
- FileCreateTime 进程创建时间。
- 我的配置文件中,选择不记录chrome和Firefox两个浏览器相关进程
- NetworkConnect 网络链接。
- 这里我还是选择过滤掉两个浏览器的网络连接、本机网络(127.0.0.1)连接和目的端口为137(提供局域网中ID或IP查询服务)的连接服务。
- 记录下目的端口为80(http)和443(https)的网络连接。
- CreateRemoteThread 远程线程创建。
- 这里我只设置了黑名单,记录下的内容包括:
- explorer.exe Windows程序管理器或者文件资源管理器,用于管理Windows图形壳,包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用,对我们的计算机还是很重要的,所以我加入了这个文件。
- svchost.exe 一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。
- winlogon.exe Windows NT 用户登陆程序,用于管理用户登录和退出。该进程的正常路径应是C:\Windows\System32,且是以 SYSTEM 用户运行,若不是以上路径且不以 SYSTEM 用户运行,则可能是 W32.Netsky.D@mm 蠕虫病毒。
- powershell.exe 专为系统管理员设计的新 Windows 命令行外壳程序,该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。命令行用户和脚本编写者可以利用 .NET Framework的强大功能。
- 这里我只设置了黑名单,记录下的内容包括:
- ProcessCreate 进程创建。
- 以上是我所配置文件的内容,除了上述内容,sysmon还有以下事件过滤器:
- ProcessTermina 进程结束
- DriverLoad 驱动加载
- ImageLoad 镜像加载
- RawAccessRead 驱动器读取
- ProcessAccess 进程访问
- FileCreate 文件创建
- RegistryEvent 注册表事件
- FileCreateStre 文件流创建
- 以上都可以根据需要进行配置
Step3:安装Sysmon。
在 powershell 中进入 Sysmon 的路径下,输入 Sysmon64.exe -i sysmon20191229.xml

安装成功!
*如果安装不成功,尝试在Sysmon64.exe -i sysmon20191229.xml 命令前加上 .\ ;
*如果出现“you need to launch system as an administrator...”,按“win+X”进入“windows Powershell(管理员模式)”,再次进入sysmon文件夹下输入命令即可安装成功。
Step4:搜索栏进入“事件查看器”,依次点击 应用程序和服务日志/ microsoft/ windows/ Sysmon/ Operational

这就是Sysmon按照我们的配置文件要求记录的日志,包括:事件、事件ID、任务类别、详细信息等,双击一条记录,就可以看到了.

任务二:恶意软件分析
我们可以使用Exp3中生成的后门程序进行分析。
1.快照对比——使用systracer工具
Step1:下载安装systracer工具
Step2:抓捕快照
实验中我抓捕了五个快照如下:
1:未移植后门程序

2:移植后门程序后,运行后门程序并在kali中实现回连后

3:在kali中使用dir指令后

4:在kali中使用screenshot指令后

Step3:对生成的快照进行对比分析

通过右下角的 compare 键或者 View Differences Lists 比对各快照,可以选择Only Difference只查看不同的项
- 对比快照一和快照二(植入后门程序)
- 可以清楚地看到我们把后门程序放在了d:\大三下\网络对抗技术\实验\Exp4\ 目录之下

我删除了Vivado 的安装包,也可以看出来


我下载了新的软件放在 D:\大三下\网络对抗技术\实验\Exp4\软件 目录下,可以看到这个目录发生了变化

也可以看到改变的记录、增加的文件等等,绿色的就是新增的文件

- 对比快照二和快照三(后门启动前与启动后):
- 可以看到新增了运行着的后门程序
![]()
-
可以看到我新增的两张实验截图~
-
![]()
可以清楚地看到注册表项中 HKEY_USERS 新增的项
![]()
- 可以看到新增了我们刚刚回连的后门进程
- 单击可以详细地看到回连的kali IP
![]()
- 可以看到新增了运行着的后门程序
对比快照三和快照四(kali上执行dir指令):
- 修改了 HKEY_LOCAL_MACHINE 根键中的一些内容
- 在微软的Windows操作系统中,HKEY_LOCAL_MACHINE保存了注册表里的所有与这台计算机有关的配置信息,是一个公共配置信息单元。
![]()
- 修改了 HKEY_USERS 的一些信息,但是这些我们无法查看
- HKEY_USERS包含了缺省用户设置和登录用户的信息。
![]()
- 在 d:\Program Files\Microsoft SQL Server\MSAS10_50.MSSQLSERVER\OLAP\Log\ 中增加了一些新文件
- 这个文件应该也是一个日志记录,会占据内存很大空间。
![]()
-
这里还可以看到我使用QQ后电脑文件的变化,甚至可以看到我的QQ号,记录的还是很细的
![]()
-
Applications 改变的是一些系统启动所需要的文件
- 这个文件应该也是一个日志记录,会占据内存很大空间。

对比快照四和快照五(kali上执行screenshot指令)
- 可以看到 HKEY_LOCAL_MACHINE 中新增了一些文件

其他注册表项也发生了一些变化,但是我们无法查看

文件也发生了变化,还是看不了

2.kali中使用 wireshark抓包分析:
主机ip:192.168.43.141 虚拟机ip:192.168.43.183
-
点击右上方的kali图标,搜索wireshark,进入wireshark
![]()
- 选择需要监听的网卡,双击即可开始监听

-
ncat传送后门程序
- 我这里用的payload是windows/meterpreter/reverse_tcp
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LPORT 1227
set LHOST 192.168.43.183
-
前两行先由kali端向主机端发送连接请求,被拒绝了,回了一个[rst,ack]包。
再看3-5行,这是典型的tcp三次握手建立连接
这里的包可以结合自己的操作看,从图中可以看出正好被拒绝了一次,然后再建立连接。


现在来看看下面的详细信息,因为用的tcp反弹式连接,所以基本上都是tcp包,详细信息一次类推
第一行,帧Frame447指的是要发送的数据块,其中,所抓帧的序号为36838,捕获字节等于传送字节数:7354字节
第二行,以太网,有线局域网技术,是数据链路层。源Mac地址为08:00:27:ca:97:51,目标Mac地址为0c:dd:24:8e:94:37
第三行,IPV4协议,也称网络协议,是网络层;源IP地址为192.168.43.183,目的IP地址为:192.168.43.141
第四行,TCP协议,也称传输控制协议,是传输层;源端口(55538);目标端口(12270);序列号(1);ACK是TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认,值为1表示确认号有效;长度为7300字节
第五行,数据共有7300字节

可以看出来ncat是将后门程序分段传输过去的哈,我生成的后门程序大小为73802字节,不知道少的那216字节去哪了。

打开msfconsole,并设置打开kali监听,并在Windows中启动后门程序,抓包;getshell,并dir后的包

getshell并没有获得什么信息,而dir后主机发送了一个1140字节的数据包,可能是目录的文件信息。
3.实验问题回答
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控?
- 创建计划任务:使用schtasks,每隔一段时间对主机联网状态的记录,分析是否有可疑程序
- 监控系统:使用sysmon编写配置文件,在事件查看器中的日志查看有无异常事件
- 监控流量:使用wireshark抓包进行数据流量分析
- 监控进程:使用Process Explorer对进程进行监控
- 监控端口:使用nmap查看是否有异常端口开放
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
-
查看程序进程号和开放的端口号。
-
使用PEiD进行外壳检查。
-
使用systracer分析,查看其对注册表、dll文件和进程的修改。
-
使用wireshark进行抓包分析,查看异常流量。
-
使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
4.实验总结感悟
本次实验主要内容是监控自己系统,然后分析之前实验生成的后门程序,并学习怎样查看分析计算机是否被入侵。通过实验,才发现系统下运行的软件不止是你打开的那些,在你下载一些软件过程中偷偷携带的附属品也在运行,但我却不知道还有他们,难怪电脑越来越卡了。在恶意代码分析的过程中,认识了解了很多系统文件和他们的作用。入侵攻击是非法的,所以检测入侵更加有意义和实用性,在本次自己动手实验过后,对于恶意代码有了不同的认识,也会让我在以后更安全的利用网络资源。











浙公网安备 33010602011771号