2019-2020-2 20174313张博《网络对抗技术》Exp4 恶意代码分析

一、基础知识

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 恶意代码的分析

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

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

 

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

 

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

1.4 实验目标

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

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

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

 


二、实验内容及步骤

2.1 系统运行监控

    2.1.1 Windows计划任务

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

 

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

    下面是一些参数的含义:

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

图2.1

 

    如图2.1那样执行命令,然后再打开C盘下的netstat4313.txt文件,可以看出它已经在记录连接信息了,每分钟记录一次。此时的文件记录效果如图2.2所示。

 

 图2.2  

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

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

 

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

 

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

 

图2.3 

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

图2.4

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

图2.5 

    设置完毕后,可以看到图2.6中所示的样子,每分钟记录的时候都会显示记录的日期和时间,非常详细了,这将极大地增加文件的可读性,便于查找和进行有针对的分析。

图2.6

    关于该计划程序的各种属性,还有很多项设置,默认即可。比如图2.7有一项设置是任务截止时间,默认是超过三天就停止任务。这也是一个比较合理的设置,因为一直不停记录的话文件内容越攒越多,指不定什么时候就把磁盘空间占满了,不仅如此,把如此庞大的文件打开读进内存对于普通的电脑来说将是一件很吃力的事情。在这次实验中我只记录了二十多分钟便手动停止了该任务,短短二十分钟内也已经积累了五千多条连接记录了。

图2.7

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

图2.8

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

 

图2.9 23:06记录的部分连接

 

 图2.10 23:26记录的部分连接

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

 

图2.11 

 

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

 

图2.12

    按图2.12所示,在字段列表中去掉“TCP”、“协议”、“周一”和“空白”这种无效字段,得到下面图2.13所示的数据表。

 

图2.13

    在此基础上,依据此数据透视表制作出图标,按图2.14所示,我选择的是簇状条形图。

 

图2.14 

 

图2.15

    图2.15是最终的数据表,是这二十多分钟内本机上建立的所有的网络连接的次数统计。可以看出IntelTechnologyAccessService进程的连接建立次数遥遥领先,上网查阅资料得知它是英特尔的管理引擎系列软件的组件之一,不是恶意软件。连接建立数目第二多的是LegacyCsLoaderService.exe,它对Windows来说不是必备的,并且它常常会导致问题,是和数字签名有关的一个进程。其他进程还有网易云音乐、WPS、微信等应用程序和svchost.exe等系统进程。没有发现明显的恶意软件。对于系统进程或者说对任何进程来说,可以通过任务管理器打开文件所在位置,以查看它到底是正牌的还是假冒的。

    2.1.2 sysmon

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

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

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

<Sysmon schemaversion="4.23">
  <!-- 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.xml,这是指按照指定的XML配置文件安装sysmon工具。这里的命令行用管理员身份打开,方法就是鼠标右键单击win菜单,选择“Windows Powershell(管理员)(A)”。

 

图2.16

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

 

图2.17

    图2.17是安装成功的截图,若有需要修改XML文件,则需要在修改完毕后执行命令Sysmon.exe -c sysmon.xml,以更新sysmon工具。

    sysmon工具安装完毕后,可以在kali中运行一下以往生成的任意一个后门并做到成功回连,执行一些操作然后断开连接。然后分析查看sysmon工具记录下的日志。日志在事件查看器中查看,可以通过“win+R”输入eventvwr.msc快速打开事件查看器,在应用程序和服务日志栏目下依次进入/Microsoft/Windows/Sysmon/Operational,查看日志。

图2.18 

 

    日志数量往往都很多,在没有掌握较好的筛选方法的情况下,为了便于分析,需要把后门的作用时间控制在一个较短的区间,这样查看起日志来也能省去查找时间。如图2.18所示,在19:44Windows成功连接到了kali上,那么sysmon日志就也从19:44开始找。

图2.19

 

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

2.2 恶意软件分析

    2.2.1 静态分析

    (1)virus total扫描

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

图2.20

 

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

    (2)PEiD查壳工具

 

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

 

 

图2.21

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

 

图2.22

 

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

图2.23 

 

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

图2.24 

 

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

 

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

 

图2.25

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

    (3)PE Explorer工具

 

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

 

图2.26

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

 

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

 

图2.27

 

    2.2.2 动态分析

    (1)systracer快照对比

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

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

 

图2.28

 

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

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

 

图2.29

 

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

 

图2.30

 

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

 

图2.31 

 

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

图2.32 

 

 

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

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

 

图2.33 

 

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

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

图2.34 

 

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

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

    (2)wireshark抓包分析

    wireshark是一款我们非常熟悉的抓包工具,功能强大,使用便捷,受众广泛。这里还是和前面一步一样,在kali中执行完整的后门入侵过程,从后门回连成功到断开连接。在此期间wireshark针对WLAN进行抓包,然后过滤出相关的包进行分析。我的Windows主机的IP地址是192.168.1.100kali的IP地址是192.168.1.109,由于09非常像,所以在观察的时候必须得倍加细心。

 

图2.35 袖珍版截图

 

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

 

 

图2.36 

 

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

 

 

图2.37  

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


 

三、实验体会

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

    使用本实验的第一个操作,Windows计划任务schtasks即可,我只是做了二十多分钟的监控,可以设置适当的时间间隔让它全天都监控,然后将数据导入到表格工具中,制作出数据透视表和数据图表,根据联网次数排查出有疑点的进程。然后就针对这部分进程进行分析,有静态分析和动态分析的方法。通过本实验的学习,可以用PE Explorer工具和systracer工具,这两个都是非常强大的工具,如果要真心想用的话,还是得使用官方正版激活的软件,这样才能确保结果的准确性。否则有些功能可能根本就用不了。

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

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

 

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

3.3 实验感想

    前面几次实验,都是在研究学习各种攻击技术,着实我深刻地体会了一把潜在的信息安全威胁,在造成警醒的同时,我从本实验中认识到了很多防范技术,这将很有助于我积极应对各种潜在的信息安全风险。学习恶意代码是为了知己知彼百战不殆,这样才能更好地做好防范工作。本实验的很多分析都不是逆向分析推断问题所在的,而是直接创造问题然后再直奔主题正面分析问题。实际生活中往往需要自己从海量的信息中排查出安全隐患来,这应该说是很有挑战性的。由于水平有限,对于各种分析软件我没能做到熟练掌握和运用,只是做到了基本的、肤浅的使用,无法追根溯源找出更深层次的问题,看问题只能是浮于表面。学无止境,越是学习越是能感觉到知识恐慌。这些工具都是非常好用非常强大的工具,没有与之相匹配的知识储备是无法充分发挥其功能的,所有这些有待我在今后的学习过程中慢慢学习、不断积累、提升自己!

 

posted @ 2020-04-17 00:14  20174313张博  阅读(199)  评论(0编辑  收藏