问题 | 回答 |
---|---|
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/19attackdefense |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10695 |
我在这个课程的目标是 | 学习教材第九章,了解恶意代码的相关知识 |
这个作业在哪个具体方面帮助我实现目标 | 相关知识点和实践任务 |
1. 实践内容
1.1 恶意代码基础知识
1.1.1 恶意代码定义与分类
-
恶意代码定义:恶意代码 (Malware,或 Malicious Code) 指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
-
恶意代码类型:恶意代码可以根据其执行方式、传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核套件等。
-
恶意代码的命名规则与分类体系:反病毒业界普遍采用 “ 三元组命名 ” 规则来对所发现的恶意代码新样本来进行命名,这里的“ 三元组” 是指恶意代码的类型、家族名称和变种号,一般形式为:
[恶意代码类型]恶意代码家族名称[变种号]
。各种形态的恶意代码在各个关键技术环节上都有帮其明确的定义特性,下图给出了一个基于多维度标签的恶意代码技术形态分类方法的示意,即在恶意代码工作机理中最为核心的传播、控制、隐藏和攻击这些关键技术环节中,有着一些具有特异性的特性,可以通过为恶意代码样本添加技术环节维度上的分类标签, 从而标识出该样本所具有的一种或多种特性。
1.1.1 计算机病毒
-
计算机病毒基本特性:感染性、潜伏性、可触发性、破坏性、衍生性。
- 可执行文件:前缀感染机制、后缀感染机制和插入感染机制。
- 引导扇区:首先是通过BIOS 定位到磁盘的主引导区,运行存储在那里的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统
- 支持宏指令的数据文件:这类病毒称为宏病毒,宏病毒感染数据文件的方式为将自身以宏指令的方式复制到数据文件中,因此当被感染的数据文件被应用软件打开时,将自动执行宏病毒体,完成病毒的引导。
- 可执行文件:前缀感染机制、后缀感染机制和插入感染机制。
-
计算机病毒的传播机制:计算机病毒的传播渠道包括移动存储、电子邮件及下载、共享目录等。
1.1.2 网络蠕虫
-网络蠕虫的基本特性:网络蠕虫的定义特性在于通过网络的自主传播,如果一个恶意代码不通过网络传播,那么它就不是蠕虫。
-
网络蠕虫的组成结构:蠕虫的内部组件类似于导弹这种战争武器中的一些部件 弹头用来穿透目标,传播引擎驱动导弹飞向它的目标,目标选择算法和扫描引擎很像导弹中的小型回转仪,可以引导导弹发现和指向它的目标,有效载荷仓中则携带了执行真正破坏性攻击的恶性材料。
-
弹头:为了侵占一个目标系统,蠕虫必须首先获得计算机的访问权,它可以使用一些渗透攻击代码作为 “弹头 ”,侵入目标系统。常用攻击技术有缓冲区溢出攻击、文件共享攻击、利用电子邮件传播、利用其他普遍的错误配置。
-
传播引擎:通过在目标系统上执行传播引擎指令,来完成蠕虫样本的传播,传播引擎通常利用的网络传输机制包括文件传输协议 FTP 、小文件传输协议 TFTP、超文本传输协议 HTTP、服务信息块协议 SMB 以及原始 SOCKET 套接字等。
-
目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。目标选择算法包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。
-
有效载荷:蠕虫的有效载荷就是附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。比如说植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂的计算等。
-
1.1.3 后门与木马
从定义特性上进行分析,后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访间通道; 而木马作为特洛伊木马的简称,是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
-
后门:后门工具能够为攻击者提供多种不同类型的访问通道,包括本地权限提升和本地账号、单个命令的远程执行、远程命令行解释器访问、远程控制 GUI、无端口后门。对于后门工具而言,攻击者希望它能够持续地在目标系统中运行,并且在系统重启之 后能够仍然随着系统进行启动,这样才能够保证他对目标系统的随时控制。 因此后门工具往往都利用了系统的自启动功能,将自身加入到系统重启机制中。
-
特洛伊木马:通过使自己看起来像是正常的有用的软件,特洛伊木马程序可以用于下目的:欺骗用户或系统管理员安装特洛伊木马程序,这样木马程序就通过亳无戒备的用户进入到计算机系统中;隐藏在计算机的正常程序中,将自己伪装成看起来属于该系统,使得用户和管理员不会觉察到它的存在,通常与后门工具结合,成为木马后门。常用技术包括命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒。
1.1.4 僵尸程序与僵尸网络
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。
-
僵尸网络的功能结构:佣尸程序的功能组成结构, 可以分为主体功能模块和辅助功能模块,主体功能模块包括实现僵尸网络定义特性的命令与控制模块和实现网络传播特性的传播模块,而包含辅助功能模块(由信息窃取模块、主机控制模块、下载更新模块和防分析检测模块构成)的僵尸程序则具有更强大的攻击功能和更好的生存能力。
-
僵尸程序的命令与控制机制:当前主流使用的僵尸网络命令与控制机制包括: 基于 IRC 协议的命令与控制机制、基于HTTP 协议的命令与控制机制和基于 P2P 协议的命 令与控制机制这三大类。
-
IRC僵尸网络工作机制图:
1.1.5 Rootkit
它能够通过控制目标计算机操作系统的关键组件, 来为攻击者提供强有力的手段, 用来获取访问并隐藏在系统中。Rootkit 的定义是: “ 一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中“。
为了获得所有这些技术特性和能力,Rookit需要由众多的功能组件所组成,包括替换操作系统软件用于隐藏自身的恶意程序,实现隐蔽性后门访问的后门程序,还有各种辅助工具,这些工具允许攻击者调整那些被替换程序的特征,包括程序大小和上次修改日期等,从而可以使得这些程序看上去和原来正常程序没有任何差异。
根据操作系统的分层, Rootkit可以运行在两个不同的层次上, 即用户模式和内核模 式。
-
用户模式Rootkit:大部分 UNIX 用户模式 Rootkit 中集成的工具可以被分为如下五种不同的类型,包括提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本;在 Windows 平台上, 实现用户模式 Rootkit 主要有如三种不同技术
-
内核模式 Rootkit:利用对内核的操作,内核模式 Rootkit 可以修改内核,彻底地隐藏攻击者在计算机上的活动,大多数内核模式 Rootkit 采用如下技术手段:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。
-
Linux 内核模式 Rootkit
1.2 恶意代码分析方法
恶意代码分析与针对良性代码和软件的程序分析技术,都可以采用通用的代码分析技术来作为基础,主要包括静态分析和动态分析方法,来对代码进行逆向工程(Reverse Engineering)来确定其功能。
1.2.1 恶意代码分析环境
- 恶意代码发烧友的分析环境:
- 基于虚拟化构建恶意代码分析环境:
- 用于研究的恶意代码自动分析环境:
1.2.2 恶意代码静态分析技术
通过反病毒引擎扫描识别已知的恶意代码家族和变种名,逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。恶意代码静态分析技术如下图所示
-
反病毒软件扫描:使用现成的反病毒软件来扫描待分析的样本, 以确定反病毒软件是否能够识别该样本, 以及所识别的类型、家族、变种等信息。
-
文件格式识别:恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式。在Windows 平台上, 二进制可执行文件E XE 和DLL 都是以 PE 文件格式组织的,而在 Linux 平台上,可执行文件格式则是 ELF 。
-
字符串提取分析:主要提取的信息包括可能获得的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。
-
二进制结构分析:nm 指令在可执行文件中查找 symbols 重要元素。objdump 主要功能有从可执行文件中限制不同类型的信息、编译器类型、代码段数据段位置、反汇编
-
反汇编(Disassemble)与反编译(Decompile):反汇编与反编译是对二进制程序编译链接的逆过程,反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程,而反编译则更进一步,期望将汇编代码再进一步还原成高级编程语言形式的源代码。
-
代码结构与逻辑分析:程序结构主要是了解 Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑。
-
加壳识别与代码脱壳:恶意代码通常使用的加壳混淆机制包括加密、多样性、多态和变形等,加密机制(Encryption)一般采用固定的代码加密器来对一进制程序进行处理,以改变代码的存在形态。
1.2.3 恶意代码动态分析技术
动态分析,实际上是激活一个受控分析实验环境中的代码,当一个代码在实际系统中运行时,我们能够更加迅速地了解其行为。动态分析技术如下图所示
-
基于快照比对的方法和工具:针对恶意代码动态分析的快照比对方法是首先对原始的“ 干净" 的系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间, 如5分钟,之后我们再对恶意代码运行后“ 脏” 的系统资源列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响,比如新建、删除或修改了哪些文件、哪些注册表项等。
-
系统动态行为监控方法:系统动态行为监控是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。系统动态行为监视通常基于行为通知(Notification)机制或者 API 劫持技术(API Hooking)实现。
-
网络协议栈监控方法:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
-
沙箱技术:沙箱技术提供了受限制的执行环境,使得在沙箱中运行的代码不能够修改用户系统,从而提供了 一个用于运行不可信程序的安全环境。
-
动态调试技术:动态调试器能够以单步模式来调试恶意代码,能够一行代码接着一行代码,一个函数调用接着一个函数调用地进行恶意代码行为分析的过程,这样就能够像录像机一样能够逐个镜头的分析犯罪现场录像,并也可以中断或者快进程序运行流程,观察恶意代码中发生的一切。
2. 实践过程
2.1 动手实践:恶意代码文件类型识别、脱壳与字符串提取
实践任务: 对提供的 rada 恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得 rada 恶意代码的编写作者,具体操作如下:
1. 使用文件格式和类型识别工具,给出 rada 恶意代码样本的文件格式、运行平台和加壳工具。
2. 使用超级巡警脱壳机等脱壳软件,对 rada 恶意代码样本进行脱壳处理。
3. 使用字符串提取工具,对脱壳后的 rada 恶意代码样本进行分析,从中发现 rada 恶意代码的编写作者是谁
本次实验采用Windows XP attacker,上面安装有超级巡警脱壳器等分析软件
首先使用 file 命令查看 RaDa.exe 的文件类型
可以看到 RaDa.exe 是一个 Windows PE 可执行文件,并且有图形化窗口
接下来使用 PEiD 工具查看 RaDa.exe 的基本信息(加壳类型等)
可以看到这个是一个版本为 0.89.6 的 UPX 壳(压缩壳),还可以看到文件的入口点、偏移、文件类型、EP 段、汇编程序。
然后使用strings RaDa.exe
查看 RaDa.exe 中可打印字符串
发现都是乱码,需要进行脱壳处理
使用超级巡警对 RaDa.exe 进行脱壳,脱壳后输出 RaDa_unpacked.exe
虽然是经过修改的 UPX 壳,但是该自动化脱壳工具显然有这个壳的样本库,能够自动脱壳,省去了手工脱壳的麻烦
再用 strings 查看脱壳后的RaDa.exe(RaDa_unpacked.exe)
可以看到显示了正常信息
这时候用 IDA Pro Free 打开这个文件,查看详细信息
可以在字符串中找到作者的名字,Raul Siles 和 David Perze
2.2 分析Crackme程序
任务:在WinXP Attacker虚拟机中使用 IDA Pro 静态或动态分析 crackme1.exe 和 crackme2.exe ,寻找特定的输入,使其能够输出成功信息
本次实验实验 Windows XP attacker 装有 IDA Pro
首先检查一下两个文件的完整性,计算其 md5 值,验证
使用file
命令查看其文件类型
可以看到这两个文件都是32位 windows 下 PE 文件,没有图形界面,是命令行程序
接下来,尝试对 crackme1.exe 进行分析,首先运行它,可以发现,在接受1个参数时,程序的输出与众不同,所以我们猜测该程序的输入为一个参数。另外,可以发现程序的两种输出信息。一种是“I think you are missing something.”,这个猜测是参数数目不对的提示;另一种是“Pardon? What did you say?”,对于这种反馈信息,猜测应该是参数错误的提示。
接下来利用 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),可以得出三个结论:程序估计是使用strcmp
函数来比较输入的,然后利用print
和fprint
函数输出;关键的部分在sub_401280
这里;从strcmp
函数可以推断出程序是用c语言编写的
下面来看sub_401280
这个函数(由于只是在上学期的 linux 课程里学过一点汇编语言,所以并不是完全能看懂),倒数第二行cmp [ebo+arg_0],2
为判断程序是否有两个参数(cmp指令为比较两个操作数的大小),如果不是则返回“I think you are missing something.”
在c语言中,main函数通常为int main(int argc,const char **argv)
,即第一个参数argc
对应argv
的大小,第二个参数对应命令行的格式。比如说在命令行输入crackme1.exe 1
,那么参数对应的值为argc=2,argv={”crackme1.exe”,”1”}
。
如果argc = 2
(即输入了两个参数),那么进行下一步判断
call strcmp
中,程序用“I know the secret”对应的字符串和[eax]
对应的字符串(用户输入的口令)相比较,通过比较的结果反馈口令是否正确
如果正确,则输出“You know how to speak to programs, Mr. Reverse-Engineer”
如果错误,则输出“Pardon? What did you say?”
运行程序来验证我们的猜想
下面来分析 crackme2.exe,主要是采用 IDA Pro 进行静态分析,同样打开文件,查看 strings 窗口。
同样打开call function
查看,可以得到与分析 crackme1.exe 几乎相同的结论,同样要关注sub_401280
这个函数
同样地找到这个函数,还是判断输入是否为两个参数,如果不是返回“I think you are missing something.”
如果是两个参数,则接着用strcmp
函数对argv
里面的第一个字符串(即程序名,因为这里是arg_4
,也就是指向1号栈空间的指针,此时这个空间用来存储argv[0]
) 和“crackmeplease.exe”进行判断
如果判断错误,则输出“I have a identity problem”
如果判断正确,则继续判断用户的输入与“I know the secret”判断
如果判断错误,则输出“Pardon? What did you say?”
如果判断正确,则进入一个循环,首先将var_4
指向的值置0,然后通过比较其与0x21
的大小来决定是否进行循环,如果大于0x21
,则跳转到loc_401381
,小于0x21
则继续执行,循环内部是通过将unk_403080
中的字符逐个与0x42
进行异或运算(add eax,offset unk_403080
,xor eax 42h
),然后输出(call putchar),unk_403080
中的值如下图所示
下面来验证我们的猜想,首先将程序名改为“crackmeplease.exe”,然后输入“I know the secret”,查看输出
2.3 样本分析实践:分析一个自制恶意代码样本 rada, 并撰写分析报告
本次实践作业的任务是分析一个自制的恶意代码样本,以提高对恶意代码逆向工程分析技术的认识,并提高逆向工程分析的方法、工具和技术。
关于这个二进制文件,我们创建它的目的是为了提高安全业界对恶意代码样本的认识,并指出为对抗现在的恶意代码威胁发展更多防御技术的必要性。你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采 取的恶意代码分析技术。
待分析二进制文件位置: rada.zip, 警告这个二进制文件是一个恶意代码, 因此你必须采用 一些预防措施来保证业务系统不被感染,建议在一个封闭受控的系统或网络中处理这个未知的实验品。
回答问题:
- 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
- 找出并解释这个二进制文件的目的。
- 识别并说明这个二进制文件所具有的不同特性。
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
- 给出过去已有的具有相似功能的其他工具。
奖励问题: - 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
分析过程:
先进行动态分析。首先打开监控工具 Filemon,Regmon,Wireshark 三个软件进行监测。同时使用 Regshot 记录下还未启动恶意软件时的注册表状态,这个时候可以启动这个恶意软件了。
启动后可以观察到注册表监视器和文件监视器的变化,这时用 Regshot 记录下此时注册表状态,生成比较文件。
此时我们可以发现,对于文件的改变,创建了C:RaDa
、C:RaDa mp
和C:RaDain
目录,然后将程序文件RaDa.exe
复制到了C:RaDain
目录下
而对于注册表来说,通过生成的两个注册表状态的比较,我们可以发现程序在注册表启动项 HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun下建立键值RaDa
,并同时将 C:RaDainRaDa.exe 添加进去
对于网络来说,一直通过 HTTP 协议访问 ip地址为 10.10.10.10 的网站
利用动态分析我们很难看是否有隐藏路径等信息,所以下面转入静态分析
首先使用命令md5sum
和file
获得程序的 MD5 摘要和文件类型。可以看到 RaDa.exe 是一个 Windows PE 可执行文件,并且有图形化窗口,md5值为caaa6985a43225a0b3add54f44a0d4c7
接下来使用 PEiD 工具查看 RaDa.exe 的基本信息(加壳类型等)
可以看到这个是一个版本为 0.89.6 的 UPX 壳(压缩壳),还可以看到文件的入口点、偏移、文件类型、EP 段、汇编程序。
使用超级巡警对 RaDa.exe 进行脱壳,脱壳后输出 RaDa_unpacked.exe
然后使用 IDA Pro 进行分析,首先查看字符串窗口,把类型 Type 改成 unicode 类型,首先看到的是命令行参数,其次是版本和作者,然后是注册表字符串,最后是一个网页RaDa_commands.html
,应该是之前访问的网站的网页
命令行参数的作用
参数 | 作用 |
---|---|
--verbose |
显示Starting DDoS Smurf remote attack |
--visible |
决定在获取html文件时,IE窗口是否可见 |
--server |
指定命令文件控制服务器的ip地址、访问协议及目录等,默认是http://.10/RaDa |
--commands |
指定命令文件,默认是RaDa_commands.html |
--cgipath |
指定服务器上cgi文件的根目录,默认是cgi-bin |
--cgiget |
指定负责文件上传的cgi脚本,默认是upload.cgi |
--cgiput |
指定负责文件下载的cgi脚本,默认是download.cgi |
--tmpdir |
指定临时文件夹的位置,默认是C:RaDa mp |
--period |
指定两次向服务器请求命令文件的时间间隔,默认是60秒 |
--cycles |
指定多少次向服务器请求命令文件后退出,默认是0(没有限制) |
--help |
输出版权信息 |
--gui |
使用该参数会使样本出现一个GUI窗口 |
--installdir |
指定样本的安装路径,默认是C:RaDain |
--noinstall |
使用该参数,样本将不会安装、也不会添加注册表 |
--uninstall |
卸载样本 |
--authors |
如果确认不是在VMware的虚拟机中运行,则显示样本的作者;否则显示参数不存在 |
接下来深入分析程序接受控制的逻辑
以RaDa_commands.html
为线索,首先找到sub_404FB
函数分析,这个字符串被复制到了变量dword_40C030
中,搜索这个变量找到sub_4052C0
。
查看函数sub_4052C0
可以看到判断3个内网网段,分别为192.168.
、172.16.
、10.
,这里确保服务器位于这3个内网网段,然后去服务器中获取命令,解析并执行其中的命令
下面就是这些具体的命令以及其功能
命令 | 功能 |
---|---|
exe | 在宿主主机中执行指定的命令 |
put | 将宿主主机中的指定文件上传到服务器 |
get | 将服务器中的指定文件下载到宿主主机中 |
screenshot | 截取宿主主机的屏幕并保存到tmp文件夹 |
sleep | 停止活动一段时间 |
最后是来分析一下程序是否存在VMware
识别,以 HKLMSoftwareVMware,Inc.VMware ToolsInstallPath 为线索分析,找到函数sub_404FB0
(authors 命令处理函数),在这个函数中,这个字符串被复制到变量dword_40C070
,搜索这个变量对应的函数,找到是sub_40AAA0
。
sub_404FB0
获取了网卡配置信息,并检查了 mac 地址,然后确认 HKLMSoftwareVMware,Inc.VMware ToolsInstallPath 是否存在(也就是看看VMware Tools 是不是在注册表里)
(ps:--authors的作用,如果确认不是在 VMware 的虚拟机中运行,则显示样本的作者;否则显示参数不存在)
问题解答
通过以上分析过程回答这些问题
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
程序的 MD5 摘要值为caaa6985a43225a0b3add54f44a0d4c7
,加壳方式是UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
,文件类型RaDa.exe: PE32 executable (GUI) Intel 80386, for MS Windows
,这些可以作为文件标识
找出并解释这个二进制文件的目的
这是一个后门程序,能够使得远程的攻击者完全地控制系统,并且只要系统能够通过浏览器上网,就能获得攻击者的指令
识别并说明这个二进制文件所具有的不同特性。
RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:从指定的web服务器请求指定的web页面;解析获得的web页面,获取其中的指令;执行解析出来的指令,主要的指令上面给出
;等待一段时间后继续按照上述步骤继续执行。
启动后,RaDa一直在后台运行,不会弹出任何窗口。并支持以下指令
命令 | 功能 |
---|---|
exe | 在宿主主机中执行指定的命令 |
put | 将宿主主机中的指定文件上传到服务器 |
get | 将服务器中的指定文件下载到宿主主机中 |
screenshot | 截取宿主主机的屏幕并保存到tmp文件夹 |
sleep | 停止活动一段时间 |
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- UPX加壳技术
- 通过查看网卡的 MAC 地址以及查看 VMware Tools 的注册表项 来判断操作系统是否运行在 VMware 虚拟机上,如果是,则使用
--authors
参数时将不会输出作者信息 - 一些干扰字符串
Starting DDoS Smurf remote attack
,让分析者误认为是程序执行 DDoS 攻击,实际上并没有
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
首先这个样本不具有传播和感染属性,所以不是病毒或者蠕虫;其次也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马;所以应该是一个后面程序,如果是多对一控制,还可能是 HTTP Bot(僵尸程序)
给出过去已有的具有相似功能的其他工具。
从服务器下载指令并执行具备组件僵尸网络的能力;Setiri及其前辈GatSlag
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的
可以通过--authors
参数获取相关作者信息Authors: Raul Siles & David Perez,2004
;环境和限定条件是不在虚拟机 VMware 中运行
2.4 取证分析实践:Windows 2000系统被攻陷并加入僵尸网络
难度等级:中级, 案例分析挑战内容:
在2003年3月初, Azusa Pacific大学蜜网项目组部署了一个未打任何补丁的Windows
2000蜜罐主机,并且设置了一个空的管理员密码。在运营的第一个星期内,这台蜜罐主机就频繁地被攻击者和蠕虫通过利用几个不同的安全漏洞攻陷。在一次成功的攻击之后, 蜜罐主机加入到一个庞大的僵尸网络中,在蜜罐主机运营期间,共发现了15164个不同主机加入了这个僵尸网络。这次案例分析的数据源是用Snort工具收集的该蜜罐主机5天的网络流日志, 并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和一些其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置你的任务是分析这个日志文件并回答以下给出的问题。
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- 僵尸网络是什么?僵尸网络通常用于干什么?
- 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
- 哪些IP地址被用于攻击蜜罐主机?
- 攻击者尝试了哪些安全漏洞?
- 哪些攻击成功了?是如何成功的?
IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
因特网中继聊天(Internet Relay Chat),简称 IRC 。 IRC 的工作原理非常简单,只要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台IRC服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER <username> <hostname> <servername> <realname>、PASS <password>、NICK <nickname>
。注册完成后,客户端就使用 JOIN 信息来加入频道,格式如下:JOIN <channel>
。
IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。 SSL 加密传输在 6697 端口。
僵尸网络是什么?僵尸网络通常用于干什么?
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
它往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
通过 Wireshark 打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667
,因为我们知道 IRC 服务通过6667端口
经过筛选,可以得到五个IRC服务器,分别为 209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172
在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络
首先先拉取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包。这里使用命令tcpflow -r botnet_pcap_file '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地址,通信时间等等。
然后使用以下代码对209.196.044.172.06667-172.016.134.191.01152
文件进行筛选,可以得到共有3457个主机访问过服务器(在当前主机进入到IRC的频道之后,频道会将当前频道中所有的主机的信息都发送过来,可以从其中的数据包中计算当前频道共有多少主机)
哪些IP地址被用于攻击蜜罐主机?
首先,我们认为进入蜜罐的流量都是攻击。使用以下命令查找端口并输出到1.txt 中
tcpdump -n -nn -r botnet_pcap_file.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 -nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v:排除指定字符串;cut -d '.' -f 10:截取以'.'为分隔符的第 10 列;uniq命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数)
可以看到共有148个端口被攻击了
接着使用如下指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接IP地址输出到2.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 > 2.txt;wc -l 2.txt
(其中 awk -F 就是指定分隔符,可指定一个或多个, print 后面做字符串的拼接。)
可以看到一共有165个主机被用于蜜罐入侵
攻击者尝试了哪些安全漏洞?
要了解攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii
指令先查一下网络流分布情况。发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口。
利用下面的指令筛选出蜜罐主机相应的 TCP 端口。输出可以看到 TCP 响应端口为135(rpc),139(netbios-ssn),25(smtp)445(smb),4899(radmin),80(http)。
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
(0x12代表有回复)
将协议部分改为 udp ,可以筛选出 udp 端口137(netbios-ns)
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号端口,这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。
接下来看 tcp 135 号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了 connect 扫描。
然后查看 TCP 80 端口,首先利用 Wireshark 进行筛选tcp.dstport==80 && ip.dst == 172.16.134.191
,首先连接最多的就是 24.197.194.106 这个IP,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。
接下来是210.22.204.101访问的80端口,攻击者是想通过缓冲区溢出攻击来获得一个命令行了
下一个访问 80 端口的是218.25.147.83,这里会看到c:
otworm,说明这是一个蠕虫攻击。上网搜索发现是红色代码(red code)病毒
其余的 ip 地址均为正常访问蜜罐
最后看对80端口有没有攻击成功了,我们通过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的回应均为一个 iis 服务器的默认页面,所以80端口的这些攻击均失败。
然后关注TCP 139号端口。这个也比较简单,虽然有很多主机连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样也没有成功,所以应该是 SMB 查点。
然后分析TCP 445端口。这个端口连接非常多,可以看到许多 samr, srvsvc 字符串,查询字符串后很容易发现一个PSEXESVC.EXE
字符串,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。
继续往下看,发现该 ip 地址与蜜罐建立了会话,说明攻击成功
还有就是 ip 地址为210.22.204.101的主机进行的攻击,根据字符串推测应该是使用了LAN Manager口令猜测,同样建立了会话,攻击成功
其余的针对 445 端口的数据流量都是一些普通查点,就不一一赘述了
最后一个TCP 4899端口。只有 IP 地址 210.22.204.101 访问过。上网搜索可以查到 4899 端口是一个远程控制软件 radmin 服务端监听端口,这个软件不是木马,应该是上面攻击成功后上传这个软件方便控制。
至此分析结束
哪些攻击成功了?是如何成功的?
通过上面的分析可知,成功的攻击发起者是210.22.204.101 和 61.111.101.78,分别是 Dv1dr32 蠕虫和 LAN Manager 口令猜测
3. 学习中遇到的问题及解决
- 问题1:看到实验题目(尤其是第四个)我是懵逼的
- 问题1解决方案:通过上网搜索,以及参考孙启龙同学和解建国同学两位大佬的博客下才勉强完成,但对一些细节还了解的不够,希望老师能再仔细讲一讲
4. 学习感想和体会
这次实验题目较之前的几周又难又多,感觉自己的脑子快不够用了,还是得多学习多实践啊