20221909 2022-2023-2 《网络攻防实践》实践8作业
一.实验内容
1、基础知识
(1) 恶意代码:
恶意代码的行为表现各异,破坏程度千差万别,但基本作用机制大体相同,其整个作用过程分为6个部分。
- 侵入系统。侵入系统是恶意代码实现其恶意目的的必要条件。恶意代码入侵的途径很多,如:从互联网下载的程序本身就可能含有恶意代码;接收已经感染恶意代码的电子邮件:从光盘或U盘往系统上安装软件:黑客或者攻击者故意将恶意代码植入系统等。
- 维持或提升现有特权。恶意代码的传播与破坏必须盗用用户或者进程的合法权限才能完成。
- 隐蔽策略。为了不让系统发现恶意代码已经侵入系统,恶意代码可能会改名、删除源文件或者修改系统的安全策略来隐藏自己。
- 潜伏。恶意代码侵入系统后,等待一定的条件,并具有足够的权限时,就发作并进行破坏活动
- 破坏。恶意代码的本质具有破坏性,其目的是造成信息丢失,泄密,破坏系统完整性等。
- 重复(1)至(5)对新的目标实施攻击过程。
(2)恶意代码分类
- 病毒:很小的应用程序或一串代码,能够影响主机应用。两大特点:繁殖(propagation)和破坏(destruction)。繁殖功能定义了病毒在系统间扩散的方式,其破坏力则体现在病毒负载中。
- 特洛伊木马:可以伪装成他类的程序。看起来像是正常程序,一旦被执行,将进行某些隐蔽的操作。比如一个模拟登录接口的软件,它可以捕获毫无戒心的用户的口令。可使用HIDS检查文件长度的变化
- 内核套件(Root工具):是攻击者用来隐藏自己的踪迹和保留root访问权限的工具
- 逻辑炸弹(Logic Bombs):可以由某类事件触发执行,例如某一时刻(一个时间炸弹),或者是某些运算的结果。软件执行的结果可以千差万别,从发送无害的消息到系统彻底崩溃。
- 蠕虫(Worm): 像病毒那样可以扩散,但蠕虫可以自我复制,不需要借助其他宿主
- 僵尸网络(Botnets):是由C&C服务器以及僵尸牧人控制的僵尸网络。
- 间谍软件(Spyware ):间谍软件就是能偷偷安装在受害者电脑上并收集受害者的敏感信息的软件。
- 恶意移动代码:移动代码指可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少的人为干预。移动代码通常在Web服务器端实现。恶意移动代码是指在本地系统执行一些用户不期望的恶意动作的移动代码。
- 后门:指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制。
- 广告软件( Adware):自动生成(呈现)广告的软件。
上述分类只是个大概,各种恶意代码常常是你中有我,我中有你。而且在实际中,攻击者经常会将多种恶意代码组合起来使用。
2、恶意代码的分析技术
恶意代码分析主要有静态分析和动态分析两大类技术方法。
(1)静态分析
静态分析是指直接查看分析代码本身,优点在于分析覆盖率较高。主要包括:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
- 反病毒软件扫描:使用现成的反病毒软件来扫描待分析的样本,以确代码是否含有病毒。
- 文件格式识别:恶意代码通常是以二进制可执行文件格式存在的,其他的存在形式还包括脚本文件、带有宏指令的数据文件、压缩文件等。文件格式识别能够让我们快速地了解待分析样本的文件格式,对于二进制可执行文件而言,了解样本的格式也意味洋 我们获知了恶意代码所期望的运行平台。在Windows平台上,二进制可执行yywrexe和dll都是以pe文件格式组织的,而在linux平台上,可执行文件格式则是elf。
- 字符串提取分析:有时恶意代码的作者会在自己的作品中放入某个特定的url或email地址,或者恶意代码会使用到某个特定的库文件和函数。利用字符串提取技术,可以帮助我们分析恶意代码的功能和结构。
- 反汇编、反编译:可根据二进制文件最大限度地恢复出源代码,帮助分析代码结构。
- 加壳识别和代码脱壳:恶意代码的加壳会对深入的静态分析构成阻碍,因此对加壳进行识别以及代码脱壳是支持恶意代码静态分析一项关键性的技术手段。
(2)动态分析
动态分析技术指通过实际运行恶意代码,跟踪和观察其执行的细节来帮助分析理解代码的行为和功能。其局限性实执行过程中受环境的限制,通常无法实际执行所有分支路径,因此需要与静态分析结合使用。主要包括:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试等。
- 快照比对:对原始的“干净”系统资源列表做一个快照,然后激活恶意代码并给予充分的运行时间,如5分钟,之后我们再对恶意代码运行后“脏”的系统资料列表进行快照,并对比两个快照之间的差异,从而获取恶意代码行为对系统所造成的影响。常使用的工具有:FileSnap,RegSnap,完美卸载等
- 系统动态行为监控:是目前恶意代码动态行为分析中最为核心和常用的技术步骤,针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。
- 网络协议栈监控方法:可从本地网络上的其他主机来检测承受恶意代码攻击的机器的行为,如恶意代码所开放的TCP或UDP端口,对外发起的网络连接和通信会话等。
3、恶意代码的检测与防范
基于上述分析技术,可以运用如下技术手段进行恶意代码的检测和防范。
(1)误用检测技术
- 误用检测也被称为基于特征字的检测。他是目前检测恶意代码最常用的技术,主要源于模式匹配的思想。
- 误用检测的实现过程为:根据已知恶意代码的特征关键字建立一个恶意代码特征库;对计算机程序代码进行扫描;与特征库中的已知恶意代码关键字进行匹配比较,从而判断被扫描程序是否感染恶意代码。
- 误用检测技术目前被广泛应用于反病毒软件中。早期的恶意代码主要是计算机病毒,其主要感染计算机文件,并在感染文件后留有该病毒的特征代码。通过扫描程序文件并与已知、特征值相匹配即可快速准确地判断是否感染病毒,并采取对应的措施清除该病毒。随着压缩和加密技术的广泛采用,在进行扫描和特征值匹配前,必须对压缩和加密文件先进行解压和解密,然后再进行扫描。而压缩和加密方法多种多样,这就大大增加了查毒处理的难度,有时甚至根本不能检测。同时,基于特征字的检测方法对变形病毒也显得力不从心。
(2)权限控制技术
- 恶意代码要实现入侵、传播和破坏等必须具备足够权限。首先,恶意代码只有被运行才能实现其恶意目的,所以恶意代码进入系统后必须具有运行权限。其次,被运行的恶意代码如果要修改、破坏其他文件,则他必须具有对该文件的写权限,否则会被系统禁止。另外,如果恶意代码要窃取其他文件信息,他也必须具有对该文件的读权限。
- 权限控制技术通过适当的控制计算机系统中程序的权限,使其仅仅具有完成正常任务的最小权限,即使该程序中包含恶意代码,该恶意代码也不能或者不能完全实现其恶意目的。通过权限控制技术来防御恶意代码的技术包括沙箱技术、安全操作系统、可信计算等。
(3) 完整性技术
- 恶意代码感染、破坏其他目标系统的过程,也是破坏这些目标完整性的过程。完整性技术就是通过保证系统资源,特别是系统中重要资源的完整性不受破坏,来阻止恶意代码对系统资源的感染和破坏。
- 校验和法就是完整性控制技术的一种应用,它主要通过Hash值和循环冗余码来实现,即首先将未被恶意代码感染的系统生成检测数据,然后周期性地使用校验和法检测文件的改变情况,只要文件内部有一个比特发生了变化,校验和值就会改变。
- 校验和法能够检测未知恶意代码对目标文件的修改,但存在两个缺点:①校验和法实际上不能检测目标文件是否被恶意代码感染,它只是查找文件的变化,而且即使发现文件发生了变化,既无法将恶意代码消除,又不能判断所感染的恶意代码类型;②校验和法常被恶意代码通过多种手段欺骗,使之检测失效,而误判断文件没有发生改变。
在恶意代码对抗与反对抗的发展过程中,还存在其他一些防御恶意代码的技术和方法,比如常用的有网络隔离技术和防火墙控制技术,以及基于生物免疫的病毒防范技术、基于移动代理的恶意代码检测技术等。
二.实验内容
1、动手实践任务一
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
打开WinXPattacker,用命令提示符打开已存在c盘20221909zxr文件夹下的rada.exe文件,输入命令file RaDa.exe看到文件类型为32位操作系统下的PE文件,有图形化界面。
输入命令strings RaDa.exe可以看到文件字符串为乱码。
打开PEiD找到Rada.exe文件位置查看其基本信息,可以看到加壳类型为UPX。
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
输入strings命令查看脱壳后的rada_unpacked.exe文件中可打印的字符串,可以发现有大量的函数调用名。
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是DataRescue sa/nv,他在2006年写的.
2、动手实践任务二
分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
(1)分析crackme1.exe
首先检查一下两个文件的完整性,计算其 md5 值。
在WinXP Attacker中输入file crackme1.exe查看文件类型为32位Windows下的PE文件,没有图形界面,是命令行文件。
执行crackme1.exe,猜测参数执行,查看返回有I think you are missing something等。
打开IDA并打开crackme1.exe文件,查壳这个文件的函数调用。
利用IDA Pro打开这个程序分析,打开我们打开通过Strings窗口可以查看该程序中出现的字符串。通过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”这两个字符串。由此我们可以猜测,前者就是我们需要的口令,后者就是输入口令正确时程序的输出信息。
接下来看函数调用图(Function Call)可以发现:关键的部分在sub_401280这里,程序是使用strcmp函数来输入的,然后利用print和fprint函数输出。
看sub_401280流程图,看到cmp [ebp+arg_0],2,其用来判断程序是否有两个参数。
继续分析,可以看到其他几条口令。
猜测正确的口令应该是"I know the secret",输入命令运行改口令,可以得到这样一条回复"You know how to speak to programs,Mr.Reverse-Engineer"。成功。
打开sub_401280函数的流程图,发现该函数首先判断参数个数是否为2,若参数个数不为2,也就是前面在输入命令crackme1.exe时输出I think you are missing something,若参数个数为2,则将第二个参数与字符串I know the secret作比较,正确则输出You know how to programs。
(2)分析crackme2.exe
和分析crackme1.exe同理,打开IDA并打开crackme2.exe文件,查壳这个文件的函数调用。选择view—graphs—function calls。发现输出函数fprintf即为程序输出,则crackme2.exe的核心函数也是sub_401280。
打开sub_401280函数的流程图,发现该函数首先判断参数个数是否为2,若参数个数为2,则判断第一个参数是否为crackmeplease.exe,若正确则判断第二个参数是否为I know the secret。
代码逻辑中的程序名称改变了,变成了:crackmelpease.exe.因此需要对程序名称进行修改。
输入copy crackme2.exe crackmeplease.exe将程序复制并命名为crackmeplease.exe,输入crackmeplease.exe “I know the secret”,得到的反馈信息为We have a little secret: Chocolate.成功。
3、分析实践任务一
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(2)找出并解释这个二进制文件的目的;
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
使用md5sum命令查看摘要信息, md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。
启动恶意软件并用radaprocess explorer软件进行监测。在RaDa.exe的属性里可以看到它通过HTTP协议连接到10.10.10.10主机下RaDa\RaDa_commands.html
的网页上,在c盘C:\RaDa\tmp目录下创建用于保存下载文件的文件夹,恶意软件还修改了注册表(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run)将rada设置为开机启动。
下拉可以看到,该程序还对主机实行了DDOS拒绝服务攻击,可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。接下来该程序对注册表进行了读写和删除操作。
rada执行了上传、下载、休眠、屏幕截图等命令。
- exe:在宿主主机中执行指定的命令
- put:将宿主主机中的指定文件上传到服务器
- get:将服务器中的指定文件下载到宿主主机中
- screenshot:截取宿主主机的屏幕并保存到tmp文件夹
- sleep:停止活动一段时间
总结:
1、这个二进制文件的摘要为caaa6985a43225a0b3add54f44a0d4c7。
PE格式:运行在Windows 2000, XP and 2003及以上版的操作系统中,使用了UPX加壳工具进行了加壳处理
2、找出并解释这个二进制文件的目的:下载后门到目标主机,发动拒绝服务攻击,可远程与目标主机通信。
3、识别并说明这个二进制文件所具有的不同特性:这个恶意程序会自我复制到目标主机c盘,并自动新建文件夹而不被发现,修改注册表,文件运行时自动与其他主机通信。
4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术:文件被加壳处理,为乱码形式;
5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由:不能自主传播,未进行伪装,是后门程序。
6、给出过去已有的具有相似功能的其他工具:木马Setiri。
7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?将rada.exe脱壳后,获得开发作者信息Authors: Raul Siles & David Perez, 2004。
4、分析实践任务二
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
答:IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过60个国家提供了IRC的服务。IRC的工作原理非常简单,只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称)。
2、僵尸网络是什么?僵尸网络通常用于什么?
答:僵尸网络(botnet)是指一组受到恶意软件感染并遭到恶意用户控制的计算机。术语“僵尸网络”由“机器人(bot)”和“网络(network)”两个词组合而成,每台受感染设备被称为“机器人”。僵尸网络可用于完成非法或恶意的任务,包括发送垃圾邮件、窃取数据、投放勒索软件、欺诈性点击广告或发动分布式拒绝服务(DDoS)攻击。
3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
使用Wireshark打开数据文件,根据IRC简介,常见端口为6667,因此设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,筛选源地址为蜜罐主机,目的端口为6667的包。
得到五个服务器地址:
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分流(筛选指定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。
因为我们要找的是访问 209.196.44.172的主机,故此处着重看第一个文件。查看报告文件,可以看到两个主机互相通信的时间,IP,mac地址,使用端口,包裹数。
输入命令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 "^KaTeX parse error: Expected group after '^' at position 140: …d去除\r,grep -v "^̲"去除空行,sort -u排序并去重,wc计算行数)。结果显示有3461个。
5、那些IP地址被用于攻击蜜罐主机?
由于蜜罐其特殊性,所有进入蜜罐的流量都很可疑。使用tcpdump命令查找端口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 > tcpdump.txt;wc -l tcpdump.txt
打开生成的tcpdump.txt文件,可以看到有165个IP地址被用于攻击蜜罐主机。
6、攻击者尝试攻击了那些安全漏洞?
使用Tcpdump工具筛选出蜜罐主机有哪些端口是响应的。输入命令
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端口
可以看到有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 udp | cut -d ’ ’ -f 3 | cut -d ‘.’ -f 5 | sort | uniq筛选响应的端口,发现udp端口有137(netbios-ns)。137端口在局域网中提供计算机的IP地址查询服务,处于自动开放状态。
7、那些攻击成功了?是如何成功的?
筛选出端口135和25,139发现攻击者只是进行了连接,并没有数据传输,故只是对端口进行了查点或connect扫描。
tcp.dstport135&& ip.dst == 172.16.134.191
tcp.dstport139&& ip.dst == 172.16.134.191
tcp.dstport25&& ip.dst == 172.16.134.191
查看tcp 80端口,在waireshark中筛选tcp.dstport80 && ip.dst == 172.16.134.191,发现使用了cmd.exe,发现了TCP协议、SMB协议和NBSS协议,同时发现24.197.194.106与蜜罐的有交互连接数最多,可以知道24.197.194.106利用IIS漏洞对蜜罐主机进行Web探测。随后发现了网站www.worm.com,说明攻击者使用了蠕虫,还有缓冲区溢出攻击等。
端口4899是一个被广泛破解和使用的商业远程控制软件radmin,攻击者通过上传radmin可以实现对靶机的控制。
tcp.dstport4899 && ip.dst == 172.16.134.191
端口445上的数据包即发现了,61.111.101.78向蜜罐放了PSEXESVC.EXE,这是一种蠕虫病毒的特征码,攻击者对系统注入了蠕虫病毒并成功获取了远程调用。所以只有对445端口实施的攻击是成功的。
tcp.dstport445 && ip.dst == 172.16.134.191
三.学习中遇到的问题及解决
- 问题1:刚开始rada一直被杀
- 问题1解决方案:关闭杀毒软件和防火墙
- 问题2:执行tcpflow时未找到命令
- 问题2解决方案:sudo apt-get install tcpflow 安装
四.学习感想和体会
在这一次的试验中,我学习到了许多与恶意代码和僵尸网络有关的知识,同时也成功地完成了对恶意代码的分析。在这一次的试验中,并没有遇到太大的困难,主要是因为我们所掌握的知识比较庞杂,因此编辑的命令也比之前要复杂得多,所以必须要经常在网上查阅相关的知识,才能对实验展开理解并进行操作。总的来说,实验进行得相对比较顺利。