20199304 2019-2020-2 《网络攻防实践》第9周作业
本次作业属于哪个课程 | 网络攻防实践 |
---|---|
这个作业要求在哪里 | 恶意代码基础知识和分析方法 |
我在这个课程的目标是 | 学习网络攻防相关技术和原理 |
这个作业在哪个具体方面帮助我实现目标 | 学习恶意代码安全攻防的相关知识 |
1.实践内容
1.恶意代码定义和分类
恶意代码: | 指的是使计算机按照攻击者意图执行以达到恶意目标的指令集。 |
---|---|
分类: | 计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸网络、内核套件。 |
2.恶意代码的发展趋势
- 恶意代码的复杂度和破坏力不断增强,从早期简单感染DOS操作系统的Brain病毒到复杂的内核级后门工具和破坏力强大的蠕虫,恶意代码在快速传播、隐蔽性、破坏力和对抗性上都在不断地发展。
- 恶意代码技术的创新越来越频繁,特别是在近几年,大量的新概念被不断提出,同时验证这些新概念和新技术的恶意代码也频繁地公布于众。
- 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具,在20世纪80-90年代,恶意代码的关注重心在于感染可执行程序的计算机病毒,但从最近几年的发展趋势来看,更多的关注焦点已经转移到对整个互联网造成严重危害的僵尸网络、网页木马、以及内核级的高级攻击技术。
3.计算机病毒
- 3.1计算机病毒概念
- 计算机病毒是一种能够自我复制的代码,通过将自身嵌入到其他程序进行感染,而感染过程通常需要人工干预才能完成。
- 3.2计算机病毒基本特性
- 感染性
- 潜伏性
- 可触发性
- 破坏性
- 衍生性
- 3.3计算机病毒的感染及引导机制
- 计算机病毒需要将自身嵌入到一个宿主程序上才能运行,而感染的方式也决定了计算机病毒如何从宿主程序上被引导运行的方式,因此计算机病毒的感染和引导机制是紧密相关的。计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类。
- 计算机病毒的传播主要依赖移动存储介质、电子邮件及下载、共享目录等。
4.网络蠕虫
- 4.1网络蠕虫概念
- 网络蠕虫是一种通过网络自主传播的恶意代码,它的出现相对于传统计算机病毒和木马、后门来说比较晚,但无论是从传播速度、传播范围还是破坏程度上来说,都是以往的恶意代码所无法比拟的,从定义本质上讲,网络蠕虫是一种可以自我复制的代码,并且通过网络传播,通常无须人为干预就能传播。当蠕虫感染了一台计算机,并且在完全控制以后,就会将这台计算机作为传播源,进而扫描并感染其他的脆弱系统。
- 4.2网络蠕虫的基本特征
- 自我复制
- 通过网络自主传播
- 不需要宿主,独立程序
- 直接通过网络传播,包括内网和互联网
- 不需要人为干预
- 4.3网络蠕虫的组成结构
弹头: | 获取计算机的访问权限 |
---|---|
传播引擎: | 完成蠕虫样本的复制传播 |
目标选择算法和扫描引擎: | 一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确认其是否可以被攻击。 |
有效载荷: | 附加的攻击代码。 |
5.后门和木马
- 5.1后门与木马定义区别
- 后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道;而木马作为特洛伊木马的简称,是指一类看起来具有某个有用或善意目的,但实际上掩盖着一些隐藏恶意功能的程序;只有后门工具伪装成良性程序,这才具备真正的木马特征。
6.僵尸程序与僵尸网络
- 6.1定义
- 僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸程序为了隐藏自身在受害主机上的存在,会采用一些伪装和欺骗机制,此时也具有特洛伊木马特性,但这并非僵尸程序必有的特征,与后门工具相似,僵尸程序也会为攻击者提供对受害主机的远程控制。
- 6.2僵尸程序和僵尸网络的演化过程
-
6.3僵尸网络的功能结构
-
6.4僵尸网络的命令与控制机制
- 基于IRC协议的命令与控制机制
- 基于HTTP协议的命令与控制机制
- 基于P2P协议的命令与控制机制
7.Rootkit
-
7.1 Rootkit定义
-
7.2用户模式Rootkit
-
7.3内核模式Rootkit
-
利用对内核的操作,内核模式Rootkit可以修改内核,彻底地隐藏攻击者在计算机上的活动,大多数内核模式Rootkit采用如下技术手段:
- 文件和目录隐藏
- 进程隐藏
- 网络端口隐藏
- 混杂模式隐藏
- 改变执行方向
- 设备截取和控制
-
8.恶意代码分析方法
-
8.1恶意代码分析技术概述
-
8.2恶意代码分析环境
- 恶意代码发烧友的分析环境
- 基于虚拟化构建恶意代码分析环境
-
8.3恶意代码静态分析技术
- 反病毒扫描
- 文件格式识别
- Windows:exe、dll (PE)
- Linux:ELF
- 字符串提取分析
- 恶意代码实例名
- 帮助或命令行选项
- 用户会话
- 后门口令
- 相关URL信息、Email地址
- 包含库文件和函数调用
- 二进制结构分析
- 反汇编与反编译
- 代码结构与逻辑分析
- 加壳识别与代码脱壳
-
8.4恶意代码动态分析技术
- 基于快照对比的分析方法和工具
- 系统动态行为监控方法
- 文件行为监控软件
- 进程行为监控软件
- 注册表监控软件
- 本地网络栈行为监控软件
- 网络协议栈监控方法
- 沙箱技术
- 动态调试技术
2.实践过程
实践一:恶意代码静态分析
-
任务:对提供的rada恶意代码样本(U盘或FTP/materials/course9下载),在WinXP_Attacker虚拟机中进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
- 使用文件格式和类型识别工具(file, PEid),给出rada恶意 代码样本的文件格式、运行平台和加壳工具。
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行 脱壳处理。
- 使用字符串提取工具(strings、IDA Pro),对脱壳后的 rada恶意代码样本进行分析,从中发现rada恶意代码的编写作 者是谁?
-
步骤:
实践二:分析Crackme程序
-
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
-
实验环境:装有IDA Pro的WinXP Attacker虚拟机。下面两个程序都是静态分析(利用IDA进行动态分析我不会啊)。
-
步骤1:
- 执行
crackme1.exe
,猜测参数执行,猜测这个程序的输入是一个参数。
- 打开程序分析
IDA Pro
,打开Strings
窗口查看该程序中出现的字符串,发现两种反馈信息I think you are missing something.
和Pardon? What did you say?
猜测:第一个是参数不对的返回情况,第二个是给的参数数量对了,继续进行分析。
- 接下来看函数调用图(Function Call),发现字符串比较函数
strcmp
和输出函数fprintf
和printf
。分析sub_401280
函数。
- 查看函数的汇编代码。
- 左边就是函数参数不为2的情况,右边就是参数为2的情况。
- 进入右边,发现字符串匹配函数
strcmp
,比较输入的字符串与I know the secret
进行比较,如果不匹配就输出Pardon? What did you say?
。如果正确,输出You know how to speak to programs, Mr. Reverse-Engineer。
- 实验,输入
I know the secret
,结果正确
- 执行
-
步骤2:
- 用
IDA Pro
分析crackme2.exe
,照旧打开Strings
窗口查看该程序中出现的字符串。
打开call function
,我们可以看到字符串比较函数strcmp
和输出函数fprintf
以及输入函数等。那么此时应该寻找,sub_401280
这个函数了。
- 分析函数的汇编代码:判断参数是否为
2
,如果不是,就返回I think you are missing something。
, - 对了的情况:这里比较的是
ebp+arg_4
,不是上面的ebp+arg_0
了。那就是说我们这里匹配的不是执行参数了,那应该是什么呢?看arg_4
和arg_0
相差了4
(变量定义的时候dword ptr 8
和dword ptr 0C
),那么arg_0
代表的是第一个参数,其实arg_4
代表的就是第0
个参数,也就是程序名。 - 其他的情况就可照旧分析,下面直接上流程图。
- 测试:
copy crackme2.exe crackmeplease.exe
给程序改个名字,然后输入crackmeplease.exe "I know the secret"
发现输出了一个字符串We have a little secret: Chocolate
- 继续往下看,是一个判断,一个循环,左边是跳出循环的条件。看右边的,有个操作是
xor eax 42h
,这个指令是将eax
与0x42
异或,网上看有个指令是add eax,offset unk_403080。
那么就很简单了,后面的操作就是将unk_403080
中的字符逐个与0x42
进行异或运算。可以验证0x15 xor 0x42
对应的ascii码是W
。(此处借鉴了建国的分析进行学习)
- 用
实践三:样本分析,分析一个自制恶意代码样本
-
任务:现在你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。
- 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
- 找出并解释这个二进制文件的目的。
- 识别并说明这个二进制文件所具有的不同特性。
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
- 给出过去已有的具有相似功能的其他工具。
- 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
-
步骤:
- 查看摘要和文件类型:
md5sum RaDa.exe
指令得到其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7
。利用file RaDa.exe
识别出这是32位PE文件,并且还是个GUI文件
- 接下来使用 IDA 对其进行分析。该程序在第一个实践中已经被脱壳了,脱壳后的文件名称为
RaDa_unpacked.exe
。(进入Strings
对话框,在Type
右键点击Setup
,设置类型为Unicode
。)
- 查看命令行参数:可以看到作者、时间等信息。
- 找到一个 IP 地址,双击定位:猜测程序被执行后访问了这个地址。
- 根据线索分析,得到
RaDa_commands.html
。寻找这个字符串对应的函数sub_404FB0
,进入这个函数,看黄色部分的汇编代码,得知是被拷贝到dword_40C030
这个变量中。
- 找到
dword_40C030
变量对应的函数sub_4052C0
,打开其Call Graph
查看。这里我们看到判断了三个网段分别为192.168.
、172.16.
、10.
,(三个私有网段,确保服务器在私有网段中,然后到服务器去取命令文件)
- 查看摘要和文件类型:
-
问题回答
-
提问:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
-
回答:摘要为caaa6985a43225a0b3add54f44a0d4c7;Win32 PE 加 UPX 壳 GUI 文件。
-
提问:找出并解释这个二进制文件的目的。
-
回答:这个二进制文件通过网络获取指令,并执行;攻击者可以利用其完全控制该系统,是一个后门程序。
-
提问:识别并说明这个二进制文件所具有的不同特性。
-
回答:会请求 Web 服务器;解析获得的指令并执行。
-
提问:识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
-
回答:UPX 压缩技术。
-
提问:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
-
回答:不具有自主传播模块,不具有传播和感染的性质,所以它不属于病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。是一个后门程序。
-
提问:给出过去已有的具有相似功能的其他工具。
-
回答:使用http方式来同攻击者建立连接————Bobax、海阳顶端、Setiri等
-
提问:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
-
回答: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地址被用于攻击蜜罐主机?
- 攻击者尝试了哪些安全漏洞?
- 哪些攻击成功了?是如何成功的?
-
问题一:IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
-
因特网中继聊天(Internet Relay Chat),简称 IRC 。 IRC 的工作原理非常简单,只要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台IRC服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流。注册时需要发送的消息有三种,分别是:
- 口令,
- 昵称,
- 用户信息。
-
消息格式如下:
USER
、PASS
和NICK
。 -
客户端就使用
JOIN
信息来加入频道,格式如下:JOIN
。 -
IRC 服务器明文传输通常在
6667
端口监听,也会使用6660—6669
端口。SSL
加密传输在6697
端口。 -
问题二:僵尸网络是什么?僵尸网络通常用于干什么?
-
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
-
僵尸网络主要用于:发动DDOS攻击、发送垃圾邮件、 监听用户敏感信息、记录键盘输入信息、 扩散新的恶意软件 和 伪造点击量,骗取奖金或操控网上投票和游戏,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
-
问题三:蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
-
通过
Wireshark
打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667
,因为我们知道 IRC 服务通过6667
端口
-
可以找到所有与蜜罐主机进行通信的 IRC 服务器:分别为
209.126.161.29
,66.33.65.58
、63.241.174.144
、217.199.175.10
、209.196.44.172
-
问题四:在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络
-
首先先使用命令
tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'
拉取209.196.44.172
与172.016.134.191
之间的所有的 IRC 数据包。这里一般需要装一下sudo apt-get install tcpflow
(我又碰到kali出问题了,在问题部分详细讲) -
获得三个文件,
172.016.134.191.01152-209.196.044.172.06667
、209.196.044.172.06667-172.016.134.191.01152
和report.xml
,report.xml
包含其他两个文件的相关信息:上述双方的ip地址,端口,mac地址,通信时间等等。
-
首先我们计算在当前主机加入IRC时刻,IRC中主机的个数,使用的PY代码如下所述,主机的个数是 3457。这仅仅是第一步的计算。然后我们在计算截至结束嗅探的时候的不断有主机加入和退出IRC频道,我们在补充上这个过程中的主机个数,共计 3608个。具体使用的代码如下:
import re
pattern = re.compile( r':irc5.aol.com 353 rgdiuggac @(.*?):(.*?)\n', re.S)
pattern2 = re.compile(r':(.*?)!~', re.S)
dict = {}
with open("test.txt", 'r') as fp:
thisline = fp.readline()
while thisline:
if thisline.startswith(":irc5.aol.com 353 rgdiuggac"):
items = re.findall(pattern, thisline)
string = items[0][1]
splitstring = string.split(" ")
for item in splitstring:
dict[item] = 1
else:
items = re.findall(pattern2, thisline)
print(items)
if len(items) == 1:
dict[items[0]] = 1
thisline = fp.readline()
print(len(dict) - 1)
-
问题五:哪些IP地址被用于攻击蜜罐主机?
-
首先,我们认为进入蜜罐的流量都是攻击。使用以下命令查找端口并输出到1.txt 中
-
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | grep -v 'reply' | cut -d '.' -f 10 | cut -d ':' -f 1 | sort | uniq | more >1.txt; wc -l 1.txt
-
(tcpdump -nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v:排除指定字符串;cut -d '.' -f 10:截取以'.'为分隔符的第 10 列;uniq命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数)
可以看到共有148个端口被攻击了
-
接着使用如下指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接IP地址输出到2.txt中。
-
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
(其中 awk -F 就是指定分隔符,可指定一个或多个, print 后面做字符串的拼接。)可以看到一共有165个主机被用于蜜罐入侵
-
问题六:攻击者尝试了哪些安全漏洞?
-
要了解攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用
snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii
指令先查一下网络流分布情况。发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口。
-
利用下面的指令筛选出蜜罐主机相应的 TCP 端口。输出可以看到 TCP 响应端口为135(rpc),139(netbios-ssn),25(smtp)445(smb),4899(radmin),80(http)。
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
(0x12代表有回复)
-
将协议部分改为 udp ,可以筛选出 udp 端口137(netbios-ns)
tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
-
逐个分析所用的端口,首先是udp 137号端口,这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。接下来看 tcp 135 号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了 connect 扫描。
-
然后查看 TCP 80 端口,首先利用 Wireshark 进行筛选
tcp.dstport==80 && ip.dst == 172.16.134.191
首先连接最多的就是 24.197.194.106 这个IP,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。
-
下一个访问 80 端口的是218.25.147.83,这里会看到c:\notworm,说明这是一个蠕虫攻击。上网搜索发现是红色代码(red code)病毒
-
其余的 ip 地址均为正常访问蜜罐.最后看对80端口有没有攻击成功了,我们通过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的回应均为一个 iis 服务器的默认页面,所以80端口的这些攻击均失败。
-
然后关注TCP 139号端口。这个也比较简单,虽然有很多主机连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样也没有成功,所以应该是 SMB 查点。
-
然后分析TCP 445端口。这个端口连接非常多,可以看到许多 \samr, \srvsvc 字符串,查询字符串后很容易发现一个PSEXESVC.EXE字符串,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。
-
还有就是 ip 地址为210.22.204.101的主机进行的攻击,根据字符串推测应该是使用了LAN Manager口令猜测,同样建立了会话,攻击成功
-
其余的针对 445 端口的数据流量都是一些普通查点,就不一一赘述了最后一个TCP 4899端口。只有 IP 地址 210.22.204.101 访问过。上网搜索可以查到 4899 端口是一个远程控制软件 radmin 服务端监听端口,这个软件不是木马,应该是上面攻击成功后上传这个软件方便控制。
-
问题七:哪些攻击成功了?是如何成功的?
-
通过上面的分析可知,成功的攻击发起者是
210.22.204.101
(Dv1dr32 蠕虫)和61.111.101.78
( LAN Manager 口令猜测)
3.学习中遇到的问题及解决
-
问题1:kali又双叒断网!!!!!!!!!!!!!
-
问题1解决方案1:恢复eth0这块网卡罢工问题,不太管用eth0罢工 Kali Linux无法访问网络的问题
-
问题1解决方案2:更换DNS,不管用
-
问题1解决方案3:开启VMware NET Service服务,本来看着服务是已经处于开启状态,以为又没戏了,幸好细心点击了重启,成了···
-
问题2:
tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'
提示找不到文件
-
问题2解决方案2:灵光一现,把文件类型名也加进去,
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
成了~
4.实践总结
啥也不说了,kali你毁我青春。
参考资料
- eth0罢工
- Kali Linux无法访问网络的问题
- 更换DNS
- 开启VMware NET Service服务