20199121《网络攻防实践》第九周作业
前言
问题 | 回答 |
---|---|
这个作业属于那个课程 | 网络攻防实践 |
这个作业的要求在哪里 | 《网络攻防实践》第九周作业 |
学习内容 | 第九章 恶意代码安全攻防 |
1.知识点梳理与总结
恶意代码基础知识
恶意代码类型如下表:
-
计算机病毒
-
计算机病毒是一种能够自我复制的代码,通过将自 身嵌入其他程序进行感染,而感染过程通常需要人 工干预才能完成 。
-
特性:感染性(最本质的特性 )、 潜伏性 、 可触发性 、破坏性 、 衍生性
-
感染机制:感染可执行文件 、感染引导扇区 、感染数据文件-宏指令
-
传播方式:移动存储( U盘);电子邮件及其下载(邮件病毒);文件共享(SMB共享服务、NFS、 P2P)。
注:计算机病毒是需要人类帮助的,而蠕虫是主动跨越网络传播。
-
-
网络蠕虫
- 网络蠕虫是一种通过网络自主传播、自我复制的独立恶意代码。
- 特性:主动传播性
- 传播方式:主动攻击网络服务漏洞 、 通过网络共享目录 、 通过邮件传播
- 组成:蠕虫的“弹头” (渗透攻击模块);传播引擎 ( FTP/TFTP/HTTP/SMB/直接传送/单包);目标选择算法+扫描引擎(扫描策略);有效负荷(攻击负荷)
-
后门
- 后门是允许攻击者绕过系统常规安全控制机制的程序,按照攻 击者自己的意图提供通道。
- 类型:本地权限提升、本地帐号;单个命令的远程执行;远程命令行解释器访问-NetCat;远程控制GUI-VNC、BO、 冰河、灰鸽子;无端口后门( ICMP后门、基于Sniffer非混杂模式的后门、基于Sniffer混杂模式的后门)。
-
木马
- 木马是看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
- 伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒。
-
僵尸程序与僵尸网络
-
僵尸网络是攻击者传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。 僵尸程序是攻击者用于一对多控制目标主机的恶意代码 。
-
功能:主体功能包括命令与控制模块、传播模块;辅助功能包含信息窃取模块、主机控制模块、下载更新模块和防分析检测模块。
-
工作机制:渗透攻击、加入控制服务器、动态影射至IRC服务器、加入IRC信道、监听命令、接收命令、执行攻击。
-
类型:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。
-
-
Rootkit
- 隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
- 分类: 用户模式、内核模式。两类Rootkit和普通的应用程序级木马后门之间的位置对比图如下:
恶意代码分析技术
恶意代码分析与良性代码分析的区别如下图:
- 恶意代码静态分析
- 通过反病毒引擎扫描识别已知的恶意代码家族和变种名,逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。
- 主要技术手段:恶意代码扫描、文件格式识别、字符串提取、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
- 恶意代码动态分析
- 通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。
- 主要技术手段: 快照比对 、动态行为监控 、 网络监控 、 沙盒 、 动态跟踪调试 。
2.实践
2.1动手实践:恶意代码文件类型识别、脱壳与字符串提取
-
题目:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,获得rada恶意代码的编写作者。
-
实践步骤:
- 使用文件格式和类型识别工具,给出rada恶意代码样本的格式文件、运行平台和加壳工具。
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理。
- 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,确定rada恶意代码的编写作者。
实践过程
- 使用file命令查看rada的文件类型为32位操作系统下的PE文件,有图形化界面。
- 使用PEiD工具查看rada的基本信息。注:PEiD是用来查看Windows PE文件基本信息的工具。
- 可以看到文件的入口点、偏移、EP段及加壳类型(UPX壳)。怎么手动脱壳可以参考 https://www.xuepojie.com/thread-14432-1-1.html
- 使用超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,故可以实现自动脱壳。
- 使用strings命令查看脱壳后的rada.exe中可打印的字符串,可以发现有大量的函数调用名,若查看脱壳之前的,则是一些乱码。
- 运行rada程序,并使用软件
process explorer
进行监控,查看程序属性,发现作者名字Raul siles&David Perze
,写于2004年。
2.2动手实践:分析crackme程序
- 题目:给定的两个
crackme
,通过使用 IDA pro 工具或者其他调试工具,猜测出其口令,通过其测试。
实践过程
- 使用file命令查看
crackme1.exe
的文件类型,可以看出其是32位Windows下的PE文件,没有图形界面,是命令行文件。
- 在cmd中直接运行该程序查看输出,可以确定该程序带有一个参数。
- 使用IDA pro工具打开
crackme1.exe
,选择文件类型为PE。
- 首先直接查看程序中的明文字符串,发现了两个测试程序时没有出现过的字符串
I know the secret
、You know how to speak to programs,Mr Reverse Engineer
。猜测前者为我们需要的口令,后者为口令成功输入的反馈。
- 验证猜想,正确。
- 虽然已经试出来了,该分析还是要分析的,首先看函数调用图,
view——graphs——function calls
。根据上面的尝试,发现输出函数fprintf
和printf
即为程序输出,则sub_401280
即为核心函数。
- 找到
sub_401280
函数的流程图,发现该函数首先判断参数个数是否为2,若参数个数不为2,也就是我们前面尝试直接运行程序时,在crackme1.exe
及crackme1.exe 1 2
时都输出I think you are missing something
,若参数个数为2,则将第二个参数与字符串I know the secret
作比较,正确则输出You know how to programs
,与我们的猜想一致。
- 关于
crackme2.exe
的前序分析操作同crackme1.exe
,直接进入分析阶段。首先还是来看函数调用图,发现核心函数还是sub_401280
。
- 还是来看
sub_401280
的流程图,第一步同crackme1.exe
相同,也是判断参数个数是否为2,若参数个数为2,则判断第一个参数是否为crackmeplease.exe
,若是则判断第二个参数是否为I know the secret
,若参数正确,此时的操作与上一个文件不太相同。
- 着重看一下两个参数都正确了之后的输出操作, 首先对一个临时变量设置了初始值
mov [ebp+var_4], 0
,接下来[ebp+var_4]
与21h
进行比较 , 不大于则执行_putchar
输出 。判断时采用的是一个循环, 将unk_403080
中的字符逐个与0x42
进行异或运算 。
- 测试程序输出是否符合分析,get~
2.3实践作业:样本分析
- 题目:深入分析rada,回答以下问题:
1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
2)找出并解释这个二进制文件的目的。
3)识别并说明这个二进制文件所具有的不同特性。
4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
6)给出过去已有的具有相似功能的其他工具。
7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
实践过程
- 使用
md5sum
命令查看摘要信息, md5摘要值为caaa6985a43225a0b3add54f44a0d4c7
。
- 打开
process explorer
软件进行监测,启动恶意软件rada。右键查看其属性,可以发现rada启动后有如下行为:
1)通过HTTP协议请求10.10.10.10\RaDa\RaDa_commands.html
2)将文件RaDa.exe
复制到了C:\RaDa\bin
目录下
3)修改注册表,将rada
设置为开机启动。 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
即为控制计算机启动项的注册表信息, RaDa: C:\RaDa\bin\RaDa.exe
。
注:此处还有一个可疑的VMware tools,具体不知道是干什么的,待会儿用IDA详细分析。
-
上述行为结束后,该程序对主机实行了DDOS拒绝服务攻击(后来发现实际上它没有提供任何用以发动DDos攻击的子程序),可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。
-
接下来该程序对注册表进行了读写和删除操作,打开注册表查看,的确没有该程序留下的痕迹,故下图圈出来的地方应该删除注册表信息。
- rada一直在后台运行,不会弹出任何窗口,它可以支持exe、put、get、screenshot、sleep等指令。
exe:在宿主主机中执行指定的命令
put:将宿主主机中的指定文件上传到服务器
get:将服务器中的指定文件下载到宿主主机中
screenshot:截取宿主主机的屏幕并保存到tmp文件夹
sleep:停止活动一段时间
-
使用
process explorer
工具的分析就到这儿,下面开始换IDA工具,工具党从不服输~ 注:关于脱壳已经在实践2.1中介绍,这里不再赘述。 -
使用IDA打开脱壳后的程序,查看字符串,view->open subviews->string,打开后右键type->set up->修改类型为unicode。当然信息都和之前的差不多啦,着重来看一下之前提到的VMware tools在干嘛。
- 双击字符串进行定位,找到其对应的函数
sub_404FB0
。
- 在
sub_404FB0
这个函数中,这个字符串被拷贝到变量dword_40C070,寻找这个变量对应的函数,为sub_40AAA0
。
- 查看函数
sub_40AAA0
流程图,这个函数首先进行网卡配置信息的查询(Select * from win32_networkadapterconfi
),然后确认dword_40C070对应的字符是否存在,若存在(绿色线条),判断vmware tools是不是在注册表里面。
-
通过上述分析可以发现这只是作者为了防止通过参数得到作者信息的手段,事实上,
--authors
参数对应的处理函数是sub_40B010
,通过--authors
参数来验证,的确无法得到相关信息,而是提示unknown argument
。而在非VMware虚拟机上使用--authors
参数运行就可以看到这个二进制文件的作者。 -
分析结束,发现之前关于其是一个后门程序的猜想是对的,因为它不具有传播与感染的性质,也没有将自己伪装成一个有用的程序来欺骗用户运行。
-
与其相似的工具还有2004年发现的木马Bobax,还有特洛伊木马Setiri及其前辈GatSla
-
该程序的开发作者已在实践2.1中给出答案,
Raul siles&David Perze
,写于2004年。
2.3实践作业:取证分析
- 题目:一个未设置管理员密码的Windows 2000蜜罐主机,被攻击后加入了一个僵尸网络,在蜜罐主机运营期间,共发现了15164个不同主机加入了这个僵尸网络。用Snort工具收集的该蜜罐主机5天的网络流日志,并通过编辑去除了一些不相关的流量并将其 组合到了单独的一个二进制网络日志文件中,同时IP地址和一些 其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。分析这个日志文件并回答以下给出的问题。
1)IRC是什么? 当IRC客户端申请加入一个IRC网络时将发送哪个消息? IRC一般使用哪些TCP端口?
2)僵尸网络是什么? 僵尸网络通常用于什么?
3)蜜罐主机(IP地址:172.16.134.191
)与哪些IRC服务器进行了通讯?
4)在这段观察期间,多少不同的主机访问了以 209.196.44.172
为服务器的僵尸网络?
5) 哪些IP地址被用于攻击蜜罐主机?
6)攻击者尝试攻击了哪些安全漏洞?
7)哪些攻击成功了?是如何成功的?
实践过程
-
IRC介绍
-
IRC全称
Internet Relay Chat
,即因特网中继聊天。 用户使用客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器即可聊天。 -
当IRC客户端申请加入一个IRC网络时分为注册及加入两个阶段
1)注册时需要发送的消息有三种,分别是口令, 昵称和用户信息。格式如下: USER
PASS NICK 2)注册完成后使用JOIN信息来加 入频道。格式如下: JOIN
-
IRC服务器通常在6667端口监听,也会使用6660—6669端口。在上一篇博客攻防对抗实践部分也利用IRC协议进行过攻击。
-
-
僵尸网络
- 僵尸网络Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。
- 僵尸网络通常用于拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿等。
-
由于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
。
-
多少不同的主机访问了以
209.196.44.172
为服务器的僵尸网络。答案中给出了三个解决办法:
1)当前在线数current_global_users (4752)
2)IRC广播加入和离开服务器的不同主机数
3)观察期间不同昵称出现个数 -
此处选择第三种方法,首先使用tcpflow分流(筛选指定host与端口),命令
tcpflow -r botnet_pcap_file "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
。因为我们要找的是访问209.196.44.172
的主机,故此处着重看第一个文件。
- 使用管道命令进行筛选,得到的结果是3089,但正确结果应该是3457,此处应该是由于字符编码导致没有grep到全部的字符串,还未找到解决办法。
$ cat 209.196.044.172.06667-172.016.134.191.01152 \
| grep "^:irc5.aol.com 353" \ # 获取昵称输出行
| sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" \ # 去除前缀,注:可能无法匹配
| tr ' ' '\n' \ # 将空格转换为新行
| tr -d "\15" \ # 去除\r
| grep -v "^$" \ # 去除空行
| sort -u \ # 排序并去除重复
| wc -l # 获得行数
- 找出被用于攻击的IP地址。(方法参考了解建国同学的博客)由于蜜罐特殊性,所有进入蜜罐的流量都被视为可疑流量,由于IP地址数过多,wireshark等GUI工具不能胜任。使用tcpdump命令查找端口并输出到1.txt中,可以看出查找到148个被攻击的端口。
tcpdump -n -nn -r botnet.pcap '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
- 接下来找出所有的可能连接的主机的IP地址,将其输出到2.txt中,可以看出总共有165个主机可能被用于入侵蜜罐。
tcpdump -n -nn -r botnet.pcap 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
-
攻击者尝试了哪些安全漏洞?攻击方式是什么?是否成功?
-
分为TCP端口和UDP端口分别处理,使用tcpdump命令找到攻击者扫描且蜜罐有响应的端口。得到的TCP端口有
135(rpc)、 139(netbios-ssn)、 25(smtp)、 445(smb)、 4899(radmin)、 80(http)
;udp端口有137(netbios-ns)
。
tcpdump -r botnet.pcap -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 -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq //udp端口
-
既然udp端口只有一个,那就先说说它。137端口在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是NetBIOS查点了。
-
事实上这里攻击者还扫描了
udp 1434
及udp 28431
端口,但由于蜜罐没有响应,故显然攻击是失败的。 -
tcp 135、25
端口,发现攻击者只是进行了连接,并没有数据传输,故只是对两个端口进行了connect扫描。
tcp 80
端口,在waireshark中筛选tcp.dstport==80 && ip.dst == 172.16.134.191
,发现24.197.194.106
与蜜罐的有交互连接数最多,有883次,使用snort对该部分数据包进行扫描,发现大部分报警信息都为WEB-IIS、WEB-CGI、 WEBFRONTPAGE、WEB-MISC。故可以知道24.197.194.106
利用IIS漏洞对蜜罐主机进行 了疯狂的Web探测,但是没有成功~
tcp 4899
端口,4899端口是一个被广泛破解和使用的商业远程控制软件radmin,攻击者通过上传radmin可以实现对靶机的控制。成功~
3.学习中遇到的问题及解决
-
问题:最大的问题就是哪里都有问题,就没有哪个地方是自己思考出来的,要不就参考答案,要不就参考同学的博客,无语子
-
解答:好好学习
-
问题:tcpflow分流后生成的文件存在编码问题。
-
解决:暂未解决,故得到的实践2.4第四小问得到的结果比实际少。
-
问题:使用tcpdump命令时提示
tcpdump: botnet_pcap_file: Permission denied
-
解决:修改
botnet_pcap_file
文件名为botnet.pcap
4.学习感想和体会
好难好难好难~ 事实证明,一次作业要想好好做,一周的时间是绝对不够的,希望这周课上同学的讲解可以帮我理解这部分内容。
参考资料
- 《网络攻防技术与实践》(诸葛建伟著)
- 手脱UPX 0.89.6 - 1.02 / 1.05 - 1.24