2019-2020-2 20175316盛茂淞《网络对抗技术》Exp4 恶意代码分析
一、原理与实践说明
实践目标与概述
- 监控你自己系统的运行状态,看有没有可疑的程序在运行。
- 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
- 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
实践内容概述
-
系统运行监控
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重 点事可疑行为。
-
恶意软件分析,分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
- 读取、添加、删除了哪些注册表项
- 读取、添加、删除了哪些文件
- 连接了哪些外部IP,传输了什么数据
基础问题回答
-
如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 使用
schtasks
,设置一个计划任务,进行记录,并使用excel进行分析 - 使用
sysmon
,修改配置文件,记录相关的日志文件。 - 使用
SysTracer
,在不同时间点建立快照,并进行对比。 - 使用
Process Monitor
,寻找可疑的进程 - 使用
Process Explorer
工具,监视进程执行情况。
- 使用
-
如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息
- 使用
PEid
判定是否加壳 - 使用
PE explorer
查看程序头部信息 - 使用
Wireshark
进行抓包分析,监视其与主机进行的通信过程
- 使用
二、实验内容
1.系统运行监控
每隔一分钟记录自己的电脑,并进行分析有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。
- 使用schtasks指令监控系统设置计划任务
- 首先在C盘中创建一个
netstat5316.bat
脚本,写入以下内容
- 首先在C盘中创建一个
date /t >> c:\netstat5316.txt
time /t >> c:\netstat5316.txt
netstat -bn >> c:\netstat5316.txt
- cmd中使用
schtasks /create /TN netstat5316 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt"
创建计划任务netstat5316
命令中TN是TaskName的缩写,
sc
表示计时方式
MINUTE
表示以分钟计时
TR
即Task Run,netstat
是我们要运行的指令
b
用来输出可执行文件名
n
使其以数字来显示IP和端口,最后输出重定向,将输出存放在c:\netstatlog.txt
文件中。
-
在任务计划程序中操作并编辑该任务,将其程序或脚本选中
netstat5316.bat
,确定后该任务就一直处于就绪状态,将其运行后,该任务每一分钟运行一次
-
该任务的运行结果都存储在netstat5316.txt文件中:
-
执行一段时间后将txt中的数据导出通过excel表进行整理:
-
统计图如下:
-
由上图所示,联网最多的是浏览器对应的程序“MicrosoftEdge.exe”,排名第二是是“vmware.exe”,其次是“有道云”和“网易云音乐”。
-
有一定可疑性的进程:svchost.exe:数目众多,但是通过tasklist发现都有对应进程而不是暂缺状态,认为暂时安全。
安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
-
sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
-
可选择的事件过滤器有
- ProcessCreate 进程创建
- FileCreateTime 进程创建时间
- NetworkConnect 网络链接
- ProcessTermina 进程结束
- DriverLoad 驱动加载
- ImageLoad 镜像加载
- CreateRemoteTh 远程线程创建
- RawAccessRead 驱动器读取
- ProcessAccess 进程访问
- FileCreate 文件创建
- RegistryEvent 注册表事件
- FileCreateStre 文件流创建
-
下载并解压
SysinternalsSuite.zip
,在SysinternalsSuite
目录中创建配置文件sysmon20175316.xml
,该配置文件中可以加入事件过滤器,具体的过滤事件选项如下:- 进程创建ProcessCreate:
UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine
- 进程创建时间FileCreatTime:
UtcTime, ProcessGuid, ProcessId, Image, TargetFilename, CreationUtcTime, PreviousCreationUtcTime
- 网络连接NetworkConnect
UtcTime, ProcessGuid, ProcessId, Image, User, Protocol, Initiated, SourceIsIpv6, SourceIp, SourceHostname, SourcePort, SourcePortName, DestinationIsIpv6, DestinationIp, DestinationHostname, DestinationPort, DestinationPortName
- 远程线程创建CreateRemoteThread
UtcTime, SourceProcessGuid, SourceProcessId, SourceImage, TargetProcessGuid, TargetProcessId, TargetImage, NewThreadId, StartAddress, StartModule, StartFunction
- 根据这些过滤事件自主选择编写配置文件
sysmon20175316.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">2345加速浏览器.exe</Image>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">360安全浏览器.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>
-
onmatch
选项只能设置为include
或者exclude
,exclude
相当于白名单,不用记录;include
相当于黑名单。 -
在代码中,第一行的sysmon版本号要跟使用的sysmon一致
-
Image condition
需要根据自己使用的浏览器进行更改,将“2345加速浏览器”与“360安全浏览器”设为白名单。同时去掉回环地址127.0.0.1
,去掉137号端口
,137端口
的主要作用是在局域网中提供计算机的名字或IP地址查询服务,查看http的80端口
与https的443端口
。 -
远程建成创建
记录了目标为explorer.exe、svchost.exe、firefox.exe、winlogon.exe和powershell.exe 的远程线程。explorer.exe
是Windows程序管理器或者文件资源管理器svchost.exe
是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。winlogon.exe
是Windows NT 用户登陆程序,用于管理用户登录和退出。powershell.exe
是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
-
编写完成后cmd中使用管理员身份运行
Sysmon64.exe -i sysmon20175316.xml
进行安装
-
在事件查看器中进入
应用程序和服务日志/Microsoft/Windows/Sysmon/Operational
便可看到按我们编写的文档进行记录的事件
-
可以看到配置文件记录的第一个日志是打开
C:\sysmon20175316.xml
配置文件 -
再看一下本次实验中运行的.bat文件事件
-
运行之前实验三的后门程序
-
在事件查看器中可以找到该后门程序的运行记录:
-
回连以后,在kali中执行了dir的命令,于是在上一条日志紧接着就找到了这个
-
SearchFilterHost.exe
是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,让用户能够更好的搜索出电脑中的任意资料。它会在计算机空闲时自动扫描索引位置的文件名、属性信息和给定类别的文件内容,这些索引位置默认包括桌面、收藏夹、开始菜单、系统目录。
2.恶意软件分析
静态分析
静态分析-使用VirusTotal分析
- VirusTotal在实验三中我们使用过,将后门程序上传到VirusTotal,可以从中获取详细信息,包括大小、 MD5、SHA-1、SHA-256数值以及加密壳类型等:
静态分析-使用PEiD分析
-
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名,扫描模式有:
- 正常扫描模式:可在PE文档的入口点扫描所有记录的签名
- 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入
- 核心扫描模式:可完整地扫描整个PE文档,PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性
-
将实验三中加壳后的文件使用PEiD进行扫描,首先扫描未加壳的程序
-
再扫描加过压缩壳与加密壳的程序
(这里只检测出了压缩壳,加密壳却未检测出)
动态分析
快照比对(SysTracer工具)
-
在打开后门前先快照一下,点击“take snapshot”,如图,按照以下步骤进行:
-
点击上方“Applications”->左侧“Running Processes”->找到后门进程“20175316_backdoor.exe”->点击“Opened Ports”查看回连地址、远程地址和端口号:
-
后Kali打开msfconsole,完成相关设置后开始监听,Windows运行后门后拍摄一系列快照
- 快照一:移植后门程序,保存为Snapshot 1
- 快照二:运行后门程序并在kali中实现回连,保存为Snapshot 2
- 快照三:在kali中使用dir指令,保存为Snapshot 3
- 快照四:在kali中使用record_mic指令,保存为Snapshot 4
-
执行后对比分析:
-
根据capture捕获这个单词就知道这一条有问题,进一步分析,这应该是修改了捕获音频的键值
-
删除了很多.ddl文件,增加了很多.dll.mui文件,查阅资料应该是伪装潜伏。关于
HKEY_LOCAL_MACHINE
的介绍:
它保存了注册表里的所有与这台计算机有关的配置信息
被修改的部分是Fastcache
,即高速缓冲存储器。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
这个子键包括了win95控制面板中的信息。不要编辑这些信息,因为一些小程序的改变在很多地方,一个丢失的项会使这个系统变的不稳定。
动态抓包分析——WireShark工具
-
使用实验三中的后门软件进行入侵,捕获数据包如下,通过分析可以看出后门程序使用的通信方式为TCP传输。在被植入后门的Windows主机入侵时,主机与虚拟机首先进行了完整的三次握手,并且可以明显看出是从5316端口传输的数据
-
下图是我单独捕获的一个完整的用kali请求主机执行ipconfig的数据包,可以看到kali向主机发送了一个请求包,主机收到请求并返回了3个应答包,第二个应答包中包含了主机具体的ipconfig数据,kali收到主机发来的数据包后再向主机发送一个ACK应答包,证明已成功收到数据。
使用Process Explorer监视系统和应用程序
Process Explorer可以实时监控计算机的进程状态,我们可以用它来看看Meterpreter进程迁移的行为。
-
首先运行后门程序,我们找到了它的进程:
-
可以详细查看该进程的CPU、虚拟内存、物理内存、I/O等相关信息
三、实践过程遇到的问题及解决方法
- 问题一:任务无法执行
- 解决方法:如电源选项中默认操作为“只有在计算机使用交流电源时才启动此任务”,那么使用电池电源时就会停止任务。这点需要格外注意,如果没有修改默认操作,任务无论如何都无法执行可能只是因为拔掉了电源。为了我们统计足够多的数据,最好把这个取消掉。(选中使用最高权限运行)
四、实践总结
- 这次实验让我知道自己电脑哪个软存在问题,也让我学习了多个扫描工具的使用方法,通过这些扫描工具,让我知道了使用恶意软件时注册表、文件等变化。使用下来,我觉得SysTracer最实用,通过对比不同快照之间的不同,可以清楚发现自己电脑的变化之处。
- 恶意代码的免杀和恶意代码的分析检测可以说是相辅相成,相爱相杀,二者之间一直都在博弈,经过这次实践与上次实践的相结合,更是觉得二者之间的博弈很有意思。恶意代码一方面改变自己的特征码,给自己加壳加编译来逃过杀软的查杀,一方面也要注重自己隐蔽性,通过dns隧道技术等方法来逃过防火墙等手段的阻截;而杀软则不断的收集大数据来分析可能的恶意代码特征,还要关注计算机内的可疑行为来试图发现新的恶意代码。
- 对于学习网络对抗来说,分析恶意代码的特征和行为还有杀软的免杀机制都可以让我们对这些内容有一个深入的理解,通过对系统注册表和进程端口等信息的分析来理解一个后门程序对计算机做了哪些事情,举一反三可以猜测如果存在恶意代码的话,要从哪些地方着手去发现和清理恶意代码。