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

一、实践内容

本次实践的内容为恶意代码分析,为顺利完成本次实践,需要了解的知识包括:对于恶意代码的基本了解和分类以及恶意代码分析方法。利用恶意代码技术,攻击者能够将系统攻击过程进行自动化与规模化,从而在更短的时间内对更多的网络用户构成危害。正因为如此,互联网用户或许可能感受不到网络协议攻击与滥用,也可能不用担心服务器遭遇渗透入侵,但却不得不面对恶意代码所带来的安全威胁与困扰。

1、恶意代码的定义与分类

  • 计算机病毒:一种能够自我复制的代码,通过嵌入其他程序进行感染,需要人工干预传播
    
  • 蠕虫:与计算机病毒相比,不需要嵌入其他宿主程序中,可以自主运行
    
  • 恶意移动代码:可以自动从远程主机下载并在本地执行的轻量级程序,常在web端实现
    
  • 后门:可以绕开正常的安全控制机制,为攻击者提供访问的代码
    
  • 特洛伊木马:伪装成有用软件,但是内含恶意目标的恶意代码
    
  • 僵尸网络:使用僵尸程序构建的执行一对多命令的攻击网络。
    
  • 内核套件:用以获取并保持最高控制权的一类恶意代码。
    

2、恶意代码分析方法

恶意代码分析技术主要问题:

  • 不能事先知道恶意代码的目的是什么
    
  • 恶意代码具有恶意的攻击目的
    
  • 恶意代码在绝大多数时候不会具有原代码
    
  • 恶意代码会引入大量的对抗分析技术
    

恶意代码静态分析技术

  • 反病毒扫描:通过匹配现有的已知的病毒进行判断病毒的种类、家族和变种信息。
    
  • 文件格式识别:获得恶意软件执行的平台等信息
    
  • 字符串提取:获取恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL、E-mail信息和包含库文件和函数调用。
    
  • 二进制结构分析:获取程序的头部摘要信息、目标文件运行架构、重定位入口、符号表入口、不同的代码段、编译代码时使用的程序等。
    
  • 反汇编与反编译:将二进制程序,转化成汇编代码和高级语言代码。
    
  • 代码结构与逻辑分析:获取函数调用关系图和程序控制流图。
    
  • 加壳识别与代码脱壳:对代码进行加密、多样性、多态和变形的机制。
    

二、实践过程

(一)动手实践任务一

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

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

1、文件格式和类型识别

对于文件格式和类型识别,我们可以使用file命令获取。file命令可以用来查看文件信息或类型,WinXPattacker上可以使用该命令。在命令提示符下输入file rada.exe,可以看到Rada.exe为一个32位Windows的可执行文件,且有GUI图形界面:

2、脱壳处理

直接使用WinXPattacker上已有的超级巡警脱壳机工具对rada.exe进行脱壳处理,生成rada_unpacked.exe文件:

3、寻找编写作者

在WinXPattacker使用IDA工具打开脱壳处理后的rada_unpacked.exe文件,进入Strings页面,在String列右击打开Setup,勾选Unicode编码:


之后便可以在这一列找到Authors:Raul Siles & David Perez,2004,即编写作者。

(二)动手实践任务二

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

1、crackme1.exe分析

对于crackme1.exe的分析使用的是Ollydbg工具,这也是反汇编工作的常用工具。首先在没有参数的情况下运行一下程序,结果如下,只显示了一行字符串:

这里我们点击调试->参数,可以为程序设置运行参数:

重新运行程序之后我们找到main函数入口(使用Ollydbg找到main函数入口的方式可以参考我的这篇博客,工具的百度云盘在这,提取码为jbkv,以管理身份打开吾爱破解.exe即可),往下翻一翻可以看到这四行不同的字符串,因此可以推测这一部分就有我们所需要的信息:

00401280处设置断点(F2),看到call函数我们可以推测,调用的两个函数是用来处理输入的参数的,下面的cmp [arg.1],0x2用来判断参数的个数是否为两个,之后是一个跳转je Xcrackme1.004012D2,若不为则往下运行输出打印字符串I think……

若为两个参数则跳转到地址004012D2,对第二个参数和字符串I know the secret进行比较:


之后通过test eax,eax上下的代码段进行判断并跳转,字符串正确则输出You know……,否则输出Pardon?……

运行测试结果如下图所示:

2、crackme2.exe分析

对于crackme2.exe分析使用的是要求的IDA工具,该工具在WinXPattacker可以找到。crackme1.exe采用的是动态分析,通过程序执行过程来看输入输出对应关系,crackme2.exe的分析中,我们使用IDA打开该程序,然后打开View->Graphs->Flow chart,可以查看该程序的流程图,静态分析程序的执行步骤:

可以看到,程序首先检查传入的参数个数是否为2个,若不是则输出打印I think……,若是则判断第一个参数是否为crackmeplease.exe,若不是则输出打印字符串I have an ……,若是则对第二个采纳数进行判断:

若第二个参数不为字符串I know the secret,则输出打印Pardon?……,若是则输出打印We have a little……

程序运行测试结果如下:

(三)分析实践任务一

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

1、分析

该文件的md5摘要如下图所示:

首先打开wireshark、Process Monitor对rada.exe运行进行监视,能够看到rada.exe在C盘中添加了相关文件,添加的结果是success,在C盘下也能够找到这些文件:

接下来使用脱壳工具对rada.exe进行脱壳处理:

使用IDA打开脱壳后的程序,在string窗口显示二进制文件中能够搜索到的字符串,步骤同动手实践任务一一样:

在这些找到的字符串中,能够看到以下这些眼熟的字符串,包括一个IP地址、C盘文件夹路径等:

通过这个IP地址,在代码中找到引用的地方,结合参考资料和分析,可以推测该程序通过http访问10.10.10.10/Rada下的RaDa_commands的网页,在靶机上创建一个文件夹“C:/RaDa/tmp”来保存下载的文件:

通过Flow chart视图,可以看到该程序判断了三个私有网段:192.168.、172.16.、10.,也就是说确保服务器在私有网段中,然后到服务器去取命令文件:


下面则是程序的一些具体参数及其功能,例如getputName等:

2、回答

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

该文件的md5摘要为caaa6985a43225a0b3add54f44a0d4c7

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

通过上边的分析,我们可以知道这个程序可以通过网络获取指令,并执行,不具备自主传播模块,由此可知,这个应该是后门程序或僵尸网络程序。

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

初次安装的时候会进行初始化的相关操作,添加注册列表、移动文件位置至C盘,建立网络连接接收指令。
持续运行阶段:维持与服务器的网络连接,解析网络指令,执行网络指令,等待一段时间继续执行。

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

采用了UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo的加壳方式,直接被一键脱壳。

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

首先此二进制程序不具有自主传播模块,所以它不属于病毒和蠕虫;此程序未进行伪装,所以也不是木马;若攻击者仅仅用此程序进行远程控制,那么就是后门程序;若再次基础上加入僵尸网络,则就是僵尸程序。

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

木马Bobax,特洛伊木马Setiri、GatSla

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

如上文所述,可以通过--authors参数获取相关作者信息Authors: Raul Siles & David Perez, 2004。使用IDA中的string视图查看,或者在非vmware环境下执行--authors参数

(四)分析实践任务二

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

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

  • IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天,相比于ICQ来说,它更具人性化,而且是即时式的聊天,更接近真实的聊天情景,它的特点是速度快。

  • 所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),所有的沟通就在他们所在的Channel内以不同的Nickname进行交谈。申请加入的时候要发送口令、昵称和用户信息:USER 、PASS 、NICK ;对于曾经注册过的靶机,直接通过JOIN指令加入对应的频道,指令如下JOIN

  • IRC通常使用6660 - 6669端口进行监听,其中6667是明文端口,此外额外占用一个端口6697进行SSL加密传输;由于此处的端口号并不唯一,这就导致难以通过端口号进行检测,这里使用协议过滤的相关内容,对NICK、JOIN等IRC指令进行过滤。

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

  • 僵尸网络是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。

  • 主要用于:攻击者可以向自己控制的所有bots发送指令,让它们在特定的时间同时开始连续访问特定的网络目标,从而达到DDos的目的;利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息;才外还有监听用户敏感信息、记录键盘输入信息、扩散新的恶意软件和伪造点击量,骗取奖金或操控网上投票和游戏等。

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

通过了解IRC我们可以知道,通信端口为6660 - 6669,经过依次过滤,使用的端口为6667,过滤条件为ip.addr == 172.16.134.191&&tcp.port == 6667,可以得到的IRC服务器地址为:
66.33.65.5863.241.174.144217.199.175.10209.196.44.172209.126.161.29

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

这里分成两部分进行统计,首先我们先获取209.196.44.172与172.016.134.191之间的所有的IRC数据包。这里使用命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",产生了三个文件:

report.xml文件里提到了其他两个文件的相关信息,可以看到如下图的内容,包括上述双方的ip地址,端口,mac地址,通信时间等等:

接下来查看209.196.044.172.06667-172.016.134.191.01152文件,在当前主机进入到IRC的频道之后,频道会将当前频道中所有的主机的信息都发送过来,我们可以从其中的数据包中计算当前频道共有多少主机,这里我们使用管道命令进行筛选,得到3461个(grep搜索获取昵称输出行;sed:去除前缀;tr:将空格转换为换行;tr -d删除\r;grep -v:去除空行;sort -u排序并去除重复;wc -l:输出行数),共有3461台主机:

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

利用tcpdump筛选可能被用于攻击蜜罐主机的ip输出保存到20212813zzx_result.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 > 20212813zzx_result.txt;wc -l 20212813zzx_result.txt

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

利用tcpdump筛选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 | uniqtcpdump -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、139、25、445、4899、80,UDP端口有137:

得到端口后,使用wireshark的analayse的协议分级功能,可以查看嗅探得到数据包的协议分级,如下图所示,下一步排查的重点协议为TCP:IRC、HTTP(80)、NETBIOS session(SMB)(139);UDP:NETBIOS(137)、RPC(1434)

使用wireshark依次过滤筛选以上重点端口进行分析:

(1)TCP端口80,过滤条件ip.dst==172.16.134.191 && tcp.dstport==80 && http

能看出所有关于80端口的相关攻击的信息,包括null.ida为标识的WEB-IIS ISAPI、dafault.ida为标识的code red,发现这是一个红色代码蠕虫攻击:

(2)TCP端口445,过滤条件ip.dst==172.16.134.191 && tcp.dstport==445

从抓包结果中分析可执行文件:PSEXESVC.EXE。当客户端执行该可执行文件后,攻击方就可以远程控制执行文件的主机,然后获取权限:

还有针对IPC$ \samr \svcctl \r_server.exe admdll.dll raddrv.dll进行的普通查点、口令猜测、MSRPC-SVCCTL服务枚举漏洞等攻击:

(3)TCP端口139,过滤条件ip.dst==172.16.134.191 && tcp.dstport==139

有NBSS包和SMB包以及TCP包,若干个个不同的IP访问了这个端口,分别是81.50.177.167、80.181.116.202、68.154.11.82、68.152.53.138、210.214.49.227等,能够发现很多时候他们的攻击指令是相同的,即使攻击机的IP地址不同,可以确定的是,他们都没有攻击成功:

(4)UDP端口1434,过滤条件ip.dst==172.16.134.191 && udp.dstport==1434

可以看到这是一串远程调用协议的相关数据包,查阅相关资料后,知道这是名为SQL Slammer的蠕虫病毒:

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

总结以上分析,能够看到针对TCP445端口的PSEXESVC攻击-(IP:61.111.101.78)是成功的,其他均失败。

三、学习中遇到的问题及解决

  • 问题1:分析实践任务不知从哪入手
  • 问题1解决方案:参考资料和博客后按照前人的步骤进行分析。

四、实践总结

本次动手实践和分析实践都有一定难度,尤其是分析实践,需要找准分析思路,使用合适的工具并查阅相关的资料,对个人能力的提升有很大帮助。

posted @ 2022-05-07 11:50  z十夜  阅读(91)  评论(0编辑  收藏  举报