一、实践内容
1.1 恶意代码
1.1.1 简介
定义:恶意代码(Malware,或Malicious Code)指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
指令集合:二进制执行文件、脚本语言代码、宏代码、寄生在文件或者启动扇区的指令流。
目的:远程控制被攻击主机、满足施跳板攻击或进一步传播恶意代码、窃取私人信息或机密信息、窃取计算存储带宽资源、拒绝服务等。
类型:不感染的依附性恶意代码(特洛伊木马、逻辑炸弹)、不感染的独立性恶意代码(点滴器、繁殖器)、可感染的依附性恶意代码(病毒)、可感染的独立性恶意代码(蠕虫)
1.1.2 计算机病毒
定义:计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。
特性:感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。
感染及引导机制:
(1)感染可执行文件(最为普遍的方式):前缀感染机制(病毒将自身复制到宿主程序的始端)、后缀感染机制(病毒将自身复制到宿主程序的末端)、插入感染机制(病毒在感染宿主程序时,病毒代码放在宿主程序的中间)。
(2)感染引导扇区:通过BIOS定位磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。
(3)感染数据文件(支持宏的数据文件):将自身以宏指令的方式复制到数据文件中,当被感染的数据文件被应用程序打开时,将自动执行宏病毒体,完成病毒的引导。
1.1.3 网络蠕虫
定义:一种通过网络自主传播、自我复制的独立恶意代码。(从这里就可以看出病毒和蠕虫的区别)
传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。
组成结构:
(1)弹头:利用目标系统安全漏洞入侵目标系统。包括缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。这里其实就是我们之前说的渗透攻击模块。
(2)传播引擎:通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。方式有FTP/TFTP/HTTP/SMB/直接传送/单包等。
(3)目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。这里就是扫描策略。
(4)有效载荷:附加的攻击代码,执行一些特殊目地的操作。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。
1.2.4 静态分析
定义:通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。
方法列表:
(1)动态分析中的监视与控制:行为监视即一系列监控软件来控制和观察恶意代码的运行情况。网络控制即与业务网络和互联网保持物理隔离。
(2)快照比对:分为四步:对“干净”资源列表做快照、运行恶意代码、对恶意代码运行后的“脏”资源列表做快照、对比“干净”和“脏”快照,获取恶意代码行为结果。
(3)动态行为监控:包括Notification机制(Win32/Linux系统本身提供的行为通知机制)和API Hooking技术(对系统调用或API调用进行劫持,监控行为)。
(4)网络监控:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
(5)沙盒:沙盒技术用于安全运行程序的安全环境,经常被用于执行和分析非可信的代码。
(6)动态跟踪调试:在程序的执行过程中进行二进制调试(Debugging)。
二、实践过程
2.1 动手实践任务一
(1)解压下载的压缩文件,将RaDa放入虚拟机WinXP的桌面,同时打开终端,先 cd 桌面 进入桌面后输入 file RaDa.exe,查看该文件类型,这是一个有图形化界面(GUI)的 Win32 PE(可移植可执行)程序。
(2)使用PEiD工具查看文件加壳类型。加壳的目的是为了增加逆向难度。可以看到这个是一个版本为0.89.6的UPX壳(压缩壳)。
(3)输入strings RaDa.exe
,查看 RaDa.exe中可打印字符串,发现全是乱码,这说明被加壳了
(4)使用超级巡警进行脱壳,选择相应的路径,支持脱壳。
(5)查看桌面,可以看到这个文件。
(6)再用 strings
查看脱壳后的RaDa_unpacked.exe
,发现了脱壳后的恶意程序的可打印字符串。
(7)这时候用 IDA Pro Free 打开这个文件。
(8)查看详细信息,可以找到作者为DataRescue sa/nv
,邮箱为ida@datarescue.com
。
2.2 动手实践任务二:分析Crackme程序
(1)首先检查两个文件的完整性,计算其 md5 值。
(2)使用file命令
查看其文件类型,可以看到这两个文件都是32位windows下PE
文件。
(3)对crackme1.exe
进行分析
(4)接下来利用IDA Pro
打开这个程序分析,打开通过Strings窗口
可以查看该程序中出现的字符串。通过Strings
窗口可以查看到该程序中出现的明文字符串,可以看到前面的两种输出信息,“I think you are missing something.” “Pardon? What did you say?”,还发现了“I know the secret”和“You know how to speak to programs, Mr. Reverse-Engineer”这两个字符串。
由此我们可以猜测,前者就是口令,后者是输入口令正确时程序的输出信息。
接下来看函数调用图(Function Call)
可以发现:关键的部分在sub_401280
这里,程序是使用strcmp
函数来输入的,然后利用print
和fprint
函数输出。
下面看sub_401280
流程图,看到 cmp [ebp+arg_0],2
,其用来判断程序是否有两个参数。
继续分析,可以看到其他几条口令。
猜测正确的口令应该是"I know the secret"
,输入命令运行改口令,可以得到这样一条回复"You know how to speak to programs,Mr.Reverse-Engineer"
。成功。
(5)程序crackme2.exe
的分析过程与之类似,先打开Function call(函数调用图)
,发现关键的部分在sub_401280
这里。
输入 copy crackme2.exe crackmeplease.exe
将程序复制并命名为crackmeplease.exe
,输入crackmeplease.exe “I know the secret”,得到的反馈信息为We have a little secret: Chocolate.
成功。
2.3 分析实践任务一:分析一个自制恶意代码样本rada
(1)查看摘要和文件类型:md5sum RaDa.exe指令得到其md5摘要
。利用file RaDa.exe识别出这是32位GUI文件
。
(2)接下来打开监听工具process explorer对RaDa.exe
进行检测,如图发现该程序用http连接到目标为10.10.10.10的主机下名为RaDa——commands的网页上,创建文件夹C:\RaDa\tmp保存下载文件,进行DDOS拒绝服务攻击,将RaDa.exe复制到C:\RaDa\bin。该程序还依次读、写和删除注册表,打开注册表查看发现没有信息,则表示已删除。接下来执行exe(执行指定命令)、put(将宿主主机中的指定文件上传到服务器)、get(将服务器中的指定文件下载到宿主主机中)、screenshot(截取宿主主机的屏幕并保存到tmp文件夹)、sleep(停止活动一段时间)。
(3)进入Strings
对话框,在菜单栏中的Edit
中点击Setup
,设置类型为 Unicode
。
(4)在Strings
里查看参数,可以看到作者信息。
(5)在strings
中点击IP地址: http://10.10.10.10/RaDa
,定位到相应位置后,由上述分析,用http
连接到目标为10.10.10.10
的主机下名为RaDa——commands.html
,对应的函数为sub_404FB0
,点击进入此函数,得到汇编代码如图,这个字符串被拷贝到dword_40C030
变量中。
(6)回答问题
1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
答:文件的摘要是caaa6985a43225a0b3add54f44a0d4c7
,这是一个PE可执行文件。
2、找出并解释这个二进制文件的目的;
答:这个二进制文件是一个后门程序,攻击者可以利用其完全控制该系统,并且只要用户上网,就可以得到到攻击者的攻击指令。
3、识别并说明这个二进制文件所具有的不同特性;
答:该程序运行的时候建立远程连接并修改注册表
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
答:UPX加壳技术
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
答:应该属于病毒程序
6、给出过去已有的具有相似功能的其他工具;
答:木马Bobax。
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
作者为Raul siles 和 David Perze
。使用strings
命令能查看
2.4 分析实践任务二:Windows 2000系统被攻破并加入僵尸网络
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC(Internet Relay Chat)是一种在线聊天协议,它允许用户通过网络参与实时的文字交流。用户可以在IRC服务器上创建和加入频道(类似于聊天室),并与世界各地的人进行交流。
当一个IRC客户端申请加入一个IRC网络时,它通常会发送几个关键的命令消息来建立连接和注册。首先,客户端会发送NICK
命令来设置用户的昵称,然后使用USER
命令来提供用户的身份认证信息,包括用户名、主机名、服务器名和真实姓名(或其它信息)。这些是建立初始连接和进行用户注册所需的基本命令。
IRC通常使用TCP端口6667作为默认的通信端口。除此之外,还可能使用6660到6669、7000等端口。有些服务器还支持SSL加密连接,通常使用6697端口。这些端口使得IRC客户端能够与服务器建立稳定的连接。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络(Botnet)是由大量互联网连接的设备组成的网络,这些设备被黑客或恶意软件控制,以执行一系列自动化的任务。这些设备通常被称为“僵尸”或“机器人”,因为它们在不知情的设备主人的控制之外被远程控制。
僵尸网络通常用于以下几种目的:
- 分布式拒绝服务攻击(DDoS):利用大量的设备同时向特定的服务器或网络发送大量请求,导致目标系统超负荷,无法处理正常的流量,从而中断服务。
- 发送垃圾邮件:利用控制的设备发送大量垃圾邮件或进行垃圾邮件活动,因为使用多个源发送可以增加其分布范围并更难被拦截。
- 密码破解:使用僵尸网络中的计算能力来破解密码或执行其他需要大量计算资源的安全攻击。
- 信息窃取:利用被感染的设备来收集敏感信息,如信用卡号码、个人身份信息和企业数据。
- 点击欺诈:自动化点击网络广告或搜索引擎结果,以生成虚假的点击量,从而欺诈广告收入。
- 加密货币挖矿:使用僵尸网络中的设备资源来挖掘比特币等加密货币。
僵尸网络由于其能够动员的庞大资源和跨越国界的特性,成为了网络犯罪和网络战的一个重要工具。对于个人和组织来说,确保其设备的安全,防止成为僵尸网络的一部分,是非常重要的。
(3)蜜罐主机(IP地址:172.16.134.191
)与那些IRC服务器进行了通信?
首先通过Wireshark打开数据文件botnet_pcap_file.dat,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667
,可以找到所有与蜜罐主机进行通信的五个 IRC 服务器:分别为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172
为服务器的僵尸网络?
计算出的结果有3461个
(5)哪些IP地址被用于攻击蜜罐主机?
(6)攻击者尝试了哪些安全漏洞?哪些攻击成功了?是如何成功的?
有135、139、25、445、4899、80。用wireshark打开文件botnet.pcap,逐个筛选TCP端口。
135:探测;25:扫描;139:SMB查点;80:缓冲区溢出;1340:红色代码蠕虫等。
三、学习中遇到的问题及解决
开始无法将RaDa拖拽到虚拟机里面,后来采用同学的建议,将其存到U盘中,然后用虚拟机连接上U盘,才成功复制到虚拟机里。
四、学习感想和体会
随着实验内容的加深,除却对工具的学习外,更多的感受到底层编程语言及其逻辑、协议设计及其逻辑的要求进一步加深,要学的东西有很多,还是得埋头打基础。
五、参考资料
https://www.cnblogs.com/h767424060/p/16244282.html
https://www.cnblogs.com/ql5199/p/16216445.html
https://www.cnblogs.com/psalm46/p/16228109.html