20165214 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析 Week6

《网络对抗技术》Exp3 免杀原理与实践 Week5

一、实验目标与内容

  • 1.实践目标

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

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

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

  • 2.实践内容(3.5分)

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

实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。

- 2.2恶意软件分析(1.5分)

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

    -(3)读取、添加、删除了哪些注册表项

    -(4)读取、添加、删除了哪些文件

    -(5)连接了哪些外部IP,传输了什么数据(抓包分析)

二、实验步骤

步骤一:系统运行监控

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

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

    • schtasks指令的参数:

      • TN:任务名,我起为schtasks5214
      • sc:计时方式,这里用MINUTE表示以分钟为单位
      • bn:b是显示可执行文件的名字,n是用数字表示IP和端口
      • TR:要运行的指令、
      • >:输出重定向,也就是要将输出放在哪个文件,本次为c:\netstatlog.txt
    • 根据上面参数构造指令为schtasks /create /TN schtasks5214 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt"。打开cmd,在cmd输入这句指令并回车。

  • 2、打开C盘,新建schtasks5214.bat,输入date /t >> c:\netstat5318.txt time /t >> c:\netstat5318.txt netstat -bn >> c:\netstat5318.txt,保存并关闭。(由于在C盘权限不够不能直接创建,所以只能通过先在其他地方输入然后再复制到C盘目录下。)

  • 3、打开任务计划,查看我们在第一步创建的任务计划。

  • 4、双击打开,在操作栏下点击编辑,将程序或脚本选择为第二步中所新建的bat脚本

  • 5、考虑到开始实验的时间已经接近11点了,即将断点,于是再在条件栏下,将只有在计算机使用交流电源时才启动此任务这一项取消

  • 6、接着,在常规栏下选择使用最高权限运行,点击确定保存。

  • 7、然后就是等待。。(4小时过去了)。期间我尝试了断网,发现断网不会造成影响,网一连上就又继续获取相关数据了。打开netstatlog.txt进行查看:

  • 8、使用excel进行数据分析。打开WPS,导入netstatlog.txt:

  • 9、使用B列的数据生成数据透视图,统计如下:

使用最多的是火狐浏览器,其次是wps。看着这些数据,再回想昨天做实验的时候我所使用的app,能对得上。

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

  • 1、下载老师所给的资源SysinternalsSuite.zip,解压。sysmon就在解压好的文件夹中。

  • 2、在使用sysmon之前,先在这篇文章中进行粗略的浏览,掌握大概的原理与方法。

  • 3、查看sysmon的版本。右键Sysmon.exe,在属性->详细信息中进行查看

  • 4、在sysmon所在目录下创建sysmon5214.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">chrome.exe</Image> 
      <Image condition="end with">firefox.exe</Image>
      <Image condition="end with">wps.exe</Image>
    </ProcessCreate>

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

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">chrome.exe</Image>
      <Image condition="end with">firefox.exe</Image>
     <Image condition="end with">wps.exe</Image>
    </FileCreateTime>
    
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">chrome.exe</Image>
      <Image condition="end with">firefox.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>
  • 针对常用的Firefox和wps我把他们放在iniclude里。在上面的代码中,第一行的sysmon版本号要跟使用的sysmon对上。ProcessCreate表示进程创建,NetworlConnect是网络连接,CreateRemote是远程线程创建,FileCreate Time是进程创建时间。在onmatch后面跟的参数include和exclude分别表示“免检”和“必检”名单。

  • 5、打开cmd,进入到sysmon所在的文件夹中,输入sysmon.exe -i sysmon5214.xml

    • 不知道为什么,这里提示版本不对,提示版本应该是3.10,然而我上面在查看版本号的时候是4.12。先改成3.10,再次运行,成功运行:
  • 6、打开事件查看器时间查看器(本地)->应用程序和服务日志->Microsoft->Windows->Sysmon->Operational,双击Operational,可以查看按照sysmon5214.xml中的配置信息所记录的一些信息。选择其中任一条,可以看见进程号、运行的软件名等信息。

  • 7、接下来使用实验3中的恶意程序(更换了ip地址,重新生成)进行回连,进行日志分析

  • 8、打开事件查看器,根据运行时间可以很容易地找到刚刚运行的后门的相关信息。

  • 9、回到kali,使用webcam_snap进行拍照。回到事件查看器,可以看到出现了两条这样的信息:


    SearchFilterHost.exe是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,让用户能够更好的搜索出电脑中的任意资料。它会在计算机空闲时自动扫描索引位置的文件名、属性信息和给定类别的文件内容,这些索引位置默认包括桌面、收藏夹、开始菜单、系统目录。

  • 10、再使用getuid指令,回到事件查看器,没有发现什么。

  • 11、是不是使用不同的指令,日志是不同的呢?接下来尝试一下简单的dir命令,进行查看,发现没有出现什么提示。这是怎么回事呢?getuid和dir指令在network中都没显示。我没有找到原因。
    (不过我倒是发现了wps一直在后台默默在用着我的网络。。。当我没上网的时候,network类别几乎都是wps.exe和wpscenter.exe,看来以后不用的时候还是将他们彻底退出吧)

步骤二:恶意软件分析

分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件(3)读取、添加、删除了哪些注册表项(4)读取、添加、删除了哪些文件(5)连接了哪些外部IP,传输了什么数据(抓包分析)。在这一步中,由于wps.exe关于network实在很烦人,我重新修改了sysmon的配置。

  • 1、使用wireshark进行抓包分析。

    • 打开wireshark,选择wlan模式。开始抓包后,本机启动恶意程序回连kali虚拟机,回连成功后停止捕包,输入筛选条件ip.addr == 172.30.4.217进行查看

    • 可以看到一开始建立了三次握手连接。

    • 再次开始抓包,kali调用屏幕拍照webcam_snap和获取uidgetuid,然后停止捕包,进行查看

    • 使用时getuid出现了4条记录:

    • 使用时webcam_snap出现了很多条记录,我觉得应该是图片的空间比较大导致的:

  • 2、使用Systracer分析(为了能够看到恶意软件连接时的变化,每尝试新的分析软件时,都先关闭连接再重新启动链接)

    • 安装并运行systracer。systracer就好像一个“照相机”。他可以记录下计算机某个时刻的状态。然后过一段时间后再次“拍照”记录。通过比较两张“照片”中计算机的不同进行相应的分析。一开始我是在本机上做快照的,后来发现本机东西太多了,一次快照要花的时间太长。所以我决定用win7虚拟机来做。

    • 未植入恶意软件之前,先进行一次记录;(记录1)

    • 植入恶意软件之后进行一次记录;(记录2)

    • 恶意软件回连之后进行记录;(记录3)

    • 在kali终端进行相应操作之后进行记录。这里选的是webcam_snap(记录4)和pwd(记录5)。

    • 选中记录1和记录2,点击右下角的view different list,再点击view,可以看到增加了很多不知道是什么的文件和键值:

    • 选中记录2和记录3进行比较:

      • 运行的进程多了后门程序

      • 植入了一些键值

      • 可以看到连接的目的ip以及端口号

    • 选中记录3和记录4进行比较(这里显示systracer没有注册):

      • 再查看file栏下:
    • 选中记录4和记录5进行比较:

  • 3、使用PEID检查是否加壳(PEID下载很简单,直接百度就可以知道找到)。

    • 不加壳

    • 压缩壳

    • 加密壳(这里不小心删除掉了加密壳使用的软件hyperion,参考了这个回答找回。。有惊无险)

    • 压缩壳后再加密壳

    • 可以看到,只有有加密壳竟然都不能识别出来。。而我们之前实验的时候也是只要涉及到加密壳就不能回连。这两者是否有关联?

  • 4、使用VirusTotal进行检查,结果如下:

    • 可以看到该恶意代码的相关信息,MD5、SHA-1、文件类型、文件大小、加壳方式等信息。

三、遇到的问题

1、任务启动失败,在任务计划界面一直显示0x01,查询了一下0x01在windows表示运行失败。

解决方法:在同学的帮助下,我发现是因为在步骤一的第4小步的操作界面我没有去掉参数,导致了这一的情况。把参数去掉就解决了问题。

2、启动sysmon失败,提示如下:

解决方法:读提示信息后发现,运行Sysmon.exe需要管理员权限。于是使用管理身份打开cmd,重新输入,解决了问题。

3、想要把systracer转移到win7虚拟机中,插U盘无法识别

解决方法:关闭虚拟机,在USB控制器选项勾选全部,再打开虚拟机,插入U盘,解决问题

四、基础问题问答

  • 1、如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
    答:可以使用schtasks定时监听,一段时间后统计数据;可以使用Sysmon,通过编写配置文件,监视相应的进程情况;可以使用Systracer进行快照比较。

  • 2、如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
    答:可以使用VirusTotal进行检查;可以使用Systracer进行分析,查看其对注册表、文件的修改;可以使用wireshark进行捕包分析,查看它连接到了哪些ip、与外部进行了哪些通信。

五、心得体会

本次实验难度不是很大,主要是一些相关软件的应用以及对相关数据的分析。我觉得比较费时间的一点是,遇到一堆数据不知从何下手进行分析,很多系统的应用都不懂是干嘛的,只能一个一个百度查,逐个排除嫌疑。不过这样下来以后我对系统的一些进程有了更好的了解,不会把他们和其他的进程混在一起分不清了。
通过对恶意代码的分析,也使得我对恶意代码的行为、特征有了更好的了解。
不过在网上查找相关信息的时候,甚至还有可以绕过分析的方法!令人惊讶。然而我们现在连做完全免杀都有点费力。看来学习的道路还很长。
感觉自己每次实验都要很久,因为老是喜欢进行各种各样的尝试。。问题是那些尝试竟然还都失败了,浪费了大把的时间。。

posted @ 2019-04-07 20:19  刘璐瑾  阅读(224)  评论(0编辑  收藏  举报