20202418 2022-2023-2 《网络与系统攻防技术》实验四实验报告
- 1.实验内容
- 2.实验过程
- 2.1 恶意代码文件类型标识、脱壳与字符串提取
- 2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
- 2.3 分析一个自制恶意代码样本rada
- 2.4 取证分析实践 Windows 2000系统被攻破并加入僵尸网络
- 3.问题及解决方案
- 4.学习感悟、思考等
- 参考资料
1.实验内容
(1)对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者
(2)使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
(3)分析一个自制恶意代码样本rada,并撰写报告
(4)取证分析实践Windows 2000系统被攻破并加入僵尸网络
2.实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
2.1.1使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
使用Linux的file指令,将文件放到虚拟机中中,可扫描得到rada文件格式。
同时使用PEiD软件,能获取到rada的加壳信息。
通过上述操作,可知rada的文件格式为 PE32 executable (GUI) Intel 80386,运行平台为windows系统,加壳工具为UPX。
2.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
下载超级巡警脱壳机,拖入文件可得到脱壳后的代码。
2.1.3 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
使用windows自带的strings指令,可看出来脱壳后rada存在的字符串样本。在windows中,strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
可看出在软件中有两个人名,那大概率就是Raul Siles和David Perez两位国际友人了。
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1 下载IDA Pro,利用IDA Pro分析文件
2.2.2 利用反编译查看软件的高级语言
2.2.2.1 要反编译谁?
选择“View”→“Graphs”→“Function calls”,查看函数调用图。
可以看到,_main函数可以调用_fprintf和_printf。据此,我们判断_main中包含选择输出哪些信息的逻辑结构。
2.2.2.2 如何反编译?
通过“Jump”→“Jump to function”→“_main”查看_main函数。按下F5(或“View”→“Open subviews”→“Generate pseudocode”)进行反编译。
如图所示,得到main函数的代码。
其中arcg指的是指令的参数数量(包括文件名本身),如果输入I know the secret的话,就会打印出来You know how to speak to programs, Mr. Reverse-Engineer。如果输入两个参数,但第二个参数不是我知道秘密的话,就会输出pardon? what did you say?。如果是其他参数数量就是I think you are missing something.
因此只需要在命令行中输入crackmel. exe "I know the secret“即可
2.2.3 仿照上述操作获得crackme2的输入
如图所示,这个就要求第一个输入参数为crackmeplease.exe,但问题在于如果输入这个,就无法调用这个程序本身。
正解是直接修改文件名,修改成crackmeplease.exe即可。
2.3 分析一个自制恶意代码样本rada
2.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
输入所示,打开对应的网站,获取对应的摘要信息。
使用file指令,可以获得一些样本的基本信息。
2.3.2 找出并解释这个二进制文件的目的
2.3.2.1打开Process Explorer,然后搜索RaDa
2.3.2.2打开unpacked的rada,注意弹出窗口后不要点击确定!
双击对应的进程,点击字符串,可以看到
可知该二进制文件有以下行为:
1、该文件通过HTTP协议请求10.10.10.10\RaDa\RaDa_commands.html。
2、在C盘中创建一个RaDa文件夹,包含tmp和bin两个子文件夹,其中将RaDa.exe复制在bin子文件夹中。
对注册表进行读、写和删除。
3、添加2个注册表项,路径为分别为HKLM(即HKEY_LOCAL_MACHINE)\Software\Microsoft\Windows\CurrentVersion\Run\和HKLM\Software\VMware, Inc.\VMware Tools\InstallPath。其中HKLM类型为REN_SZ,数据内容为C:\RaDa\bin
4、远程控制电脑,如put、get、screenshot、sleep。
2.3.3 识别并说明这个二进制文件所具有的不同特性
1、当文件被执行时,其将自身安装到系统中,拥有修改注册表项的能力。
2、文件能够请求页面并获得来自攻击者的指令。
3、文件能够使用put、get、screenshot、sleep等指令。
2.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
使用了upx加壳技术
2.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
鉴定为后门程序
一是这个恶意代码没有传播的迹象,其次是这个代码也没有伪装成正常的程序,同时他具有拍摄截屏等敏感操作的功能,有很强的控制能力,故属于某种后门软件。
2.3.6 给出过去已有的具有相似功能的其他工具
实验二使用的msfvenom生成的后门软件也能够进行截图等相关操作,有些类似。
2.3.7 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,在Windows环境中,输入–author即可弹出开发作者。
2.4 取证分析实践 Windows 2000系统被攻破并加入僵尸网络
2.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC即Internet Relay Chat,互联网中继聊天,是一种使用客户端-服务器架构的多用户聊天系统。客户端用户可以加入特定的频道(channel)与该频道中的所有用户聊天,也可以采用私聊的方式。特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
使用IRC首先要进行注册,注册时需要发送的消息有三种,分别是口令、昵称和用户信息。当IRC客户端申加入一个IRC网络时将发送JOIN信息来加入频道
IRC服务器通常在6667端口监听
2.4.2 僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(BotNet)是指攻击者(botmaster)出于恶意目的,传播僵尸程序(Bot)控制大量主机(Zombie,傀儡主机、肉鸡),并通过一对多的命令与控制信道所组成的网络。
僵尸网络构成了一个攻击平台,利用这个平台可以有效地发起各种各样的攻击行为,可以导致整个基础信息网络或者重要应用系统瘫痪,也可以导致大量机密或个人隐私泄漏,还可以用来从事网络欺诈等其他违法犯罪活动。
拒绝服务攻击
利用Botnet发动DDos攻击是当前最主要的威胁之一,攻击者可以向自己控制的所有bots发送指令,让它们在特定的时间同时开始连续访问特定的网络目标,从而达到DDos的目的。
发送垃圾邮件
一些bots会设立sockv4、v5代理,这样就可以利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息。
窃取秘密
Botnet的控制者可以从僵尸主机中窃取用户的各种敏感信息和其他秘密,例如个人帐号、机密数据等。同时bot程序能够使用sniffer观测感兴趣的网络数据,从而获得网络流量中的秘密。
滥用资源
攻击者利用Botnet从事各种需要耗费网络资源的活动,从而使用户的网络性能受到影响,甚至带来经济损失。例如:种植广告软件、利用僵尸主机搭建假冒的银行网站从事网络钓鱼的非法活动。
网络挖矿
网络安全商fortiguard labs的网络安全研究报告指出,虚拟货币的僵尸挖矿ZeroAccess已经成为全球网络当下主要威胁。
2.4.3 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
使用wireshark,将体验提供的.bat文件拖入打开后,将端口设置为IRC端口,ip源设置为蜜罐主机的ip地址,发现抓包如下所示:
不难发现该主机和五个IRC服务器进行了通信,分别是:
209.126.161.29
66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
2.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
这个包数量巨大,因此需要一些高科技来协助我们分析这个数据。
2.4.4.1 在kali中安装tcpflow
TCPflow是一款功能强大的、基于命令行的免费开源工具,用于在Unix之类的系统(如Linux)上分析网络流量。它可捕获通过TCP连接接收或传输的数据,并存储在文件中供以后分析,采用的格式便于协议分析和调试。
它实际上是类似tcpdump的工具,因为它处理来自网络或存储文件的数据包。它同样支持tcpdump支持的功能强大的过滤表达式。唯一的区别是,tcpflow让所有TCP数据包井然有序,并在单独的文件(每路方向的数据流有一个文件)中组装每路数据流,供以后分析。
2.4.4.2 利用tcpflow分析数据包
tcpflow -r botnet_pcap_file.dat ‘host 209.196.44.172 and port 6667’ # 进行抓包,-r读取该数据包
可以得到:209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、
report.xml。
使用管道命令进行分析(这里我的指令包含:/ 不知道怎么着就给我转义成一个表情了哈哈哈哈):
cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a “^: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
其中
cat命令:连接209.输出文件
grep:搜索获取昵称输出行
sed:去除前缀
tr:将空格转换为换行
tr -d:删除\r
grep -v:去除空行
sort -u:排序并去除重复
wc -l:输出行数
因此共3457台电脑与其连接。
2.4.5 哪些IP地址被用于攻击蜜罐主机?
由于蜜罐具有引诱攻击的属性,因此所有进入蜜罐的流量都视为可疑流量,都是攻击。用下列命令将所有连接蜜罐主机的IP地址输出到2.txt。可知共有165个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
cut -d ‘.’ -f 10截取以’.'为分隔符的第10列;uniq检查并删除 文本文件中重复出现的行列;wc -l获得行数
因此共有165个地址被用于攻击,具体见2.txt。
2.4.6 攻击者尝试攻击了那些安全漏洞?
直接使用wireshark自带的统计功能(统计->协议分级)
即只有两种包,其中大部分为TCP,少部分为UDP,为了精准分析,我们需要看和哪些端口进行了通信。
输入指令
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
cpdump -r botnet_pcap_file.dat -nn ‘src host 172.16.134.191’ and udp | cut -d ’ ’ -f 3 | cut -d ‘.’ -f 5 | sort | uniq
可以得到对应的TCP响应端口和UCP响应端口
如上图所示,可以发现得到的TCP端口有:
135(rpc)、139(netbios-ssn)、25(smtp)、445(smb)、 4899(radmin)、 80(http)
UDP端口为137端口,此端口在局域网中提供计算机的IP地址查询服务,处于自动开放状态,可用于NetBIOS查点。
接下来逐个分析:
2.4.6.1 tcp.port == 135
如图所示,无实质性内容,仅仅是相互连接的过程。依据信息安全概论的相关知识推测是某种扫描。
2.4.6.2 tcp.port == 139
Tree Connect AndX Request(树连接和请求)数据报,列出要访问的网络资源的名称(匿名管道共享),靶机会发送一个Tree Connect AndX Response(树连接和响应)数据报,同意访问资源,并列出访问者的权限,如图所示,攻击主机提出想要访问\PC0191\C的可共享资源。但未发现Tree Connect AndX Response的数据报,推测是攻击失败了,没有成功共享到那个资源。
2.4.6.3 tcp.port == 25
无实质性内容,推测仅仅为某种扫描。
2.4.6.4 tcp.port == 445
首先发现了大量重复的树请求,而每次都会返回Bad Userid,推测可能有暴力口令破解的嫌疑。
其次还发现有删除响应请求的迹象,应该是攻击者删除入侵证据的举措。
在后来的数据包中,还出现了PSEXESVC.EXE软件,而且是攻击者发出请求共享,被攻击者同意共享,应该是此时已经被注入恶意软件,而且可以看到被攻击者成功响应!说明已经被成功攻击了。
2.4.6.5 tcp.port == 4899
4899端口是一个远程控制软件(remote administrator)服务端监听的端口,他不能算是一个木马程序,但是具有远程控制功能。通常杀毒软件是无法查出它来的。
有这么多的流量,且双方通信正常,一堆ACK,可以知道已经形成了控制和被控制的关系了。
2.4.6.5 tcp.port == 80
在1840和32889包中,我们发现请求了好多重复字母的请求包,猜测为缓冲区溢出攻击。
2.4.6.6 udp.port == 137
这里的NBNS是NetBIOS name service的缩写,是NetBIOS的命名服务。可知此处是在进行NetBIOS查点。
2.4.7 那些攻击成功了?是如何成功的?
由2.4.6分析可知,缓冲区溢出的攻击、445的口令爆破攻击与蠕虫注入攻击、4899的远程攻击、137的查点都成功了。具体实现过程见2.4.6的分析。
3.问题及解决方案
- 问题1:面对如此冗长的流量报分析,实在是难以下手。
- 问题1解决方案:面对不明白的东西多百度,同时向优秀的学长学姐学习,遇见不常见的数据包点进去仔细去思考。
- 问题2:使用ProcessExplorer中发现rada不会稳定存在。
- 问题2解决方案:这个和ProcessExplorer关系不到,主要是双击RaDa后会弹出一个错误信息,如果此时我们点击确定后,rada的进程会自行消失,所以双击rada后,不要急着点确定,应该在弹出错误信息的情况下点开ProcessExplorer进行分析。
4.学习感悟、思考等
在本次实验中,我完成了对恶意代码进行脱壳、提取字符串、分析函数调用关系等操作,并且多方面分析了一个恶意代码样本和一个dat数据源,掌握了wireshark和linux中tcpflow的使用。
这次实验知识涉及面广,大量技术融合交织、技术原理错综复杂,我对这些命令和工具的使用还有待加深,其他需要掌握的与网络攻防相关的命令还有很多。
通过这次实验证明,恶意代码在我们现实生活中很常见,防不胜防!所以作为一名网络空间安全专业的学生,一定要能够对其进行准确分析,找到清楚恶意软件的方法,净化网络环境!