20211917 2021-2022-2 《网络攻防实践》第八周作业

1.知识点梳理与总结

1.1实验目标

网络攻防实践第8次实验,恶意代码分析实践。

1.2实验要求

https://edu.cnblogs.com/campus/besti/2021-2022-2-NADP/homework/12634

1.3实验原理

  • 1.3.1恶意代码基础知识
    1.恶意代码:
    恶意代码一般指的是对计算机有损害的计算机代码或者web脚本,这些代码或者脚本能使计算机按照攻击者的意图执⾏以达到恶意⽬标。常见的恶意代码包括:病毒(简称病毒)、特洛伊木马(简称木马)、计算机蠕虫(简称蠕虫)、后门、逻辑炸弹等。
    2.计算机病毒
    计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另一台计算机,这也是其传播机制。具有感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性的特性。
    3.网络蠕虫
    一种通过网络自主传播、自我复制的独立恶意代码。(从这里就可以看出病毒和蠕虫的区别)传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。
    4.后门与木马
    允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。
    5.僵尸程序与僵尸网络
    僵尸程序定义:攻击者用于一对多控制目标主机的恶意代码。
    僵尸网络定义:攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。(注意仔细品味几种恶意程序的定义的黑体字,体会不同)
    6.Rootkit
    隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。换句话说,就是root权限的kit工具包。

2.实践过程

实践一:恶意代码静态分析

  • 任务:对提供的rada恶意代码样本(U盘或FTP/materials/course9下载),在WinXP_Attacker虚拟机中进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。

使用文件格式和类型识别工具(file, PEid),给出rada恶意 代码样本的文件格式、运行平台和加壳工具。
使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行 脱壳处理。
使用字符串提取工具(strings、IDA Pro),对脱壳后的 rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?

  • 注意:在进行静力解析时,一定要切断物理机器的网路,同时也要切断物理机器与外界网路的连线,即便它本身并无恶意。

  • 试验平台:WinXP Attacker(装有cygwin和基础卸载软件和字串抽取器)。

  • 使用 file RaDa. exe命令来检查 RaDa.exe的文件类型,可以看出为32位视窗。

  • 以下是看是否有加壳,以下是用PEiD工具(查壳)来看看加壳的种类。在此我们可以看到, UPX外壳是0.89.6的版本(压缩外壳,请参阅 UPX外壳分析)。也能看见档案的入口点,EP段,偏移,档案的类型等等。

  • 下面用strings RaDa.exe查看RaDa.exe中可打印字符串,发现都是乱码,这也验证了这是一个加壳程序,所以下一步是我们要进行脱壳。

  • 我们用超级巡警这个软件进行脱壳,这里也识别出了是一个UPX壳,这个压缩壳还是比较容易脱,脱完之后输出为RaDa_unpacked.exe

  • 脱壳结束,我们就可以进行分析!打开IDA Pro Free选择脱壳之后的文件,一直next就行,可以看到如下信息。首先是作者的信息DataRescue sa/nv。同时这个程序是由MSVB编写的,继续往下是一些函数调用和汇编代码。到这里本次实验结束,结束之后就把内容打包,删除文件。

实践二:分析Crackme程序

  • 任务:将crackme1. exe和crackme2. exe用于 WinXP Attacker虚拟机中的 IDA Pro进行静态或动态地解析,查找可以输出成功的信息的具体的输入。

  • 实验环境:WinXP Attacker的 IDA Pro。下面是静态分析的两个程序。

  • 首先对crackme1. exe进行解析。在crackme1. exe中进行操作,并假设一个参数的输入结果与其它的参数输入结果不同,因此可以推测该程序的输入是一个参量。

  • 然后使用IDA Pro开启此程式解析,透过 Strings视窗,我们会看到程式中的文字,我们会得到两种回馈讯息, I think you, missing something, Pardon?什么叫你今天?`,首先,返回错误的参数,其次,给出正确的参数数目,但没有正确的细节。接下来的两个问题,我不清楚。

  • 下面我们再看看功能呼叫图表,前面提到,寻找与字符串运算有关的功能和输出功能;我们在做这个项目的时候,显然会有一个结果。你一定会找到下面的图片,你会发现,在下面的图片中,你会发现一个字符串的对比功能 strcmp printf。很显然,sub_401280的功能是非常关键的。

  • 打开此函数,您将会看到 push, sub, move,' push ebp进入堆栈,并将其与上一个 cmp`比较函数参数是否为2。

  • 接下来就是对比了,在左侧,我们可以很轻易地看见,在左侧,是一个不是2的函数,而不是2的字符,和我们的猜测是一样的,而在右侧,则是一个2的参数。

  • 在右侧,我们会看到另一个字符串匹配函数 strcmp,也就是说,我们要把这个字符串和‘I know the secret’进行比较,如果不匹配,就输出 Pardon? What did you say?这样的话,你可以输出You know how to speak to programs, Mr. Reverse-Engineer

  • 根据上面的分析我们得到了正确的结果。

  • 接着,对crackme2. exe进行解析。以下我将以 IDA Pro为主体进行分析。首先,我们来看看明文,一共有5个,接下来,我们将继续查找到的字符串运算。

  • 首先,打开呼叫功能,您可以看见一个字符串比较函数 strcmp,输出函数 fprintf,还有其他一些输入功能。这时,您可以查找到sub_401280

  • 找出该功能的编译码,再一次,在这里有一个判定,参数为2,或者没有;这就是I think you are missing something

  • 请留意在此进行对比。这是 ebp+arg_4,而不是 ebp+arg_0。所以我们不需要进行任何的匹配,看看arg_4arg_0之间的差距(在定义的时候 dword ptr 8 dword ptr 0 C),那么arg_0代表的是第一个参数,其实arg_4代表的就是第0个参数,也就是程序名(这里可能又有人要问为什么是4,32位平台堆叠指针每次4字节不同)。实际上,以下是可以检验的,在进行以下首次的参数比对时,首先进行 addeax,4命令,即把位址改回来。

  • 这是一个判定失误的结果。为了判定一个成功的输出量,我们可以看出,在第一个参量中,它就是我们的第一个参量应当被输入的数值。并且在下面还指出了一个错误的输入。

  • 第一步," copycrackme2. exe crackmeplease. exe为该软件命名,并键入 crackmeplease. exe" I know the secret"`,您会看到一个" We have a little secret: Chocolate",但我们从来没有看到过这样的明文。

  • 再往下,他看到了另一个结论,这是一个循环,而左侧的那个,显然就是他想要跳出这个循环。有一个动作是 xor eax 42 h,它的意思是 eax0x42,在网络上有一条命令,叫做 add eax,unk_403080。接下来的步骤是把unk_403080中的每一个字符和0x42进行 XOR运算。可以检验0x15 xor 0x42对应的 ascii代码为 W。到目前为止,对恶意代码的分析已经完成。

实践三:样本分析,分析一个自制恶意代码样本

  • 任务:现在你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取` 所有信息所采取的恶意代码分析技术。

提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
找出并解释这个二进制文件的目的。
识别并说明这个二进制文件所具有的不同特性。
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
给出过去已有的具有相似功能的其他工具。
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

问题分析

  • 得到一个程序第一步我们应该是打开他,在打开他之前要打开监控工具吧。这就是所谓的动态分析。

  • 首先,检查(Filemon), Regmon (Regmon)和 Wireshark (web)三个应用程序。这时就可以开始该病毒程序了。

  • 从 Filemon中可以看出," RaDa. exe被拷贝至 C:\ RaDa\ bin,以及 temp`目录。

  • 我们可以在 Regmon上发现大量的登录动作被执行,在这些动作中,有一次添加了 RaDa: C:\ RaDa\ bin\ RaDa. exe

  • 请继续查看 Wireshark提供的搜索结果,偶尔会有浏览`10.10.10.10``'',可能是在浏览 html网页。

  • 以下是对其进行的静态分析。总结、档案、结构、剥离

  • 它的md5总结数值为caaa6985a43225a0b3add54f44a0d4c7。使用' file RaDa. exe来辨认这个32- bit PE档案和 GUI档案,它可以通过 strings RaDa. exe`的方式来判断是否所有的代码都是无序的。

  • 现在我们的超级警察正在进行脱壳,这是一只 UPX的外壳,而且已经成功的脱壳了。

  • 在脱壳的过程中,他需要使用 IDA Pro来进行分析。所以,在静态分析的时候,他会先查看字符串。

  • 首先,你要将 Type变成 unicode,看看以下的字符,首先,很显然,这是一个指令行的参数,您可以一个一个地尝试,看看它们的意思。第二幅图片中,我们可以看出,这是一位作家的作品。第三幅图片显示的是一个登录的字串,不过现在只剩下两个了,另外一个就是 VMware tools。很显然,这就是我们上次看到的 html页面。

  • 字符串看完下一步我们就看汇编代码逻辑了。首先我们还是看命令行参数的代码逻辑。我们可以看到命令行参数都在sub_405E40这个函数中,这个函数应该就是处理命令行参数的。

  • 继续从线索的角度来看,RaDa_commands.ht ml是非常关键的,我们在这里已经发现了一个网络存取,然后我们开始查找相应的功能。首先,我们可以很容易地找到一个函数,它就是sub_404FB0,我们来看看,在那个黄色区域里,复制到dword_40C030。还有许多其它的字符串复制(它们是缺省的)。

  • 很容易就能发现dword_40C030的函数'sub_4052C0,然后打开它的 call Graph来查看。在此我们可以看出,三个网络分段分别为192.168,172.16,10,显然,这是三个专用网络分段,即保证服务器处于专用网络分段;然后到服务器拿到指令文件。

  • 有命令文件就一定有命令,那么下面就是一些具体的命令以及其功能。

  • 最后一部分分析,找到的字符串中有Vmware Tools,所以我们猜测这个程序是不是对虚拟机有所检测

  • 首先,我们要找出那个字串的函数sub_404FB0,然后把它复制到一个变量dword_40C070,然后再去查找它的相应的功能,就会发现sub_40AAA0。下面我们将重点介绍该功能的功能和被调用的位置。

  • 我们可以看见该功能执行一个关于网络卡片的配置信息(Select),并执行一个关于“dword_40C070”的检查(Wscript.sh ell)的处理。也就是说," vmware tools是否存在于该登录中。

  • 我们仔细地看着- authors在我们的虚拟机上输出 Unknow argument,但是我们的确可以从明文的文字中发现它的著者资料。这时,我们注意到sub_40B010的处理功能是sub_40B010′,然后我们就会查看 Call Graph,得到了一个很明显的结论,在此我们使用了Sub_40AAA0功能,在此,我们会在该函数中使用 Unknow argument`,否则就会输出相应的代码。至此,我们的解析就告一段落。。

问题解答

问题一:md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。32位PE GUI可执行程序,同时这是一个UPX加壳文件。

问题二:通过上面的分析,我们知道用户上网,就得到了攻击者的指令,并且攻击者可以完全控制该系统(指令),所以这应该是一个后门程序或者僵尸程序。

问题三:RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:

  • 从指定的web服务器请求指定的web页面。
  • 解析获得的web页面,获取其中的指令。
  • 执行解析出来的指令,主要的指令上面给出。
  • 等待一段时间后继续按照这个循环执行。

问题四:防分析技术如下:

  • UPX加壳,答案提到的手动修改没有仔细研究。
  • 通过查看网卡的MAC地址以及查看VMware Tools的注册表项 来判断操作系统是否运行在VMware虚拟机上,如果是,则使用—-authors参数时将不会输出作者信息。
  • Starting DDoS Smurf remote attack字符串可能让别人联想这是DDos攻击。

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

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

问题七:很简单了,作者在上面的分析中给出了是Raul siles和David Perze于2004年编写的。

实践四:取证分析,Windows 2000系统被攻破并加入僵尸网络

  • 任务:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题

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

  • 因特网中继聊天(Internet Relay Chat),简称IRC。IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。IRC特点是通过服务器中继与其他连接到这一服务器上的用户交流。通过IRC简介了解IRC的相关内容。
  • 注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER <username> <hostname> <servername> <realname>PASS <password>NICK <nickname>。注册完成后,客户端就使用JOIN信息来加 入频道,格式如下:JOIN <channel>
  • IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。
  • 注意:攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道,那么基于端口识别服务不再可靠,要进行基于应用协议特征进行识别(如USER/NICK)。

问题二:僵尸网络是什么?僵尸网络通常用于干什么?

  • 僵尸网络是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
  • 僵尸网络,是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。

问题三:蜜罐主机(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

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

  • 说明:这里先不要用kali尝试了,在kali下tcpflow输出的文件用grep命令有点问题(grep不到全部的字符串),这里坑了我很久,所以我就直接用在macOS上做了。估计是文件编码的问题,如果有谁知道麻烦告知,谢谢。

  • 这里还是主要参考答案方法3的思路。首先我们用tcpflow进行分流,指令为tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667",这条指令的含义就是读取文件,筛选host和端口6667后进行分流。生成了一个report文件和两个分流的文件,当然我们主要看的就是209.开头的文件。从这个文件中找到有多少个主机访问了209.196.44.172

  • 下一步,由于macOS字符编码的问题,参考RE error: illegal byte sequence on Mac OS X。所以使用sed命令可能导致illegal byte sequence问题。所以限先执行以下两条指令export LC_COLLATE='C'export LC_CTYPE='C'。同时下面会用到很多Linux指令,建议大家参考Linux菜鸟教程查看相关的教程。

  • 下面我们输入如下指令进行搜索有多少主机连接。下面讲解这个指令:首先这个指令肯定是管道连接的,第一条是cat命令,连接209.输出文件。第二条grep搜索获取昵称输出行。第三条sed去除前缀,最后的g是全局的意思。第三条tr将空格转换为换行。第四条tr -d删除\r。第五条grep -v就是NOT指令,去除空行。第六条sort -u排序并去除重复。最后一条wc -l输出行数。所以看到输出我们就知道总共有3457个主机访问了以209.196.44.172为服务器的僵尸网络。
    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

问题五:哪些IP地址被用于攻击蜜罐主机?

  • 因为蜜罐的特殊性,只要是进入蜜罐的流量都应该被认为是攻击。所以首先明确被攻击的端口。使用下面的指令查找端口并输出到1.txt中,如图所示,查找到148个被攻击的端口。大部分指令上面讲过了,我们看cut -d是指定字段的分隔符,uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。
    tcpdump -n -nn -r botnet_pcap_file '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 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt

问题六、七:攻击者尝试了哪些安全漏洞?哪些攻击成功了?是如何成功的?

  • 攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii指令先查一下网络流分布情况。我们发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口。

  • 利用下面的指令筛选出蜜罐主机相应的TCP端口,指令上面都讲过了,差不多,多了一个筛选条件就是响应0x12。输出可以看到TCP响应端口为135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)。同样的,将指令协议部分改成udp就可以查询udp端口响应,我们能查到仅有137(netbios-ns)号端口响应。
    tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

  • 下面就是就上面几个端口进行逐个分析,先说明udp 137号端口,这个是个在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是NetBIOS查点了。
    接下来我们看tcp 135号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了connect扫描。

  • 然后看TCP 80端口,首先利用Wireshark进行筛选tcp.dstport==80 && ip.dst == 172.16.134.191,首先连接最多的就是24.197.194.106这个IP,他的行为就是不停的用脚本在攻击IIS服务器的漏洞,从而获取系统权限,正是因为用的脚本,所以才会有这么多记录。

  • 接下来是68.169.174.108访问的80端口,好吧,都是正常的HTTP访问,并无异常。同时,最后还有一个192.130.71.66也是一个正常的访问,就不再叙述了。

  • 接下来是210.22.204.101访问的80端口,这么多C是什么情况,看来攻击者是想通过缓冲区溢出攻击来获得一个命令行了。

  • 最后一个访问80端口的是218.25.147.83,看到这么多N我还以为是缓冲区溢出攻击呢,但是继续往下看,你会看到c:\notworm,稍微百度下你就会发现这是一个红色代码蠕虫攻击。

  • 最后就是看80端口有没有攻击成功了,我们通过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的几次回应均为一个iis服务器的默认页面,所以80端口的这些攻击均失败。

  • 接下来是TCP 139号端口。这个也比较简单,虽然有很多连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样这个也没有成功,这个应该是个SMB查点。

  • 下面分析与139端口关系极其密切的TCP 445端口。这个端口连接非常多,同时我们也能看到许多\samr, \srvsvc,这些都是基本的查点,这里确实不好找,建议用strings查询相关的字符串进行分析,或者就像我一样硬看,查询字符串后很容易发现一个PSEXESVC.EXE字符串,同时你在Wireshark中也能找到,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。那么我们怎么判断是不是攻击成功了呢?我们同样找出口流量,发现每个IP地址连入的连接都有响应的回应,并且返回信息中含有\PIPE\ntsvcs,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限,因此这个攻击成功的。

  • 最后还剩一个TCP 4899端口。只有一个IP访问过,即210.22.204.101。可以查得4899端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上载的这个软件方便控制。到此,我们的分析就结束啦。

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

问题一:对汇编代码的了解不够,导致分析过程可能存在不完整、不完全正确的部分。
问题一解决方案:稍微复习了一下汇编的指令。
问题二:tcpflow分流的编码,kali下用grep无法识别。
问题二解决方案:在自己的macOS上没有问题。

4.学习感悟、思考

事实上,每一次试验,都觉得有许多可以拓展的地方,尤其是在简单地利用一个简单的工具感到枯燥的时间,而一旦展开,则需要大量的阅读;还有那么多的功课,我觉得应该把生产率给释放出来。
这个试验确实很困难,我看得懂了,但还是有几个更深层次的东西,我想请你给我解释一下。
大部分的东西都没有按照题目的逻辑去做,不过总觉得这个题目要简单一些,特别是在 Wireshark的帮助下。
对数据进行分类、分类、抽取有用的数据,是实现数据处理的关键。
文字搜寻确实可以做到许多事情。

参考资料

UPX壳

posted @ 2022-05-08 21:56  啊一只羊羊羊  阅读(177)  评论(0编辑  收藏  举报