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

一、基础知识

1.1 对恶意代码的认识

使计算机按照攻击者的意图运行以达到恶意目的的指令集合(Malware is a set of instructions that run on your computer and make your system do something that an attacker wants it to do.)。指令集合包括二进制执行文件, 脚本语言代码, 宏代码, 寄生在文件、启动扇区的指令流等。

恶意代码目的包括技术炫耀/恶作剧, 远程控制, 窃取私密信息,盗用资源, 拒绝服务/破坏等。

1.2 恶意代码的分类

计算机病毒, 蠕虫, 恶意移动代码, 后门, 特洛伊木马, 僵尸程序, Rootkit等。计算机病毒是最早出现的恶意代码,但不等同于是恶意代码。但是由于媒体/工业界的概念混淆,经常以计算机病毒(Computer Virus)等价于恶意代码。

虽然恶意代码有很多种分类,但是在实际应用中它们之间并没有泾渭分明的界限,一个恶意软件(恶意代码)更像是一个大杂烩,很难说到底是后门、木马还是后门木马或是其他类型。因此对每种恶意代码的定义也不需要死记硬背,只关注关键信息即可,比如病毒具有传染性,感染文件并且从一个文件传染到另一个文件;蠕虫通过网络传播爬来爬去;后门就是未经授权;木马就是善于隐藏(木马和后门相似度很高,怎么说都没关系);僵尸程序是一对多的控制机制,组成僵尸网络,也不可否认它是木马、后门。不必刻意区分死抠概念,它们往往都是融合在一起的。

1.3 恶意代码的分析

静态分析:通过反病毒引擎扫描识别已知的恶意代码家族和变种名;逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。

img

图1-1 恶意代码静态分析方法列表

动态分析:通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。

img

图1-2 恶意代码动态分析方法列表

1.4 实验目标

  • 监控你本机的运行状态,看是否有可疑的程序在运行。

  • 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。

  • 学以致用,提高信息安全防范意识和能力。如果将来工作中发觉自己主机有问题,要能够想到本次实验中的思路,有能力排查出安全隐患。先通过系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质,采取有力措施进行弥补。


二、实验内容及步骤

2.1 系统运行监控

2.1.1 Windows计划任务

一个简单的实现,每分钟记录一下有哪些程序在连接网络。

schtasks /create /TN netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstat4303.txt"

下面是一些参数的含义:

  • TN:Task Name,指定唯一标识此计划任务的名称,本例中是netstat4303,那么任务计划程序库中就会出现一个叫这个名字的计划任务。
  • SC: SChedule type,本例中是MINUTE,以分钟来计时。
  • MO: MOdifier,改进计划类型以允许更好地控制计划重复周期。
  • TR: Task Run,指定在这个计划时间运行的程序的路径和文件名。要运行的指令是 netstat -bn,b表示显示可执行文件名,n表示以数字来显示IP和端口。
  • >:将连接记录结果保存在桌面的netstat4303.txt文件中。

图1

根据命令是每分钟记录一次本机的联网情况,但是目前这种情况不知道这海量的连接是什么时候记录的。可以通过下面的方法让记录更具有可读性。

新建一个记事本文件,向其中写入如下内容:

date /t >> c:\netstat4303.txt
time /t >> c:\netstat4303.txt
netstat -bn >> c:\netstat4303.txt

上述内容中的路径是用于记录连接的那个txt文件,写入并保存后将新建的这个记事本的文件名后缀改成bat。然后按"win+r"输入,taskschd.msc,打开任务计划程序。从中找到刚刚通过命令行新创建的计划任务netstat4303

图2

图2中选中的就是用于每隔一分钟记录本机网络连接信息的任务。右键单机它点开属性,进入图3所示的属性设置界面。

图3

在图3所述的属性界面,在“操作”里面编辑“启动程序”,并在新弹出的界面,把“程序或脚本”改成自己刚刚新建的那个批处理文件。下面的“添加参数”删掉为空。如图4所示,在“常规”界面选中“使用最高权限运行”。

图4

设置完毕后,可以看到图中所示的样子,每分钟记录的时候都会显示记录的日期和时间,非常详细。

图5

为便于分析,可使用特定工具整理这海量连接信息,下面是在WPS表格工具中的执行步骤。

图6

选择“数据”-“导入数据”,数据来源选择netstat4303.txt,后面的选择一切都以预览效果最佳为准,因为在设置的同时可以实时看到这样设置后的预览效果。编码方式选择ANSI/OEM-简体中文GBK;下一步选择使用“分隔符号”,具体选Tab键、逗号、空格;列数据类型选择“常规”。未提到的设置均默认即可。然后netstat4303.txt文件里面的数据就转移到了表格工具中。

图7 19:36记录的部分连接

图8 20:02记录的部分连接

加入过计时的批处理文件后,第一次有时间记录的是图7中的19:36,最后一次有时间记录的是图8中20:02,算上建立bat文件并进行后续设置所用的时间,我的总的记录时间大概是26分钟。有了表格中的这些数据,下面利用他们制表。

图9

按图9所示,在“插入”中选择“数据透视图”,选中数据区域,然后在新工作簿中生成一个数据透视图。对于该透视图要进行进一步的过滤,剔除掉那些不在统计范围内的信息。

图10

按图10所示,在字段列表中去掉“TCP”、“协议”、“周五”等这种无效字段,将协议字段拖动到下方的两个区域中,得到下面图11所示的数据表。

图11

在此基础上,依据此数据透视表制作出图标,就可以清晰的看到联网信息的统计图了.

图11是26分钟本机上建立的所有的网络连接的次数统计。可以看出[SLBrowser.exe][wps.exe]进程的连接建立次数遥遥领先,分别是联想浏览器和WPS,其他进程还有微信、阿里、office等应用程序和一些系统进程。没有发现明显的恶意软件。对于系统进程或者说对任何进程来说,可以通过任务管理器打开文件所在位置,以查看它到底是正牌的还是假冒的。

2.1.2 sysmon

Sysmon是微软Sysinternals套件中的一个工具。可以监控几乎所有的重要操作。

首先需要通过微软官网下载sysmon工具,将压缩包里面的内容解压到同一个地方。

其次需要写一个XML配置文件:sysmon.xml,内容如下:

<Sysmon schemaversion="4.50">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <DriverLoad onmatch="exclude">
      <Signature condition="contains">microsoft</Signature>
      <Signature condition="contains">windows</Signature>
    </DriverLoad>
     
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">chrome.exe</Image>
      <Image condition="end with">iexplorer.exe</Image>
      <SourcePort condition="is">137</SourcePort>
      <SourceIp condition="is">127.0.0.1</SourceIp>
    </NetworkConnect>
  <NetworkConnect onmatch="include"><DestinationPort condition="is">4313</DestinationPort><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>

把该配置文件保存到sysmon工具所在的目录下。然后在Windows命令行中进入到该目录下,执行命令:.\Sysmon.exe -i,安装sysmon工具。这里的命令行用管理员身份打开,方法就是鼠标右键单击win菜单,选择“Windows Powershell(管理员)(A)”

图12

在管理员命令行执行安装命令,在弹窗里面选择“Agree”,等待安装完毕。

图13

图13是安装成功的截图,接下来我们需要按XML文件配置sysmon工具,执行命令:.\Sysmon.exe -c sysmon.xml,以更新sysmon工具。

图14

我们这里先打开服务工具,查看sysmon服务是否开启,可以看到它的状态是正在运行。

图15

sysmon工具安装完毕后,可以在kali中运行一下以往生成的任意一个后门并做到成功回连,

图16

图17

然后分析查看sysmon工具记录下的日志。日志在事件查看器中查看,可以通过“win+R”输入eventvwr.msc快速打开事件查看器,在应用程序和服务日志栏目下依次进入“/Microsoft/Windows/Sysmon/Operational”,查看日志。

在点击Sysmon-Operational刷新记录,在12:41:36找到运行后门文件20184303_backdoor.exe相对应的日志如下:

图18

由于我的kali和windows没有设置为时钟相同,所以有相应的时差。在事件查看器中对于一个事件有多种查看方式,当然内容不受查看方式的影响。图19是以XML视图的方式进行查看的。每个标签的属性值都清晰标识出了该标签的含义,包括事件、进程号、镜像地址、源IP地址和目的IP地址、源端口和目的端口号等。因为是以Windows主机的角度在记录事件,所以这里的“源”指的是Windows,“目的”指的是kali。类似地,后门引起的每个Windows事件都可以通过类似地方式查看到。

图19

2.2 恶意软件分析

2.2.1 静态分析

(1)virus total扫描

按上个实验的方法扫描一个软件看其是否为恶意软件。不同的是,上个实验侧重于判断一个后门能否免杀,这里则是侧重在明知是恶意软件的情况下对其进行分析。

图20

这个网站对恶意软件的扫描结果很详细,下面至少是三大项的内容。detection是各杀软对后门的检测结果,红圈叹号都表示某一杀软对该后门检测出来的问题所在,其中一些杀毒软件甚至给出了详细的分类。Details部分是对后门的详细分析,可执行文件类型,运行子系统,各种算法下的哈希值,校验和等。再往下面,可以看到程序编译时间戳,各个段,导入的DLL等。展开Imports,我们可以看到程序引用了那些具体的API,这部分内容很关键,通过这个我们可以具体了解恶意程序可能做的事情。

(2)PEiD查壳工具

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

图21

图21就是这款查壳工具的界面了,这是一款小巧精致的工具,检测对象通过第一行的“浏览”按钮导入,然后检测结果就会瞬间生成。

图22

图22是针对C语言调用shellcode生成的后门的扫描结果,结果是什么都没找到,说明是没有加壳的。

图23

图23是对一个压缩壳后门扫描后的结果,结果显示UPX等一大堆信息,看得出来这是正确的,因为这正是我在上个实验用压缩壳方法生成的后门。

图24

图24是对一个加密壳后门的扫描结果,PEiD的扫描结果显示什么都没找到。所以可以看出这款查壳工具并非是屡试不爽的,扫描并没有发现加密壳。这表明加密壳技术确实不容易轻易被识破。

不仅仅是找壳的功能,PEiD还有任务查看器、节查看器、反汇编查看器、PE细节查看这些功能。各功能如图所示。

图25

图26

图27

图28

在任务查看器中,针对每个运行当中的进程,可以查看进程ID、镜像地址和大小,特别是可以看到进程调用的模块,这里可以看到很多DLL文件,里面存放了各类程序的函数(子过程)的实现过程,一个进程调用的DLL模块组合起来,就是进程的行为集合。这类似于面向过程的编程语言。

(3)PE Explorer工具

PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,能快速对32位可执行程序进行反编译,并修改其中资源。该软件支持插件,你可以通过增加插件加强该软件的功能,原公司在该工具中捆绑了UPX的脱壳插件、扫描器和反汇编器,非常好用。

图29

向该软件导入一个后门文件,在“视图”栏可以查看文件头信息、数据目录、区段头等信息。有的后门导入进去不知为何是没有任何反应的,该软件解析会出问题,我是换了好几个后门才成功的。

如图30所示,打开附属扫描器,可以看到该后门(20184303_backdoor.exe)所调用到的dll模块,非常详细,几个大类里面有许多小的dll模块,数量非常之大,在这里查看的dll比上面的PEiD查看的更为详细。

图30

2.2.2 动态分析

(1)systracer快照对比

系统快照就是把系统某个状态下的各种数据记来录在一个文件里,就如同人源照相一样,相片显示的是你那个时间的一个状态。系统快照就是系统的“照片”,虚拟机制作了系统快照后就不用启动虚拟系统了,直接恢复快照就行了,你制作快照的时候,系统什么状态,恢复后就是什么状态,包括你打开的软件的状态,systracer就是一个可以制作系统快照的工具。

这种分析方法的原理比较清晰,就是分别制作系统不同条件下的快照然后对比各个快照下的系统状态,制作快照的时机分别是启动后门前、后门连接建立后、kali通过后门操作过Windows后这三种状态。图31即是快照制作完成后的情形。按照后门操作的生命周期,四个快照先后依次排列。

图31

单看快照一的话,一切正常,未发现明显异常,因为此时后门还未开启。

在快照二中,如图32所示,

图32

选择上方导航栏中的“Application”,打开“Running Processes”,后可以看到运行中的全部进程,我的后门“20184303_backdoor.exe”正好处于第一位。切换到“Opened Ports”,可以查看开放的端口。

图33

如图33所示,这里有一个TCP连接,从本地端口1732连向kali的4303端口,双方的IP地址也都很明确。ESTABLISHED的意思是建立连接。表示两台机器正在通信,这正是后门连接。

图34

在界面下方可以对比不同的快照,选择指定的快照后点击“View different list”,弹出的窗口里,一切设置可以维持默认状态,然后直接点击“View”,等待一小会儿可以看到对比结果。

图35

看得出来,后门运行前后注册表的差异挺大的,包括增加、删除、修改操作,图2.32中,最右侧一列显示的是所在行的操作,包括“mod”“add”“del”“old”“new”等,这些只是冰山一角,从快照一到快照二,类似的注册表变化非常之多,从右侧的滚动条的长度可见一斑。当然初看非常复杂,再看也还是很复杂。

在刚才选择“View different list”的地方,还有一个是“compare”,选择它可以对比选中的两个快照。

图36

图36中就是快照一和二的注册表差异信息,因为上面选择了“Only differences”。通过图2.33可以看出,这四大类的注册表从快照一到快照二都有差异,也就是说后门成功的连后造成了注册表很多方面的变化。比如HKEY_CLASSES_USER,其根键中记录的是当前用户的配置数据信息,用户可以利用此根键下的子键修改Windows的许多环境配置,比如系统提示声、鼠标速度、图标间距、图标大小等,这些也都是后门的潜在操作对象。

从快照二到快照三,这期间的变化是后门从刚刚开始回连到执行了几个后门操作。通过单击“Compare”对比快照二和三,在导航栏的“Files”下面,查看文件变化,结果如图2.34所示。

图37

上图这个对比是比较简单直接的,在systracer的安装目录下出现了新增的快照文件,因为从快照二到三本就经历了一个“take snapshot”的过程。剩余的变化都体现在C盘当中,这涉及到很多的系统数据、用户信息。

但是这里的分析有一个困难在于,很多信息,不论是注册表还是文件抑或是应用程序,在查看的时候经常会看到“SysTracer not registered”,推测这可能是因为未激活软件所以在试用阶段不能使用其全部功能,所以提示软件未注册。虽然详细信息无法探知,可至少知道哪里发生了变化,如果认真追究问题的话也是会很有指向性的。另外还可以像sysmon那样,对比不同时期下本机的对外网络连接情况,可以探知谁在两个快照期间做了什么事情(启用哪个端口和谁建立了连接)。

(2)wireshark抓包分析

wireshark是一款我们非常熟悉的抓包工具,功能强大,使用便捷,受众广泛。这里还是和前面一步一样,在kali中执行完整的后门入侵过程,从后门回连成功到断开连接。在此期间wireshark针对WLAN进行抓包,然后过滤出相关的包进行分析。我的Windows主机的IP地址是192.168.43.117,我的以太网适配器 VMware Network Adapter VMnet8的IP地址 192.168.73.1,kali的IP地址是192.168.73.128

图38

图39

从图38可以看出,这段时间里一共捕获了466个数据包,符合ip条件的有409个。过滤条件是网络地址和网络端口都指向kali的4303端口,这个过滤条件应该说是非常精确的,因为后门就是通过回连这个端口发挥作用的。

图40

图40是前几个数据包的截图,由于反弹连接是被攻击者主动连接攻击者,所以建立连接的三次握手是从Windows主机开始的,前面也提到过它的IP地址是192.168.73.1。连接建立成功后,我在kali端连续输入了一些攻击命令,然后得到Windows主机的回复,所以可以看出从第四个包开始,后面的规律就是kali作为向Windows发送一些数据包然后Windows向kali反馈一些数据包,从IP地址来看的话就是先kali后Windows这样的。由于中间的数据据传输过程都经历了编码所以难以看出哪些数据包对应的分别是哪些操作,只能大概通过执行攻击命令的先后顺序判断哪一部分数据包是服务于哪一部分攻击命令的。

图41

上图是终端连接的几个数据包的截图。可以看出在最后一个攻击命令执行完毕以后,还有一个FIN数据包,这表明一次数据传输过程已经结束了,kali端不知道又从Windows端那里获取了什么信息。到了红色的数据包可以看出,那是RST包,代表异常中断连接,正是我关闭后门的标志。这就终结了两个终端之间的后门连接。


三、实验体会

3.1基础问题回答

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

可以使用windows自带的schtasks,设置一个计划任务,设置适当的时间间隔让它全天都监控,导入WPS,制作出数据透视表和数据图表,根据联网次数排查出有疑点的进程,针对这部分进程进行静态或动态分析。

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

先观察一段时间,然后根据已有的信息和新得到的信息综合判断这到底是不是恶意软件。

  • 用sysmon可以查看该进程的日志文件,日志记录了该程序或进程在被监控期间的连接和活动详情,可以通过日志分析查找出它和谁建立了连接,然后又做了什么事情。
  • 用SysTracer记录不同时刻系统的快照,对比不同时刻系统在注册表、磁盘文件、应用程序活动等方面的差异,发现该进程或程序都对自己的电脑做了哪些修改,好让自己知道自己应该采取什么样的应对措施进行弥补。
  • 用Wireshark进行抓包,这个侧重于判断该进程发起或参与的网络连接,至于每个数据包的内容是什么样的,能不能还原出高可读性的信息,则有待更高的技术进一步挖掘探索。
  • 用PE Explorer工具,对该程序进行抽丝剥茧地探查,这款工具的反汇编功能很强大,还可以扫描和显示处该程序依赖于外部的DLL列表,知道这个进程都有哪些功能模块。当然还可以用该工具修改编辑问题程序,把问题程序的棱角磨平,让它为己所用,甚至是发起向攻击方的反击。

3.2问题解决

(1)使用命令Sysmon.exe -i <sysmon配置文件>.xml 不显示弹窗

本实验中,当把该配置文件保存到sysmon工具所在的目录下。使用“Windows Powershell”输入指令:.\Sysmon.exe -i sysmon.xml时出现了如下图所示问题,

图42

根据博客https://blog.csdn.net/weixin_51432117/article/details/112407061

我先使用Sysmon.exe -i进行安装,输入后系统提示You need to launch Sysmon as an Administrator,这时我才发现我的Powershell不是管理员,而是普通用户权限。

这里的命令行必须用管理员身份打开,方法就是鼠标右键单击win菜单,选择“Windows Powershell(管理员)(A)”.

图43

这时再进入文件夹,输入指令Sysmon.exe -i安装,可以看到已经出现了弹框

图44

图45是安装成功的截图.

图45

接下来我们需要按XML文件配置sysmon工具,执行命令.\Sysmon.exe -c sysmon.xml,以更新sysmon工具。

图46

出现如上所示问题,是因为版本号的问题,在XML中修改版本号即可成功安装:

图47

问题解决,安装完成。

(2)使用wireshark无法捕获到符合IP条件的数据包

图48

在wireshark捕包实验中,出现了无法找到数据包的情况。即便多次尝试,依旧找不到数据包

图49

这时我通过转换接口,最终在以太网适配器 VMware Network Adapter VMnet8找到了想要的数据包,虚拟机与Windows交换信息的接口并不是WLAN接口,源地址也并不是WLAN的IP地址,而是以太网适配器 VMware Network Adapter VMnet8的IP地址。

3.3 实验感想

本次实验是关于恶意代码分析,信息攻击中最为重要的工具就是恶意代码,在之前的学习中,我学习了怎样建立后门、实现免杀,知道了部分类型恶意代码的基本原理,本实验恶意代码分析从分析的角度认识恶意代码,利用一些专业的分析工具,可以对恶意代码进行静态和动态的分析,本次实验我也明白信息安全领域是一个庞大的领域,本实验我们已知这是一个后门程序,对它进行分析,但在现实生活中,我们并不知道是否存在恶意软件,如何利用工具找到恶意软件,排查出安全隐患,是一个需要我们有很多知识积累,在今后的学习中我也会着重在实践方面学习和锻炼!

posted @ 2021-04-11 00:16  20184303邢超远  阅读(289)  评论(0编辑  收藏  举报