《网络对抗技术》Exp4 恶意代码分析
《网络对抗技术》Exp4 恶意代码分析
一、实践目标
1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。 2.恶意软件分析 分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件读取、添加、删除了哪些注册表项,读取、添加、删除了哪些文件,连接了哪些外部IP,传输了什么数据
二、实践内容
Ⅰ.系统运行监控—任务计划
1.写好脚本(实际上就是命令行语句)netstat.bat,再新建一个txt文档netstatlog.txt用于接收数据
netstat -bn >> C:\Users\killmebbay\Desktop\schtask\netstatlog.txt
2.用命令行创建一个计划任务(感觉直接创建会快一点)
schtasks /create /TN netstat1204 /sc MINUTE /MO 1 /TR "C:\Users\killmebbay\Desktop\schtask\netstat.bat"
TN
是创建的计划任务名是netstat1204,sc
表示计时方式,TR
表示执行的指令,>
表示输出重定向
3.打开任务计划程序
4.在常规中选择使用最高权限运行
5.等待若干分钟后就可以得到想要的数据了
6.利用python处理数据
# -*- coding: UTF-8 -*-
from collections import Counter
import matplotlib.pyplot as plt
import re
f = open( 'C:\\Users\\killmebbay\\Desktop\\schtask\\netstatlog.txt', 'r',encoding = 'UTF-8' )
c=f.read()
f.close()
li=re.split("\\s+",c)
re = Counter(li)
# print(re)
x=re.keys()
y=re.values()
fig = plt.figure()
plt.bar(x,y,color = '#9999ff',width = 0.2)
plt.title('统计图')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
python xxx.py
值稍微有点多,但可以用放大镜看一下
放大后发现这几个出现的次数比较多,命令行也还不错
出现最多的是TCP,established,established意思是TCP连接成功,再下来就是msedge.exe,是浏览器发起了36次TCP连接,下面列举出来连接的一些网站,端口基本上都是通过443端口(https)
Ⅱ.系统运行监控—sysmon
1.安装sysmon
<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">WeChat.exe</Image>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">WeChat.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">WeChat.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">192.168.31.63</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>
2.启动sysmon
sysmon -accepteula -i sysmon1204.xml
-i第一次启动时用,之后更新xml配置可以-c完成
3.查看记录
打开事件查看器
应用程序和服务日志/Microsoft/Windows/Sysmon/Operational
查看记录
抓到了shell.exe
Ⅲ.恶意软件分析
1.用wireshark分析TCP包
ip.src eq 192.168.31.177 or ip.dst eq 192.168.31.177
在程序启动的时候,就开始收到从192.168.31.177IP的11204端口发来的TCP请求包,是因为在Kali虚拟机中已经启动了exploit监听,但都被拒绝了,因为shell.exe还没有启动。
shell.exe启动后,TCP请求被允许,之后编号24630的链接传输了4字节数据,之后带有[PSH,ACK]包都传了1460字节的数据,当kali虚拟机发出screenshot的命令后得到的截图的数据也应该是 通过这种方法传输来的。下图是其中一个包的数据:
5f8bc65e5b5dc3558bec566832000200ff750c33f6e88e18000050e8b30f000083c40c85c07507be90040000eb0bff750c50e8160a000059598bc65e5dc3558bec5356578b7d0c57e8f4120000c70424320002008bd857e84c18000050e8710f00008bf083c40c85f67507bf90040000eb52ff7614e85a7c000056e87c0a0000595983f8037531837e3000742b684600020057e810180000595950684700020057e802180000595950ff76185756ff563083c4148bf8eb036a325fff7614e8277c00005953ff750857e84619000083c40c8bc75f5e5b5dc3558bec51535657ff750ce85a1200008365fc008bd8c7042432000200ff750ce8ac17000050e8d10e00008bf883c40c85ff7507be90040000eb3cff7714e8ba7b000057e8dc090000595983f803751b8b472c85c074148d4dfc51ff7718ff750c57ffd083c4108bf0eb036a325eff7714e89d7b000059ff75fc680c00080053e83114000053ff750856e8ae18000083c4188bc65f5e5b8be55dc3558bec51535657ff750ce8c01100008365fc008bd8c7042432000200ff750ce81217000050e8370e00008bf883c40c85ff7507be90040000eb3cff7714e8207b000057e842090000595983f803751b8b473485c074148d4dfc51ff7718ff750c57ffd083c4108bf0eb036a325eff7714e8037b000059ff75fc684800020053e83913000053ff750856e81418000083c4188bc65f5e5b8be55dc3558bec51515657ff750ce8261100008365f8008bf8c7042432000200ff750ce878160000680c000800ff750c8bf0e826170000568845fce88b0d00008bf083c41485f67447ff7614e87b7a00005985ff742456e8980800005985c074198b462485c07412ff75fcff7618ff750c56ffd083c4108945f80fb64dfc5156e8a9080000ff7614e8557a000083c40c57ff7508ff75f8e87017000083c40c33c05f5e8be55dc3558bec56ff750ce8861000006a018bf0680c00080056e8c312000056ff75086a00e83f1700008b451083c41c83200033c05e5dc3558bec81ec8000000053576a0533d28d7d845b33c08955806a0659f3ab8955b88d7dc08955bcab8955e88955fcababe8852300008945f885c00f84ab020000837d18018b451c8945b88b4520568b75108945c0c645c800c745801c0000007513c745ecc8800210c745f4f5000000e9d4000000837d18020f85d201000083659c008d7da06a065933c0c745ecc0810210f3abbeb4800210c745f4440100008d7dcc6a406800300000a5680020000068f095006ba5a5a566a58b751056ff15bc1002108945f085c00f848a0100006a1c8d4d9c515056ff15ec10021085c00f8474010000ff75a8e8bccf00008bf85985ff0f8461010000ff75a8689000000057e829d9000083c40c6a00ff75a857ff75f056ff15cc10021085c00f843801
kali虚拟机中照片的二进制信息。
2.通过Ⅰ中的任务计划分析
在shell.exe启动后,通过上文中的程序找到了192.168.31.63(本机)向192.169.31.177(Kali虚拟机)的TCP包,由此可见在程序启动后会隔一段时间就会发送TCP包。
3.通过PEview分析
上面三张图展示了程序运行所依赖的5个动态库和其中的操作流程。
根据上图可以看出本程序使用了
ADVAPI32.dll
、KERNEL32.dll
、MSVCRT.dll
、WS2_32.dll
、WSOCK32.dll
,这五个链接库,其中WS2_32.dll
、WSOCK32.dll
是比较熟悉的win上面编写SOCKET用的,这是用来回连使用的,而ADVAPI32.dll
是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关,从这句解释就可以看出,本后门程序的潜在的威胁,KERNEL32.dll
是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。而MSVCRT.dll
是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft Visual C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。AllocateAndInitializeSid函数是分配和初始化一个安全标识符(SID),带有8个子权限,freesid作用是释放一个安全标识符 (SID)之前分配使用 AllocateAndInitializeSid函数,成功则返回0,失败则返回一个psid的参数。
其中我感觉最重要的库是
WS2_32.dll
,其中的两个函数WSARecv,WSASend,一个是发送数据的函数一个是接受数据的函数,是Windows socket编程中的找那个要函数,称为IO完成端口,IOCP,这篇文章介绍的还不错:IO完成端口(IOCP) 作者:木文
4.查看PEiD的信息
5.查看Stud_PE的信息
读取、添加、删除了注册表项需要管理员权限,而本程序只是普通启动,应该不涉及修改注册表,读取、添加、删除的文件,连接了的外部IP,传输的数据在上文中已有分析。
6.使用OllyDbg分析程序
①打开程序,发现程序的入口是0x00401508
②一直向下单步执行(F7),经历了无数的看不懂的命令后:
③再次跳转
④再再次跳转
⑤执行函数
⑥再跳转,然后在⑤⑥中无限循环
关于这部分我确实实在是看不懂,但是感觉有一篇文章很不错,推荐感兴趣的人看一看:一段 shellcode 代码的分析 作者:Johvid,感觉就是shell.exe反复横跳一段时间后不建立连接就停止了。
7.使用SysTracer分析
systracer直接去官网下载就行了,安装的时候点击第一个
点击take snapshot,再点击确定就可以照一个快照出来
在虚拟机中开始getsystem时发现在windows中添加了这个动态库,经过几次测试发现这个名字似乎是6位随机小写字母
查看其中添加、删除了的注册表项,添加、删除的文件,好像还有一些更新的内容
三、实验习题
(1)监控http和https请求可以知道浏览的内容,可以通过任务计划或者事件查看器实现;监控其有哪些端口是开启的,这个可以通过netstat -a -n
实现;截取目标机器的屏幕,可以通过screenshot
实现;利用器摄像头录制视频,录制音频,分别可以通过webcam_snap
和record_mic
实现。
(2)Stud_PE;PEiD;PEview;ollydbg