20199104 2019-2020-2 《网络攻防实践》第9周作业
20199104 2019-2020-2 《网络攻防实践》第9周作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/19attackdefense |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10695 |
我在这个课程的目标是 | 学习并了解网络攻防的相关知识,期末有个好成绩 |
这个作业在哪个具体方面帮助我实现目标 | 了解LINUX网络安全攻防的理论与实践 |
作业正文 | 见下 |
1.实践内容
1.1 恶意代码基础知识
1.1.1 恶意代码简单介绍
-
恶意代码定义:恶意代码指的是计算机按照攻击者的意图执行以达到恶意目标的指令集;恶意代码可以是二进制执行文件、脚本语言代码、宏代码、或是寄生在其他代码或启动扇区的一段指令流。可以达成炫耀、远程控制被攻击主机、满足施跳板攻击或进一步传播恶意代码、窃取私人信息或机密信息、窃取计算存储带宽资源、拒绝服务等的目的。
-
恶意代码的类型:分为计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、内核套件等。
恶意代码类型 | 定义 |
---|---|
计算机病毒 | 通过感染文件进行传播,能自我复制,感染过程需要人为行动或被执行才能完成 |
蠕虫 | 自主运行,不需要嵌入到感让人文件,不需要人为参与 |
恶意移动代码 | 从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少人为干预 |
后门 | 绕开正常的安全机制,为攻击者提供便捷的访问的代码。 |
特洛伊木马 | 一种将自己伪装起来的恶意代码。伪装成有用的软件,来骗过用户,让用户执行,同时其中隐藏其恶意目标的恶意代码。 |
僵尸程序 | 传播一种恶意代码,来控制多台主机,形成一个网络,特点是一对多的命令 |
内核套件 | 替换或修改系统关键可执行文件,获得root权限 |
1.1.2 计算机病毒
-
定义:计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码。
-
计算机病毒的基本特性:感染性(首要依据)、潜伏性、可触发性、破坏性、衍生性。
-
计算机病毒的感染及引导机制:
-
可执行文件:是计算机病毒最普遍的感染目标,可以执行文件作为宿主程序,当其被用户运行时,依附在在上面的病毒就可以被激活取得控制权。具体分为前缀感染机制,宿主程序被执行,立刻运行病毒代码;后缀感染机制,病毒将自身复制到宿主程序的末端,并在指令开始时加入一条转跳指令,在运行完后,在加入一条转跳指令,仍然执行正常程序;插入感染机制,病毒在感染宿主程序时,病毒代码放在宿主程序的中间。
-
感染引导扇区:通过BIOS定位磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。引导型病毒的感染目标为主引导区和分区引导区,通过感染引导区上的引导记录,病毒就可以在系统启动时先于操作系统便截取系统控制权。
-
感染支持宏的数据文件:将自身以宏指令的方式复制到数据文件中,等待软件打开这个文件时,将自动执行宏病毒体,完成病毒的引导。
-
-
传播机制:计算机病毒被触发的时候,就会去寻找系统内其他的可以被它感染的程序,复制自己进下一个宿主内,如果没有人为,不会到另外的计算机上。
1.1.3 网络蠕虫
-
定义:一种通过网络自主传播、自我复制的独立恶意代码,不需要人为,类似于瘟疫传播。(病毒要人为才能感染其他计算机)
-
病毒与蠕虫对比:
-
组成结构:类似导弹
- 弹头:利用目标系统安全漏洞入侵目标系统。包括缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。
- 传播引擎:通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。常用的传输引擎有FTP/TFTP/HTTP/SMB/SOCKET等。
- 目标选择算法和扫描引擎:蠕虫在受害计算机中运行,开始寻找新的攻击目标,扫描其余地址是否可以被攻击。可以通过电子邮件地址、主机列表、被信任的系统、网络邻居主机、域名服务等选择算法。
- 有效载荷:附加的攻击代码,执行一些特殊目地的操作,具体来说就是入侵之后该会什么。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。
1.1.4 后门与木马
- 后门定义:允许攻击者绕过系统常规安全控制机制的程序,进入系统。
- 后门类型:本地权限提升和本地帐号(获得ROOT)、单个命令的远程执行、远程命令行解释访问器(远程shell,如NetCat)、远程控制GUI、无端口后门。
- 自启动后门:Windows通过修改自启动文件、注册表自启动项,Linux修改inittab、网络配置文件等自启动。
- 木马定义:欺骗用户,让用户自己把程序下载到系统之中,看起来具有某个软件,但实际掩盖着一些隐藏恶意功能的程序。
- 木马的伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒。
1.1.5 僵尸程序与僵尸网络
- 僵尸程序定义:攻击者用于一对多(比后面灵活,后门一对一)控制目标主机(与蠕虫不同是受控制的)的恶意代码。
- 僵尸网络定义:僵尸网络由僵尸网络控制器和僵尸程序两部分组成。攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
- 僵尸网络功能结构:主体功能(执行攻击者的命令)分为命令控制模块和传播模块,辅助功能(其它功能的集合,信息窃取,加强攻击、生存能力)分为信息窃取模块、主机控制模块、下载更新模块、防分析检测模块。
- 僵尸程序的命令与控制机制:基于IRC协议的命令与控制机制,基于HTTP协议的命令与控制机制,基于P2P协议的命令与控制机制
1.1.6 Rootkit
- 定义:是一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中
- 用户模式Rootkit:在操作系统中,正常的内核之上,由攻击者恶意替换和木马化的操作系统内建程序及库文件;主要分为五种类型:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本。
- 内核模式Rootkit:恶意修改操作系统内核,使得即使操作系统上层程序和其他用户应用程序没有任何修改,攻击者仍可以在受害计算机中隐藏提供远程后门访问的Rootkit。主要有如下方式:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。
1.2 恶意代码分析技术
1.2.1 恶意代码分析概述
-
恶意代码分析技术主要包括静态分析和动态分析两大类。静态代码分析是指不执行代码的情况下进行分析,动态代码分析则是在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。
-
分析恶意代码与良性代码的主要区别在于:
- 不能提前知道恶意代码的目的
- 恶意代码具有恶意的攻击目的,会对所运行环境进行恶意破坏
- 恶意代码分析在绝大数情况下不会拥有待分析程序的源代码
- 恶意代码目前都会引入大量各种各样的对抗分析技术
1.2.2 恶意代码分析环境
- 恶意代码发烧友的分析实验环境
- 采用虚拟化技术构建恶意代码分析环境(就是我们实验用的环境)
- 用于研究的恶意代码自动分析环境
1.2.3 恶意代码静态分析
-
特点:不执行代码的情况下进行分析,对恶意代码的特性和目的有一个大体的了解,甚至能够识别出恶意代码的各个组成部分。
-
恶意代码静态分析方法列表:
- 反病毒软件扫描:识别恶意代码。工具:常见的杀毒软件
- 文件格式识别:分析文件格式,了解待分析恶意代码所期望的运行平台。工具:file
- 字符串提取工具:通过提取程序中字符串,获得我们所需要的关键信息,寻找恶意代码分析线索。有可能会得到的信息有:代码的实例名、帮助或命令行选项、会话、口令等。工具:string。
- 二进制结构分析:获得在编译和链接过程中留下来的信息。工具:binutils
- 反汇编与反编译:反汇编是把二进制程序还原成汇编代码,反编译则是更进一步的还原成编程语言(源代码)。工具:IDA Pro
- 代码结构与逻辑分析:理解二进制代码逻辑结构。工具:IDA Pro
- 加壳识别与代码脱壳:恶意代码会通过加壳隐藏自己的各种信息。我们需要对加壳的恶意代码进行识别并且进行代码脱壳。恶意代码通常使用的加壳混淆机制包括加密、多样性、多态和变形。工具:UPX
1.2.4 恶意代码动态分析技术
- 定义:动态代码分析则是在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。
- 恶意代码动态分析方法列表
- 快照比对:恶意代码运行之前对系统的资源做一个快照,在恶意代码运行之后再做一次快照,通过对比可以对恶意代码的影响进行分析。工具:RegSnap
- 系统动态行为监控:对恶意代码对文件系统、运行进程列表、注册表等的动作进行实时的监视、记录和显示。文件行为监控软件:让我们了解恶意代码对那些文件什么时候进行了什么操作。工具:filemon。进程行为监控软件:查看如何激活进程并进行修改修改。工具:process等。注册表监控软件:Windows平台上的恶意代码还会修改和利用注册表,改变配置资源库。工具:regmon。本地网络栈行为监控软件:很多恶意代码都有着传播、控制网络行为。类unix平台工具:lsof命令。win平台工具:TCPView。
- 网络监控:从本地网络上的另一台主机来监控改主机。工具:wireshark
- 沙箱技术:沙箱技术提供受限制的执行环境,恶意代码不能修改系统。工具:Norman Sandbox。
- 动态调试技术:在程序的执行过程中进行调试,细致分析动态执行过程,观察恶意代码发生的一切。
2.实践过程
2.1 动手实践 恶意代码文件类型识别、脱壳和字符串提取
- 实践任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
- 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码进行脱壳处理。
- 使用字符串提取工具,对脱壳后的rada代码进行样本分析,从中发现rada恶意代码的编写作者是谁
实现
-
首先利用file RaDa.exe命令查看RaDa.exe的文件类型。
-
下面使用PEiD工具(查壳)来查看加壳的类型。从扩展信息中我们可以看到文件加壳的类型,这个是一个版本为0.89.6的UPX壳
-
下面用strings RaDa.exe查看RaDa.exe中可打印字符串,发现都是乱码,这是因为加了壳。
-
我们用超级巡警这个软件进行脱壳,脱完之后输出为RaDa_unpacked.exe。
-
再使用strings RaDa_unpacked.exe查看脱壳,发现脱壳成功,没有乱码
-
打开IDA Pro Free选择脱壳之后的文件,可以看到如下信息。首先是作者的信息
DataRescue sa/nv
2.2 实践二:分析Crackme程序
-
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
实现 -
对crackme1.exe进行执行,猜测参数执行,可以发现一个参数输入得到的输出
paedon? what did you say?
与其他的参数输入得到的输出i think you are missing something
不一样,所以可以猜测这个程序的输入是一个参数。
-
使用IDA Pro打开这个程序分析,我们查看字符串窗口可以查看该程序中出现的字符串,我们发现了前面的两种反馈信息,还有另外两个没有出现
-
接下来看函数调用图(Function Call),start函数中有一个strcmp函数(使用字符串对比密码),输出函数fprintf和printf。我们看strcmp的上层函数,sub-401280.看到cmp比较
-
发现比对参数
I know the secret
-
将这个字符串当作参数输入。
-
对crackme2.exe照旧猜测参数执行。
-
使用IDA Pro进行分析。首先还是看明文字符串,有五个,出现过的是输入多个参数的
i think you are missing something
和输入一个参数的i have an identity problem
,接下来寻找字符串操作函数。
-
看到字符串比较函数strcmp和输出函数fprintf等。往上级寻找sub_401280函数。从图中可以看出,进行了多次判断,下面逐步分析,第一次判断是参数的个数。
-
第二次判断可以看到第二次判断的字符串应该是
crackmeplease.exe
,又在别人的指导之下注意到比较的是ebp+arg_4
,不是上面的ebp+arg_0
了,arg_4代表的是程序名,故第二次判断是对程序名的判断。
-
第三次判断就是同上一节分析的一样,对比字符串
I know the secret
-
进行测试,首先
copy crackme2.exe crackmeplease.exe
给程序改名,然后输入crackmeplease.exe "I know the secret"
发现输出了一个字符串We have a little secret: Chocolate
。
-
但是我们发现前面字符串没有出现
We have a little secret: Chocolate
,接着看,发现下面有进行判断,判断完错了还进行循环。
-
我们看到指令
xor eax 42h
,同时可以看到add eax,offset unk_403080
,推测是将unk_403080
中的字符逐个与0x42进行异或运算。同时[ebp+var_4]
与21h
进行比较,不大于则执行_putchar输出。循环退出之后输出0Dh
也就是\r
。所以输出了字符串没有的东西
2.2 实践三:样本分析,分析一个自制恶意代码样本
-
任务:现在你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。
-
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
-
找出并解释这个二进制文件的目的。
-
识别并说明这个二进制文件所具有的不同特性。
-
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
-
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
-
给出过去已有的具有相似功能的其他工具。
-
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
实现 -
动态分析,打开Process Monitor来监视文件,regmon监视注册表,wireshark监视网络。
-
Process Monitor可以看见它在自己的文件夹下又建立了bin。然后把自己复制到了bin下面。
-
继续观察Regmon,我们可以看到进行了很多注册表的操作,其中有一个时在自启动项里面加入了RaDa: C:\RaDa\bin\RaDa.exe。
-
使用wireshark,看到他请求与10.10.10.10的80端口建立tcp链接。
-
开始静态分析。使用file RaDa.exe识别出这是32位PE文件,并且还是个GUI文件,用md5来获取一下摘要。
-
超级巡警进行脱壳,这是一个UPX壳,并且成功脱壳。利用IDA Pro进行分析。如第一个一样
-
string可以看到全部的字符串,这里需要把字符串的默认改为unicode类型。就可以获得大量的程序运行命令行,点击这些字符串就可以找到调用的函数。我们可以找到作者的信息
--authors
。
-
接着向下看,可以看到两个函数,分别是 sub_405E40和sub_40B010,点开第二个发现是具体的处理过程,点开第一个函数,发现结构庞大,应该是主程序,截图如下。我们还可以看到判断正确输出作者
raul和david 2004
-
从string的
10.10.10.10./RaDa
进行分析,我们能看到有两个函数调用这个字符串,分别是sub_4052C0和sub_404FB0。分别点开看看。找到调用的函数,和该函数的调用关系图。
-
在函数sub_4052C0 ,我们看到判断了三个网段分别为192.168.、172.16.、10.也是我们wireshark出现的。之后具体的函数分析不太会。
-
对问题进行总结回答
- md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。32位PE GUI可执行程序,是一个UPX加壳文件。
- 通过上面的分析,这是一个自启动的程序,并且与10.10.10.10建立tcp连接,从函数中得知系统通过浏览器上网,就能够获得来自攻击者的指令。故应该是后门程序或僵尸网络程序。
- RaDa.exe被执行时,它会将自身安装到系统中,并通过修改注册表的方式使得每次系统启动,它都能够被启动,启动后可以调用函数以下操作
exe | 在宿主主机中执行指定的命令 |
put | 将宿主主机中的指定文件.上传到服务器 |
get | 将服务器中的指定文件下载到宿主主机中 |
screenshot | 截取宿主主机的屏幕并保存到tmp文件夹 |
sleep | 停止活动一段时间 |
-
加壳,我们在查看代码之前必须要脱壳。在分析时,只看代码,会误导人以为使用DDOS。
-
该程序不具有自主传播模块,所以它不属于病毒和蠕虫,此程序未进行伪装,所以也不是木马。若攻击者仅仅用此程序进行远程控制,那么就是后门程序;若再次基础上加入僵尸网络,则就是僵尸程序
-
Bobax –2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
-
在
--authors
参数获取相关作者信息Raul Siles & David Perez, 2004
2.3 实践四:取证分析,Windows 2000系统被攻破并加入僵尸网络
-
任务:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- 僵尸网络是什么?僵尸网络通常用于干什么?
- 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
- 哪些IP地址被用于攻击蜜罐主机?
- 攻击者尝试了哪些安全漏洞?
- 哪些攻击成功了?是如何成功的?
-
对问题进行分析
-
IRC全名为Internet Relay Chat,是一款即时聊天工具,类似网络聊天室,但功能更强大。IRC客户端与服务端通信采用的端口和相应协议是公开的。2004年年初,互连网开始大规模出现IRC后门病毒,IRC病毒可以使用户机器里的信息完全暴露给黑客,直接造成用户损失。同时,IRC病毒和蠕虫一样通过网络自动传播,占用大量网络资源,很容易阻塞局域网。加入时需要发送的消息有三种,口令、昵称和用户信息。消息格式如下:USER
、 PASS 和 NICK 。IRC服务器明文传输在6667端口,SSL加密传输在6697端口。 -
僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。攻击者通过各种途径传播僵尸程序感染互联网上的大量主机,而被感染的主机将通过一个控制信道接收攻击者的指令,组成一个僵尸网络。Botnet构成了一个攻击平台,利用这个平台可以有效地发起各种各样的攻击行为,可以导致整个基础信息网络或者重要应用系统瘫痪,也可以导致大量机密或个人隐私泄漏,还可以用来从事网络欺诈等其他违法犯罪活动。常见的攻击:拒绝服务攻击、发送垃圾邮件等、窃取秘密、滥用资源、僵尸网络挖矿等。
-
思路是过滤出蜜罐主机尝试连接6667端口的SYN包,使用Wireshark打开数据文件,并设置过滤条件
ip.src == 172.16.134.191 && tcp.dstport == 6667
,筛选之后,我们可以找到五个IRC服务器,分别为209.126.161.29
,66.33.65.58
,63.241.174.144
,217.199.175.10
,209.196.44.172
这五个服务器。
-
通过观察不同昵称出现个数,进行判断,使用tcpflow进行处理。首先我们用tcpflow进行分流,
tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"
,读取botnet_pcap_file,筛选host 209.196.44.172和port 6667后进行分流。生成了一个report文件和两个文件。从209.196.044.172.06667-172.016.134.191
文件中找到有多少个主机访问了209.196.44.172。接着执行如下指令进行搜索有多少主机连接:cat 209.196.044.172.06667-172.016.134.191.01152 | grep "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l
,发现是5个,不知道为什么和别人的不一样,推测是在sed去除前缀时出现问题。
grep | 获取昵称输出行 |
sed | 去除前缀,g表示全局 |
tr' ' '\n' | 将空格转换为换行 |
tr -d "\15" | 删除\r |
grep -v "^$" | 去除空行 |
sort -u | 排序并去除重复 |
wc -l | 输出行数 |
- 所有进入蜜罐的流量都被视为可疑流量,由于IP地址数过多,wireshark等GUI工具不能胜任,所以使用tcpdump.使用下面的指令找出所有的可能连接的主机的 IP 地址,将连接 IP 地址输出到 2.txt 中,我们看到总共有 165 个主机可能被用于入侵蜜罐。其中awk -F就是指定分隔符,可指定一个或多个,print后面做字符串的拼接。
tcpdump -n -nn -r botnet_pcap_file 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
6,7. 攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii
发现只有IP包,大部分都是TCP包,小部分UDP包,筛选出响应的TCP端口,使用tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
看到TCP 响应端口为 135,139,25,445,4899,80。筛选出响应的TCP端口,使用tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and udp| cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq| more
看到UCP 响应端口为137。
-
udp 137号端口,137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。要是非法攻击者知道目标主机的IP地址,并向该地址的137端口发送一个连接请求时,就可能获得目标主机的相关名称信息。所以访问这个端口肯定就是NetBIOS查点了。
-
tcp 135号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了connect扫描。
-
TCP 139号端口。大部分都是连接,攻击应该是没有成功,推测是SMB 查点。
-
TCP 445端口。可以看到进行了猜测口令,然后连接是成功,但是具体之后再干什么就不知道
-
TCP 4899端口。4899端口是一个远程控制软件(remote administrator)服务端监听的端口,只有210.22.204.101访问过。
-
TCP 80端口。有最多的数据包。看到210.22.204.101访问的80端口,出现很多的C,推测攻击者是想通过缓冲区溢出攻击来获得一个命令行了。但是之后没有任何命令,推测是没有成功
-
24.197.194.106访问的80端口,是攻击IIS服务器的漏洞,所以才会有这么多记录。
-
218.25.147.83访问的80端口,我们可以看到
www.worm.com
和c:\notworm
,GOOGLE发现是蠕虫。
3.学习中遇到的问题及解决
- 问题1:tcpflow分析的与别人不一样
- 问题2:关于最后的分析,以及不会判断是否成功
4.实践总结
这次实验真的比较难,很多内容不懂,后面的分析基本是看着材料做的,