zoukankan      html  css  js  c++  java
  • 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分析的环节,有一些摸不着头绪,希望可以和老师同学们多多交流。

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/zero-legend/p/14645230.html
Copyright © 2011-2022 走看看