2017-2018-2 20155314《网络对抗技术》Exp4 恶意代码分析

2017-2018-2 20155314《网络对抗技术》Exp4 恶意代码分析

目录

实验要求

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

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

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

返回目录

实验内容

  1. 系统运行监控(2分)

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

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

  2. 恶意软件分析(1.5分)

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

    • 读取、添加、删除了哪些注册表项
    • 读取、添加、删除了哪些文件
    • 连接了哪些外部IP,传输了什么数据(抓包分析)

    该实验重点在“分析”,不是“如何使用某软件”。组长、课题负责人要求写细一点,其他人可以重点放在分析上。

返回目录

实验环境

  • macOS下Parallels Desktop虚拟机中(网络源均设置为NAT模式):
    • Windows 7 - 64bit(IP为10.211.55.13
    • Kali Linux - 64bit(IP为10.211.55.10

返回目录

基础问题回答

  • 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控?
    • 利用sysmon工具,配置好想要监控的端口、注册表信息、网络连接等信息,通过其生成的日志文件进行查看
    • 利用wireshark查看数据包,TCPview也可以,但是没那么全面
    • 利用systracer进行快照,比照注册表、文件等信息
    • 利用Process monitor、Process Explorer
  • 如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息?
    • 同样采用以上工具,用wireshark查看数据包,systracer进行快照的对比(注册表、文件等),peid查看是否加壳,Process Explorer查看调用的程序库、dll库等

返回目录

预备知识

  • 恶意代码(Unwanted Code):是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件
  • 恶意代码分析
    • 静态分析基础技术
      • 计算恶意程序MD5值,然后检索该MD5值来获取信息并作为其特征码使用(可使用md5deep winmd5)
      • 通过检索恶意代码字符串获得相应的功能调用解释等,查看是否有被加壳处理(字符串检索:Strings 外壳检测:PEiD)
      • PE文件头中包含代码信息,恶意代应用程序类型等重要信息。可通过工具检索其动态链接库(dll),然后再MSDN文档库中查找其功能。(Dependency Walker、 PEview、 PEBrowse Professional、PE Explorer)
      • 查看可疑代码的的资源节来获得一部分可见的特征(Resource Hacker)
    • 动态分析基础技术
      • 配置“沙箱”环境,模拟真实执行结果(各种沙箱)
      • Dll类型文件的启动运行(PEview、PE Exporer)
      • 用一些系统监视类软件捕获运行中恶意程序的系统调用(process monitor、process explorer)

返回目录

实验步骤

1 静态分析

1.1 使用virscan进行特征库比对

  • 在virscan.org网站上分析Exp3中通过upx加壳生成的后门:

    可见有7/40(上次实验扫描结果还是7/39)的杀软认定其为病毒文件
  • 点击扫描结果右边的【文件行为分析】查看详细分析结果:
    • 在“壳或编译器信息”一栏可见其被upx加壳:
    • 在“关键行为”一栏查看其行为描述为“设置特殊文件夹属性”:
    • 在“进程行为”一栏查看其行为描述为“创建本地线程”:
    • 在“文件行为”一栏查看其行为描述为“设置特殊文件夹属性”和“查找文件”:
    • 在“网络行为”一栏查看其行为描述为“连接指定站点”、“建立到一个指定的套接字连接”、“发送HTTP包”、“读取网络文件”和“打开HTTP请求”:
    • 在“注册表行为”一栏查看其行为描述为“修改注册表”、“删除注册表键值”和“删除注册表键”:
    • 在“其他行为”一栏查看其行为描述为“打开互斥体”、“创建互斥体”、“创建事件对象”和“打开事件”:
  • 恶意代码分析:
    • 加壳
    • 创建连接
    • 修改注册表
    • 检测自身的调试情况

返回目录

1.2 使用PEiD进行外壳检测

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

  • 扫描模式
    - 正常扫描模式:可在PE文档的入口点扫描所有记录的签名
    - 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入
    - 核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
  • 命令选项
    - peid -time:显示信息
    - peid -r:扫描子目录
    - peid -nr:不扫描子目录
    - peid -hard:采用核心扫描模式
    - peid -deep:采用深度扫描模式
    - peid -norm:采用正常扫描模式
  • 主要模块
    - 任务查看模块:可以扫描并查看当前正在运行的所有任务和模块,并可终止其运行
    - 多文件扫描模块:可同时扫描多个文档。选择“只显示PE文件”可以过滤非PE文档;选择“递归扫描”可扫描所有文档,包括子目录
    - Hex十六进制查看模块:可以以十六进制快速查看文档
  • PEiD v0.94下载地址:exe,dll侦壳工具 PEiD v0.94 20060510 汉化集成插件版

  • 下完解压打开.exe文件发现是安装包:

    ???woc流氓软件!!竟然要捆绑安装这么多....

  • 安装完毕,打开PEiD,界面如下(实践表明win7对于原本只能在XP上运行的PEiD还是具有较好的兼容性的):

  • 选择.exe文件路径或者干脆直接把.exe文件拖到里面即可:

    从上面我们可以看到软件加的UPX的壳,版本是0.89.6。点击>>按钮还可以查看详细信息:

  • 换一个用Hyperion加过密的壳试试?

    什么也没发现!!成功便骗过去了!!!

  • 点击“多重扫描”还可以更改扫描方式(虽然对加密过的壳并没有什么用):

  • 我们最常用到的功能有:

    1. 查看入口点(即程序的入口地址)。查入口点的软件有很多,几乎所有的PE编辑软件都可以查看入口点。
    2. 查看软件加的什么壳。这个软件加的是UPX 0.89.6
  • PEiD插件应用:

    最常用的插件就是脱壳。PEiD的插件里面有个通用脱壳器,能脱大部分的壳,如果脱壳后import表损害,还可以自动调用ImportREC修复improt表。

    • 点击“=>”打开插件列表:
    • 还可以专门针对一些壳进行脱壳,效果要比通用脱壳器好:
    • 使用unpacker for upx插件进行脱壳。默认的脱壳后的文件放置位置在peid的根目录下。文件名为原文件名前加un字样。

      什么...竟然失败了...

返回目录

1.3 使用PE explorer查看PE文件头中包含代码信息

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

  • 优点:功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等;另外,还具备有W32DASM软件的反编译能力和PEditor软件的PE文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理PE格式的文件如:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR等32位可执行程序。该软件支持插件,你可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX的脱壳插件、扫描器和反汇编器,非常好用。

  • 缺点:唯一遗憾的是欠缺字典功能。

  • 功能:
    - 出口,进口,延迟导入
    - 资源编辑器
    - 节头的浏览器
    - 段编辑器
    - 反汇编
    - 依赖扫描器

  • PE Explorer绿色版下载地址:PE Explorer绿色版(可视化集成工具) 1.99 R6
  • 安装完成界面如下:

    点击左上角图标打开上次实验生成的后门文件5314.exe(也可以直接将其拖到界面中间):
  • 查看程序头部信息(默认界面):
  • 查看程序静态数据目录:
  • 查看程序结头信息:
  • 进行反汇编:
  • 点击“导入”查看其引用的dll库:
    • KERNEL32.dll:控制着系统的内存管理、数据的输入输出操作和中断处理。虽然涉及内核,但是运行程序所必须的,正常。

    • msvcrt.dll:微软编译软件的函数库。正常。

    • USER32.dll:Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。是一个对系统很关键或很可疑的文件,易遭受木马病毒破坏导致系统找不到此文件,出现错误提示框

    • WSOCK32.dll:Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。是一个对系统很关键或很可疑的文件,易遭受木马病毒(如“犇牛”病毒)破坏导致系统找不到此文件,出现错误提示框

      犇牛病毒介绍:

      2009年春节刚过,一款名为“犇牛”的恶性木马下载器开始大肆作恶。来自360安全中心的数据显示,已有数十万台电脑受到“犇牛”袭击,并能导致大部分安全软件失效,用重装系统等常规手段无法清理。

      据大批受害用户反映,感染“犇牛”的电脑速度会明显变慢,出现虚拟内存不足提示,非系统盘的根目录及所有文件夹目录中同时出现“usp10.dll”或“wsock32.dll”文件。部分用户的电脑感染“犇牛”后还会出现弹出大量广告网页、杀毒软件遭强制卸载、“QQ医生”显示为“叉号”无法正常使用等各种症状,并会自动下载大量木马病毒(包含“赤兔马”、“老A”、“LY”以及“铁血”等多个知名盗号木马,覆盖了近20款当前最热门的网络游戏和QQ工具,对用户的危害极大)。受害用户除非将所有硬盘分区全盘格式化,否则即便重装系统后“犇牛”仍能踏蹄重来。

      360安全专家石晓虹博士介绍:“犇牛”木马下载器之所以成为牛年首“牛”的木马,是因其拥有“系统重装复活”、“系统文件掩护”以及“逆向卸载杀软”等三大“牛”招,能令大部分安全软件失效,从而危害性大大提升。

      据石晓虹博士介绍,“犇牛”使用了劫持dll文件的方式,在所有非系统盘的文件夹目录内释放“usp10.dll”文件,不少用户发现电脑“中招”后习惯性地进行重装,却因为这些文件未被完全清除而再度感染;同时,“犇牛”非常阴险地将某个系统文件悄悄替换,使大部分杀毒软件常用的查杀手段失效,进一步增强了其自我保护能力;此外,“犇牛”还使用了一个名为“安软杀手”的帮凶对主流杀软进行卸载和破坏,屏蔽安全厂商的网站,并能导致迅雷等下载软件失效,致使受害用户无法访问安全网站或下载安全软件。

      通过以上三大“牛招”,“犇牛”得以突破用户电脑防御体系,并通过进一步下载针对诛仙、魔兽世界、问道等十余款热门网游、QQ以及网上银行的盗号木马,完成对受害用户电脑中虚拟财富的盗窃。

返回目录

1.4 使用Dependency Walker查看其依赖性、导入与导出模块

Dependency Walker是一款Microsoft Visual C++ 中提供的非常有用的PE模块依赖性分析工具,软件大小295KB。

  • 功能:
    - 查看PE模块的导入模块
    - 查看PE模块的导入和导出函数
    - 动态剖析PE模块的模块依赖性
    - 解析 C++ 函数名称

返回目录

2 动态分析

2.1 使用SysTracer分析后门软件的运行过程

SysTracer是一款可以分析计算机文件,文件夹和注册表项目改变的系统实用工具。你可以在任何想要的时间获取无数个屏幕快照。你可以比较任何一对想要的屏幕快照,并且观察其间的不同之处。获取屏幕快照通常会持续几分钟的时间,这取决于文件和文件夹的数量和注册表项目的总数。该软件特别推出一个非常高效的分析算法,比较两张屏幕快照可以瞬间完成。

  • 下载地址:SysTracer(64bit)官方下载
  • 界面如下,点击【创建快照】:
  • 给快照取名,使用默认设置,点击【确定】开始创建第1个快照Snapshot20155314 #1:
  • 创建过程长短视当前系统体量而定,如下图win7系统(未打开后门程序)快照创建完成共用了3分52秒:
  • Kali攻击机启动Meterpreter进行攻击,同时win7打开上次实验生成的后门程序5314.exe进行回连,并创建第2个快照Snapshot20155314 #2:
  • Kali攻击机输入ls命令后,win7创建第3个快照Snapshot20155314 #3:

  • Kali攻击机输入screenshot命令抓屏,win7创建第4个快照Snapshot20155314 #4:

  • 点击【快照比较】将快照之间进行比较,点击【注册表】选项卡可发现注册表上的变化:
    <img src="https://images2018.cnblogs.com/blog/1071508/201804/1071508-20180418183718866-52668722.png width="100%" />
    如下图,蓝色字体为变化项:
  • 为了方便对比差异,我们将“查看模式”选择为“仅差异”,并将树型目录逐层展开:

    可以很明显地看出该后门获取了shell!!
  • 点击【应用程序】可发现后门程序5314.exe对很多.dll文件都进行了修改!

    返回目录

2.2 使用wireshark对流量进行抓包分析

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。

Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

  • 打开Wireshark.exe,选择本地连接接口,点击左上角蓝色鲨鱼按钮开始抓包:

    抓到的都是一些本地连接的数据包,如第三个黄色的包是此win7虚拟机向广播地址发送的广播包~
  • Kali攻击机打开监控,win7打开后门程序5314.exe进行回连,此时Wireshark上捕获到了巨大的流量:


    如图可见,出现了大量TCP三次握手过程~
  • Kali攻击机输入ls命令,又出现了大量的TCP连接:

  • Kali攻击机输入screenshot命令,同样出现了大量的TCP连接(词穷):

    由于抓包时Kali攻击机一直处于连接win7的状态,因此并没有捕获到TCP四次挥手取消连接到过程~
  • 在查看包的过程中发现了一个可疑的三次握手,Wireshark提示This frame is a suspected retransmission即该连接可能为一个非法的连接,最恐怖的是目的IP显示为一个陌生的IP183.232.103.218
    查询IP地址显示为深圳市?!震惊!!由于该抓包实验是在关闭杀软(腾讯电脑管家)下进行的,细思极恐!!

    返回目录

2.3 使用PEbrowse Pro对程序进行断点动态调试

返回目录

2.4 使用Sysmon恶意网络连接和操作

System Monitor(sysmon)是由Windows Sysinternals出品的一款Sysinternals系列中的工具。它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。之后再结合WindowsEvent Collection或SIEM进行分析,可以识别网络上的异常入侵或运行的恶意软件。

  • 特点:用完整的命令行记录下子进程和父进程的创建行为。使用sha1(默认),MD5,SHA256或IMPHASH记录进程镜像文件的hash值。可以同时使用多个hash,包括进程创建过程中的进程GUID。每个事件中包含session的GUID。
    1. 记录驱动程序或者加载的DLL镜像的签名及其hash
    2. 记录磁盘和卷的原始数据的读取请求
    3. 记录网络连接,包括每个连接的源进程,IP地址,端口号,主机名和端口名(可选)
    4. 如果更改注册表则自动重新加载配置
    5. 具有规则过滤,以便动态包括或排除某些事件
    6. 在加载进程的初期生成事件,能记录在复杂的内核模式运行的恶意软件
  • 下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon

  • 一键安装命令(需要以管理员身份运行cmd):

    sysmon -accepteula -i -n
    
  • sysmon -c命令查看配置:

  • 编写配置文件config20155314.xml

    <Sysmon schemaversion="3.20">      
    <!-- 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>       
    <!-- Do not log process termination -->        
    <ProcessTerminate onmatch="include" />       
    <!-- Log network connection if the destination port equal 443 -->        
    <!-- or 80, and process isn't InternetExplorer -->        
    <NetworkConnect onmatch="include">          
    	<DestinationPort>443</DestinationPort>          
    	<DestinationPort>80</DestinationPort>
    	<DestinationPort>5314</DestinationPort>        
    </NetworkConnect>        
    <NetworkConnect onmatch="exclude">          
    	<Image condition="end with">iexplore.exe</Image>       
    </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>
    
```
  • sysmon -c config20155314.xml命令指定配置文件:

    报错提示版本不匹配,只需将<Sysmon schemaversion="3.20"> 改成<Sysmon schemaversion="4.00"> 即可:
  • 重新输入sysmon -c config20155314.xml命令,配置完成:
  • 输入Sysmon.exe -i命令启动sysmon:
  • 打开【开始】菜单,搜索【事件查看器】并打开,在左侧控制台树按照【事件查看器】->【应用程序和服务日志】->【Microsoft】->【Windows】依次展开,找到【Sysmon】下的【Operational】并双击打开:
  • 打开5314.exe后门,Kali攻击机用meterpreter回连,可以看到连接的详细信息,包括ip、端口、pid等:
  • Kali攻击机执行migrate操作,将后门进程迁移到iexplore中:

  • 发现该操作会被记录到Process terminated中:

    返回目录

2.5 使用Windows计划任务schtasks指令监控系统运行

  • 以管理员身份打开cmd,使用指令schtasks /create /TN 20155314_netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstatlog20155314.txt创建计划任务20155314_netstat,记录每1分钟计算机联网情况:
  • cd指令进入C盘根目录
  • 用指令type nul>netstatlog20155314.txt创建一个名为netstatlog20155314.txt的空文本文件
  • 用指令gvim netstatlog20155314.txt打开此文本文件(需要下载gvim文本编辑器)并按i输入以下内容,然后保存:
    date /t >> c:\ netstatlog20155314.txt
    time /t >> c:\ netstatlog20155314.txt
    netstat -bn >> c:\ netstatlog20155314.txt 
    
  • 修改其后缀名为.bat(需要提供管理员权限)并右键选择以管理员身份运行:
  • 再次输入指令type nul>netstatlog20155314.txt在C盘下创建一个名为netstatlog20155314.txt的空文本文件用于保存记录
  • 这时,打开计划任务查看刚刚新建的任务20155314_netstat,右键属性勾选使用最高权限运行,然后选择运行:
  • 已经成功运行:
  • 于是每隔一分钟数据会被输出到设定好的netstatlog20155314.txt文档中:

返回目录

实验中遇到的问题及解决过程

win7安装wireshark提示没有一个可以抓包的接口

###问题分析 >这是由于win7默认NPF服务是关闭的,需要以管理员的身份开启这个服务 > >Windows7上安装wireshark时,会遇到NPF驱动无法启动的情况,一般如果采用管理员的方式就可以正常启动,或者是将NPF安装为service的方式,这样问题就OK了

解决方案

  • 以管理员的方式进行启动NPF驱动:
    • 开始->附件->cmd(右键点击,浏览到以管理员方式启动):
    • 输入命令net start npf启动NetGroup Packet Filter Driver服务:
  • Wireshark中点击【捕获】选项卡,选择【刷新接口列表】,下方接口列表出现本地连接接口:
  • 点击本地连接接口即可开始愉悦的抓包之旅~

    返回目录

实验总结与体会

  比杀软好用。我们在具备了一定的知识基础和分析能力后,一定会有这样的感觉,上次实验生成的后门已经成功完成免杀骗过绝大多数知名杀软,但这次实验中它们仍然骗不过某些恶意代码分析工具的眼睛👀,这就间接说明了杀软在这些工具面前几乎是useless。然而,为什么杀软能够成为大多数Windows用户的必备品而不是这些分析工具呢?道理很简单,对于这些工具普通用户大多不会用、看不懂、嫌麻烦,反倒觉得它们useless了。可见,杀软和分析工具的区别在于,杀软强调一键式服务的用户体验,即使对于某些特定的后门是束手无策的,但它服务的是大多数受众;而真正的信息安全人员关心的是信息系统的整体安全防护,不能让任何一个攻击、任何一个威胁甚至任何一个可疑的连接成为可能,毫无疑问会选择恶意代码分析工具以及他们的综合使用。因此结合上次实验,从技术角度上说,我们信息安全专业的学生应掌握这些分析工具的原理及其应用,而不是仍然依赖于杀软。
返回目录

参考资料

posted @ 2018-04-18 10:59  20155314刘子健  阅读(1171)  评论(0编辑  收藏  举报
Live2D