exp4恶意代码分析实验报告20201331黄文刚

发布时间 2023-04-03 11:28:58作者: 常仁

exp4恶意代码分析实验报告20201331黄文刚
目录

一、实验目标

二、实验内容

三、基础知识

  1. 恶意代码
  2. schtasks
  3. sysmon

四、实验过程
1.使用schtasks指令监控系统
2.使用sysmon工具监控系统
3.使用VirusTotal分析恶意软件
4.静态分析——PEiD软件分析恶意软件
5.使用PE Explorer进行分析
6.使用Systracer动态分析
7.使用wireshark抓包分析恶意软件

五、实验后问题回答

六、实验问题

七、实验感想

一、实验目标
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 netstat1331 /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文件
记录所有网络连接就可以简单写为*
exclude相当于白名单,凡是未声明的都记录下来。
include相当于黑名单。
注意规则大小写敏感。
启动sysmon

四、实验过程

1.使用schtasks指令监控系统(使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果)

在命令行中输入以下命令,创建任务计划netcontrol1331

schtasks /create /TN netcontrol1331 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > C:\Users\Administrator\Desktop\netstatlog.txt"

在D盘中创建一个脚本文件 netcontrol1331.bat

因为不能直接写入.bat文件,所以我在D盘创建了一个netcontrol1331.txt文本文件
再新建一个txt文档netstatlog.txt用于接收数据 并写入以下内容:

date /t >> C:\Users\Administrator\Desktop\netstatlog.txt
time /t >> C:\Users\Administrator\Desktop\netstatlog.txt
netstat -bn >> C:\Users\Administrator\Desktop\netstatlog.txt

修改后缀名为.dat

打开任务计划进程

“WIN+R”调出“运行”窗口,输入“taskschd.msc”按回车


在常规中选择使用最该权限运行,在条件中关闭电源限制

电源限制可以选择性使用,此处只是为了收集更多的信息,所以关闭了电源限制

在操作栏清空参数,选择批处理文件



等待一段时间后就可以得到想要的数据了

这个等待时间看你心情

收集了较多数据后,停止任务,将所得数据在excel中进行分析

①新建excel,数据→自文本→选择数据源→netcontrol1331.txt,勾选分隔符号


②勾选所有分隔符号


③列数据格式勾选常规→完成

④选择要分析的列——>选择插入——>选择数据透视图——>直接默认值确认



同样的方法,可以得到连接的外部ip地址的统计图

分析结果

出现最多的是TCP,established,established意思是TCP连接成功,再下来就是[QQBrowser.exe],是浏览器发起了678次TCP连接,下面列举出来连接最多的一些外部网站,端口基本上都是通过443端口(https)

2.使用sysmon工具监控系统(安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。)

(1)明确要监控的目标。

我在这里选择的是:
进程创建ProcessCreate
进程创建时间FileCreatTime
网络连接NetworkConnect、远程线程创建CreateRemoteThread。

(2)编写xml配置文件:

在sysmon所在的文件夹下:

* chrome.exe
<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>

参数解释:

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 sysmon20201217.xml,安装sysmon,结果如下:

(4)使用事件查看器分析进程

查看“事件查看器”,选择日志的位置,应用程序和服务日志/Microsoft/Windows/Sysmon/Operational

在这里,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、级别、任务类别、详细信息等。
运行我们在实验二中生成的后门程序20201217_door.exe,并启动回连到kali虚拟机中。我们可以在事件查看器中找到此条日志

随后,我在msf监听环境下,输入了shell指令,获得了Windows的cmd:

日志如下:

然后我又输入了ipconfig指令,日志如下:

我们可以发现,此时的路径变为了SysWOW64,这是个什么文件夹呢?与system32有什么区别和联系呢?
SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。
Windows下面的命令行是64位的,而kali回连获得的是32位的,所以会出现此条日志。
在事件查看器中,我们还可以发现许多svchost.exe的记录。svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

3.使用VirusTotal分析恶意软件

把keli之前生成的后门程序(已接收到win主机里的)在VirusTotal进行分析(也可以使用VirusScan工具),结果如下:40/60,被杀软查出来的比率还是蛮高的

继续查看此恶意软件的基本属性,可以看出它的SHA-1、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。

还可以看到此软件的头部、各个节的相关信息,以及引入的动态链接库

4.静态分析——PEiD软件分析恶意软件

工具下载链接
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名。
扫描模式

正常扫描模式:可在PE文档的入口点扫描所有记录的签名;

深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;

核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。

查看实验二中生成的普通后门文件

查看加了压缩壳的文件
将原来的后门文件用upx 1217_door.exe -o 20201217door_upx.exe进行压缩,随后拖到桌面上检测:
发现他查到了压缩壳的相关信息

查看加了压缩壳之后又添加加密壳的文件
首先sudo apt-get install hyperion
man hyperion
找到原来的加密壳所在位置,在此处打开终端

cp 20201217_upx_door.exe /usr/share/windows-resources/hyperion (因为是可执行文件所以要先把我们需要加壳的文件复制到那个目录下)
cd /usr/share/windows-resources/hyperion切换到加密程序所在的目录下
-wine 20201217_upx_door.exe -v markshell.exe markshell_hyperion.exe


将文件拖动到主机,进行检测

经过上网搜索后,解析是se目前是强壳,比较难脱壳查看文件信息。看来压缩+加密还是有效果的。
查看普通的.exe文件

Microsoft Visual C++是由Microsoft公司开发的一款便捷实用的C语言编程工具,具有集成开发环境。这里说明此ncat.exe文件是使用C++语言编写的应用程序。

5.使用PE Explorer进行分析

工具下载链接

PE Explorer是一款资源编辑器,它支持直接查看、修改软件的资源,包括菜单、对话框、字符串表等,软件还具备有W32DASM 软件的反编译能力和PEditor软件的PE文件头编辑功能。

我们用它打开20201331backdoor_upx.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,当拍摄完毕会自动停止。

我们总共截了以下五张快照:

快照一:未移植后门程序,保存为Snapshot #1
快照二:运行后门程序并在kali中实现回连,保存为Snapshot #2
快照三:在kali中使用dir指令,保存为Snapshot #3
快照四:在kali中使用screenshot和record_mic指令,保存为Snapshot #4
快照五:在kali中使用getuid指令,保存为Snapshot #5

接下来我们对比快照,分析恶意软件在执行过程中系统有哪些变化

通过右下角的compare键或者View Differences Lists比对各快照,可以选择Only Difference只查看不同的项,在右下角可以选择对比哪两张快照

对比快照一和快照二(后门程序运行前后)

点击View Differences Lists——>选中Only differences——>选中Opened Ports
可以看到新增开放了我们的后门程序20201217_door.exe连接的本地地址和目标地址以及端口号
在Opened Handlers中,我们可以看到增加了一些和后门有关的文件,也删除了一些文件,发生了键值的变化

在loaded dll中,查看启动后门程序后删除的dll文件

在running processes中,点击 20201217_door.exe可以与看到与此后门程序相关的系统进程。

对比快照2和快照3 (3运行了dir指令)

点击Register,可以看到快照3对根键中的内容进行了修改,对注册表中的配置信息进行了修改

在opened ports中看到主机端口与虚拟机ip及相关端口间的交互:

在running processes中,查看被删除的conhost.exe

    conhost.exe全称是Console Host Process, 即命令行程序的宿主进程。简单的说他是微软出于安全考虑,在windows 7和Windows server 2008中引进的新的控制台应用程序处理机制。

对比快照3和快照4(4使用了screenshot和record_mic指令)

我们发现多出来了svchost程序

svchost.exe是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。

删除和更改了之前建立的调用许多DLL的过程

对比快照4和快照5(5使用了getuid指令)

可以发现注册表有变化

新建了很多连接,其中有与后门程序相关的Apache HTTP Server

在opened ports中,可以看到新建连接的SYN消息包信息和端口号1217。

7.使用wireshark抓包分析恶意软件

运行后门20201331backdoor_upx.exe,在kali中回连。把过滤规则设置为ip.addr == 192.168.190.133,只留下与kali机有关的包
我们可以看到前三个包为TCP连接的三次握手


在kali中输入dir,发现wireshark又捕获到了许多PSH+ACK包,可以判断有数据在传输


五、实验后问题回答
1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。

首先要监控的是网络,可以就用schtasks设置任务,然后筛选出可疑的网络行为。但凡攻击者想进行远程操作,建立了连接,就一定会被记录到
然后检测进程,比如攻击者要抓肉鸡DDOS或者挖矿,肯定会导致占用的CPU不正常(虽然我感觉应该很少抓PC)
还有要检测文件的创建和删除。如果攻击者是通过小马传大马的方式进行进一步的攻击,检测文件的创建和删除可以防止进一步的攻击,这个可以用schtasks,也可以用systracer。
最后是监控对驱动和硬件的调用,将损失尽量减少。

2.如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。

Process Monitor可以看的很清楚这个进程的实施者、端口等等,如果能定位到具体的exe,可以进一步丢到vt上,或者用ida反编译之类的深入研究

六、实验问题

1.在编辑好任务计划后,右击运行,但是netstat1331.txt文件里一直显示请求操作需要提升。

原因:在编辑任务计划时,需要设置成以最高权限运行。所以我们把此选项勾选上即可。

2.在安装sysmon的时候出现以下报错:

原因:我们的电脑适应版本3.10,将xml的版本号改成3.10即可。
并且我之前已经下过了,这里要把之前那个版本的删掉,才能正确安装3.10版本的sysmon

七、实验感想

防御确实不如攻击有意思,但是在现实生活中给我们合法攻击的机会不多,所以我们现在才是走上了正轨。
“攻击者只需找到防守者的一个漏洞就成功了,而防守者需要做到面面俱到”
现在对这句话的体会更加深刻了,但就知识面来说,进行攻击时,我只需要知道计算机方面的知识,病毒的生产和制作都由msf和veil等软件完成(当然这也是我浅尝攻击之后的想法,真实的攻击肯定很复杂)。对于防守者,就这个实验来说:我不仅需要计算机方面的知识,还需要网络方面的知识。并且要了解得更深一些,不然都解析不出报文和检测软件抓到的异常数据。