Exp4-恶意代码分析

Exp4-恶意代码分析

一、实践目标

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

1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。

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

二、实践内容

1、系统运行监控

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

先来学习一下schtasks的命令,贴上参考链接schtasks的命令

  • 在cmd输入指令schtasks /create /TN netcontrol1221 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > C:UsersmisakaDesktop etstatlog.txt"命令创建计划任务netcontrol1221

image-20210410204642213

  • 在桌面创建一个netcontrol1221.txt,输入内容为
date /t >> C:UsersmisakaDesktop
etcontrol1221.txt
time /t >> C:UsersmisakaDesktop
etcontrol1221.txt
netstat -bn >> C:UsersmisakaDesktop
etcontrol1221.txt
  • 将文件改为netcontrol1221.bat,bat比txt多了日期与时间,这样看起来更方便。

image-20210410205250974

  • 打开任务计划程序任务计划程序库,可以看见新创建的任务netcontrol1221,双击这个任务netcontrol1221操作编辑,选择netcontrol1221.bat文件,清空参数

image-20210410205639746

  • 再在常规中选择使用最高权限运行,让程序自动运行

image-20210410210200845

  • 再点击条件→取消勾选只有计算机使用交流电源才启动此任务,防止电脑一断电任务就停止。

image-20210410211044713

  • 然后执行此脚本一定时间,就可以在netcontrol1221.txt文件中查看到本机在该时间段内的联网记录。

image-20210410212102414

  • 记录了较多的数据后,停止任务,将所得数据在excel中进行分析

    • 新建excel,数据自文本选择数据源netcontrol1221.txt,勾选分隔符号

    image-20210410212839737

    • 勾选所有分隔符号

    image-20210410212929866

    • 列数据格式勾选常规完成

    image-20210410213038069

    • 默认选项,直接点确定

    image-20210410213120664

    • 待分析数据如图所示

    image-20210410213340431

    • 统计分析数据

      • 选中要分析的列→插入数据透视图勾选新工作表
        image-20210410214007397
      • 右侧勾选周六,拖到下面

      image-20210410214543092

      我们可以看到联网最多的软件是QQ.exe,然后是WinStore.APP.exe。

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

在开始前,先学习一下sysmon工具,贴上链接:使用轻量级工具Sysmon监视你的系统

  • 确定监控目标
    • 进程创建ProcessCreate
过滤事件选项:
UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine
- 进程创建时间FileCreatTime

```
过滤事件选项:
UtcTime, ProcessGuid, ProcessId, Image, TargetFilename, CreationUtcTime, PreviousCreationUtcTime
```

- 网络连接NetworkConnect

```
过滤事件选项:
UtcTime, ProcessGuid, ProcessId, Image, User, Protocol, Initiated, SourceIsIpv6, SourceIp, SourceHostname, SourcePort, SourcePortName, DestinationIsIpv6, DestinationIp, DestinationHostname, DestinationPort, DestinationPortName
```

- 远程线程创建CreateRemoteThread

```
过滤事件选项:
UtcTime, SourceProcessGuid, SourceProcessId, SourceImage, TargetProcessGuid, TargetProcessId, TargetImage, NewThreadId, StartAddress, StartModule, StartFunction
```
  • 编写配置文件
<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>
  • 解释一下:

    • onmatch选项只能设置为include或者excludeexclude相当于白名单,不用记录;include相当于黑名单
    • 第一行的sysmon版本号要跟使用的sysmon一致
    • Image condition根据自己使用的浏览器更改,如谷歌浏览器是“chrome.exe”,IE浏览器是“iexplore.exe”,火狐浏览器是“firefox.exe”,写在exclude中就是不记录由谷歌浏览器创建的进程
    • 进程创建时间类似,也是不创建浏览器创建进程的时间
    • 网络连接过滤掉了浏览器的网络连接、源IP为127.0.0.1(localhost)的网络连接和目的端口为137的连接服务,且查看目的端口为80(http)和443(https)的网络连接。
      • 137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态
      • 127.0.0.1表示回环地址
    • 远程线程创建记录了目标为explorer.exe、svchost.exe、winlogon.exe和powershell.exe 的远程线程
      • explorer.exe是Windows程序管理器或者文件资源管理器
      • svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称
      • winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出
      • powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用
  • 接下来,启动sysmon

    • 输入指令.Sysmon.exe -i sysmon1221.xml安装Sysmon,点击Agree

    image-20210410222349907

  • 在事件查看器里查看日志

    • 打开事件查看器->应用程序和服务日志->Microsoft->Windows->Sysmon->`Operational
      image-20210410222651863
    • 打开kali,Win运行后门文件5306_backdoor47.exe,回连到kali

    image-20210410224011996

    • 查看日志,查找20181221s.exe

      image-20210410224333094

    • kali执行shell获取win10的cmd,并查看事件查看器

    image-20210410224517180

    image-20210410224609602

2、分析恶意软件

1. 使用SysTracer

  • systracer可以记录下计算机某个时刻的状态。然后过一段时间后再次记录。通过比较两次记录中计算机的不同进行相应的分析。
  • 首先,创建未植入后门前的快照,保存为Snapshot #1

image-20210411104727855

  • 然后,远程扫描设置端口号1221,植入后门回连kali,创建快照,保存为Snapshot #2

image-20210411105545728

  • 然后,在kali中getshell并进行一系列操作后,创建快照,保存为Snapshot #3

image-20210411105901930

  • 对比快照Snapshot #1和快照Snapshot #2

image-20210411110918077

可以发现,由于远程扫描设置了端口号,SysTracer添加了系统注册表。

image-20210411112438322

image-20210411111828875

image-20210411112611142

通过查看Running ProcessesOpened HandlesOpened Ports,可以更直观地看到后门程序的执行,以及它添加了哪些句柄和连接的是哪个端口。

image-20210411113506001

这一串,就是后门程序添加的句柄。

image-20210411113532230

这里可以看到后门程序是通过``49165端口对192.168.242.128:1221`进行连接,这里可以看出后门采用的是反弹端口连接方式。

但是由于提示SysTracer not registered,导致我们无法再获取更加详细的信息,这个可能是因为我们未激活软件所以在试用阶段不能使用其全部功能。虽然详细信息无法探知,可至少能够得知哪些地方被更改了。

  • 对比快照Snapshot #2和快照Snapshot #3

image-20210411113200779

image-20210411113824626

由于我们已经执行了shell并且进行了一些操作(例如:查看当前文件夹内的文件夹等),所以我们可以很明显地发现注册表发生了改变。

此处变化的注册表有:

HRZR_PGYFRFFVBA //
{6Q809377-6NS0-444O-8957-N3773S02200R}VFfGenpre FIfGenpre.rkr
DhcpInterfaceOptions
LeaseObtained Time
LeaseTeminatesTime
T1
T2
Seed

image-20210411114233427

image-20210411114348894

由于我们在kali中执行了shell,并且执行了dir指令查看文件夹内容,相对应的这里会执行cmd.exe和conhost.exe

image-20210411114505446

同时,系统删除了一系列的dll,添加了相应的句柄。

image-20210411114616923

2. 使用wireshark进行抓包分析

  • 我们在回连开始前捕包,获取shell后结束捕包,并把过滤规则设置为ip.addr == 192.168.242.1 and ip.addr== 192.168.242.128

image-20210411120050574

可以发现,首先是两台机器进行了TCP协议的三次握手,发送了大量的ACK包。

说明该后门程序采用反弹式连接;建立连接后,双方会不断传一大堆ACK包,有时还伴有PSH+ACK包(进行数据传输)。

实验后回答问题

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

  • 创建计划任务:使用schtasks,每隔一段时间对主机联网状态的记录,分析是否有可疑程序
  • 监控系统:使用sysmon编写配置文件,在事件查看器中的日志查看有无异常事件
  • 监控流量:使用wireshark抓包进行数据流量分析
  • 监控进程:使用Process Explorer对进程进行监控
  • 监控端口:使用nmap查看是否有异常端口开放

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

  • 查看程序进程号和开放的端口号。

  • 使用PEiD进行外壳检查。

  • 使用systracer分析,查看其对注册表、dll文件和进程的修改。

  • 使用wireshark进行抓包分析,查看异常流量。

  • 使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。

实验体会

上次实验是教我们怎样入侵计算机,本次实验是教我们怎样查看分析计算机是否被入侵。本次实验略有难度,很多软件都是以前没有用国的,对于注册表之类的系统文件也极少接触,不得不通过查看学长学姐的博客,查阅其他资料,才勉强可以分析。对于现实社会的我们来说,检测入侵比入侵更加有意义和实用性。因为入侵是违法的,但是检测入侵是我们都可以做的。通过自己动手实现,对恶意代码有了更加深入的理解,意义非凡。

原文地址:https://www.cnblogs.com/MisakaYuii-Z/p/14643636.html