20199136 2019-2020-2 《网络攻防实践》第九周作业
1. 实践内容
恶意代码定义与分类
恶意代码的定义
- 恶意代码是一个指令集合,可能是二进制的执行文件、脚本语言代码、寄宿在别的代码里的指令。
恶意代码的分类
-
计算机病毒:一种代码,需要把自己嵌入到其他的程序之中进行感染,但是这个嵌入过程需要人为的干预才可以完成。可以自我复制。
-
蠕虫:与计算机病毒类似,但是它不需要嵌入到其他的程序之中,通常会调整系统设置,让自己随系统启动而启动。一般也不需要人为的干预,会自己主动的扫描其它目标的网络服务的漏洞,然后自己进行传播。
-
恶意移动代码:首先是移动代码的定义:一种轻量级程序,可以从远程主机下载然后在本地运行,很少需要人来操作。恶意移动代码是指那些会在本地主机来自己进行一些本地用户不希望进行的操作的代码。
-
后门:绕开正常的安全机制,为攻击者提供便捷的访问的代码。
-
特洛伊木马:一种将自己伪装起来的恶意代码。假装自己是无害的,来骗过用户,让用户安装自己。很形象的比喻。就像假装献给雅典娜的巨大木马。
-
僵尸网络:攻击者为了达到自己的目的,传播一种恶意代码,来控制多台主机,形成一种攻击网络。其中用于这个用途的恶意代码被称为僵尸程序。
-
内核套件:在用户态通过修改一些关键文件,或者在直接内核态来控制操做系统的内核,来获得root权限。为了完成这一目的而编写的恶意代码称为内核套件。
计算机病毒
-
定义:计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另一台计算机,这也是其传播机制。
-
特性:感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。
-
感染机制:计算机病毒一般情况下会把自己寄宿在可执行文件、引导扇区和支持宏指令文件三种。在寄宿在可执行文件的时候,计算机病毒会随着可执行文件的执行而运行;寄宿在引导扇区的时候,,通过感染引导区的引导记录,病毒就可以在系统启动的时候获取控制全;寄宿在支持宏指令的文件的时候,会等待其他的程序来打开这个文件,这时候执行代码。
-
传播机制:计算机病毒在一个系统之中被触发的时候,就会去寻找系统内其他的可以被它感染的程序,复制自己进下一个宿主内。
网络蠕虫
- 定义:一种通过网络自主传播、自我复制的独立恶意代码。(从这里就可以看出病毒和蠕虫的区别)
- 传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。
组成结构:
- 弹头:利用目标系统安全漏洞入侵目标系统。包括缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。这里其实就是我们之前说的渗透攻击模块。
- 传播引擎:通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。方式有FTP/TFTP/HTTP/SMB/直接传送/单包等。
目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。这里就是扫描策略。 - 有效载荷:附加的攻击代码,执行一些特殊目地的操作。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。
后门与木马
- 后门定义:允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。
- 后门类型:本地特权提升、单个命令的远程执行、远程命令行解释访问器(NetCat)、远程控制GUI(VNC、BO、冰河、灰鸽子)、无端口后门(ICMP后门,基于Sniffer非混杂模式或混杂模式的后门)。
- 自启动后门:Windows通过修改自启动文件、注册表自启动项,Linux修改inittab、rc.d/init.d文件。
- 木马定义:看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
- 木马的伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒(开发者有意为之,后面的利益就不可知了)。
僵尸程序与僵尸网络
-
僵尸程序定义:攻击者用于一对多控制目标主机的恶意代码。
-
僵尸网络定义:攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。(注意仔细品味几种恶意程序的定义的黑体字,体会不同)
-
僵尸网络功能结构:主体功能分为命令控制模块和传播模块,辅助功能分为信息窃取模块、主机控制模块、下载更新模块、防分析检测模块。
-
僵尸网络类型:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。
恶意代码分析
恶意代码分析技术主要包括静态分析(不执行代码的情况下进行分析)和动态分析(在受控的环境体重执行恶意代码,利用各种方法来获取想要的信息)两大类。
恶意代码静态分析技术
-
恶意代码静态分析技术包括:反病毒扫描软件、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构和逻辑分析、加壳识别与代码脱壳。
-
反病毒扫描软件:这是最简单直接的方法。用现成的软件来扫描待分析的样本,如果软件可以识别病毒,就可以知道该病毒的欸行、家族等。国内外都有着很多的相关软件。除了这些已有的软件之外,我们还可以使用ClamAV来尝试构造自己的反病毒软件。
-
文件格式识别:当我们有了一个我们从未见过的恶意代码样本的时候,首先要知道他是什么文件格式。用file的命令就可以通过提取关键特征来识别文件类型。除此之外,还有很多恶意代码文件格式的识别工具。
-
字符串提取分析:通过提取程序中连续的可以打印的字符所组成的字符串,也许就能获得我们所需要的关键信息,也是一种简单直接的方式。有可能会得到的信息有:代码的名字、程序的帮助和说明、会话内容、口令、库文件和函数的调用等。用string命令可以实现。当然也有相关的软件。
-
二进制结构分析:二进制文件的恶意代码,通常会在编译和链接过程中留下来一些信息。通过工具binutils,可以查看一些遗留下来的信息。先前的string就是binutils的一个命令。objdump也是一个二进制程序分析工具。
-
反汇编与反编译:反汇编是把二进制程序还原成汇编代码,反编译则是更进一步的还原成编程语言。一般情况下不会直接逐句逐行的读这些代码,一般会在掌握了更多的信息之后再回头对程序进行分析。
-
代码结构与逻辑分析:在反汇编和反编译获得了二进制程序的汇编语言或者高级语言的代码之后,就可以对代码的逻辑也结构进行分析。如IDA pro之类的分析工具可以为我们提供一些辅助功能。
-
加壳识别与代码脱壳:在静态分析的时候,会发现很多恶意代码会通过加壳来影响对手的分析,隐藏自己的各种信息。因此,我们需要对加壳的恶意代码进行识别并且进行脱壳。
-
-
恶意代码动态分析技术主要的手段有:基于快照比对的方法和工具、系统动态行为监控、网络协议栈监控、沙箱、动态调试等
-
基于快照比对的方法和工具:在恶意代码运行之前对系统的资源做一个快照。然后再恶意代码运行之后的一段时间再做一次快照,通过对比可以对恶意代码的影响进行分析。
-
系统动态行为监控:这是动态分析中最核心的部分。在代码运行的时候对恶意代码对文件系统、运行进程列表等的动作进行实时的监控。
-
文件行为监控软件:大多数恶意代码都会读写文件,filemon软件记录了各种文件的所有操作与操作所发生的时间,可以让我们了解恶意代码对那些文件进行了什么操作。
-
进程行为监控软件:这类软件用于监控恶意代码对进程的激活与修改。常用的软件有process explorer、top、lsof等。
-
注册表监控软件:Windows平台上的恶意代码还会修改和利用注册表。regmon软件能够实时地显示每个和注册表有关的行为。
-
本地网络栈行为监控软件:很多恶意代码都有着网络行为,所以也需要对本地网络栈进行监控。类unix平台的lsof命令可以帮助我们查看到unix系统的开放的端口。win平台可以用TCPView或者Fport来查看是否新的端口。
-
-
网络协议栈监控:除了从运行平台来监控自己之外,更加有效的方法是从本地网络上的另一台主机来监控。
-
沙箱技术:沙箱技术为动态分析提供了一个很好的环境,让运行的恶意代码不能修改系统。
-
动态调试技术:动态调试是指在某个程序运行的时候对该程序进行调试。一般来说恶意代码运行非常快,但是采用动态调试技术就可以一步一步慢慢的运行恶意代码。方便我们进行观察。
-
2. 实践过程
实践一:恶意代码静态分析
任务:对提供的rada恶意代码样本(U盘或FTP/materials/course9下载),在WinXP_Attacker虚拟机中进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者
- 使用文件格式和类型识别工具(file,PEid),给出rada恶意代码样本的文件格式,运行平台和加壳工具
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
- 使用字符串提取工具(strings、IDA pro),对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
- 在WinXP Attacker中下载解压rada.exe,通过
file RaDa.exe
可查看RaDa.exe
的文件类型为32位Windows PE可执行文件
- 然后通过指令
strings RaDa.exe
来查看该程序可打印字符串,发现为乱码,猜测该程序经过加壳
- 使用PEiD工具来查看该程序使用的加壳工具,然后采用脱壳工具脱壳
- 再用PEiD工具来查看脱壳后的程序,可以看到编写该程序所使用的语言和平台为VB6.0
- 使用监视工具process explorer对脱壳后的恶意程序进行检测,可以查看到有关作者的信息
实践二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息
- 分别通过命令
file crackme1.exe
和file crackme2.exe
来粗略分析两程序的信息,可看到两文件均为windows系统下的32位可执行程序,无图形界面,仅用作控制台
- 尝试寻找特定输入,通过随机输入发现,该程序对字符串组合有回应
- 接下来用IDA打开该恶意程序进行分析,可看到除上图两句回复外,还应该有其他两个回复,并且可看到该程序使用C语言编写的
- 现对crackme1.exe发送另两字符串,发现其对
I know the secret
返回了一个新的消息
- 在此直接用IDA打开crackme2.exe,发现比crackme1.exe多了一些信息,但是不知道都是干嘛的
实践三:样本分析,分析一个自制恶意代码样本
任务:现在你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。
- 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
- 找出并解释这个二进制文件的目的。
- 识别并说明这个二进制文件所具有的不同特性。
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
- 给出过去已有的具有相似功能的其他工具。
- 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 利用
md5sum RaDa.exe
得到该程序摘要值caaa6985a43225a0b3add54f44a0d4c7
,然后通过file RaDa.exe
识别出是32位PE文件,而且还是GUI文件,然后开始脱壳
- 下面利用IDA pro进行分析,该恶意程序使用http连接到目标为10.10.10的主机下名为RaDa_commands的网页上,然后分别下载和上传某些文件,并且在受害主机C盘目录下创建一个文件夹
C:/RaDa/tmp
来保存其下载的文件,往下分析发现该恶意程序中可执行DDos拒绝服务攻击
- 继续往下分析,发现该恶意程序对主机注册表进行了读写和删除操作
- 还可发现上传、下载、截图、休眠等操作
- 然后查看wireshark的监听数据,可看到受害主机向目标主机
10.10.10.10
发送大量数据包,但是追踪其数据流时,没有任何信息
问题解答梳理
1:md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。它是一个32位PE GUI可执行程序,同时也是一个UPX加壳文件。
2:用户上网后,该程序通过http请求连接到用户的主机,然后攻击者可以控制该系统。
3:RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:
(1)从指定的web服务器请求指定的web页面。
(2)解析获得的web页面,获取其中的指令。
(3)执行解析出来的指令,主要的指令上面给出。
(4)等待一段时间后继续按照这个循环执行。
4:通过UPX加壳,来阻止反编译分析。
5:首先这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫。然后它也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马。所以我认为他是一个后门程序或者僵尸程序。
6:Bobax,2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。还有特洛伊木马Setiri。
7:上面的分析中已经指出是Raul siles和David Perze于2004年编写的。
实践四:取证分析,Windows 2000系统被攻破并加入僵尸网络
任务:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- 僵尸网络是什么?僵尸网络通常用于干什么?
- 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
- 哪些IP地址被用于攻击蜜罐主机?
- 攻击者尝试了哪些安全漏洞?
(1)
- RC是因特网中继聊天,IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。IRC特点是通过服务器与其他连接到这一服务器上的用户交流。
- 注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:
USER <username> <hostname> <servername> <realname>
、PASS <password>
、NICK <nickname>
。注册完成后,客户端就使用JOIN信息来加 入频道,格式如下:JOIN <channel>
。 - IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。
- 注意:攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道,那么基于端口识别服务不再可靠,要进行基于应用协议特征进行识别(如USER/NICK)。
(2)
- 僵尸网络是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
- 僵尸网络构成了一个攻击平台,利用这个平台可以有效地发起各种各样的攻击行为,可以导致整个基础信息网络或者重要应用系统瘫痪,也可以导致大量机密或个人隐私泄漏,还可以用来从事网络欺诈等其他违法犯罪活动。这其中包括:拒绝服务攻击,发送垃圾邮件,窃取秘密,滥用资源,僵尸网络挖矿等
(3)由(1)可知IRC服务器通过6667端口,又已知蜜罐IP地址172.16.134.191
,设置过滤条件,可找到五个IRC服务器
209.126.161.29
66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
(5)
- ①对于该问只需要找出所有进入蜜罐的源地址就好,用wireshark筛选条件
172.16.134.191
,然后进行统计
- ②也可用tcpdump排查
然后再找出所有可能连接主机的ip
(6)可通过分析哪些漏洞受到攻击,进而推出攻击者攻击了哪些漏洞。先查一下包的网络流分布情况,发现大部分都是TCP包,少部分UDP包
因此要先筛选出蜜罐主机相应的TCP端口,然后再筛选UDP端口,再逐一对端口进行分析
- 对于tcp 135号端口和tcp25号端口,没有发现数据的交互,只有连接,进而判断攻击者知识对这两个端口进行了connect扫描
- 对于tcp 80可看到连接最多的就是24.197.194.106这个IP,他的行为就是不停的用脚本在攻击IIS服务器的漏洞,从而获取系统权限,正是因为用的脚本,所以才会有这么多记录。
3. 学习中遇到的问题及解决
问题1:有些关于汇编的指令分析,头一次遇见
问题1解决方案:慢慢学习吧
4. 实践总结
解建国同学的实践三是一点都看不懂。。转而参考潘俊学同学的博客,明白点其中的逻辑了。
蜀道难。。