Exp4 恶意代码分析
《网络对抗技术》——Exp4 恶意代码分析
目录
- 一、实践基础
- 1、实践目的
- 2、实践内容
- 3、实践原理
- 二、实践内容
- 系统运行监控
- (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果。
- (2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点可疑行为。
- 恶意代码分析
- 静态分析——VirusTotal网站扫描恶意软件
- 静态分析——PEiD软件分析恶意软件
- 静态分析——使用PE Explorer分析恶意软件
- 动态分析——使用systracer分析恶意软件
- 动态分析——使用Process Monitor分析恶意软件
- 系统运行监控
- 三、实验问题
- 四、实验总结与体会
一、实践基础
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 netstat1317 /sc MINUTE /MO 1 /TR "cmd /d netstat -bn > d:\netstatlog.txt"
- 创建计划任务 netstat1317 :
- TN 是TaskName的缩写,我们创建的计划任务名是netstat1317;
- sc 表示Task Run,要运行的指令是 netstat;
- bn其中b表示显示可执行文件名,n表示以数字来显示IP和端口;
- >表示输出重定向,将输出存放在c:\netstat1317.txt文件中;
在D盘中创建一个脚本文件 netstat1313.bat
- 创建一个 netstat1317.txt 文本文件,并写入以下内容:
date /t >> d:\netstat1317.txt
time /t >> d:\netstat1317.txt
netstat -bn >> d:\netstat1317.txt
在Windows的任务计划程序中,可以查看到新创建的任务:
- 双击这个任务,点击操作并编辑,将“程序或脚本”改为我们创建的 netstat1317.bat 批处理文件,将可选参数清空,点击确定。
接着,在“常规”栏下选择“使用最高权限运行” ,否则可能导致文件不能自主更新或者记录里出现权限问题,点击确定保存。
运行该任务。
等待了足够长的时间后,可以选择终止计划任务,然后对收集到的数据进行统计。在D盘目录下,出现了一个netstat1317.txt 的文件,可以在其中查看联网数据。
在Excel表格中分析记录的数据
-
创建新表格,点击数据,导入数据,选择直接打开数据文件,并在选择数据源中选择文本文件。
-
按照步骤,选择其他编码、分隔符号。
-
选择协议一列,点击上方菜单栏中的插入,选择数据透视图。
-
在新工作表中,点击数据透视图,在跳出的右侧边栏的字段列表中,筛选出我们需要的字段进行分析,并将字段拖放到下方的轴和值中。
分析:如图所示,在这段时间内,联网最多的是程序wpscloudsvr.exe ,也就是WPS,其次为firefox.exe 和desktopcal.exe.如果打开了比较大的表格文件,有可能有占用较多内存的现象。wpscloudsvr是wps的云服务,其主要作用是弹窗登录,如果我们使用WPS时不想被他占资源和打扰可以对它进行处理。图中也包括了其他软件的相关联网程序。
(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 文件,并进入文件夹新建配置文件20201317.xml ,在里面输入以下代码(具体方法同上)。
<Sysmon schemaversion="4.81">
<!-- 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">QQBrowser.exe</Image>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">127.0.0.1</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分别表示“免检”和“必检”名单。免检名单中在统计时忽略掉,必检名单在检测时需要进行匹配。
发现出现提示:You need to launch Sysmon as an Administrator.
解决方法:以管理员身份打开cmd,再次尝试:
右击Win,选择事件查看器,依次选择应用程序和服务日志->Microsoft->Windows->Sysmon->Operational ,可以查看到按照配置文件中的配置信息所记录的一些信息。
- 利用实验三中生成的后门程序进行分析
- 后门程序启动回连到kali
打开事件查看器 ,根据运行时间可以很容易地找到刚刚运行的后门的相关信息。
恶意代码分析
静态分析——VirusTotal网站扫描恶意软件
- 使用VirusTotal分析恶意代码基本信息如下:
- 查看恶意代码的基本属性,可以看出它的SHA-1、SHA-256、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。
静态分析——PEiD软件分析恶意软件
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。
- 扫描模式
- 正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
- 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;
- 核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
- 查看实验二中生成的普通后门文件
(1)用wireshark分析TCP流量包
reverse_tcp反弹端口攻击原理
反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
下面结合Windows下用wireshark捕获的流量包进行分析
TCP在建立连接时有三次握手,如上图所示,下面我们在Kali中打开msfconsole并进行监听,在Windows上运行20201317back.exe
后门程序,Kali攻击机中通过TCP反弹获取到Windows端口
过滤wireshark捕获的包,筛选ip.addr == 192.168.174.141 && tcp
可以用wireshark自带的对TCP流量进行分析的工具将TCP流的数据图形化
上图是wireshark截获到的TCP时间序列的信息图
上图是勾中“限制显示过滤器”后的流量图,也就是TCP流在靶机(主机,IP为192.168.171.128
,端口号为1317
)和攻击机(Kali,IP为192.168.171.128
,端口号为1317
)间的往返情况
上图是192.168.171.1:1248
和192.168.171.128:1317
之间TCP流的往返时间
下面具体来分析TCP流中的一个包
在wireshark中追踪TCP流可以发现包的内容全部为密文,下面直接查看wireshark分析出来包的信息对第一个[SYN]包,我们在Internet Protocol层可以看到各种信息,包括原地址和目的地址
传输控制协议(Transmission Control Protocol)可以看到第一个包中TCP选项内容
接下来TCP流中的包也可以以同样方法进行分析
(3)使用SysTracer分析
systracer可以记录下计算机某个时刻的状态。然后过一段时间后再次记录。通过比较两次记录中计算机的不同进行相应的分析。
我进行了三次snapshot,其中snapshot1是未进行操作时的初始状态,snapshot2是攻击机已经通过reverse_tcp攻击成功后的状态,snapshot3是攻击机进入到靶机的shell后的状态
第一次捕获
snapshot1
snapshot2
snapshot3
也是同理,可以看到3比1增添了后门程序、增添了svchost.exe,删除了svchost.exe又增添了svchost.exe,最后增添了WmiApSrv.exe
(4)使用Process Explorer分析恶意软件
使用Process Explorer分析恶意软件
下载Process Explorer v16.22并解压
打开Process Explorer.exe
Process Explorer可以监听到电脑上所有正在运行的程序,找到可疑行为,仔细观察是否有后门程序。
通过Process Explorer中的Find工具查找使用了cmd的进行,直接定位到后门程序20201317back.exe
选中此后门程序后,可以直接点击Kill Progress杀死进程
总结
-
如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
-
使用windows自带的schtasks指令设置一个计划任务,发现网络连接异常
-
使用Sysmon,编写配置文件,记录有关的系统日志
-
使用Process Explorer工具,监视进程执行情况。
-
使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
-
使用Systracer拍摄快照,对比不同快照,查看是否有可疑的增删注册表、启动项的行为。
-
使用wireshark查看自己计算机的端口开放情况,查看未知端口进行可疑的数据传输
-
最后也可以大概分为动态分析和静态分析两部分。
- 静态分析
分析其函数链接库、壳的情况、特征库比对等操作,可以分出一部分恶意代码。
恶意代码编写者经常使用加壳或混淆技术,让他们的文件更难被检测或分析。混淆程序是恶意代码编写者尝试去隐藏其执行过程的代码。而加壳程序则是混淆程序中的一类,加壳后的恶意程序会被压缩,并且难以分析。这两种技术将严重阻碍你对恶意代码的静态分析。
合法程序大多总是会包含很多字符串。而由被加壳或者混淆的恶意代码直接分析获取得到的可打印字符串则很少。如果使用Strings程序来搜索一个程序,发现它的字符串很少时,它就很可能是混淆的或是加壳的,也表明它可能是恶意的。- 动态分析
我们可以通过进程随时观察我们的计算机,还可以通过观察注册表的变化来监控恶意代码,分析计算机中的日志,上一些网站时还可以通过抓包来进行分析。
-
-
如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 使用systracer工具分析恶意软件,查看其对注册表和文件的修改。
- 使用Wireshark进行抓包分析,监视其与主机进行的通信过程。
- 使用PEiD查看程序是否加壳,加的什么壳
- 使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
- 将程序放入sandbox中进行动态分析;
- 使用Process Explorer监视主机状态,查找与该进程相关的句柄,看看其是否进行了危险操作(如运行cmd.exe等);
- wireshark可以进行网络抓包,直接分析是否有外部IP对本机进行数据包的传送。
-
实验总结与体会
本次实验主要是对各种恶意代码和后门程序进行了动态分析(静态分析可以用IDA PRO实现),采用了wireshark流量分析、sysmon检测、任务计划分析、systracer、Process Explorer等多个分析方法,对平日如何查找、发现恶意代码和后门又有了新的认识和想法,如在分析可疑行为时我们可以重点看对cmd
、shell
等的调用情况,从而锁定是否右后门程序。
前面的几个exp1、2、3更侧重于攻击方式,而本次实验就更倾向于白客,即网安维护人员,一旦发现了问题,如何发现,如何解决?这就是我认为我们这次实验的最终目的。
之后希望能够熟练运用这些技能,继续加深实践