1.实验内容
1.1 本周学习内容
本周学习了恶意代码分析的基本方法,静态分析和动态分析的核心概念。静态分析主要通过代码结构和API调用等特征来识别恶意行为,动态分析则使用沙箱等环境运行代码,观察其行为。
通过实验学习了IDA Pro和Process Monitor等工具的基本操作。
1.2 实践内容
- 恶意代码文件类型标识、脱壳与字符串提取
- 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
- 分析一个自制恶意代码样本rada,并撰写报告,回答问题
- 取证分析实践Windows 2000系统被攻破并加入僵尸网络
1.3 问题回答
1.3.1 分析一个自制恶意代码样本rada,回答问题
见正文2.3部分,将结合rada的具体内容回答。
1.3.2 Windows 2000系统被攻破并加入僵尸网络
数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答问题
见正文2.4部分。
2.实验过程
2.1 恶意代码文件类型标识、脱壳与字符串提取
2.1.1 文件格式与类型识别
在分析恶意代码前,首先需要识别文件的格式、运行平台及是否有加壳保护。
具体操作是使用使用file命令(适用于Linux)或者PEiD工具(适用于Windows)对文件格式进行分析:
2.1.1.1 file命令识别RaDa.exe
file命令如下,结果如图1所示
file RaDa.exe
图1:file命令识别RaDa.exe
从图1中可以得到以下信息:
- 从文件类型“PE32 executable”,可知RaDa.exe是一个32位Windows可执行文件,采用PE文件格式,适用于Microsoft Windows操作系统。
- 从文件描述“GUI”,可知RaDa.exe是一个带有图形用户界面的应用程序,而非控制台程序。
- 从架构描述“Intel 80386”,可知该文件是为32位的x86架构系统编写的,这表明其适用于32位的windows操作系统,不适用于Mac OS或linux。
- 从节数量“3 sections”,可知该文件包含的节较少(一般PE文件会有4个或更多节),这可能表明文件经过了加壳或压缩处理。
2.1.1.2 使用PEiD工具识别RaDa.exe
识别结果如图2所示:
图2:PEiD识别RaDa.exe壳信息
从图2中可以得到以下信息:
- 从图片中显示的“UPX 0.89.6 - 1.02 / 1.05 - 2.90”,可知RaDa.exe文件使用了UPX壳进行加密或压缩。
- 从“入口点”一栏的0000FD20,可知该文件的执行入口地址为0x0000FD20,可以在脱壳后从该地址开始分析文件的实际代码逻辑。
- 从“文件偏移”一栏的00004120,可知入口代码在文件中的偏移量是0x00004120,这个信息在手动提取或脱壳时尤为有用。
- 从“连接器版本”一栏中的“6.0”,可知该文件是使用6.0版本的连接器生成的,暗示其编译环境和可能的编译工具链。
- 从“子系统”一栏中的“Win32 GUI”,可知该程序是一个基于图形用户界面的Win32应用,而非控制台程序。
- 从“EP段”一栏中的JDR1,可知文件入口段名称非标准,这可能是加壳或开发者自定义的结果,表明代码被刻意伪装或保护过。
- 从“首字节”显示的字节序列“60 BE 00 C0”,可知该文件的代码段以该特定字节序列开头,这可以作为文件指纹,用于后续对比和查找相似样本。
2.1.2 脱壳处理
对使用加壳工具保护的文件,需要脱壳后再分析内容。这里可以使用超级巡警脱壳机进行脱壳操作,如图2所示。
图2
随后再次用file命令识别RaDa.exe,结果如图3所示,可见sections属性变为4
图3:file命令识别脱壳后RaDa.exe
2.1.3 字符串提取
脱壳操作前用字符串提取命令strings分析RaDa.exe文件,结果如图4所示:
命令如下:
strings RaDa.exe
也可使用以下命令将文本写入文件
strings RaDa.exe > strings_output.txt
图4:strings命令提取原始RaDa.exe字符串
在完成脱壳操作后,使用strings命令分析文件中的关键文本内容,以尝试获取潜在的开发者信息或其他有用的元数据,结果如图5所示。
图5:strings命令提取脱壳后RaDa.exe字符串
在CTF挑战、教学样本或“黑客竞赛”环境下,恶意代码作者可能会通过这种方式留下痕迹,以表明作品的创作者是谁。
(c)或©符号通常用于表示版权归属,因此rada恶意代码的编写作者很可能是Raul Siles和David Perez。
且字符串中提到“SotM 32 - September 2004”。在互联网采用精准搜索"sotm",找到相关网站The Honeynet Scan 32,得知StoM全称Scan of the Month,推测是隶属于Honeynet项目/组织下的一个每月活动/竞赛,在这种情况下,恶意代码作者留下名字逻辑上是自洽的。
2.2 使用IDA Pro静态或动态分析crackme样本
本模块的目标是通过IDA Pro对crackme1.exe和crackme2.exe样本进行静态或动态分析,寻找特定输入,使其能够输出成功信息。
2.2.1 静态分析crackme1.exe与crackme2.exe
2.2.1.1 crackme1.exe
先在windows命令行下对crackme1.exe进行测试,如图6所示,可见只传入1个参数时显示“Pardon?What did you say”,传入参数不为1个(0、2、3个)时,显示“I think you are missing something.”
图6:crackme1.exe命令行测试
随后,在IDA Pro中分析crackme1.exe。点击View -> Open Subviews -> Strings或使用快捷键Shift+F12打开字符串窗口。结果如图7所示:
图7:crackme1.exe字符串提取
在IDA Pro的Strings窗口中,我们可以看到几个显著的字符串信息:
- "I think you are missing something.\n"
- "I know the secret"
- "Pandon! What did you say?\n"
- "You know how to speak to programs, Mr. Reverse-Engineer\n"
显然,第1、3句都是开发者的提示或“挑衅”,在windows命令行测试中已经出现;第2句是唯一没有"\n"的;第4句很可能是输入正确的提示词。
尝试点击第2句,并按"x"进行跳转,结果控制台显示Command "JumpOpXref" failed
,尝试失败。那么我们先记下第2句和第4句在代码中的地址.rdata:00403024
及.rdata:00403054
,尽管后续没用上。
接着,点击View -> Graphs -> Function calls,查看函数调用图,如图8所示
图8:crackme1.exe函数调用图
相关函数调用中,strcmp和scanf醒目,是用来比较或读取用户输入的典型函数。
随后,查看汇编代码,如图9所示。
仔细观察逻辑及箭头发现,在loc_40102D这个节点,我们看到调用了strcmp函数。该函数将用户输入的字符串与参数"I know the secret"进行比较。所以这个条件检查是否用户输入了"I know the secret"作为密码或密钥。
紧接着有一个test eax, eax指令,eax寄存器存储的是strcmp的返回值。若eax为0(表示输入与字符串匹配),则跳转到loc_401310节点,否则执行失败路径。loc_401310节点会输出"You know how to speak to programs, Mr. Reverse-Engineer"。至此,我们可以确认这句话表示破解成功,是程序期望的“成功”信息。
其他分支都是用户输入不正确的分支,都是错误或不完全正确的提示,逻辑类似,不再赘述。
图9:crackme1.exe的代码逻辑分析
尝试将I know the secret传入crackme1.exe,结果没成功。加上引号后成功。如图10所示:
图10:crackme1.exe破解成功
2.2.1.2 crackme2.exe
步骤大同小异,仅展示关键步骤
Shift+F12打开字符串窗口,结果如图11所示:
图11:crackme2.exe字符串提取
"I know the secret"、"Pardon? What did you say?"等字符串仍然存在于crackme2.exe中,可以推测该文件的核心逻辑或验证信息可能与crackme1.exe类似,仍然需要输入一个“秘密”或“密码”来通过验证。
但多出的"I have an identity problem.\n" "crackmeplease.exe"可能意味着破解过程有其他需要考虑的因素,如身份认证等。
汇编语言与函数逻辑见图12,可见复杂了很多:
图12:crackme2.exe函数分析
在左上方的分支(loc_40103E),我们可以看到程序使用了strcmp函数,将一个字符串 "crackmeplease.exe" 与用户输入进行比较。程序可能在检查运行的文件名是否正确。用户输入的文件名需与"crackmeplease.exe"匹配,否则可能会进入错误提示路径。
程序在右上方分支(loc_40113B)再次使用了strcmp函数,将字符串 "I know the secret" 与用户输入进行比较。这里就与crackme1.exe的逻辑类似了,不再赘述。
所以我们很可能需要先把crackme2.exe的文件名修改为crackmeplease.exe,随后步骤与破解crackme1.exe一样。按照这样的操作进行后,结果如图13所示,成功了:
图13:crackme2.exe破解成功
2.3 分析一个自制恶意代码样本rada,并撰写报告,回答问题
2.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
2.3.1.1 RaDa.exe的摘要值
使用以下命令获取RaDa.exe的摘要,结果如图14所示:
md5sum RaDa.exe
sha256sum RaDa.exe
图14:RaDa.exe文件摘要
可见RaDa.exe的MD5摘要为:caaa6985a43225a0b3add54f44a0d4c7
SHA-256摘要为:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
2.3.1.2 获取文件的大小和编译时间戳
编译时间戳可帮助判断恶意代码的生成时间。
使用以下命令,结果如图15所示:
exiftool RaDa.exe | grep "Time Stamp"
图15:RaDa.exe编译时间戳
使用exiftool获取的编译时间戳显示这个文件可能是在2004年10月30日编译的,可能是一个较老的恶意代码样本。
2.3.1.3 文件格式与运行平台
使用的命令为
file RaDa.exe
文件是32位PE格式,适用于Windows平台。
详见2.1.1.1中的图1及分析
2.3.2 找出并解释这个二进制文件的目的;
先说结论,这是一个简单的后门,其目的是提供控制远程计算机的方法。
具体来说,该恶意软件专为安装在内部网络上而设计。安装后,恶意软件会连接到一个网络服务器,从那里获取指令。它只需要Internet Explorer和网络连接即可运行。该软件设计利用Internet Explorer发送HTTP请求。因此,如果 Internet Explorer 能连接到外部网络,RaDa 也能连接到外部网络。
详细分析见网站1、网站2
分析过程如下:
由于RaDa.exe来自老师,一般是可信任的,不妨以身试险,运行RaDa.exe文件,结果如图16所示。
当然,运行恶意软件通常是应该尽量避免的分析技术。我们只有在了解它的预期行为且确保能够控制它时才应该运行样本。并且如果运行,也需要在隔离网络中。
图16:运行RaDa.exe的结果
虽然有error、denied等字样,好像程序没有成功运行,但事实真的如此吗?
不妨看看C盘内,多出了一个RaDa文件夹,下辖bin、tmp两个文件夹,其中bin中含有RaDa.exe文件。
先前已经使用了命令strings RaDa.exe > strings_output.txt
将其信息写入文件,结合该信息及2.3.1的信息分析:
- 首先注意到时间戳,2004年10月30日。这个时间看似无足轻重,但仔细一想已经距今二十年了。这意味着,RaDa.exe可能非常古老,使用的技术应该较为简单直接,如注册表实现自启动、记录用户键盘输入等;目的往往是信息窃取、键盘记录、系统持久化等直接目的。当然,不能就此草率地下定论
- 从字符串中多次出现的Form1、Module1、Label等字样可推断出,该文件极有可能是使用Visual Basic编写的程序。尤其是在提取字符串中还出现了MSVBVM60.DLL(而不是标准 C 库 MSVCRT0.DLL)这种VB6.0的运行时库。笔者高中学的语言也是VB,作为很多大学非计算机师范专业里流行的编程语言,VB以其图形化界面、学习成本低的优势,受许多缺乏正规学习渠道的自学者的喜爱,是开发病毒的常客,因此一些VB软件容易被杀毒软件误杀,嫌疑很大。当然,同样不能就此草率地下结论。
- 进一步分析字符串"Command_instal"可以发现,程序中可能包含安装指令或用于持久化的代码。一般来说,“安装”功能在恶意软件中通常用于复制自身、修改系统设置或将自身添加到系统自启动项,以便在系统重启后继续运行。从这一字符串出现的位置和命名风格推测,RaDa.exe可能会尝试在受害者的系统中持久化安装自身,以确保其能在系统重启后继续保持活跃状态。而先前的以身试险也验证了这一说法。
- 此外,字符串中出现了"keyb",这一命名说明该恶意软件可能具备记录键盘输入的功能,可以捕获用户输入的信息,如用户名、密码和其他敏感数据。结合动态加载函数LoadLibraryA和GetProcAddress,RaDa.exe可能会在运行时加载额外的功能模块,动态调用与键盘记录或数据监控相关的API,达成只在特定条件下触发的目的,来逃避静态分析。
- 从"ExitProcess"可以推测,RaDa.exe在完成恶意操作后可能会自行终止,以减少其驻留在系统中的痕迹,实现反检测,减少被用户或安全软件发现的风险。
- "*#~t"、"RmR].G^"等乱码可能是混淆技术,或是代码中的噪声数据,旨在增加分析难度,防止被简单的字符串搜索工具识别出特定功能。
目前,RaDa.exe可以被认为是一种键盘记录型木马程序,旨在通过窃取信息和在系统中持久驻留,完成恶意活动。
在IDA Pro中分析unpacked后的RaDa.exe文件。我们可以重点关注函数sub_404FB0,如图17所示。
图17:RaDa.exe的sub_404FB0函数
该函数特别显眼,因为它引用了HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
这是 Windows 注册表中的一个键,经常被恶意软件用于确保每次计算机重启时自动启动该恶意软件。所有列在此键下的程序会在系统启动时被 Windows 启动。
2.3.3 识别并说明这个二进制文件所具有的不同特性;
-
持久化驻留特性
RaDa.exe在首次运行时会创建自定义目录C:\RaDa\bin和C:\RaDa\tmp,并将自身复制到C:\RaDa\bin\RaDa.exe,同时在注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下添加自启动项,使其在系统重启后依然自动启动,从而确保其在系统中长期驻留。 -
命令与控制(C2)通信特性
RaDa.exe通过HTTP协议与远程服务器通信,默认每60秒请求一次指定的URL(http://10.10.10.10/RaDa/RaDa_commands.html ),以获取并解析HTML表单中的命令(如screenshot、exe等),从而实现远程控制功能。 -
反虚拟化与反分析特性
RaDa.exe使用UPX加壳,并通过修改节区名称(如将“UPX”改为“JDR”)隐藏UPX痕迹,此外还检测虚拟机注册表项(HKLM\Software\VMware, Inc.\VMware Tools\InstallPath)和特定MAC地址,以识别是否在虚拟机环境中运行,从而增加逆向工程和检测的难度。 -
灵活配置特性
RaDa.exe支持多种命令行参数(--server、--installdir、--uninstall等),这些参数允许攻击者动态配置其行为和运行环境,例如通过--server指定命令服务器地址,通过--uninstall删除自启动项并卸载程序,从而提升其灵活性和适应性。 -
信息收集与数据传输特性
RaDa.exe具备文件上传和下载功能,通过命令文件中的get和put指令从服务器下载文件或上传到服务器,并通过screenshot命令截取受害者的屏幕内容并保存到本地,再通过HTTP上传到远程服务器,用于窃取和传输受害者的敏感数据。
2.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
-
加壳与混淆技术
RaDa.exe使用了UPX加壳技术来压缩和保护代码,并且在加壳后手动修改了标识符,将UPX的节区名称改为“JDR”(取自开发者的首字母),并覆盖了UPX文件签名。这种方式既可以减小文件体积,又增加了静态分析难度,使得未解压的代码无法直接在逆向工程工具中查看。 -
自定义解压代码技术
由于UPX加壳文件被修改,标准的UPX解压工具无法直接解压RaDa.exe。在解压时,恶意代码自带解压逻辑,会将压缩的数据段解压到内存中,执行后跳转到解压后的代码入口。这种方式要求分析者使用动态调试工具手动跟踪解压过程,增加了逆向工程的复杂性。 -
虚拟机检测技术
RaDa.exe在运行时检查系统中是否存在VMware相关的注册表项(HKLM\Software\VMware, Inc.\VMware Tools\InstallPath)和特定MAC地址,以确定自己是否在虚拟机环境中执行。如果检测到虚拟机,某些功能会禁用,例如--authors命令行参数将返回错误,这一机制旨在规避在虚拟机沙箱中的检测。 -
误导性字符串技术
在代码中,RaDa.exe插入了诸如“Smurf攻击”等误导性字符串,这些字符串并未实际使用,而是通过简单的字符串操作进行加载,目的是在逆向工程时混淆分析人员的判断。这种混淆技术通过增加伪装信息来扰乱分析过程,延长分析时间。 -
动态API调用技术
RaDa.exe在运行时通过LoadLibraryA和GetProcAddress动态加载关键API(如网络通信和文件操作API),这使得静态分析工具难以直接识别API调用关系。动态加载API不仅可以规避静态检测,还能根据不同环境调整调用的API,从而提高对抗分析的隐蔽性。
2.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
分类:远程控制型木马
理由:其主要目的是在受感染计算机上隐藏运行并接受远程控制命令。它不具备自我复制功能,因此不符合病毒或蠕虫的定义。相反,它能通过HTTP协议与远程服务器通信,能够下载、执行命令、上传文件及截屏,这些特性均符合木马程序用于远程监控和数据窃取的典型特征。
2.3.6 给出过去已有的具有相似功能的其他工具;
冰河(IceSword)、灰鸽子(Gray Pigeon)、网络神偷
2.3.7 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可能,除了上文找到的"(c)"后面写着作者(如图5所示),还可以在windows命令行下使用以下命令找到作者,结果如图18所示
[RaDa.exe的路径]>RaDa.exe --authors
图18:RaDa.exe作者信息
2.3.8 给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
-
基于注册表持久化特征的检测
RaDa.exe在受感染系统中创建的注册表启动项可用于检测其持久化行为。恶意软件通过在注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下添加自启动项,将自身设置为系统启动时自动运行。检测此持久化特征时,可以使用Windows注册表编辑器(regedit)手动检查该路径,或使用Autoruns工具进行全盘扫描,快速识别所有自启动项并过滤不明项。由于注册表启动项是恶意软件常用的持久化手段,监控这些项的变动是识别并追踪系统中恶意软件的可靠方式之一。 -
基于文件系统特征的检测
RaDa.exe安装后会在受感染系统的C:\RaDa\路径下创建文件夹和文件,包括C:\RaDa\bin\和C:\RaDa\tmp\目录及自身的副本RaDa.exe。此特征可以通过文件系统扫描进行识别,文件监控工具(如FileMon)可用于实时捕捉这些目录和文件的创建。另一种方式是编写脚本,定期扫描系统中存在的文件目录结构,检查是否存在这些特定文件路径和文件名。文件系统的特征检测适用于分析恶意软件的自我复制行为,有助于在初期发现感染痕迹。 -
基于网络流量特征的检测
RaDa.exe的网络通信行为也为其提供了一个显著的检测途径。该恶意软件通过HTTP协议定时访问远程C2服务器(通常每60秒请求一次命令文件,如RaDa_commands.html),并通过特定URL和内容进行数据交换。使用Wireshark等网络流量分析工具可以实时捕获并分析HTTP请求,筛选出指向指定文件名RaDa_commands.html或包含诸如get、put等特征命令的流量;此外,可以通过Snort创建检测规则,捕获所有与RaDa_commands.html相关的流量。此方法特别适用于检测RaDa.exe的网络通信过程,能够实时监控其与外部服务器的交互。 -
基于进程行为的检测
RaDa.exe在执行期间会通过特定API(如LoadLibraryA、InternetConnect等)进行动态加载和网络操作,这些行为特征可用于进程监控检测。Process Monitor等进程监控工具可以实时记录RaDa.exe进程的API调用及其网络连接行为,帮助识别该进程执行了异常的文件、网络访问。对于怀疑感染的系统,监控RaDa.exe的进程行为是一种有效的检测手段,能够识别出其潜在的网络访问和文件操作,从而追踪恶意活动。 -
基于特征字符串的检测
RaDa.exe文件内的特征字符串,如“RaDa_commands.html”、“C:\RaDa\bin\RaDa.exe”以及常用DLL(如KERNEL32.DLL和MSVBVM60.DLL),提供了有效的静态检测手段。可以使用strings工具提取二进制文件中的字符串,并搜索这些特征内容。此外,还可以基于YARA创建规则,匹配这些字符串组合,快速在文件系统中扫描是否存在包含特征字符串的文件。特征字符串检测方法适用于批量文件扫描和恶意样本的识别,有助于在系统中定位并确认恶意软件样本的存在。
2.4 取证分析实践:Windows 2000系统被攻破并加入僵尸网络
2.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送什么消息?IRC一般使用哪些TCP端口?
IRC是什么:全称Internet Relay Chat,是一种用于实时文本通信的协议,通常用于群聊和私人消息。
加入时发送的消息:会发送NICK命令设置昵称和USER命令提供用户信息。
常用TCP端口:TCP端口6667,但也可使用6660-6669和7000等其他端口。
2.4.2 僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络什么:是由大量被恶意软件感染并被远程控制的计算机组成的网络。
僵尸网络通常用于:发起DDoS攻击、发送垃圾邮件、窃取数据或执行其他恶意活动。
2.4.3 蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
在linux自带的wireshark下,设置筛选条件如下,部分结果如图19所示:
ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
图19:蜜罐主机与IRC服务器的通信
将流量包按Destination排序后易知,通信的服务器有:
209.126.161.29
209.196.44.172
217.199.175.10
63.241.174.144
66.33.65.58
2.4.4 在这段观察期间,有多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
使用以下指令安装软件tcpflower
apt-get install tcpflow
使用以下指令对botnet_pcap_file.dat文件中IP为209.196.44.172的和端口为6667的流量进行定向筛选,结果如图20所示:
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
图20:tcpflow筛选IRC通信文件
可见桌面上多出3个文件。
生成的文件通常以 <source_ip><source_port>-<destination_ip><destination_port> 格式命名,例如:172.016.134.191.01152-209.196.044.172.06667
和209.196.044.172.06667-172.016.134.191.01152
还有个文件则是report.xml
其中,前两个文件记录了蜜罐主机与 209.196.44.172 服务器在端口 6667 上的通信流量,方向分别为:
- 172.016.134.191.01152-209.196.044.172.06667:蜜罐主机发送到 IRC 服务器的流量
- 209.196.044.172.06667-172.016.134.191.01152:IRC 服务器发送到蜜罐主机的流量
使用以下命令即可直接查看有多少不同的主机访问了以209.196.44.172为服务器的僵尸网络,结果如图21所示:
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
图21:统计访问僵尸网络的不同主机数量
可见,共有3461台不同主机访问。
2.4.5 哪些IP地址被用于攻击蜜罐主机?
使用以下命令将攻击蜜罐主机的ip筛选并保存到txt中,部分结果如图22所示。
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 > 20222409wqb.txt;wc -l 20222409wqb.txt
图22:筛选攻击蜜罐主机的IP地址
经检查,txt中的IP都是不同的,可见共有165个IP被用于攻击蜜罐主机。
由于题目问的是哪些,而不是多少个,所以有必要将这些IP罗列出来。点击下方查看详细情况。
点击查看详细IP
12.252.61.161
12.253.142.87
12.83.147.97
128.242.214.10
129.116.182.239
141.149.155.249
141.85.37.78
144.134.109.25
148.235.82.146
162.33.189.252
164.125.76.48
168.226.98.61
168.243.103.205
169.254.205.177
172.168.0.154
192.130.71.66
192.215.160.106
194.192.187.194
194.199.201.9
194.68.68.12
194.68.68.39
195.36.247.77
195.67.251.197
198.49.161.200
200.135.228.10
200.50.124.2
200.60.202.74
200.66.98.107
200.74.26.73
200.78.103.67
202.63.162.34
203.106.55.12
203.115.96.146
203.170.177.8
204.50.186.37
205.180.159.35
205.188.137.80
206.149.148.192
206.151.167.254
207.172.16.150
207.172.16.156
207.46.196.108
207.46.196.120
207.6.77.235
207.68.171.238
207.68.171.245
207.68.176.250
207.68.183.190
207.68.184.62
208.186.61.2
209.196.44.172
209.45.125.110
209.45.125.69
210.111.56.66
210.12.211.121
210.203.189.77
210.214.49.227
210.22.204.101
210.58.0.25
211.149.57.197
212.110.30.110
212.122.20.74
212.162.165.18
212.243.23.179
213.107.105.72
213.116.166.126
213.122.77.74
213.170.56.83
213.217.55.243
213.23.49.158
213.44.104.92
213.66.244.241
213.7.60.57
213.84.75.42
216.154.242.126
216.170.214.226
216.192.145.21
216.228.8.158
216.229.73.11
216.239.33.101
216.239.51.100
216.239.57.100
217.1.35.169
217.140.0.47
217.151.192.226
217.151.192.231
217.199.175.10
217.222.201.82
217.227.245.101
217.227.98.82
217.35.65.9
218.163.9.89
218.237.70.119
218.244.66.32
218.25.147.83
218.4.48.74
218.4.65.115
218.4.87.137
218.4.99.237
218.87.178.167
218.92.13.142
219.118.31.42
219.145.211.132
219.145.211.3
219.65.37.37
219.94.46.57
24.107.117.237
24.161.196.103
24.167.221.106
24.197.194.106
24.74.199.104
4.33.244.44
4.64.221.42
61.11.11.54
61.111.101.78
61.132.88.50
61.132.88.90
61.134.45.19
61.14.66.92
61.140.149.137
61.150.120.72
61.150.72.7
61.155.126.150
61.177.154.228
61.177.56.98
61.177.62.66
61.185.212.166
61.185.215.42
61.185.242.190
61.185.29.9
61.203.104.148
61.55.71.169
61.8.1.64
62.127.38.198
62.150.170.134
62.150.170.232
62.194.4.114
62.201.96.159
62.251.129.118
63.241.174.144
64.0.96.9
64.17.250.240
64.254.203.68
65.57.83.13
66.139.10.15
66.190.67.122
66.233.4.225
66.73.160.240
66.8.163.125
66.81.131.17
66.92.135.108
67.201.75.38
67.81.161.166
68.115.33.110
68.152.53.138
68.154.11.82
68.169.174.108
68.37.54.69
68.45.123.130
68.84.210.227
80.181.116.202
81.114.77.37
81.202.125.5
81.50.177.167
81.57.217.208
2.4.6 攻击者尝试攻击了哪些安全漏洞?
wireshark中点击Statistics -> Protocol Hierarchy,可见使用了TCP和UDP,且99.7%使用的是TCP,0.3%使用的是UDP,如图23所示。
图23:协议分层统计
输入以下命令查看来自 172.16.134.191 的所有 TCP 流量的目标端口,筛选出 TCP 标志为 0x12 (SYN-ACK 数据包)的包,结果如图24所示:
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
图24:TCP目标端口统计
输入以下命令查看来自 172.16.134.191 的所有 UDP 流量的目标端口,结果如图25所示:
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
图25:UDP目标端口统计
由图24、图25可知,攻击者尝试攻击了以下安全漏洞
TCP 135:RPC,可能利用RPC 远程代码执行漏洞。
TCP 139:NetBIOS 文件共享,可能利用文件共享权限提升漏洞。
TCP 25:SMTP,可能尝试未授权邮件中继或暴力破解漏洞。
TCP 445:SMB,常见永恒之蓝(EternalBlue)远程代码执行漏洞。
TCP 4899:Radmin,可能利用Radmin 远程控制弱口令漏洞。
TCP 80:HTTP,可能利用SQL注入、XSS 等Web应用漏洞。
UDP 137:NetBIOS,可能尝试NetBIOS 信息泄露漏洞。
2.4.7 哪些攻击成功了?是如何成功的?
结果汇总在表1中。
端口及协议 | 是否成功(1表示成功,0表示失败) | 成功方法 |
---|---|---|
TCP 135 (RPC) | 0 | / |
TCP 139 (NetBIOS) | 0 | / |
TCP 25 (SMTP) | 0 | / |
TCP 445 (SMB) | 1 | 利用 SMB 协议漏洞 完成文件共享和目录访问。 |
TCP 4899 (Radmin) | 0 | / |
TCP 80 (HTTP) | 1 | 通过 HTTP 请求 成功访问 Web 服务器的页面内容。 |
UDP 137 (NetBIOS) | 1 | 利用 NetBIOS 信息泄露漏洞 获取局域网主机名称、域和工作组信息。 |
表1:
详情如下:
- TCP 135
在wireshark中设置筛选条件如下,结果如图26所示:
ip.addr==172.16.134.191 &&tcp.port==135
图26:TCP 135分析
是否成功:否。
原因:连接在完成三次握手后立即关闭,未见任何有效的 RPC 操作,这表明攻击者未成功利用 TCP 135 端口上的 RPC 远程代码执行漏洞。
由于筛选条件大同小异,后续就不赘述了,如图x所示也不在赘述,每个模块内的图片都对应小标题。
-
TCP 139
图27:TCP 139分析
是否成功:否。
原因:连接完成了三次握手,但随即发送了 RST(复位)包,导致会话中断,没有进一步的文件共享或目录访问操作,因此攻击未成功。 -
TCP25
图28:TCP 25分析
是否成功:否
原因:连接建立后立即被 FIN, ACK 关闭,并伴随大量 TCP Retransmission(重传)包,表明通信中断,未完成任何有效的SMTP操作。 -
TCP445
图29:TCP 445分析
是否成功:是
原因:攻击者成功建立了SMB会话,并执行了文件读取、目录枚举等操作,表明对共享资源的访问成功。
成功方法:通过TCP 445端口的SMB协议访问,利用目标主机的文件共享功能,完成了共享文件和目录的访问。 -
TCP4899
图30:TCP 4899分析
是否成功:否
原因:TCP 4899 端口上出现大量 TCP Retransmission(重传)包,表明连接未能建立,通信无法正常进行,因此攻击未成功。
6.TCP80
图31:TCP 80分析
是否成功:是
原因:多个 HTTP 请求获得了 200 OK 响应,表明 Web 服务器成功处理了这些请求。
成功方法:通过 TCP 80 端口发送 HTTP 请求,成功访问了 Web 服务器的页面内容。
- UDP 137
图32:UDP 137分析
是否成功:是
原因:蜜罐主机发送了大量 NetBIOS 名称查询请求,多个主机返回了 NBSTAT 响应,表明信息泄露成功。
成功方法:利用 UDP 137 端口的 NetBIOS 信息泄露漏洞,成功获取了局域网中其他主机的名称、域和工作组信息。
3.问题及解决方案
- 问题1:学习通提供的IDA pro无法打开,打开就报错
- 问题1解决方案:上网自行搜寻破解版
- 问题2:网上找来的版本无法打开crackme1.exe文件,一直报错无法分析非PE文件,显示要下载PRO版本,如图33所示。
图33:IDA PRO错误 - 问题2解决方案:把IDA切换到不带中文的路径下
- 问题3:crackme1.exe中,传入参数I know the secret,仍然不成功
- 问题3解决方案:加上英文引号""
- 问题4:安装tcpflow失败,如图34所示:
图34:tcpflow安装失败 - 问题4解决方案:运行以下命令更新源列表
sudo apt-get update
4.学习感悟、思考等
本次恶意代码分析与取证实践使我系统地理解了恶意代码机制、漏洞利用方式和网络流量分析方法。通过静态分析,我学会了推测代码行为与观察动态效果的技巧。在网络取证分析中,我体会到从大量数据包中识别攻击的挑战,需要扎实的协议知识和敏锐的异常捕捉能力。实验中的NetBIOS信息泄露、SMB文件共享漏洞和HTTP服务漏洞等案例让我认识到默认配置的安全隐患,以及良好配置和更新在防御中的作用。通过IDA Pro、Wireshark、tcpdump等工具的协同使用,我也深刻体会到工具链的合理选择对分析效率的提升。整体上,这次实践让我认识到网络安全是系统工程,需要结合漏洞检测、流量分析和持续监控来全面防护。未来,我希望进一步提升恶意代码分析和网络取证的能力,应对复杂的安全挑战。