20165214 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析 Week6
《网络对抗技术》Exp3 免杀原理与实践 Week5
一、实验目标与内容
-
1.实践目标
-
1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行。
-
1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
-
1.3假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
-
-
2.实践内容(3.5分)
- 2.1系统运行监控(2分)
- (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- (2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
- 2.1系统运行监控(2分)
实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。
- 2.2恶意软件分析(1.5分)
- 分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
-(3)读取、添加、删除了哪些注册表项
-(4)读取、添加、删除了哪些文件
-(5)连接了哪些外部IP,传输了什么数据(抓包分析)
二、实验步骤
步骤一:系统运行监控
使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。
-
1、使用schtasks指令。schtasks.exe是安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。
-
schtasks指令的参数:
TN
:任务名,我起为schtasks5214sc
:计时方式,这里用MINUTE表示以分钟为单位bn
:b是显示可执行文件的名字,n是用数字表示IP和端口TR
:要运行的指令、>
:输出重定向,也就是要将输出放在哪个文件,本次为c:\netstatlog.txt
-
根据上面参数构造指令为
schtasks /create /TN schtasks5214 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt"
。打开cmd,在cmd输入这句指令并回车。
-
-
2、打开C盘,新建schtasks5214.bat,输入
date /t >> c:\netstat5318.txt time /t >> c:\netstat5318.txt netstat -bn >> c:\netstat5318.txt
,保存并关闭。(由于在C盘权限不够不能直接创建,所以只能通过先在其他地方输入然后再复制到C盘目录下。) -
3、打开任务计划,查看我们在第一步创建的任务计划。
-
4、双击打开,在
操作
栏下点击编辑
,将程序或脚本
选择为第二步中所新建的bat脚本
-
5、考虑到开始实验的时间已经接近11点了,即将断点,于是再在
条件
栏下,将只有在计算机使用交流电源时才启动此任务
这一项取消
-
6、接着,在
常规
栏下选择使用最高权限运行
,点击确定保存。
-
7、然后就是等待。。(4小时过去了)。期间我尝试了断网,发现断网不会造成影响,网一连上就又继续获取相关数据了。打开netstatlog.txt进行查看:
-
8、使用excel进行数据分析。打开WPS,导入netstatlog.txt:
-
9、使用B列的数据生成数据透视图,统计如下:
使用最多的是火狐浏览器,其次是wps。看着这些数据,再回想昨天做实验的时候我所使用的app,能对得上。
安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
-
1、下载老师所给的资源SysinternalsSuite.zip,解压。sysmon就在解压好的文件夹中。
-
2、在使用sysmon之前,先在这篇文章中进行粗略的浏览,掌握大概的原理与方法。
-
3、查看sysmon的版本。右键Sysmon.exe,在属性->详细信息中进行查看
-
4、在sysmon所在目录下创建sysmon5214.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">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
<Image condition="end with">wps.exe</Image>
</ProcessCreate>
<ProcessCreate onmatch="include">
<ParentImage condition="end with">cmd.exe</ParentImage>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
<Image condition="end with">wps.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.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>
-
针对常用的Firefox和wps我把他们放在iniclude里。在上面的代码中,第一行的sysmon版本号要跟使用的sysmon对上。ProcessCreate表示进程创建,NetworlConnect是网络连接,CreateRemote是远程线程创建,FileCreate Time是进程创建时间。在onmatch后面跟的参数include和exclude分别表示“免检”和“必检”名单。
-
5、打开cmd,进入到sysmon所在的文件夹中,输入
sysmon.exe -i sysmon5214.xml
- 不知道为什么,这里提示版本不对,提示版本应该是3.10,然而我上面在查看版本号的时候是4.12。先改成3.10,再次运行,成功运行:
- 不知道为什么,这里提示版本不对,提示版本应该是3.10,然而我上面在查看版本号的时候是4.12。先改成3.10,再次运行,成功运行:
-
6、打开
事件查看器
,时间查看器(本地)->应用程序和服务日志->Microsoft->Windows->Sysmon->Operational
,双击Operational,可以查看按照sysmon5214.xml中的配置信息所记录的一些信息。选择其中任一条,可以看见进程号、运行的软件名等信息。
-
7、接下来使用实验3中的恶意程序(更换了ip地址,重新生成)进行回连,进行日志分析
-
8、打开
事件查看器
,根据运行时间可以很容易地找到刚刚运行的后门的相关信息。
-
9、回到kali,使用
webcam_snap
进行拍照。回到事件查看器,可以看到出现了两条这样的信息:
SearchFilterHost.exe是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,让用户能够更好的搜索出电脑中的任意资料。它会在计算机空闲时自动扫描索引位置的文件名、属性信息和给定类别的文件内容,这些索引位置默认包括桌面、收藏夹、开始菜单、系统目录。 -
10、再使用
getuid
指令,回到事件查看器,没有发现什么。 -
11、是不是使用不同的指令,日志是不同的呢?接下来尝试一下简单的
dir
命令,进行查看,发现没有出现什么提示。这是怎么回事呢?getuid和dir指令在network中都没显示。我没有找到原因。
(不过我倒是发现了wps一直在后台默默在用着我的网络。。。当我没上网的时候,network类别几乎都是wps.exe和wpscenter.exe,看来以后不用的时候还是将他们彻底退出吧)
步骤二:恶意软件分析
分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件(3)读取、添加、删除了哪些注册表项(4)读取、添加、删除了哪些文件(5)连接了哪些外部IP,传输了什么数据(抓包分析)。在这一步中,由于wps.exe关于network实在很烦人,我重新修改了sysmon的配置。
-
1、使用wireshark进行抓包分析。
-
打开wireshark,选择wlan模式。开始抓包后,本机启动恶意程序回连kali虚拟机,回连成功后停止捕包,输入筛选条件
ip.addr == 172.30.4.217
进行查看
-
可以看到一开始建立了三次握手连接。
-
再次开始抓包,kali调用屏幕拍照
webcam_snap
和获取uidgetuid
,然后停止捕包,进行查看 -
使用时
getuid
出现了4条记录:
-
使用时
webcam_snap
出现了很多条记录,我觉得应该是图片的空间比较大导致的:
-
-
2、使用Systracer分析(为了能够看到恶意软件连接时的变化,每尝试新的分析软件时,都先关闭连接再重新启动链接)
-
安装并运行systracer。systracer就好像一个“照相机”。他可以记录下计算机某个时刻的状态。然后过一段时间后再次“拍照”记录。通过比较两张“照片”中计算机的不同进行相应的分析。一开始我是在本机上做快照的,后来发现本机东西太多了,一次快照要花的时间太长。所以我决定用win7虚拟机来做。
-
未植入恶意软件之前,先进行一次记录;(记录1)
-
植入恶意软件之后进行一次记录;(记录2)
-
恶意软件回连之后进行记录;(记录3)
-
在kali终端进行相应操作之后进行记录。这里选的是webcam_snap(记录4)和pwd(记录5)。
-
选中记录1和记录2,点击右下角的
view different list
,再点击view
,可以看到增加了很多不知道是什么的文件和键值:
-
选中记录2和记录3进行比较:
-
运行的进程多了后门程序
-
植入了一些键值
-
可以看到连接的目的ip以及端口号
-
-
选中记录3和记录4进行比较(这里显示systracer没有注册):
- 再查看file栏下:
- 再查看file栏下:
-
选中记录4和记录5进行比较:
-
-
3、使用PEID检查是否加壳(PEID下载很简单,直接百度就可以知道找到)。
-
不加壳
-
压缩壳
-
加密壳(这里不小心删除掉了加密壳使用的软件hyperion,参考了这个回答找回。。有惊无险)
-
压缩壳后再加密壳
-
可以看到,只有有加密壳竟然都不能识别出来。。而我们之前实验的时候也是只要涉及到加密壳就不能回连。这两者是否有关联?
-
-
4、使用VirusTotal进行检查,结果如下:
- 可以看到该恶意代码的相关信息,MD5、SHA-1、文件类型、文件大小、加壳方式等信息。
三、遇到的问题
1、任务启动失败,在任务计划界面一直显示0x01,查询了一下0x01在windows表示运行失败。
解决方法:在同学的帮助下,我发现是因为在步骤一的第4小步的操作界面我没有去掉参数,导致了这一的情况。把参数去掉就解决了问题。
2、启动sysmon失败,提示如下:
解决方法:读提示信息后发现,运行Sysmon.exe需要管理员权限。于是使用管理身份打开cmd,重新输入,解决了问题。
3、想要把systracer转移到win7虚拟机中,插U盘无法识别
解决方法:关闭虚拟机,在USB控制器
选项勾选全部,再打开虚拟机,插入U盘,解决问题
四、基础问题问答
-
1、如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
答:可以使用schtasks定时监听,一段时间后统计数据;可以使用Sysmon,通过编写配置文件,监视相应的进程情况;可以使用Systracer进行快照比较。 -
2、如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
答:可以使用VirusTotal进行检查;可以使用Systracer进行分析,查看其对注册表、文件的修改;可以使用wireshark进行捕包分析,查看它连接到了哪些ip、与外部进行了哪些通信。
五、心得体会
本次实验难度不是很大,主要是一些相关软件的应用以及对相关数据的分析。我觉得比较费时间的一点是,遇到一堆数据不知从何下手进行分析,很多系统的应用都不懂是干嘛的,只能一个一个百度查,逐个排除嫌疑。不过这样下来以后我对系统的一些进程有了更好的了解,不会把他们和其他的进程混在一起分不清了。
通过对恶意代码的分析,也使得我对恶意代码的行为、特征有了更好的了解。
不过在网上查找相关信息的时候,甚至还有可以绕过分析的方法!令人惊讶。然而我们现在连做完全免杀都有点费力。看来学习的道路还很长。
感觉自己每次实验都要很久,因为老是喜欢进行各种各样的尝试。。问题是那些尝试竟然还都失败了,浪费了大把的时间。。