20212325 2022-2023-2 《网络与系统安全技术》实验四报告
文章目录
1.实践内容
- 对提供的rada恶意代码样本进行文件类型识别,脱壳后进行字符串,分析样本最终获得rada恶意代码的编写作者
- 使用IDA Pro静态分析crackme1.exe和crackme2.exe,推测其输入参数使其能够正确输出
- 分析自制恶意代码样本,找出其摘要,分析其目的特性、分类和开发作者
- 对提供的蜜罐主机网络数据源进行分析,理解具体实践中的问题
2.实践过程
2.1恶意代码文件类型标识、脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具。
- 下载file指令并进行安装
-
安装file后将其设置为环境变量
-
下载strings指令并进行安装
- 将strings也设置为环境变量
- 打开shell,使用file命令查看文件格式和运行平台,使用strings命令查看字符串
- 可以看出文件为运行在Windows平台上的可执行文件PE32,字符串全为乱码,所以是加了壳的。
- 下载peid,尝试查看具体加壳方式
-
在peid查看ReDa.exe,可以看到加壳方式为upx
-
查看文件偏移
- 查看PE细节
(2)&(3)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理,使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁。
- 使用超级巡警对rada恶意代码文件进行脱壳,脱壳后输出为RaDa_unpacked.exe。
-
再次使用strings命令查看提取的字符串,发现此时不是乱码了,即脱壳成功。向下查找没看到作者信息,使用IDA尝试一下
-
用IDA Pro Free选择脱壳后的文件查看信息,可以看到作者为Hex-Rays SA,后面还有邮箱信息。
2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(1)分析crackme1.exe
-
运行crackme1.exe,发现输入为1个参数时其返回为“Pardon?What did you say?”,输入2-5个参数返回均为“I think you are missing something”,故姑且推测其正确输入为1个参数。
-
用IDA Pro Free打开crackme1.exe,能够看到它的作者信息等
- 查看Strings中的信息,可以找到刚刚回复给我的信息,还能够看到其他两条,刚刚尝试输入时没有返回过。下面还能够看到编译方式和变量的一些信息。
- 查看函数调用图,start函数中有一个strcmp函数应该是用来进行对比,输出函数fprintf和printf。注意到strcmp的上层函数为sub-401280。
- 查看函数图,找到sub-401280相关的部分
- 观察sub_401280函数图,可以看见其cmp [ebo+arg_0],2进行了关于输入参数的判断。
- 打开sub_401280汇编,看看它判断的输入参数是什么。能够找到在strcmp前出现了I know the secret,那么其比对的输入参数就是这个了!
- 回到shell中输入I know the secret,猜测成功。
(2)分析crackme2.exe
-
和猜测crackme1的过程相似,先猜测输入参数。
-
使用IDA Pro Free进行分析。首先还是看strings字符串,出现过的是输入多个参数的I think you are missing something和输入一个参数的I have an identity problem,接下来寻找字符串操作函数。
-
还是能够找到字符串比较函数和输出函数,找到其上级函数sub_401280。
-
接着查看函数图找到sub_401280函数,还是能够找到其对比输入参数cmp的部分。
- 还是转战汇编中找具体对比的什么输入参数。可以发现是crackmeplease.exe,一开始我还以为输入如参数为crackmeplease.exe,但是尝试用这个输入过后发现还是不对,后面看到了先做完实验的同学的报告发现这个是修改程序名。
- 而且很重要的一点是crackme1.exe中比对输入参数的汇编是cmp [ebo+arg_0],2,而这次比较的是ebp+arg_4,就是因为这次是程序名字的对比判断。
- 往下滑发现还有一次strcmp,输入参数为I know the secret。猜测是要输入两次?
- 修改程序名并输入参数,发现不对,可能是shell中输入**./**运行后字符串匹配不对
- 将文件拖到桌面上,用终端尝试成功。
-
反编译一下,可以得知整体流程为判断参数是否为2,若不为2,则执行"I think you are missing something";若为2,则将第一个参数与"crackmeplease.exe"做对比,若不同,输出"I have an identity problem.“,若相同,则将第二个参数与"I know the secret"比较,如第二个参数不同,则执行"Pardon?What did you say?”
2.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
文件摘要为caaa6985a43225a0b3add54f44a0d4c7,这是一个PE可执行文件,同时也是一个UPX加壳文件。
(2)找出并解释这个二进制文件的目的;
-
是一个后门程序。在字符串中,我们可以看到10.10.10.10,反向连接这个ip地址,进行数据传输,这样可以逃避防火墙
(3)识别并说明这个二进制文件所具有的不同特性;
-
它会自动安装到C盘中,并通过修改注册表跟随系统开机启动,访问http://10.10.10.10/Rada/Rada_command.html,还可以解析指令并执行指令。可以进行screenshot、update等操作。
-
在wireshark中可以看到其请求与10.10.10.10的80端口建立tcp连接。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
- UPX 加壳技术,我们分析文件是在脱壳后进行的
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
- 不具有传播和感染的性质,故不属于病毒和蠕虫,同时也未将自己伪装成正常的程序,不是特洛伊木马,开机自启动、能够获得权限,排除各种可能后这应该是一个后门程序。
(6)给出过去已有的具有相似功能的其他工具;
- 前几个实验中用到的msfvenom可生成后门文件进行反弹式链接、获取控制权,进行录音、截图等。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
-
脱壳后在字符串中可以看到(下图1),使用authors命令也可以获得弹出的作者消息提示(下图2、3)。
2.4取证分析实践——Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- IRC全名为Internet Relay Chat(因特网中继聊天),是一款即时聊天工具,类似网络聊天室,但功能更强大。IRC客户端与服务端通信采用的端口和相应协议是公开的。2004年年初,互连网开始大规模出现IRC后门病毒,IRC病毒可以使用户机器里的信息完全暴露给黑客,直接造成用户损失。同时,IRC病毒和蠕虫一样通过网络自动传播,占用大量网络资源,很容易阻塞局域网。
- 加入时需要发送的消息有三种,口令、昵称和用户信息。消息格式如下:USER 、 PASS 和 NICK 。
- IRC服务器明文传输在6667端口,SSL加密传输在6697端口。
(2)僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是指攻击者(称为botmaster)采用一种或多种传播手段,出于恶意目的,传播bot僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
- 僵尸网络主要用于:发动DDOS攻击、发送垃圾邮件、 监听用户敏感信息、记录键盘输入信息、 扩散新的恶意软件和伪造点击量,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 采用wireshark对包进行分析,设置过滤条件为ip.src == 172.16.134.191 and tcp.dstport == 6667 and tcp.flags.syn=1,意思是过滤出ip地址为172.16.134.191的蜜罐主机尝试连接6667端口的包,并且是tcp三次握手的前两个包(不包括最后一个ack包)。
- 可以找到有五个IRC服务器与蜜罐主机进行了通信:
-
- 209.126.161.29
- 66.33.65.58
- 63.241.174.144
- 217.199.175.10
- 209.196.44.172
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
-
先安装tcpflow命令
-
然后输入命令
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
获取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包,生成了三个文件,172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和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 "\r" | grep -v "^$" | sort -u | wc -l
查看有多少主机连接。发现有3461个主机连接过。 -
命令 含义 grep 获取昵称输出行 sed 去除前缀,g表示全局 tr’ ’ ‘\n’ 将空格转换为换行 tr -d “\15” 删除\r grep -v “^$” 去除空行 sort -u 排序并去除重复 wc -l 输出行数
(5)哪些IP地址被用于攻击蜜罐主机?
-
所有进入蜜罐的流量都被视为可疑流量,由于IP地址数过多,wireshark等GUI工具不能胜任,所以使用tcpdump。使用命令
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 > 2325_exp4.txt;wc -l 2325_exp4.txt
找出所有的可能连接的主机的 IP 地址,将连接 IP 地址输出到 2325_exp4.txt 中,我们看到总共有 165 个主机可能被用于入侵蜜罐。其中awk -F就是指定分隔符,可指定一个或多个,print后面做字符串的拼接。
(6)攻击者尝试攻击了那些安全漏洞?
-
使用
snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii
发现只有IP包,大部分都是TCP包,小部分UDP包。 -
使用代码筛选出响应的TCP端口为 135、139、25、445、4899、80:
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
-
筛选出响应的UDP端口为137:
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
-
找到具体的端口之后用wireshark打开,设置过滤条件为
tcp.port==135 || tcp.port==25
查看135和25端口的包,可以看到看到只是进行了连接,但是是没有数据传输,所以这攻击者可能是对这两个端口进行了 connect 扫描。 -
查看139端口,发现许多主机的普通连接,有空的会话,应该是没有攻击。
-
查看445端口,发现有SMB查点,还发现在61.111.101.78发起的请求中发现了PSEXESVC.EXE,这是一种Dv1dr32蠕虫,通过IRC进行通信。
- 为了查看蠕虫攻击是否成功,使用
ip.dst==61.111.101.78
查看从蜜罐发往攻击主机的数据包,可以看到results:Acceptance,且返回信息中含有\PIPE\lsass,攻击者可以进行远程调用。而且以后的数据包中含有很多response字样,猜测是被控主机在响应攻击者的命令。
- 再看发往蜜罐的报文,其中包含了很多SVCCTL的报文。经过搜索得知Windows的svcctl MSRPC接口用于同SCM(服务控制管理器)通讯。svcctl漏洞允许匿名用户连接到SCM,然后就可以枚举所安装的或正在运行的服务。进一步验证了攻击成功。
- 查看4899 端口。只有 IP 地址
210.22.204.101
访问过。可以查到 4899 端口是一个远程控制软件服务端监听端口,这个软件不是木马,应该是上面445端口攻击成功后上传这个软件方便控制。
-
查看80端口,设置筛选条件为
tcp.dstport==80 && ip.dst == 172.16.134.191
,可以看到连接最多的就是24.197.194.106
这个IP,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。- 还有
210.22.204.101
也访问了80端口,攻击者是想通过缓冲区溢出攻击来获得一个命令行
- 除此之外还有IP地址
218.25.147.83
,这里会看到c:\notworm
,说明这是一个蠕虫攻击。上网搜索发现是红色代码(red code)病毒。
- 还有
-
最后查看udp137端口,137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。非法攻击者知道目标主机的IP地址,并向该地址的137端口发送一个连接请求时,就可能获得目标主机的相关名称信息。所以访问这个端口应该是进行NetBIOS查点。
(7)那些攻击成功了?是如何成功的?
- 通过上面的分析可知,成功的攻击发起者是218.25.147.83(蠕虫攻击)。
3.学习中遇到的问题及解决
-
问题1:未联网无法查看rada文件脱壳后的作者信息
-
问题1解决方案:联网
-
问题2:找不到WinXPattacker的镜像下载方式
-
问题2解决方案:使用Win7也可以,只是WinXPattacker中包含了网络监听工具wireshark、渗透工具metasploit、反编译、反汇编工具等等,感觉有点像win版的kali。
4.实践总结
- 本次实验参考了同学的博客,感觉做下来特别绕,一下子用到了非常多的工具,并且一定要思路清晰才能准确地在大量信息中找到自己需要的去进一步行动。但是这些工具使用起来也并不难,可以感受到老师上课所说的工具党不需要编一条代码就能实现攻击,
我们也没怎么编代码就分析了恶意代码。 - 在分析文件涉及到代码尤其是汇编语言的时候还是看得眼花缭乱,还是要多学习了解汇编的知识才行。