20199318 2019-2020-2 《网络攻防实践》第九周作业
1.知识点梳理与总结
1.1 恶意代码基础知识
恶意代码具有以下3个明显的共同特征:
- 目的性:目的性是恶意代码的基本特征。
- 传播性:传播性是恶意代码体现其生命力的重要手段
- 破坏性:破坏性是恶意代码的表现手段
恶意代码的种类:
- 普通计算机病毒:主要包括引导区型病毒、文件型病毒以及混合型病毒。
- 蠕虫:蠕虫作为恶意代码的一种,它的传播通常不需要所谓的激活。它通过分布式网络来散播特定的信息或错误。进而造成网络服务遭到拒绝并发生死锁。
- 特洛伊木马:一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。
- Rootkit工具:Rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。
- 僵尸网络:僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。
- 后门:后门是指绕过安全性控制而获取的对程序或系统访问权的方法。
1.2 恶意代码分析
恶意代码分析方法
恶意代码分析与针对良性代码和软件的程序分析技术,都可以采用通用的代码分析技术来作为基础,主要包括静态分析和动态分析方法,来对代码进行逆向工程(Reverse Engineering)来确定其功能。
恶意代码分析环境
恶意代码发烧友的分析环境:
基于虚拟化构建恶意代码分析环境:
用于研究的恶意代码自动分析环境:
恶意代码静态分析技术
通过反病毒引擎扫描识别已知的恶意代码家族和变种名,逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。恶意代码静态分析技术如下图所示
反病毒软件扫描:使用现成的反病毒软件来扫描待分析的样本, 以确定反病毒软件是否能够识别该样本, 以及所识别的类型、家族、变种等信息。
文件格式识别:恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式。在Windows 平台上, 二进制可执行文件E XE 和DLL 都是以 PE 文件格式组织的,而在 Linux 平台上,可执行文件格式则是 ELF 。
字符串提取分析:主要提取的信息包括可能获得的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。
二进制结构分析:nm 指令在可执行文件中查找 symbols 重要元素。objdump 主要功能有从可执行文件中限制不同类型的信息、编译器类型、代码段数据段位置、反汇编
反汇编(Disassemble)与反编译(Decompile):反汇编与反编译是对二进制程序编译链接的逆过程,反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程,而反编译则更进一步,期望将汇编代码再进一步还原成高级编程语言形式的源代码。
代码结构与逻辑分析:程序结构主要是了解 Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑。
加壳识别与代码脱壳:恶意代码通常使用的加壳混淆机制包括加密、多样性、多态和变形等,加密机制(Encryption)一般采用固定的代码加密器来对一进制程序进行处理,以改变代码的存在形态。
恶意代码动态分析技术
动态分析,实际上是激活一个受控分析实验环境中的代码,当一个代码在实际系统中运行时,我们能够更加迅速地了解其行为。动态分析技术如下图所示.
基于快照比对的方法和工具:针对恶意代码动态分析的快照比对方法是首先对原始的“ 干净" 的系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间, 如5分钟,之后我们再对恶意代码运行后“ 脏” 的系统资源列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响,比如新建、删除或修改了哪些文件、哪些注册表项等。
系统动态行为监控方法:系统动态行为监控是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。系统动态行为监视通常基于行为通知(Notification)机制或者 API 劫持技术(API Hooking)实现。
网络协议栈监控方法:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
沙箱技术:沙箱技术提供了受限制的执行环境,使得在沙箱中运行的代码不能够修改用户系统,从而提供了 一个用于运行不可信程序的安全环境。
动态调试技术:动态调试器能够以单步模式来调试恶意代码,能够一行代码接着一行代码,一个函数调用接着一个函数调用地进行恶意代码行为分析的过程,这样就能够像录像机一样能够逐个镜头的分析犯罪现场录像,并也可以中断或者快进程序运行流程,观察恶意代码中发生的一切。
2.动手实践
实践一:恶意代码静态分析
任务:对提供的rada恶意代码样本(U盘或FTP/materials/course9下载),在WinXP_Attacker虚拟机中进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
- 使用文件格式和类型识别工具(file, PEid),给出rada恶意 代码样本的文件格式、运行平台和加壳工具。
- 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行 脱壳处理。
- 使用字符串提取工具(strings、IDA Pro),对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作 者是谁?
实践步骤:
使用file命令,strings命令,以及文件脱壳器等对恶意程序RaDa.exe进行基本检测
- 使用 file 命令查看 RaDa.exe 的文件类型
看到 RaDa.exe 是一个 Windows PE 可执行文件,并且有图形化窗口
2.使用 PEiD 工具查看 RaDa.exe 的基本信息
这里可以看到文件的入口点、偏移、文件类型、EP 短、汇编程序以及加壳类型
3. 使用 strings 命令查看 RaDa.exe 中可打印字符串
出现乱码的原因是因为文件被加壳,正常字符无法显示
4. 对 RaDa.exe 进行脱壳
尽管是经过修改的 UPX 壳,但是该自动化脱壳工具显然有这个壳的样本库,能够自动脱
壳,省去了手工脱壳的麻烦
5.再用 strings 查看脱壳后的 RaDa.exe(RaDa_unpacked.exe)
脱壳之后出现正常的字符串,再从中寻找有用信息
实践二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息
实践步骤:
- 使用 file 命令查看 crackme 的文件类型。
可以知道这两个 crackme 都是 32 位 windows 下 PE 文件,没有图形界面,是命令行程序。
2.首先对crackme1.exe进行破解。尝试运行该程序,试探其输入格式
在接受 1 个参数时,程序的反馈与众不同,所以猜测该程序接受一个参数。目前为止,已经发现了程序的两种反馈信息。一种是“I think you are missing something.”,这个猜测是参数数目不对的提示;另一种是“Pardon? What did you say?”,对于这种反馈信息,我们猜测是参数错误的提示。
接着使用 IDA pro 工具来打开文件,尝试阅读其汇编语言,验证猜想
通过 Strings 页面可以查看到该程序中出现的明文字符串,我们发现了前面的两种反馈信息,“I think you are missing something.” “Pardon? What did you say?”,还发现了“I know the secret”和“You know how to speak to programs, Mr. Reverse-Engineer”这两个字符串。有内容我们可以猜测,前者就是我们需要的口令,后者就是输入口令正确时程序的反馈信息。
通过查看整个程序的 call flow
我们可以得出结论,1 程序是用 C 语言写的,2 程序估计是使用 strcmp函数来比较口令
的,3 关键的部分在 sub_401280 这里。接下来我们开始查看 sub_401280 的汇编代码。
倒数第二行 cmp [ebo+arg_0],2 为判断程序是否有两个参数
在 c 语言中,main 函数通常为 int main(int argc,const char**argv),即第一个参数 argc 对应argv的大小,第二个参数对应命令行的格式。如在命令行输入 crackme1.exe 1,那么参数对应的值为 argc=2,argv={”crackme1.exe”,”1”}。
如果 argc=2,那么进行下一步判断
call strcmp 中,程序用“I know the secret”对应的字符串和[eax]对应的字符串(用户输入的口令)相比较,通过比较的结果反馈口令是否正确。那么尝试输入口令 I know the secret,我们可以通过程序的测试。
然后分析crackme2.exe
String 界面,明文字符串“I know the secret”和“crackmeplease.exe”
Function call,主要查看 sub_401280
倒数第二行,cmp [ebp+arg_0],2 判断程序参数是否为两个
通过参数个数的 判断后 , 接着用strcmp 函数对 argc 里面的第一个字符串,即程序名,和“crackmeplease.exe”进行判断
通过程序名判断后,用户输入的口令与”I know the secret”判断
通过口令判断后,通过一定规则输出通过测试的信息。
具体是 unk_403080 中的字符串分别与0x42h 进行异或运算。
实践三:样本分析实践:分析一个自制恶意代码样本 rada, 并撰写分析报告
本次实践作业的任务是分析一个自制的恶意代码样本,以提高对恶意代码逆向工程分析技术的认识,并提高逆向工程分析的方法、工具和技术。
回答问题:
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
找出并解释这个二进制文件的目的。
识别并说明这个二进制文件所具有的不同特性。
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
给出过去已有的具有相似功能的其他工具。
奖励问题:
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
分析过程:
首先打开监控工具 Filemon,Regmon,Wireshark 三个软件进行监测。同时使用 Regshot 记录下还未启动恶意软件时的注册表状态。
在Filemon中,看到RaDa.exe读取了大量的DLL文件、在C:
ada路径下创建了tmp文件、复制到了C:RaDain目录下并改写了文件
在wireshark中可以看到一直通过 HTTP 协议访问 ip地址为 10.10.10.10 的网站
对于RaDa.exe的脱壳处理在实践一中已经完成。
使用 IDA Pro 进行分析,首先查看字符串窗口,把类型 Type 改成 unicode 类型,首先看到的是命令行参数,其次是版本和作者,然后是注册表字符串,最后是一个网页RaDa_commands.html,应该是之前访问的网站的网页
以RaDa_commands.html为线索,首先找到sub_404FB函数分析,这个字符串被复制到了变量dword_40C030中,搜索这个变量找到sub_4052C0
查看函数sub_4052C0可以看到判断3个内网网段,分别为192.168.、172.16.、10.,这里确保服务器位于这3个内网网段,然后去服务器中获取命令,解析并执行其中的命令
下面就是这些具体的命令以及其功能
最后是来分析一下程序是否存在VMware识别,以 HKLMSoftwareVMware,Inc.VMware ToolsInstallPath 为线索分析,找到函数sub_404FB0(authors 命令处理函数),在这个函数中,这个字符串被复制到变量dword_40C070,搜索这个变量对应的函数,找到是sub_40AAA0
sub_404FB0获取了网卡配置信息,并检查了 mac 地址,然后确认 HKLMSoftwareVMware,Inc.VMware ToolsInstallPath 是否存在(也就是看看VMware Tools 是不是在注册表里)
问题解答:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息:
程序的 MD5 摘要值为caaa6985a43225a0b3add54f44a0d4c7,加壳方式是UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo,文件类型RaDa.exe: PE32 executable (GUI) Intel 80386, for MS Windows,这些可以作为文件标识。
(2)找出并解释这个二进制文件的目的:
这是一个后门程序,能够使得远程的攻击者完全地控制系统,并且只要系统能够通过浏览器上网,就能获得攻击者的指令
(3)识别并说明这个二进制文件所具有的不同特性:
RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:从指定的web服务器请求指定的web页面;解析获得的web页面,获取其中的指令;执行解析出来的指令,主要的指令上面给出
;等待一段时间后继续按照上述步骤继续执行。
启动后,RaDa一直在后台运行,不会弹出任何窗口。并支持以下指令:
exe在宿主主机中执行指定的命令
put将宿主主机中的指定文件上传到服务器
get将服务器中的指定文件下载到宿主主机中
screenshot截取宿主主机的屏幕并保存到tmp文件夹
sleep停止活动一段时间
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- UPX加壳技术
- 通过查看网卡的 MAC 地址以及查看 VMware Tools 的注册表项 来判断操作系统是否运行在 VMware 虚拟机上,如果是,则使用--authors参数时将不会输出作者信息
- 一些干扰字符串Starting DDoS Smurf remote attack,让分析者误认为是程序执行 DDoS 攻击,实际上并没有
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
首先这个样本不具有传播和感染属性,所以不是病毒或者蠕虫;其次也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马;所以应该是一个后面程序,如果是多对一控制,还可能是 HTTP Bot(僵尸程序)
(6)给出过去已有的具有相似功能的其他工具。
从服务器下载指令并执行具备组件僵尸网络的能力;Setiri及其前辈GatSlag
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的
可以通过--authors参数获取相关作者信息Authors: Raul Siles & David Perez,2004;环境和限定条件是不在虚拟机 VMware 中运行
实践四:取证分析实践:Windows 2000系统被攻陷并加入僵尸网络
难度等级:中级, 案例分析挑战内容:
在2003年3月初, Azusa Pacific大学蜜网项目组部署了一个未打任何补丁的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.哪些攻击成功了?是如何成功的?
问题解答:
1.IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
因特网中继聊天(Internet Relay Chat),简称 IRC 。 IRC 的工作原理非常简单,只要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台IRC服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER
IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。 SSL 加密传输在 6697 端口。
2.僵尸网络是什么?僵尸网络通常用于干什么?
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
它往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。
3.蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
因为我们知道 IRC 服务通过6667端口,通过 Wireshark 打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667。
经过筛选,可以得到五个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为服务器的僵尸网络
这里使用命令tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"
进行分流。
执行之后我们将获得三个文件,172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和 report.xml
输入如下指令进行搜索有多少主机连接:
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 ' ' '
' | tr -d "15" | grep -v "^$" | sort -u | wc -l
最后可以得到共有3457台主机。
5.哪些IP地址被用于攻击蜜罐主机
使用下面的指令找出所有的可能连接的主机的IP地址:
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
6.攻击者尝试攻击了那些安全漏洞
使用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
(0x12代表有回复)
将协议部分改为 udp ,可以筛选出 udp 端口137(netbios-ns)
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 137号端口,这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。
接下来看 tcp 135 号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了 connect 扫描。
然后查看 TCP 80 端口,首先利用 Wireshark 进行筛选tcp.dstport==80 && ip.dst == 172.16.134.191,首先连接最多的就是 24.197.194.106 这个IP,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。
接下来是210.22.204.101访问的80端口,攻击者是想通过缓冲区溢出攻击来获得一个命令行了
下一个访问 80 端口的是218.25.147.83,这里会看到c:
otworm,说明这是一个蠕虫攻击。上网搜索发现是红色代码(red code)病毒
其余的 ip 地址均为正常访问蜜罐
最后看对80端口有没有攻击成功了,我们通过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的回应均为一个 iis 服务器的默认页面,所以80端口的这些攻击均失败。
然后关注TCP 139号端口。这个也比较简单,虽然有很多主机连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样也没有成功,所以应该是 SMB 查点。
然后分析TCP 445端口。这个端口连接非常多,可以看到许多 samr, srvsvc 字符串,查询字符串后很容易发现一个PSEXESVC.EXE字符串,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。
最后一个TCP 4899端口。只有 IP 地址 210.22.204.101 访问过。上网搜索可以查到 4899 端口是一个远程控制软件 radmin 服务端监听端口,这个软件不是木马,应该是上面攻击成功后上传这个软件方便控制。
至此分析结束
3.遇到的问题
问题一:本科学的汇编语言忘得差不多了。
问题一解决方案:百度学习了一波。
4.学习感悟、思考
本次实践真是太难顶了!!!做了一遍也感觉不是特别清楚。希望老师能够把本次的实践讲解一下。。。。。。