《网络对抗技术》Exp4 恶意代码分析

《网络对抗技术》Exp4 恶意代码分析

一、实践目标

1.系统运行监控
使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
2.恶意软件分析
分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件读取、添加、删除了哪些注册表项,读取、添加、删除了哪些文件,连接了哪些外部IP,传输了什么数据

二、实践内容

Ⅰ.系统运行监控—任务计划

1.写好脚本(实际上就是命令行语句)netstat.bat,再新建一个txt文档netstatlog.txt用于接收数据

netstat -bn >> C:\Users\killmebbay\Desktop\schtask\netstatlog.txt

image-20210331185740601

图2.1.1

2.用命令行创建一个计划任务(感觉直接创建会快一点)

schtasks /create /TN netstat1204 /sc MINUTE /MO 1 /TR "C:\Users\killmebbay\Desktop\schtask\netstat.bat"

image-20210331190003258

图2.1.2

TN是创建的计划任务名是netstat1204,sc表示计时方式,TR表示执行的指令,>表示输出重定向

3.打开任务计划程序

image-20210331190213145

图2.1.3

4.在常规中选择使用最高权限运行

image-20210331190309824

图2.1.4

5.等待若干分钟后就可以得到想要的数据了

image-20210331192828836

图2.1.5

6.利用python处理数据

# -*- coding: UTF-8 -*-
from collections import Counter
import matplotlib.pyplot as plt
import re
f = open( 'C:\\Users\\killmebbay\\Desktop\\schtask\\netstatlog.txt', 'r',encoding = 'UTF-8' )
c=f.read()
f.close()
li=re.split("\\s+",c)
re = Counter(li)
# print(re)

x=re.keys()
y=re.values()
fig = plt.figure()
plt.bar(x,y,color = '#9999ff',width = 0.2) 
plt.title('统计图') 
plt.xlabel('X-axis') 
plt.ylabel('Y-axis') 
plt.show() 
python xxx.py

image-20210401194512300

图2.1.6

值稍微有点多,但可以用放大镜看一下

image-20210401194639140

图2.1.7

放大后发现这几个出现的次数比较多,命令行也还不错

image-20210401195949152

图2.1.8

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

image-20210401204311877

图2.1.9

image-20210401212847870

图2.1.10

image-20210401212934199

图2.1.11

image-20210401213134274

图2.1.12

Ⅱ.系统运行监控—sysmon

1.安装sysmon

sysmon安装包

sysmon配置文件

<Sysmon schemaversion="13.02">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <ProcessCreate onmatch="exclude">     
      <Image condition="end with">WeChat.exe</Image> 
    </ProcessCreate>

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">WeChat.exe</Image>
    </FileCreateTime>
    
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">WeChat.exe</Image>
      <SourcePort condition="is">137</SourcePort>
      <SourceIp condition="is">192.168.31.63</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>

image-20210401223101689

图2.2.1

2.启动sysmon

sysmon -accepteula  -i sysmon1204.xml

-i第一次启动时用,之后更新xml配置可以-c完成

image-20210401223024597

图2.2.2

3.查看记录

打开事件查看器应用程序和服务日志/Microsoft/Windows/Sysmon/Operational查看记录

image-20210401223606262

图2.2.3

image-20210411075817984

图2.2.4

抓到了shell.exe

Ⅲ.恶意软件分析

1.用wireshark分析TCP包

ip.src eq 192.168.31.177 or ip.dst eq 192.168.31.177

image-20210402131025012

图2.3.1

在程序启动的时候,就开始收到从192.168.31.177IP的11204端口发来的TCP请求包,是因为在Kali虚拟机中已经启动了exploit监听,但都被拒绝了,因为shell.exe还没有启动。

image-20210402131126127

图2.3.2

shell.exe启动后,TCP请求被允许,之后编号24630的链接传输了4字节数据,之后带有[PSH,ACK]包都传了1460字节的数据,当kali虚拟机发出screenshot的命令后得到的截图的数据也应该是 通过这种方法传输来的。下图是其中一个包的数据:

image-20210403105032518

图2.3.3
5f8bc65e5b5dc3558bec566832000200ff750c33f6e88e18000050e8b30f000083c40c85c07507be90040000eb0bff750c50e8160a000059598bc65e5dc3558bec5356578b7d0c57e8f4120000c70424320002008bd857e84c18000050e8710f00008bf083c40c85f67507bf90040000eb52ff7614e85a7c000056e87c0a0000595983f8037531837e3000742b684600020057e810180000595950684700020057e802180000595950ff76185756ff563083c4148bf8eb036a325fff7614e8277c00005953ff750857e84619000083c40c8bc75f5e5b5dc3558bec51535657ff750ce85a1200008365fc008bd8c7042432000200ff750ce8ac17000050e8d10e00008bf883c40c85ff7507be90040000eb3cff7714e8ba7b000057e8dc090000595983f803751b8b472c85c074148d4dfc51ff7718ff750c57ffd083c4108bf0eb036a325eff7714e89d7b000059ff75fc680c00080053e83114000053ff750856e8ae18000083c4188bc65f5e5b8be55dc3558bec51535657ff750ce8c01100008365fc008bd8c7042432000200ff750ce81217000050e8370e00008bf883c40c85ff7507be90040000eb3cff7714e8207b000057e842090000595983f803751b8b473485c074148d4dfc51ff7718ff750c57ffd083c4108bf0eb036a325eff7714e8037b000059ff75fc684800020053e83913000053ff750856e81418000083c4188bc65f5e5b8be55dc3558bec51515657ff750ce8261100008365f8008bf8c7042432000200ff750ce878160000680c000800ff750c8bf0e826170000568845fce88b0d00008bf083c41485f67447ff7614e87b7a00005985ff742456e8980800005985c074198b462485c07412ff75fcff7618ff750c56ffd083c4108945f80fb64dfc5156e8a9080000ff7614e8557a000083c40c57ff7508ff75f8e87017000083c40c33c05f5e8be55dc3558bec56ff750ce8861000006a018bf0680c00080056e8c312000056ff75086a00e83f1700008b451083c41c83200033c05e5dc3558bec81ec8000000053576a0533d28d7d845b33c08955806a0659f3ab8955b88d7dc08955bcab8955e88955fcababe8852300008945f885c00f84ab020000837d18018b451c8945b88b4520568b75108945c0c645c800c745801c0000007513c745ecc8800210c745f4f5000000e9d4000000837d18020f85d201000083659c008d7da06a065933c0c745ecc0810210f3abbeb4800210c745f4440100008d7dcc6a406800300000a5680020000068f095006ba5a5a566a58b751056ff15bc1002108945f085c00f848a0100006a1c8d4d9c515056ff15ec10021085c00f8474010000ff75a8e8bccf00008bf85985ff0f8461010000ff75a8689000000057e829d9000083c40c6a00ff75a857ff75f056ff15cc10021085c00f843801

image-20210402133251021

图2.3.4

kali虚拟机中照片的二进制信息。

2.通过Ⅰ中的任务计划分析

image-20210402131946193

图2.3.5

在shell.exe启动后,通过上文中的程序找到了192.168.31.63(本机)向192.169.31.177(Kali虚拟机)的TCP包,由此可见在程序启动后会隔一段时间就会发送TCP包。

3.通过PEview分析

图2.3.6

图2.3.7

图2.3.8

上面三张图展示了程序运行所依赖的5个动态库和其中的操作流程。

根据上图可以看出本程序使用了ADVAPI32.dllKERNEL32.dllMSVCRT.dllWS2_32.dllWSOCK32.dll,这五个链接库,其中WS2_32.dllWSOCK32.dll是比较熟悉的win上面编写SOCKET用的,这是用来回连使用的,而ADVAPI32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关,从这句解释就可以看出,本后门程序的潜在的威胁,KERNEL32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。而MSVCRT.dll是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft Visual C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。

AllocateAndInitializeSid函数是分配和初始化一个安全标识符(SID),带有8个子权限,freesid作用是释放一个安全标识符 (SID)之前分配使用 AllocateAndInitializeSid函数,成功则返回0,失败则返回一个psid的参数。

其中我感觉最重要的库是WS2_32.dll,其中的两个函数WSARecv,WSASend,一个是发送数据的函数一个是接受数据的函数,是Windows socket编程中的找那个要函数,称为IO完成端口,IOCP,这篇文章介绍的还不错:IO完成端口(IOCP) 作者:木文

4.查看PEiD的信息

图2.3.9

5.查看Stud_PE的信息

图2.3.10

读取、添加、删除了注册表项需要管理员权限,而本程序只是普通启动,应该不涉及修改注册表,读取、添加、删除的文件,连接了的外部IP,传输的数据在上文中已有分析。

6.使用OllyDbg分析程序

①打开程序,发现程序的入口是0x00401508

image-20210408164324299

图2.3.11
②一直向下单步执行(F7),经历了无数的看不懂的命令后:

image-20210408164720206

图2.3.12
③再次跳转

image-20210408164903650

图2.3.13
④再再次跳转

image-20210408164958178

图2.3.14
⑤执行函数

image-20210408165036967

图2.3.15
⑥再跳转,然后在⑤⑥中无限循环

image-20210408165145324

图2.3.16

关于这部分我确实实在是看不懂,但是感觉有一篇文章很不错,推荐感兴趣的人看一看:一段 shellcode 代码的分析 作者:Johvid,感觉就是shell.exe反复横跳一段时间后不建立连接就停止了。

7.使用SysTracer分析

systracer直接去官网下载就行了,安装的时候点击第一个

image-20210408212110838

图2.3.17

点击take snapshot,再点击确定就可以照一个快照出来

image-20210408212159833

图2.3.18

在虚拟机中开始getsystem时发现在windows中添加了这个动态库,经过几次测试发现这个名字似乎是6位随机小写字母

image-20210408212305232

图2.3.19

查看其中添加、删除了的注册表项,添加、删除的文件,好像还有一些更新的内容

三、实验习题

(1)监控http和https请求可以知道浏览的内容,可以通过任务计划或者事件查看器实现;监控其有哪些端口是开启的,这个可以通过netstat -a -n实现;截取目标机器的屏幕,可以通过screenshot实现;利用器摄像头录制视频,录制音频,分别可以通过webcam_snaprecord_mic实现。

(2)Stud_PE;PEiD;PEview;ollydbg

原文地址:https://www.cnblogs.com/wqnmlkb/p/14616844.html