20199117 2019-2020-2 《网络攻防实践》第九周作业
1.实践内容
1.1 恶意代码基础知识
1.1.1 恶意代码定义与分类
-
恶意代码定义:恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
-
恶意代码类型:根据执行方式、传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核程序等(图)
-
计算机病毒:一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。
-
蠕虫:自我复制机制与计算机病毒类似,是一类自主运行的恶意代码,并不需要将自身嵌入到其他宿主程序中。
-
恶意移动代码:属于移动代码范畴,移动代码是指可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少的人为干预。
-
后门:指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。
-
特洛伊木马:一类伪装成有用的软件,但隐藏其恶意目标的恶意代码。
-
僵尸网络:攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的攻击网络。僵尸程序:用于构建僵尸网络以形成一对多控制攻击平台的恶意代码形态。
-
内核套件:在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权的一类恶意代码,分为用户态Rootkit和内核Rootkit两种。
-
-
恶意代码的命名规则与分类体系
反病毒业界普遍采用”三元组命名“规则来对所发现的恶意代码新样本进行命名。
”三元组“:恶意代码类型、家族名称和变种号
形式:[恶意代码类型.]恶意代码家族名称[.变种号]
- 恶意代码类型上,有采用恶意代码发作的操作系统平台和应用程序;有采用对恶意代码的技术类别;有采用恶意代码编写的语言,同时在前缀恶意代码类型中经常混用多种分类维度
- 恶意代码家族名称上,不同反病毒厂商为争夺命名权,提升自己的影响力,经常对同一恶意代码样本进行各自命名
- 变种号:由反病毒厂商内部以比较随意的方式给定,通常是以”a,b,c“等小写字母来编写,也有少数厂商以阿拉伯数字进行编码区分
基于多维度标签的恶意代码技术形态分类方法:在恶意代码工作机理中最为核心的传播、控制、隐藏和攻击这些关键技术环节中,有着一些具有特异性的特性,可以通过为恶意代码样本添加技术环节维度上的分类标签,从而识别出该样本所具有的一种或多种特性。
1.1.2 恶意代码发展史
- 起源:1949年,计算机之父冯诺伊曼在《复杂自动机组织论》中提出计算机程序自我复制的概念,成为计算机病毒概念的雏形。
- 发展过程
- 发展趋势
- 恶意代码的复杂度和破坏力不断增强
- 恶意代码技术的创新越来越频繁
- 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具
1.1.3 计算机病毒
1.1.4 网络蠕虫
1.1.5 后门与木马
- 后门为供给者提供多种不同类型的访问通道:本地权限提升和本地账号、单个命令的远程执行、远程命令行解释器访问、远程控制GUI和无端口后门等等。
- 特洛伊木马程序可以用于以下目的:欺骗用户或者管理员安装木马程序;隐藏在计算机的正常程序之中,通过与后门程序结合形成木马后门。
1.1.6 僵尸程序与僵尸网络
- 僵尸网络:攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
- 僵尸网络的功能结构
- 僵尸程序的命令与控制机制:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制和基于P2P协议的命令与控制机制
1.1.7 Rootkit
- Rootkit定义:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中
- 应用程序级木马后门、用户模式Rootkit和内核模式Rootkit位置对比
1.2 恶意代码分析方法
1.2.1 恶意代码分析技术概述
- 代码分析:按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
- 与分析良性代码相比,分析恶意代码的主要差别有:
- 通常不能提前知道恶意代码的目的是什么
- 恶意代码具有恶意的攻击目的,会对所运行环境进行恶意破坏。
- 恶意代码分析在绝大数情况下不会拥有待分析程序的源代码。
- 恶意代码目前都会引入大量各种各样的对抗分析技术
1.2.2 恶意代码分析环境
- 恶意代码发烧友的分析环境
- 基于虚拟化构建恶意代码分析环境
- 用于研究的恶意代码自动分析环境
1.2.3 恶意代码静态分析技术
- 反病毒软件扫描,确定反病毒软件是否能够识别待分析样本,以及所识别的类型、家族、变种等信息
- 文件格式识别:能够快速了解待分析样本的文件格式。工具包括file命令工具,PEiD、FileInfo、FileAnalyzer等
- 字符串提取分析:利用一些专用的字符串提取工具,彻底搜查目标程序,并提取程序中3个或更多的连续可打印字符所组成的全部字符串。提取的字符串中可获得的有用信息包括:恶意代码实例名、帮助或命令行选项、用户会话、相关URL信息、E-mail地址、包含库文件和函数调用
- 二进制结构分析:nm 指令在可执行文件中查找 “符号”的重要数据元素。Objdump 能够从目标文件中显示一些不同类型的信息,作为反汇编工具使用,输出目标文件完整的反汇编代码
- 反汇编与反编译:对二进制程编译链接的逆过程,反编译是把二进制程序的目标代码从二进制机制机器指令转换为汇编代码的处理过程,反编译期望将汇编代码再进一步还原成高级变成语言形式的源代码。
- 代码结构与逻辑分析:Call Graph(函数调用关系图)包含二进制程序内部用户函数之间的调用关系,以及用户函数对系统函数的引用情况。CFG是对程序代码执行过程全部路径的一种图形化表示方法
- 加壳识别与代码识别:加壳混淆机制通常包括加密、多样性、多态和变形等。加壳工具根据技术不同分为压缩壳、加密壳、多态壳、变形壳和伪装壳等。
1.2.4 恶意代码动态分析技术
- 恶意代码动态分析技术主要手段包括快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态测试等
- 基于快照比对的方法和工具::针对恶意代码动态分析的快照比对方法是首先对原始的“ 干净" 的系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间, 如5分钟,之后我们再对恶意代码运行后“ 脏” 的系统资源列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响,比如新建、删除或修改了哪些文件、哪些注册表项等。进行快照对比的工具包括RegSnap、完美卸载等。
- 系统动态行为监控方法:根据所监控的行为类别,系统动态行为监控软件包括:文件行为监控软件、进程行为监控软件、注册表监控软件、本地网络栈行为监控软件
- 网络协议栈监控方法:对于恶意代码的网络行为,除了从恶意代码运行平台本地的网络协议栈进行监控之外,更为全面有效的监控试图是从本地网络上其他一台主机来进行
- 沙箱技术:提供了受限制的执行环境,使得在沙箱中运行的代码不能够修改用户系统,从而提供一个用于运行不可信程序的安全环境
- 动态调试技术:程序运行时刻对它的执行过程进行调试的技术过程
2.实践过程
2.1 动手实践:恶意代码文件类型识别、脱壳与字符串提取
实践任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下。
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写者是谁?
- 在WinXP Attacker虚拟机上打开终端输入file RaDa.exe查看RaDa.exe的文件类型为32位操作系统下的PE文件,有图形化界面
- 使用PEID查壳工具,查看文件的加壳类型位UPX壳、入口点、文件偏移、EP段等基本信息
- 在终端输入strings RaDa.exe查看可打印的字符串,由于文件加壳所以出现乱码
- 使用超级巡警脱壳工具对文件脱壳
- 再次输入strings RaDa.exe查看可打印的字符串,脱壳后出现正常字符串
- 在IDA Pro Free打开RaDa_unpackedd.exe文件,可以找到作者为DataRescue sa/nv,邮箱为ida@datarescue.com
2.2 动手实践:分析Crackme程序
实践挑战:使用IDA Pro静态或动态分析crackme1.exe与crackme2.exe,寻找特定的输入,使其能过够输出成功信息。
- 对crackme1.exe进行破解,试探输入格式。在接受一个参数的时候输出信息与其他不同,猜测该程序接受一个参数
- 使用IDA Pro Free打开crackme1.exe进行分析。分析该程序的字符串,其中gcc表示该程序用C语言编写。发现前面的两种反馈信息“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"这两种字符串,猜测当我们输入第一句为指令时,第二句话就是输出的反馈信息
- 查看函数调用图,找到字符串操作相关的函数,如图程序可能是使用strcmp函数比较口令,重点是sub_401280
- 查看sub_401280流程图,截取sub_401280的汇编代码。其中cmp [ebo+arg_0],2表示判断程序的参数个数是否为2
- 查看流程图,整个流程为判断程序参数个数是否为2,如不为2,则执行"I think you are missing something";如果为2,则将第二个参数与"I know the secret"对比,如果不同,则执行"Pardon?What did you say?",如果相同则执行"You know how to speak to programs,Mr..."与之前猜测相同
- 在终端输入crackme1.exe "I know the secret",得到的反馈信息与猜想相同
- 与crackme1.exe分析相似,在终端运行crackme2.exe程序,结果与1相同
- 在IDA Pro Free打开程序并查看字符串
- 查看函数调用图,找到字符串操作相关的函数,如图程序可能是使用strcmp函数比较口令,重点仍然是sub_401280
- 与1一致,查看流程图,查看sub_401280的汇编代码,cmp [ebo+arg_0],2表示判断程序的参数个数是否为2
- 查看流程图,整体过程与1类似。判断参数是否为2,若不为2,则执行"I think you are missing something";若为2,则将第一个参数与"crackmeplease.exe"做对比,若不同,输出"I have an identity problem.",若相同,则将第二个参数与"I know the secret"比较,如第二个参数不同,则执行"Pardon?What did you say?"
- 接着,如果第二个参数相同,则通过一定规则输出通过测试的信息。具体时unk_403080中的字符串分别与0x42进行异或运算
- 最后,在终端进行测试。输入copy crackme2.exe crackmeplease.exe将程序复制并命名为crackmeplease.exe,输入crackmeplease.exe "I know the secret",得到的反馈信息为We have a little secret: Chocolate
2.3 实践作业:样本分析实践
分析一个自制恶意代码样本rada,并撰写分析报告
- 提出对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
- 找出并解释这个二进制文件的目的
- 识别并说明这个二进制文件所具有的不同特性
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
- 给出过去已有的具有相似功能的其他工具
- 可能调查出这个二进制文件的开发者么?如果可以,在什么样的环境和什么样的限定条件下?
- 在终端输入md5sum RaDa.exe查看摘要,如图,md5摘要值为caaa6985a43225a0b3add54f44a0d4c7,输入file RaDa.exe查看RaDa.exe的文件类型为32位操作系统下的PE文件
- 打开监听工具process explorer对RaDa.exe进行检测,如图发现该程序用http连接到目标为10.10.10.10的主机下名为RaDa——commands的网页上,创建文件夹C:\RaDa\tmp保存下载文件,进行DDOS拒绝服务攻击,将RaDa.exe复制到C:\RaDa\bin。该程序还依次读、写和删除注册表,打开注册表查看发现没有信息,则表示已删除。接下来执行exe(执行指定命令)、put(将宿主主机中的指定文件上传到服务器)、get(将服务器中的指定文件下载到宿主主机中)、screenshot(截取宿主主机的屏幕并保存到tmp文件夹)、sleep(停止活动一段时间)
- 使用IDA Pro分析RaDa_unpacked.exe查看字符串,设置strings,在type右键打开set up将类型修改为Unicode。查看作者信息如图,为Raul Slies & David Perez
- 在strings中点击IP地址,定位到相应位置后,由上述分析,用http连接到目标为10.10.10.10的主机下名为RaDa——commands.html,对应的函数为sub_404FB0,点击进入此函数,得到汇编代码如图,这个字符串被拷贝到dword_40C030变量中
1.程序的 MD5 摘要值为caaa6985a43225a0b3add54f44a0d4c7,加壳方式是UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
2.二进制文件的目的:根据上述分析,猜测为后门程序或僵尸程序,远程攻击者能完全控制系统,并且只要用户上网,就可以得到到攻击者的攻击指令
3.不同特性:该程序运行的时候建立远程连接并修改注册表,将下载的文件存储到C:\RaDa\tmp
4.采用的防止被分析或逆向工程技术:使用加壳技术,该程序使用的加壳工具为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
5.分类:不具有传播性所以不是蠕虫和病毒;没有将代码嵌入进其他程序,不是木马,应该是后门程序或僵尸程序
6.Bobax、Setiri、Rootkit等
7.作者为Raul Slies & David Perez
2.4 取证分析实践:Windows 2000系统被攻陷并加入僵尸网络
1.IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
-
IRC(Internet Relay Chat),因特网中继聊天,是一个位于应用层的协议,主要用于群体聊天,一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。原理为用户使用客户端软件,通过因特网以IRC协议连接到一台IRC服务器上即可
-
当IRC客户端申请加入一个IRC网络时首先需要注册,注册需要发送三种消息,分别为口令、昵称和用户信息;注册成功后使用JOIN信息加入频道
-
IRC一般使用6667端口监听
2.僵尸网络是什么?僵尸网络通常用于干什么? -
僵尸网络:攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
-
僵尸网络通常用于拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿等。
3.蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
- 在wireshark中打开botnet_pcap_file.dat文件,输入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为服务器的僵尸网络?
- 在Ubuntu打开终端,输入tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667",读取文件后,筛选host和端口使用tcpflow进行分流,输入ls查看,发现分流后产生三个文件,分别为:209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、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 ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l进行筛选,结果为3089,不知道为什么不是3457
grep:搜索获取昵称输出行
sed:去除前缀(g:全局)
tr:将空格转换为换行
tr -d:删除\r
grep -v:去除空行
sort -u:排序去除重复
wc -l:获得行数
5.哪些IP地址被用于攻击蜜罐主机?
- 输入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,查找端口并输出为1.txt文件,找到148个被攻击的端口存储在1.txt中
- 输入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,查找所有可能连接的主机的IP地址存储在2.txt文件中,找到165个可能连接的主机
6.攻击者尝试了哪些安全漏洞?
7.哪些攻击成功了?是如何成功的?
- 输入**tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq 筛选出TCP响应端口为135(rpc)、 139(netbios-ssn)、 25(smtp)、 445(smb)、 4899(radmin)、 80(http),输入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(netbios-ns)
-
对端口进行逐一分析,首先分析udp137端口,在局域网中查询计算机的IP地址,该端口处于自动开放状态,为NetBIOS查点
-
筛选tcp 135、tcp 25端口,发现知识进行连接,没有数据交互,所以只是对这两个端口进行了connect扫描
- 在wireshark中输入tcp.dstport==80 && ip.dst == 172.16.134.191筛选分析tcp80端口,发现IP地址为24.197.194.106的主机与蜜罐交互数目最多,其原因是用脚本不断攻击IIS服务器漏洞,从而获得系统权限
- 输入tcp.dstport==4899筛选tcp 4899端口,发现只有210.22.204.101访问过该端口。该端口为一个远程软件radmin服务端监听端口,攻击者可以通过radmin进行控制
3.实践中遇到的问题及解决
问题:实践4中查看哪些IP地址被用于攻击蜜罐主机时,输入命令后,输出结果如图
解决:参考http://www.voidcn.com/article/p-yemctrul-bha.html
4.实践总结
这周的作业也太多太难了吧!但是做完还是很有成就感。嘻嘻。上课要好好听大神讲课,把实验中不是很懂的弄明白。