1.实验内容
- 恶意代码文件类型标识、脱壳与字符串提取
- 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
- 分析一个自制恶意代码样本rada,并撰写报告,回答问题
- 取证分析实践
2.实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
(1)文件类型标识,使用file命令和PEiD工具
- 两者均为32位的PE文件,有图形界面,适用于使用Intel 80386处理器的计算机,适用于Windows
- RaDa.exe用UPX加了壳
(2)脱壳,使用工具“超级巡警”
(3)字符串提取,使用strings命令和IDA
- 使用strings命令,可找到两个人名
- 使用IDA,可找到author
改变编码格式,可找到author字样
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1 分析crackme1.exe
(1)运行并初步试探程序
目前有两种输出
(2)查看函数调用图
可知,_main函数可以调用_fprintf和_printf,也许可以从其中得知输入与输出的关系
(3)反编译,查看伪代码
需使用32位的ida.exe才有“反编译”功能
“视图”->“打开子视图”->“生成伪代码”->点击“_main”
分析与验证:
1)参数个数不等于2时(即argc!=2时,因程序名也算入argc),将打印
I think you are missing something.\n
2)参数个数等于2,但输入的后续参数错误,将打印
Pardon? What did you say?\n
3)参数个数等于2,且输入的后续参数为"I know the secret"
,将打印
You know how to speak to programs, Mr. Reverse-Engineer\n
2.2.2 分析crackme2.exe
(1)运行并初步试探程序
初步试探后,可猜测,后续参数个数为1时输出语句仍不同,但正确的输入语句改变了
(2)查看函数调用图
可知,_main中包含_fprintf、_puts、_putchar
(3)反编译,查看伪代码
需使用32位的ida.exe才有“反编译”功能
“视图”->“打开子视图”->“生成伪代码”->点击“_main”
分析与验证:
1)参数个数不等于2时(即argc!=2时,因程序名也算入argc),将打印
I think you are missing something.
2)参数个数等于2,但输入的指令中的第一个参数不是crackmeplease.exe
,将打印
I have an identity problem.
3)参数个数等于2,且输入的指令中的第一个参数是crackmeplease.exe
(注意,需要用cmd才能不用./crackmeplease.exe
),但后续参数输入错误,将打印
Pardon? What did you say?
4)参数个数等于2,输入的指令中的第一个参数是crackmeplease.exe
,且输入后续参数为"I know the secret"
,将打印
We have a little secret: Chocolate/n
从伪代码可以看出是利用putchar和puts分开输出的
2.3 分析一个自制恶意代码样本rada,并撰写报告,回答问题
(1)提供对这个文件的摘要,包括可以帮助识别同一样本的基本信息
摘要以及基本信息如下
(2)找出并解释这个文件的目的
使用process explorer监听,运行RaDa_dump.exe,查看Strings
分析:
1)http://10.10.10.10/RaDa/RaDa_commands.html
,指向一个内部网络地址上的HTML页面,可能用于RaDa工具的命令参考或控制。
2)cgi-bin/download.cgi
和 cgi-bin/upload.cgi
,这些CGI脚本可能用于文件的下载和上传。
3)C:\RaDa\tmp
、C:\RaDa\bin\RaDa.exe
,通过查看系统中的C盘,运行该程序后创建了C:\RaDa\tmp和C:\RaDa\bin两个文件夹且C:\RaDa\bin有一个程序RaDa.exe。
4)HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa
和 HKLM\Software\VMware, Inc.\VMware Tools\InstallPath
,这些是Windows注册表中的路径,分别用于自动运行程序和记录VMware Tools的安装路径。RaDa可能被设置为开机自启。
5)Starting DDoS Smurf remote attack...
表明可能涉及分布式拒绝服务攻击中的smurf攻击,也许本机会被作为“肉机”
6)Scripting.FileSystemObject
、Wscript.Shell
、RegWrite
、RegRead
和 RegDelete
,这些都是VBScript或JScript中用于文件系统操作、执行shell命令和修改注册表的对象和方法,可能被用于恶意目的
7)exe
、get
、put
、screenshot
、sleep
和 Quit
等字符串表明可能涉及执行程序、数据传输、屏幕截图、暂停执行和退出程序等操作。
(3)识别并说明这个文件所具有的不同特性
1)文件被执行后,将上网,获得来自攻击者的指令并可能上传或下载一些数据。
2)文件被执行后,其创建文件夹,将自身安装到系统中,并修改注册表使得系统启动时执行该文件。
3)文件被执行后,成为攻击他人的僵尸网络的一部分。
4)文件被执行后,会执行截屏等恶意操作。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
1)upx加壳
如下,脱壳前无法得到有效字符串,无法查看函数和函数调用
但脱壳后就能
2)通过函数、变量重命名,代码结构调整等手段对源代码进行混淆,使其难以通过肉眼理解。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
后门。因为其没传染其他主机,没有伪装,并非仅为了破坏本机而是主要为了操控;能够接收指令,注册表项自行启动,执行拒绝服务攻击,执行截屏等恶意操作。
(6)给出过去已有的具有相似功能的其他工具
- MSF可以生成后门程序,控制主机进行拍照、上传等操作
- HULK,一个DDoS攻击工具
- c99shell,一种Web shell
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以。
- 不在虚拟机,在本机windows下添加
--authors
、help
等参数然后运行这个程序可以查看作者
- 直接查看去壳后的程序中的字符串,可发现作者
- 在虚拟机的kali中使用strings命令可以看见两个人名
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
1)基于特征码的检测方法
依赖于已知的恶意软件特征库。这些特征库包含了恶意软件的独特签名或字节序列,通常是通过对恶意样本进行逆向工程和分析后提取出来的。当扫描器检测到与特征库中的签名匹配的文件时,就会将其标记为恶意软件。在保持特征码的唯一性的前提下,应当尽量使得特征码短小精悍,从而减少检测过程中的时间与空间的复杂度,提高检测效率。
2)沙箱检测法
沙盒模拟技术是一种将待检测文件置于模拟环境中运行的技术。这个模拟环境是可控的,能够隔离恶意软件对真实系统的破坏。
当某个程序试图在沙箱中运行时,安全软件会监控其行为,包括文件操作、网络通信、注册表修改等。如果程序表现出恶意行为,如自我复制、修改系统文件、尝试网络通信等,沙箱会立即阻止其进一步运行,并标记为潜在威胁。
3)快照比对法
快照,通常指对指定数据集合的一个完全可用拷贝,该拷贝包含源数据在拷贝时间点的静态影像。快照可以是数据再现的一个副本或者复制,能够保留数据在某一时刻的映像。快照比对法则是利用这一特性,通过比较不同时间点的快照数据,来检测数据的变化、异常或恶意行为。
- 对正常的资源列表做快照
- 充分运行恶意代码
- 对恶意代码运行后的资源列表做快照
- 对比前后拍摄的快照,获取恶意代码的行为结果
4)动态行为监控方法
如使用ProcessExplorer。
动态行为监控方法主要通过实时捕获和分析系统或网络中的行为数据,来检测异常、恶意行为或性能问题。这种方法能够提供实时的反馈和警报。
- 实时监控程序的系统行为,如系统调用、注册表更改、文件行为、进程操作行为
- 实时监控程序的网络行为,如该程序开放的本机的端口(可使用nmap)、发起的网络连接、发送的数据流
5)基于异常的检测方法
异常检测的核心思想是通过分析网络流量、系统日志等数据,发现与正常行为模式不符的行为,从而预警潜在的安全威胁。异常检测不依赖于已知的攻击特征,而是通过数据挖掘、机器学习等技术,着重构建正常行为模型,并以此为基准检测异常行为。这种方法能够检测到新的、未知的威胁,但也可能识别错误。
- 收集网络流量、系统日志、用户行为日志等相关数据。对数据进行清洗、去噪、标准化等预处理操作,以提高后续分析的准确性。
- 利用机器学习算法(如聚类、分类、回归等)对预处理后的数据进行训练,构建正常行为模型。该模型应能够准确描述正常行为特征,如网络流量的分布、系统日志的模式、用户行为的规律等。
- 将实时数据输入到已构建的正常行为模型中,进行在线检测。通过比较实时数据与正常行为模型的差异,识别出异常行为。设定阈值或规则,以确定哪些行为被视为异常。
- 当检测到异常行为时,触发预警机制,向安全管理人员发送警报。安全管理人员根据警报信息,采取相应的响应措施,如隔离、分析、修复等。
- 需要定期更新和优化正常行为模型
2.4 取证分析实践
Windows 2000系统被攻破并加入僵尸网络
数据源botnet_pcap_file.dat是Snort收集的蜜罐主机5天的网络数据源,其中去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。
回答问题:
-
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
-
IRC由芬兰人Jarkko Oikarinen于1988年首创,是一种网络聊天协议。它使用TCP作为传输协议,通过特定的端口进行通信,提供了一种分布式的聊天环境,用户可以加入不同的频道(channels)进行交流。相比于其他聊天方式,IRC具有更直观、友好的界面,用户可以在其中畅所欲言,而且可以表现动作化,因此吸引了众多用户。
-
先注册
USER <username> <hostname> <servername> <realname>
、PASS <password>
、NICK <nickname>
注册完成后,客户端就使用JOIN信息来加入频道JOIN -
6667,IRC的默认端口,用于明文传输;6697,IRC的SSL/TLS加密端口,用于加密传输。
-
-
(2)僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是指采用某些传播手段,使大量主机感染僵尸程序,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。攻击者通过各种途径传播僵尸程序感染互联网上的大量主机,这些被感染的主机将通过一个控制信道接收攻击者的指令,并组成一个受攻击者控制的僵尸网络。在这个网络中,控制者可以通过命令与控制服务器向所有的僵尸主机(即被感染的计算机)发送指令,使它们执行相同的恶意行为。
- 分布式拒绝服务(DDoS)攻击,加密货币挖矿,发送垃圾邮件
-
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 在kali中打开文件20222420_botnet_pcap_file.dat,使用过滤条件:
ip.src == 172.16.134.191 && (tcp.dstport == 6667 || tcp.dstport == 6697)
- 在kali中打开文件20222420_botnet_pcap_file.dat,使用过滤条件:
可知,与209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172这些IRC服务器进行了通信
-
利用
ip.src == 172.16.134.191 && (tcp.dstport == 6667 || tcp.dstport == 6697) && ip.dst!=209.126.161.29 && ip.dst!=66.33.65.58 && ip.dst!=63.241.174.144 && ip.dst!=217.199.175.10 && ip.dst!=209.196.44.172
过滤便可知道没有遗漏 -
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
-
下载安装tcpflow
-
使用tcpflow读取.dat文件,并设置过滤条件
tcpflow -r 20222420_botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
-
使用指令统计
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为服务器的僵尸网络
-
-
(5)哪些IP地址被用于攻击蜜罐主机?
使用指令将共计蜜罐主机的IP筛选输出到20222420dtr.txt中
tcpdump -n -nn -r 20222420_botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more> 20222420dtr.txt;wc -l 20222420dtr.txt
可知,一共有165个IP地址被用于攻击蜜罐主机 -
(6)攻击者尝试攻击了那些安全漏洞?
使用命令筛选端口
tcpdump -r 20222420_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
tcpdump -r 20222420_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
RPC(Remote Procedure Call,远程过程调用)服务端口。
通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码。 -
139
NetBIOS Session Service。扫描目标计算机的139端口,如果发现有漏洞,可以试图获取用户名和密码。 -
25
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务,用于发送电子邮件 -
445
信息流通数据的端口,通常用于Windows系统中的SMB(Server Message Block)协议,实现文件共享和打印共享等功能。
该端口是黑客攻击的重要目标之一,一些流行性病毒如冲击波、震荡波等都会通过此端口对计算机进行攻击 -
4899
远程控制软件(如Remote Administrator)的监听端口。具有远程控制功能,通常杀毒软件无法查出。可以扫描该端口是否开启。 -
80
HTTP服务,用于在WWW上发布和接收信息
-
UDP:137
NetBIOS Name Service。使用者向某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息。
-
(7)那些攻击成功了?是如何成功的?
TCP:- 135:
ip.addr == 172.16.134.191 && tcp.port==135
- 135:
可知,除了“三次握手”建立连接和“四次挥手”释放连接外没有其他数据传输。攻击失败。
-
139:
ip.addr == 172.16.134.191 && tcp.port==139
可知,攻击模式相同,大量ip被用于进行攻击。模式均为,先建立TCP连接,再NBSS会话请求请求访问SBM,然后会话请求被目标接受,接着发送SMB请求共享Path: \Pc0191\C,但最后目标主机终止了TCP会话。攻击失败。 -
25:
ip.addr == 172.16.134.191 && tcp.port==25
只有建立和释放TCP的过程。攻击失败。 -
445:
ip.addr == 172.16.134.191 && tcp.port==445
可知,通过SMB,目标主机建立了\System32\PSEXESVC.EXE。PSEXESVC.EXE 是 PSEXEC 服务端组件,它在目标机器上运行,接收并执行来自 PSEXEC 客户端的命令,这个服务允许远程进程注入和控制。攻击成功。 -
4899:
ip.addr == 172.16.134.191 && tcp.port==4899
可知,在TCP连接目标4899端口成功后发生了大量数据交互。攻击成功。 -
80:
ip.addr == 172.16.134.191 && tcp.port==80
可知,是向目标请求"/",即根目录或默认页面,HTTP版本为1.1
可知,请求成功。
攻击成功。
UDP:137:ip.addr == 172.16.134.191 && udp.port==137
可知,并没有什么传输什么有用的数据。攻击失败
综上
TCP135 | TCP139 | TCP25 | TCP445 | TCP4899 | TCP80 | UDP137 |
---|---|---|---|---|---|---|
失败 | 失败 | 失败 | 成功 | 成功 | 成功 | 失败 |
3.问题及解决方案
-
问题1:IDA显示不了字符串
问题1解决方案:右键,选择“建立”,将“允许的字符串类型”全选上,然后调试“列表设置”。设置正确后就可以正常显示了。 -
问题2:IDA无法打开
问题2解决方案:阅读老师给的资源中的使用说明,发现需要将路径中的中文去掉,而老师给的文件夹恰好包含中文,将其中的中文去掉便解决了问题。 -
问题3:.dat文件无法打开
问题3解决方案:在同学的提醒下,将其传输到kali下就能直接打开了。
4.学习感悟、思考等
在对实验内容的深入探索中,我经历了从理论到实践的跨越,对恶意代码分析有了更深层次的理解。从rada恶意代码样本的处理,到Snort网络数据源的分析,每一步都充满了挑战与收获。
这些实践经历不仅让我熟练掌握了文件类型识别、脱壳、字符串提取等关键技能,还让我深刻体会到IDA Pro、PEID等工具在恶意代码分析中的巨大作用。通过结合静态与动态分析,我能够更全面地理解程序的行为逻辑,从而更有效地识别并应对潜在的安全威胁。通过深入分析恶意代码,我更加清晰地看到了攻击者的手段和意图。
这次实验对我来说是一次宝贵的经历。它让我学会了如何分析恶意代码的性质和行为。这些技能将为我未来的学习和工作打下坚实的基础,