20212937 曾俊铭 网络攻防实验

20212937 曾俊铭 2021-2022-2 《网络攻防实践》实践报告

1.实践内容

1.1 恶意代码定义与分类

恶意代码定义:恶意代码指的是计算机按照攻击者的意图执行以达到恶意目标的指令集;其中恶意代码是一组指令集,它的实现方式可以是二进制执行文件、脚本语言代码、宏代码、或是寄生在其他代码或启动扇区的一段指令流。
恶意代码类型:
image

1.2 恶意代码发展史
image

1.3 计算机病毒
计算机病毒的定义:计算机病毒是一种能够在我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。
计算机病毒的基本特性:感染性、潜伏性、可触发性、破坏性、衍生性

1.4 恶意代码分析方法

  • 恶意代码分析技术主要问题
    不能事先知道恶意代码的目的是什么
    恶意代码具有恶意的攻击目的
    恶意代码在绝大多数时候不会具有原代码
    恶意代码会引入大量的对抗分析技术
  • 恶意代码静态分析技术
    反病毒扫描:通过匹配现有的已知的病毒进行判断病毒的种类、家族和变种信息。
    文件格式识别:获得恶意软件执行的平台等信息

字符串提取:获取恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL、E-mail信息和包含库文件和函数调用。

二进制结构分析:获取程序的头部摘要信息、目标文件运行架构、重定位入口、符号表入口、不同的代码段、编译代码时使用的程序等。

反汇编与反编译:将二进制程序,转化成汇编代码和高级语言代码。

代码结构与逻辑分析:获取函数调用关系图和程序控制流图。

加壳识别与代码脱壳:对代码进行加密、多样性、多态和变形的机制。
image

  • 恶意代码动态分析技术
    基于快照对比的方法和工具
    系统动态行为监控方法
    网络协议栈监控方法
    沙箱技术
    动态调试技术

2.实践过程

动手实践一 恶意代码文件类型识别、脱壳和字符串提取

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

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

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

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

实验环境:WinXP Attacker虚拟机

首先利用file RaDa.exe命令查看RaDa.exe的文件类型,可知这是一个32位Windows PE可执行文件,并且有图形化窗口。
image

下面来看看有没有加壳,下面使用PEiD工具(查壳)来查看加壳的类型。在这里我们可以看到这个是一个版本为0.89.6的UPX壳(压缩壳,更多内容参考UPX壳分析)。还可以看到文件的入口点、EP段、偏移、文件类型等信息
image

如图用strings RaDa.exe查看RaDa.exe中可打印字符串
image

使用实验工具平台提供的超级巡警自动脱壳即可实现程序脱壳,并在恶意程序同目录下生成了一个脱壳以后的程序,请使用strings RaDa_unpacked.exe查看,发现脱壳成功
image

image

此时再次使用PEiD工具来查看脱壳后的程序,可以看到编写该程序所使用的语言和开发工具为VB6.0
image

进一步使用IDA分析,打开脱壳文件后如下图所示:
image

实践二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA

Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。

实验环境:WinXP Attacker虚拟机

首先使用file命令来分析该恶意程序的大概信息,切换到恶意程序所在目录,分别执行file crackme1.exe和file
crackme2.exe来查看两个文件信息,两个文件均为windows系统下运行的32位可执行程序,且没有图形界面,仅使用控制台操作
image

在cmd中输入crackme1.exe,尝试运行该程序,试探其输入格式
image

使用IDA pro Free工具打开crackme1.exe进行分析,选择文件类型为PE。在Strings页面可以看到该程序中出现的明文字符串,发现了刚刚没测试得到的另外两个字符串“I know the secret”和“You know how to speak to programs, Mr.Reverse-Engineer”,初步猜测前者是我们需要的口令,后者是口输入令正确时的程序反馈信息。
image

输入crackme1.exe “I know the secret”验证刚刚口令为“I know the secret”的猜想,得到了程序反馈信息“You know how to speak to programs, Mr.Reverse-Engineer”,猜想正确
image

view--graphs--function calls,打开function call,sub_401280为关键程序段,stump为c语言编写,使用字符串匹配密码。发现输出函数fprintf和printf即为程序输出,则sub_401280即为核心函数
image

view--graph--Flow chart,打开sub_401280函数的流程图,可以看到该函数首先判断参数个数是否为2,若参数个数不为2,也就是我们前面尝试直接运行程序时,在crackme1.exe及crackme1.exe 1 2时,都会输出“I think you are missing something”,若参数个数为2,则将第二个参数与字符串“I know the secret”作比较,若正确,则输出“You know how to programs”,与前面的猜想一致。
image

使用IDA pro工具来打开crackme1.exe文件,查看函数调用情况
image

程序关键的部分为sub_401280,查看sub_401280流程图
image

“cmp [ebp+arg_0],2”判断参数是否为两个,判断完参数后,接着用strcmp函数对argc里面的第一个字符串,即程序名,和crackmeplease.exe进行判断:
image

通过程序名判断后,用户输入的口令与“I know the secret”判断。通过口令判断后,通过一定规则输出通过测试的信息。具体是unk_403080中的字符串分别与0x42h进行异或运算。
image

输入copy crackme2.exe crackmeplease.exe 和crackmeplease.exe “I know secret”进行测试:
image

分析实践任务一:

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

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

输入命令md5sum Rada.exe,得到md5摘要为“caaa6985a43225a0b3add54f44a0d4c7”
image

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

在打开RaDa文件之前,先打开了文件行为监控软件(Filemon)、进程行为监控软件(Process Explore)、网络监控软件(Wireshark)
打开RaDa.exe文件
image

在Process Explore中,可以看到恶意代码使用http连接到10.10.10.10的主机,进行了上传和下载操作。其中RaDa.Commend.html可能是恶意代码获得指令的文件,对注册表进行了读、写、删除操作
image
image

在wireshark中看到主机与10.10.10.10进行了大量的通信,这一点在上一步Process Explore中我们也看到了相同的信息
image

程序包含的功能,包括上传、下载、截屏等等
image

  • 通过上述的分析大概知道了该恶意代码的目的
    在执行程序之后将自己写入系统文件中,并且通过更改注册表使得用户在每次开机时自动启动该程序

  • 这个二进制文件所具有的不同特性
    启动后会自动访问10.10.10.10,下载得到RaDa.Commend.html并获得指令

  • 防分析技术
    加壳技术

  • 对恶意代码样本进行分类
    分析过程中未发现该恶意代码具有传播和感染的性质,该恶意代码的主要功能是远程获得指令并在靶机上进行相应操作,应该是一个后门程序

利用如下指令得到摘要:
image

然后重复实践一中的脱壳,用IDA打开进行静态分析
查看全部字符串之前先把类型改为unicode(统一码)
image

看字符串时,找到了最后一问的答案,这个二进制文件的开发作者是 Raul Siles & David Perez
image

分析实践任务二:

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

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

IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理非常简单,只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称)。
当IRC客户端申请加入一个IRC网络时要发送口令、昵称和用户信息:USER 、PASS 、NICK 。
IRC服务器通常在TCP6667端口监听,ssl加密时用6697端口,也会使用6660—6669端口。
2)僵尸网络是什么?僵尸网络通常用于什么?

僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。攻击者通过各种途径传播僵尸程序感染互联网上的大量主机,而被感染的主机将通过一个控制信道接收攻击者的指令,组成一个僵尸网络。
僵尸网络通常用于折叠拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿。
3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

由于IRC协议使用的是TCP连接,因此可以利用建立TCP连接的三次握手过程找出与蜜罐主机通信的IRC服务器。

在WireShark中打开botnet_pcap_file.dat对日志进行分析,发现除了6667外,其他端口上没有数据包,因此这里所有的IRC数据传输都使用的是6667端口。用ip.src == 172.16.134.191 and tcp.dstport == 6667 and tcp.flags.syn == 1过滤,共过滤得到21个TCP包,发现蜜罐主机与5台IRC服务器进行了连接,分别是:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172。
image

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

可以通过查找这段观察期间不同昵称的出现个数来判断。进入botnet_pcap_file.dat目录,输入命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",查看一共产生了五个文件,因为我们要找的是访问 209.196.44.172的主机,所以后面着重看第一个文件。
image

输入命令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为服务器的僵尸网络。
image

5)那些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 > 2.txt;wc -l 2.txt
reading from file botnet_pcap_file.dat, link-type EN10MB (Ethernet), snapshot length 65535
165 2.txt,查到有165个被攻击的端口。

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

输入命令snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii,查看网络流分布情况,发现主要是TCP包。
image

输入命令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、139、25、445、4899、80。
image

输入命令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响应的端口为137,所以访问这个端口是 NetBIOS 网络查点。
image

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

对于端口80,用wireshark输入tcp.dstport==80 && ip.dst == 172.16.134.191进行筛选,发现24.197.194.106与蜜罐的有交互连接数最多,有883次,使用snort对该部分数据包进行扫描,发现大部分报警信息都为WEB-IIS、WEB-CGI、WEBFRONTPAGE、WEB-MISC,不成功。
image

对于端口4899,用wireshark输入tcp.dstport==4899进行筛选,4899端口是一个远程控制软件radmin,攻击者通过上传radmin成功控制靶机。
image

对于端口135和25,用wireshark输入tcp.port == 135 || tcp.port == 25进行筛选,发现只有连接,无数据传输,可能是攻击者对端口135和25进行了 connect 扫描。
image

对于端口139,用wireshark输入tcp.port==139进行筛选,发现有很多主机与139建立连接,且有很多空会话,同样也没有成功。
image

对于端口445,输入tcp.port == 445 && ip.dst == 172.16.134.191进行过滤,发现很多samr,srvsvc字符串,查询字符串,发现PSEXESVC.EXE字符串是由61.111.101.78发起的,通过搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫通过IRC进行通信,并且发现每个IP地址的连接都有响应,且攻击者获得了权限,因此攻击成功。
image

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

  • 问题1:虚拟机下载各种监测扫描工具太慢
  • 问题1解决方案:在主机上下载好之后拖入虚拟机

4.实践总结

这次试验比较复杂,并且需要下载很多工具,命令行也比较复杂,做起来比较吃力,希望后面的学习中能得心应手一点。

posted on 2022-05-07 17:32  曾俊铭  阅读(104)  评论(0编辑  收藏  举报

导航