网络对抗Exp4-恶意代码分析
一、实验目标
1.监控自己系统的运行状态,看有没有可疑的程序在运行。
2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
3.假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
二、实验内容
- 系统运行监控
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
- 分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件
- 读取、添加、删除了哪些注册表项
- 读取、添加、删除了哪些文件、
- 连接了哪些外部IP,传输了什么数据
三、基础知识
1. 恶意代码
-
定义:
泛指指没有作用却会带来危险的代码,即使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
- 指令集合: 二进制执行文件, 脚本语言代码, 宏代码, 寄生在文件、启动扇区的指令流
-
特征:①本身是计算机程序 ②有恶意的目的 ③ 通过执行发生作用
-
目的:技术炫耀/恶作剧、远程控制、窃取私密信息、盗用资源、 拒绝服务/破坏,...
-
常见的恶意代码:
计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、Rootkit、逻辑炸弹...
- 计算机病毒:需要传播受感染的驻留文件来进行复制,一般需要宿主程序被执行或人为交互才能运行。普通病毒的传染能力主要是针对计算机内的文件系统而言。
- 蠕虫:是一种通过网络传播的恶性病毒,它不使用驻留文件即可在系统之间进行自我复制,蠕虫病毒的传染目标是互联网内的所有计算机。
2. schtasks
- 定义:计划命令,程序以定期或在特定时间运行,在计划中添加和删除任务,启动和停止按需任务,以及显示和更改计划任务。
- schtasks.exe 工具与控制面板 中的 "计划任务" 执行相同的操作。
- 语法:schtasks +参数 参数如下:
- change:更改任务
- create:计划新的任务。
- delete:删除计划任务。
- end:停止任务启动的程序。
- query:显示计划在计算机上运行的任务。
- run:立即启动计划任务。
- 实例:
schtasks /create /TN netstat1319 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt
TN:
Task Name,本例中是netstat1217
SC:
表示计时方式,我们以分钟计时填MINUTE
MO:
MOdifier
TR:
Task Run,要运行的指令是 netstat
bn:
b表示显示可执行文件名,n表示以数字来显示IP和端口
">
":表示输出重定向,将输出存放在c:\netstatlog.txt文件中
- 备注:
- /Tn 和 /s 参数用于识别任务。 /Tr、 /ru 和 /rp 参数指定可以更改的任务的属性
- /Ru 和 /rp 参数指定运行任务所用的权限。 /U 和 /p 参数指定用于更改任务的权限。
3. sysmon
-
定义:sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。
-
sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
-
可选择的事件过滤器有:
- ProcessCreate 进程创建
- FileCreateTime 进程创建时间
- NetworkConnect 网络链接
- ProcessTermina 进程结束
- DriverLoad 驱动加载
- ImageLoad 镜像加载
- CreateRemoteTh 远程线程创建
- RawAccessRead 驱动器读取
- ProcessAccess 进程访问
- FileCreate 文件创建
- RegistryEvent 注册表事件
- FileCreateStre 文件流创建
-
监控系统的基本操作可分为以下三步:
-
确定要监控的目标:写好过滤条件(相当于白名单),多多益善,信任的程序尽量不要记到日志里(日志多了不好分析)。
写好配置文件
.xml
文件
- 记录所有网络连接就可以简单写为
<NetworkConnect>*</NetworkConnect>
exclude
相当于白名单,凡是未声明的都记录下来。include
相当于黑名单。- 注意规则大小写敏感。
- 记录所有网络连接就可以简单写为
-
-
启动sysmon
四、实验过程
1.使用schtasks指令监控系统
- 在命令行中输入以下命令,创建任务计划netstat1217
schtasks /create /TN netstat1319 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > d:\netstatlog.txt
- 在D盘中创建一个脚本文件
netstat1319.bat
因为不能直接写入.bat文件,所以我在D盘创建了一个netstat1319.txt
文本文件,并写入以下内容:
date /t >> d:\netstat1319.txt
time /t >> d:\netstat1319.txt
netstat -bn >> d:\netstat1319.txt
-
修改后缀名为.dat
-
在Windows的任务计划程序中,可以查看到新创建的任务:
- 双击这个任务,点击操作并编辑,将“程序或脚本”改为我们创建的
netstat1319.bat
批处理文件的位置,点击确定。
-
在"条件"选项卡中可以看到,电源选项中默认操作为“只有在计算机使用交流电源时才启动此任务”,那么使用电池电源时就会停止任务。为了我们统计足够多的数据,这个选项取消掉。
-
编辑属性,勾选上这个脚本“使用最高权限运行”。然后再右键点击运行。
-
右键点击运行
-
这时可以看到D盘下出现了三个文件,如下图示:
等待一段时间即可获得在所创建任务计划netstat1319监视下获得的数据
-
在wps的Excel表格中分析记录的数据
-
导入文本数据:新建excel文件->选择上方“数据”->选择“导入数据”->选择“导入数据”->选择“直接打开数据文件”
-
选择数据源文件:在F盘中(这里按照自己生成的位置)选中
netstat1319.txt
-
依次选择其他编码、分隔符号,然后将分隔符号的所有选项都选中,点击完成即可
-
-
创建数据透视图
-
在需要统计数据的各列中删除多余的空行和字符,选中我们所要分析的区域,插入数据透视表
-
将字段列表拖到下方的行和值中,就生成了我们所需的数据透视图
-
-
分析:
- 从图中可以看出位居第一位的是TCP,连接的外部地址是我打开的相关页面的,大多为http和https连接;
- 第二个多的就是wps.exe,这时候我正在使用wps来做实验内容,同时还用wps打开了一些其他文件,所以它现在占用的内存是比较多的。
- 第三个多的是wpscloudserver.exe,是wps云盘。
- 第四多的是et.exe,这个是金山表格,正在做数据透视表,所以它也占用了一部分内存
- svchost.exe是是系统共享进程,我们可以把他理解为一个宿主或者容器,本身没有任何服务功能。
-
同理可获得“外部IP” 的数据透视图,,下面列举出来连接最多的一些外部网站,端口基本上都是通过443端口(https)和80端口(http)
查询其中访问次数最多的一个外部IP110.242.68.4
可以发现其ASN归属地来源于河北省保定是顺平县,是联通的网络
2.使用sysmon工具监控系统
(1)明确要监控的目标。
我在这里选择的是:
- 进程创建
ProcessCreate
- 进程创建时间
FileCreatTime
- 网络连接
NetworkConnect
、远程线程创建CreateRemoteThread
。
(2)编写xml配置文件:
在sysmon所在的文件夹下:
<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>
</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>
参数解释:
exclude
:相当于白名单,不用记录。include
相当于黑名单。ProcessCreate
:进程创建。Image condition
要根据自己使用的浏览器更改。由于我使用的是Chrome浏览器,所以在我的配置文件中,排除了(不记录)进程名为Chorme.exe的进程。但是要记录以cmd.exe
结尾的进程记录。(大家如果有用别的浏览器的:比如Edge,在这里可以替换)FileCreatTime
:进程创建时间。这里排除(不记录)浏览器进程的创建时间。NetworkConnect
:网络连接。过滤掉(不记录)浏览器的网络连接,源IP地址为127.0.0.1
、源端口为137的连接服务。包含(记录)目的端口为80(http)
和443(https)
的网络连接。137端口
:提供局域网中ID或IP查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。127.0.0.1
:环回地址,表示本机。CreateRemote
:远程线程创建。记录的线程如下:explorer.exe
:Windows程序管理器或者文件资源管理器svchost.exe
:一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。winlogon.exe
:Windows NT
用户登陆程序,用于管理用户登录和退出。powershell.exe
:专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
(3)启动sysmon(要以管理员的身份运行命令行)
输入命令Sysmon64.exe -i sysmon20201319.xml
,安装sysmon,结果如下:
(4)使用事件查看器分析进程
- 查看“事件查看器”,选择日志的位置,应用程序和服务日志
/Microsoft/Windows/Sysmon/Operational
在这里,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、级别、任务类别、详细信息等。
-
用Kali的windows/meterpreter组件生成Windows下的exe后门
按照后门程序进行配置并启动回连到kali虚拟机中,输入shell可以获取主机的cmd
我们可以在事件查看器中找到此条日志
-
在获取到命令行后,我还发现了一条有关conhost.exe的记录
- 上网搜索资料和参考课题负责人的解释后,我了解到
conhost.exe
进程是微软为其Vista以及Win7、Windows 2008(服务器版)系统定义的系统文件,在系统中被称为“控制台窗口主机”。其功能主要是为命令行程序(cmd.exe
)提供类似于csrss.exe
进程的图形子系统等功能支持。
- 上网搜索资料和参考课题负责人的解释后,我了解到
-
然后我又输入了
ipconfig
指令,日志如下:
- 在事件查看器中,我们还可以发现许多
svchost.exe
的记录。svchost.exe
是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。
- 在事件查看器中,我们还可以发现许多
3.使用VirusTotal分析恶意软件
- 把keli之前生成的后门程序(已接收到win主机里的)在VirusTotal进行分析(也可以使用VirusScan工具),结果如下:55/70,被杀软查出来的比率还是蛮高的
- 继续查看此恶意软件的基本属性,可以看出它的SHA-1、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。
- 还可以看到此软件的头部、各个节的相关信息,以及引入的动态链接库
4.静态分析——PEiD软件分析恶意软件
[工具下载链接](http://www.ddooo.com/softdown/172966.htm#:~:text=PEiD中文版 (查壳脱壳工具),v0.95汉化版 软件大小:3.09M)
-
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名。
- 扫描模式
- 正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
- 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;
- 核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
- 扫描模式
-
查看之前生成的普通后门文件
- 发现显示:
yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)*
- 上网查了资料以后,总结如下:
- 用PEiD检测壳为:
yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)*
- 有两种情况:
1)其他壳伪装成yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)
2)没有加壳,作者加了花指令,伪装成yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h) - 此处应该是没有加壳的,也就是第二种情况。
- 用PEiD检测壳为:
- 发现显示:
-
查看加了压缩壳的文件
-
将原来的后门文件用
upx 20201319_backdoor.exe -o 20201319door_upx.exe
进行压缩
随后拖到桌面上检测:
-
发现他查到了压缩壳的相关信息
-
-
查看加了压缩壳之后又添加加密壳的文件
-
首先
sudo apt-get install hyperion
-
man hyperion
-
找到原来的加密壳所在位置,在此处打开终端
-
sudo cp 20201319door_upx.exe /usr/share/windows-resources/hyperion
(因为是可执行文件所以要先把我们需要加壳的文件复制到那个目录下) -
cd /usr/share/windows-resources/hyperion
切换到加密程序所在的目录下
sudo wine hyperion.exe -v 20201319door_upx.exe markshell_hyperion.exe
-
将文件拖动到主机,进行检测
-
经过上网搜索后,解析是se目前是强壳,比较难脱壳查看文件信息。看来压缩+加密还是有效果的。
-
-
查看普通的.exe文件
- Microsoft Visual C++是由Microsoft公司开发的一款便捷实用的C语言编程工具,具有集成开发环境。这里说明此
ncat.exe
文件是使用C++语言编写的应用程序。
- Microsoft Visual C++是由Microsoft公司开发的一款便捷实用的C语言编程工具,具有集成开发环境。这里说明此
5.使用PE Explorer进行分析
-
PE Explorer是一款资源编辑器,它支持直接查看、修改软件的资源,包括菜单、对话框、字符串表等,软件还具备有W32DASM 软件的反编译能力和PEditor软件的PE文件头编辑功能。
-
我们用它打开
20201319backdoor.exe
,我们可以看到这个软件的文件头信息(基本信息),比如节对齐粒度、文件对齐粒度、时间戳、映像基址ImageBase
等等
-
我们通过视图还可以查看数据目录、节头等详细信息
-
查看数据目录
-
查看节头信息
-
-
通过视图——引入可以查看此软件引用的dll
-
msvcrt.dll
:微软在windows操作系统中提供的C语言运行库执行文件。 -
kernel32.dll
:Windows 中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。 -
advapi32.dll
是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关。xp系统一般位于C:\WINDOWS\system32\
目录下,大小659KB。 -
wsock32.dll
:Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。 -
我检查其他几个后门程序后发现,他们都引用了
kernel32.dll
,可以看出他对于后门程序的重要性
6.使用Systracer动态分析
点击右侧的take snapshot
,拍摄快照。点击start开始,不用点击stop,当拍摄完毕会自动停止。
我们总共截了以下3张快照:
-
第一次是初始状态
第二次是是攻击机已经通过reverse_tcp攻击成功后的状态
第三次是攻击机进入到靶机的shell后的状态
比较第一次和第二次的不同
比较第二次与第三次的不同
7.使用wireshark抓包分析恶意软件
- 运行后门
20201319backdoor.exe
,在kali中回连。把过滤规则设置为ip.addr == 192.168.242.129
,只留下与kali机有关的包 - 我们可以看到前三个包为TCP连接的三次握手
- 在kali中输入
dir
,发现wireshark又捕获到了许多PSH+ACK包,可以判断有数据在传输
五、实验后问题回答
1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控
- 静态分析
分析其函数链接库、壳的情况、特征库比对等操作,可以分出一部分恶意代码。
恶意代码编写者经常使用加壳或混淆技术,让他们的文件更难被检测或分析。混淆程序是恶意代码编写者尝试去隐藏其执行过程的代码。而加壳程序则是混淆程序中的一类,加壳后的恶意程序会被压缩,并且难以分析。这两种技术将严重阻碍你对恶意代码的静态分析。
合法程序大多总是会包含很多字符串。而由被加壳或者混淆的恶意代码直接分析获取得到的可打印字符串则很少。如果使用Strings程序来搜索一个程序,发现它的字符串很少时,它就很可能是混淆的或是加壳的,也表明它可能是恶意的。
- 动态分析
我们可以通过进程随时观察我们的计算机,还可以通过观察注册表的变化来监控恶意代码,分析计算机中的日志,上一些网站时还可以通过抓包来进行分析。
2.如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息
- 查看任务计划情况,对统计到的数据进行分析,查看其是否有可疑行为;
- 使用systracer工具建立不同的快照,然后进一步分析注册表、端口、文件等变化情况;
- 使用IDA对程序进行静态分析,反汇编代码并进行进一步分析;
- 将程序放入sandbox中进行动态分析;
- 使用Process Explorer监视主机状态,查找与该进程相关的句柄,看看其是否进行了危险操作(如运行cmd.exe等);
- wireshark可以进行网络抓包,直接分析是否有外部IP对本机进行数据包的传送。
六、实验问题
1.在做数据透视表时创建带有无效数据,影响数据表分析
解决方法:把前面的空行删除和多余数据即可。
2.在使用systracer重复步骤时候提示systracer not registered导致无法进行快照
解决方法:因为免费版的只能用五次,卸载后重新下载就可以用了,但是需要换一个下载地址。
七、实验感想
本次实验算是对之前Exp1-Exp3的内容形成一个闭环,完成对后门、恶意代码等的一个综合实验,多次用到实验二和实验三的内容,也涉及到实验一的思想(缓冲区溢出注入是比较常用的一种获取shell的方法)。本次实验模拟了怀疑电脑被注入后门、恶意代码后我们应该如何做的场景,照理说在sandbox(沙盒)中才更加还原真实情况,但限于时间、我的电脑有没有自带sandbox,因此本次试验中所有后门程序、恶意代码等都是直接在本机上跑的(希望对电脑没有影响……)。本次实验我主要是对各种恶意代码和后门程序进行了动态分析(静态分析可以用IDA PRO实现),采用了wireshark流量分析、sysmon检测、任务计划分析、systracer、Process Explorer等多个分析方法,对平日如何查找、发现恶意代码和后门又有了新的认识和想法,如在分析可疑行为时我们可以重点看对cmd、shell等的调用情况,从而锁定是否右后门程序。