20212912 2021-2022-2 《网络攻防实践》实践八报告

1.实践内容

1.1加壳与脱壳

1.2反编译

1.3僵尸程序

1.4恶意代码

2.实践过程

2.1动手实践任务一

2.2动手实践任务二

2.3分析实践任务一

2.4分析实践任务二

3.学习中遇到的问题及解决

4.学习感想和体会

 

 

 

1.实践内容

1.1加壳与脱壳

加壳是利用特殊的算法,对可执行文件里的资源进行压缩,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。有矛就有盾,脱壳即去掉软件所加的壳。目前脱壳一般分手动和自动两种,手动就是通过调试工具脱壳,对脱壳者有一定水平要求,涉及到很多汇编语言和软件调试方面的知识;而自动就是用专门的脱壳工具,最常用某种压缩软件都有他人写的反压缩工具对应。

1.2反编译

反编译是将可执行的(准备运行的)程序代码(也称为目标代码)转换为某种形式的高级编程语言,使其具有更易读的格式。反编译是一种逆向工程,它的作用与编译器的作用相反。它与编译相反。完成此任务的工具称为反编译器。反编译有许多不同的原因,例如理解程序、恢复源代码以进行存档或更新、查找病毒、调试程序和翻译过时的代码。完全自动化的反编译是不可能的。没有反编译器可以获得开发人员编写的确切源代码。

 

1.3僵尸程序

(1)什么是僵尸网络?

僵尸网络是网络蠕虫、后门程序、特洛伊木马等传统恶意代码形态的基础上发展融合而成的新型攻击方式,其攻击者出于恶意目的,传播僵尸程序控制大量主机它区别于其他攻击方式的特性是一对多的命令与控制机制。

(2)僵尸程序功能组成结构

其主要分为主体功能模块和辅助功能模块,其中主体功能模块主要包括命令与控制模块和传播模块,辅助功能模块主要包括信息窃取模块、主机控制模块、下载更新模块、防分析检测模块

(3)僵尸程序工作机制

渗透攻击

加入服务器

动态影射至IRC服务器

加入IRC信道

监听命令

接收命令

执行攻击

 

1.4恶意代码

恶意代码:恶意代码(Unwanted Code)是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件

 

恶意代码类型

定义特征

典型实例

计算机病毒(Virus)

是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。

Brain,Concept,CIH

蠕虫(Worm)

蠕虫是一类自主运行的恶意代码,并不需要将自身嵌入到其他宿主程序中。蠕虫通常通过修改操作系统相关配置,使其能够在系统启动时得以运行。

Morris,Code Red,Slammer

恶意移动代码(Malicious mobile code)

属于移动代码的范畴;移动代码是指可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少的人工干预。移动代码通常在Web服务器端实现,实现技术包括Java appletsJavaScript脚本代码、VBScript脚本代码和ActiveX控件等。

Santy Worm

后门(Backdoor)

是指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制。

Netcat,BO,冰河

特洛伊木马(Trojan)

是一类伪装成有用的软件,但隐藏起恶意目标的恶意代码。后门仅为攻击者给出非法访问途径,而特洛伊木马的特征则在于伪装性。

Setiri

僵尸程序(Bot)

攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的攻击网络。僵尸程序(Bot)是用于构建僵尸网络以形成一对多控制攻击平台的恶意代码形态。

Sdbot,Agobot

内核套件(Rootkit)

是在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权(root access)的一类恶意代码,又分为用户态Rootkit和内核态Rootkit两种。

LRK,FU,hdef

融合型恶意代码

融合上述多种恶意代码技术,构成更具破坏性的恶意代码形态。

Nimda

 

2.实践过程

2.1动手实践任务一

 

对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:

 

(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;

使用命令 file rada.exe。可以看到 Rada.exe的运行环境为PE32 executable (GUI) Intel 80386, for MS Windows

 

(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;

使用程序PEiD.exe进行扫描。在扩展信息中可以看到加壳的工具为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo

 

使用超级巡警脱壳机进行脱壳

(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?

使用 strings命令进行字符串提取

 

2.2动手实践任务二

任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。

利用 IDA Pro 打开crackme1分析,通过 Strings 窗口可以查看到该程序中出现的明文字符串,可以看到前面的两种输出信息,"I think you are missing something." "Pardon? What did you say?",还发现了"I know the secret"和"You know how to speak to programs, Mr. Reverse-Engineer"这两个字符串。有内容我们可以猜测,前者就是我们需要的口令,后者就是输入口令正确时程序的输出信息。

 

接下来看函数调用图可以发现:关键的部分在sub_401280这里,程序是使用strcmp函数来输入的,然后利用print和fprint函数输出

 

研究sub_401280,cmp [ebp+arg_0],2为判断程序是否有两个参数。在 C 语言中,主函数通常为int main(int argc,const char **argv),即第一个参数argc对应argv的大小,第二个参数对应命令行的格式。如在命令行输入crackme1.exe 1,那么参数对应的值为argc=2,argv={"crackme1.exe","1"}

 

猜测正确的口令应该是I know the secret,输入命令运行这个口令,可以得到这样一条回复您知道如何与项目对话,逆向工程师先生,成功

 

接下来分析crackme2.exe

先打开Function call(函数调用图),发现关键的部分在sub_401280这里

 

接下来研究sub_401280,大致可以判断出关键口令为I know the secret,但是发现代码逻辑中的程序名称改变了,因此需要对程序名称进行修改

 

 

修改完后运行文件,输入crackmeplease.exe "I know the secret",发现回复为我有一个小小的秘密:巧克力,成功

 

 

2.3分析实践任务一

 

分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:

 

首先打开Filemon(文件),Regmon(注册表),Wireshark(网络)三个软件进行监测。这个时候可以启动这个恶意软件了。

观察Filemon我们可以看到程序文件RaDa.exe复制到了C:\RaDa\bin目录下,并且新建了temp目录。

 

观察Regmon,我们可以看到进行了很多注册表的操作,其中其中有一个时在自启动项里面加入了RaDa: C:\RaDa\bin\RaDa.exe

 

看Wireshark的结果,时不时的访问10.10.10.10,而且是80端口

 

使用 IDA 对RaDa_unpacked.exe进行分析,进入 Strings 对话框,在菜单栏中的Edit中点击Setup,设置类型为 Unicode。

可以看到作者

 

定位到这句命令所在的函数sub_404FB0中;在这个函数中通过汇编语言的命令得知字符串aHklmSoftwareVm移动到了变量dword_40C070中;然后定位此变量的函数为sub_40AAA0;

 

 

查看函数sub_40AAA0的控制流图,找到SELECT这句类似于SQL的语句,由这个语句本身透露出的信息(SELECT * FROM Win32_NetworkAdapterConfigure...)可知,这个函数进行了网卡配置信息的查询;然后分析上下函数调用情况确认VMware Tools是否写入到了注册表中;通过注册表来判断OS是否运行在VMware虚拟机上,如果是,则使用—-authors参数时将不会输出作者信息;

 

 

 

 

 

1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

使用命令 md5sum RaDa.exe指令得到其md5摘要

 

2、找出并解释这个二进制文件的目的;

这个二进制文件是一个后门程序,它会自动安装到C盘中,并修改注册表跟随系统开机启动:访问http://10.10.10.10/Rada/Rada_command.html。

 

3、识别并说明这个二进制文件所具有的不同特性;

初次安装的时候会进行初始化的相关操作,添加注册列表、移动文件位置至C盘,建立网络连接接收指令。

持续运行阶段:维持与服务器的网络连接,解析网络指令,执行网络指令,等待一段时间继续执行。

 

4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

采用了UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo的加壳方式

 

5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫。然后它也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马。可以认为他是一个后门程序或者僵尸程序。

 

6、给出过去已有的具有相似功能的其他工具;

Bobax,2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。还有特洛伊木马Setiri。

 

7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

2004年,由Raul siles和David Perze二人编写

 

2.4分析实践任务二

Windows 2000系统被攻破并加入僵尸网络

任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:

1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

因特网中继聊天(Internet Relay Chat),简称 IRC。IRC 的工作原理非常简单,只需要在自己的 PC 上运行客户端软件,然后通过因特网以IRC 协议连接到一台 IRC 服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流。

注册时需要发送的消息有三种,分别是口令,昵称和用户信息

IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。SSL 加密传输在 6697 端口。

 

2、僵尸网络是什么?僵尸网络通常用于什么?

僵尸网络是可被攻击者远程控制的被攻陷主机所组成的网络。僵尸网络是控制者(称为Botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。

僵尸网络主要用于:发动DDOS攻击、发送垃圾邮件、 监听用户敏感信息、记录键盘输入信息、 扩散新的恶意软件 和 伪造点击量,骗取奖金或操控网上投票和游戏

 

3、蜜罐主机(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

 

4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

安装sudo apt-get install 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

 

5、那些IP地址被用于攻击蜜罐主机?

使用以下命令查找端口并输出到1.txt 中(tcpdump -nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v:排除指定字符串;cut -d '.' -f 10:截取以'.'为分隔符的第 10 列;uniq命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数),总共148个端口

 

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

 

使用下面的指令找出所有的可能连接的主机的IP地址。这个指令的作用就是将连接IP地址输出到2.txt中,我们看到总共有165个主机可能被用于入侵蜜罐。其中awk -F就是指定分隔符,可指定一个或多个,print后面做字符串的拼接。

 

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

 

6、攻击者尝试攻击了那些安全漏洞?

 

首先使用tcpdump命令行查看下攻击者扫描的蜜罐的端口:

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 //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 udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq //udp端口

UDP端口有:①137(netbios-ns);

 

使用过滤规则tcp.port == 135 || tcp.port == 25过滤数据包;发现全是一堆TCP连接请求但是并没有数据传输,因此攻击者只是对这俩端口进行了conncet扫描;

 

再使用过滤规则ip.dst == 172.16.134.191过滤数据包,发现IP 24.197.194.106和蜜罐交互最多,并且里面有很多HTTP请求、协商协议请求和shell的一些操作,结合IIS漏洞的特点可知攻击者使用http协议对蜜罐主机进行了疯狂的Web探测,但是最后没有建立连接,因此以失败告终;

 

在抓包的最后的几行数据包中出现了一个异样的源IP,查看详情之后发现是蠕虫;

 

使用过滤规则tcp.dstport == 4899过滤数据包,4899是Radmin默认使用也经常被黑客当作木马来使用

 

使用过滤规则tcp.dstport == 139过滤数据包;139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows"文件和打印机共享"和SAMBA。在Internet上共享自己的硬盘可能是最常见的问题。

 

使用过滤规则tcp.dstport == 445过滤数据包;黑客能通过该445端口偷偷共享硬盘,甚至会在悄无声息中将硬盘格式化掉!这个端口其实实质上还是共享文件夹的端口SMB,从wireshark抓包中同样也看到了攻击者利用这个445端口进行SMB连接的情况;

 

 

 

攻击IP

攻击文件名

攻击漏洞

结果

129.116.182.239

IPC$ \samr\\c

普通查点

未攻破

195.36.247.77

IPC$ \samr\\ADMIN

普通查点

未攻破

209.45.125.69

IPC$ \samr

普通查点、口令猜测

未攻破

210.22.204.101

IPC$ \samr \svcctl \r_server.exe admdll.dll raddrv.dll

普通查点、口令猜测、MSRPC-SVCCTL服务枚举漏洞等

成功攻破

61.111.101.78

IPC$ \samr \svcctl PSEXESVC.EXE

PSEXESVC攻击

成功攻破

66.139.10.15

IPC$ \samr

普通查点、口令猜测

未攻破

66.8.163.125

IPC$ \samr

普通查点

未攻破

80.181.116.202

IPC$ \samr

普通查点

未攻破

 

 

下面是UDP端口的分析:UDP端口137(netbios-ns)一般安装了NetBIOS协议后,该端口会自动处于开放状态,使用者只需要向局域网或互联网上的某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息;

 

7、那些攻击成功了?是如何成功的?

通过TCP 445端口对目标主机210.22.204.101进行了普通查点、口令猜测、MSRPC-SVCCTL服务枚举漏洞等攻击。通过TCP 445端口对目标主机61.111.101.78进行了PSEXESVC攻击。

 

3.学习中遇到的问题及解决

1.明明有rada.exe这个文件,但是打不开。

发现Linux文件名是严格区分大小写的。

 

2.物理机中的文件传不进虚拟机里

 

开机后要等一会,等VMware tools启动后就可以传文件了

 

3.使用strings命令进行字符串提取发现乱码

要先脱壳再查看字符串

 

 

4.学习感想和体会

通过本次攻防实验,我学会了如何对恶意代码和病毒程序进行动态分析和静态分析。理解了恶意软件和僵尸程序的概念,了解了IDA、超级巡警、PEID等工具的使用方法,掌握了如何使用Filemon、Regmon等系统监控工具监控应用程序的运行。

 

 

这次的学习主要是恶意代码分析T^T从来没有接触过相应的喵所以不是很明白各个方面都是做什么的说~对原理的不理解导致了开始实践时无从下手呐~需要继续学习多接触相应的知识QvQ 以上文案:hjs

posted @ 2022-05-07 14:15  Sucarlet  阅读(157)  评论(0编辑  收藏  举报