20199111 2019-2020-2 《网络攻防实践》第九周作业
20199111 2019-2020-2 《网络攻防实践》第九周作业
1.实践内容
1.1 恶意代码基础知识
定义:指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
恶意代码类型
- 计算机病毒
指那种既具有自我复制能力,又必须寄生在其他实用程序中的恶意代码。感染过程通常需要人为干预
- 蠕虫
它和计算机病毒的最大不同在于自我复制过程,病毒的自我复制过程需要人工干预,无论是运行感染病毒的实用程序,还是打开包含宏病毒的邮件,都不是由病毒程序自我完成的。蠕虫能够自我完成下述步骤:
(1)查找远程系统:能够通过检索已被攻陷的系统的网络邻居列表或其他远程系统地址列表找出下一个攻击对象。
(2)建立连接:能够通过端口扫描等操作过程自动和被攻击对象建立连接,如Telnet连接等。
(3)实施攻击:能够自动将自身通过已经建立的连接复制到被攻击的远程系统,并运行它。
- 后门
指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制,如NC
- 特洛伊木马
是一类伪装成有用的软件,但隐藏其恶总目标的恶意代码。主要特征是伪装性
- 僵尸网络
僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,此外也具有恶意性和网络传播特性。
- rootkit
是在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权的一类恶意代码。
恶意代码的特征:
(1)恶意破坏的目的
(2)其本身为程序
(3)通过执行发生作用
恶意代码的传播方式:
总的来说,恶意代码的传播是因为用户的软件出现了漏洞、操作不慎或者是两者的结合造成
(1)病毒:病毒具有自我复制的功能,一般嵌入主机的程序中。当被感染文件执行操作,例如,用户打开一个可执行文件时,病毒就会自我繁殖。病毒一般都具有破坏性
(2)木马:这种程序从表面上看没有危害,但实际上却隐含着恶意的意图和破坏的作用。一些木马程序会通过覆盖系统中已经存在的文件的方式存在于系统之中;另外有的还会以软件的形式出现,因为它一般是以一个正常的应用程序身份在系统中运行的,所以这种程序通常不容易被发现
(3)蠕虫:蠕虫是一种可以自我复制的完全独立的程序,它的传播不需要借助被感染主机中的其他程序和用户的操作,而是通过系统存在的漏洞和设置的不安全性来进行入侵,如通过共享的设置来侵入。蠕虫可以自动创建与它的功能完全相同的副本,并能在无人干涉的情况下自动运行,大量地复制占用计算机的空间,使计算机的运行缓慢甚至瘫痪
(4)移动代码:移动代码是能够从主机传输到客户端计算机上并执行的代码,它通常是作为病毒、蠕虫或者是特洛伊木马的一部分被传送到客户的计算机上的。此外,移动代码还可以利用系统的漏洞进行入侵,如非法的数据访问和盗取管理员账号等
恶意代码攻击机制
(1)侵入系统:侵入系统是恶意代码实现其恶意目的的必要条件。恶意代码入侵的途径很多,如:从互联网下载的程序本身就可能含有恶意代码;接收已经感染恶意代码的电子邮件;从光盘或U盘往系统上安装软件;黑客或者攻击者故意将恶意代码植入系统等
(2)维持或提升现有特权:恶意代码的传播与破坏必须盗用用户或者进程的合法权限才能完成
(3)隐蔽策略:为了不让系统发现恶意代码已经侵入系统,恶意代码可能会改名、删除源文件或者修改系统的安全策略来隐藏自己
(4)潜伏:恶意代码侵入系统后,等待一定的条件,并具有足够的权限时,就发作并进行破坏活动
(5)破坏:恶意代码的本质具有破坏性,其目的是造成信息丢失,泄密,破坏系统完整性等
1.2 恶意代码分析
恶意代码分析是一个多步过程,他深入研究恶意软件结构和功能,有利于对抗措施的发展。按照分析过程中恶意代码的执行状态可以把恶意代码分析技术分成静态分析技术和动态分析技术两大类
恶意代码静态分析
- 反病毒软件扫描
使用现成的反病毒软件来扫描待分析的样本,以确代码是否含有病毒。常用软件包括国产的金山、瑞星;国外的诺顿、卡巴斯基等等
- 文件格式识别
恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式,对于二进制可执行文件而言,了解样本的格式也意味者我们获知了恶意代码所期望的运行平台。常用软件是PEiD、Filelnfo、FileAnalyzer 等
- 字符串提取分析
有时恶意代码的作者会在自己的作品中放入某个特定的url或email地址,或者恶意代码会使用到某个特定的库文件和函数。利用字符串提取技术,可以帮助我们分析恶意代码的功能和结构
- 反汇编、反编译
可根据二进制文件最大限度地恢复出源代码,帮助分析代码结构
- 加壳识别和代码脱壳
恶意代码的加壳会对深入的静态分析构成阻碍,在识别出恶意代码所使用的加壳工具之后,下一步就是进行脱壳,恢复出恶意代码加壳之前的原有形态,对于常见的加壳工具如UPX、 PEPack、 ASPack等都拥有相应的脱壳工具
恶意代码动态分析
动态分析技术手段主要有:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试等
- 快照比对
对原始的系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间,之后再对恶意代码运行后的系统资料列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响。常使用的工具有:FileSnap,RegSnap,完美卸载等
- 系统动态行为监控
针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示
- 网络协议栈监控方法
从本地网络上的其他主机来检测承受恶意代码攻击的机器的行为,如恶意代码所开放的TCP或UDP端口,对外发起的网络连接和通信会话等
- 沙箱技术
沙箱它供了受限制的执行环境,使得在沙箱中运行的代码不能修改用户系统,从而提供了一个用于运行不可信程序的安全环境
2.实践过程
2.1实践一:恶意代码文件的类型识别、脱壳与字符串提取
实验环境:WinXP Attacker虚拟机(需下载解压工具)
首先使用file命令查看RaDa.exe的文件类型,看到这是一个32位Windows可执行文件,且有GUI界面
使用PEiD工具查看RaDa.exe的基本信息,可以看到这个是一个版本为0.89.6的UPX壳,以及文件的入口点、偏移、文件类型、EP段、汇编程序以及加壳类型
使用strings命令查看RaDa.exe中可打印字符串,出现乱码的原因是因为文件被加壳,正常字符无法显示
对RaDa.exe进行脱壳
再用strings查看脱壳后的RaDa.exe(RaDa_unpacked.exe),脱壳之后出现正常的字符串
最后使用IDA Pro Free,一个静态反编译软件打开脱壳之后的.exe文件,可以看到作者身份和邮箱地址
2.2实践二:分析Crackme程序
首先和第一个实验一样,先使用file命令查看文件类型,看到均为windows系统下运行的32位可执行程序,且没有图形界面,仅使用控制台操作
先对crackme1.exe进行破解,首先是尝试运行该程序,试探其输入格式
当输入一个参数和两个参数时,得到了两种不同的反馈。接着使用IDA pro工具来打开文件
在Strings页面可以查看到该程序中出现的明文字符串,推测“You know how to speak to programs, Mr. Reverse-Engineer”就是输入口令正确时程序的反馈信息
接着查看整个程序的函数调用情况,点击Display graph of function call
可以看出1程序是用C语言写的,使用strcmp函数来比较口令。程序关键的部分在sub_401280这里
接着查看sub_401280,这里借助资料知道了程序用“I know the secret”字符串和[eax]对应的字符串(用户输入的口令)相比较,通过比较的结果反馈口令是否正确,尝试一下
接下来对crackme2.exe进行破解
使用IDA pro工具来打开文件,查看函数调用情况,程序关键的部分在sub_401280
查看sub_401280,第一部分倒数第二行,cmp [ebp+arg_0],2判断程序参数是否为两个
接着用strcmp函数对argc里面的第一个字符串,即程序名,和“crackmeplease.exe”进行判断
通过程序名判断后,用户输入的口令与”I know the secret”判断
所以我们要做的是在程序名为“crackmeplease.exe”中再输入"I know the secret"
因此破解需要两步:一是把程序名改为“crackmeplease.exe”,二在输入"I know the secret"。尝试一下
2.3实践三:分析一个自制恶意代码样本rada,并撰写分析报告
在打开RaDa文件之前,先打开了文件行为监控软件(Filemon)、进程行为监控软件(Process Explore)、网络监控软件(Wireshark)
打开RaDa.exe文件
在Filemon中,看到RaDa.exe读取了大量的DLL文件、在C:\rada路径下创建了tmp文件、复制到了C:\RaDa\bin目录下并改写了文件
在Process Explore中,可以看到恶意代码使用http连接到10.10.10.10的主机,进行了上传和下载操作。其中RaDa.Commend.html可能是恶意代码获得指令的文件
对注册表进行了读、写、删除操作
在wireshark中看到主机与10.10.10.10进行了大量的通信,这一点在上一步Process Explore中我们也看到了相同的信息
程序包含的功能,包括上传、下载、截屏等等
- 通过上述的分析大概知道了该恶意代码的目的
在执行程序之后将自己写入系统文件中,并且通过更改注册表使得用户在每次开机时自动启动该程序
- 这个二进制文件所具有的不同特性
启动后会自动访问10.10.10.10,下载得到RaDa.Commend.html并获得指令
- 防分析技术
加壳技术
- 对恶意代码样本进行分类
分析过程中未发现该恶意代码具有传播和感染的性质,该恶意代码的主要功能是远程获得指令并在靶机上进行相应操作,应该是一个后门程序
利用如下指令得到摘要:
md5sum RaDa.exe
然后重复实践一中的脱壳,用IDA打开进行静态分析
查看全部字符串之前先把类型改为unicode(统一码)
看字符串时,找到了最后一问的答案,这个二进制文件的开发作者是 Raul Siles & David Perez
3.4实践四:取证分析,Windows 2000系统被攻破并加入僵尸网络
3.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
-
IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
-
所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),所有的沟通就在他们所在的Channel内以不同的Nickname进行交谈。
-
申请加入的时候要发送口令、昵称和用户信息:
USER <username> <hostname> <servername> <realname>
、PASS <password>
、NICK <nickname>
-
6667端口(明文传输)、6697端口(SSL加密)
3.4.2 僵尸网络是什么?僵尸网络通常用于干什么?
-
僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络
-
攻击者可以向自己控制的所有bots发送指令,让它们在特定的时间同时开始连续访问特定的网络目标,从而达到DDos的目的。
-
利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息
-
Botnet的控制者可以从僵尸主机中窃取用户的各种敏感信息和其他秘密,例如个人帐号、机密数据等
-
攻击者利用Botnet从事各种需要耗费网络资源的活动,从而使用户的网络性能受到影响,甚至带来经济损失
3.4.3 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信
对数据包进行筛选,选出源地址为172.16.134.191且通信端口为6667(IRC使用的TCP端口)的数据包,命令如下:
ip.src == 172.16.134.191 && tcp.dstport == 6667
观察到共5个IRC服务器,分别为
209.126.161.29
66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
3.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
首先用tcpflow进行分流,指令如下:
tcpflow -r botnet.pcap "host 209.196.44.172 and port 6667" #读取文件,筛选host和端口6667后进行分流
输入如下指令进行搜索有多少主机连接
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
共3457台主机
3.4.5 哪些IP地址被用于攻击蜜罐主机
使用下面的指令找出所有的可能连接的主机的IP地址
tcpdump -n -nn -r botnet.pcap 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
共有165个主机
3.4.6 攻击者尝试攻击了那些安全漏洞
先使用snort进行检测,发现主要是TCP包
查看一下TCP响应过的端口,命令如下:
tcpdump -r botnet.pcap -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
响应的端口分别为:
135
139
25
445
4899
80
接下来用wireshark筛选出经过每个端口的数据包
筛选通过80端口的数据包
tcp.dstport==80 && ip.dst == 172.16.134.191
看到24.197.194.106向蜜罐发送了超多的A,可能在进行缓冲区溢出攻击
218.25.147.83进行了蠕虫攻击
筛选通过445端口的数据包
看到了一个奇怪的后缀,查询后知道这是蠕虫病毒的一个工具(PSEXEC工具原理是通过ipc$连接,然后释放psexesvc.exe到目标机器)
3.学习中遇到的问题及解决
-
问题1:实践四中对botnet_pcap_file的各种操作失败
-
问题1解决方案:将文件名改成了botnet.pcap,原因还不知道,但问题解决了
4.实践总结
遇到分析的题做的很慢很慢,花了很长时间也没有多少进展,最后还是需要参考一些。网络方面和编程方面(汇编的部分太头大了)的基础都欠缺好多。