zoukankan      html  css  js  c++  java
  • 20181313毕然《网络对抗技术》——Exp4 恶意代码分析

    《网络对抗技术》——Exp4 恶意代码分析

    一、实践基础

    1、实践目的

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

    2、实践内容

    • 系统运行监控

      • 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述分析结果。
      • 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
    • 分析该软件在启动回连、安装到目标机及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件

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

    3、实践原理

    • 恶意代码
      • 使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
      • 指令集合:二进制执行文件,脚本语言代码,宏代码,寄生在文件、启动扇区的指令流。
      • 恶意代码目的:技术炫耀/恶作剧,远程控制,窃取私密信息,盗用资源,拒绝服务/破坏......
    • 恶意代码类型
      • 计算机病毒,蠕虫,恶意移动代码,后门,特洛伊木马,僵尸程序,Rootkit等…

      • 计算机病毒是最早出现的恶意代码,媒体/工业界的概念混淆,经常以计算机病毒(Computer Virus)等价于恶意代码

    • 系统监控
      • 把系统看做一个黑盒子

        • 从网络进出口,监控对外数据收发

      • 把系统看做白盒子

        • 谁(进程)

        • 读写了什么(文件)

        • 收发了什么(网络)

      • 隐通道

        • 内存发送Wifi信号

        • DNS包发送数据

    • 分析环境
      • 静态分析:
        • 恶意代码扫描、文件格式识别、字符串提取、二进制结构分析、反汇编反编译、代码结构与逻辑分析、加壳识别和代码脱壳
      • 动态分析:
        • 快照比对、动态行为监控、网络监控、沙盒、动态跟踪测试

    二、实践内容

    系统运行监控

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

    目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。

    使用schtasks指令监控系统

    • 使用schtasks指令。schtasks.exe是安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。
    schtasks /create /TN netstat1313 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:
    etstatlog.txt"
      • 创建计划任务 netstat1313 :

      • TN 是TaskName的缩写,我们创建的计划任务名是netstat1313;
      • sc 表示Task Run,要运行的指令是 netstat;
      • bn其中b表示显示可执行文件名,n表示以数字来显示IP和端口;
      • >表示输出重定向,将输出存放在c: etstat1313.txt文件中;
    • 在C盘中创建一个脚本文件 netstat1313.bat
      • 在C盘中创建需要权限,因此我选择了在桌面创建一个 netstat1313.txt 文本文件,并写入以下内容:
    date /t >> c:
    etstat1313.txt 
    time /t >> c:
    etstat1313.txt 
    netstat -bn >> c:
    etstat1313.txt
      • 将文件复制到C盘中,并修改后缀名为.dat

    • 在Windows的任务计划程序中,可以查看到新创建的任务:

    •  双击这个任务,点击操作并编辑,将“程序或脚本”改为我们创建的 netstat1313.bat 批处理文件,将可选参数清空,点击确定。

    • 在"条件"选项卡中可以看到,电源选项中默认操作为“只有在计算机使用交流电源时才启动此任务” ,那么使用电池电源时就会停止任务。为了我们统计足够多的数据,这个选项取消掉。

    • 接着,在“常规”栏下选择“使用最高权限运行” ,否则可能导致文件不能自主更新或者记录里出现权限问题,点击确定保存。

    •  运行该任务。

    • 等待了足够长的时间后,可以选择终止计划任务,然后对收集到的数据进行统计。在C盘目录下,出现了一个netstat1313.txt 的文件,可以在其中查看联网数据。

    •  在Excel表格中分析记录的数据
      • 创建新表格,点击数据导入数据,选择直接打开数据文件,并在选择数据源中选择文本文件。

      •  按照步骤,选择其他编码分隔符号,并如下图勾选。

      •  选择协议一列,点击上方菜单栏中的插入,选择数据透视图

      •  在新工作表中,点击数据透视图,在跳出的右侧边栏的字段列表中,筛选出我们需要的字段进行分析,并将字段拖放到下方的中。

     

    •  得到如下柱状图:

    • 分析:如图所示,在这段时间内,联网最多的是程序wps.exe ,也就是WPS,其次为et.exe 和wpscloudsvr.exe,其中,ET是WPS的表格模块。 如果打开了比较大的表格文件,有可能有占用较多内存的现象。wpscloudsvr是wps的云服务,其主要作用是弹窗登录, 如果我们使用WPS时不想被他占资源和打扰可以对它进行处理。图中也包括了360浏览器、微信等软件的相关联网程序。

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

            sysmon是微软Sysinternals套件中的一个工具,它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。使用sysmon工具前首先要配置文件。

    • 过滤器事件的选项:
      • 进程创建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
    • 下载并解压SysinternalsSuite201608.zip 文件,并进入文件夹新建配置文件sysmon20181313.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> 
                <Image condition="end with">firefox.exe</Image> 
            </ProcessCreate> 
    
        &lt;ProcessCreate onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span>&gt;
            &lt;ParentImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;cmd.exe&lt;/ParentImage&gt;
        &lt;/ProcessCreate&gt; 
        
        &lt;FileCreateTime onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">exclude</span><span style="color: #800000;">"</span> &gt; 
            &lt;Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;chrome.exe&lt;/Image&gt; 
            &lt;Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;firefox.exe&lt;/Image&gt; 
        &lt;/FileCreateTime&gt; 
        
        &lt;NetworkConnect onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">exclude</span><span style="color: #800000;">"</span>&gt; 
            &lt;Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;chrome.exe&lt;/Image&gt; 
            &lt;Image condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;firefox.exe&lt;/Image&gt; 
            &lt;SourcePort condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>&gt;<span style="color: #800080;">137</span>&lt;/SourcePort&gt; 
            &lt;SourceIp condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>&gt;<span style="color: #800080;">127.0</span>.<span style="color: #800080;">0.1</span>&lt;/SourceIp&gt; 
        &lt;/NetworkConnect&gt; 
        
        &lt;NetworkConnect onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span>&gt; 
            &lt;DestinationPort condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>&gt;<span style="color: #800080;">80</span>&lt;/DestinationPort&gt; 
            &lt;DestinationPort condition=<span style="color: #800000;">"</span><span style="color: #800000;">is</span><span style="color: #800000;">"</span>&gt;<span style="color: #800080;">443</span>&lt;/DestinationPort&gt; 
        &lt;/NetworkConnect&gt; 
        
        &lt;CreateRemoteThread onmatch=<span style="color: #800000;">"</span><span style="color: #800000;">include</span><span style="color: #800000;">"</span>&gt; 
            &lt;TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;explorer.exe&lt;/TargetImage&gt; 
            &lt;TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;svchost.exe&lt;/TargetImage&gt; 
            &lt;TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;firefox.exe&lt;/TargetImage&gt; 
            &lt;TargetImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;winlogon.exe&lt;/TargetImage&gt; 
            &lt;SourceImage condition=<span style="color: #800000;">"</span><span style="color: #800000;">end with</span><span style="color: #800000;">"</span>&gt;powershell.exe&lt;/SourceImage&gt; 
        &lt;/CreateRemoteThread&gt; 
    &lt;/EventFiltering&gt; 
    

    </Sysmon>

    • 参数说明:
      • ProcessCreate表示进程创建
      • NetworlConnect 表示网络连接
      • CreateRemote 表示远程线程创建
      • FileCreate Time 表示进程创建时间
      • onmatch后面跟的参数includeexclude分别表示“免检”和“必检”名单。免检名单中在统计时忽略掉,必检名单在检测时需要进行匹配。

    • 在cmd中进入解压后的文件夹,执行指令Sysmon.exe -i sysmon20181313.xml

     发现出现提示:You need to launch Sysmon as an Administrator.

    解决方法:以管理员身份打开cmd,再次尝试:

    •  右击Win,选择事件查看器,依次选择应用程序和服务日志->Microsoft->Windows->Sysmon->Operational ,可以查看到按照配置文件中的配置信息所记录的一些信息。

    • 在列表中找到sysmon20181313.xml

    •  利用实验三中生成的后门程序进行分析
      • 后门程序启动回连到kali

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

    • 在事件查看器中传了如下信息:

    恶意代码分析

    静态分析——VirusTotal网站扫描恶意软件

    • 使用VirusTotal分析恶意代码基本信息如下:

    • 查看恶意代码的基本属性,可以看出它的SHA-1、SHA-256、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。

    静态分析——PEiD软件分析恶意软件

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

    • 扫描模式
      • 正常扫描模式:可在PE文档的入口点扫描所有记录的签名;

      • 深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入;

      • 核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。PEiD内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。

    • 查看实验二中生成的普通后门文件

    • 查看经过压缩壳的后门程序,可以查看到压缩壳的版本

    • 查看经过加密壳的后门程序,什么都没有发现

    •  查看经过压缩壳和加密壳的程序,什么都没有发现
    • 分析:说明了该软件无法检测到加密壳。证明了加密壳一定程度上有着绕过安全检测、隐藏恶意代码后门程序的作用,但这也可能由于该检测软件的功能缺失。

    静态分析——使用PE Explorer分析恶意软件

            PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。该软件支持插件,你可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX的脱壳插件、扫描器和反汇编器,可以查看程序头部信息(默认界面)、程序静态数据目录、程序结头信息、对程序反汇编等等,非常好用。

    •  下载软件
    • 打开后门文件,查看文件头部信息

    • 视图(view)-数据目录(Data Directories)查看程序静态数据目录

    • 视图(view)-节头(Section Heads)查看节头信息

    • 视图(view)-Import查看信息

      • KERNEL32.dll:控制着系统的内存管理、数据的输入输出操作和中断处理。
      • MSVCRT.dll:是微软编译软件的函数库。
      • ADVAPI32.dll:一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性。
      • WSOCK32.dll:是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。
      • WS2_32.dll:Windows Sockets应用程序接口, 用于支持Internet和网络应用程序。
      • 分析:通过分析生成的后门程序都会使用KERNEL32.dll,所以如果有陌生软件使用KERNEL32.dll则应当提高警惕。
    • 工具(tools)-反汇编器(Disassambler)进行反汇编

    动态分析——使用systracer分析恶意软件

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

    • 安装软件
    • 点击创建快照take snapshot,点击start,创建快照。(具体时长由系统决定,快照创建会自动完成)

    •  运行后门程序,回连Kali,并创建快照

    •  步骤如上,捕获五个快照如下:
      • 快照一:未移植后门程序,保存为Snapshot #1
      • 快照二:运行后门程序并在kali中实现回连,保存为Snapshot #2
      • 快照三:在Kali中输入dir命令,保存为Snapshot #3
      • 快照四:在kali中执行screenshot指令,保存为Snapshot #4
      • 快照五:在kali中执行getuid指令,保存为Snapshot #5

    •  对比快照1和快照2 
      • 选中要对比的两个快照,点击右下角compare,在view mode中选择only differences方便查看。

      •  点击application,在opened ports中能看到后门 20181313_upxed.exe ,连接的本地地址和目标地址以及端口号

      •  在opened handles中,增加了一些文件,也删除了一些文件,以及键值的变化

      •  在loaded dll中,查看启动后门程序后增加和删除的dll文件

      •  在running processes中,点击 20181313_upxed.exe 显示为SysTracer no registered

    •  对比快照2和快照3 
      • 对根键中的内容进行修改,对注册表中的配置信息进行了修改

      • 在opened ports中看到两次操作间的虚拟机vmnet8间的交互:

      • running processes中,查看多出来的 conhost.exe 
      • Conhost.exe全称是Console Host Process, 即命令行程序的宿主进程。简单的说他是微软出于安全考虑,在windows 7和Windows server 2008中引进的新的控制台应用程序处理机制。

    • 对比快照3和快照4
      • 关闭了 audiodg.exe ,删除了之前建立的调用许多DLL的过程

    • 对比快照4和快照5
      • 发现根键中的内容进行了修改,但无法查看到具体内容

      •  同时,也增加了很多dll文件

    动态分析——使用Process Monitor分析恶意软件

           Process Monitor一款系统进程监视软件,总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统 中的任何文件操作过程,而Regmon用来监视注册表的读写操作过程。 有了Process Monitor,使用者就可以对系统中的任何文件和 注册表操作同时进行监视和记录,通过注册表和文件读写的变化, 对于帮助诊断系统故障或是发现恶意软件、病毒或木马来说,非常 有用。 这是一个高级的 Windows 系统和应用程序监视工具,由优秀的 Sysinternals 开发,并且目前已并入微软旗下,可靠性自不用说。

    • 开启软件可以看到各个进行的详细记录,通过查找功能查看到后门程序的进程,注意全字符匹配。

    • 进程的详细信息如下:

    • 后门程序引用的库如下:

    •  查看引用的.dll单元

     三、实验问题

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

    • 使用windows自带的schtasks指令设置一个计划任务,发现网络连接异常
    • 使用Sysmon,编写配置文件,记录有关的系统日志
    • 使用Process Explorer工具,监视进程执行情况。
    • 使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
    • 使用Systracer拍摄快照,对比不同快照,查看是否有可疑的增删注册表、启动项的行为。
    • 使用wireshark查看自己计算机的端口开放情况,查看未知端口进行可疑的数据传输

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

    • 使用systracer工具分析恶意软件,查看其对注册表和文件的修改。
    • 使用Wireshark进行抓包分析,监视其与主机进行的通信过程。
    • 使用PEiD查看程序是否加壳,加的什么壳
    • 使用Process Explorer工具或Process Monitor工具,监视文件系统、注册表、进程/线程的活动。

    四、实验总结与体会

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

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/bbbbblue/p/14642491.html
Copyright © 2011-2022 走看看