2020-2021-2 网络对抗技术 20181318 Exp4 恶意代码分析

一、实验目标

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

二、实验内容

  • 系统运行监控

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

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

三、基础知识

1. 恶意代码

  • 定义:泛指指没有作用却会带来危险的代码,即使计算机按照攻击者的意图运行以达到恶意目的的指令集合。
    • 指令集合: 二进制执行文件, 脚本语言代码, 宏代码, 寄生在文件、启动扇区的指令流
  • 特征:①本身是计算机程序 ②有恶意的目的 ③ 通过执行发生作用
  • 目的:技术炫耀/恶作剧、远程控制、窃取私密信息、盗用资源、 拒绝服务/破坏,...
  • 常见的恶意代码:计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、Rootkit、逻辑炸弹...
    • 计算机病毒:需要传播受感染的驻留文件来进行复制,一般需要宿主程序被执行或人为交互才能运行。普通病毒的传染能力主要是针对计算机内的文件系统而言。
    • 蠕虫:是一种通过网络传播的恶性病毒,它不使用驻留文件即可在系统之间进行自我复制,蠕虫病毒的传染目标是互联网内的所有计算机。

2. schtasks

  • 定义:计划命令,程序以定期或在特定时间运行,在计划中添加和删除任务,启动和停止按需任务,以及显示和更改计划任务。

  • schtasks.exe 工具与 控制面板 中的 "计划任务" 执行相同的操作。

  • 语法:schtasks +参数 参数如下:

    • change:更改任务
    • create:计划新的任务。
    • delete:删除计划任务。
    • end:停止任务启动的程序。
    • query:显示计划在计算机上运行的任务。
    • run:立即启动计划任务。
  • 实例

    `schtasks /create /TN netstat1318 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:
    etstatlog.txt`
    
    • TN:Task Name,本例中是netstat1318
    • SC:表示计时方式,我们以分钟计时填MINUTE
    • MO:MOdifier
    • TR:Task Run,要运行的指令是 netstat
    • bn:b表示显示可执行文件名,n表示以数字来显示IP和端口
    • >:表示输出重定向,将输出存放在c: etstatlog.txt文件中

    备注:

    /Tn/s 参数用于识别任务。 /Tr/ru/rp 参数指定可以更改的任务的属性

    /Ru/rp 参数指定运行任务所用的权限。 /U/p 参数指定用于更改任务的权限。

  • 具体使用说明请参考Microsoft官方文档

3.sysmon

  • sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。

  • sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。

  • 可选择的事件过滤器有:

    • ProcessCreate 进程创建
    • FileCreateTime 进程创建时间
    • NetworkConnect 网络链接
    • ProcessTermina 进程结束
    • DriverLoad 驱动加载
    • ImageLoad 镜像加载
    • CreateRemoteTh 远程线程创建
    • RawAccessRead 驱动器读取
    • ProcessAccess 进程访问
    • FileCreate 文件创建
    • RegistryEvent 注册表事件
    • FileCreateStre 文件流创建

    详细说明请参考使用轻量级工具sysmon监视你的系统

  • 监控系统的基本操作可分为以下三步:

    • 确定要监控的目标:写好过滤条件(相当于白名单),多多益善,信任的程序尽量不要记到日志里(日志多了不好分析)。
    • 写好配置文件.xml文件
      • 记录所有网络连接就可以简单写为<NetworkConnect>*</NetworkConnect>
      • exclude相当于白名单,凡是未声明的都记录下来。include相当于黑名单。
      • 注意规则大小写敏感。
    • 启动sysmon

四、实验过程

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

  • 在命令行中输入以下命令,创建任务计划netstat1318

    `schtasks /create /TN netstat1318 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:
    etstatlog.txt`
    

    image

  • 在C盘中创建一个netstat1318.bat脚本文件,写入以下内容

    date /t >> c:
    etstat1318.txt
    time /t >> c:
    etstat1318.txt
    netstat -bn >> c:
    etstat1318.txt
    
  • 在任务计划程序中找到计划任务

  • 编辑计划任务,使其运行正确的脚本文件,也就是我们刚刚编写的.bat

image

  • 编辑完成后,右键选择运行,此时可以在C盘目录下看到以下三个文件

image

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

image

  • 当记录比较长的时间后,我们已经获得比较丰富分记录数据,此时停止任务,将所得数据在Excel中进行分析。

    • 导入文本数据:新建excel文件->选择上方“数据”->选择“导入数据”->选择“导入数据”->选择“直接打开数据文件”

    image

    • 选择数据源文件:在C盘中选中netstat1318.txt

      image

    • 依次选择其他编码、分隔符号,然后将分隔符号的所有选项都选中,点击完成即可

      image
      image

  • 创建数据透视图

    • 选中我们所要分析的列,选择“插入”——数据透视图——新工作表

    image

    • 在新的工作表中,在右侧字段列表中筛选我们不需要的字段

    image

    • 将字段列表拖到下方的中,就生成了我们所需的数据透视图

    image

image

  • 分析
    • 从图中可以看出连网最多的就是Edge浏览器,连接的外部地址是我打开的相关页面的,大多为http和https连接
    • 第二个多的就是VMware,这是因为在做实验,打开了虚拟机
    • 接着可以看到有WeChat、wps、typora、sougou等程序,在做实验的时候这些确实在使用,且连网了
    • 有一个叫做QQPCTray.exe的连网频率也比较高,查资料后知道它是腾讯公司推出的qq电脑管理程序软件。该程序是对用户的系统进行安全检测、修复漏洞及木马查杀等功能。
    • 还有一个叫做sesvc.exe的进程,它是360浏览器的进程,因为今天在教室连接教学楼wifi的时候使用了360浏览器,所以出现此进程也是正常的。
    • 还可以看到实验二中生成的后门程序20181318_backdoor也进行连网了,这是因为我在后续的实验中尝试与kali机进行回连。
      • 从下图中我们可以看到,目的地址和端口号就是我们在用msf生成后门程序时所设定的,ip=kali机地址,端口=1318
        image

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

(1)明确要监控的目标,我在这里选择的是:进程创建ProcessCreate、进程创建时间FileCreatTime、网络连接NetworkConnect、远程线程创建CreateRemoteThread。

(2)写好配置文件sysmon2018138.xml,内容如下:

<Sysmon schemaversion="4.12">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <ProcessCreate onmatch="exclude">     
      <Image condition="end with">msedge.exe</Image> 
      <Image condition="end with">360se.exe</Image>
    </ProcessCreate>

    <ProcessCreate onmatch="include"> 
      <ParentImage condition="end with">cmd.exe</ParentImage>
    </ProcessCreate>

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">msedge.exe</Image>
      <Image condition="end with">360se.exe</Image>
    </FileCreateTime>
    
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">msedge.exe</Image>
      <Image condition="end with">360se.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相当于黑名单。

  • ProcessCreate:进程创建。Image condition要根据自己使用的浏览器更改。由于我使用的是360和edge浏览器,所以在我的配置文件中,排除了(不记录)进程名为msedge.exe和360se.exe的进程。但是要记录以cmd.exe结尾的进程记录。

  • FileCreatTime:进程创建时间。这里排除(不记录)浏览器进程的创建时间。

  • NetworkConnect:网络连接。过滤掉(不记录)浏览器的网络连接,源IP地址为127.0.0.1、源端口为137的连接服务。包含(记录)目的端口为80(http)和443(https)的网络连接。

    • 137端口:提供局域网中ID或IP查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。
    • 127.0.0.1:环回地址,表示本机。
  • CreateRemote:远程线程创建。记录的线程如下:

    • explorer.exe:Windows程序管理器或者文件资源管理器
    • svchost.exe:一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
    • winlogon.exe:Windows NT 用户登陆程序,用于管理用户登录和退出。
    • powershell.exe:专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。

(3)启动sysmon(要以管理员的身份运行命令行)

  • 输入命令Sysmon64.exe -i sysmon20181318.xml,安装sysmon,结果如下:

image

  • 查看“事件查看器”,选择日志的位置,应用程序和服务日志/Microsoft/Windows/Sysmon/Operational

image

在这里,我们可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别、详细信息等。

  • 我们随意选中一条日志进行分析
    image
    image
    从图中可以看到进程号、路径、源ip、源端口、目的ip、目的端口(80),使用的是http协议

  • 运行我们在实验二中生成的后门程序20181318_backdoor.exe,并启动回连到kali虚拟机中。我们可以在事件查看器中找到此条日志
    image

  • 紧接着,我在msf监听环境下,输入了shell指令,获得了Windows的cmd,日志如下:
    image
    在获取到命令行后,我发现了一条有关conhost.exe的记录
    image
    Conhost.exe进程是微软为其Vista以及Win7、Windows 2008(服务器版)系统定义的系统文件,在系统中被称为“控制台窗口主机”。其功能主要是为命令行程序(cmd.exe)提供类似于Csrss.exe进程的图形子系统等功能支持,

  • 然后又输入了ipconfig指令,日志如下:
    image
    我们可以发现,此时的路径变为了SysWOW64,这是个什么文件夹呢?与system32有什么区别和联系呢?

    • SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。
    • Windows下面的命令行是64位的,而kali回连获得的是32位的,所以会出现此条日志。
  • 在事件查看器中,我们可以发现许多svchost.exe的记录。svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

  • 我们还可以发现,RuntimeBroker.exe的占比也很高,查资料知道, Runtimebroker.exe是Win10系统的一个核心进程,用来进行Metro App权限管理的一个进程。

  • SearchFilterHost.exe的出现频率也很高,它是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,让用户能够更好的搜索出电脑中的任意资料。它会在计算机空闲时自动扫描索引位置的文件名、属性信息和给定类别的文件内容,这些索引位置默认包括桌面、收藏夹、开始菜单、系统目录。

3.使用VirusTotal分析恶意软件

  • 把生成的后门程序在VirusTotal进行分析(也可以使用VirusScan工具),结果如下:52/69,被杀软查出来的比率还是蛮高的

image

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

image

  • 还可以看到此软件的头部、各个节的相关信息,以及引入的动态链接库

image

  • 如果是加了壳的程序,还可以看出它使用的加壳的相关信息。

4.使用PEiD分析

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

  • 首先我们用它来检查最普通的后门程序20181318_backdoor.exe
    image
    发现什么也没有查到,这是正确的结果

  • 接着我们来检查一下使用了压缩壳的软件
    image
    发现他查到了压缩壳的相关信息

  • 再来检查经过压缩壳又加上了加密壳的软件
    image
    诶,结果和上面的一样,只查出来了压缩壳的信息,这是为什么呢?难道peid检查不出来加密壳吗?

  • 最后检查一下只用了加密壳的软件
    image
    结果证明,他确实检查不出来加密壳的存在,我猜测是他不认识这个壳,它的库里面没有这个壳的相关信息,看来它的功能也不是那么强大。

5.使用PE Explorer分析

  • PE Explorer是一款资源编辑器,它支持直接查看、修改软件的资源,包括菜单、对话框、字符串表等,软件还具备有W32DASM 软件的反编译能力和PEditor软件的PE文件头编辑功能。

  • 我们用它打开1318_upx.exe,我们可以看到这个软件的文件头信息(基本信息),比如节对齐粒度、文件对齐粒度、时间戳、映像基址ImageBase等等

image

  • 我们通过视图还可以查看数据目录、节头等详细信息

image

image

image

  • 通过视图——引入可以查看此软件引用的dll

image

  • 相关dll说明

    • kernel32.dll:Windows 中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
    • user32.dll:Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。它是一个对系统很关键或很可疑的文件,易遭受木马病毒破坏导致系统找不到此文件,出现错误提示框。
    • msvcrt.dll:微软在windows操作系统中提供的C语言运行库执行文件。
    • wsock.dll:Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。

    我检查其他几个后门程序后发现,他们都引用了kernel32.dll,可以看出他对于后门程序的重要性

6.使用Process Monitor分析

  • Process Monitor 是一款由 Sysinternals 公司开发的包含强大的监视和过滤功能的高级 Windows 监视工具,可实时显示文件系统、注册表、进程/线程的活动。总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统中的任何文件操作过程,而Regmon用来监视注册表的读写操作过程。

  • 打开软件,可以看到此时计算机各个进程的详细记录,包括时间、进程名、进程ID、操作、路径等。下图是我的后门进程20181318_backdoor.exe
    image

  • 后门进程的事件属性如下:
    image

  • 后门进程引用的各种库如下:
    image

7.使用systracer动态分析

点击右侧的take snapshot,拍摄快照。点击start开始,不用点击stop,当拍摄完毕会自动停止。我们总共截了以下四张快照:

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

接下来我们对比快照,分析恶意软件在执行过程中系统有哪些变化

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

  • 对比快照一和快照二(后门程序移植前后)

image

image

发现增加了我的后门程序

image

image

可以看到增加、删除了一些文件、目录,键值也有变化

  • 对比快照二和快照三(后门程序运行前后)
    点击application,在opened ports中我们能看到后门连接的相关信息

image

opened handles中,可以看见增加了一些文件,也删除了一些文件

image

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

image

c:WindowsPrefetch目录下相关文件有变动

image

  • 对比快照三和快照四(kali机输入dir)

我们可以看到在输入dir后,VMware有增加和删除的操作

image

loaded dll中,可以看到增加和删除的dll文件

image

  • 对比快照四和快照五(kali机输入record_mic)

可以发现注册表有变化

image

新建了很多连接,其中有与后门程序相关的Apache HTTP Server

image

loaded dll中,可以看到增加和删除的dll文件

image

8.使用wireshark抓包分析恶意软件

  • 运行后门20181318_backdoor.exe,在kali中回连。把过滤规则设置为ip.addr == 192.168.174.129,只留下与kali机有关的包

  • 我们可以看到前三个包为TCP连接的三次握手
    image

  • 在kali中输入dir,发现wireshark又捕获到了许多PSH+ACK包,可以判断有数据在传输
    image

五、实验后问题回答

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

  • 使用windows自带的schtasks指令,设置一个计划任务,监视系统进程的运行情况。在一段时间后,将所得数据在Excel中得到数据透视图,继续进行分析。
  • 使用Sysmon,编写配置文件,记录有关的系统日志
  • 使用Process Explorer工具,监视进程执行情况。
  • 使用Process Monitor工具,监视文件系统、注册表、进程/线程的活动。
  • 使用SysTracer,一定时间间隔拍摄一张快照,对比不同快照,查看是否有可疑行为

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

  • 静态分析

    • 使用virustotal或virscan,对恶意软件进行分析,可以得到它的基本属性、头部、各个节以及引用的链接库的信息
    • 使用PEiD,查看恶意软件是否加壳,加的什么壳
    • 使用PE Explorer,查看恶意软件的PE头、数据目录、节头表信息,以及引用的链接库的信息
    • 使用String工具,分析恶意程序是否包含可疑字符串
  • 动态分析

    • 使用SysTracer,查看此恶意软件对注册表和文件的修改
    • 使用Wireshark抓包,分析恶意软件的通信过程
    • 使用Process Explorer或Process Monitor,监视文件系统、注册表,分析恶意软件的活动

六、实验中的问题

  1. 在编辑好任务计划后,右击运行,在c盘目录下一直不出来netstat1318.txt文件
  • 原因:在编辑任务计划时,“条件”选项卡中电源选项的默认操作为“只有在计算机使用交流电源时才启动此任务”,在使用电池电源时停止任务。而我在做实验时并没有给电脑充电,所以任务计划一直没有运行。
    image
  • 解决方法:将此默认设置勾选掉,这样电脑就算不充电也可以正常运行任务计划。
  1. 在安装sysmon的时候出现以下报错:
    image
  • 原因:在配置文件sysmon20181318.xml中,版本号写的不对
  • 解决方案:将xml文件的第一行,版本号改为3.10即可
    image
  1. 不知道为什么,所有的后门程序都无法回连kali虚拟机了
    image
  • 解决方案:将kali的网络配置换为桥接模式

七、实验心得

这次实验做的真的是头大,感觉做之前的准备工作没有做好,导致做的时候一头雾水。本次实验用到了很多工具,之前都没有使用过,而且这些软件都是英文的,所以也花了很长时间在研究工具的使用上。这个SysTracer真是坑人,竟然只能抓五张快照,多抓就告诉没有内存了。

本次实验的重点是使用这些软件进行恶意软件的分析,做完整个实验,我学到了一些监视计算机系统的方法,比如说用windows自带的schtasks指令设置一个计划任务,可以获取当前所有进程的网络连接情况;使用Sysmon,记录有关的系统日志......静态分析我觉得还比较容易,但是动态分析就完全不行了。我觉得最难理解的就是SysTracer这个软件抓到的快照对比分析,可能是因为我对本身系统就不够了解,所以不知道每个地方出现的差异都是什么,不能准确地分析为什么会出现这些差异,整个实验做下来都是看学长学姐和课题负责人的博客依葫芦画瓢、来蒙带猜,以后还是需要加强这方面的学习。

原文地址:https://www.cnblogs.com/jjy-666/p/14640408.html