《网络与系统攻防技术》实验四实验报告
1.实验要求
1.1 实验内容
一、恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
四、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
2.1.1分析rada样本的文件格式、运行平台和加壳工具
在将RaDa.exe文件传入虚拟机后,在虚拟机命令行中输入file RaDa.exe查看文件基本信息
PE32 executable:这表明 RaDa.exe 是一个可移植可执行文件(Portable Executable,简称PE)。PE32 表示这是一个32位的PE文件。
GUI:这表示该可执行文件包含图形用户界面(Graphical User Interface),意味着它是一个图形界面程序,而不是命令行工具。
Intel 80386:这表明该文件是为基于Intel 80386微处理器的系统设计的。
for MS Windows:表示该可执行文件是运行在windows系统中的。
3 sections:这表示该可执行文件由三个不同的节(sections)组成。
此时在虚拟机命令行中输入strings RaDa.exe>分析目标文件,发现得出的可识别字符串都是乱码,极有可能加了壳。
在PEiD软件中放入下载好的RaDa.exe进行分析
可见,该PE文件已被UPX加壳过。
2.1.2对rada样本进行脱壳处理
2.1.3利用字符串提取工具对脱壳后的样本进行分析
此时在虚拟机命令行中输入strings RaDa_unpacked.exe>分析脱壳后的目标文件
可见,部分内容已能被识别,比如图中出现了该PE文件作者?的[c] Raul Siles && David Perez的字符串。
2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
2.2.1对于crackme1.exe
在将crackme1.exe文件传入虚拟机后,在虚拟机命令行中输入file crackme1.exe,首先查看文件的基本信息
可知该文件也是一个32位的PE文件,运行在windows系统上,具有7个节,但非图形界面程序,因此应为命令行工具,
将crackme1.exe文件放入IDA Pro软件中的PE Executable界面,得到图形化反汇编窗口如图
可见该程序在实际执行过程中对于所有有效参数存在三种屏幕输出结果
此时我们在主机命令行中测试该程序,并使用不同的输入参数测试该程序的返回值,得到如下结果
"I think you are missing something.\n"
"Pardon? What did you say?\n"
"You know how to speak to programs, Mr. "..
此时我们在主机命令行中测试该程序,并使用不同的输入参数测试该程序的返回值,得到如下结果
此时结合上面我们执行该程序时得到的所有返回值,我们可以得知输出的结果1与2应该不是我们要找的成功输入的返回结果,所以我们的目标即找到能使程序输出结果3的输入参数。
对于所得的图形化反汇编窗口,我们可以发现若要使程序输出结果3,也即成功执行窗口5所代表的代码,那么程序的执行必须经过窗口2,此时观察窗口2的汇编代码,可知其运行逻辑为:
首先获取 arg_4 参数(从窗口1中可知即第一个输入的参数)指向的值,并通过strcmp函数将其与字符串 "I know the secret" 进行比较。如果两者相等,程序将跳转到 loc_401310 标签处继续执行,也就是执行窗口5的代码段。
正确输入应为"I know the secret"。
2.2.2对于crackme2.exe
反编译结果:
我们将程序crackme2.exe改名为crackmeplease.exe,以符合目标执行代码执行路线的第一个执行条件,同时让crackmeplease.exe作为第一个参数的情况下能让该程序正常运行。
之后我们输入在命令行中输入"crackmeplease.exe" "I know the secret"
2.3 分析一个自制恶意代码样本rada,并撰写报告
2.3.1提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
在虚拟机命令行中输入file RaDa_unpacked.exe查看脱壳后RaDa文件的基本信息。
可以得到这一程序是32位的运行在windows系统上的图形界面PE文件,支持80386指令集,由4个不同的节组成。
再于虚拟机中输入md5sum RaDa_unpacked.exe获取该程序的md5哈希值,由图可知为847c2a1dcfe8347afd8cf76d99217c5b
2.3.2找出并解释这个二进制文件的目的
将脱壳后的RaDa文件拖入IDA中,查看其反汇编代码,我们可以发现该程序在运行中会执行这几个可疑的操作
比如
http://10.10.10.10/RaDa:这是一个URL,可能用于与远程服务器通信。
RaDa_commands.html、cgi-bin、download.cgi、upload.cgi:顾名思义,这些字符串可能与Web服务或脚本相关,用于执行命令、下载或上传文件。
C:\RaDa\tmp、C:\RaDa\bin:这些是文件路径,可能用于存储临时文件或可执行文件。
HKLM\Software\Microsoft\Windows\CurrentVersion\Run:这是一个Windows注册表路径,通常用于设置程序在系统启动时自动运行。
可见,除了上述通过IDA反汇编分析出的那些可疑操作外,还有
Starting DDoS Smart remote attack...:表明程序可能涉及到分布式拒绝服务攻击(DDoS)
Vscript.Shell、RegWrite、RegRead、RegDelete:这些与Windows脚本宿主和注册表操作有关,后门程序可能会使用这些功能来执行命令或修改系统设置。
--gui、--invisible、--noinstall:这些参数可能用于控制程序的可见性和安装行为,以避免被用户发现
综上,这些可疑的字符串表明程序可能会执行包括网络通信、文件操作、注册表修改、命令和控制、脚本执行等操作,而这些都是后门程序的典型特征。因此,我们可以合理推断这段代码属于一个后门程序,或者说是一个后门程序的一部分。
2.3.3识别并说明这个二进制文件所具有的不同特性
结合2.3.2我们可知该程序具有如下特性
远程通信能力:程序可能具备与远程服务器通信的能力。
远程Web服务交互:程序可能与Web服务交互,执行服务器传来的命令、下载文件或上传数据。
文件系统操作:程序可在本地文件系统中创建或操作文件,用于存储临时数据或可执行文件。
自动启动能力:程序可能修改注册表以实现在系统启动时自动运行。
2.3.5对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
既非病毒也非蠕虫,实为后门程序。因为其不表现出大量自我复制与传播的特点,仅仅在c盘目录下生成一个RaDa文件夹与相关程序文件,没有主动向其他主机或在宿主机的其他位置大量复制,不属于蠕虫与病毒,没有伪装成一个正常的程序,不属于木马,能够不依附于宿主机独立运行,接受远程指令进行操作,所以属于后门程序。
2.3.6给出过去已有的具有相似功能的其他工具
在实验二中使用的msf工具,用于生成后门程序获取目标主机的某些权限。
2.3.7可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,在前面的步骤中已经查到了该程序的作者,比如在kali虚拟机中通过strings分析,还有通过IDA反汇编查找、以及PE中字符串的提取这三种方式均可获取开发作者的名字。
当然上述方式都是有条件的
该文件并未被加壳压缩或加密处理,作者确实在程序中留下自己的信息
2.3.8给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
基于特征码的检测:这种方法依赖于已知恶意软件的特征码或签名(特征码是一段独特的二进制代码,通常与恶意软件的行为或结构相关联)。安全软件会将扫描到的文件与数据库中的特征码进行比对,以识别已知的恶意软件。
启发式分析:启发式分析通过分析程序的行为模式来识别恶意软件。也就是说这种方法不依赖于已知的特征码,而是根据一系列规则来判断程序是否表现出恶意行为。
行为监控和分析:这种方法通过监控程序在系统上的实时行为来检测恶意活动。这包括文件的创建、修改、删除,网络连接的建立,以及对系统资源的访问等。
静态代码分析:静态代码分析是在不运行程序的情况下,通过分析程序的源代码或二进制代码来识别潜在的恶意行为。这包括检查代码中的可疑模式、函数调用、API使用等。
动态链接库(DLL)注入和API钩子检测:这种方法通过监控程序对DLL的加载和API调用来检测恶意行为。因为恶意软件经常通过注入DLL或挂钩API来隐藏其活动或篡改系统功能。