2019-2020-2 网络对抗技术 20175213吕正宏 Exp4 恶意代码分析

一、实验目标与内容

实验目标:

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

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

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

实验内容:

系统运行监控

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

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

分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣),该后门软件的

  • 读取、添加、删除了哪些注册表项。

  • 读取、添加、删除了哪些文件。

  • 连接了哪些外部IP,传输了什么数据。

二、实验问题回答:

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

  • 可以使用sysmon定期查看日志,监控是否有不知名进程创建和注册表项目的修改。

  • 可以使用windows计划任务统计是否有未知程序多次链接ip。

  • 使用schtasks对机器进行监听,在机器运行一段时间后整理监听记录。

  • 也可使用Systracer拍摄几个不同时间的快照,对比不同时间的快照判断是否有可疑的增删注册表行为。

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

  • 通过systracer工具进行相关的分析,查看它对注册表和文件的修改。

  • 还可以使用Process Explorer工具监控相关进程和线程的活动,以及通过进程找出可疑文件的位置。

三、实验步骤

使用schtasks指令监控系统

  1. 使用命令schtasks /create /TN netstat5213 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt" 创建计划任务nestat5213

在上条命令中的参数分别为:

  • TN是TaskName的缩写,我们创建的计划任务名是netstat5213

  • sc表示计时方式,我们以分钟计时填MINUTE

  • TR是Task Run,要运行的指令是netstat

  • bnb表示显示可执行文件名,n表示以数字来显示IP和端口

  • >表示输出重定向,将输出存放在c:\netstatlog.txt文件中

  1. 在C盘中创建一个名为netstat5213.bat的脚本文件,写入以下内容:
date /t >> c:\netstat5213.txt
time /t >> c:\netstat5213.txt
netstat -bn >> c:\netstat5213.txt

  1. 打开计算机管理 > 任务计划程序,可以看到新创建的这个任务:

  1. 双击此任务,点击操作->编辑,将程序或脚本改为我们创建的netstat5213.bat文件,点击确定。

  1. 常规栏勾选不管用户是否登录都要运行使用最高权限运行

  1. 接下来等待脚本执行一段时间。在等待一定的时间后,可以选择终止计划任务,然后对收集到的数据进行统计。可以在C盘中的netstat5308.txt文件中查看到这段时间内的联网记录。

  1. 参考学姐的博客将存储的数据导入到Excel中并进行整理,整理好的数据图如下:

  1. 从图上分析,联网最多的基本上就是我日常的应用软件,谷歌浏览器、虚拟机、WPS之类,比较奇怪的就是“YourPhone.exe”,我也不知道这是个啥东西。但总体来说,没有什么可疑的程序。

使用sysmon工具监控系统

  1. 下载下载Sysinternals套件,下载链接,Sysmon是该套件中的一个工具,可以监控几乎所有的重要操作。

  2. 参考资料可得过滤器事件的选项:

  • 进程创建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
  1. 解压SysinternalsSuite.zip,sysmon就在解压好的文件夹中(注意不要直接解压到当前文件夹,要先新建一个文件夹再往里解压)。

  2. 在Sysmon所在的目录下创建相应的配置文件sysmon20175213.xml了,配置文件如下:

<Sysmon schemaversion="10.42">
  <!-- 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>

    <ProcessCreate onmatch="include">
      <ParentImage condition="end with">cmd.exe</ParentImage>
    </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">firefox.exe</TargetImage>
      <TargetImage condition="end with">winlogon.exe</TargetImage>
      <SourceImage condition="end with">powershell.exe</SourceImage>
    </CreateRemoteThread>
  </EventFiltering>
</Sysmon>
  1. 各参数说明:
  • ProcessCreate表示进程创建

  • NetworlConnect是网络连接

  • CreateRemote是远程线程创建

  • FileCreate Time是进程创建时间。

  • 在onmatch后面跟的参数include和exclude分别表示“免检”和“必检”名单。免检名单中在统计时忽略掉,必检名单在检测时需要进行匹配。

  1. 打开cmd,进入sysmon所在的文件夹,输入Sysmon.exe -i sysmon20175213.xml

此时,显示需要以管理员身份进入,所以要重新以管理员身份再次输入命令。

  1. 打开计算机管理,查看事件查看器,在应用程序和服务日志/Microsoft/Windows/Sysmon/Operational中,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别以及详细信息。

  1. 在这里我们看到时间线最早的一条日志就是找到我们创建的sysmon20175213.xml配置文件

恶意代码分析

分析种类

  • 静态分析

    • 文件扫描(VirusTotal、VirusScan工具等)

    • 文件格式识别(peid、file、FileAnalyzer工具等)

    • 字符串提取(Strings工具等)

    • 反汇编(GDB、IDAPro、VC工具等)

    • 反编译(REC、DCC、JAD工具等)

    • 逻辑结构分析(Ollydbg、IDAPro工具等)

    • 加壳脱壳(UPX、VMUnPacker工具等)

  • 动态分析

    • 快照比对(SysTracer、Filesnap、Regsnap工具等)

    • 抓包分析(WireShark工具等)

    • 行为监控(Filemon、Regmon、ProcessExplorer工具等)

    • 沙盒(NormanSandbox、CWSandbox工具等)

    • 动态跟踪调试(Ollydbg、IDAPro工具等)

使用实验三生成的后门程序回连kali虚拟机

  1. 先进行wireshark的捕包操作,先打开wireshark,捕包开始后进行回连。

  1. 回连后,打开Wireshark查看捕包情况。

这里我们可以看到,后门回连过程中建立了完整的三次握手,且由win10(192.168.111.1)主动连接kali(192.168.111.130)。

  1. 接下来使用dir指令查看当前目录,发现传输了大量的数据,传输的数据包括Windows向Kali发出TCP同步请求包SYN,Kali给Windows发出的SYN同步请求包和确认包ACK,Kali给Windows传的ACK包、PSH+ACK包等等(PSH表示有DATA数据传输)

  1. 执行getuid指令进行提权操作记录如下:

  1. 执行webcam_snap 指令进行图片抓取时出现了很多条记录,具体数目的多少应该和图片的内容相关,通过PSH+ACK包(主要是PSH)可以判断有DATA数据在传输。:

  1. 执行exit 指令,发送了[PSH, ACK]包:

使用Systracer进行分析

  1. 首先下载并安装Systracer,下载链接

  1. 点击右侧的take snapshot,存储快照。
  • 快照一(Snapshot #1):未移植后门程序

  • 快照二(Snapshot #2):植入后门程序

  • 快照三(Snapshot #3):运行后门程序并在kali中实现回连

  • 快照四(Snapshot #4):执行dir命令

  • 快照五(Snapshot #5):执行exit命令

  1. 通过右下角的compare键或者View Differences Lists 比对各快照,可以选择Only Difference 对比不同的项
  • 对比快照一和快照二:

    • 增加了后门程序20175213_backdoor.exe,同时还有增删了许多的文件。

  • 对比快照二和快照三:

    • 看到后门启动后的快照三中显示正在运行的程序增加了我们的后门程序。同时我们还可以看到启动后门程序后增添了非常多的文件,主要是dll文件

    • 由于我使用的是最新的2.6版本,相较2.10版本,发现无法明显的查看到连接的ip地址与端口,但是还是可以清晰的看出对文件和注册表的增删。

  • 对比快照三和快照四:

    • 对根键中的内容进行修改,对注册表中的配置信息进行了修改。

  • 对比快照四和快照五:

    • 可以发现后门程序的的删除记录以及相关联的注册表项和启动项都被删除。

使用PEiD分析恶意软件(静态分析)

  1. 查看没有加壳的后门文件

  1. 查看加了压缩壳的后门文件

  1. 查看经过加密壳的后门程序

从图中可以看出,加了压缩壳的后门文件是可以检测出来的,但加了加密壳的后门文件是无法检测出来的。

使用virustotal扫描恶意软件(静态分析)

  1. 使用VirusTotal分析恶意代码基本信息如下:

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

  1. 也就是说VirusTotal除了使用杀软检测,还使用了各类静态分析工具进行了检测。

四、心得体会

本次实验相比较与前几次实验,从攻击者转换为防守人,开始分析并监控恶意代码。身份的转变让我对这门课程也有了更深入的理解,网络攻防不仅要懂得攻击,防守、分析也是很重要的。在这次实验中也发现了前面实验没有发现的东西,比如VirusTotal,不仅能杀软检测,还能用作静态分析。希望在以后的实验中能收获更多。