文章目录
- 1.实践内容
- 2.实践过程
- 2.1恶意代码文件类型标识、脱壳与字符串提取
- 2.1.1使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
- 2.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
- 2.1.3使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
- 2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
- 2.2.1 下载IDA Pro,利用IDA Pro分析文件
- 2.2.1.1 利用IDA Pro分析crackme1.exe。
- 2.2.1.2 利用IDA Pro分析crakeme2.exe。
- 2.3 分析一个自制恶意代码样本rada
- 2.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
- 2.3.3 识别并说明这个二进制文件所具有的不同特性
- 2.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
- 2.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
- 2.3.6 给出过去已有的具有相似功能的其他工具
- 2.3.7 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 2.4 取证分析实践:Windows 2000系统被攻破并加入僵尸网络
- 2.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用那些TCP端口?
- 2.4.2 僵尸网络是什么?僵尸网络通常用于什么?
- 2.4.3 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 2.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 2.4.5 哪些IP地址被用于攻击蜜罐主机?
- 2.4.6 & 2.4.7 攻击者尝试攻击了那些安全漏洞?那些攻击成功了?是如何成功的?
- 3.学习中遇到的问题及解决
- 4.实践总结
1.实践内容
1.借助软件分析恶意代码的组成、运行原理
2.恶意代码文件类型标识、脱壳与字符串提取:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
3.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
4.分析一个自制恶意代码样本rada,并撰写报告,回答问题。
5.Windows 2000系统被攻破并加入僵尸网络的取证分析实践:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。
2.实践过程
2.1恶意代码文件类型标识、脱壳与字符串提取
2.1.1使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
1.使用Linux的file指令,将文件放到虚拟机中中,可扫描得到rada文件格式。
2.使用PEiD软件,能获取到rada的加壳信息。
通过上述操作,可知rada的文件格式为 PE32 executable (GUI) Intel 80386,运行平台为windows系统,加壳工具为UPX。
2.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
1.下载超级巡警脱壳机,拖入文件可得到脱壳后的代码。
2.1.3使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
使用windows自带的strings指令,可看出来脱壳后rada存在的字符串样本。在windows中,strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
可看出在软件中有两个人名,那大概率就是Raul Siles和David Perez两位国际友人了。
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1 下载IDA Pro,利用IDA Pro分析文件
2.2.1.1 利用IDA Pro分析crackme1.exe。
1.分析crackme1.exe。
2.选择“View”→“Graphs”→“Function calls”,查看函数调用图。
可以看到,_main函数可以调用_fprintf和_printf。据此,我们判断_main中包含选择输出哪些信息的逻辑结构。
3.通过“Jump”→“Jump to function”→“_main”查看_main函数。按下F5(或“View”→“Open subviews”→“Generate pseudocode”)进行反编译。
如图所示,得到main函数的代码。
其中arcg指的是指令的参数数量(包括文件名本身),如果输入I know the secret的话,就会打印出来You know how to speak to programs, Mr. Reverse-Engineer。如果输入两个参数,但第二个参数不是我知道秘密的话,就会输出pardon? what did you say?。如果是其他参数数量就是I think you are missing something.因此只需要在命令行中输入crackmel. exe "I know the secret“即可。
4.在命令行中输入crackmel. exe “I know the secret”
2.2.1.2 利用IDA Pro分析crakeme2.exe。
2.3 分析一个自制恶意代码样本rada
2.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
1.RaDa.exe的摘要
Certutil是Windows操作系统上预装的工具,可用于校验文件MD5、SHA1、SHA256,下载恶意文件和免杀。
我们使用Certutil来计算RaDa.exe的摘要,在所在目录打开cmd并输入如下命令。
certutil -hashfile RaDa.exe
certutil -hashfile RaDa.exe MD5
certutil -hashfile RaDa.exe SHA256
RaDa.exe的摘要分别如下:
MD5:caaa6985a43225a0b3add54f44a0d4c7
SHA1:4164423ece62c5c4c287f8c2003b84e4e3a6cfda
SHA256:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
2.其他基本信息
用file命令用来识别文件类型,这是一个windows系统下运行的32位可执行程序。
可知该二进制文件有以下行为:
通过HTTP协议请求10.10.10.10\RaDa\RaDa_commands.html。
在C盘中创建一个RaDa文件夹,包含tmp和bin两个子文件夹,其中将RaDa.exe复制在bin子文件夹中。
对注册表进行读、写和删除。添加2个注册表项,路径为分别为HKLM(即HKEY_LOCAL_MACHINE)\Software\Microsoft\Windows\CurrentVersion\Run\和HKLM\Software\VMware,
Inc.\VMware Tools\InstallPath。
其中HKLM(即HKEY_LOCAL_MACHINE)\Software\Microsoft\Windows\CurrentVersion\Run里名称为RaDa,类型为REN_SZ,数据内容为C:\RaDa\bin
疑似发起DDOS Smurf攻击。
2.3.3 识别并说明这个二进制文件所具有的不同特性
当文件被执行时,其将自身安装到系统中,并修改注册表使得系统启动时执行该文件。
文件被执行后,将通过浏览器上网,请求页面并获得来自攻击者的指令。
文件运行使,支持put上传、get下载、screenshot截屏、sleep挂起等指令。
2.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
文件使用UPX进行了加壳,加壳后可能还尽量了一些其他操作(脱壳后的RaDa_unpacked.exe与RaDa_dump.exe中的Strings还是有区别)。
若文件不在Vmware虚拟机上运行,将“–authors”作为参数可输出作者信息,在则不输出。
2.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
这应该是一个后门程序。它能够接收指令、操控主机,但不具备网络传播、感染等特性,也没有伪装成良性程序进行欺骗。
2.3.6 给出过去已有的具有相似功能的其他工具
Bobax、Setiri。
2.3.7 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,不在Vmware虚拟机上运行,并使用“–authors”作为参数。
2.4 取证分析实践:Windows 2000系统被攻破并加入僵尸网络
数据源botnet_pcap_file.dat是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题。
2.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用那些TCP端口?
1.IRC即Internet Relay Chat,互联网中继聊天,是一种使用客户端-服务器架构的多用户聊天系统。客户端用户可以加入特定的频道(channel)与该频道中的所有用户聊天,也可以采用私聊的方式。特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
2.IRC客户端申请加入一个IRC网络时将发送JOIN信息。
使用IRC首先要进行注册,注册时需要发送的消息有三种,分别是口令、昵称和用户信息。格式如下:
USER <username> <hostname> <servername> <realname>
PASS <password>
NICK <nickname>
注册完成后,客户端就使用JOIN信息来加入频道,格式如下:
JOIN <channel>
3.IRC服务器明文传输通常在6667端口监听,也会使用 6660—6669 端口。
当攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道。
2.4.2 僵尸网络是什么?僵尸网络通常用于什么?
1.僵尸网络(BotNet)是指攻击者(botmaster)出于恶意目的,传播僵尸程序(Bot)控制大量主机(Zombie,傀儡主机、肉鸡),并通过一对多的命令与控制信道所组成的网络。
2.僵尸网络构成了一个攻击平台,利用这个平台可以有效地发起各种各样的攻击行为,可以导致整个基础信息网络或者重要应用系统瘫痪,也可以导致大量机密或个人隐私泄漏,还可以用来从事网络欺诈等其他违法犯罪活动。
- 拒绝服务攻击
利用Botnet发动DDos攻击是当前最主要的威胁之一,攻击者可以向自己控制的所有bots发送指令,让它们在特定的时间同时开始连续访问特定的网络目标,从而达到DDos的目的。 - 发送垃圾邮件
一些bots会设立sockv4、v5代理,这样就可以利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息。 - 窃取秘密
Botnet的控制者可以从僵尸主机中窃取用户的各种敏感信息和其他秘密,例如个人帐号、机密数据等。同时bot程序能够使用sniffer观测感兴趣的网络数据,从而获得网络流量中的秘密。 - 滥用资源
攻击者利用Botnet从事各种需要耗费网络资源的活动,从而使用户的网络性能受到影响,甚至带来经济损失。例如:种植广告软件、利用僵尸主机搭建假冒的银行网站从事网络钓鱼的非法活动。 - 僵尸网络挖矿
网络安全商fortiguard labs的网络安全研究报告指出,虚拟货币的僵尸挖矿ZeroAccess已经成为全球网络当下主要威胁。
2.4.3 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
使用Wireshark打开数据源botnet_pcap_file.dat,设置过滤条件“ip.src == 172.16.134.191 && tcp.dstport == 6667 and tcp.flags == 0x2”,过滤出蜜罐主机尝试连接6667端口的SYN包。
可知,蜜罐主机与5台IRC服务器进行了通信:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172。
2.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
这里我们尝试使用估计方法统计主机数,即观察期间不同昵称出现个数(每个IRC的使用者都有一个昵称Nickname)。
1.用tcpflow进行分流处理
首先获取在209.196.44.172与172.016.134.191之间的所有的IRC数据包。在kali终端中输入如下命令:
apt-get install tcpflow#安装
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667' # 进行抓包,-r读取该数据包
可以得到三个文件:209.196.044.172.06667-172.016.134.191.01152、
172.016.134.191.01152-209.196.044.172.06667、
report.xml。
2.观察不同昵称出现个数
在主机进入到IRC频道后,频道会将当前频道中所有的主机的信息都发送过来,可以从其中的数据包中计算当前频道共有多少主机。
使用如下命令对209.196.044.172.06667-172.016.134.191.01152文件进行筛选,可以得到共有3461个主机访问过服务器。
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 ,
# grep获取昵称输出行;sed去除前缀(有可能无法匹配);tr -d将空格转换为换行;tr去除“\r”;grep -v去除空行;sort -u排序并去除重复;wc -l获得行数
2.4.5 哪些IP地址被用于攻击蜜罐主机?
1.tcpdump介绍
这里使用了tcpdump,Linux上强大的网络数据采集分析工具。
tcpdump
[-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络接口>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
类型关键字:host,net,port; 传输方向关键字:src,dst,dst or src,dst and src;
协议关键字:ip,arp,udp,tcp,fddi; -n
指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字; -nn
指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示。
找出所有连接蜜罐主机的IP地址
由于蜜罐具有特殊性,将所有进入蜜罐的流量都视为可疑流量、都是攻击。用下列命令将所有连接蜜罐主机的IP地址输出到20212419ip_list.txt。可知共有165个IP地址被用于攻击蜜罐主机,具体IP见20212419ip_list.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> 20212419ip_list.txt;wc -l 20212419ip_list.txt
# tcpdump -nn见1.tcpdump介绍;cut -d '.' -f 10截取以'.'为分隔符的第10列;uniq检查并删除 文本文件中重复出现的行列;wc -l获得行数
2.4.6 & 2.4.7 攻击者尝试攻击了那些安全漏洞?那些攻击成功了?是如何成功的?
1.使用wireshark了解网络流分布情况
使用Wireshark打开数据源botnet_pcap_file.dat,选择“统计”→“协议分级”,大致了解网络流分布情况。
可发现其中只包含IP包,186个为UDP协议,54350个为TCP协议。
UDP中包含NetBIOS Datagram、Data等,TCP中包含NetBIOS Session、HTTP、Data、IRC等。
2.筛选TCP端口
由于TCP包数目较多,我们先对TCP端口进行筛选。
可知,攻击者扫描了90个TCP端口,其中开放并响应的有135(rpc)、139(netbios-ssn)、25(smtp)、445(smb)、4899(radmin)、80(http)。端口服务详见网络端口号大全。
# 攻击者扫描了哪些TCP端口
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and tcp[tcpflags]== 0x2 | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
# 哪些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
3.筛选UDP端口
接下来筛选UDP端口。可知,攻击者扫描了3个UDP端口:137(netbios-ns)、1434(ms-sql-m)、28431(unknow)。其中开放并响应的是137(netbios-ns)。
137端口的主要作用是在局域网中提供计算机的名字或地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。
端口发送一个连接请求时,就可能获得目标主机的相关名称信息。例如目标主机的计算机名称,注册该目标主机的用户信息,目标主机本次开机、关机时间等。
# 攻击者扫描了哪些UDP端口
tcpdump -r botnet_pcap_file.dat -nn 'dst host 172.16.134.191' and udp | cut -d ' ' -f 5 | more | cut -d '.' -f 5 | cut -d ':' -f 1 | sort | uniq
# 哪些UDP端口时开放的、响应的
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 | more
4.TCP135端口
只进行了连接,没有数据内容交换,可能是对端点进行connect扫描。
5.TCP135端口
大部分连接没有传递具体会话内容,主要是SMB查点(空会话连接)。
6.TCP25端口
只进行了连接,没有数据内容交换,可能是对端点进行connect扫描。
7.TCP445端口
在No.33280的报文中发现了“PSEXESVC.EXE”,这个文件主要是一种通过IRC进行通信的Dv1dr蠕虫。这里发生了口令蠕虫攻击。后面的报文中包含主机响应,攻击成功。
8.TCP4899端口
4899端口是一个远程控制软件Radmin服务端监听的端口,经常被黑客用来控制被控机。且这类软件一般不会被杀软查杀,比后门更安全。这里发生了Radmin远程控制,攻击成功。
9.TCP80端口
存在缓存区溢出攻击,通过缓冲区溢出获得命令行。
在No.32889的报文中发现了“c:\notworm”,这是一个蠕虫攻击。
此外,还通过该端口持续使用脚本攻击IIS服务器的漏洞,从而获取系统权限。但蜜罐主机均以IIS服务器的默认页面作为回应,攻击失败。
10.UDP137端口
这里的NBNS是NetBIOS name service的缩写,是NetBIOS的命名服务。可知此处是在进行NetBIOS查点。
11.UDP1434端口
这里存在SQL slammer蠕虫攻击,详见SQL slammer蠕虫王汇编代码详解
12.UDP28431端口
没看出来问题。
3.学习中遇到的问题及解决
-
问题1:将 botnet_pcap_file.dat文件导入kali虚拟机时,一直无法导入,后面使用winscp连接主机和虚拟机之后,依旧无法导入。后面我将kali虚拟机重启后发现无法登陆kali虚拟机,每次输入账号密码之后会重新回到登陆界面。
解决方法:重新下载了一个虚拟机。 -
问题2:这里还遇到一个问题,就是winscp连接kali虚拟机时,出现network error的报错,查阅资料分析可能是kali虚拟机没有启用ssh服务。
这里可以通过以下命令查阅kali虚拟机中ssh服务的状态:
sudo service ssh status
如果服务没有运行,你可以使用以下命令启动SSH服务:
sudo service ssh start
4.实践总结
实验过程中,我首先使用文件格式和类型识别工具对rada恶意代码样本进行了分析,确定其为Windows平台上的PE文件,并使用了加壳工具进行加壳。接着,我使用超级巡警等脱壳软件对样本进行了脱壳处理,成功还原了原始代码。
在对脱壳后的代码进行字符串提取分析时,我发现了关键信息,能够确定rada恶意代码的编写作者。这一过程需要细致的观察和分析,通过提取代码中的字符串,结合可能的编码方式和加密算法,逐步还原出作者的线索。
另外,在使用IDA Pro对crackme1.exe和crakeme2.exe进行静态和动态分析时,我学会了如何寻找特定的输入,使程序输出成功信息。这需要对程序逻辑进行深入理解,并通过反汇编和调试工具,逐步分析程序的执行过程,找出影响成功输出的关键条件。
通过这些实验,我深刻理解了恶意代码分析和逆向工程的基本原理,也提升了对程序逻辑的理解能力和分析技巧。