20192423 2021-2022-2 《网络与系统攻防技术》实验四实验报告

1.实验内容

一、恶意代码文件类型标识、脱壳与字符串提取
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答问题
四、取证分析实践,分析僵尸网络。

2.实验过程

一、恶意代码文件类型标识、脱壳与字符串提取

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

使用file RaDa.exe指令查看恶意代码类型
样本类型:PE32 executable (GUI) Intel 80386, for MS Windows

使用指令strings RaDa.exe 打印其中字符串,发现显示一堆乱码,所以应该是加了壳。

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

使用软件peid查看相关的加壳信息。可以看到此程序使用upx加壳运行平台为win32,且有可图示化界面(GUI)

使用超级巡警脱壳软件进行脱壳:脱壳之后成功输出为 RaDa_unpacked.exe

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

使用指令strings RaDa_unpacked.exe 打印其字符串。

打开pe软件,并运行我们成功脱壳后的RaDa_unpacked.exe 程序。可以在pe软件中打开我们运行的进程,找到rada进程,双击查看相关资料,可以找到这个后门程序的作者及时间

二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

1.分析crackme1.exe

使用指令file查看crackme1.exe,文件类型为PE32 executable (console) Intel 80386, for MS Windows。是32位可执行程序,在windows系统上运行。

我们先去尝试猜测crackme1.exe这个文件的输入;
运行crackme1.exe此文件,直接运行以及输入一个以上的参数会得到 I think you are missing something ,而输入一个参数则会得到 Pardon? What did you say? ,由得到的结果不同我们猜测输入参数为1个。

使用ida打开程序crackme1.exe后在strings界面我们看到前面有四条语句:

I think you are missing something
I know the secret
Pardon? What did you say?
You konw how to speak to programs,Mr.Reverse-Engineer

利用IDA打开程序crackme1.exe,我们先查看整个程序的函数调用关系图。点击 ida veiw——veiw——Gragh——Function calls

Setunhandledexceptionfilter:异常处理函数
setmode是一种设置打开文件方式的函数程序。
getmainargs函数:调用命令行解析,并通过传递的指针将参数复制到 main()
ExitProcess 结束调用的进程及其所有的线程

其中sub_401280函数下调用了strump函数来对我们所输入的参数进行比对
用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2)
若str1=str2,则返回零;
若str1<str2,则返回负数;若str1>str2,则返回正数。

fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件。
Printf()函数输出到屏幕。

打开sub_401280的函数图可以看到,当我们输入的参数数量大于等于2时,会将字符串I think you are missing something 压入栈中并输出。当我们输入的参数数量为1时则是利用函数strump判断是否为字符串“I know the secret ” 如果匹配成功的话就输出字符串“You konw how to speak to programs, Mr.Reverse-Engineer”,不匹配的话则输出“Pardon? What did you say? ”

打开命令行输入crackme1.exe “I know the secret “,发现输出了字符串“You konw how to speak to programs, Mr.Reverse-Engineer”

2.分析crackme2.exe

使用指令file查看crackme2.exe,文件类型为PE32 executable (console) Intel 80386, for MS Windows。是32位程序,且为命令行形式的程序,在windows系统上运行。

推测crackme2.exe的输入参数个数为一个。

利用IDA打开crackme2.exe,得到函数图以及字符串表。

由分析crackme1.exe的方法可得到crackme2.exe正确输出如下:

三、分析一个自制恶意代码样本rada

首先使用MD5对该恶意程序进行摘要信息分析
得到md5摘要值为caaa6985a43225a0b3add54f44a0d4c7


1.查看文件信息分析文件

根据这些字符串我们可以看到这个RaDa.exe程序会连接到http://10.10.10.10名为RaDa_commands.html的一个网站
CGI-BIN是一种特殊的目录,在进行交互式的WWW访问时,需要服务器上有相应的程序对访问者输入的信息进行处理。
CGI程序实现文件的下载和上传,下载文件保存于主机中的C:/RaDa/tmp目录下
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run是控制计算机启动项的注册表信息,后门程序还激活了自启动.
程序执行后就开始“DDOS”远程攻击,控制该主机来攻击其他主机远程后门控制。

其中还可以发现其作者以及创建时间以及一些指令(screeenshot、sleep)。

利用dependency walker打开已经脱壳后的rada,我们可以发现不少的恶意代码常用导出函数。

  • GetAdaptersInfo
    用来获取系统上网络适配器的相关信息。后门程序有时会调用GetAdaptersInfo函数,来取得关于受感染主机的摘要信息。
  • GetModuleFilename
      返回目前进程装载某个模块的文件名。恶意代码可以使用这个函数,在目前运行进程中修改或者复制文件。
  • GetSystemDefaultLangId
      返回系统默认语言设置的函数。这可以用来定制显示与文件名,作为对感染主机摘要信息的获取
  • GetSystemDefaultLangId
    返回系统默认语言设置的函数。这可以用来定制显示与文件名,作为对感染主机摘要信息的获取
  • GetVersionEx
      返回目前正在运行的Windows操作系统版本信息。这可以被用来获取受害主机的摘要信息,或是在不同Windows版本中选择未经文档化结构的一些偏移地址。
  • GetWindowsDirectory
      返回Windows目录的文件系统路径(通常是C:\Windows),恶意代码经常使用这个函数来确定将其他恶意程序安装到哪个目录。
      
    等等恶意代码函数

运行程序rada.exe并且打开wireshark进行抓包,发现确实本机向10.10.10.10发送了大量的TCP数据包,满足ddos攻击的特征。

2.回答问题

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

MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7
是32位在windows系统上运行的有图形化界面的可执行文件,使用了加壳软件upx进行了加壳处理。

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

该恶意程序会自启动,该后门程序会让本机对指定主机发送大量http请求,也就是ddos拒绝服务攻击,同时攻击者也能远程控制主机做一些操作,这应该是一个远程后门控制程序。

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

Rada.exe在c盘某目录下生成了两个子目录:bin和tmp,rada.exe激活后将木马文件释放到bin中。
Rada.exe在注册表的启动项下建立了其的键值,将木马文件的路径添加了进去(自启动)。

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

使用了加壳工具UPX进行了加壳处理

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

该文件是远程控制主机的程序,不符合病毒和蠕虫的特征,猜测有可能是木马或者基于http协议的僵尸后门程序。

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

Bobax——2004。

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

作者是Raul siles和David Perze。创建时间是2004年。

四、取证分析实践,分析僵尸网络。

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

IRC的全称是:Internet Relay Chat。它的意思在中文里一般称为互联网中继聊天。
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER 、PASS 、NICK 。注册完成后,客户端就使用 JOIN 信息来加入频道
IRC 通常使用 6667 端口,也会使用 6660—6669 端口。

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

僵尸网络是由感染的计算机网络的恶意软件在一个攻击方的控制之下,被称为“僵尸牧民”。每个在bot-herder控制下的个人机器被称为机器人。
僵尸网络的应用场景最常见的应该是DDoS分布式拒绝服务。僵尸网络发起的拒绝服务攻击,瞬间就可以使中小企业的网站瘫痪。

(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

打开数据文件

设置过滤条件: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为服务器的僵尸网络?

使用tcpflow打开我们数据文件来进行分析,tcpflow类似于是wireshark的命令行版本。使用指令apt-get install tcpflowtcpflow,然后执行tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667',利用tcpflow打开botnet_pcap_file.dat文件,设置过滤条件host以及端口号。如下图执行完之后会生成三个文件。

执行指令
cat 209.196.044.172.06667-172.016.134.191.01152 | grep "^: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
得到3457,故有3457台主机访问了。

(5)哪些IP地址被用于攻击蜜罐主机?

使用指令,将攻击蜜罐主机的ip筛选出输出至20192423.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 > 20192423.txt;wc -l 20192423.txt
打开20192423.txt文件可以看到有165个IP地址用于攻击蜜罐主机。

(6)攻击者尝试了哪些安全漏洞?(7)哪些攻击成功了?是如何成功的?

通过wireshark协议分级我们可以看到大部分为tcp数据包。

使用指令筛选响应的tcp端口:
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 响应端口为
135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin)和80(http)

依次分析这些端口发现在445端口中有61.111.101.78向蜜罐主机发送PSEXESVC.EXE
攻击者通常会使用PsExec在远程主机执行命令。在客户端执行psexec.exe后,如果服务器认证成功,会将psexesvc.exe上传到服务端的ADMIN$目录并作为服务运行,在执行完命令后删除对应的服务和psexesvc.exe。
 通过对客户端和服务端的事件日志、注册表、文件系统进行分析,可以从客户端主机获得连接的目的主机,连接时间等信息;从服务端主机可以获得连接的客户端信息,连接时间等信息。

可以看到有主机的响应,且有\PIPE\ntsvcs,说明此攻击是成功的。

看到210.22.204.101向蜜罐发送了很多的C,可能在进行缓冲区溢出攻击

如图218.25.147.83向蜜罐主机发送的http报文带有蠕虫(c:\notworm)

3.问题及解决方案

问题1:

在win10系统下使用strings命令报错
是因为strings为linux命令,当然在win下没法使用啦,安装CygwinPortable工具并将其文件所在位置配置好环境变量即可!

具体可参考window如何使用Linux命令,如何在windows系统中使用linux的命令

问题2:

grep报错提示“匹配到二进制文件(标准输入)”

由命令export LC_COLLATE=C把LC_COLLATE环境变量设置成C可以解决问题。

4.学习感悟、思考等

通过此次实验,掌握了不少分析恶意软件的方法及软件(IDA,PE等等),脱壳软件、加壳软件UPX、查壳工具PEID等等。不得不说此次实验对我还是有很大挑战的,很多方面不知道该从何下手,分析恶意软件的时候也是询问了很多同学以及查看了云班课中的视频才有点头绪,因此也是学会了不少。

参考资料