Exp4 恶意代码分析

发布时间 2023-04-06 20:32:08作者: 不加糖的酒
  • 一、实践原理说明

    • 1.实践目标

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

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

      • 恶意代码
        • 使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
        • 指令集合:二进制执行文件,脚本语言代码,宏代码,寄生在文件、启动扇区的指令流。
        • 恶意代码目的:技术炫耀/恶作剧,远程控制,窃取私密信息,盗用资源,拒绝服务/破坏......
      • 恶意代码类型
        • 计算机病毒,蠕虫,恶意移动代码,后门,特洛伊木马,僵尸程序,Rootkit等…
        • 计算机病毒是最早出现的恶意代码,媒体/工业界的概念混淆,经常以计算机病毒(Computer Virus)等价于恶意代码
      • 系统监控
        • 把系统看做一个黑盒子
          • 从网络进出口,监控对外数据收发
        • 把系统看做白盒子
          • 谁(进程)
          • 读写了什么(文件)
          • 收发了什么(网络)
        • 隐通道
          • 内存发送Wifi信号
          • DNS包发送数据
      • 分析环境
        • 静态分析:
          • 恶意代码扫描、文件格式识别、字符串提取、二进制结构分析、反汇编反编译、代码结构与逻辑分析、加壳识别和代码脱壳
        • 动态分析:
          • 快照比对、动态行为监控、网络监控、沙盒、动态跟踪测试
  • 二、实践过程记录

    • 任务一:系统运行监控——使用schtasks指令监控系统

      • Step1:在C盘根目录下先建立一个 netstatlog.dat 文件。
        • 我们先在桌面创建 netstatlog.txt 文件,输入以下内容:
        • 				  date /t >> c:\netstat20201223.txt
          				  time /t >> c:\netstat20201223.txt
          				  netstat -bn >> c:\netstat20201223.txt
          
        • 然后将文件后缀改为 .dat ,使用管理员权限将文件从桌面复制到C盘当中
          • 1.打开桌面上的“这台电脑”(只要开启文件资源管理器都可以),在查看选项卡勾选“文件扩展名”选项显示文件后缀。
          • 2.右键点击要修改后缀名的文件,选择“重命名”。
          • 3.选中点(.)后面的文本,修改为新的后缀名
      • Step2:在cmd下输入  schtasks /create /TN netstat1223 /sc MINUTE /MO 2 /TR "c:\netstat1223.bat"  命令创建任务计划 netstat1223
        • 由于之前文件名出错了,现在重新建一个
      • **Step3:打开任务计划程序 **
        • 双击netstat1223任务计划,点击操作—>编辑,将 程序或脚本 改为之前创建的 netstat.bat 批处理文件——>点击  确定
        • 注意:这里还需要设置以最高权限运行。点击  常规  ——>选中 以最高权限运行 ,如下图所示:
      • Step3:在任务中还可以设置其他的东西
        • 在"条件"选项卡中可以看到,电源选项中默认操作为“只有在计算机使用交流电源时才启动此任务” ,那么使用电池电源时就会停止任务。为了我们统计足够多的数据,这个选项取消掉。
        • 在  设置  中还可以选择任务运行时间,我们设置为3天。
      • Step4:一段时间之后,我们就可以在 netstat1223.txt 文件中看到我们电脑的联网记录了。
      • Step5:在Excel表格中分析记录的数据
        • 一段时间之后,我们停止执行这个任务,来分析一下数据。
        • 创建新表格,点击数据导入数据,选择直接打开数据文件,并在选择数据源中选择文本文件。
        • 按照步骤,选择其他编码分隔符号,并如下图勾选。
        • 选择B列,点击上方菜单栏中的插入,选择数据透视图
          • image.png
        • 在新工作表中,点击数据透视图,在跳出的右侧边栏的字段列表中,筛选出我们需要的字段进行分析,并将字段拖放到下方的中。
        • 以下是我得到的图表
        • 分析:今天(3月29日周三)我用的最多的APP是SearchAPP.exe,即Cortana运行的搜索栏的进程,用于搜索文件、启动应用程序、关闭计算机和做其他事情,是Windows的搜索功能。其次使用最多的是msedge.exe,这是是Microsoft Edge 浏览器的一部分。剩下使用较多的是WPS,用于生成数据透视图和进行一些其他的工作。此外,此图表还记录了我的微信使用活动和logseq(即我的笔记制作软件)的使用活动。
    • 任务二:系统运行监控——使用sysmon工具监控系统

      • sysmon是微软Sysinternals套件中的一个工具,它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
      • 可选择的事件过滤器有 ProcessCreate 进程创建、FileCreateTime 进程创建时间、NetworkConnect网络链接、ProcessTermina 进程结束、DriverLoad 驱动加载、ImageLoad 镜像加载、CreateRemoteTh 远程线程创建、RawAccessRead 驱动器读取、ProcessAccess进程访问、FileCreate 文件创建、RegistryEvent 注册表事件、FileCreateStre 文件流创建等。
      • 下载并解压SysinternalsSuite.zip,在SysinternalsSuite目录中创建配置文件sysmon20181314.xml,该配置文件中可以加入事件过滤器,具体的过滤事件选项如下

        • 进程创建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, Ta
          
      • Step1:
        • 下载并解压 SysinternalsSuite.zip ,在 SysinternalsSuite 目录中创建配置文件 sysmon20201223.xml

          ```
          					  <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 选项可以设置两种
            • exclude :相当于白名单,不用记录。
            • include 相当于黑名单。
          • sysmon 工具中可以选择一些事件过滤器,包括:
            • ProcessCreate :进程创建。
            • FileCreatTime :进程创建时间。这里排除(不记录)浏览器进程的创建时间。
            • NetworkConnect :网络连接。过滤掉(不记录)浏览器的网络连接,源IP地址为 127.0.0.1 、源端口为137的连接服务。包含(记录)目的端口为 80(http)443(https) 的网络连接。
              • 137端口 :提供局域网中ID或IP查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。
              • 127.0.0.1 :环回地址,表示本机。
            • CreateRemote :远程线程创建。记录的线程如下:
              • explorer.exe :Windows程序管理器或者文件资源管理器
              • svchost.exe :一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
              • winlogon.exeWindows NT  用户登陆程序,用于管理用户登录和退出。
              • powershell.exe :专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
      • Step2:启动sysmon(要以管理员的身份运行命令行)
        • 点开开始菜单,再点击所有应用(程序),在Windows系统,找到并右键单击,菜单中选择“以管理员身份运行”。
        • 输入命令 Sysmon64.exe -i sysmon20201223.xml ,安装sysmon,结果如下:
      • Step3:查看事件查看器中的日志记录
        • Win+R 输入 eventvwr.msc 打开事件查看器依次点击 应用程序和服务日志/Microsoft/Windows/Sysmon/Operational
          • 这就是Sysmon按照我们的配置文件要求记录的日志,包括:事件、事件ID、任务类别、详细信息等,双击一条记录,就可以看到了。
        • 运行我们在实验二中生成的后门程序 20201223_door.exe ,并启动回连到kali虚拟机中。我们可以在事件查看器中找到此条日志
        • 我在msf监听环境下,输入了 shell 指令,获得了Windows的 cmd
    • 任务三:恶意软件分析

    • (一)静态分析

    • 1.恶意代码扫描——使用 VirusTotal 分析恶意软件

      • Step1:把生成的文件放在VirusTotal里进行分析
      • Step2:可以查看文件的详细属性
        • 可以看出它的SHA-1、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。
        • 还可以看到此软件的头部、各个节的相关信息,以及引入的动态链接库
    • 2.文件格式识别——使用PEiD分析

      • 工具下载链接
      • PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名。
        • 扫描模式
        • 正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
        • 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;
        • 核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
        • 查看实验二中生成的后门文件
          • 这是未加壳的文件
          • 发现显示: yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)*
          • 上网查了资料以后,总结如下:
            • 用PEiD检测壳为: yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)*
            • 有两种情况:
            • 1)其他壳伪装成yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)
            • 2)没有加壳,作者加了花指令,伪装成yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h)
          • 此处应该是没有加壳的,也就是第二种情况。
        • 将原来的后门文件用 upx 20201223_backdoor.exe -o 20201223door_upx.exe 进行压缩,随后拖到桌面上检测:
          • 这是加了压缩壳的文件
    • 3.使用PE Explorer分析恶意软件

      • PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。
      • Step1:下载安装PE Explorer
      • Step2:打开我们上次实验的程序
        • 点击view ——>Headers Info,可以看到头部信息:
      • Step3:view ——>Data Directories , 查看程序静态数据目录
      • Step4: view ——>Section Headers , 查看节头信息
      • Step5:view——Import,查看看文件引用的dll库
      • 可见,在上次生成的后门程序中我们引用了 kernel32.dll 文件
      • kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
    • (二)动态分析

    • 1.快照对比——使用systracer工具

      • Step1:下载安装systracer工具
      • Step2:抓捕快照
        • 点击右侧的 take snapshot ,拍摄快照。点击start开始,不用点击stop,当拍摄完毕会自动停止。
        • 实验中我抓捕了五个快照如下:
        • Snapshot #1:未移植后门程序
        • Snapshot #2:运行后门程序并在kali中实现回连
        • Snapshot #3:在kali中使用 dir 指令
        • Snapshot #4:在kali中使用 screenshot 指令
        • Snapshot #5:在kali中执行getuid指令
        • 对比快照1和快照2
        • 选中要对比的两个快照,点击右下角compare,在view mode中选择only differences方便查看。
          • 点击 View Differences Lists ——>选中 Only differences ——>选中 Opened Ports
          • 点击application,在opened ports中能看到后门 20201223_backdoor.exe ,连接的本地地址和目标地址以及端口号
          • opened handles 中,增加了一些文件,也删除了一些文件,以及键值的变化
          • loaded dll中,查看启动后门程序后增加和删除的dll文件
          • running processes中,点击 20201223_backdoor.exe 显示为SysTracer no registered
        • 对比快照2和快照3
          • 对根键中的内容进行修改,对注册表中的配置信息进行了修改
          • 在opened ports中看到主机端口与虚拟机ip及相关端口间的交互
          • 点击 Register ,可以看到快照3对根键中的内容进行了修改,对注册表中的配置信息进行了修改
        • 对比快照3和快照4
          • 我们发现多出来了svchost程序
          • svchost.exe 是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
        • 对比快照4和快照5
          • 文件发生变化
    • 2.使用wireshark抓包分析恶意软件

      • 在kali中输入 dir ,发现wireshark又捕获到了许多PSH+ACK包,可以判断有数据在传输
  • 三、实验后回答问题

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

  • 使用schtasks指令监控系统
    • 建立一个脚本文件
    • 添加任务计划程序,隔一段时间就记录下想要知道的内容
    • 一段时间后进行分析
  • 使用sysmon工具监控系统
    • 配置好自己的xml文件
    • 设置好黑名单和白名单
    • 一段时间后查看记录日志
  • 使用PE Explorer分析恶意软件
    • 查看哪些文件修改了我们主机的那些信息
  • 使用systracer工具
    • 抓捕一些快照
    • 对比分析
  • 3.2 如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。

  • 1.可以进行静态分析:
    • 使用virustotal
      • 查看恶意软件的一些信息
    • 使用使用PEiD分析
      • 查看文件是否加壳
      • 进行脱壳
    • 使用PE Explorer分析恶意软件
  • 2.也可以进行动态分析:
    • 使用systracer工具
      • 抓捕一些快照
      • 查看系统中注册表信息、文件、应用的改变
    • 使用Wireshark工具
      • 进行抓包分析
      • 查看可疑通信
    • 使用ProcessExplorer工具
      • 动态监视应用程序
      • 查看哪些程序使用和改变了系统文件
  • 四、实验总结与体会

  • 本次实验的重点是借用软件工具,通过工具来具体分析恶意代码,通过对后门文件的多方面分析检测,查看是否主机中有可疑对象和可疑行为,这对平时主机的使用和保护都有着重大的实际作用。在本次实验中,我们通过静态分析和动态分析,通过恶意代码扫描、文件格式识别、字符串提取、二进制结构分析、反汇编反编译、快照比对、动态行为监控、动态跟踪测试等方法多方面了解了恶意代码的检测和监控,但在Wireshark软件的使用过程中,发现不管是用WLAN还是VMnet8模式捕捉数据包,都无法正确捕捉到内容,使用了同学和学长学姐的方法后仍不成功,这个问题将会继续尝试。