《网络与系统攻防技术》实验四 恶意代码分析实践

实验内容

一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
1. 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
2. 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
3. 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1. 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
2. 找出并解释这个二进制文件的目的;
3. 识别并说明这个二进制文件所具有的不同特性;
4. 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
5. 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
6. 给出过去已有的具有相似功能的其他工具;
7. 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
四、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
1. IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
2. 僵尸网络是什么?僵尸网络通常用于什么?
3. 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
4. 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
5. 哪些IP地址被用于攻击蜜罐主机?
6. 攻击者尝试攻击了那些安全漏洞?
7. 那些攻击成功了?是如何成功的?

实验过程

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

  1. 在kali中使用file命令查看rada.exe

  1. 用PEid查看加壳工具

  1. 用strings指令查看字符串

(因为没有脱壳,所以字符串为乱码形式)

  1. 使用脱壳工具脱壳

  1. 查看字符串

  1. 执行RaDa_unpacked.exe程序,在Win10中使用ProcessExplorer查看程序的Strings,看到Copyright (C) 2004 Raul Siles & David Perez,可知作者是Raul Siles和David Perez

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

  1. 将crackme1.exe导入IDA pro

  1. 查看函数调用信息

通过分析函数调用信息,可以猜测主要的函数为main函数

  1. 在左侧函数栏选定main函数,按f5进行反编译

  1. 由反编译获得的C语言代码容易知道第二个参数必须为"I know the secret"

  1. 将crackme2.exe导入IDA pro

  1. 查看函数调用信息

通过分析函数调用信息,可以猜测主要的函数为main函数

  1. 在左侧函数栏选定main函数,按f5进行反编译

  1. 由反编译获得的C语言代码容易知道第一个参数必须为"crackmeplease.exe",第二个参数必须为"I know the secret"

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

  1. 在kali虚拟机中,使用命令md5sum生成md5摘要

  1. 执行RaDa_unpacked.exe并使用ProcessExplorer查看RaDa_unpacked.exe的Properties->Strings

RaDa访问了http://10.10.10.10/RaDa,将文件 RaDa.exe 复制到了 C:\RaDa\bin 目录下,修改注册表将RaDa.exe设为开机自启动

使用指令RegWrite RegRead RegDelete读写注册表,并进行截图等一系列操作

  1. 使用IDA pro查看RaDa_unpacked.exe的Strings,查找"author"发现参数"authors",说明该程序支持查找作者,使用命令"RaDa.exe --author"查看作者

回答问题:

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

MD5:caaa6985a43225a0b3add54f44a0d4c7
PE32 executable for MS Windows (GUI) Intel 80386 32-bit

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

这是一个后门程序,运行该程序时发出http请求,访问10.10.10.10,类似于反向连接,主动连接恶意服务器

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

自我复制到C盘,修改注册表实现开机自启动,可以提供截图等操作

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

使用了UPX加壳处理

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

该程序为后门程序。因为该程序不能自主传播,所以不是病毒,蠕虫,同时也没有进行伪装(伪装成正常程序),所以也不是木马。此外,攻击者可以绕过安全性控制而获取对系统的访问权限(修改注册表),所以是后门。

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

2004年发现的木马Bobax(在感染了一台计算机之后,Bobax会主动与一个网站取得联系,从而采取下一步的行动,比方说发送垃圾邮件或者运行其他的程序。)

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

可能,详细操作见任务三第3步,在win10下,使用命令"RaDa.exe --author"查看作者。作者:Raul siles和David Perze。

任务四 取证分析实践

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

因特网中继聊天(Internet Relay Chat),一般称为互联网中继聊天,简称:IRC。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。IRC的工作原理非常简单,只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER 、PASS 、NICK 。注册完成后,客户端就使用 JOIN 信息来加入频道。
IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。 SSL 加密传输在 6697 端口。

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

僵尸网络可以一对多地执行相同的恶意行为,比如可以同时对某目标网站进行分布式拒绝服务(DDos)攻击,同时发送大量的垃圾邮件等。

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

筛选数据包,筛选条件为ip.src == 172.16.134.191 && tcp.dstport == 6667,过滤出源IP为蜜罐主机且目的端口为6667的数据包。我们可以看到5个IRC服务器,分别是209.126.161.29、66.33.65.58、209.196.44.172、63.241.174.144、217.199.175.10

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

指令

tcpflow -r botnet_pcap_20192412gkw.dat 'host 209.196.44.172 and port 6667'

可以得到172.016.134.191.01152-209.196.044.172.06667,209.196.044.172.06667-172.016.134.191.01152和report.xml三个文件

在report.xml文件中可以看到双方的ip地址,端口,mac地址等

指令

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
搜索有多少主机连接

  1. 哪些IP地址被用于攻击蜜罐主机?
    指令

tcpdump -n -nn -r botnet_pcap_20192412gkw.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

指令

tcpdump -n -nn -r botnet_pcap_20192412gkw.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

  1. 攻击者尝试攻击了那些安全漏洞?哪些成功了?如何成功的?
    指令

snort -r botnet_pcap_20192412gkw.dat -c /etc/snort/snort.conf -K ascii

查看网络流分布情况

指令

tcpdump -r botnet_pcap_20192412gkw.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)

指令

tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

查看UDP响应端口(137)

TCP:135 只是进行了连接,没有数据内容交换

TCP:25 只是进行了连接,没有数据内容交换

TCP:139 这里大部分连接也没有传递具体会话内容,主要也是SMB查点

TCP:445 发现一个PSEXESVC.EXE的文件,使用psexec.exe该工具连接远程服务器时,会在目标服务器上安装一个服务名称为PsExec,可执行文件的路径为C:\WINDOWS\PSEXESVC.EXE的服务,这个二进制文件主要是一种Dv1dr32蠕虫,这种蠕虫通过IRC进行通信。

该源IP地址与蜜罐主机建立了会话,攻击成功,这里Windows的svcctl MSRPC接口用于同SCM(服务控制管理器)通讯,svcctl漏洞允许匿名用户连接到SCM,然后就可以枚举所安装的或正在运行的服务。

TCP:4899,4899是远程控制端口,经常被黑客用来入侵

TCP:80,通过该端口使用缓冲区溢出获得命令行:

TCP:80,在218.25.147.83发送给172.16.134.191的包中存在蠕虫病毒

UDP:137,网络基本输入/输出系统(NetBIOS) 名称服务器(NBNS) 协议是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法,在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了

  1. 哪些攻击成功了?是如何成功的?
    80端口,因为返回的为css http/1.1,所以
    缓冲区溢出攻击攻击和PSEXESVC蠕虫攻击没成功。
    445端口,SVCCTL服务漏洞成功了。返回信息中含有\PIPE\ntsvcs,通过搜索可知,这是一个远程调用,所以可以猜测攻击者获得了权限。

问题及解决方案

  1. 使用IDA Pro分析crackme1.exe时报错

解决方法:路径上的文件名称不能包括汉字。

  1. 对209.196.044.172.06667-172.016.134.191.01152这个文件进行筛选时,报错“grep:Binary file (standard input) matches”

解决方法:grep认为这是二进制文件,将"grep"改为"grep -a"

学习感悟、思考

本次实验不管是难度还是实验量,实验要求都超过了之前的几个任务,所花时间和精力自然也超过了之前的几个实验,但同样收获到的知识也远远超过了之前几个实验。单从了解熟悉的恶意代码相关软件来说,这个实验几乎超过了之前几个实验的总和。所以在实验中,熟悉掌握相关软件都花费了不少时间。这次实验中实践了恶意代码的脱壳、字符串提取等一系列分析操作,对我们以后的进一步学习乃至实战都有相对重要的作用。在本次实验中,我更加认识到自己知识的匮乏,之前所学有很大的局限性,在以后的学习中,应将知识与技能同步提升,齐头并进,两相互补才能走的更稳更远。