• 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模式捕捉数据包,都无法正确捕捉到内容,使用了同学和学长学姐的方法后仍不成功,这个问题将会继续尝试。

  • 相关阅读:
    achivemq(消息队列)的使用
    java高并发当时处理的思路
    字符串的应用
    正则表达式
    文本文件的读取与写入
    继承
    冒泡排序法
    类与对象
    数据类型
    关键字和语句
  • 原文地址:https://www.cnblogs.com/bbbbblue/p/14642491.html
Copyright © 2020-2023  润新知