2019-2020-2 20175227张雪莹《网络对抗技术》 Exp4 恶意代码分析

目录

0. 基础知识

0.1 恶意代码的概念及分类

恶意代码类型 定义特征 典型实例
计算机病毒 通过感染文件(可执行文件、数据文件、电子邮件等)或磁盘引导扇区进行传播,一般需要在宿主程序被执行或人为交互才能运行 Brain,Concept,CIH
蠕虫 一般为不需要宿主的单独文件,通过网络传播,自动复制,通常无需人为交互便可感染传播 Morris,Code,Red
恶意移动代码 从远程主机下载到本地执行的轻量级恶意代码,不需要或仅需要极少的人为干预 SandyWorm
后门 绕过正常的安全控制机制,从而为攻击者提供访问途径 Netcat,BQ,冰河
木马 伪装成有用软件,隐藏其恶意目标,欺骗用户安装执行 Setiri
僵尸程序 使用一对多的命令与控制机制组成僵尸网络 Sdbot,Agobot
内核套件 通过替换或修改系统关键可执行文件,或者通过控制操作系统内核,用以获取并保持最高控制权 LRK,FU,hdef
融合型恶意代码 融合多种恶意代码技术的恶意代码 Nimda

0.2 恶意代码的分析方法

  • 静态分析
分析方法 目的 使用工具 难度
恶意代码扫描 标识已知恶意代码 反病毒引擎
文件格式识别 确定攻击平台和类型 file,peid,FileAnalyzer
字符串提取 寻找恶意代码分析线索 Strings
二进制结构分析 初步了解二进制文件结构 binutils(nm,objdump)
反汇编 二进制代码->汇编代码 IDAPro,GDB,VC 中高
反编译 汇编代码->高级语言 REC,DCC,JAD 中高
代码结构与逻辑分析 分析二进制代码组,理解二进制代码逻辑层结构 IDAPro,Ollydbg
加壳识别和代码脱壳 识别是否加壳及类型;对抗代码混淆恢复原始代码 UPX,VMUnpacker,手工
  • 动态分析
分析方法 目的 使用工具 难度
快照比对 获取恶意代码行为结果 FileSnap,RegSnap,完美卸载
动态行为监控 实时监控恶意代码动态行为轨迹 Filemon,Regmon,ProcessExploer
网络监控 分析恶意代码网络监听端口及发起网络会话 Fport,lsof,TDImon
沙盒 在受控环境下进行完整的恶意代码动态行为监控与分析 NoemanSanbbox,FVMSandbox 中高
动态跟踪调试 单步调试恶意代码程序,理解程序结构和逻辑 Ollydbg,IDAPro,GDB

返回目录

1. 实验目标

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

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

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

2. 实验内容

2.1 系统运行监控

2.1.1 Windows计划任务schtasks
  • 要求
    • 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。
    • 目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
  • 步骤
    • 使用命令schtasks /create /TN netstat5227 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog.txt" 创建计划任务netstat5227
    • 命令中参数意义如下:

    TN:TaskName的缩写;
    sc:计时方式,我们以分钟计时填MINUTE;
    TR:Task Run缩写,要运行的指令是 netstat
    bn:b表示显示可执行文件名,n表示以数字来显示IP和端口;
    >:表示输出重定向,将输出存放在c:\netstatlog.txt文件中

  • 在C盘中创建netstat5227.bat脚本,内容如下:
date /t >> c:\netstat5227.txt
time /t >> c:\netstat5227.txt
netstat -bn >> c:\netstat5227.txt
  • 打开任务计划程序,查看当前新创建的任务netstat52227

  • 双击该任务进行编辑,在常规选项卡中勾选使用最高权限操作,以防记录里出现权限问题。

  • 操作选项卡中双击编辑启动程序操作,程序或脚本选择netstat5227.bat,参数为空。

  • 为了统计足够多的数据,将条件选项卡中该选项取消:

  • 执行该脚本一段时间后,就可以在netstat5227.txt文件中看到主机在此段时间内的联网记录:

  • 一段时间后可以获得充足的数据,可以停止该任务,将netstat5227.txt中数据复制粘贴到Excel中进行分析。统计项目如下:

  • 由统计数据分析可知:

    联网最多的是VMware.exe及其相关的一些其他可执行文件;其次就是谷歌浏览器对应的chrome.exe;其他还有譬如说QQ、微信、WPS一些程序,还有后门程序zxy_20175227_backdoor.exe。其他的也是系统相关的程序,没有什么异常。

返回目录

2.1.2 sysmon工具
  • 要求
    • 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
    • 实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。
  • 步骤
    • sysmon工具介绍

      sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。
      以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。
      sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。
      通过收集并分析使用Windows事件集合或SIEM代理生成的事件,可以识别恶意或异常活动,并了解入侵者和恶意软件在主机的网络上如何操作。

    • 下载老师提供sysinternal解压该文件后将sysmon.exe拷贝到管理员运行cmd的文件夹中,我这里是C://Windows/System32

    • 这篇文章中详细列举了sysmon过滤器事件及其选项,我选取了NetworkConnect中的Image、SourcePort、SourceIP、DestinationPortCreateRemoteThread中的TargetImage、SourceImage

    • 创建配置文件sysmon.xml,(创建后同样拷贝到C://Windows/System32)文件内容如下:

<Sysmon schemaversion="3.10">
   <!-- Capture all hashes -->
   <HashAlgorithms>*</HashAlgorithms>
   <EventFiltering>
     <!-- Log all drivers except if the signature 驱动加载有以下签名的都过滤 -->
     <!-- contains Microsoft or Windows -->
     <DriverLoad onmatch="exclude">
      <Signature condition="contains">microsoft</Signature>
      <Signature condition="contains">windows</Signature>
    </DriverLoad>

     <!-- 网络连接过滤以下 -->
     <NetworkConnect onmatch="exclude">             
     	<!-- 可执行程序以下列结尾的 -->         
       <Image condition="end with">chrome.exe</Image>  
       <Image condition="end with">iexplorer.exe</Image>
       <!-- 源端口和IP包含下列的 -->
       <SourcePort condition="is">137</SourcePort>
       <SourceIp condition="is">127.0.0.1</SourceIp>
     </NetworkConnect>

     <NetworkConnect onmatch="include">
       <!-- 目的端口和IP包含下列的 -->
       <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>
  • 以管理员身份运行cmd,输入指令Sysmon.exe -i sysmon.xml,会弹出安装提示框,点击Agree进行安装,安装成功后如图,我的版本是3.10:

  • 打开事件查看器,在左侧栏中选择应用程序和服务日志->Microsoft->Sysmon->Operational
  • 以实验二生成的后门程序zxy_20175227_backdoor.exe为例,按步骤执行回连,在系统时间9:16:19左右看到了该条日志,如下:

  • 在9:19:22时我通过Linux获取了shell,在事件查看器中查看到了该条日志,调用了cmd.exe,且在后门程序目录下,显然与测试的后门程序相关:

  • 在shell中输入dir获取主机当前文件信息,在事件查看器中看到了以下两条日志:

SearchProtocolHost.exeSearchFilterHost.exe都是Windows下的文件搜索引擎程序

  • 在9:46:30左右,在msfconsole中输入getuid获取当前主机用户信息,可以看到该条日志:

mmc.exe是系统管理程序的一个框架程序,可以查看组策略等信息。

返回目录

2.2 恶意软件分析

2.2.1 静态分析

①恶意代码扫描(VirusTotal网站)

  • 这里使用实验三生成的加压缩壳后门程序zxy175227.upxed.exe,在VirusTotal进行扫描,结果如下:

  • 该文件的查出率相当高。
  • 查看细节,可以看到这个文件的三个算法的摘要值,文件类型等信息。
    尤其是,它连加的什么壳也扫出来了“upx

②文件格式识别(PEiD工具)

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

  • 下载了PEiD之后进入文件夹就可以看到exe文件,直接双击运行即可:

  • 扫描加壳后门文件zxy175227.upxed.exe,得到下图中的结果:

可以看到加壳版本是UPX 0.89.6

  • 扫描未加壳后门程序zxy_20175227_backdoor.exe,结果如下:

PE嗅探未检测到加壳,扫描该文件发现它反弹连接攻击机是通过调用DLL的方式实现。

③反编译、反汇编(PE Explorer工具)

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

  • 打开PE Exploer后打开后门程序zxy_20175227_backdoor.exe,显示出文件头信息:

  • 选择菜单栏中的视图->引入,可以查看调用的DLL文件:

可以看到更加详细的调用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"文件的功能,所以杀毒软件等就无法运行了而提示:应用程序正常初始化失败。

  • 菜单栏选中视图->资源,可以查看到与VirusTotal和PEiD中一样的版本信息:

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

返回目录

2.2.2 动态分析

①快照比对(SysTracer工具)

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

  • 点击创建快照,我创建了四个进行比对,分别是:
    • Snapshot #1:不进行任何操作;
    • Snapshot #2:运行后门程序并成功反弹连接;
    • Snapshot #3:获取shell并获取被攻击机文件详情;
    • Snapshot #4:使用msf命令getuidscreenshot

比对Snapshot #1和Snapshot #2

  • 查看应用程序标签页,可以看到Running Processes下的zxy_20175227_backdoor.exe被标蓝,表示快照1和快照2的运行程序差异就是这一项后门:

可以看到运行后门后它修改了关于系统组策略配置的一个应用程序,应该是用它得到更高权限来查看系统内部信息。

  • 查看注册表差异,可以看到启动后门程序并进行反弹回连后修改了一些注册表信息:

比对Snapshot #2和Snapshot #3

  • 可以看到新增了一个DLL文件winbrand.dll,网上没查到更多关于这个文件的信息,只知道他是Windows OS中很重要的一个关于资源的DLL:

  • 增加了许多调用DLL文件的记录:

  • Linux调用shell之后,修改了注册表中本机键值的conhost.exe,并删增了用户键值下的读者修订信息:

conhost全称是console host process, 即命令行程序的宿主进程. 大家都知道命令行程序是什么东西吧, 比如ipconfig.exe之类, 由于命令行程序自身没有代码来显示UI, 我们平时看到的命令行窗口内容都是由宿主进程来完成的,包括窗口的显示, window message的处理,等等.

这样一来就可以得到访问读取被攻击机的资源了:

比对Snapshot #3和Snapshot #4

  • 删除了之前建立的调用许多DLL的过程:

  • 这里我是退出了shell,并获取了当前主机截屏和用户信息,可以看到刚刚那个winbrand.dll被删了,我推测这个程序和获取shell息息相关。

  • 这里仍然修改了conhost.exe相关的键值:

②网络监控(Wireshark工具)

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

  • 开始抓包后,Kali中启动监听,然后Windows端回连,可以看到TCP三次握手建立连接的过程,目的端口是Kali中设置的监听端口5227,还可以看到目的和源IP地址:

  • Kali中使用ls命令后可以看到一个TCP相关的包和所传输的数据信息:

返回目录

3. 老师提问

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

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

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

  • 回答:
    • 通过火绒安全杀软中的进程管理来监控文件系统、注册表、进程/线程的活动。
    • 通过Wireshark进行捕包分析,监视与可疑IP的连接通信情况。

返回目录

4. 所遇到的问题及其解决方法

返回目录

5. 实验感想

  • 通过这次实验,我掌握了分析恶意代码的基本方法,是前四次实验中最顺利的一次,几乎没遇到问题。在进行恶意代码分析的时候,我了解了Windows OS中一些exe和DLL文件的作用,和一些注册表项的意义,还是很有收获的。总的来说这次实验的实操性很强,可以用于以后自己查找主机上的恶意代码。有助于同学整理的资料,让自己没有在寻找软件上多花费时间。

返回目录

6.参考资料

返回目录

posted @ 2020-04-13 17:13  20175227  阅读(422)  评论(0编辑  收藏  举报