20199103 2019-2020-2 《网络攻防实践》第9周作业
20199103 2019-2020-2 《网络攻防实践》第9周作业
1.知识点总结
恶意代码定义与分类
恶意代码的定义
- 恶意代码是一个指令集合,可能是二进制的执行文件、脚本语言代码、寄宿在别的代码里的指令。
恶意代码的分类
-
计算机病毒:一种代码,需要把自己嵌入到其他的程序之中进行感染,但是这个嵌入过程需要人为的干预才可以完成。可以自我复制。
-
蠕虫:与计算机病毒类似,但是它不需要嵌入到其他的程序之中,通常会调整系统设置,让自己随系统启动而启动。一般也不需要人为的干预,会自己主动的扫描其它目标的网络服务的漏洞,然后自己进行传播。
-
恶意移动代码:首先是移动代码的定义:一种轻量级程序,可以从远程主机下载然后在本地运行,很少需要人来操作。恶意移动代码是指那些会在本地主机来自己进行一些本地用户不希望进行的操作的代码。
-
后门:绕开正常的安全机制,为攻击者提供便捷的访问的代码。
-
特洛伊木马:一种将自己伪装起来的恶意代码。假装自己是无害的,来骗过用户,让用户安装自己。很形象的比喻。就像假装献给雅典娜的巨大木马。
-
僵尸网络:攻击者为了达到自己的目的,传播一种恶意代码,来控制多台主机,形成一种攻击网络。其中用于这个用途的恶意代码被称为僵尸程序。
-
内核套件:在用户态通过修改一些关键文件,或者在直接内核态来控制操做系统的内核,来获得root权限。为了完成这一目的而编写的恶意代码称为内核套件。
计算机病毒
计算机病毒的基本特性
-
感染性:是指地算计病毒被执行之后,就会自己把自己复制到其他的满足条件的程序之中。像传染一样。一般情况下传染的速度很快。这是计算机病毒最重要的特点。
-
潜伏性:一般情况下计算机病毒成功感染之后,不会立刻采取其他的措施。在时机到来之前,会先等着。传染过程也难以被发现。
-
可触发性:虽然计算机病毒会先等着,但是不会一直等下去,以满足条件就会开始感染或者破坏。这个条件可能是时间,在系统时间到某个时刻时候就开始行动;也可能是病毒自带的计数器,像定时炸弹一样;也可能是一种文件的出现,观察到某种类型的文件之后就开始行动。
-
破坏性:计算机病毒一般都带着一些恶意的目的。如果编写者是由于其他的目的,比如炫耀自己,这种情况下不会对计算机造成太大的破坏。但是有的病毒就是为了破坏才编写的。
-
衍生性:当某个人对某个计算机病毒很了解,或者这个病毒就是这个人写的,这时候这个人作为使用者就可以根据自己的目的来对这个病毒进行修改,这样就会衍生出其他的病毒。
计算机病毒的机制
-
感染机制:计算机病毒一般情况下会把自己寄宿在可执行文件、引导扇区和支持宏指令文件三种。在寄宿在可执行文件的时候,计算机病毒会随着可执行文件的执行而运行;寄宿在引导扇区的时候,,通过感染引导区的引导记录,病毒就可以在系统启动的时候获取控制全;寄宿在支持宏指令的文件的时候,会等待其他的程序来打开这个文件,这时候执行代码。
-
传播机制:计算机病毒在一个系统之中被触发的时候,就会去寻找系统内其他的可以被它感染的程序,复制自己进下一个宿主内。
网络蠕虫
- 基本特性:相较于计算机病毒,网络蠕虫不需要感染目标程序,自己就是一个独立程序,同时他还可以自己通过扫描其它系统的网络漏洞来传播自己到其他的系统,不需要人为的操作。
网络蠕虫的组成结构
-
书中将网络蠕虫比喻成了一个导弹,由弹头、传播引擎、目标选择算法和扫描引擎、有效载荷来组成
-
弹头:为了取得目标主机的访问权而存在的代码,对各种安全漏洞进行攻击。
-
传播引擎:在弹头获取到了目标系统的访问权之后,下一步自然是将自己想要传播的蠕虫传过去。通过执行传播引擎中的指令,来完成传播。
-
目标扫描算法和扫描引擎:在入侵成功之后,就要想办法入侵下一个系统。目标选择算法负责确定可能可以称为目标的地址,而扫描引擎就对目标选择算法确定的地址进行扫描,看看是不是真的可以入侵。
-
有效载荷:想要入侵一个系统肯定是有目的的,而实现这个目的的代码就是目标载荷。比如组件僵尸网络、植入后门等,这些都需要有效载荷来实现。
后门与木马
后门
-
后门可以为攻击者提供一种快捷通道。包括以下:
-
本地权限提升和本地帐号:让攻击者可以将其权限提升root或者干脆新建一个账户,让攻击者有权限访问想要访问的东西。
-
远程执行单个命令:让攻击者可以在远程执行一个命令,得到结果。
-
远程命令行解释器访问:远程shell,让攻击者通过网络来远程在shell上直接输入命令,获得运行结果,快速直接,比如上周的netcat。
-
远程控制GUI:用图形化的方式来远程访问目标,相较远程shell有更加多样化的功能。
木马
-
木马就是特洛伊木马的简称,前面提到,木马是假装无害的。假装的方式有以下两种:
-
欺骗用户,让用户自己把程序下载到系统之中。
-
假装自己是系统的一部分,让用户注意不到自己。
僵尸程序与僵尸网络
- 僵尸网络由僵尸网络控制器和僵尸程序两部分组成。
僵尸程序
-
僵尸程序包括主体功能模块和辅助功能模块。
-
主体功能模块主要负责接受攻击者的命令并且执行,是僵尸程序和核心。
-
辅助功能模块是其它功能的集合,比如信息窃取等。
恶意代码分析
-
恶意代码分析技术主要包括静态分析和动态分析两大类。
-
静态代码分析是指不执行代码的情况下进行分析,动态代码分析则是在受控的环境体重执行恶意代码,利用各种方法来获取想要的信息。
恶意代码静态分析技术
- 恶意代码静态分析技术包括:反病毒扫描软件、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构和逻辑分析、加壳识别与代码脱壳。
反病毒扫描软件
- 这是最简单直接的方法。用现成的软件来扫描待分析的样本,如果软件可以识别病毒,就可以知道该病毒的欸行、家族等。国内外都有着很多的相关软件。除了这些已有的软件之外,我们还可以使用ClamAV来尝试构造自己的反病毒软件。
文件格式识别
- 当我们有了一个我们从未见过的恶意代码样本的时候,首先要知道他是什么文件格式。用file的命令就可以通过提取关键特征来识别文件类型。除此之外,还有很多恶意代码文件格式的识别工具。
字符串提取分析
-
通过提取程序中连续的可以打印的字符所组成的字符串,也许就能获得我们所需要的关键信息,也是一种简单直接的方式。
-
有可能会得到的信息有:代码的名字、程序的帮助和说明、会话内容、口令、库文件和函数的调用等。
-
用string命令可以实现。当然也有相关的软件。
二进制结构分析
- 二进制文件的恶意代码,通常会在编译和链接过程中留下来一些信息。通过工具binutils,可以查看一些遗留下来的信息。先前的string就是binutils的一个命令。objdump也是一个二进制程序分析工具。
反汇编与反编译
-
反汇编是把二进制程序还原成汇编代码,反编译则是更进一步的还原成编程语言。
-
一般情况下不会直接逐句逐行的读这些代码,一般会在掌握了更多的信息之后再回头对程序进行分析。
代码结构与逻辑分析
- 在反汇编和反编译获得了二进制程序的汇编语言或者高级语言的代码之后,就可以对代码的逻辑也结构进行分析。如IDA pro之类的分析工具可以为我们提供一些辅助功能。
加壳识别与代码脱壳
- 在静态分析的时候,会发现很多恶意代码会通过加壳来影响对手的分析,隐藏自己的各种信息。因此,我们需要对加壳的恶意代码进行识别并且进行脱壳。
恶意代码动态分析技术
- 主要的手段有:基于快照比对的方法和工具、系统动态行为监控、网络协议栈监控、沙箱、动态调试等
基于快照比对的方法和工具
- 在恶意代码运行之前对系统的资源做一个快照。然后再恶意代码运行之后的一段时间再做一次快照,通过对比可以对恶意代码的影响进行分析。
系统动态行为监控
-
这是动态分析中最核心的部分。在代码运行的时候对恶意代码对文件系统、运行进程列表等的动作进行实时的监控。
-
文件行为监控软件:大多数恶意代码都会读写文件,filemon软件记录了各种文件的所有操作与操作所发生的时间,可以让我们了解恶意代码对那些文件进行了什么操作。
-
进程行为监控软件:这类软件用于监控恶意代码对进程的激活与修改。常用的软件有process explorer、top、lsof等。
-
注册表监控软件:Windows平台上的恶意代码还会修改和利用注册表。regmon软件能够实时地显示每个和注册表有关的行为。
-
本地网络栈行为监控软件:很多恶意代码都有着网络行为,所以也需要对本地网络栈进行监控。类unix平台的lsof命令可以帮助我们查看到unix系统的开放的端口。win平台可以用TCPView或者Fport来查看是否新的端口。
网络协议栈监控
- 除了从运行平台来监控自己之外,更加有效的方法是从本地网络上的另一台主机来监控。
沙箱技术
- 沙箱技术为动态分析提供了一个很好的环境,让运行的恶意代码不能修改系统。
动态调试技术
-
动态调试是指在某个程序运行的时候对该程序进行调试。
-
一般来说恶意代码运行非常快,但是采用动态调试技术就可以一步一步慢慢的运行恶意代码。方便我们进行观察。
2.实践过程
动手实践:恶意代码文件类型识别、脱壳与字符串提取
-
使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和识别工具
-
使用超级巡警脱壳机等托克软件,对rada恶意代码样本进行脱壳处理
-
使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
-
首先查看文件类型,直接用file命令就可以
-
可以看出来是一个PE文件,还有图形界面(GUI)。运行平台是32位的windows
-
然后是进行壳识别。
-
可以看出来是一种UPX壳。
-
然后就是脱壳,这个很简单,点一下鼠标。
-
然后是字符串提取。在IDA里有很多功能,其中就有字符串提取。用IDA打开脱壳之后的文件。
-
然后查看软件中的字符串窗口。
-
从这里可以看到恶意代码的编写作者。
动手实践:分析crackme程序
- 使用IDA pro静态或者动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
-
首先来crackme1,先尝试性的打开文件,输入参数。
-
发现在不带参数或者输入两个参数的时候都会返回
i think you are missing something
,但是输入一个参数的时候就是paedon? what did you say?
所以可以判断,这个程序在接受我们的输入之后,会先判断有几个参数,然后再对参数的正确性进行验证。而这个程序应该是只有一个参数。 -
然后使用IDA打开程序,关注字符串窗口。
-
这时可以注意到第1、3个输出已经遇见过了,先记下第2、4个输出。
-
然后在上面可以找到函数关系图。
-
可以发现start函数中有一个strcmp函数。这个是c语言里的字符串对比的函数,可以判断这个就是用来验证我们输入的参数对不对的函数。然后再查看strcmp的上层函数sub-401280.
-
这里根据发现在strcmp对比完之后顺着继续找。
-
就发现了这个地方,值得注意的是这个字符数组。
-
将这个字符数组当作参数输入。
-
然后就成功了。
-
然后是crackme2.首先照旧输入不同数量的参数来测试一下。
-
然后可以发现,不输入参数或者输入两个参数都会返回
i think you are missing something
,但是输入一个参数的时候就会返回i have an identity problem
所以应该是只有一个参数。 -
然后还是应IDA打开,然后观察字符串
-
除了我们得到的字符串之外,还有第2、4、5个字符串没有得到过,值得注意。
-
然后打开函数图。
-
发现这里的strcmp再sub-401280之下。这里的函数结构比上一个稍多复杂一点,可以通过函数的关系图来看。
-
可以看出,总共进行了三次判断,而刚刚通过参数的个数得到的两次结果应该是第一次判断。
-
那么就有个问题,明明只输入了一个参数,怎么会有三次判断?就算加上参数个数也只有两次判断而已。
-
然后可以看出第二次判断的字符串应该是
crackmeplease.exe
但是我将这个字符串当作参数输入之后并没有成功。 -
不过可以注意到.exe的后缀,所以可以猜到这个应该是对程序名的判断(这个我真没猜到)。
-
然后就将程序改名。
-
改名之后的判断通过之后应该就是下一个参数的问题,通过上图可以看到,最后一次判断是对比字符串
I know the secret
. -
然后就将程序改名,再输入参数。
-
然后成功。
样本分析实践
-
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
-
找出并解释这个二进制文件的目的
-
识别并说明这儿二进制文件所居于的不同特性
-
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
-
对这个恶意代码样本进行分类,并给出你的理由
-
给出过去已有的具有相似功能的其他工具
-
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下。
-
这个题我做起来有些困难,最大的困难就是看不懂IDA分析出来的函数之间的调用。不过尽管这样,还是可以回答出来给的问题。
-
首先是动态分析,打开filemon来监视文件,regmon监视注册表,wireshark监视网络。其中前两个在虚拟机之中都没有,我是从网上下载的。
-
然后观察工具都打开之后,就开始运行文件。
-
运行之后先打开filemon看一下。这里我把记录当作txt村了下来。然后发现数据实在太多,只能用查找来慢慢看。这里可以看见它在自己的文件夹下又建立了bin和tmp两个文件夹。然后把自己复制到了bin下面,tmp则什么都没放。
-
在资源管理器也可以看到他们
-
然后是regmon的保存的txt文件。这里可以发现他把自己添加到了自动启动。
-
查看注册表也可以发现。
-
还有就是wireshark,这里我并没有发现什么值得注意的事情,只有他请求与10.10.10.10的80端口建立tcp链接。可是还被回绝了(?)
-
然后开始静态分析。先用md5来获取一下摘要,
-
然后和上面的实践一样,获取文件类型,检测壳,以及脱壳。这里就不再贴了。
-
之后在string里把unicode选中,来查看字符串。
-
这时可以查看到很多的字符串,点击这些字符串就可以找到调用的函数。
-
然后在这里可以发现
--authors
-
顺着找下去,会发现调用函数。
-
打开这个函数的调用关系图。
-
这里不仅能看到相关函数,还可以看到参数。我们可以看到作者是raul siles和david perez。在上方可以看出来,在运行程序的时候也不是一定可以得到,在判断条件中被判断true才可以。但是这个代码我实在没有看懂。
-
在wireshark中可以知道该程序尝试连接10.10.10.10.在字符串中也可以看到这一串字符。
-
然后点击,顺路找到调用的函数,和该函数的调用关系图。
-
这个信息量实在有点大,本来我看这种代码就举步维艰,这种长度实在看不懂就放弃了。
-
然后可以在string中发现ddos的字样
-
也许是ddos攻击?但是函数我仍然没有看懂。
-
然后总结下信息回答问题。
-
首先是提供摘要与基本信息。之前就已经获得了检测的壳、运行平台等信息。然后再加上这次的md5的摘要。
-
找出并解释这个二进制文件的目的。通过上面的动态分析,可以发现值得注意的动作只有两个,意识尝试与10.10.10.10建立tcp连接,二是将自己添加到了自动启动之中。既然需要保持启动,还需要远程通讯,所以目的可能是远程控制,或者是ddos攻击,不过我不太明白为什么ddos攻击需要恶意代码。
-
识别并说明这个文件的不同特性。在这个程序启动之后,他会将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。至于建立连接之后,我想应该是远程操作吧。
-
识别并解释这个二进制文件所采用的防止被分析或逆向工程的技术。首先是加壳,不过直接被识别之后一键脱掉了。然后是判断。虽然我没有看懂函数,但是也看得出来存在着大量的分支选项,应该是想避免被分析。
-
识别这个代码并进行分类。首先这个代码并没有随网络传播,不是蠕虫;也没有将自己嵌入到其他的程序中,不是病毒;还没有伪装自己,不是木马;再加上也没有获取权限。应该是后门或者僵尸程序。
-
这个二进制文件的作者。在上面已经在函数的参数中发现了作者是raul siles和david perez。并且是有着限定条件的,但是这个函数的判定语句我并没有看懂。
实践作业:取证分析实践
-
IRC是什么?党IRC客户端神经加入一个IRC网络时将发送哪些信息?IRC一般使用哪些TCP端口?
-
僵尸网络是什么?僵尸网络通常用于什么?
-
蜜罐主机与哪些IRC服务器进行了通信?
-
多少不同的主机访问了以200.196.44.172为服务器的僵尸网络?
-
哪些IP地址被用于攻击蜜罐主机?
-
攻击者尝试攻击了哪些安全漏洞?
-
哪些攻击成功了?如何成功的?
IRC是什么?党IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口
-
IRC,internet relay chat,因特网中继聊天,影胡通过IRC软件连接到一个IRC服务器,然后通过这个服务器以另一个用户交谈,速度非常的快。
-
IRC明文传输使用的端口6667.SSL加密使用的端口6697。
僵尸网络是什么?僵尸网络通常用于干什么?
-
攻击者通过僵尸程序来控制大量主机,然后用一对多的命令来控制他们,形成的一个网络称为僵尸网络。
-
僵尸网络可以用于ddos攻击,发送垃圾信息,甚至僵尸网络挖矿。
蜜罐主机与哪些IRC服务器进行了通信?
-
通过上面可以知道,明文传输到服务器6667端口,ssl加密传输6697端口,然后也知道蜜罐主机IP是172.16.134.191。
-
用wireshark打开文件,然后筛选
ip.src == 172.16.134.191 && tcp.dstport == 6697
-
啥都没有。。再筛选
ip.src == 172.16.134.191 && tcp.dstport == 6667
-
通过目的ip进行分类,可以得到
209.126.161.29
,66.33.65.58
,63.241.174.144
,217.199.175.10
,209.196.44.172
五个服务器。
多少不同的主机访问了以200.196.44.172为服务器的僵尸网络?
-
这一个题我是没搞懂的,因为我用
ip.dst == 209.196.44.172
之后,发现所有的源IP都是同一个。 -
完全没有思路的我参照建国的博客想用tcpflow分流。用如下命令。
-
然后可以看到分流出来的文件。
-
然后输入一个很长的命令。第一眼看到这个命令的时候我是想不明白的。但是其实也不难,只是长一点。其实就是将每个昵称都输出一行,然后删除空行,用昵称的行数来统计有多少昵称,然后就知道了有多少用户。
-
然后我统计出来的只有五个???我又测试了下“JOIN”的数量,发现还是五个。应该是编码问题吧。。但是我也不会别的方法了,先搁置把。
哪些IP地址被用于攻击蜜罐主机。
-
首先,只要某个数据进入了蜜罐,就应该认识是攻击,所以就要统计所有进入蜜罐的靶机的流量的源地址。最简单的方法就是在wireshark中使用查找
ip.dst == 172.16.134.191
。
-
但是这样有个小问题,这ip实在太多了
。但是好在wireshark有个统计。
攻击者尝试攻击了哪些安全漏洞?哪些成功了?哪些失败了?
-
这道题我也是一头雾水,面临着这么多的数据包不知道该怎么下手。后来参考建国的博客,用tcpdump排查出了蜜罐的响应的端口。
-
知道了端口就可以继续分析了。先看看135.
-
可以看出来只是一次扫描,扫完了啥都没干。
-
然后看看139.
-
这一次虽然有着大量的数据包,但是一直都是重复的,不停的建立连接,应该是在扫描查点。
-
然后再看看25端口。
-
和135一样,只是建立了链接而已,也只是一次扫描?
-
然后445端口。
-
这里应该就是一次正儿八经的攻击了。但是数据包太多,我也不知道从何下手。
-
然后是4899。
-
这欸有着很多的数据传输。猜想应该在远程下载一些东西。
-
然后是80端口,这里也是有很多的ip都在访问该端口。但是这巨量的数据包,我也不知道该从哪下手,就先说两个我注意到的,希望到时候上课可以听到大佬的详细讲解。
-
上图里面的疑点就是那么多的c是干嘛的,应该是缓存区溢出攻击。然后又能发现好多的N。一开始我以为是上一个攻击的继续,但是这两个数据包并不来自于一个IP。
实践总结
不得不说自己真的不大行。这周的四个题从前到后一个比一个让我头疼。尤其是最后一个,要不是有同学的博客做参考,我怕是弄不出来多少。