2019-2020-2 20175227张雪莹《网络对抗技术》 Exp4 恶意代码分析
目录
-
0. 基础知识
- 0.1 恶意代码的概念与分类
- 0.2 恶意代码的分析方法
-
1. 实验目标
-
2. 实验内容
- 2.1 系统运行监控
- 2.1.1 Windows计划任务schtasks
- 2.1.2 sysmon工具
- 2.2 恶意软件分析
- 2.1 系统运行监控
-
3. 老师提问
- 3.1 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 3.2 如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
-
4. 所遇到的问题及其解决方法
-
5. 实验感想
-
6. 参考资料
0. 基础知识
0.1 恶意代码的概念及分类
恶意代码类型 | 定义特征 | 典型实例 |
---|---|---|
计算机病毒 | 通过感染文件(可执行文件、数据文件、电子邮件等)或磁盘引导扇区进行传播,一般需要在宿主程序被执行或人为交互才能运行 | Brain,Concept,CIH |
蠕虫 | 一般为不需要宿主的单独文件,通过网络传播,自动复制,通常无需人为交互便可感染传播 | Morris,Code,Red |
恶意移动代码 | 从远程主机下载到本地执行的轻量级恶意代码,不需要或仅需要极少的人为干预 | SandyWorm |
后门 | 绕过正常的安全控制机制,从而为攻击者提供访问途径 | Netcat,BQ,冰河 |
木马 | 伪装成有用软件,隐藏其恶意目标,欺骗用户安装执行 | Setiri |
僵尸程序 | 使用一对多的命令与控制机制组成僵尸网络 | Sdbot,Agobot |
内核套件 | 通过替换或修改系统关键可执行文件,或者通过控制操作系统内核,用以获取并保持最高控制权 | LRK,FU,hdef |
融合型恶意代码 | 融合多种恶意代码技术的恶意代码 | Nimda |
0.2 恶意代码的分析方法
- 静态分析
分析方法 | 目的 | 使用工具 | 难度 |
---|---|---|---|
恶意代码扫描 | 标识已知恶意代码 | 反病毒引擎 | 低 |
文件格式识别 | 确定攻击平台和类型 | file,peid,FileAnalyzer | 低 |
字符串提取 | 寻找恶意代码分析线索 | Strings | 低 |
二进制结构分析 | 初步了解二进制文件结构 | binutils(nm,objdump) | 中 |
反汇编 | 二进制代码->汇编代码 | IDAPro,GDB,VC | 中高 |
反编译 | 汇编代码->高级语言 | REC,DCC,JAD | 中高 |
代码结构与逻辑分析 | 分析二进制代码组,理解二进制代码逻辑层结构 | IDAPro,Ollydbg | 高 |
加壳识别和代码脱壳 | 识别是否加壳及类型;对抗代码混淆恢复原始代码 | UPX,VMUnpacker,手工 | 高 |
- 动态分析
分析方法 | 目的 | 使用工具 | 难度 |
---|---|---|---|
快照比对 | 获取恶意代码行为结果 | FileSnap,RegSnap,完美卸载 | 低 |
动态行为监控 | 实时监控恶意代码动态行为轨迹 | Filemon,Regmon,ProcessExploer | 中 |
网络监控 | 分析恶意代码网络监听端口及发起网络会话 | Fport,lsof,TDImon | 中 |
沙盒 | 在受控环境下进行完整的恶意代码动态行为监控与分析 | NoemanSanbbox,FVMSandbox | 中高 |
动态跟踪调试 | 单步调试恶意代码程序,理解程序结构和逻辑 | Ollydbg,IDAPro,GDB | 高 |
1. 实验目标
-
是监控你自己系统的运行状态,看有没有可疑的程序在运行。
-
是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
-
假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
2. 实验内容
2.1 系统运行监控
2.1.1 Windows计划任务schtasks
- 要求:
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。
- 目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- 步骤:
- 使用命令
schtasks /create /TN netstat5227 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt"
创建计划任务netstat5227
- 命令中参数意义如下:
TN
:TaskName的缩写;
sc
:计时方式,我们以分钟计时填MINUTE;
TR
:Task Run缩写,要运行的指令是 netstat
bn
:b表示显示可执行文件名,n表示以数字来显示IP和端口;
>
:表示输出重定向,将输出存放在c:\netstatlog.txt文件中 - 使用命令
- 在C盘中创建
netstat5227.bat
脚本,内容如下:
date /t >> c:\netstat5227.txt
time /t >> c:\netstat5227.txt
netstat -bn >> c:\netstat5227.txt
- 打开
任务计划程序
,查看当前新创建的任务netstat52227
- 双击该任务进行编辑,在
常规
选项卡中勾选使用最高权限操作
,以防记录里出现权限问题。
- 在
操作
选项卡中双击编辑启动程序操作,程序或脚本
选择netstat5227.bat
,参数为空。
- 为了统计足够多的数据,将
条件
选项卡中该选项取消:
- 执行该脚本一段时间后,就可以在
netstat5227.txt
文件中看到主机在此段时间内的联网记录:
- 一段时间后可以获得充足的数据,可以停止该任务,将
netstat5227.txt
中数据复制粘贴到Excel中进行分析。统计项目如下:
- 这里建立数据透视图的过程,我参考了学姐的博客:
-
由统计数据分析可知:
联网最多的是
VMware.exe
及其相关的一些其他可执行文件;其次就是谷歌浏览器对应的chrome.exe
;其他还有譬如说QQ、微信、WPS一些程序,还有后门程序zxy_20175227_backdoor.exe
。其他的也是系统相关的程序,没有什么异常。
2.1.2 sysmon工具
- 要求:
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
- 实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。
- 步骤:
-
sysmon工具介绍
sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。
以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。
sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
通过收集并分析使用Windows事件集合或SIEM代理生成的事件,可以识别恶意或异常活动,并了解入侵者和恶意软件在主机的网络上如何操作。 -
下载老师提供sysinternal,解压该文件后将
sysmon.exe
拷贝到管理员运行cmd
的文件夹中,我这里是C://Windows/System32
-
在这篇文章中详细列举了
sysmon
过滤器事件及其选项,我选取了NetworkConnect
中的Image、SourcePort、SourceIP、DestinationPort
,CreateRemoteThread
中的TargetImage、SourceImage
-
创建配置文件
sysmon.xml
,(创建后同样拷贝到C://Windows/System32
)文件内容如下:
-
<Sysmon schemaversion="3.10">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature 驱动加载有以下签名的都过滤 -->
<!-- contains Microsoft or Windows -->
<DriverLoad onmatch="exclude">
<Signature condition="contains">microsoft</Signature>
<Signature condition="contains">windows</Signature>
</DriverLoad>
<!-- 网络连接过滤以下 -->
<NetworkConnect onmatch="exclude">
<!-- 可执行程序以下列结尾的 -->
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">iexplorer.exe</Image>
<!-- 源端口和IP包含下列的 -->
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">127.0.0.1</SourceIp>
</NetworkConnect>
<NetworkConnect onmatch="include">
<!-- 目的端口和IP包含下列的 -->
<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>
- 以管理员身份运行
cmd
,输入指令Sysmon.exe -i sysmon.xml
,会弹出安装提示框,点击Agree
进行安装,安装成功后如图,我的版本是3.10:
- 打开事件查看器,在左侧栏中选择
应用程序和服务日志
->Microsoft
->Sysmon
->Operational
- 以实验二生成的后门程序
zxy_20175227_backdoor.exe
为例,按步骤执行回连,在系统时间9:16:19左右看到了该条日志,如下:
- 在9:19:22时我通过Linux获取了shell,在事件查看器中查看到了该条日志,调用了
cmd.exe
,且在后门程序目录下,显然与测试的后门程序相关:
- 在shell中输入
dir
获取主机当前文件信息,在事件查看器中看到了以下两条日志:
SearchProtocolHost.exe
和SearchFilterHost.exe
都是Windows下的文件搜索引擎程序
- 在9:46:30左右,在
msfconsole
中输入getuid
获取当前主机用户信息,可以看到该条日志:
mmc.exe
是系统管理程序的一个框架程序,可以查看组策略等信息。
2.2 恶意软件分析
2.2.1 静态分析
①恶意代码扫描(VirusTotal网站)
- 这里使用实验三生成的加压缩壳后门程序
zxy175227.upxed.exe
,在VirusTotal进行扫描,结果如下:
- 该文件的查出率相当高。
- 查看细节,可以看到这个文件的三个算法的摘要值,文件类型等信息。
尤其是,它连加的什么壳也扫出来了“upx
”
②文件格式识别(PEiD工具)
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE文档的加壳类型和签名。
- 下载了PEiD之后进入文件夹就可以看到exe文件,直接双击运行即可:
- 扫描加壳后门文件
zxy175227.upxed.exe
,得到下图中的结果:
可以看到加壳版本是UPX 0.89.6
- 扫描未加壳后门程序
zxy_20175227_backdoor.exe
,结果如下:
PE嗅探未检测到加壳,扫描该文件发现它反弹连接攻击机是通过调用DLL的方式实现。
③反编译、反汇编(PE Explorer工具)
PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。
- 打开PE Exploer后打开后门程序
zxy_20175227_backdoor.exe
,显示出文件头信息:
- 选择菜单栏中的
视图
->引入
,可以查看调用的DLL文件:
可以看到更加详细的调用DLL文件的信息。
msvcrt.dll
:微软在windows操作系统中提供的C语言运行库执行文件
kernel32.dll
:属于内核级文件,它控制着系统的内存管理、数据的输入输出操作和中断处理,是必需的
advapi32.dll
:一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关,会受到病毒的侵扰及篡改,导致系统文件丢失、损坏
wsock32.dll
:Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序,是一个对系统很关键或很可疑的文件。
ws2_32.dll
:Windows Sockets应用程序接口。一些病毒会在杀毒软件目录中建立伪"ws2_32.dll"的文件或文件夹,在杀毒软件看来这是程序运行需要的文件而调用,这个所谓的“文件”又不具备系统"ws2_32.dll"文件的功能,所以杀毒软件等就无法运行了而提示:应用程序正常初始化失败。
- 菜单栏选中
视图
->资源
,可以查看到与VirusTotal和PEiD中一样的版本信息:
- 这款软件的主要功能是实现反汇编,可以在菜单栏
工具
->反汇编器
,可以看到将该文件反汇编的结果:
2.2.2 动态分析
①快照比对(SysTracer工具)
SysTracer是一个系统工具,可以帮助您找到应用于计算机中不同项目和区域的更改-可能是恶意软件导致的更改。
为了发现这些更改,SysTracer执行系统扫描,记录有关文件和文件夹,注册表项,系统服务,驱动程序,当前活动的进程,已加载的库(DLL)和计划在系统启动时运行的应用程序的信息。
- 点击创建快照,我创建了四个进行比对,分别是:
- Snapshot #1:不进行任何操作;
- Snapshot #2:运行后门程序并成功反弹连接;
- Snapshot #3:获取shell并获取被攻击机文件详情;
- Snapshot #4:使用msf命令
getuid
、screenshot
。
比对Snapshot #1和Snapshot #2
- 查看
应用程序
标签页,可以看到Running Processes
下的zxy_20175227_backdoor.exe
被标蓝,表示快照1和快照2的运行程序差异就是这一项后门:
可以看到运行后门后它修改了关于系统组策略配置的一个应用程序,应该是用它得到更高权限来查看系统内部信息。
- 查看注册表差异,可以看到启动后门程序并进行反弹回连后修改了一些注册表信息:
比对Snapshot #2和Snapshot #3
- 可以看到新增了一个DLL文件winbrand.dll,网上没查到更多关于这个文件的信息,只知道他是Windows OS中很重要的一个关于资源的DLL:
- 增加了许多调用DLL文件的记录:
- Linux调用shell之后,修改了注册表中本机键值的
conhost.exe
,并删增了用户键值下的读者修订信息:
conhost全称是console host process, 即命令行程序的宿主进程. 大家都知道命令行程序是什么东西吧, 比如ipconfig.exe之类, 由于命令行程序自身没有代码来显示UI, 我们平时看到的命令行窗口内容都是由宿主进程来完成的,包括窗口的显示, window message的处理,等等.
这样一来就可以得到访问读取被攻击机的资源了:
比对Snapshot #3和Snapshot #4
- 删除了之前建立的调用许多DLL的过程:
- 这里我是退出了shell,并获取了当前主机截屏和用户信息,可以看到刚刚那个
winbrand.dll
被删了,我推测这个程序和获取shell息息相关。
- 这里仍然修改了conhost.exe相关的键值:
②网络监控(Wireshark工具)
注意:接口应该选择VMnet8这个,否则抓不到Kali和主机之间的包
- 开始抓包后,Kali中启动监听,然后Windows端回连,可以看到TCP三次握手建立连接的过程,目的端口是Kali中设置的监听端口
5227
,还可以看到目的和源IP地址:
- Kali中使用
ls
命令后可以看到一个TCP相关的包和所传输的数据信息:
3. 老师提问
3.1 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 回答:
- 使用Windows计划任务schtasks:定期查看网络连接情况,包括IP和端口,并进行统计分析,确认IP所属和连接发起方详情。
- 使用sysmon工具:配置好想要查看的选项,比如网络连接、注册表信息等,通过所生成的日志进行查看分析。
- 使用PEiD、PE Exploer工具:查看一个程序是否加壳,并进行反汇编、反编译,查看并分析该程序是否有违规操作。
- 使用sysTracer工具:进行快照对比,发现恶意代码对注册表、exe可执行文件的操作。
- 使用Wireshark工具:捕获数据包,分析数据流情况。
3.2 如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 回答:
- 通过火绒安全杀软中的进程管理来监控文件系统、注册表、进程/线程的活动。
- 通过Wireshark进行捕包分析,监视与可疑IP的连接通信情况。
4. 所遇到的问题及其解决方法
无
5. 实验感想
- 通过这次实验,我掌握了分析恶意代码的基本方法,是前四次实验中最顺利的一次,几乎没遇到问题。在进行恶意代码分析的时候,我了解了Windows OS中一些exe和DLL文件的作用,和一些注册表项的意义,还是很有收获的。总的来说这次实验的实操性很强,可以用于以后自己查找主机上的恶意代码。有助于同学整理的资料,让自己没有在寻找软件上多花费时间。