2020-2021-2 20181312 【网络对抗技术】Exp4 恶意代码分析
序言
这一次实验我们主要完成两件事,一是监控自己电脑系统的运行状态查看有没有可疑的程序在运行,二是使用分析工具比如原生指令或sysinternals,systracer套件分析Exp2或Exp3中的恶意软件。
系统监控
我们对于系统可以有三种看法
- 把系统看做一个黑盒子
- 网络便是系统的进出口,监控内外的数据收发
- 把系统看做一个白盒子
- 行为人便是进程,行为与对象便是读写文件、收发网络数据等
- 隐通道
恶意代码分析
分析环境
我们在分析恶意代码的时候,应该使用完全隔离的环境
- Windows应用 Sandboxie plus
- Win10内置Sandbox
- 轻量级容器Docker
- 虚拟机(VMWare, Visual Box)
静态分析
分析方法 | 目的 | 使用工具 | 难度 |
---|---|---|---|
恶意代码扫描 | 标识已知恶意代码 | 反病毒引擎,VirusTotal | 低 |
文件格式识别 | 确定攻击平台和类型 | file,peid,FileAnalyzer | 低 |
字符串提取 | 寻找恶意代码分析线索 | Strings | 低 |
二进制结构分析 | 初步了解二进制文件结构 | binutils(nm,objdump) | 中 |
反汇编 | 二进制代码->汇编代码 | IDAPro,GDB,VC,… | 中高 |
反编译 | 汇编代码->高级语言 | REC,DCC,JAD,… | 中高 |
代码结构与逻辑分析 | 分析二进制代码组,理解二进制代码逻辑成结构 | IDAPro,Ollydbg,… | 高 |
加壳识别和代码脱壳 | 识别是否加壳及类型;对抗代码混淆恢复原始代码 | UPX,VMUnpacker,手工 | 高 |
动态分析
分析方法 | 目的 | 使用工具 | 难度 |
---|---|---|---|
快照比对 | 获取恶意代码行为结果 | FileSnap,RegSnap,完美卸载 | 低 |
动态行为监控(APIHooking) | 实时监控恶意代码动态行为轨迹 | Filemon,Regmon,ProcessExplorer,lsof… | 中 |
网络监控 | 分析恶意代码网络监听端口及发起网络会话 | Fport,lsof,TDImon,ifconfig,tcpdump,… | 中 |
沙盒(sandbox) | 在受控环境下进行完整的恶意代码动态行为监控与分析 | NormanSandbox,CWSandbox,FVMSandbox,… | 中高 |
动态跟踪调试 | 单步调试恶意代码程序,理解程序结构和逻辑 | Ollydbg,IDAPro,gdb,SoftICE,systrace,… | 高 |
一、实验内容
-
系统运行监控
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不合适。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
- 参考:schtask与sysmon应用指导
- 实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得看大家会什么用什么了。
-
恶意软件分析
分析该软件在启动回连,安装到目标机及其他任意操作时(如进程迁移或抓屏等你感兴趣的动作),该后门软件
- 读取、添加、删除了哪些注册表项
- 读取、添加、删除了哪些文件
- 连接了哪些外部IP,传输了什么数据(抓包分析)
二、实验过程
2.1 系统运行监控
2.1.1 使用计划任务监控程序连接网络的情况
这里我们使用Windows计划任务程序schtasks,该指令功能等同于控制面板中的Windows计划任务。
直接打开cmd,输入如下命令
schtasks /create /TN netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn >> c:\netstatlog.txt"
发现虽然任务netstat创建成功了,但是电脑中并无文件netstatlog.txt
被创建,随后通过尝试在c:\
下手动创建文件,才发现c:\
只能创建新文件夹,而不能创建文件,于是我把路径修改为桌面。
schtasks /create /TN netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn >> C:\Users\HPPC\Desktop\netstatlog.txt"
这时netstatlog.txt
被成功创建了,但出现了下图的错误
这是权限不够的问题
通过查阅官方文档我发现可以加/ru System
获得系统允许
schtasks /create /TN netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn >> C:\Users\HPPC\Desktop\netstatlog.txt" /ru System
但是却出现了
我猜测可能是因为cmd的权限不足以获得系统允许,于是我打开了管理员的命令提示符
这时任务被成功创建而且出现了有内容的文件
运行一段时间后我删除了任务
schtasks /delete /tn "netstat"
2.1.2 分析netstatlog.txt
协议 本地地址 外部地址 状态
TCP 127.0.0.1:5354 127.0.0.1:49678 ESTABLISHED
[mDNSResponder.exe]
TCP 127.0.0.1:5354 127.0.0.1:49682 ESTABLISHED
[mDNSResponder.exe]
TCP 127.0.0.1:49678 127.0.0.1:5354 ESTABLISHED
[AppleMobileDeviceService.exe]
TCP 127.0.0.1:49682 127.0.0.1:5354 ESTABLISHED
[AppleMobileDeviceService.exe]
TCP 172.20.10.3:10071 104.74.20.10:443 CLOSE_WAIT
[Video.UI.exe]
TCP 172.20.10.3:13612 20.198.162.76:443 ESTABLISHED
WpnService
[svchost.exe]
TCP 172.20.10.3:13614 120.241.21.110:8080 ESTABLISHED
[WeChat.exe]
TCP 172.20.10.3:13628 108.177.97.188:443 ESTABLISHED
[chrome.exe]
TCP 172.20.10.3:15379 40.100.54.2:443 ESTABLISHED
[SearchUI.exe]
TCP 172.20.10.3:15467 203.208.50.33:443 ESTABLISHED
[chrome.exe]
TCP 172.20.10.3:15471 120.253.255.162:443 ESTABLISHED
[chrome.exe]
TCP 172.20.10.3:15476 52.81.9.6:80 CLOSE_WAIT
[FoxitProtect.exe]
TCP 172.20.10.3:15482 112.34.111.123:443 ESTABLISHED
[chrome.exe]
TCP 172.20.10.3:15483 111.221.29.254:443 ESTABLISHED
[chrome.exe]
TCP 172.20.10.3:15485 120.241.25.15:36688 TIME_WAIT
这里截取了一次记录内容,可以看到总共有6个软件在连接外部网络,2个软件在使用内部网络。
其中Chrome是谷歌浏览器,WeChat是微信,FoxitProtect是福昕PDF的相关程序,SearchUI是Windows的Cortana的程序,Video.UI是Microsoft的ZuneVideo,AppleMobileDeviceService是苹果的移动设备支持程序,mDNSResponder是Bonjour的程序,后者提供了 Bonjour 零配置联网服务,可供 如 iTunes、Safari 以及“Airport 实用工具”等Windows 应用程序使用。
综上,我的电脑里没有一些奇奇怪怪的软件在向外发送和接收数据。
2.1.3 使用sysinternals里的sysmon工具
下载sysinternals套件,Sysmon是其中的一个工具。可以监控几乎所有的重要操作。
可以参考sysmon的官方文档。
基本操作可以分解为三步
- 确定要监控的目标
- 写配置文件
- 启动sysmon
最后就可以在事件查看器中寻找日志了
2.1.3.1 确定要监控的目标
我们对驱动加载、网络连接、线程注入三种行为进行监控,并且还要将受信任的程序放入白名单,不使其被记录进日志。
2.1.3.2 写配置文件
<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">WeChat.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">127.0.0.1</SourceIp>
</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>
<SourceImage condition="end with">cmd.exe</SourceImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
这是我用的配置文件C:\Users\HPPC\Desktop\Sysmoncfg.xml
,其中<NetworkConnect>*</NetworkConnect>
表示记录所有网络连接,exclude
相当于白名单,不会被记录,include
相当于黑名单,会被记录,更安全的是白名单,凡是不在内的都会被记录。这个xml文件内规则是大小写敏感的,SourceIp
不能写成SourceIP
。
- Image condition根据自己使用的浏览器更改,如谷歌浏览器是“chrome.exe”,IE浏览器是“iexplore.exe”,写在exclude中就是不记录由谷歌浏览器创建的进程
- 进程创建时间类似,也是不创建浏览器创建进程的时间
- 网络连接过滤掉了浏览器的网络连接、源IP为127.0.0.1(localhost)的网络连接和目的端口为137的连接服务,且查看目的端口为80(http)和443(https)的网络连接。(137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态)
- 远程线程创建记录了目标为explorer.exe、svchost.exe、winlogon.exe和powershell.exe 的远程线程
- explorer.exe是Windows程序管理器或者文件资源管理器
- svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称
- winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出
- powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用
2.1.3.3 启动sysmon
这个是需要在管理员权限下启动的,所以要打开管理员的命令提示符,输入如下命令
Sysmon64.exe -i Sysmoncfg.xml
启动后配置文件可以随时按需修改,修改完需要使用指令Sysmon64.exe -c Sysmoncfg.xml
更新。
2.1.3.4 在事件查看器中找到日志
打开Windows的事件查看器,在应用程序和服务日志下的Microsoft下的Windows中找到Sysmon的Operational。
这时我们开启Exp2中的反弹连接程序
可以在事件查看器中看到启动hello_backdoor.exe
这是程序开始运行的事件记录
完成后可以使用Sysmon64.exe -u
命令删除sysmon
2.2 恶意软件分析
下载SysTracer(64bit)或者SysTracer(32bit),创建快照。
这里我创建了一张快照Snapshot #1
在远程扫描中设置端口号为1312
随后我启动后门程序反弹连接kali,并执行dir
和screenshot
命令后,捕获快照Snapshot #2
2.2.1 启动回连后该后门软件读取、添加、删除了哪些注册表项
对比快照1和2
可以看到在CLASSES_ROOT注册表中有三项注册表被修改
有这么多的注册表被新建
2.2.2 启动回连后该后门软件读取、添加、删除了哪些文件
由于screenshot操作使用了svchost.exe,这里可以看到新增的文件。
- kernel32.dll属于内核级文件,它控制着系统的内存管理、数据的输入输出操作和中断处理,是必需的
- advapi32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关,会受到病毒的侵扰及篡改,导致系统文件丢失、损坏
- wsock32.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序,是一个对系统很关键或很可疑的文件,易遭受木马病毒(如“犇牛”病毒)破坏导致系统找不到此文件,出现错误提示框。
- ws2_32.dll是Windows Sockets应用程序接口。一些病毒会在杀毒软件目录中建立伪"ws2_32.dll"的文件或文件夹,在杀毒软件看来这是程序运行需要的文件而调用,这个所谓的“文件”又不具备系统"ws2_32.dll"文件的功能,所以杀毒软件等就无法运行了而提示:应用程序正常初始化失败。
- wsock32.dll和ws2_32.dll,这两个是会经常被木马、病毒等进行侵略篡改的文件,可以分析出我们的后门程序对其做一定的修改来实现反弹连接控制被控机。
2.2.3 启动回连后该后门软件连接了哪些外部IP,传输了什么数据(抓包分析)
主机给kali发送SYN请求,说明该后门程序采用反弹式连接
后门软件启动后,会向主机发送一大堆ACK的包,说明在进行数据传输
三、回答一些问题
3.1 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
首先,我可以使用Process Explorer监控进程,其次可以使用Windows任务计划netstat查看网络连接情况,使用wireshark抓包进行数据流分析,使用nmap查看可疑端口,还可利用sysmon工具,配置好想要监控的端口、注册表信息、网络连接等信息,通过其生成的日志文件进行监控。
3.2 如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
我可以使用命令tasklist
查看程序进程号,使用SysTracer隔断时间截取快照,对截取的快照进行对比分析,分析文件、注册表、应用程序等信息之间的差异,使用PEiD进行外壳检测,使用PE explorer查看PE文件头中包含代码信息,使用Process Monitor分析该程序,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统 中的任何文件操作过程,而Regmon用来监视注册表的读写操作过程。