1.实验内容
1.1本周所学
- IDA pro、Process Explorer、peid、超级巡警等软件的学习与使用
- PE文件、蜜罐技术、tcpdump等专业知识的学习
- 对于wireshark的抓包的深入分析
1.2实验环境
- 主机
- kali虚拟机
- 安装winXP虚拟机
实现xp与主机的ping通,参照:关闭xp虚拟机防火墙
1.3实践内容
1.恶意代码文件类型标识、脱壳与字符串提取。
- 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
- 使用Process Explorer、IDA pro等脱壳软件,对rada恶意代码样本进行脱壳处理;
- 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁。
2.使用IDA Pro静态或动态分析crackme1.exe与crackeme2.exe,寻找特定输入,使其能够输出成功信息。
3.分析一个自制恶意代码样本rada,并回答问题(问题详见实验过程)。
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
2.1.1查看文件格式与运行平台
将下载的rada.rar文件解压,密码:rada
完成解压后传入kali虚拟机中,输入file RaDa.exe
查看RaDa.exe的文件格式
2.1.2查看加壳工具
在Windows主机中用PEiD工具查看RaDa.exe的信息
- 由图中可得文件的入口点、EP段、文件偏移、首字节、连接器版本、子系统等信息,同时可发现其为UPX加壳(压缩壳)所得。
PE文件:全称是Portable Executable,意为可移植的可执行的文件。常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)
2.1.3对rada恶意代码样本进行脱壳处理
用PEiD的通用脱壳器(如下图)对RaDa.exe进行脱壳(超级巡警也可以),得RaDa.exe.unpacked.exe。
脱壳之后如图所示:
2.1.4使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者
①kali中用strings命令分析
用kali的'strings'命令查看RaDa.exe和RaDa.exe.unpacked.exe
strings RaDa.exe
由于内容太多没有截完整
strings rada_dump_.exe
由于内容太多没有截完整
可以看出,两个exe文件全为乱码,因为文件已加壳
导入RaDa.exe.unpacked,进行strings命令处理
如上三张图为脱壳后strings得的部分内容,可见很多乱码信息已变为有效信息。
②用Process Explorer分析RaDa.exe.unpacked.exe
发现找不到该exe文件(已关闭防病毒实时保护,应该不是被杀掉的原因)
③用IDA pro分析RaDa.exe.unpacked.exe
点击 视图(view)-->打开子视图(Open subviews)-->字符串(Strings)
④用IDA pro继续分析
查看strings模块如下
可以看出,与在kali中'strings'查看所得一致,为四句话,看起来像是连贯的对话.
猜测“I know the secret”是关键参数,而第四句为相应的回答。
接着
用Function calls查看函数调用过程(选择IDA View-A→点击View→选Graphs→选Function calls)
由图中看到Startup→_CRTstartup→main→strcmp、fprintf、printf这一过程,字符串对比和输出,可以猜测与前面的四句话有关。因此,可以具体查看main这个函数。
查看main函数,如下
⑤进行验证
2.2.2分析crackme2.exe
用相同的方法分析crackme2.exe
①在kali中用'file'指令查看crackme2.exe,如下
file crackme2.exe
②用IDA pro继续分析
查看strings模块如下
用Function calls查看函数调用过程
通过观察发现和crackme1.exe很类似,关键还是要分析main函数。
双击Function中的main函数,点击 View ->Graphs->Flow chart
查看main函数的具体调用图,如下
分析后通过分析能发现
一是判断命令行参数个数是否为2→若是,则进入第二个判断;若否,则输出I think you are missing something.
二是判断运行的程序名称是否为crackplease.exe→若是,则进入第三个判断;若否,则输出I have an identity problem.
三是判断命令行第二个参数是否为"I know the secret"→若是,则输出We have a little secret: Chocolate;若否,则输出Pardon? What did you say?
③进行验证
运行crackme2.exe和crackmeplease.exe(复制crackme2.exe并重命名为crackmeplease.exe)
2.3分析一个自制恶意代码样本rada,并回答问题
2.3.1提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
找一个在线转换哈希值的网站对RaDa.exe进行摘要,如下
2.3.2找出并解释这个二进制文件的目的
①用Process Explorer分析RaDa.exe脱壳后的程序的运行进程(分析脱壳前的strings均为乱码),被秒杀了
使用超级巡警
首先将Process Explorer、超级巡警和rada.exe准备好
②进行脱壳
③打开RaDa_unpacked.exe并选择strings模块进行分析,如下
分析结果:
- 有 http://10.10.10.10/RaDa 和 RaDa_commands.html ,猜测可能会跳转到该网页。
- 有download.cgi和upload.cgi文件,以及新创建的C:\RaDa\tmp和C:\RaDa\bin路径,猜测可进行上传下载操作,并存到C盘中。
经检验,运行RaDa.exe后,确实在C盘生成了对应的文件
CGI,全称为“通用网关接口”(Common Gateway Interface),是一种在Web服务器和应用程序之间通信的标准接口协议。
-
请求传递:当Web浏览器发送HTTP请求到Web服务器时,Web服务器会解析该请求,并根据请求的内容将其传递给相应的CGI程序。
-
程序执行:CGI程序接收到请求后,会执行相应的操作,如读取数据库、处理表单数据等。
-
结果返回:CGI程序处理完数据后,将结果通过标准输出返回给Web服务器。Web服务器再将结果封装成HTTP响应,发送回Web浏览器。
出现的问题: -
脚本注入:CGI 脚本通常接收用户输入数据,并将其用于生成动态内容。如果未正确验证和过滤用户输入,攻击者可以通过向输入中注入恶意代码来执行远程命令或执行其他危险操作。
-
跨站脚本攻击(XSS):如果 CGI 脚本在生成动态内容时未正确转义或过滤用户输入,攻击者可以通过注入恶意脚本来在用户的浏览器上执行恶意操作,如窃取用户信息、篡改网页内容等。
-
文件包含漏洞:如果 CGI 脚本在处理文件路径时未正确验证和过滤用户提供的文件名或路径,攻击者可以通过构造特定的请求来读取或执行系统上的任意文件。
-
拒绝服务攻击(DoS):攻击者可以通过发送大量的请求来占用服务器资源,从而导致服务器无法正常处理其他请求,最终造成拒绝服务。
-
文件上传漏洞:如果 CGI 脚本处理文件上传时未正确验证和限制文件类型、大小等属性,攻击者可以上传恶意文件并执行任意代码。
接着分析 HKLM\Software\Microsoft\Windows\CurrentVersion\Run、REG_SZ、Regwrite、Regread、Regdelete等:
"Run" 是 Windows 注册表中一个特定的键路径,它扮演着系统启动时自动运行程序配置信息的存储角色。这个路径下,你可以添加包含程序路径的项目,确保在系统引导至桌面环境后,这些程序能够自动执行。
具体来说,"Run" 键分为两大类:
常规 Run 键:
位置:HKLM\Software\Microsoft\Windows\CurrentVersion\Run
功能:这个键用于存储每次系统启动时都会自动运行的程序信息。这些程序会在用户登录系统后静默启动,并在后台运行。常见的应用场景包括防病毒软件、音频驱动程序、即时通讯工具等,它们都可以在这个键下配置以实现自动启动。
RunOnce 键:
位置:HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
功能:与常规 Run 键不同,RunOnce 键用于存储仅在下一次系统启动时运行一次的程序信息。这些程序执行完毕后,会自动从注册表中移除。RunOnce 键通常用于执行一次性任务,例如安装程序的自动安装流程、系统修复工具的启动等。
这些注册表键为系统管理员和开发人员提供了一种便捷的方式,用于配置系统启动时自动运行的程序,从而无需用户手动干预。然而,在添加程序配置信息时,务必确保只添加可信赖的程序,避免引入恶意软件或不必要的启动项,以维护系统的性能和安全性。值得注意的是,"Run" 键有时会被恶意软件利用来执行未授权的操作。
此外,Windows 注册表还涉及一些关键的数据类型和操作,包括:
REG_SZ:这是一种数据类型,用于表示字符串值。在注册表中,REG_SZ 常用于存储文本形式的配置信息,如文件路径、命令行参数等。
RegWrite:这是向注册表写入数据的操作。通过 RegWrite,可以将指定的键和值写入到指定的注册表路径中,并保存下来。
RegRead:这是从注册表读取数据的操作。通过 RegRead,可以从指定的注册表路径中读取指定键的值,并将其返回给程序使用。
RegDelete:这是从注册表中删除指定键的操作。通过 RegDelete,可以删除注册表路径下的指定键及其相关值。
这些操作使得程序能够动态地管理注册表中的配置信息,从而实现更灵活的系统管理和配置。
- “Starting DDos Smurf remote attack...”----开始进行 DDoS Smurf 远程攻击即DDoS(分布式拒绝服务)攻击
- 有三个私有网段:
http://192.168.:http://192.168.0.0 - http://192.168.255.255:
http://172.16.:http://172.16.0.0 - http://172.31.255.255:
http://10.:http://10.0.0.0 - http://10.255.255.255:
* 有get、put、screenshot、sleep等信息,猜测有获取(获取)数据、上传(放置)数据、使主机截屏、暂停程序等功能
* 有“--help”“--authors”“--gui”等带“--”的指令参数的字符串,猜测是运行RaDa.exe时可带的指令参数,如下图所示:
具体验证如下:
RaDa.exe --gui
RaDa.exe --help
RaDa.exe --authors
可通过带参数实现多种功能
④用IDA pro查看三个私有网段相关信息--直接在主机中做,IDA没找到32位的
查看4052c0函数如下:
可发现,流程为判断目标主机的IP地址是否在私有网段内,若是,则访问" http://10.10.10.10/RaDa ",并进行之后的操作
2.3.3识别并说明这个二进制文件所具有的不同特性
* 1.该文件被运行后,会在主机C盘自动创建文件夹,修改注册表,添加自启动项
* 2.该文件被运行后,可执行put、get、screenshot、sleep等命令
* 3.该文件被运行后,将请求连接 http://10.10.10.10/ 网页,获得来自攻击者的指令
* 4.该文件被运行后,会发起DDoS Smurf攻击
2.3.4识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
文件使用UPX加壳
2.3.5对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
* 1.该程序不能进行自我复制和自我传播,所以非病毒或蠕虫
* 2.该程序未伪装成正常软件,隐藏其恶意目标,欺骗用户安装执行,所以并非木马
* 3.该程序可以通过在目的主机上执行来获取目的主机的Shell,所以该程序可能是后门程序
2.3.6给出过去已有的具有相似功能的其他工具
后门实验中生成的backdoor文件可实现反弹连接,从而实现获取目标主机的shell、截图等目的。
2.3.7可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
在Windows系统下,cmd命令行执行'RaDa.exe --authors'即可。
![](/i/l/?n=24&i=blog/3532222/202411/3532222-20241107094627418-537328997.png)
2.4取证分析实践:Windows 2000系统被攻破并加入僵尸网络
问题回答
IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用哪些TCP端口?
-
IRC是一种基于客户端-服务器模型的即时通讯协议,允许用户通过互联网进行实时文本交流。在IRC中,所有用户可以在一个被称为“Channel”(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),以便在聊天时进行身份识别。
-
当IRC客户端申请加入一个IRC网络时,它会发送一个特定的消息或命令给IRC服务器,以请求加入某个频道或进行其他操作。这个消息或命令的具体格式和内容取决于IRC客户端的实现和IRC服务器的要求。通常,这个过程涉及客户端与服务器之间的握手和身份验证等步骤。然而,具体的消息内容并不是固定的,而是根据IRC协议的规定和客户端、服务器的实现来确定的
-
IRC通常使用TCP协议进行通信,并通过特定的端口进行连接。根据IRC协议的规定,默认的IRC端口通常是6667。然而,在实际应用中,由于网络环境的多样性和安全性考虑,IRC服务器可能会使用其他端口进行通信。因此,在连接IRC服务器时,需要根据服务器的具体配置来确定使用的端口号。
僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络(Botnet)是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
2.僵尸网络被网络犯罪分子和黑客广泛用于各种恶意活动:
①分布式拒绝服务(DDoS)攻击:
僵尸网络可以为DDoS攻击提供所需的“火力”带宽和计算机资源。
攻击者可以通过控制大量僵尸计算机同时向目标服务器发送大量请求,耗尽其系统资源,导致目标服务器无法处理合法用户的请求。
②窃取敏感信息:
僵尸网络中的计算机可以被用来窃取用户的敏感信息,如银行账户密码、社会安全号码等。
这些信息可以被黑客用于非法活动,如金融诈骗、身份盗窃等。
③发送垃圾邮件:
僵尸网络可以被用来发送大量垃圾邮件,给网络用户带来不必要的困扰。
这些垃圾邮件通常包含恶意链接或附件,诱导用户点击或下载恶意软件。
④网络钓鱼攻击:
僵尸网络可以被用来实施网络钓鱼攻击,通过伪造网站或发送虚假邮件来诱骗用户输入个人信息。
一旦用户上钩,他们的个人信息就可能被黑客窃取。
⑤其他恶意活动:
除了上述用途外,僵尸网络还可以被用来实施其他多种恶意活动,如搜索引擎作弊、广告点击欺诈、传播恶意软件和广告软件等。
蜜罐主机与哪些IRC服务器进行了通信?
用Wireshark(kali中本身就有不需要下载)打开数据源botnet_pcap_file.dat,设置过滤条件“ip.src == 172.16.134.191 && tcp.dstport == 6667 || (tcp.dstport <=6669 && tcp.dstport >=6660)”,过滤出与蜜罐主机通信的IRC服务器。
蜜罐主机IP为172.16.134.191;IRC通信,故过滤目的端口为6667或6660-6669。
可以用Wireshark的统计(在菜单栏上选择“统计”)功能,筛选出需要的IRC主机,结果如下
![](/i/l/?n=24&i=blog/3532222/202411/3532222-20241107095312378-773628155.png)
* 共有5个IRC服务器,其IP地址分别为66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172、209.126.161.29
* 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
对抓到的数据流包进行分流
tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
locate report.xml
查看xml文件路径
能看到生成了一个report.xml文件
使用命令获得访问以209.196.44.172为服务器的僵尸网络的主机数(在生成6个文件的目录中输入命令)
cat 209.196.044.172.06667-172.016.134.191.01152 | grep --text "^: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
能看到有3461个主机
哪些IP地址被用于攻击蜜罐主机?
用tcpdump指令查找与蜜罐主机进行通信的IRC服务器,具体命令如下:
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 > ipaddr.txt;wc -l ipaddr.txt
共有165个IP地址
攻击者尝试攻击了那些安全漏洞?
通过snort查看攻击者扫描了哪些TCP和UDP端口,且这些端口是开放的、响应的。
命令如下:
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 //对TCP进行筛选 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//对UDP进行筛选
tcp有135、139、25、445、4899、80端口,udp有137端口
接着对以上筛选出的各端口用wireshark进行抓包分析。
'tcp.dstport == 135 && ip.dst == 172.16.134.191'筛选如下
'tcp.dstport == 25 && ip.dst == 172.16.134.191'筛选如下
25端口和135端口仅进行了TCP三次握手,猜测用于测试端口开放情况
'tcp.dstport == 80 && ip.dst == 172.16.134.191 and http'筛选如下
24.197.194.106发起多次链接,攻击IIS服务器的漏洞
--IIS4.0中包含一个有趣的特征就是允许远程用户攻击WEB服务器上的用户帐号,就是你的WEB服务器是通过NAT来转换地址的,还可以被攻击。每个IIS4.0安装的时候建立一个虚拟目录/iisadmpwd,这个目录包含多个.htr文件,匿名用户允许访问这些文件,这些文件刚好没有规定只限制在loopback addr(127.0.0.1),请求这些文件就跳出对话框让你通过WEB来修改用户的帐号和密码。
如上图,攻击者向蜜罐主机一大串“C”的信息,说明了攻击者对蜜罐主机通过80端口发起了缓冲区溢出攻击。
用'tcp.srcport == 80 && ip.src== 172.16.134.191 && http'筛选蜜罐主机通过80端口向外发的包,如下:
由上图可见,蜜罐主机均以IIS服务器的默认页面作为回应,因此80端口的攻击失败
'tcp.dstport == 139 && ip.dst == 172.16.134.191'筛选如下
无数据交流
'tcp.dstport == 445 && ip.dst == 172.16.134.191'筛选如下
Windows的svcctl MSRPC接口用于同SCM(服务控制管理器)通讯。svcctl漏洞允许匿名用户连接到SCM,然后就可以枚举所安装的或正在运行的服务。攻击者可以利用这个漏洞匿名启动或中止Windows服务,具体取决于保护服务的安全描述符。
当攻击者在客户端执行psexec.exe时,这一行为标志着攻击过程的开始。随后,若远程服务器成功进行身份验证,攻击者会将一个名为psexesvc.exe的服务端程序上传到服务器的ADMIN$目录中,并将其作为一个服务来运行。这一服务负责在远程系统上执行攻击者指定的命令或启动相应的进程。
在命令执行完毕后,为了掩盖攻击痕迹,攻击者会确保删除之前上传的psexesvc.exe文件以及相应的服务。这样一来,即使系统管理员事后进行审查,也可能难以发现攻击行为的存在。
为了追踪和识别这类攻击,安全分析人员需要对客户端和服务端的事件日志、注册表以及文件系统进行详细的分析。通过检查客户端主机的日志信息,分析人员可以获取到连接的目的主机地址、连接时间等关键信息。同时,通过分析服务端主机的日志,则可以了解到连接发起方的客户端信息以及连接的具体时间。
这些分析工作对于揭示攻击路径、追踪攻击者以及后续的安全防护工作都具有重要的意义。因此,企业和组织应当加强对此类攻击手段的防范和监测,确保系统的安全稳定运行。
用'ip.dst==61.111.101.78'查看从蜜罐发往攻击主机的数据包
当我们发现包含“results:Acceptance”的信息以及SVCCTL相关的数据包时,这意味着攻击者可能已经利用了SVCCTL漏洞。该漏洞允许匿名用户连接到服务控制管理器(SCM),进而枚举系统上已安装或正在运行的服务。
具体来说,攻击者通过445端口向蜜罐主机发送了包含PSEXESVC.EXE的数据包。在攻击过程中,他们可能将PSEXESVC.EXE文件的路径修改为了系统目录下的一个位置,以便在远程主机上执行。一旦这一步攻击成功,攻击者就利用SVCCTL漏洞成功获取了对目标主机的控制权。
这表明攻击者已经能够绕过一些安全机制,在远程系统上执行恶意代码,并可能进一步执行其他恶意操作,如窃取数据、安装恶意软件等。因此,企业和组织需要密切关注此类攻击手段,加强安全防护措施,确保系统的安全稳定运行。
'tcp.dstport == 4899 && ip.dst == 172.16.134.191'筛选如下
4899端口是一个远程控制软件Radmin服务监听端口,由于这些控制软件功能强大,所以经常被黑客用来控制被自己控制的远程电脑。
'udp.dstport == 137 && ip.dst == 172.16.134.191'筛选如下
均为NBNS数据包
3.学习中遇到的问题及解决
问题1:IDA中分析strings时文字总是被遮盖(显示不全)
解决方案:IDA版本太老了,需要一个更高版本的IDA
问题2:command tcpflow not found
解决方案:使用指令apt install tcpflow 安装
4.实践总结
本次实验的核心任务在于运用多种工具深入剖析恶意代码,整个流程颇为复杂且步骤繁多。在实验过程中,我们遇到了两大主要挑战:
首要挑战在于对实验工具的掌握不够熟练。实验中,我们使用了IDA Pro、Process Explorer、超级巡警、PEiD等多种工具。值得注意的是,这些工具在功能上存在一定的重叠性,例如PEiD和超级巡警都具备脱壳功能,而IDA Pro、Process Explorer以及Kali自带的strings命令都可以用来查看程序文件的字符串。然而,部分工具的特定版本无法在虚拟机或主机上顺利运行,这导致我们在寻找与系统兼容的软件版本上耗费了大量时间。
其次,恶意代码的分析工作本身也极具挑战性。在实验初期,我们对恶意代码的工作原理并不清晰,需要查阅大量相关资料才能逐步理解。这一过程需要不断地观察、分析、推测和验证,同时,我们也意识到自己在不同恶意代码的特征识别、实现方法等知识点上仍需加强。
尽管如此,在实验过程中,我们得到了老师的悉心指导和已经完成实验的同学们的无私帮助,这使得我们能够克服重重困难,顺利完成实验任务。在此,我们对他们的帮助表示衷心的感谢。