作业说明
- 这个作业属于哪个课程:课程链接
- 这个作业的要求在哪里:作业要求链接
- 我在这个课程的目标是 :学习网络攻防相关技术并进行实践
- 这个作业在哪个具体方面帮助我实现目标:学习恶意代码安全攻防,提高对恶意代码逆向工程分析技术的知识,并提高逆向工程分析的方法、工具和技术
作业正文
1.实践内容+知识点总结
恶意代码基础知识
恶意代码定义与分类
- 恶意代码:使计算机按照攻击者的意图执行以达到恶意目的的指令集。
- 类型:
计算机病毒
- 计算机病毒基本特性
- 感染性:指的是计算机病毒具有吧自身复制到其他程序中的特性。
- 潜伏性:计算机病毒一旦感染目标程序后,一般情况下除了感染外,并不会立即进行破坏行为,而是在系统中潜伏。
- 可触发性:在满足特定的触发条件后,激活其感染机制或破坏机制。
- 破坏性:在触发后会执行一定的破坏性动作来达到病毒编写者的目标。
- 衍生性:计算机病毒的编写者或者其他了解此病毒的人可以根据其个人意图,对某一个已知的病毒程序作出修改,从而衍生出另外一种或多种病毒变种。
- 计算机病毒的感染及引导机制 :
- 可执行文件:
- 前缀感染机制:指的是病毒将自身复制到宿主程序的开始;
- 后缀感染机制:指的是病毒将自身复制到宿主程序的末端;
- 中间插入感染机制:指的是病毒在感染宿主程序中能把它拦腰折断,把病毒代码放在宿主程序的中间。
- 引导扇区:通过BIOS定位到磁盘的主引导区,运行存储在那的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录复制装载操作系统。
- 支持宏指令的数据文件:目前许多流行的数据文件格式支持在数据文件中包含的一些执行代码,使得应用软件在打开这些数据文件时自动执行所包含的代码从而完成一些自动化数据处理的功能。
- 可执行文件:
- 计算机病毒的传播机制:包括移动存储、电子邮件及下载、共享目录等。
网络蠕虫
- 定义:是一种它能够给网络自主传播的恶意代码。出现相对于计算机病毒、木马、后门来说比较晚,但是传播速度、传播范围和破坏程度都是以往的恶意代码无法比拟的。
- 基本特性:
- 组成结构:
- 弹头:为了侵占一个目标系统,蠕虫必须首先获得计算机的访问权,它可以使用一些渗透攻击代码作为“弹头”,侵入目标系统,为了能够占领更多的系统,蠕虫可以利用目标系统尽可能多的安全漏洞实施攻击。
- 传播引擎:在通过“弹头”获得目标系统的访问权之后,蠕虫必须传输自身复制样本到目标系统上,一些蠕虫能够在弹头攻击的通道中同时装载全部代码。传播引擎通常利用的网络传输机制包括文件传输协议FTP、小文件传输协议TFTP、超文本传输协议HTTP,服务信息块协议SMB以及原始SOCKET套接字。
- 目标扫描算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。
- 有效载荷:蠕虫的有效载荷就是附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。除了没有有效载荷的蠕虫之外,其他蠕虫常常携带的有效载荷有植入后面、安装分布式拒绝服务攻击代理、组建僵尸网络等等。
后门与木马
- 后门:是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道。提供对受害计算机远程控制的任何程序或受害计算机上的远程命令解释器应该被视为后门。
- 为攻击者提供的不同类型的访问通道:
- 本地权限提升和本地账号;
- 单个命令的远程执行;
- 远程命令解释器访问;
- 远程控制GUI;
- 无端口后门。
- 为攻击者提供的不同类型的访问通道:
- 木马:是特洛伊木马的简称,指一类看起来具有某个有用或善意目的,但实际上掩盖着一些隐藏恶意功能的程序。如果将后门工具伪装成良性程序才具备真正的木马特性。
僵尸程序与僵尸网络
- 僵尸网络:在网络蠕虫、特洛伊木马、后门等传统恶意代码形态的基础上发展融入而产生的一种新型攻击方式。
- 功能结构:
- 工作机制:
- 命令和控制机构:主要分为三大类
- 基于IRC协议的命令和控制机构
- 基于HTTP协议的命令和控制机构
- 基于P2P协议的命令与控制机构。
Rootkit
- 这是一种技术更加高超的恶意代码形态。能够通过控制目标计算机操作系统的关键组件,来为攻击者提供强有力的手段,来获取访问并隐藏在系统中。
- 定义:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
- 分类:用户模式Rootkit、内核模式Rookit
恶意代码分析方法
- 代码分析:又称程序分析,是按需求使用的一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
- 恶意代码分析技术的方法:
- 静态分析:在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程。主要技术手段:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
- 动态分析:通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。主要技术手段:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试。
2.实践过程
动手实践:恶意代码文件类型识别、脱壳与字符串提取
实践任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
- 使用文件格式和类型识别工具,给出rada恶意码样本的文件格式、运行平台和加壳工具。
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理。
- 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
-
在cmd中切换到恶意程序所在的目录,使用
file
命令查看RaDa.exe
的文件类型,可以看到RaDa.exe
是一个 Windows PE 可执行文件,并且有图形化窗口:
-
其中
PE32
表示这是一个32位的运行在windows操作系统上的程序,GUI
表示这个程序是一个有图形界面的程序,intel 80386
表示处理器架构. -
使用
PEiD
工具查看RaDa.exe
的基本信息PEiD是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳
-
这里可以看到文件的入口点、偏移、文件类型、EP段、汇编程序以及加壳类型(UPX壳)
-
使用
strings RaDa.exe
命令查看 RaDa.exe 中可打印字符串
-
这里出现乱码的原因是因为文件被加壳,正常字符无法显示,所以下一步是我们要进行脱壳
-
使用超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,可以自动脱壳,省去了手工脱壳的麻烦,并在恶意程序同目录下生成了一个脱壳以后的程序
-
再用
strings RaDa_unpacked.exe
查看脱壳后的RaDa.exe,可以看到产生大量函数调用名以及其他有用字符串,但是并未查找到作者信息。
-
打开监视工具
process explorer
,这是进行进程监控的一个程序,当打开这个工具,同时运行恶意程序,在进程监控里点击该恶意程序,右键选择Properties
查看详细信息,发现恶意程序的作者信息,是Raul siles和David Perze于2004年编写的:
动手实践:分析Crackme程序
实践挑战:使用IDA Pro静态或动态分析 crackme1.exe
和 crackme2.exe
,寻找特定的输入,使其能够输出成功信息。
- 首先使用
file
命令来分析该恶意程序的大概信息,切换到恶意程序所在目录,分别执行file crackme1.exe
和file crackme2.exe
来查看两个文件信息:
- 可以看到这两个文件均为windows系统下运行的32位可执行程序,没有图形界面,是命令行程序。
对 crackme1.exe 进行分析
- 在cmd中尝试运行该程序,试探其输入格式。
- 可以发现,在接受1个参数时,程序的反馈与众不同,所以先猜测该程序接受一个参数。
- 接着我们使用
IDA pro
工具来打开crackme1.exe
进行分析,选择文件类型为PE。通过 Strings 页面可以查看到该程序中出现的明文字符串,发现了刚刚测试之外的两个字符串I know the secret
和You know how to speak to programs, Mr.Reverse-Engineer
。猜测前者是我们需要的口令,后者是输入口令正确时程序的反馈信息。
- 验证一下,上面的猜测正确:
- 接着看函数调用图(Function Call),
view
——.graphs
——>function calls
- 可以得出结论:程序是用 C 语言写的,可以发现字符串比较函数
strcmp
和输出函数fprintf
和printf
,估计是使用strcmp
函数来比较口令
的。那么关键部分就在sub_401280
函数中。 - 打开
sub_401280
函数的流程图,
cmp [ebo+arg_0],2
为判断程序是否有两个参数。如在命令行输入crackme1.exe 1
,那么参数对应的值为argc=2,argv={”crackme1.exe”,”1”}
。如果有两个参数,那么进行下一步判断,程序用I know the secret
对应的字符串和用户输入的口令相比较,通过比较的结果反馈口令是否正确。
对 crackme2.exe 进行分析
- 直接使用
IDA pro
工具来打开crackme2.exe
进行分析,可以看到明文字符串如下:
- 再来看函数调用图,发现核心函数还是
sub_401280
。
- 主要查看
sub_401280
:
cmp [ebp+arg_0],2
判断程序参数是否为两个;通过参数个数的判断后,接着用strcmp函数对argc里面的第一个字符串,即程序名,和crackmeplease.exe
进行判断:
- 通过程序名判断后,用户输入的口令与
I know the secret
判断。
- 通过口令判断后,通过一定规则输出通过测试的信息。具体是
unk_403080
中的字符串分别与0x42h进行异或运算。 - 进行测试:
样本分析实践:分析一个自制恶意代码样本rada
任务:分析一个自制的恶意代码样本,以提高对恶意代码逆向工程分析技术的知识,并提高逆向工程分析的方法、工具和技术。深入分析二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。
-
使用
md5sum
命令对该恶意程序进行摘要信息分析,得到md5摘要值为caaa6985a43225a0b3add54f44a0d4c7
-
然后和上面的实践一样,获取文件类型,检测壳,以及脱壳
-
和前面的实践一样,打开之前用过的监视工具process explorer和wireshark开启监听,并运行恶意程序RaDa.exe,分析其程序运行详细信息:
-
通过HTTP协议请求
10.10.10.10\RaDa\RaDa_commands.html
,连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页,之后又下载和上传文件到C:/RaDa/tmp
。 -
将文件
RaDa.exe
复制到了C:\RaDa\bin
目录下,可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。往下看可以发现该恶意程序对主机实行了DDos拒绝服务攻击(不确定,猜测)
-
再往下看可以发现该恶意程序对主机的注册表进行了读写和删除操作。
-
再往下看可以看到一些指令,
exe
在宿主主机中执行指定的命令,get
下载,put
上传,screenshot
截屏,sleep
休眠。 -
使用wireshark进行分析:
-
可以看到受害主机向目标主机
10.10.10.10
发送了大量的数据包
-
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
- MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7
- 是一个 Windows PE 可执行文件
- 使用了UPX加壳工具进行了加壳处理
-
找出并解释这个二进制文件的目的。
- 通过上面的分析可知,连接互联网时,该恶意程序就会通过http请求连接到指定主机,进行接受攻击者指令操作,并且攻击者可以完全控制该系统,所以这应该是一个后门程序。
-
识别并说明这个二进制文件所具有的不同特性。
- 该程序启动之后将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。
-
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- 使用了UPX加壳工具进行了加壳处理
-
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
- 猜测是后门程序,因为该恶意代码不具有自主传播模块,故不属于病毒和蠕虫,也并未进行伪装,故不是木马,并且该程序执行需攻击者远程发送指令。
-
给出过去已有的具有相似功能的其他工具。
- Bobax——2004也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
-
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 可以,恶意程序的作者信息,是Raul siles和David Perze于2004年编写的。
取证分析实践:Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- 僵尸网络是什么?僵尸网络通常用于干什么?
- 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
- 哪些IP地址被用于攻击蜜罐主机?
- 攻击者尝试了哪些安全漏洞?
- 哪些攻击成功了?是如何成功的?
3.学习中遇到的问题及解决
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX - ...
4.实践总结
xxx xxx