20181207朱涛《网络对抗技术》Exp4 恶意代码分析
前导知识
Schtasks
-
安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。
-
创建新的计划任务。
sysmon
- sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
PEiD
- PE Identifier是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名。
PE Explorer
- PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。
实践目标
- 监控你自己系统的运行状态,看有没有可疑的程序在运行。
- 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令sysinternals,systracer套件。
- 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
实践内容概述
-
系统运行监控
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
-
恶意软件分析,分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
-
读取、添加、删除了哪些注册表项
-
读取、添加、删除了哪些文件
-
连接了哪些外部IP,传输了什么数据
-
实验步骤
系统运行监控
任务一:使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- 使用命令
schtasks /create /TN netstat1207 /sc MINUTE /MO 5 /TR "cmd /c netstat -bn c: etstatlog.txt"
命令创建计划任务netstat1207
TN
是TaskName(任务名称)的缩写,我们创建的计划任务名是netstat1207;sc
表示计时方式,我们以分钟计时填MINUTE;TR = Task Run
,要运行的指令是netstat -bn
;- b表示显示可执行文件名;
- n表示以数字来显示IP和端口;
>
表示输出重定向,将输出存放在c: etstatlog.txt
文件中
-
创建一个
netstat1207.bat
脚本文件,使用管理员权限将其放入C盘下并写入以下内容date /t >c: etstat1207.txt time /t >c: etstat1207.txt netstat -bn >c: etstat1207.txt
-
可先创建txt文本文件,使用记事本写入后通过修改文件名来修改文件格式
-
若无法更改文件扩展名,可点击上方的
查看
,勾选文件扩展名:
-
- 打开
任务计划程序
,可以看到新创建的这个任务:
-
双击这个任务,点击
操作
并编辑
,将程序或脚本
改为我们创建的netstat1207.bat
批处理文件,确定即可。- 在
常规
选项卡中,一定要勾选使用最高权限运行
,否则在C盘netstat1207.bat
同目录下不会出现netstat1207.txt这个文件,还可能导致文件不能自主更新或者记录里出现权限问题 - 在
操作
选项卡中,在添加参数(可选)
一栏一定要将原有参数清空 - 在
条件
选项卡中,电源选项中默认操作为只有在计算机使用交流电源时才启动此任务
,使用电池电源时就会停止任务。如果没有修改默认操作,任务无论如何都无法执行可能只是因为拔掉了电源(为了我们统计足够多的数据,最好把这个取消掉)
- 在
- 在任务计划程序中选中
netstat1207.bat
将其状态设置为运行
,此时在C盘netstat1207.bat
同目录下出现一个netstat1207.txt
文本文件,运行一段时间后,打开该文本文件就会看到每隔一段时间被传输到这里的联网数据
-
将netstat5216.txt已经记录的数据导入wps表格中去
- 新建一张xlxs空白表,在编辑栏中选中
数据
,在靠右的位置找到`导入数据`` - 在
第一步:选择数据源
点击C盘目录下的netstat1207.txt
- 依次选择
其他编码
,其他分隔符号
,分隔符号除了其他全部勾选,生成数据表
- 新建一张xlxs空白表,在编辑栏中选中
- 点击上方菜单栏中的
插入
,选择数据透视图
- 选中我们需要分析的协议单元格,放在新工作表中
- 在新的工作表中,点击右侧的
字段列表
,全选后去除图中的TCP字段(因为此处我们关注的是联网exe,而不是连接情况),然后点击确定,并将它拖放到下面的轴
和值
,就生成了我们想要的透视图。 - 由统计数据可知,联网最多的程序是WPS
WPS.exe
,排名第二的有很多程序,分别是是edge浏览器msedge.exe
、微信WeChat.exe
、SearchApp.exe
(这是微软的进程,有关搜索的)、以及wpscloudsvr.exe
(这是金山WPS办公软件云服务进程)。虽然并未检测到陌生的有危害性的exe软件,但还是要时常关注一下这些自启动程序,会很大程度避免入侵。
任务二:使用sysmon工具监控系统(安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。)
-
下载老师给的安装包并解压sysinternals
-
可选择的事件过滤器有:可选择的事件过滤器有
-
ProcessCreate 进程创建
-
FileCreateTime 进程创建时间
-
NetworkConnect 网络链接
-
ProcessTermina 进程结束
-
DriverLoad 驱动加载
-
ImageLoad 镜像加载
-
CreateRemoteTh 远程线程创建
-
RawAccessRead 驱动器读取
-
ProcessAccess 进程访问
-
FileCreate 文件创建
-
RegistryEvent 注册表事件
-
FileCreateStre 文件流创建
-
-
确定要监控的目标:在这里我选择
进程创建
、进程创建时间
、网络连接
、远程线程创建
-
过滤器事件的选项:
-
进程创建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
-
-
-
在sysmon所在目录下创建配置文件
sysmon1207.xml
(可以先创建txt文件,之后再转换格式)
<Sysmon schemaversion="4.12">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<ProcessCreate onmatch="exclude">
<Image condition="end with">msedge.exe</Image>
</ProcessCreate>
<ProcessCreate onmatch="include">
<ParentImage condition="end with">cmd.exe</ParentImage>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">msedge.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">msedge.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
,exclude
相当于白名单,不用记录;include
相当于黑名单。- 在代码中,第一行的
sysmon
版本号要跟使用的sysmon
一致。查看版本号的方法:右键点击Sysmon64.exe
,点击属性
,在弹框中的编辑栏选中详细信息
,即可查看版本号。(请注意:如果使用老师的Sysmon64.exe,其版本号是3.10,不是4.12) Image condition
需要根据自己使用的浏览器进行更改,edge浏览器是“msedge.exe”- 网络连接过滤掉了浏览器的网络连接、回环地址和目的端口为
137
的连接服务,并记录目的端口为80(http)
和443(https)
的网络连接137
端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。127.0.0.1
表示回环地址。
- 远程建成创建记录了目标为
explorer.exe、svchost.exe、QQBrowser.exe、winlogon.ex
e和powershell.exe
的远程线程。explorer.exe
是Windows程序管理器或者文件资源管理器svchost.exe
是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。winlogon.exe
是Windows NT 用户登陆程序,用于管理用户登录和退出。powershell.exe
是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
-
打开cmd,进入到sysmon所在的文件夹中,输入
sysmon.exe -i sysmon1207.xml
- 若以用户身份运行上述命令,会提示如下信息:
- 使用管理员身份运行上述指令,此时会弹出一个弹框,选择agree。
- 右键Windows标志,找到事件查看器,在
应用程序和服务日志
—Microsoft
—Windows
—Sysmon
—Operational
可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别、详细信息等等
- 拖拽滚条,在下方找到我们的sysmon20181207.xml
-
分析日志,我分析的是自己生成的后门文件
- 按照实验三的步骤,启动回连到kali,可以查看到这条日志,如图所示:
- 在16:12:47时我通过Linux获取了ipconfig,在事件查看器中看到了日志,调用了ipconfig.exe
任务三:恶意软件分析
(一)静态分析
- 文件扫描(VirusTotal、VirusScan工具等)
- 文件格式识别(peid、file、FileAnalyzer工具等)
- 字符串提取(Strings工具等)
- 反汇编(GDB、IDAPro、VC工具等)
- 反编译(REC、DCC、JAD工具等)
- 逻辑结构分析(Ollydbg、IDAPro工具等)
- 加壳脱壳(UPX、VMUnPacker工具等)
-
使用VirusTotal分析恶意软件
-
把生成的恶意代码放在VirusTotal进行分析,情况如下:
34/59的检出率还是很高的
-
- 点击
detail
可以查看细节,可以看到这个文件的三个算法的摘要值MD5、SHA1、SHA3、文件类型、文件大小,以及TRiD文件类型识别结果(注:TRiD通过读取文件头,根据特征码进行文件类型匹配)、算法库支持等信息。
- 检测实验三种upx文件,能够在detail中查看到upx的类型。
-
使用PEiD分析恶意软件
- 首先扫描未经过其他操作的后门20181207_backdoor.exe,结果是
什么都没找到[调试]
- 首先扫描未经过其他操作的后门20181207_backdoor.exe,结果是
- 再扫描加密壳的后门judy_hyperion_upx.exe,结果也是
什么都没找到 *
- 接着扫描压缩壳的后门judy_upxed.exe,结果是
UPX 0.89.6……
,发现了我们的压缩壳并写出来版本号
-
反编译、反汇编(PE Explorer工具)
- 在PE Exploer中打开后门程序backdoor.exe,显示出文件头信息,在图片中我们可以看到平台类型、节的数量、时间戳、符号表的位置、可选文件头、代码节的大小以及优先装载地址等信息。
- 选择菜单栏中的
view
->import
,可以查看调用的DLL文件
可以看到更加详细的调用DLL文件的信息。
- msvcrt.dll:微软在windows操作系统中提供的C语言运行库执行文件
- kernel32.dll:属于内核级文件,它控制着系统的内存管理、数据的输入输出操作和中断处理,是必需的
- advapi32.dll:一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关,会受到病毒的侵扰及篡改,导致系统文件丢失、损坏
- wsock32.dll:Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序,是一个对系统很关键或很可疑的文件。
- ws2_32.dll:Windows Sockets应用程序接口。一些病毒会在杀毒软件目录中建立伪"ws2_32.dll"的文件或文件夹,在杀毒软件看来这是程序运行需要的文件而调用,这个所谓的“文件”又不具备系统"ws2_32.dll"文件的功能,所以杀毒软件等就无法运行了而提示:应用程序正常初始化失败。
- 菜单栏选中
view
->resources
,可以查看到与VirusTotal和PEiD中一样的版本信息
- 这款软件的主要功能是实现反汇编,可以在菜单栏
tools
->disassembler
,可以看到将该文件反汇编的结果
(二)动态分析
-
快照比对(SysTracer、Filesnap、Regsnap工具等)
-
抓包分析(WireShark工具等)
-
行为监控(Filemon、Regmon、ProcessExplorer工具等)
-
沙盒(NormanSandbox、CWSandbox工具等)
-
动态跟踪调试(Ollydbg、IDAPro工具等)
-
使用systracer分析恶意软件
-
下载systracer,安装并进行捕包分析systracer
-
快照比对(SysTracer工具)
-
SysTracer是一个系统工具,可以帮助您找到应用于计算机中不同项目和区域的更改(可能是恶意软件导致的更改)为了发现这些更改,SysTracer执行系统扫描,记录有关文件和文件夹,注册表项,系统服务,驱动程序,当前活动的进程,已加载的库(DLL)和计划在系统启动时运行的应用程序的信息。
-
点击snapshot,点击
start
,这个拍摄完成后会自动停止,stop
表示终止而非结束,时间会根据我们电脑的实际情况而定,一般会有几秒钟的过程,我创建了五个进行对比,分别是:
Snapshot #1:不进行任何操作;
Snapshot #2:运行后门程序并成功反弹连接;
Snapshot #3:获取shell并获取被攻击机文件详情;
Snapshot #4:使用msf命令ipconfig;
Snapshot #5:使用msf命令getuid。
-
-
- 对比快照1和快照2
在snapshots那一页修改我们需要对比的快照,点击compare,在view mode中选择Only differences方便查看,在Files选项中查看到的结果如下:
也可以在`application`中的`opened ports`中我们能看到后门20181207_backdoor.exe连接的本地地址和目标地址以及端口号:
- 在`opened handles`中,可以看见增加了一些文件,也删除了一些文件:
- 在`loaded dll`中,启动后门程序后增加和删除的dll文件:
- 在`running processes`中,点击`1211upx.exe`显示为`SysTracer no registered`
-
对比快照2和快照3
- 在
opened ports
中我们能看到主机与虚拟机vm间的交互;
- 在
- 在`loaded dll`中,启动后门程序后增加和删除的dll文件:(这里显示的没有删除的文件,全为增加的)
- 在`running processes`中,可以看见多出来两个`cmd.exe`和`conhost.exe`(但是均不可查看)
- Linux调用shell之后,修改了注册表中本机键值的conhost.exe,并删增了用户键值下的读者修订信息:
- conhost全称是console host process,即命令行程序的宿主进程,不是病毒木马。
-
对比快照3和快照4
可以看到一系列文件的增删情况:
-
对比快照4和快照5
可以看到一系列文件的增删情况:
-
使用wireshark对流量进行抓包分析
注意:接口应该选择VMnet8这个,否则抓不到Kali和主机之间的包
- win10执行后门程序judy_upxed.exe,进行回连,输入过滤条件
ip.addr == 192.168.141.130
(虚拟机的ip地址),可以看到Wireshark上捕获到大量的TCP传输,输入其他命令,Kali会不断给Windows传一大堆ACK包,有时还伴有PSH+ACK包。(PSH就表示有 DATA数据传输)
开始抓包后,Kali中启动监听,然后Windows端回连,可以看到TCP三次握手建立连接的过程,目的端口是Kali中设置的监听端口1207,还可以看到目的和源IP地址:
- win10执行后门程序judy_upxed.exe,进行回连,输入过滤条件
实验后回答问题
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 使用Windows计划任务schtasks:定期查看网络连接情况,包括IP和端口,并进行统计分析,确认IP所属和连接发起方详情。
- 使用sysmon工具:配置好想要查看的选项,比如网络连接、注册表信息等,通过所生成的日志进行查看分析。
- 使用Process Explorer工具,监视进程执行情况。
- 使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
- 使用PEiD、PE Exploer工具:查看一个程序是否加壳,并进行反汇编、反编译,查看并分析该程序是否有违规操作。
- 使用sysTracer工具:进行快照对比,发现恶意代码对注册表、exe可执行文件的操作。
- 使用Wireshark工具:捕获数据包,分析数据流情况。
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
-
使用systracer工具分析恶意软件,查看其对注册表和文件的修改。
-
使用Wireshark进行抓包分析,监视其与主机进行的通信过程。
-
使用Fiddler进行抓包分析,监视其与主机进行的通信过程。
-
使用PEiD查看程序是否加壳,加的什么壳
-
使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
实验总结
这次实验我是站在巨人们的肩膀上完成的,少走了很多的弯路。从前生成的后门程序原以为没有用了,就都删掉了,万万没想到后面的实验还会用到。虽然但是,令我印象最深刻的还是利用systracer分析的环节,有一些摸不着头绪,希望可以和老师同学们多多交流。