zoukankan      html  css  js  c++  java
  • 《网络对抗技术》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

  • 相关阅读:
    MySQL 5.7 多主一从实现
    从 MySQL 全备的 SQL 文件中抽离出某张表的数据
    KUBERNETES 03:Pod 资源清单
    KUBERNETES 02:基本操作命令
    KUBERNETES 01:说明与安装
    DOCKER 08:搭建本地镜像仓库 Harbor
    DOCKER 07:docker swarm
    DOCKER 06:docker compose
    DOCKER 05:数据持久化
    DOCKER 04:容器资源限制和网络原理
  • 原文地址:https://www.cnblogs.com/wqnmlkb/p/14616844.html
Copyright © 2011-2022 走看看