目录
- 20232831 袁思承2023-2024-2 《网络攻防实践》第8次作业
- 1.实验内容
- 2.实验过程
- 一、动手实践任务一
- 二、动手实践任务二:分析Crackme程序
- ①crackme1.exe
- ②crackme2.exe
- 三、分析实践任务一
- 四、分析实践任务二
- 3.学习中遇到的问题及解决
- 4.学习感悟、思考等
- 参考资料
20232831 袁思承2023-2024-2 《网络攻防实践》第8次作业
1.实验内容
一、动手实践任务一
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
二、动手实践任务二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
三、分析实践任务一
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
2、找出并解释这个二进制文件的目的;
3、识别并说明这个二进制文件所具有的不同特性;
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
6、给出过去已有的具有相似功能的其他工具;
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
四、分析实践任务二
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
2、僵尸网络是什么?僵尸网络通常用于什么?
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
5、那些IP地址被用于攻击蜜罐主机?
6、攻击者尝试攻击了那些安全漏洞?
7、那些攻击成功了?是如何成功的?
2.实验过程
一、动手实践任务一
首先,将rada恶意代码的两个文件放入到WinXPattackr虚拟机下
Win+R,打开cmd,并使用以下命令,找到RaDa.exe文件,并先对RaDa.exe恶意代码文件进行分析,可以看到RaDa.exe文件
是PE32位类型的EXE可执行文件,且带有GUI界面,所处的系统架构为英特尔的80386系列,所处的系统为32位Windows。
cd 桌面
file RaDa.exe
输入以下命令,进行RaDa.exe文件恶意代码字符串的查看,可以看到输出的字符串为一堆乱码,猜测是因为加壳的原因。此外,最后面出现了几个dll文件的名称,查询发现均为Windows操作系统中重要的DLL动态链接库文件,还出现了一些调用的函数 等信息。
strings RaDa.exe
使用命令查看作者信息,能够发现是以下两个人的作品,脱壳后可以验证是否是这两人,且以下两种查看作者的命令弹出的信息一致:
rada --authors
RaDa.exe --authors
在WinXPattacker中寻找PEid工具,查看RaDa.exe的加壳信息,可以看到UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo内容,说明加的壳为即为此形式。
于是,使用WinXPattacker上自带的超级巡警脱壳工具进行脱壳,生成了一个脱壳后的unpacked的exe文件在桌面
再次使用strings查看字符串的命令,对脱壳后的文件RaDa_unpacked.exe进行字符串分析,可以发现大量的函数调用信息,但是仍然不够详细,需要反汇编来分析,字符串分析是不够的。
于是,使用IDA Pro Free,选择PE Exe对脱壳后文件RaDa_unpacked.exe进行反汇编分析,结果如下:
发现String界面仍然是与上述查看字符串的输出相同
因此,需要修改编码模式,在Sting窗口,右键,选择Setup,然后选Unicode改变编码格式,会发现一片新天地。
新天地如下:
找到作者信息
与上述命令RaDa.exe --authors查看的作者信息相同,均为Raul Siles & David Perez
试验结束!
回答问题如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
RaDa.exe文件是PE32位类型的EXE可执行文件,且带有GUI界面,所处的系统架构为英特尔的80386系列,所处的系统为32位Windows(即运行平台,Intel80386架构的32位Windows)。加壳工具为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
见上述实验过程
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
作者为Raul Siles & David Perez
二、动手实践任务二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
①crackme1.exe
打开cmd,进入桌面后,直接输入crackme1.exe+某些指令,进行输入格式的试探
crackme1.exe
crackme1.exe 1
crackme1.exe 1 2
crackme1.exe open
crackme1.exe ysc
根据它的回复,缺少了输入内容或者是格式有问题,因此直接试探较为困难。于是,直接上工具IDA,与第一个实验一样,选择PE Exe新建一个分析界面,分析后打开如下:
打开String窗口,发现了它的回复总共有4条,但是上面测试只能发现两条,于是猜测没有出现的两条中,一条就是要寻找的特定输入,一条是对特定输入的回复,这里猜测I know the secret为密码,而另一条为密码正确的回复。
猜测是不够的,需要进一步探索:
点击打开IDA View窗口,在右上角菜单栏选择view—graphs—function calls,进行流程图的查看,找到它的输出,即printf,能够发现它属于sub_401280,其中sub_401280中的strcmp块就是使用字符串匹配密码的模块,我们来进行查看:
于是进行sub_401280块的代码查看:
再查看它的代码流程图,在Flow chart中查看:
可以看到,这里是一个条件分支。红色线条代表False,绿色代表True。
让我们着重读取这部分的汇编代码:
push offset alKnowTheSecret:"I know the secret"字符串的地址(偏移量)被推入到栈上。offset指令用于获取一个标签或数据的偏移量。
dword ptr [eax];char *:将eax寄存器中的值解释为一个指向char的指针,然后将栈上的地址存储到这个指针指向的内存位置。
call strcmp:调用字符串比较函数strcmp,用于比较两个字符串是否相等。
简单的说就说判断你是否输入“I know the secret”(要带双引号,因为反汇编代码中带了),如果是,就能走绿色分支,得到回复You know how to speak to programs
结束了判断,接下来进行实验,即在cmd中输入指定输入
crackme1.exe “I know the secret”
实验结束!
②crackme2.exe
实验与①中类似,便不作过多讲解,直接上代码和IDA的反汇编结果如下
crackme2.exe有5条回复
首先得找到printf所属于的那个代码块,仍然是sub_401280
查看反汇编代码(比较大)
着重分析分支语句部分的汇编代码
可以看到,它比crackme1.exe多了一个分支来判断是否输入正确,它先判断是否输入了“crackmeplease.exe”,再判断是否输入了”I know the secret“,因此是两个参数
由此,输入代码如下:
crackme2.exe “crackmeplease.exe” “I know the secret”
结果发现是错误的
再次阅读汇编代码,发现原来不是输入两个参数,是需要将第一个参数“crackmeplease.exe”作为文件的命名,即将crackme2.exe重命名为crackmeplease.exe,再输入第二个参数==“I know the secret==”
crackmeplease.exe “I know the secret”
成功获取指定输入,实验结束!
回答问题如下:
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
①crackme1.exe
特定的输入:crackme1.exe “I know the secret”
②crackme2.exe
特定的输入:crackmeplease.exe “I know the secret”
三、分析实践任务一
分析一个自制恶意代码样本rada,并撰写报告,回答问题:
分析具体内容如下:
使用以下命令进行MD5摘要的获取,可得到MD5为:caaa6985a43225a0b3add54f44a0d4c7
md5sum RaDa.exe
打开自带的Process Explorer软件,用于监听脱壳后的RaDa.exe文件,即RaDa_unpacked.exe(需要启动此脱壳后的恶意代码文件,以实现监听)
点击它,进行监听查看,打开String,看红框内的监听信息可知,该恶意软件先访问了http://10.10.10.10/RaDa这个网站,将RaDa_commands.html下载到了C:\RaDa\tmp,应该是下载了一个恶意软件或其他东西进行执行,留下了后门。它还判断当前环境是否是在虚拟环境下,如果不是,就进行DDos泛洪攻击,占据目标主机的资源,然后还修改了注册表,用Wscript.Shell对象读写 Wscript.Shell有三个方法,分别是RegWrite、RegRead、RegDelete,这里它均用到了。
修改注册表后,它应该是将RaDa设置为了开机启动项,最后它还攻击了三大内网,即192.168、172.16、10三个网段。此外,还能在这里看到作者的信息,即Raul Siles & David Perez,于2004年编写了此恶意软件。
回答问题如下
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
摘要为caaa6985a43225a0b3add54f44a0d4c7:
2、找出并解释这个二进制文件的目的;
①DDos攻击②连接http://10.10.10.10/RaDa网站,下载并留下后门③修改注册表,设置RaDa开机自启动④攻击了三大内网,即192.168、172.16、10三个网段
3、识别并说明这个二进制文件所具有的不同特性;
①会在初次运行时,下载文件到C盘下,留下后门②启动DDos攻击③初次运行时,修改注册表实现自己的开机自启
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
在一、动手实践任务一中得知,使用了这种加壳技术:UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
该文件通过修改注册表实现开机自启,通过连接网站下载文件,留下后门,并实现DDos攻击可以知道,它的目的是让主机瘫痪,无法提供服务。此外,它不复制感染,不属于病毒和蠕虫,且没有伪装成可用程序欺骗用户运行,因此不属于木马,所以是一个后门程序
6、给出过去已有的具有相似功能的其他工具;
①Bobax-2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
②Setiri及其前辈Gatslag
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,直接命令行输入RaDa -authors就可以知晓作者(一、动手实践任务一),或者直接反编译该脱壳文件也可以发现(一、动手实践任务一),最后就说运行Process Explorer软件进行监听,也能知晓作者(三、分析实践任务一),有三种做法,作者为Raul Siles & David Perez
四、分析实践任务二
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。
首先,打开Kali虚拟机,使用Wireshark对学习通上的检测日志文件进行分析:
简单浏览,发现真是群魔乱舞,各种IP地址,各种包,TCP、UDP、HTTP、NBNS、NBSS、DCERPC、SMB等等。
由于数据过多,只能边回答问题,边进行数据流的查看,因此回答如下:
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC(Internet Relay Chat,互联网中继聊天)是一种实时通信协议,于1980年代晚期开发,至今仍广泛应用于各种在线社区、支持频道和社交聚会等场景。
当IRC客户端(连接到IRC网络的程序)想要加入IRC网络时,会向IRC服务器发送一系列命令。初始命令通常包括以下内容,发送这些命令后,客户端等待IRC服务器回应欢迎信息和可用频道列表:
1、NICK 命令:设置客户端在网络上的昵称(用户名)。 例子:NICK 我的昵称
2、USER 命令:设置客户端的用户名和真实姓名。例子:USER 我的用户名 0* : 我的真实姓名
3、MODE 命令:设置客户端的用户模式(例如,+i 隐身模式)。 例子:MODE 我的昵称+i
IRC通常使用以下TCP端口:
6665 - 6669:常规IRC通信端口
6697:IRC连接的备用端口(有时用于SSL/TLS加密连接)
7000:另一个IRC连接的备用端口
2、僵尸网络是什么?僵尸网络通常用于什么?
“僵尸网络”(botnet)是一种恶意网络, 由感染恶意软件的计算机组成。这些计算机可以被攻击者远程控制,而不需要计算机所有者的知情或同意。恶意软件,通常是一种木马程序,允许攻击者访问和控制感染的计算机,将它们变成 “僵尸” 或 “机器人”。
僵尸网络通常用于恶意活动,例如:
1、分布式拒绝服务(DDoS)攻击:从多个感染的计算机对网站或网络进行流量攻击,使其不可用。
2、垃圾邮件和钓鱼:从感染的计算机发送大量垃圾邮件或钓鱼邮件。
3、恶意软件传播:从感染的计算机传播恶意软件、病毒或勒索软件。
4、加密货币挖矿:使用感染的计算机挖矿加密货币,而不需要计算机所有者的知情或同意。
5、数据盗窃和间谍:从感染的计算机窃取敏感信息,如登录凭证、信用卡号或机密数据。
僵尸网络经常在暗网上出租或出售,允许犯罪分子发起攻击或从事其他恶意活动。执法机构和网络安全专家努力破坏和关闭这些网络,但它们仍然对在线安全构成严重威胁。
为了防止计算机成为僵尸网络的一部分,个人和组织必须采取措施,例如:保持软件和操作系统最新、安装反病毒软件并定期扫描恶意软件、避免可疑链接和附件、使用强密码并启用双因素身份验证、实施防火墙和入侵检测系统等等。
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
由于IRC端口众多,常用的就有6665 - 6669,所以得用以下命令,将IRC服务器的端口和蜜罐主机的ip作为过滤条件,对wireshark日志进行包的筛选
ip.src==172.16.134.191 && tcp.port == 6665
ip.src==172.16.134.191 && tcp.port == 6666
ip.src==172.16.134.191 && tcp.port == 6667
ip.src==172.16.134.191 && tcp.port == 6668
ip.src==172.16.134.191 && tcp.port == 6669
ip.src==172.16.134.191 && tcp.port == 6697
ip.src==172.16.134.191 && tcp.port == 7000
发现,只有6667号端口才有数据,其他均没有
其他没有的省略,只给出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
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
先使用命令安装TCPflow工具
sudo apt-get install tcpflow
首先,使用以下命令进行wireshark日志进行分析,它将生成report.xml文件,这是一个报告文件
sudo tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
使用vim可以查看文件,但是文件较大,数据冗杂,需要用以下命令,使用grep过滤(整个都是命令)从而查看该文件,得到主机数量,即利用管道命令来筛选:
sudo 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
可以看到总共有3461台主机访问了以209.196.44.172为服务器的僵尸网络。
5、那些IP地址被用于攻击蜜罐主机?
使用以下指令,重新利用tcpflow来进行分析,它将生成一个名为IP.txt的文件(文件名自定义),文件中是被用于攻击蜜罐主机的所有IP地址
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 > IP.txt;wc -l IP.txt
生成的IP.txt文件如下,且输出165表示共有165个IP被用于攻击蜜罐主机
双击打开:
即总共165个IP被用于攻击蜜罐主机。
6、攻击者尝试攻击了那些安全漏洞?
使用以下命令,利用tcpflow工具进行筛选,筛选的是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
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
可以看到,TCP端口有135(rpc)、139(netbios-ssn)、25(smtp)、445(smb)、 4899(radmin)、 80(http)被攻击
UDP端口有137(NetBIOS Name Service)号端口被攻击。
这些就是攻击者攻击的安全漏洞。
7、那些攻击成功了?是如何成功的?
只有445端口的PSEXESVC.EXE攻击成功,获取了权限,进行了远程控制。
它首先伪装了一个蠕虫病毒文件PSEXESVC.EXE,并通过开放的445端口将其植入到目标主机,然后逐步拿下了admin、administrator的管理员权限,实现了远程连接,掌控了目标主机。
攻击需要逐个来分析判断是否成功:
①135端口
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && tcp.port ==135
只发现了一些TCP数据包,只是一些握手连接,没有交互
②139端口
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && tcp.port ==139
发现了TCP、SMB和NBSS等等数据包,但没有任何下文
③25端口
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && tcp.port ==25
只发现了一些TCP数据包,只是一些握手连接,没有交互
④445端口
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && tcp.port ==445
在这里查看到了PSEXESVC.EXE这一可疑的exe可执行文件,百度查询,是一个恶意远控程序,也是蠕虫病毒
PSEXESVC.EXE 是一个服务,在使用 PsExec 连接到远程系统时安装在远程系统上。此服务允许 PsExec 在远程系统上执行过程并与本地系统通信。然而,需要注意的是,恶意作者有时会使用名称 “PSEXESVC.EXE” 作为恶意程序的伪装,以使其看起来像合法程序一样。
可以看到,攻击者逐步拿下权限
拿下admin
拿下administrator
该攻击成功,被攻击者拿下了权限,导致被远程控制。
⑤4899端口
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && tcp.port ==4899
只发现了一些TCP数据包,只是一些握手连接,没有交互
但是发现了一条cmd命令,是http包,但尚未知道是干什么的。查询百度,猜测也是远程连接的操作,但没有下文。应该攻击没有成功。
⑥80端口
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && tcp.port ==80
又发现了cmd,与上述4899端口出现的一致。
又发现了CCCCC等填充数据,于是明白,这是在做缓冲区溢出。
跟踪数据流发现,一切正常。如果缓冲区溢出攻击成功,将被拿下shell,而这里没有出现,因此攻击失败。
⑦137端口(UDP)
使用以下命令在wireshark中查询
ip.addr == 172.16.134.191 && udp.port ==137
只发现一系列的NBNS包,这是一种网络基本输入/输出系统(NetBIOS)名称服务器的交互。
因此,只有445端口的PSEXESVC.EXE攻击成功,获取了权限,进行了远程控制。
3.学习中遇到的问题及解决
- 问题1:对于逆向、反汇编、监听等等工具的使用不熟练
- 问题1解决方案:观看课程视频、多学习学习通上的资料,查看诸葛建伟老师课件、参考他人博客等等。
4.学习感悟、思考等
通过本次实验,我对恶意软件、恶意代码的理解更深,了解了什么是木马,什么是蠕虫,什么是病毒、什么是后门等等,以及它们之间有什么区别和联系。此外,我学会使用很多不同的逆向工具和监听工具,让我对网络安全的学习更加深入。最后就是我的网安技术确实比较薄弱,不观看视频查阅资料,甚至询问ChatGPT,根本不知道下一步该如何进行。这是需要加强的。
参考资料
- 北京大学网络攻防技术与实践课程作业-诸葛建伟
- ChatGPT(请科学上网)