2018-2019 2 20165203 《网络对抗技术》 Exp4 恶意代码分析
实验要求
-
监控你自己系统的运行状态,看有没有可疑的程序在运行。
-
分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
-
假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
实验任务
实践内容(3.5分)
- 系统运行监控(2分)
(1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
(2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。
- 恶意软件分析(1.5分)
分析该软件在(1)启动回连(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
(3)读取、添加、删除了哪些注册表项
(4)读取、添加、删除了哪些文件
(5)连接了哪些外部IP,传输了什么数据(抓包分析)
该实验重点在“分析”,不是“如何使用某软件”。组长、课题负责人要求写细一点,其他人可以重点放在分析上。
基础知识问答
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
我感觉后门程序会
①创建一些进程来进行恶意行为
②占用一些端口
③修改我电脑上的一些文件,偷看我的文件内容
④连接一些网络以进行一些信息交互
监控的话,可以
①让主机执行netstat并分析网络连接情况。
②还可以利用Sysmon,编写配置文件,记录日志。
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
①利用Wireshark抓包,进行分析有没有异常的或可疑的连接。
②还可以利用Systracer来拍摄快照,进行对比分析改变的注册表及文件信息。
实验过程及步骤分析
任务一 使用系统运行监控
1. 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
(1)使用schtask监控系统运行
-
对于计划任务,我打算使用
Schtasks
命令来监视,学姐的博客中建议阅读Schtask命令详解。 -
学习也要有目的地学习,我们想要创建一个计划任务,于是,了解到与创建任务有关的命令参数:
/tn TaskName ------- 指定任务的名称
/tr TaskRun ------- 指定任务运行的程序或命令
/sc schedule ------- 指定计划类型,有效值MINUTE表示指定计划的单位时间为minute。
/mo modifier
指定任务在其计划类型内的运行频率,默认值为1
由此,命令可为
schtasks /create/tn TaskName /tr TaskRun /sc MINUTF [/mo {1 - 365}]
第一步:创建一个计划任务
- 在Windows7下输入
schtasks /create /TN 20165203netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c: etstatlog.txt"
即可以每分钟监测哪些程序在利用网络,并且可以把结果记录进netstatlog.txt文件里,如图所示创建成功。
在文档中如何显示日期和时间呢?我们需要通过bat
批处理来实现。那什么又是bat批处理
呢?学姐推荐了dos命名大全,.bat文件的写法,
>命令在清除掉原有文件中的内容后才把新的内容写入原文件
>>命令会另起一行把新的内容追加到原文件中。
time,显示和设置DOS的系统时间。[格式] time [hh[:mm[:ss[.cc]]]
date,显示和设置DOS的系统日期。[格式] date [MM-DD-YY]
netstat,显示与IP 、TCP 、UDP 和ICMP 协议相关的统计数据
-b显示包含于创建每个连接或监听端口的可执行组件
-n以数字形式显示地址和端口号。
所以,最后bat文件如下:
date /t >> c:
etstatlog.txt
time /t >> c:
etstatlog.txt
netstat -bn >> c:
etstatlog.txt
第二步:
- 在桌面上创建一个netstatlog.txt文件,文件内容为上面分析的内容。
date /t >> c:
etstatlog.txt
time /t >> c:
etstatlog.txt
natstat -bn >> c:
etstatlog.txt
- 保存后修改文件名为"netstatlog.bat";
- 将其复制粘贴到C盘,需要用管理员权限。
第三步:编辑任务
- 首先,我们需要进入任务计划程序:
点击控制面板
-> 选择管理工具
-> 选择任务计划程序
- 在
活动任务
中找到我们创建的计时任务20165203netstat
,并双击点开。
- 点击左数第三个选项
操作
-> 点击右栏中的属性
-> 属性页面上方的操作
- 双击任务进入
编辑操作
界面
- 在
程序或脚本
处点击浏览
-> 选择我们创建的netstat.txt
,添加参数
处可选空。
-
修改完毕后,点击确定就可以啦。
-
还要提高任务权限。(后面问题解决模块详细说明)
- 查看C盘目录下的
netstat.txt
文件,就已经有了时间的记录了,任务的创建完成了。
第四步:接下来我们要做的就是等待,等待的时间取决于你想要监视的时长,注意,一定是电脑接通交流电源的时候监视任务才能运行哦,可不要竹篮打水一场空。
第五步:分析数据
得到了数据,我们就要分析数据了,这需要我们的数学知识和计算机基本操作知识了,分析数据最直观的就是统计图的形式了,那么在哪里可以找到统计图呢?我的选择是Excel。
-
导入数据:在新建的excel文件中选择上方的
数据
->获取外部数据
->自文本
。并选择带有我们所要统计数据的文本netstatlog.txt
,点击导入
。 -
进入向导后,选择
分隔符号
,点击下一步
。
- 进入第二步后,选中全部分隔符号,点击
下一步
。
- 进入第三步后,
列数据格式
选择常规
,点击完成
即可。
- 鼠标选中左上角第一个单元格,点击
确定
即可。
- 如此就得到了我们的待分析的数据了。
第六步:得到数据的统计图,并进行统计学分析
我们可以统计一下哪个程序连接互联网的次数最多。
- 统计哪个程序连接互联网的次数最多,自然我们的数据对象就是我们的程序(第2列),我们首先选中第2列。
- 在上方的
插入
->数据透视图
- 选择在一个新工作表中生成
- 右侧
选择要添加到报表的字段
,点击下三角
,取消没有意义的字段(因为TCP和一些时间信息不在我们统计范围内,我们需要的是程序名),点击确定
。
- 将我们设置好的字段拖到如图所示的
轴字段
和数值
两个区域中。
- 接下来就看到我们的图了。
分析一下,根据我的图,联网最多的是虚拟机vm对应的程序vmware-hosted.exe
,因为我一下午一直在整理我虚拟机里的文档,用虚拟机做可信的实验,嘻嘻,排名第二的是vmware.exe
,是虚拟机的一个进程程序,此外,我们还可以看到大家熟悉的微信wechat.exe
,QQTIMTIM.exe
等等。
我们还可以分析一些进程程序的连接位置,干了什么事,例如,我的搜狗浏览器SougouExplorer.exe
的外部地址是36.110.170.195:55261
,应该是我在查东西的时候进入到这个地址然后进行数据传输。
(2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
这一步,我想在Windows7虚拟机里做。
- 首先,我们确定监控对象:
我选择的是进程创建ProcessCreate、进程创建时间FileCreatTime、网络连接NetworkConnect、远程线程创建CreateRemoteThread。
- 接下来,来写配置文件。
根据自己想要监控的事件对应的配置文件,因为使用浏览器很多,为了,所以,我不想监视虚拟机的浏览器,自然就要过滤掉对应iexplorer.exe
,建立一个配置文件20165203Sysmoncfig.txt
,内容如下:
<Sysmon schemaversion="3.10">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<ProcessCreate onmatch="exclude">
<Image condition="end with">iexplore.exe</Image>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">iexplore.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">iexplore.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">127.0.0.1</SourceIp>
</NetworkConnect>
<NetworkConnect onmatch="include">
<DestinationPort condition="is">5203</DestinationPort>
<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>
解释一下我的文件:
-
- exclude为白名单,里面是不用记录的文件。include是黑名单,需要重点监视的文件。
-
- Image condition这里是自己使用的浏览器,我的Windows7虚拟机用的是IE浏览器,所以,我用的是
iexplore
,自己可以写自己常用的浏览器,可以在任务管理器中的进程中查看。
- Image condition这里是自己使用的浏览器,我的Windows7虚拟机用的是IE浏览器,所以,我用的是
-
- 进程的创建时间我也没有创建浏览器进程的时间。
-
- 网络连接我过滤掉了浏览器的网络连接、源IP为127.0.0.1(本机IP)的网络连接和目的端口为137的连接服务,且查看目的端口为5203、80(http)和443(https)的网络连接。
-
- 远程线程创建记录了目标为
explorer.exe
、svchost.exe
、winlogon.exe
和powershell.exe
的远程线程。
- 远程线程创建记录了目标为
-
把配置文件放在C盘根目录下。
-
我们在[老师给的链接]https://gitee.com/wildlinux/NetSec/attach_files)上下载
SysinternalsSuite201608.zip
,并解压。 -
以管理员的身份进入cmd.exe,输入
sysmon.exe -i C:20165203Sysmoncfig.txt
以安装sysmon。 -
输入运行后会弹出如图所示的一个窗口,点击agree即可。
- 成功安装后,如图所示。
接下来,我们来查看一下我们的日志
-
右击
计算机
,点击打开管理
-
点击左侧
系统工具
->事件查看器
- 点击左侧
事件查看器
右侧小箭头,选择日志的位置:应用程序和服务日志/Microsoft/Windows/Sysmon/Operational
- 利用Sysmon具体分析日志,我所分析的日志为自己生成的后门程序
20165203_backdoor.exe
。
分析:
-
- 启动回连、安装到目标主机。
-
- 如图所示,可以找到自己在23:52运行的后门文件20165203_backdoor.exe 对应的日志。
-
- 我还发现了
qqpctray.exe
的程序启动,这应该是电脑管家试图杀死后门程序所启用的程序。
- 我还发现了
-
- 我又试了一下:
dir、shell、getuid、getpid
等一些操作我又发现了一些新的线索。
- 我又试了一下:
-
-
- 首先我发现了一个进程
svchost.exe
,如图所示。
- 首先我发现了一个进程
-
-
-
- 起初我也不知道这是什么进程,百度上给出的解释晦涩难懂,请教了学姐才发现,它是微软视窗操作系统里的一个系统进程,管理通过DLL文件启动服务的其它进程,一些病毒木马伪装成系统dll文件通过Svchost调用它,想要试图隐蔽自己。每个Svchost可以同时调用多个dll文件,启动多个服务。
-
-
- 我又运行了一下
shell
,观察到一个进程```C:WindowsSysWOW64cmd.exe,这个忘了截图了。
- 我又运行了一下
-
-
- 经过分析,我发现SysWOW64可以在64bit的Windows中运行32bit的程序,而Windows下的cmd.exe是64bit的,kali回连获取的windows的cmd程序时32位的,更加说明了这个终端是Kali用来攻击主机的。
-
任务二 恶意软件分析
分析该软件在(1)启动回连(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
(3)读取、添加、删除了哪些注册表项
(4)读取、添加、删除了哪些文件
(5)连接了哪些外部IP,传输了什么数据(抓包分析)
静态分析
- virscan扫描
- 在
virscan
网站上,扫描自己的后门程序xyx_backdoor.exe
。
- 使用PEiD进行外壳检测
-
在PEid的官网上下载工具,它是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。
-
下载后解压,点击文件夹中的.exe文件,进行安装启用。
-
我们可以直接选择自己想要分析的后门程序或者直接把后门程序拖进PEid中。
-
- 我一开始选择的是没有加壳的xyx_backdoor.exe,则显示如图所示信息----
什么也没发现
。
- 我一开始选择的是没有加壳的xyx_backdoor.exe,则显示如图所示信息----
-
- 后来,我选择了加压缩壳的程序,则显示了加壳的版本。
-
- 点击右下角
>>
,可以看到关于壳的详尽信息。
- 点击右下角
- 使用PE explorer来查看PE文件头中包含的代码信息
-
在官网上下载PE explorer。
-
在软件中打开我们需要查看的后门程序,我选择的是自己生成的xyx_backdoor2.exe。
- 打开后我们就能查看头部信息。
- 我们可以在
试图
->数据目录
中查看程序静态数据目录信息。
- 我们也可以在
试图
->节头
中查看节头
信息。
- 找到
工具
->反汇编器
可以进行反汇编,我们可以看到头部的汇编语言。
- 点击
导入
标志,我们可以查看引用的Dll库。
-
我们可以看到该后门程序运用了一些dll库执行文件:
-
msvcrt.dll
:msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft Visual C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。
-
kernel32.dll
:kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
-
advapi32.dll
:advapi32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关。xp系统一般位于C:WINDOWSsystem32目录下,大小659KB。
-
wsock32.dll
:wsock32.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序,容易遭受木马病毒的破坏而导致系统找不到该文件,并且出现错误提示框。
-
ws2_32.dll
:Windows和需要执行TCP/IP网络通信的应用程序会调用动态链接库ws2_32.dll。
如果ws2_32.dll不可用,那么计算机连接网络的操作会不稳定(即使不连接到外部网络)。
动态分析
- 使用
Systracer
来分析:
-
首先,下载安装Systracer(在老师给的链接中),
-
- 下载后进行安装,选
agree -> 选第二个
- 下载后进行安装,选
-
- 设置我们所要监听的端口号(我选的我的学号,也就是生成后门程序时利用的端口)。
-
- 接下来安装完成。
-
打开后门程序前,先快照一下,点击
take snapshot
,记录一下电脑安全时的文件情况,快照名字为Snapshop #1。
- 在Kali中我们打开msfconsole,开始监听,Windows运行后门,我们再开始快照,记录一下Kali监听后的计算机文件情况,快照为Snapshop #2。
-
进行分析:
-
- 我们点击上方的
Applications -> 左侧Running Processes -> 找到后门程序"xyx_backdoor2.exe" -> 点击"Opened Ports"
就能查看回连地址、远程地址和端口号。
- 我们点击上方的
-
- 可以进入快照界面
Snapshots
右下角点击Compare
,比对一下回连前后计算机文件所发生的变化。
- 可以进入快照界面
-
- 其实,这款软件设计的很好,蓝色标注的地方就是前后发生变化的地方。
-
-
- 首先,我发现了
UserAssist
中的Count
发生了变化,如图所示,这是注册表中的一个表项,它是软件使用记录,不过经常会被病毒或木马用到,应该是启动后门程序后,后门程序对该键项值做了修改。
- 首先,我发现了
-
-
-
- 其次,我还发现了
nsi
表项是一个脚本表项,用来描述安装程序的行为和逻辑的,后门的程序侵入电脑,记录自然会发生变化。
- 其次,我还发现了
-
-
-
- 此外,如图所示,我们还可以观察到一些表项被删除。
-
-
此外,我们访问让攻击机获取目标主机音频、摄像头和击键记录生成了快照snapshop #3和#4。
-
- 我们也可以看到
UserAssist
中的Count
又发生了改变,Nsi也发生了改变。
- 我们也可以看到
-
- 删除了以下表项。
- 我们用wireshark抓包来分析连接了哪些外部IP,传输的数据。
-
在回连之前,开始捕获包;
-
在回连完成后结束捕获,因为我们只想查看和虚拟机IP有关的数据包,所以,把没用的包过滤掉,我们可以把过滤规则设置为
ip.addr == 192.168.1.186
。
-
发现了自己的windows主机IP
-
分析一下所传输的数据:
-
- 第一条:我们发现了Windows向Kali发出的TCP同步请求包[SYN]:
-
- 第二条:发现了Kali的[SYN+ACK]包:
-
- 第三条:Windows给Kali的回应包。
-
- 这很明显,就是三次握手啊,哈哈哈。后面还有很多[PUSH + ACK]包。
-
- 后面,我在Kali获取下摄像头、录音、获取击键记录并查看,观察到[PSH + ACK]包更多了。
实验中遇到的问题及解决方法
问题1:在使用schtask监控系统运行时,关于监控的情况始终写不进记录文件中。
解决1:后来,发现在计算机管理中找到我们所创建的任务,右键 -> 属性,设置成最高权限
,就可以了。
问题2:在安装sysmon时,在终端输入输入sysmon.exe -i C:20165203Sysmoncfig.txt
后,显示安装失败,如图所示。
解决2:后来发现,原来是没有以管理员身份运行cmd.exe,我们点击查找,在cmd.exe处点击右键,选择以管理员身份运行即可。
实验体会与总结
本次实验,我们通过各个软件对后门程序作了分析,大家使用的软件有很多,还有一些我没写进博客中,但是也在课下尝试了一下。随着软件的不同,我们的分析方法也不同。通过这些软件,我们更加全面地分析了后门程序所犯下的罪行,这些后门都绕过了杀毒软件,这些更加证明了杀毒软件不是万能的,打铁还需自身硬,提高自己的知识才能不给这些后门程序可乘之机。