《网络对抗技术》——Exp4 恶意代码分析
目录一、实践基础
1、实践目的
- 监控你自己系统的运行状态,看有没有可疑的程序在运行。
- 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
- 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
2、实践内容
-
系统运行监控
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
-
分析该软件在启动回连、安装到目标机及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
- 读取、添加、删除了哪些注册表项
- 读取、添加、删除了哪些文件
- 连接了哪些外部IP,传输了什么数据
3、实践原理
- 恶意代码
- 使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
- 指令集合:二进制执行文件,脚本语言代码,宏代码,寄生在文件、启动扇区的指令流。
- 恶意代码目的:技术炫耀/恶作剧,远程控制,窃取私密信息,盗用资源,拒绝服务/破坏......
- 恶意代码类型
-
计算机病毒,蠕虫,恶意移动代码,后门,特洛伊木马,僵尸程序,Rootkit等…
-
计算机病毒是最早出现的恶意代码,媒体/工业界的概念混淆,经常以计算机病毒(Computer Virus)等价于恶意代码
-
- 系统监控
-
把系统看做一个黑盒子
-
从网络进出口,监控对外数据收发
-
-
把系统看做白盒子
-
谁(进程)
-
读写了什么(文件)
-
收发了什么(网络)
-
-
隐通道
-
内存发送Wifi信号
-
DNS包发送数据
-
-
- 分析环境
- 静态分析:
- 恶意代码扫描、文件格式识别、字符串提取、二进制结构分析、反汇编反编译、代码结构与逻辑分析、加壳识别和代码脱壳
- 动态分析:
- 快照比对、动态行为监控、网络监控、沙盒、动态跟踪测试
- 静态分析:
二、实践内容
系统运行监控
(1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果。
目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
使用schtasks指令监控系统
- 使用schtasks指令。schtasks.exe是安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。
schtasks /create /TN netstat1313 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt"
-
- 创建计划任务 netstat1313 :
-
- TN 是TaskName的缩写,我们创建的计划任务名是netstat1313;
- sc 表示Task Run,要运行的指令是 netstat;
- bn其中b表示显示可执行文件名,n表示以数字来显示IP和端口;
- >表示输出重定向,将输出存放在c:\netstat1313.txt文件中;
- 在C盘中创建一个脚本文件 netstat1313.bat
- 在C盘中创建需要权限,因此我选择了在桌面创建一个 netstat1313.txt 文本文件,并写入以下内容:
date /t >> c:\netstat1313.txt time /t >> c:\netstat1313.txt netstat -bn >> c:\netstat1313.txt
-
- 将文件复制到C盘中,并修改后缀名为.dat
- 在Windows的任务计划程序中,可以查看到新创建的任务:
- 双击这个任务,点击操作并编辑,将“程序或脚本”改为我们创建的 netstat1313.bat 批处理文件,将可选参数清空,点击确定。
- 在"条件"选项卡中可以看到,电源选项中默认操作为“只有在计算机使用交流电源时才启动此任务” ,那么使用电池电源时就会停止任务。为了我们统计足够多的数据,这个选项取消掉。
- 接着,在“常规”栏下选择“使用最高权限运行” ,否则可能导致文件不能自主更新或者记录里出现权限问题,点击确定保存。
- 运行该任务。
- 等待了足够长的时间后,可以选择终止计划任务,然后对收集到的数据进行统计。在C盘目录下,出现了一个netstat1313.txt 的文件,可以在其中查看联网数据。
- 在Excel表格中分析记录的数据
- 创建新表格,点击数据,导入数据,选择直接打开数据文件,并在选择数据源中选择文本文件。
-
- 按照步骤,选择其他编码、分隔符号,并如下图勾选。
-
- 选择协议一列,点击上方菜单栏中的插入,选择数据透视图。
-
- 在新工作表中,点击数据透视图,在跳出的右侧边栏的字段列表中,筛选出我们需要的字段进行分析,并将字段拖放到下方的轴和值中。
- 得到如下柱状图:
- 分析:如图所示,在这段时间内,联网最多的是程序wps.exe ,也就是WPS,其次为et.exe 和wpscloudsvr.exe,其中,ET是WPS的表格模块。 如果打开了比较大的表格文件,有可能有占用较多内存的现象。wpscloudsvr是wps的云服务,其主要作用是弹窗登录, 如果我们使用WPS时不想被他占资源和打扰可以对它进行处理。图中也包括了360浏览器、微信等软件的相关联网程序。
(2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点可疑行为。
sysmon是微软Sysinternals套件中的一个工具,它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。使用sysmon工具前首先要配置文件。
- 过滤器事件的选项:
- 进程创建ProcessCreate的过滤事件选项有:
UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine
-
- 进程创建时间FileCreatTime的过滤事件选项有:
UtcTime, ProcessGuid, ProcessId, Image, TargetFilename, CreationUtcTime, PreviousCreationUtcTime
-
- 网络连接NetworkConnect的过滤事件选项有:
UtcTime, ProcessGuid, ProcessId, Image, User, Protocol, Initiated, SourceIsIpv6, SourceIp, SourceHostname, SourcePort, SourcePortName, DestinationIsIpv6, DestinationIp, DestinationHostname, DestinationPort, DestinationPortName
-
- 远程线程创建CreateRemoteThread的过滤事件选项有:
UtcTime, SourceProcessGuid, SourceProcessId, SourceImage, TargetProcessGuid, TargetProcessId, TargetImage, NewThreadId, StartAddress, StartModule, StartFunction
- 下载并解压SysinternalsSuite201608.zip 文件,并进入文件夹新建配置文件sysmon20181313.xml ,在里面输入以下代码(具体方法同上)。
<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">chrome.exe</Image> <Image condition="end with">firefox.exe</Image> </ProcessCreate><ProcessCreate onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span>> <ParentImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>cmd.exe</ParentImage> </ProcessCreate> <FileCreateTime onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">exclude</span><span style="color: #800000;">"</span> > <Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>chrome.exe</Image> <Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>firefox.exe</Image> </FileCreateTime> <NetworkConnect onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">exclude</span><span style="color: #800000;">"</span>> <Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>chrome.exe</Image> <Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>firefox.exe</Image> <SourcePort condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>><span style="color: #800080;">137</span></SourcePort> <SourceIp condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>><span style="color: #800080;">127.0</span>.<span style="color: #800080;">0.1</span></SourceIp> </NetworkConnect> <NetworkConnect onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span>> <DestinationPort condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>><span style="color: #800080;">80</span></DestinationPort> <DestinationPort condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>><span style="color: #800080;">443</span></DestinationPort> </NetworkConnect> <CreateRemoteThread onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span>> <TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>explorer.exe</TargetImage> <TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>svchost.exe</TargetImage> <TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>firefox.exe</TargetImage> <TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>winlogon.exe</TargetImage> <SourceImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>>powershell.exe</SourceImage> </CreateRemoteThread> </EventFiltering>
</Sysmon>
- 参数说明:
- ProcessCreate表示进程创建
- NetworlConnect 表示网络连接
- CreateRemote 表示远程线程创建
- FileCreate Time 表示进程创建时间
- 在onmatch后面跟的参数include和exclude分别表示“免检”和“必检”名单。免检名单中在统计时忽略掉,必检名单在检测时需要进行匹配。
- 在cmd中进入解压后的文件夹,执行指令Sysmon.exe -i sysmon20181313.xml
发现出现提示:You need to launch Sysmon as an Administrator.
解决方法:以管理员身份打开cmd,再次尝试:
- 右击Win,选择事件查看器,依次选择应用程序和服务日志->Microsoft->Windows->Sysmon->Operational ,可以查看到按照配置文件中的配置信息所记录的一些信息。
- 在列表中找到sysmon20181313.xml
- 利用实验三中生成的后门程序进行分析
- 后门程序启动回连到kali
- 打开事件查看器 ,根据运行时间可以很容易地找到刚刚运行的后门的相关信息。
- 在事件查看器中传了如下信息:
恶意代码分析
静态分析——VirusTotal网站扫描恶意软件
- 使用VirusTotal分析恶意代码基本信息如下:
- 查看恶意代码的基本属性,可以看出它的SHA-1、SHA-256、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。
静态分析——PEiD软件分析恶意软件
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。
- 扫描模式
-
正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
-
深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;
-
核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
-
- 查看实验二中生成的普通后门文件
- 查看经过压缩壳的后门程序,可以查看到压缩壳的版本
- 查看经过加密壳的后门程序,什么都没有发现
- 查看经过压缩壳和加密壳的程序,什么都没有发现
- 分析:说明了该软件无法检测到加密壳。证明了加密壳一定程度上有着绕过安全检测、隐藏恶意代码后门程序的作用,但这也可能由于该检测软件的功能缺失。
静态分析——使用PE Explorer分析恶意软件
PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。该软件支持插件,你可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX的脱壳插件、扫描器和反汇编器,可以查看程序头部信息(默认界面)、程序静态数据目录、程序结头信息、对程序反汇编等等,非常好用。
- 下载软件
- 打开后门文件,查看文件头部信息
- 视图(view)-数据目录(Data Directories)查看程序静态数据目录
- 视图(view)-节头(Section Heads)查看节头信息
- 视图(view)-Import查看信息
-
- KERNEL32.dll:控制着系统的内存管理、数据的输入输出操作和中断处理。
- MSVCRT.dll:是微软编译软件的函数库。
- ADVAPI32.dll:一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性。
- WSOCK32.dll:是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。
- WS2_32.dll:Windows Sockets应用程序接口, 用于支持Internet和网络应用程序。
- 分析:通过分析生成的后门程序都会使用KERNEL32.dll,所以如果有陌生软件使用KERNEL32.dll则应当提高警惕。
- 工具(tools)-反汇编器(Disassambler)进行反汇编
动态分析——使用systracer分析恶意软件
SysTracer 是一款可以分析你的计算机文件,文件夹和注册表项目改变的系统实用工具。你可以在任何想要的时间获取无数个屏幕快照。你可以比较任何一对想要的屏幕快照,并且观察其间的不同之处。获取屏幕快照通常会持续几分钟的时间,这取决于文件和文件夹的数量和注册表项目的总数。该软件特别推出一个非常高效的分析算法,比较两张屏幕快照可以瞬间完成。
- 安装软件
- 点击创建快照take snapshot,点击start,创建快照。(具体时长由系统决定,快照创建会自动完成)
- 运行后门程序,回连Kali,并创建快照
- 步骤如上,捕获五个快照如下:
- 快照一:未移植后门程序,保存为Snapshot #1
- 快照二:运行后门程序并在kali中实现回连,保存为Snapshot #2
- 快照三:在Kali中输入dir命令,保存为Snapshot #3
- 快照四:在kali中执行screenshot指令,保存为Snapshot #4
- 快照五:在kali中执行getuid指令,保存为Snapshot #5
- 对比快照1和快照2
- 选中要对比的两个快照,点击右下角compare,在view mode中选择only differences方便查看。
-
- 点击application,在opened ports中能看到后门 20181313_upxed.exe ,连接的本地地址和目标地址以及端口号
-
- 在
opened handles
中,增加了一些文件,也删除了一些文件,以及键值的变化
- 在
-
- 在loaded dll中,查看启动后门程序后增加和删除的dll文件
-
- 在running processes中,点击 20181313_upxed.exe 显示为SysTracer no registered
- 对比快照2和快照3
- 对根键中的内容进行修改,对注册表中的配置信息进行了修改
-
- 在opened ports中看到两次操作间的虚拟机vmnet8间的交互:
-
- 在running processes中,查看多出来的 conhost.exe
- Conhost.exe全称是Console Host Process, 即命令行程序的宿主进程。简单的说他是微软出于安全考虑,在windows 7和Windows server 2008中引进的新的控制台应用程序处理机制。
- 对比快照3和快照4
- 关闭了 audiodg.exe ,删除了之前建立的调用许多DLL的过程
- 对比快照4和快照5
- 发现根键中的内容进行了修改,但无法查看到具体内容
-
- 同时,也增加了很多dll文件
动态分析——使用Process Monitor分析恶意软件
Process Monitor一款系统进程监视软件,总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统 中的任何文件操作过程,而Regmon用来监视注册表的读写操作过程。 有了Process Monitor,使用者就可以对系统中的任何文件和 注册表操作同时进行监视和记录,通过注册表和文件读写的变化, 对于帮助诊断系统故障或是发现恶意软件、病毒或木马来说,非常 有用。 这是一个高级的 Windows 系统和应用程序监视工具,由优秀的 Sysinternals 开发,并且目前已并入微软旗下,可靠性自不用说。
- 开启软件可以看到各个进行的详细记录,通过查找功能查看到后门程序的进程,注意全字符匹配。
- 进程的详细信息如下:
- 后门程序引用的库如下:
- 查看引用的.dll单元
三、实验问题
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 使用windows自带的schtasks指令设置一个计划任务,发现网络连接异常
- 使用Sysmon,编写配置文件,记录有关的系统日志
- 使用Process Explorer工具,监视进程执行情况。
- 使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
- 使用Systracer拍摄快照,对比不同快照,查看是否有可疑的增删注册表、启动项的行为。
- 使用wireshark查看自己计算机的端口开放情况,查看未知端口进行可疑的数据传输
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 使用systracer工具分析恶意软件,查看其对注册表和文件的修改。
- 使用Wireshark进行抓包分析,监视其与主机进行的通信过程。
- 使用PEiD查看程序是否加壳,加的什么壳
- 使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
四、实验总结与体会
本次实验的重点是借用软件工具,通过工具来具体分析恶意代码,通过对后门文件的多方面分析检测,查看是否主机中有可疑对象和可疑行为,这对平时主机的使用和保护都有着重大的实际作用。在本次实验中,我们通过静态分析和动态分析,通过恶意代码扫描、文件格式识别、字符串提取、二进制结构分析、反汇编反编译、快照比对、动态行为监控、动态跟踪测试等方法多方面了解了恶意代码的检测和监控,但在Wireshark软件的使用过程中,发现不管是用WLAN还是VMnet8模式捕捉数据包,都无法正确捕捉到内容,使用了同学和学长学姐的方法后仍不成功,这个问题将会继续尝试。