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

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

前导知识

Schtasks

  • 安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。

  • 创建新的计划任务。

sysmon

  • sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。

PEiD

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

PE Explorer

  • PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。

实践目标

  • 监控你自己系统的运行状态,看有没有可疑的程序在运行。
  • 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令sysinternals,systracer套件。
  • 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。

实践内容概述

  • 系统运行监控

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

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

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

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

实验步骤

系统运行监控

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

  1. 使用命令
    schtasks /create /TN netstat1207 /sc MINUTE /MO 5 /TR "cmd /c netstat -bn c: etstatlog.txt"
    命令创建计划任务netstat1207
    • TN 是TaskName(任务名称)的缩写,我们创建的计划任务名是netstat1207;
    • sc 表示计时方式,我们以分钟计时填MINUTE;
    • TR = Task Run,要运行的指令是 netstat -bn
      • b表示显示可执行文件名;
      • n表示以数字来显示IP和端口;
    • > 表示输出重定向,将输出存放在c: etstatlog.txt文件中

image

  1. 创建一个 netstat1207.bat 脚本文件,使用管理员权限将其放入C盘下并写入以下内容

    date /t >c:
    etstat1207.txt    
    time /t >c:
    etstat1207.txt    
    netstat -bn >c:
    etstat1207.txt
    
    • 可先创建txt文本文件,使用记事本写入后通过修改文件名来修改文件格式

    • 若无法更改文件扩展名,可点击上方的查看,勾选文件扩展名:

image

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

image

  1. 双击这个任务,点击操作编辑,将程序或脚本改为我们创建的netstat1207.bat批处理文件,确定即可。

    • 常规选项卡中,一定要勾选使用最高权限运行,否则在C盘 netstat1207.bat 同目录下不会出现netstat1207.txt这个文件,还可能导致文件不能自主更新或者记录里出现权限问题
    • 操作选项卡中,在添加参数(可选)一栏一定要将原有参数清空
    • 条件选项卡中,电源选项中默认操作为只有在计算机使用交流电源时才启动此任务,使用电池电源时就会停止任务。如果没有修改默认操作,任务无论如何都无法执行可能只是因为拔掉了电源(为了我们统计足够多的数据,最好把这个取消掉)

image
image

  1. 在任务计划程序中选中netstat1207.bat将其状态设置为运行,此时在C盘netstat1207.bat同目录下出现一个netstat1207.txt文本文件,运行一段时间后,打开该文本文件就会看到每隔一段时间被传输到这里的联网数据

image

  1. 将netstat5216.txt已经记录的数据导入wps表格中去

    • 新建一张xlxs空白表,在编辑栏中选中数据,在靠右的位置找到`导入数据``
    • 第一步:选择数据源点击C盘目录下的netstat1207.txt
    • 依次选择其他编码其他分隔符号,分隔符号除了其他全部勾选,生成数据表

image

image

  • 点击上方菜单栏中的插入,选择数据透视图
    • 选中我们需要分析的协议单元格,放在新工作表中
    • 在新的工作表中,点击右侧的字段列表,全选后去除图中的TCP字段(因为此处我们关注的是联网exe,而不是连接情况),然后点击确定,并将它拖放到下面的,就生成了我们想要的透视图。
    • 由统计数据可知,联网最多的程序是WPSWPS.exe,排名第二的有很多程序,分别是是edge浏览器msedge.exe、微信WeChat.exeSearchApp.exe(这是微软的进程,有关搜索的)、以及wpscloudsvr.exe(这是金山WPS办公软件云服务进程)。虽然并未检测到陌生的有危害性的exe软件,但还是要时常关注一下这些自启动程序,会很大程度避免入侵。

image

任务二:使用sysmon工具监控系统(安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。)

  1. 下载老师给的安装包并解压sysinternals

  2. 可选择的事件过滤器有:可选择的事件过滤器

    • ProcessCreate 进程创建

    • FileCreateTime 进程创建时间

    • NetworkConnect 网络链接

    • ProcessTermina 进程结束

    • DriverLoad 驱动加载

    • ImageLoad 镜像加载

    • CreateRemoteTh 远程线程创建

    • RawAccessRead 驱动器读取

    • ProcessAccess 进程访问

    • FileCreate 文件创建

    • RegistryEvent 注册表事件

    • FileCreateStre 文件流创建

  3. 确定要监控的目标:在这里我选择进程创建进程创建时间网络连接远程线程创建

    • 过滤器事件的选项:

      • 进程创建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
        
  4. 在sysmon所在目录下创建配置文件sysmon1207.xml(可以先创建txt文件,之后再转换格式)

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

    <ProcessCreate onmatch="include">
      <ParentImage condition="end with">cmd.exe</ParentImage>
    </ProcessCreate>

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">msedge.exe</Image>
    </FileCreateTime>

    <NetworkConnect onmatch="exclude">
      <Image condition="end with">msedge.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>
  • onmatch选项只能设置为include或者excludeexclude相当于白名单,不用记录;include相当于黑名单。
  • 在代码中,第一行的sysmon版本号要跟使用的sysmon一致。查看版本号的方法:右键点击Sysmon64.exe,点击属性,在弹框中的编辑栏选中详细信息,即可查看版本号。(请注意:如果使用老师的Sysmon64.exe,其版本号是3.10,不是4.12)
  • Image condition需要根据自己使用的浏览器进行更改,edge浏览器是“msedge.exe”
  • 网络连接过滤掉了浏览器的网络连接、回环地址和目的端口为137的连接服务,并记录目的端口为80(http)443(https)的网络连接
    • 137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。
    • 127.0.0.1表示回环地址。
  • 远程建成创建记录了目标为explorer.exe、svchost.exe、QQBrowser.exe、winlogon.exe和powershell.exe 的远程线程。
    • explorer.exe是Windows程序管理器或者文件资源管理器
    • svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
    • winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出。
    • powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
  1. 打开cmd,进入到sysmon所在的文件夹中,输入sysmon.exe -i sysmon1207.xml

    • 若以用户身份运行上述命令,会提示如下信息:

image

  • 使用管理员身份运行上述指令,此时会弹出一个弹框,选择agree。

image

image

  1. 右键Windows标志,找到事件查看器,在应用程序和服务日志MicrosoftWindowsSysmonOperational可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别、详细信息等等

image

  • 拖拽滚条,在下方找到我们的sysmon20181207.xml

image

  1. 分析日志,我分析的是自己生成的后门文件

    • 按照实验三的步骤,启动回连到kali,可以查看到这条日志,如图所示:

image

image

  • 在16:12:47时我通过Linux获取了ipconfig,在事件查看器中看到了日志,调用了ipconfig.exe

image

任务三:恶意软件分析

(一)静态分析
  • 文件扫描(VirusTotal、VirusScan工具等)
  • 文件格式识别(peid、file、FileAnalyzer工具等)
  • 字符串提取(Strings工具等)
  • 反汇编(GDB、IDAPro、VC工具等)
  • 反编译(REC、DCC、JAD工具等)
  • 逻辑结构分析(Ollydbg、IDAPro工具等)
  • 加壳脱壳(UPX、VMUnPacker工具等)
  1. 使用VirusTotal分析恶意软件

    • 把生成的恶意代码放在VirusTotal进行分析,情况如下:

      34/59的检出率还是很高的

image

  • 点击detail可以查看细节,可以看到这个文件的三个算法的摘要值MD5、SHA1、SHA3、文件类型、文件大小,以及TRiD文件类型识别结果(注:TRiD通过读取文件头,根据特征码进行文件类型匹配)、算法库支持等信息。

image

  • 检测实验三种upx文件,能够在detail中查看到upx的类型。

image

  1. 使用PEiD分析恶意软件

    • 首先扫描未经过其他操作的后门20181207_backdoor.exe,结果是什么都没找到[调试]

image

  • 再扫描加密壳的后门judy_hyperion_upx.exe,结果也是什么都没找到 *

image

  • 接着扫描压缩壳的后门judy_upxed.exe,结果是UPX 0.89.6……,发现了我们的压缩壳并写出来版本号

image

  1. 反编译、反汇编(PE Explorer工具)

    • 在PE Exploer中打开后门程序backdoor.exe,显示出文件头信息,在图片中我们可以看到平台类型、节的数量、时间戳、符号表的位置、可选文件头、代码节的大小以及优先装载地址等信息。

image

  • 选择菜单栏中的view->import,可以查看调用的DLL文件

image

 可以看到更加详细的调用DLL文件的信息。

 - msvcrt.dll:微软在windows操作系统中提供的C语言运行库执行文件
 - kernel32.dll:属于内核级文件,它控制着系统的内存管理、数据的输入输出操作和中断处理,是必需的
 - advapi32.dll:一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关,会受到病毒的侵扰及篡改,导致系统文件丢失、损坏
 - wsock32.dll:Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序,是一个对系统很关键或很可疑的文件。
 - ws2_32.dll:Windows Sockets应用程序接口。一些病毒会在杀毒软件目录中建立伪"ws2_32.dll"的文件或文件夹,在杀毒软件看来这是程序运行需要的文件而调用,这个所谓的“文件”又不具备系统"ws2_32.dll"文件的功能,所以杀毒软件等就无法运行了而提示:应用程序正常初始化失败。
  • 菜单栏选中view->resources,可以查看到与VirusTotal和PEiD中一样的版本信息

image

  • 这款软件的主要功能是实现反汇编,可以在菜单栏tools->disassembler,可以看到将该文件反汇编的结果

image

(二)动态分析
  • 快照比对(SysTracer、Filesnap、Regsnap工具等)

  • 抓包分析(WireShark工具等)

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

  • 沙盒(NormanSandbox、CWSandbox工具等)

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

  1. 使用systracer分析恶意软件

    • 下载systracer,安装并进行捕包分析systracer

    • 快照比对(SysTracer工具)

      • SysTracer是一个系统工具,可以帮助您找到应用于计算机中不同项目和区域的更改(可能是恶意软件导致的更改)为了发现这些更改,SysTracer执行系统扫描,记录有关文件和文件夹,注册表项,系统服务,驱动程序,当前活动的进程,已加载的库(DLL)和计划在系统启动时运行的应用程序的信息。

      • 点击snapshot,点击start,这个拍摄完成后会自动停止,stop表示终止而非结束,时间会根据我们电脑的实际情况而定,一般会有几秒钟的过程,我创建了五个进行对比,分别是:
        Snapshot #1:不进行任何操作;
        Snapshot #2:运行后门程序并成功反弹连接;
        Snapshot #3:获取shell并获取被攻击机文件详情;
        Snapshot #4:使用msf命令ipconfig;
        Snapshot #5:使用msf命令getuid。

image

  • 对比快照1和快照2
    在snapshots那一页修改我们需要对比的快照,点击compare,在view mode中选择Only differences方便查看,在Files选项中查看到的结果如下:

image

   也可以在`application`中的`opened ports`中我们能看到后门20181207_backdoor.exe连接的本地地址和目标地址以及端口号:

image

 - 在`opened handles`中,可以看见增加了一些文件,也删除了一些文件:

image

 - 在`loaded dll`中,启动后门程序后增加和删除的dll文件:

image

 - 在`running processes`中,点击`1211upx.exe`显示为`SysTracer no registered`

image

  • 对比快照2和快照3

    • opened ports中我们能看到主机与虚拟机vm间的交互;

image

 - 在`loaded dll`中,启动后门程序后增加和删除的dll文件:(这里显示的没有删除的文件,全为增加的)

image

 - 在`running processes`中,可以看见多出来两个`cmd.exe`和`conhost.exe`(但是均不可查看)

image

   - Linux调用shell之后,修改了注册表中本机键值的conhost.exe,并删增了用户键值下的读者修订信息:
   - conhost全称是console host process,即命令行程序的宿主进程,不是病毒木马。
  • 对比快照3和快照4

    可以看到一系列文件的增删情况:

image

  • 对比快照4和快照5

    可以看到一系列文件的增删情况:

image

  1. 使用wireshark对流量进行抓包分析

    注意:接口应该选择VMnet8这个,否则抓不到Kali和主机之间的包

    • win10执行后门程序judy_upxed.exe,进行回连,输入过滤条件ip.addr == 192.168.141.130(虚拟机的ip地址),可以看到Wireshark上捕获到大量的TCP传输,输入其他命令,Kali会不断给Windows传一大堆ACK包,有时还伴有PSH+ACK包。(PSH就表示有 DATA数据传输)
      开始抓包后,Kali中启动监听,然后Windows端回连,可以看到TCP三次握手建立连接的过程,目的端口是Kali中设置的监听端口1207,还可以看到目的和源IP地址:

image

实验后回答问题

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

  • 使用Windows计划任务schtasks:定期查看网络连接情况,包括IP和端口,并进行统计分析,确认IP所属和连接发起方详情。
  • 使用sysmon工具:配置好想要查看的选项,比如网络连接、注册表信息等,通过所生成的日志进行查看分析。
  • 使用Process Explorer工具,监视进程执行情况。
  • 使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
  • 使用PEiD、PE Exploer工具:查看一个程序是否加壳,并进行反汇编、反编译,查看并分析该程序是否有违规操作。
  • 使用sysTracer工具:进行快照对比,发现恶意代码对注册表、exe可执行文件的操作。
  • 使用Wireshark工具:捕获数据包,分析数据流情况。

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

  • 使用systracer工具分析恶意软件,查看其对注册表和文件的修改。

  • 使用Wireshark进行抓包分析,监视其与主机进行的通信过程。

  • 使用Fiddler进行抓包分析,监视其与主机进行的通信过程。

  • 使用PEiD查看程序是否加壳,加的什么壳

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

实验总结

这次实验我是站在巨人们的肩膀上完成的,少走了很多的弯路。从前生成的后门程序原以为没有用了,就都删掉了,万万没想到后面的实验还会用到。虽然但是,令我印象最深刻的还是利用systracer分析的环节,有一些摸不着头绪,希望可以和老师同学们多多交流。

原文地址:https://www.cnblogs.com/zero-legend/p/14645230.html