20211916 2021-2022-2 《网络攻防实践》第八次实践
1.实践内容
*1.1恶意代码定义
指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
*1.2分类
计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸网络、内核套件。
-
计算机病毒
-
- 计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成 。
-
- 特性:感染性(最本质的特性 )、潜伏性 、可触发性 、破坏性 、衍生性
-
- 感染及引导机制:感染可执行文件(前缀感染机制、后缀感染机制、中间插入感染机制) 、感染引导扇区 、感染数据文件-宏指令
-
- 传播方式:移动存储( U盘);电子邮件及其下载(邮件病毒);文件共享(SMB共享服务、NFS、 P2P)。
-
网络蠕虫
-
- 网络蠕虫是一种通过网络自主传播、自我复制的独立恶意代码。
-
- 特性:主动传播性,通常无须人为干预就能传播。
-
- 传播方式:主动攻击网络服务漏洞 、通过网络共享目录 、通过邮件传播
-
- 组成结构:蠕虫的“弹头” (渗透攻击模块);传播引擎 ( FTP/TFTP/HTTP/SMB/直接传送/单包);目标选择算法+扫描引擎(扫描策略);有效载荷(攻击负荷)
-
后门
-
- 后门是允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。
-
- 类型:本地权限提升和本地帐号;单个命令的远程执行;远程命令行解释器访问-NetCat;远程控制GUI-VNC、BO、冰河、灰鸽子;无端口后门(ICMP后门、基于Sniffer非混杂模式的后门、基于Sniffer混杂模式的后门等)。
-
木马
-
- 木马是看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
-
- 伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒。
-
僵尸程序与僵尸网络
-
- 僵尸网络是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
-
- 僵尸程序是攻击者用于一对多控制目标主机的恶意代码。
-
- 功能:主体功能包括命令与控制模块、传播模块;辅助功能包含信息窃取模块、主机控制模块、下载更新模块和防分析检测模块。
-
- 僵尸网络的工作机制:主要包含以下7步,渗透攻击、加入控制服务器、动态影射至IRC服务器、加入IRC信道、监听命令、接收命令、执行攻击。
小结:计算机病毒、蠕虫、特洛伊木马、后门和僵尸程序都包含攻击者添加至系统中的新的代码程序,都不会替换或修改受害系统的组件。而下面介绍的Rookit是技术更加高超的恶意代码形态。
- Rootkit
-
- 隐藏性的恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
-
- 分类: 用户模式、内核模式。两类Rootkit和普通的应用程序级木马后门之间的位置对比图如下:
- 1.3恶意代码分析方法
-
- 代码分析:又称程序分析,是按需求使用的一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
-
- 恶意代码分析技术的方法:
-
- 静态分析:在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程。主要技术手段:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
-
- 动态分析:通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。主要技术手段:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试。
2.实践过程
2.1 实践一 恶意代码文件类型识别、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
实验环境:winXP
在cmd中切换到恶意程序所在的目录,使用file
命令查看 RaDa.exe 的文件类型,可以看到 RaDa.exe 是一个 Windows PE 可执行文件,并且有图形化窗口:
PE32表示这是一个32位的运行在windows操作系统上的程序,GUI表示这个程序是一个有图形界面的程序,intel 80386表示处理器架构.
- 使用 PEiD 工具(可在winXPattack的开始点击查找到),查看 RaDa.exe 的基本信息
如图可以看到文件的入口点、偏移、文件类型、EP段、汇编程序以及加壳类型(UPX壳)为:UPX 0.89.6-1.02/1.05-2.90->Markus &Laszlo
- 使用超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,故可以实现自动脱壳。
- 使用strings命令,
strings RaDa.exe
和strings RaDa_unpacked.exe
分别查看脱壳前、后的RaDa.exe中可打印的字符串。若查看脱壳之前的,则是一些乱码;查看脱壳rada.exe后的文件RaDa.unpacked.exe可以发现有大量的函数调用名(如下图)。
在脱壳后的文件中并没有发现关于作者的任何信息
- 使用winxpattack里的process explorer软件,查看程序属性,找到copyright(版权)发现作者名字Raul siles&David Perze,时间2004年。
2.2 实践二 分析Crackme程序
在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
2.2.1分析crackme1.exe
- 使用file命令查看crackme1.exe的文件类型,可以看出其是32位Windows下的PE文件,没有图形界面,是命令行文件。
- 在cmd中直接运行该程序查看输出,先猜测该程序带有一个参数。
- 使用winxp自带的IDA pro工具(开始-反汇编-IDA pro free)打开crackme1.exe,选择文件类型为PE。
- 首先直接查看程序中的明文字符串,发现了两个测试程序时没有出现过的字符串“I know the secret”、“You know how to speak to programs,Mr Reverse Engineer”。猜测前者为我们需要的口令,后者为口令成功输入的反馈。
- 验证猜想,正确
- 在IDA pro工具页面的菜单处:点击view——>graphs——>function calls,查看函数调用图(Function Call)
可以得出结论:程序是用 C 语言写的,可以发现字符串比较函数 strcmp 和输出函数 fprintf 和 printf ,估计是使用 strcmp 函数来比较口令。那么关键部分就在 sub_401280 函数中。
- 打开sub_401280函数的流程图(方法:首先选中“IDA View-A ”窗口中的00401280,再通过view——>graphs——>flow chart)
cmp [ebo+arg_0],2
为判断程序是否有两个参数。如在命令行输入 crackme1.exe 1 ,那么参数对应的值为argc=2,argv={”crackme1.exe”,”1”}
。如果有两个参数,那么进行下一步判断,程序用I know the secret
对应的字符串和用户输入的口令相比较,通过比较的结果反馈口令是否正确。
2.2.2 分析crackme2.exe
- 对crackme2.exe进行分析,与上述分析步骤crackme1.exe差不多。
*file 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进行异或运算。
-
进行测试:
2.2.3 实践三 样本分析实践
分析一个自制恶意代码样本rada,并撰写报告。
-
首先使用MD5对该恶意程序进行摘要信息分析,md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。
-
打开Process Explorer软件对脱壳后的文件:RaDa_unpacked.exe进行监测,运行RaDa_unpacked.exe,断开主机网络。程序运行详细如下:
通过HTTP协议请求 10.10.10.10\RaDa\RaDa_commands.html,连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页,之后又下载和上传文件到 C:/RaDa/tmp 。
将文件 RaDa.exe 复制到了 C:\RaDa\bin 目录下,(REG-SZ:在注册表中,代表一个简单的文本字符串,最常见的一种数据类型)可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。
再往下,starting DDos smurf remote attack
,该恶意程序可能对主机实行了DDos拒绝服务攻击
- 再往下看可以发现该恶意程序对主机的注册表进行了读写和删除操作。
图中可以看到一些指令:exe
在宿主主机中执行指定的命令,get
下载,put
上传,screenshot
截屏,sleep
停止活动一段时间。
wireshark监听如下图:
可以看到受害主机(192.168.200.2)向目标主机(10.10.10.10)发送了大量数据包,但是追踪其tcp数据流并未发现任何相关信息
- 回到IDA工具查看脱壳后的文件,(进入 Strings 对话框,在Type 右键点击Setup,设置类型为 Unicode。),也可以找到作者信息
- 找到一个 IP 地址,双击定位:猜测程序被执行后访问了这个地址。
- 根据上图ip地址往下,发现得到RaDa_commands.html。寻找这个字符串对应的函数sub_404FB0,(双击sub_404FB0)进入这个函数,看黄色部分的汇编代码,得知是被拷贝到dword_40C030这个变量中。
****由上图找到dword_40C030变量对应的函数sub_4052C0 ,打开其Call Graph查看(方法与实践二里的相同,在菜单view处)。这里我们看到判断了三个网段分别为192.168.、172.16.、10.,(三个私有网段,确保服务器在私有网段中,然后到服务器去取命令文件)
回答问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7
是一个 Windows PE 可执行文件
使用了UPX加壳工具进行了加壳处理
(2)找出并解释这个二进制文件的目的。
通过上面的分析可知,连接互联网时,该恶意程序就会通过http请求连接到指定主机,进行接受攻击者指令操作,并且攻击者可以完全控制该系统,所以这应该是一个后门程序。
(3)识别并说明这个二进制文件所具有的不同特性。
该程序启动之后将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
使用了UPX加壳工具进行了加壳处理
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
猜测是后门程序,因为该恶意代码不具有自主传播模块,故不属于病毒和蠕虫,也并未进行伪装,故不是木马,并且该程序执行需攻击者远程发送指令。
(6)给出过去已有的具有相似功能的其他工具。
Bobax——2004也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,通过Process Explorer软件对脱壳后的文件:RaDa_unpacked.exe进行监测,在strings窗口发现是Raul siles和David Perze于2004年编写的。(见实践一最后)
实践四 Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chat的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理:您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。
特点是:速度非常快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
-IRC是一种公开的协议,采用TCP和SSL协议。一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。
-IRC用户通过客户端软件和服务器相连。IRC是一个分布式的客户端/服务器结构。通过连接到一个IRC服务器,我们可以访问这个服务器以及它所连接的其他服务器上的频道。IRC频道存在于一个IRC服务器上。一个频道类似于一个聊天室,频道名称必须以#符号开始,例如#irchelp。IRC机器人是一些运行在后台或者服务器上的程序,通过登陆某一个频道,分析接受到的内容并做出相应的动作。
IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。
2、僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
僵尸网络通常用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿等。同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
IRC服务器通常在6667端口监听,故只需知道蜜罐主机发出的尝试连接6667端口的数据包即可,连接时使用的是TCP三次握手。使用“ip.src == 172.16.134.191 and tcp.dstport == 6667”
过滤规则进行查找,发现蜜罐主机与5台IRC服务器进行了连接,分别是:209.126.161.29、66.33.65.58、63.241.174.144 、217.199.175.10、209.196.44.172。(如下图)
4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 使用kali环境,
sudo apt install tcpflow
- 首先使用tcpflow分流(筛选指定host与端口),命令tcpflow -r botnet_pcap—_file.dat "host 209.196.44.172 and port 6667",产生了三个文件,<209.196.044.172.06667-172.016.134.191.01152>、<172.016.134.191.01152-209.196.044.172.06667>、<report.xml>(在桌面出现)
- 先看一下report.xml文件(直接点击即可),可以看到如下图的内容,包括上述双方的ip地址,端口,mac地址,通信时间等等。
- 因为我们要找的是访问209.196.44.172的主机,故着重看一下第一个文件。在当前主机进入到IRC的频道之后,频道会将当前频道中所有的主机的信息都发送过来,我们可以从其中的数据包中计算当前频道共有多少主机。这个计算分为两部分。首先我们计算在当前主机加入IRC时刻,IRC中主机的个数。然后我们在计算截至结束嗅探的时候的不断有主机加入和退出IRC频道,我们在补充上这个过程中的主机个数。代码如下,其中的test.txt文件是复制的<209.196.044.172.06667-172.016.134.191.01152>文件,输入如下:
- 再输入:
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
5、那些IP地址被用于攻击蜜罐主机?
- 因为蜜罐的特殊性,只要是进入蜜罐的流量都应该被认为是攻击。所以首先明确被攻击的端口。使用指令
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
查找端口并输出到1.txt中,其中tcpdump -nn指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v排除指定字符串;cut -d '.' -f 10截取以'.'为分隔符的第 10 列; uniq 命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数。
如图所示,查找到148个被攻击的端口。其中cut -d是指定字段的分隔符,uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。
接着使用如下指令找出所有的可能连接的主机的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 后面做字符串的拼接。
产生了两个文件1.txt与2.txt在kali文件夹里。
6、攻击者尝试攻击了那些安全漏洞?****7、那些攻击成功了?是如何成功的?
- 攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用
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
- 将协议部分改为 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 查点。
udp.port==137
- tcp 135号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的(len=0),所以这攻击者可能是对这两个端口进行了connect扫描。
tcp.port==135 || tcp.port==25
- 然后看TCP 80端口,首先利用Wireshark进行筛选
tcp.dstport==80 && ip.dst == 172.16.134.191
,发现连接最多的就是24.197.194.106这个IP地址,他的行为就是不停用脚本攻击IIS服务器的漏洞,从而获取系统权限.因为用的脚本,所以才会有这么多记录。
- 然后是210.22.204.101访问的80端口,可以看到超多的C,可能攻击者是想通过缓冲区溢出攻击来获得一个命令行。
- 最后一个访问80端口的是218.25.147.83,看到这么多N以为是缓冲区溢出攻击,但是继续往下看会看到c:\notworm,通过百度可以发现这是一个红色代码蠕虫攻击。
- 我们通过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的几次回应均为一个iis服务器的默认页面http/1.1,所以80端口的这些攻击均失败。
tcp.srcport==80 && ip.src== 172.16.134.191 && http
- 接下来是TCP 139号端口。虽然有很多连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样这个也没有成功,这个应该是个SMB查点。
tcp.dstport==139&& ip.dst== 172.16.134.191
- 下面分析445端口。查询字符串后可以发现一个PSEXESVC.EXE字符串,同时你在Wireshark中也能找到,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。通过找出口流量,发现每个IP地址连入的连接都有响应的回应,并且返回信息中含有\PIPE\ntsvcs,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限,因此这个攻击成功的。
tcp.dstport==445&& ip.dst== 172.16.134.191
- 最后还剩一个TCP 4899端口。这个端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上传的这个软件方便控制。
3.学习中遇到的问题及解决
问题1:通过Process Explorer软件查看脱壳后的文件RaDa,未成功。
解决:RaDa.exe和RaDa_unpacked.exe注意区分!不要搞错了。
4.学习感想和体会
这周实践内容很复杂,需要耐心慢慢来。