20145302张薇 《网络对抗技术》 恶意代码分析
实验问题回答
1.总结一下监控一个系统通常需要监控什么?用什么来监控?
- 我们要想监控一个系统,通常我们要监控以下几项信息:
- 注册表信息的增删添改
- 系统上各类程序和文件的行为记录以及权限
- 实现网络连接的进程,使用的IP地址和端口号等
- 我们可以使用以下软件工具来监控:
- wireshark进行抓包分析,查看系统到底进行了哪些网络连接
- TCPview工具可以查看系统的TCP连接信息
- 使用软件查看注册表信息的改动是否合理
- sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息
2.如果在工作中怀疑一台主机上有恶意代码,请设计下你准备如何找到对应进程、恶意代码相关文件。
- 使用tcpview工具检测有哪些程序在进行网络连接,是否有进程是我们未预设会连接网络的
- 查看该程序是否恶意修改了我们的注册表信息
- 去专业网站扫描可疑进程,大致了解进程的行为
- 使用PE解析软件查看可疑进程的详细信息,查看其是否加壳,分析调用的DLL及其函数用途
- 使用快照分析进程对系统做了哪些改变,新增文件是否是我们预知的
- 使用抓包软件分析进程网络连接传输的数据到底是什么
实验总结与体会
- 我们可以静态的或动态的分析你所认为可疑的软件
- 有一天我的电脑桌面上莫名其妙出现了一个游戏的图标,名称显示的是“超变态传奇”,当时我很惶恐,并不知道为何会突然冒出这样一个东西,根本不敢打开,我就查看了这个快捷方式的属性,发现他指向的是优酷文件夹里的一个程序:iku_startpic.exe,我就上网查了一下这个东西是干什么用的,但是没有发现什么结果,我就一直没有管这个程序了,这几天我翻出那个程序扫描了一下,确实有个别查杀软件将其定义为恶意软件,我就把他删除了,可以将其复原分析一波,然而这段话都是我的流水账,没什么有用信息哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
- 通过深入了解系统的各类信息,我们可以增添自己信任自己主机的信心
相关知识
恶意代码概念
- 恶意代码是指故意编制或设置的、对网络或系统会产生威胁或潜在威胁的计算机代码。最常见的恶意代码有计算机病毒(简称病毒)、特洛伊木马(简称木马)、计算机蠕虫(简称蠕虫)、后门、逻辑炸弹等。
恶意代码特点
- 恶意的目的
- 本身是计算机程序
- 通过执行发生作用
PE explorer
- PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。这个软件可直接浏览、修改软件资源,包括菜单、对话框、字符串表等; 另外,还具备有 W32DASM 软件的反编译能力和PEditor 软件的 PE 文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理 PE 格式的文件如:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR 等 32 位可执行程序。该软件支持插件,你可以通过增加插件加强该软件的功能, 原公司在该工具中捆绑了 UPX 的脱壳插件、扫描器和反汇编器.,非常好用。
PEiD
- PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。
- PEiD有三种扫描模式:
- 正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
- 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;
- 核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
Dependency Walker
- Dependency Walker是一款Microsoft Visual C++ 中提供的非常有用的PE模块依赖性分析工具,可以查看 PE 模块的导入模块.查看 PE 模块的导入和导出函数.动态剖析 PE 模块的模块依赖性.解析 C++ 函数名称.
实践过程记录
恶意代码静态分析
1.通过网上查毒平台查看软件报告
-
我们在http://www.virscan.org/这个网站上扫描一下自己上次实验生成的小恶意程序fool.exe,结果如下:
-
大多数查杀软件都检测其为病毒,我们点进文件行为分析查看一下这个程序到底会实现什么操作:
-
由上图我们发现fool.exe这个程序是由UPolyX v0.5加的壳;
-
它的网络行为为建立到一个指定的套接字连接,IP地址和端口号就是我们当初生成小代码时用的信息;与此同时他会检测自身是否被调试,还会创建事件对象;
-
更重要的是它自行删除了注册表键和注册表键值;
-
看到以上信息我们多半认为这是一个反弹连接式的后门。
2.PE explorer
-
我们使用PE explorer打开我们的fool.exe,界面如下:
-
目前显示的是PE文件头的信息
-
我们可以看到文件的编译时间为2009年6月4日17点14分22秒
-
链接器的版本号为6.0
-
接下来我们点击一下上面的“导入表(Import)”,查看一下这个程序都调用了哪些dll文件:
-
上图中的
ADVAPI32.dll
文件是一个高级API应用程序接口服务库的一部分,调用这个dll可以实现对注册表的操控,这值得我们注意 -
WSOCK32.dll
和WS2_32.dll
这两个DLL用于创建套接字,即会发生网络连接 -
显然,我们运行fool.exe只会出来一个命令行控制端,根本没有这些花里胡哨的东西,这个小程序谋图不轨啊。
3.PEiD
-
我们使用PEiD打开fool.exe来查看一下这个程序有没有加壳或是用什么来编译的:
-
在界面左下部分我们可以看到没有查出来他用什么加的壳,哦?一般没有加壳的软件会在那里都会直接显示编译器名称,没有找到可能是PEiD版本原因
-
与此同时,我们可以查看他反汇编之后的代码,只要你汇编学的好,就可以瞬间看破这个小程序。
4.Dependency Walker
-
我们使用这个软件打开fool.exe
-
这个软件有一个厉害的地方,就是他把程序的dll层级调用列出来了,他调用了什么dll,那些dll又调用了哪些文件,Dependency Walker将这些框架都摆好了,条理更加清晰细致,功能强大
-
上图显示,通过查看DLL文件的函数,我们发现fool.exe删除了注册表键和注册表键值
恶意代码动态分析
1.sysinternals工具集
(1)Tcpview
-
用于查看进行tcp连接的进程信息:
-
不看不知道,一看吓一跳,谁能想到,虚拟机进行了如此频繁的网络连接呢
(2)sysmon工具 -
首先我们在C:windowssystem32文件夹下找到cmd.exe,右键以管理员身份运行:
-
在sysinternals目录下安装
-
新建xml文件,里面可以编写相应你想记录的内容,在命令行下使用
sysmon.exe -c *.xml
命令可以对sysmon进行配置
-
配置成功后,我们查看sysmon确实在运行呢,我已经运行了两天了,日志里的东西肯定特别多……
-
在计算机管理工具-事件查看器下可以查看日志信息
- 事件ID=1代表应用程序日志信息;
- 事件ID=2代表安全性日志信息;
- 事件ID=3代表系统日志信息。
-
点开一个事件ID为1的进程,查看一下,信息如下图:
-
我们可以观察到该应用程序创建了一个进程,进程ID为5856,可以知晓进程的创建时间,父进程是谁,父进程的ID又是多少等等信息,而taskhost.exe是干什么的?
-
taskhost.exe
是Windows自带的一个进程,是负责Windows运行计划的,也就是那个计划任务程序,此程序可以定时设置系统中的相关操作,让操作系统到时间就执行用户所设置的相关操作,如果关闭此进程计划的定时任务就会失效。 -
我们所制定的任务计划和这个有非常紧密的联系,如果taskhost.exe有异常,那么任务计划多半是个废物,当然一般我们平时的操作也碰不到这个程序。
-
但是!如果我们发现
taskhost.exe
不在C:WindowsSystem32
目录下则一定是病毒或木马程序! -
多一嘴他的父进程是
svchost.exe
。这是一个属于微软Windows操作系统的系统程序,微软官方对它的解释是:Svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。 -
看一眼事件3的:
-
是QQ啊,还能看到使用的是tcp协议,源IP地址,源端口号,目的IP地址,目的端口号等信息,看一眼这个目的IP地址,我们在跟谁进行通信:
-
这什么啊……莫非他们有个分公司在广东?而且是移动的运营商。
-
事件2:
-
搜狗就不说了,但是后面这个DAO.exe程序在日志中出现了超多回,上网查一下:
-
这什么啊???这突如其来的心塞是怎么一回事……本来我还觉得这是NVIDA下属的文件应该没啥,所以这应该是好的程序对吧?一会拿去简要分析一下好了
2.SysTracer工具
-
在附件中下载SysTracer这个工具的安装包,默认安装即可
-
我们会使用这个工具中快照工具,这样方便我们比对恶意代码攻击成功后系统的改变,因为每次快照都要扫描注册表以及硬盘的信息,所以我们选择win 7虚拟机作为靶机
-
Kali的IP:192.168.234.131(NAT方式)
-
win7虚拟机的IP:192.168.234.129(NAT方式)
-
我们打开这个工具后,右侧工具栏显示如下图:
-
Take snapshot
键就是我们快照,点击进入后我们可以选择想扫描快照的部分,包括注册表和硬盘分区等,选择完毕后我们点击start等待快照完成即可。(因为我的虚拟机没有分区,所以默认选择扫描所有。)
1.在正常情况下,我们在win7虚拟机下快照保存为Snapshot #1;
2.Kali生成相应的后门,将文件通过ncat传到win7虚拟机下后快照保存为Snapshot #2;
3.Kali开启msf监听,在win7下运行后门程序后快照保存为Snapshot #3;
4.Kali对win7虚拟机进行截图后,在win7下快照保存为Snapshot #4;
5.Kali对win7进行一些权限操作后,在win7下快照保存为Snapshot #5.
-
如下图所示,我们可以选择两个快照进行campare,分析每次操作对系统的影响:
-
快照结果对比分析:
-
1&2——传输文件过后注册表发生变化;C盘新增了我们传输的文件:
-
2&3——Kali回连成功后注册表发生变化;多了一个注册表键;C盘windows/Prefetch目录下新增了一个BIGFOOL.EXE文件;进程信息发现我们有网络连接:
-
3&4——截屏后,注册表信息又发生变化
-
4&5——在进行一些权限操作后,进程信息显示后门程序有联网诉求
-
3.wireshark
-
在Kali与win7进行秘密数据通信时我们可以使用wireshark来捕包分析数据信息,相信大家都会。
-
因为虚拟机安装wireshark太慢,我就捕捉了win 8主机与Kali的通信数据信息:
-
Kali的IP地址:172.20.10.4
-
win8的IP地址:172.20.10.2
-
上图是捕获的一个双方通信的数据包,我们可以看到他使用的端口是我们定义的5302端口,但是数据是加密的
-
如上图,我们也捕捉到了win8主机与未知IP地址通过tcp三次握手建立了网络连接……然而这个IP地址是谁的我就不清楚了……搞得我很慌啊
4.任务计划
-
在尝试了n多次后终于成功了……
-
我们进入计算机-管理-任务计划,创建一个任务计划,命名为netstat5302;
-
触发器我们选择每天每隔5分钟执行一次
-
我们在C盘下创建一个文件夹:5302,在5302文件夹下准备写一个脚本
-
在5302下创建一个netstat5302.txt,内容如下:
date /t >> c:
etstat5302.txt
time /t >> c:
etstat5302.txt
netstat -bn >> c:
etstat5302.txt
-
如上内容意在让我们的网络记录可以显示我们连接的网络的时间和日期信息
-
保存后我们将文件的后缀改为bat,即
netstat5302.bat
-
将任务计划的操作选项栏的启动程序设为我们的netstat5302.bat,参数为
>>c:5302 etstat5302.txt
,这样我们的网络记录信息netstat5302.txt就会保存在C盘5302文件夹下
-
创建完成,我们运行这个任务,发现5302下出现我们的txt文件,但是没有显示出我们想要的网络连接记录信息,而是:请求的操作需要提升
-
这时,我们右键netstat5302.bat,点击管理员权限运行,即成功
-
一看还是和tcpview一样,虚拟机联网很频繁啊,QQ也是