Exp4 恶意代码分析 实验报告—20201229赵斌

发布时间 2023-04-06 21:59:29作者: 20201229赵斌

Exp4 恶意代码分析 实验报告—20201229赵斌

一、实验目标

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 netstat1229 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > d:\netstatlog.txt

TN:Task Name,本例中是netstat1229
SC:表示计时方式,我们以分钟计时填MINUTE
MO:MOdifier
TR:Task Run,要运行的指令是 netstat
bn:b表示显示可执行文件名,n表示以数字来显示IP和端口
">":表示输出重定向,将输出存放在d:\netstatlog.txt文件中

  • 备注:
    • /Tn 和 /s 参数用于识别任务。 /Tr、 /ru 和 /rp 参数指定可以更改的任务的属性
    • /Ru 和 /rp 参数指定运行任务所用的权限。 /U 和 /p 参数指定用于更改任务的权限。

3.sysmon

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

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

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

    • ProcessCreate 进程创建
    • FileCreateTime 进程创建时间
    • NetworkConnect 网络链接
    • ProcessTermina 进程结束
    • DriverLoad 驱动加载
    • ImageLoad 镜像加载
    • CreateRemoteTh 远程线程创建
    • RawAccessRead 驱动器读取
    • ProcessAccess 进程访问
    • FileCreate 文件创建
    • RegistryEvent 注册表事件
    • FileCreateStre 文件流创建
  • 监控系统的基本操作可分为以下三步:

    • 确定要监控的目标:写好过滤条件(相当于白名单),多多益善,信任的程序尽量不要记到日志里(日志多了不好分析)。

      写好配置文件.xml文件

      • 记录所有网络连接就可以简单写为<NetworkConnect>*</NetworkConnect>
      • exclude相当于白名单,凡是未声明的都记录下来。
      • include相当于黑名单。
      • 注意规则大小写敏感。
  • 启动sysmon

四、实践过程

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

  • 在搜索框输入cmd进行搜索,点击以管理员权限运行,进入到命令窗口后,输入net user administrator /active:yes使用管理员权限运行命令

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

schtasks /create /TN netstat1229 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > d:\netstatlog.txt
  • 在D盘中创建一个脚本文件 netstat1217.bat
    因为不能直接写入.bat文件,所以我在D盘创建了一个netstat1229.txt文本文件,并写入以下内容:
date /t >> d:\netstat1229.txt 
time /t >> d:\netstat1229.txt 
netstat -bn >> d:\netstat1229.txt
  • 修改后缀名为.bat

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

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

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

  • 创建完成后,我编辑属性,勾选上这个脚本“使用最高权限运行”。然后再右键点击运行

  • 这时可以看到D盘下出现了三个文件,如下图示:

  • 在wps的Excel表格中分析记录的数据

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

    • 选择数据源文件:在F盘中(这里按照自己生成的位置)选中netstat1229.txt

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

  • 创建数据透视图

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

    • 如果提示不能创建数据透视表,大家可以把数据的前面几行空白行删掉。(没有问题这步可以跳过)

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

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

  • 分析:

    • 从图中可以看出位居第一位的是TCP,连接的外部地址是我打开的相关页面的,大多为http和https连接;
    • 第二个多的就是msedge.exe,msedge.exe 进程属于 Microsoft Edge,它是 Microsoft Internet Explorer Web 浏览器的继任者。这段时间我经常使用 Microsoft Edge,所以它的占比还是比较高的。
    • 第三个多的是SLBrowser.exe,是我的联想浏览器。
    • svchost.exe是是系统共享进程,我们可以把他理解为一个宿主或者容器,本身没有任何服务功能。
    • 其他的就是wps.exe和它的相关的进程。还有wechat.exe,因为我当时电脑这些应用一直是处于登录状态。

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

(1)明确要监控的目标。

我在这里选择的是:

  • 进程创建ProcessCreate
  • 进程创建时间FileCreatTime
  • 网络连接NetworkConnect、远程线程创建CreateRemoteThread

(2)编写xml配置文件:

在sysmon所在的文件夹下:

<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> 
    </ProcessCreate>

    <FileCreateTime onmatch="exclude" >
      <Image condition="end with">chrome.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">winlogon.exe</TargetImage>
      <SourceImage condition="end with">powershell.exe</SourceImage>
    </CreateRemoteThread>
  </EventFiltering>
</Sysmon>

参数解释:

  • exclude:相当于白名单,不用记录。include相当于黑名单。
  • ProcessCreate:进程创建。Image condition要根据自己使用的浏览器更改。由于我使用的是Chrome浏览器,所以在我的配置文件中,排除了(不记录)进程名为Chorme.exe的进程。但是要记录以cmd.exe结尾的进程记录。(大家如果有用别的浏览器的:比如Edge,在这里可以替换)
  • 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.exeWindows NT 用户登陆程序,用于管理用户登录和退出。
  • powershell.exe:专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。

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

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

(4)使用事件查看器分析进程

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

img

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

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

img

  • 随后,我在msf监听环境下,输入了shell指令,获得了Windows的cmd
    img

日志如下:

img

  • 在获取到命令行后,我还发现了一条有关conhost.exe的记录
    img
    • 上网搜索资料后,我了解到conhost.exe进程是微软为其Vista以及Win7、Windows 2008(服务器版)系统定义的系统文件,在系统中被称为“控制台窗口主机”。其功能主要是为命令行程序(cmd.exe)提供类似于csrss.exe进程的图形子系统等功能支持。
  • 然后我又输入了ipconfig指令,日志如下:
    img
    • 我们可以发现,此时的路径变为了SysWOW64,这是个什么文件夹呢?与system32有什么区别和联系呢?
      • SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方。
      • Windows下面的命令行是64位的,而kali回连获得的是32位的,所以会出现此条日志。
      • 在事件查看器中,我们还可以发现许多svchost.exe的记录。svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

3.使用VirusTotal分析恶意软件

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

img

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

img

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

img

5.使用Process Explorer进行分析

工具下载链接

  • PE Explorer是一

6.使用Systracer动态分析

工具下载链接

点击右侧的take snapshot,拍摄快照。点击start开始,不用点击stop,当拍摄完毕会自动停止。

img

我们总共截了以下五张快照:

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

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

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

  • 对比快照一和快照二(后门程序运行前后)

    • 点击View Differences Lists——>选中Only differences——>选中Opened Ports

    • 可以看到新增开放了我们的后门程序20201217_door.exe连接的本地地址和目标地址以及端口号

    • Opened Handlers中,我们可以看到增加了一些和后门有关的文件,也删除了一些文件,发生了键值的变化

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

    • running processes中,点击 20201217_door.exe可以与看到与此后门程序相关的系统进程。

  • 对比快照2和快照3 (3运行了dir指令)

    • 点击Register,可以看到快照3对根键中的内容进行了修改,对注册表中的配置信息进行了修改

    • opened ports中看到主机端口与虚拟机ip及相关端口间的交互:

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

  • 对比快照3和快照4(4使用了screenshot和record_mic指令)

    • 我们发现多出来了svchost程序

      • svchost.exe是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
    • 删除和更改了之前建立的调用许多DLL的过程

  • 对比快照4和快照5(5使用了getuid指令)

    • 可以发现注册表有变化

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

    • opened ports中,可以看到新建连接的SYN消息包信息和端口号1217。

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

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

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

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

五、实验后问题回答

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

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

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

  • 静态分析
    • 使用virustotalvirscan,对恶意软件进行分析,可以得到它的基本属性、头部、各个节以及引用的链接库的信息
    • 使用PEiD,查看恶意软件是否加壳,加的什么壳
    • 使用PE Explorer,查看恶意软件的PE头、数据目录、节头表信息,以及引用的链接库的信息
    • 使用String工具,分析恶意程序是否包含可疑字符串
  • 动态分析
    • 使用SysTracer,查看此恶意软件对注册表和文件的修改
    • 使用Wireshark抓包,分析恶意软件的通信过程
    • 使用Process ExplorerProcess Monitor,监视文件系统、注册表,分析恶意软件的活动

六、实验总结与体会