zoukankan      html  css  js  c++  java
  • 2018-2019-2 网络对抗技术 20165314 Exp4 恶意代码分析

    一.原理与实践说明

    1.实践目标

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

    2.实践内容概述

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

    3.基础问题回答

    • 问:如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
      使用windows自带的schtasks指令设置一个计划任务,每隔一定的时间对主机的联网记录等进行记录。
      • 使用sysmon工具,通过修改配置文件,记录相关的日志文件。
      • 使用Process Explorer工具,监视进程执行情况。
    • 问:如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
      • 使用systracer工具分析恶意软件。

    二.实践过程记录

    1.使用schtasks指令监控系统

    • 使用schtasks /create /TN netstat5314 /sc MINUTE /MO 5 /TR "cmd /c netstat -bn > c: etstatlog.txt"命令创建计划任务netstat5314,如下图所示:

    其中,TN是TaskName的缩写,我们创建的计划任务名是netstat5314;sc表示计时方式,我们以分钟计时填MINUTE;TR=Task Run,要运行的指令是 netstat -bn,b表示显示可执行文件名,n表示以数字来显示IP和端口。

    • 在C盘中创建一个netstat5314.bat脚本文件(可先创建txt文本文件,使用记事本写入后通过修改文件名来修改文件格式)

    • 在其中写入以下内容:

    date /t >> c:
    etstat5314.txt
    time /t >> c:
    etstat5314.txt
    netstat -bn >> c:
    etstat5314.txt
    
    • 打开任务计划程序,可以看到我们新创建的这个任务:

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

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

    • 统计数据如下:

    • 统计图:

    • 可以看出,联网最多的是chrome,然后是wps,接下来就是虚拟机,显卡驱动啥的 了。

    2.使用sysmon工具监控系统

    • sysmon是微软Sysinternals套件中的一个工具,使用sysmon工具前首先要配置文件。根据老师的要求,最少要记录Event 1,2,3三个事件。即进程创建、进程创建时间、网络连接,如下图所示:
    • 参考使用轻量级工具Sysmon监视你的系统这篇文章,创建配置文件Sysmon20165314.xml。
    • 使用Sysmon.exe -i C:Sysmon20165314.xml安装sysmon。
    • 对配置文件进行修改,将自己感兴趣的过滤器事件和过滤器事件的选项写入。(使用xml文档,是因为其可以按照标签进行缩进和显示,使用Notepad++打开后一目了然。)我修改的配置文件如下:
    <Sysmon schemaversion="4.20">
    <!-- 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>
    <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>
    </FileCreateTime>
    <NetworkConnect onmatch="exclude">
    <Image condition="end with">chrome.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">firefox.exe</TargetImage>
    <TargetImage condition="end with">winlogon.exe</TargetImage>
    <SourceImage condition="end with">powershell.exe</SourceImage>
    </CreateRemoteThread>
    </EventFiltering>
    </Sysmon>
    

    参数解释:

    • exclude相当于白名单,不用记录。include相当于黑名单。
    • Image condition这里要根据自己使用的浏览器更改,例如谷歌浏览器是“chrome.exe”,IE浏览器是“iexplore.exe”,火狐浏览器是“firefox.exe”我用的是360浏览器和火狐浏览器写在exclude中就是不记录由360浏览器和火狐浏览器创建的进程。想知道自己浏览器进程名,可以查看“netstat5318.txt”中的记录。
    • 进程创建时间类似,也是不创建浏览器创建进程的时间。
    • 网络连接过滤掉了浏览器的网络连接、源IP为127.0.0.1的网络连接和目的端口为137的连接服务,并查看目的端口为80(http)和443(https)的网络连接。
      • 137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。
      • 127.0.0.1表示本机IP。
    • 远程线程创建记录了目标为explorer.exe、svchost.exe、firefox.exe、winlogon.exe和powershell.exe 的远程线程。
      • explorer.exe是Windows程序管理器或者文件资源管理器
      • svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
      • winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出。
      • powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
        安装sysmon:执行命令sysmon.exe -i C:UsersAdministratorSysmonsysmon5314.xml,成功安装结果如下:

    查看“事件查看器”,选择日志的位置,应用程序和服务日志/Microsoft/Windows/Sysmon/Operational,在这里,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别、详细信息等。

    这个配置文件记录的第一个日志就是打开配置文件

    后门程序分析

    根据这则日志:可以发现是这个后门程序,通过本地端口50772向IP为192.168.1.107的5314端口发送TCP请求链接

    恶意软件分析

    • 静态分析
      • 文件扫描(VirusTotal、VirusScan工具等)
      • 文件格式识别(peid、file、FileAnalyzer工具等)
      • 字符串提取(Strings工具等)
      • 反汇编(GDB、IDAPro、VC工具等)
      • 反编译(REC、DCC、JAD工具等)
      • 逻辑结构分析(Ollydbg、IDAPro工具等)
      • 加壳脱壳(UPX、VMUnPacker工具等)

    3、使用VirusTotal分析恶意软件

    • 把生成的恶意代码放在VirusTotal进行分析,基本情况如下:

    • 查看这个恶意代码的基本属性:

    • 可以看出它的SHA-1、MD5摘要值、文件类型、文件大小,以及TRiD文件类型识别结果。(注:TRiD通过读取文件头,根据特征码进行文件类型匹配。)

    • 还可以看到加壳情况:

    • 以及该恶意代码的算法库支持情况:

    4、使用PEiD分析恶意软件

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

    • 先看一下没有加壳的后门程序:

    • 再看一下加过压缩壳的后门程序:

    • 再看一下加过加密壳的后门程序:

    不难看出,这个软件虽然可以查到压缩壳,但是查不到加密壳

    5、使用Process Monitor分析恶意软件

    Process Monitor 是一款由 Sysinternals 公司开发的包含强大的监视和过滤功能的高级 Windows 监视工具,可实时显示文件系统、注册表、进程/线程的活动。

    • 打开软件,可以看到各个进程的详细记录,下图是我的后门进程:

    • 进程的详细信息如下:

    • 我们还可以看到这个后门程序引用的各种其他的库

    7.使用Process Explorer分析恶意软件

    Process Explorer是由Sysinternals开发的Windows系统和应用程序监视工具,目前已并入微软旗下。不仅结合了Filemon(文件监视器)和Regmon(注册表监视器)两个工具的功能,还增加了多项重要的增强功能。包括稳定性和性能改进、强大的过滤选项、修正的进程树对话框(增加了进程存活时间图表)、可根据点击位置变换的右击菜单过滤条目、集成带源代码存储的堆栈跟踪对话框、更快的堆栈跟踪、可在 64位 Windows 上加载 32位 日志文件的能力、监视映像(DLL和内核模式驱动程序)加载、系统引导时记录所有操作等。

    • 靶机运行后门程序进行回连时,我们可以在 Process Explorer工具中查看到其记录,我们可以看到这个程序运行时子程序中有conhost.exe这个程序,同样的程序我们可以在cmd.exe的子程序中看到,由此我们可以知道该程序是在命令行中运行的。

    • 也可以详细查看该进程使用的CPU,虚拟内存空间、物理内存空间、I/O等。

    7、使用systracer分析恶意软件

    • 先在win7虚拟机安装SysTracer软件。首先下载完成后进行安装,步骤为:agree->选第二个->设置监听端口号

    • 点击右侧的take snapshot,存储快照

      • 快照一:未运行后门程序,保存为Snapshot #1
      • 快照二:运行后门程序并在kali中实现回连,保存为Snapshot #2
      • 快照三:在kali中使用dir指令,保存为Snapshot #3
      • 快照四:在kali中使用record_mic指令,保存为Snapshot #4

    • 通过右下角的compare键或者View Differences Lists比对各快照,可以选择Only Difference只查看不同的项

    • 对比快照一和快照二:后门启动前后

      • 可以看到新增的后门进程,而且可以详细看到其的目的IP和端口号、源IP和端口号以及连接的协议:

      • 而且该后门程序生成了很多文件、目录和键值

    • 对比快照二和快照三:kali上执行dir指令

      • key_local_machine根键中的内容进行了修改(HKEY_LOCAL_MACHINE保存了注册表里的所有与这台计算机有关的配置信息)
    • 此外我们可以通过查看后门软件的“opened handles”来对比他们都做了什么

    实验中遇到的问题及解决方法

    • 在安装sysmon时,提示权限不够
      • 右键windows图标,选择“命令提示符(管理员)”

    实验心得与体会

    本次实验,嗯,简单,主要是下载安装软件并应用,重点在于如何利用这些软件分析恶意代码。在不断实践的过程中,我掌握了很多种工具的用法,学会了把命令行下的结果记录到文件中、利用excel分析数据、利用Sysmon监控事件、如何写配置文件、如何分析日志中的大量信息、如何利用多种工具对恶意代码进行进一步分析。
    
    开心啊昨天出去玩了一天今天终于把实验补完了下次要早点做完才能出去玩呢
  • 相关阅读:
    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc
    Atitit. C#.net clr 2.0  4.0新特性
    Atitit. C#.net clr 2.0  4.0新特性
    Atitit.通过null 参数 反射  动态反推方法调用
    Atitit.通过null 参数 反射  动态反推方法调用
    Atitit..net clr il指令集 以及指令分类  与指令详细说明
    Atitit..net clr il指令集 以及指令分类  与指令详细说明
    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
    Atitit.跨语言反射api 兼容性提升与增强 java c#。Net  php  js
  • 原文地址:https://www.cnblogs.com/zhangshuai9345/p/10660389.html
Copyright © 2011-2022 走看看