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

  • 相关阅读:
    我的Java学习路线图
    请求重定向和请求转发的区别
    PHP代码审计学习-php安全基础
    无密码正向直连内网linux目标机复现
    Windows API 学习
    Http请求走私
    免杀手法-tcp套字节传递shellcode学习
    自启动模块构造-计划任务
    自启动模块构造-快速启动目录
    进程注入免杀学习
  • 原文地址:https://www.cnblogs.com/zero-legend/p/14645230.html
Copyright © 2020-2023  润新知