20212928 2021-2022-2 《网络攻防实践》第10周作业
1.实践基础知识
1)恶意代码基础知识述
- 恶意代码:恶意代码(Unwanted Code)是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,
包括所有可能与某个组织安全策略相冲突的软件 - 恶意代码的类别:
- 计算机病毒:是编制者在计算机程序中插入的破坏计算机功能或者数据的代码,能影响计算机使用,能自我复制的一组计算机指令或者程序代码
- 蠕虫:蠕虫病毒是一种常见的计算机病毒。它是利用网络进行复制和传播,传染途径是通过网络和电子邮件。它能传播它自身功能的拷贝或它的某些部分到其他的计算机系统中
(通常是经过网络连接)。与一般病毒不同,蠕虫不需要将其自身附着到宿主程序,蠕虫病毒一般是通过1434端口漏洞传播 - 恶意移动代码:恶意移动代码是一段计算机程序,能够在计算机或网络之间传播,未经授权、故意修改计算机系统。一般来说,公认的恶意移动代码的变异型可以分为3类:
病毒类、蠕虫类和木马程序 - 后门:后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。
但是,如果这些后门被其他人知道,或是在发布软件之前没有删除后门程序,那么它就成了安全风险,容易被黑客当成漏洞进行攻击 - 特洛伊木马:如今黑客程序借用其名,有“一经潜入,后患无穷”之意,特洛伊木马没有复制能力,它的特点是伪装成一个实用工具,诱使用户将其安装在PC端,从而秘密获取信息
- 僵尸程序:僵尸程序通过聊天室,文件共享网络感染存在漏洞的计算机。这些被感染的计算机所保存的 信息都可被黑客随意取用
- 内核套件:用以获取并保持最高控制权的一类恶意代码
2)恶意代码发展趋势
- 恶意代码的复杂度和破坏力逐渐增强
- 恶意代码技术的创新越来越频繁
- 关注重点从计算机病毒转移到蠕虫和内核级攻击工具
3)计算机病毒
-
计算机病毒基本特性
感染性:最本质的特性
潜伏性:感染后并非立即开始行动
可触发性:满足特定条件触发破坏机制
破坏性:目的有二,一种为炫耀技术,另一种为删除文件、格式化磁盘的真实破坏
衍生性:一种病毒可衍生为多种病毒 -
计算机病毒传染目标
可执行文件
引导扇区
支持宏指令的数据文件 -
计算机病毒传播机制
计算机病毒被触发后,就会寻找宿主程序并开始复制(这个过程跟人类感染病毒是类似的,病毒疯狂复制RNA),病毒一般寄生在上述三个位置:
即可执行文件、引导扇区、支持宏指令的数据文件,同时它的传播需要借助人类,而不是自动从一台电脑到另一台电脑 -
计算机病毒传播渠道
计算机病毒的传播渠道主要是移动存储、电子邮件下载、共享目录等
4)网络蠕虫
-
网络蠕虫的特性
网络蠕虫起步晚,但破坏性远超前几代,且无需借助人类外力即可自动复制传播,且网络蠕虫的传播必须借助网络,下图为网络蠕虫与计算机病毒的区别
-
网络蠕虫组成结构
蠕虫病毒由两部分组成:一个主程序和另一个是引导程序。主程序一旦在计算机中得到建立,就可以去收集与当前机器联网的其他机器的信息,它能通过读取公共配置文件并检测当前机器的联网状态信息,
尝试利用系统的缺陷在远程机器上建立引导程序。就是这个一般被称作是引导程序的小程序,把蠕虫病毒带入了其他的机器中。如果细分主要是五个部分:弹头、传播引擎、目标选择算法、扫描引擎、有效载荷(类似于导弹)
5)后门与木马
- 两者异同
单论定义而言,后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法,而木马则是一种隐藏恶意功能“装好人”的软件。
将提供对受害计算机远程控制的程序均视为木马是错误的,他们应该被视为后门,在我看来,木马属于一个更小的概念,即将后门工具伪装成良性程序,才应该是木马。
6)僵尸程序
- 什么是僵尸网络?
僵尸网络是网络蠕虫、后门程序、特洛伊木马等传统恶意代码形态的基础上发展融合而成的新型攻击方式,其攻击者出于恶意目的,传播僵尸程序控制大量主机它区别于其他攻击方式的特性是一对多的命令与控制机制。 - 僵尸程序功能组成结构
其主要分为主体功能模块和辅助功能模块,其中主体功能模块主要包括命令与控制模块和传播模块,辅助功能模块主要包括信息窃取模块、主机控制模块、下载更新模块、防分析检测模块 - 僵尸程序工作机制
渗透攻击
加入服务器
动态影射至IRC服务器
加入IRC信道
监听命令
接收命令
执行攻击
7)恶意代码分析方法
恶意代码分析与针对良性代码和软件的程序分析技术,都可以采用通用的代码分析技术来作为基础,主要包括静态分析和动态分析方法,来对代码进行逆向工程(Reverse Engineering)来确定其功能。
-
恶意代码分析环境
恶意代码发烧友的分析环境
基于虚拟化构建恶意代码分析环境 -
恶意代码静态分析技术
反病毒扫描
文件格式识别
字符串提取分析
恶意代码实例名
帮助或命令行选项
用户会话
后门口令
相关URL信息、Email地址
包含库文件和函数调用
二进制结构分析
反汇编与反编译
代码结构与逻辑分析
加壳识别与代码脱壳 -
恶意代码动态分析技术
基于快照对比的分析方法和工具
系统动态行为监控方法:文件行为监控软件、进程行为监控软件、注册表监控软件、本地网络栈行为监控软件
网络协议栈监控方法
沙箱技术
动态调试技术
2.实践过程
(1)动手实践任务一
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
具体步骤如下:
1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
-
打开WinXP Attacker,输入指令cd ,进入所提供的rada.exe目录,输入file rada.exe,查看rada的文件类型为32-bit
操作系统下的PE文件,并且有GUI界面。
-
输入strings RaDa.exe查看RaDa.exe中可打印字符串,发现都是乱码,推测是加壳导致,如下图:
2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理。
-
查壳。使用PEiD工具,查看rada的基本信息。可以看到文件的入口点为0000FD20、文件偏移为00004120、EP段为JDR1,加壳类型为UPX壳
-
脱壳。用超级巡警工具对RaDa.exe文件进行脱壳。
3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁。
-
输入命令strings RaDa_unpacked.exe,查看脱壳后的rada.exe中可打印的字符串,发现有大量的函数调用名。
打开IDA Pro Free 选择脱壳后的文件
- 选择执行,一直选择下一步,可以看到作者信息如下图:
(2)动手实践任务二:分析Crackme程序
任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
步骤如下:
1)* 首先进入文件夹crackeme,用ls进行查看本文件夹有哪些文件,如下图
-
试探输入格式:如下图
-
使用IDA pro Free工具打开crackme1.exe进行分析,选择文件类型为PE。在Strings页面可以看到该程序中出现的明文字符串,发现了刚刚
没测试得到的另外两个字符串“I know the secret”和“You know how to speak to programs, Mr.Reverse-Engineer”,初步猜测前者是
我们需要的口令,后者是口输入令正确时的程序反馈信息。
-
接下来,我们输入crackme1.exe “I know the secret”验证刚刚口令为“I know the secret”的猜想,得到了程序反馈信息
“You know how to speak to programs, Mr.Reverse-Engineer”,说明猜想正确
2)查看函数调用图
按照以下步骤进行,view--graphs--function calls,打开function call,sub_401280为关键程序段,stump为c语言编写,
使用字符串匹配密码。发现输出函数fprintf和printf即为程序输出,则sub_401280即为核心函数。
-
按照以下步骤进行,view--graph--Flow chart,打开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”,与前面的猜想一致。
-
参数个数不匹配的输出:
*猜测正确的为密码
-
密码错误的输出
-
密码正确的输出
3)进行验证,如下图,说明验证成功。
下面分析crackme2.exe
-
输入命令cd 桌面,cd crackeme 进入文件,之后输入试探命令,如下图
-
接下来使用IDA pro Free工具打开crackme2.exe进行分析,选择文件类型为PE。在Strings页面可以看到该程序中出现的明文字符串
可以发现前五个中有两个是见过的, -
按照以下步骤,view--graphs--function calls查看函数调用图,查看字符串操作输出的相关的函数,重点查看程序段401280
-
查看汇编代码:
参数位错误,则执行下图操作
若和密码匹配很像,我们猜测,程序名是匹配的
若参数位数对,但程序名不对,则执行下列操作
若参数位数对,程序名也对,则执行下列操作
接下来对密码进行判别
密码错误的输出
进行验证:
验证程序名错误的输出
改名操作:
验证程序名正确,密码错误
验证程序名正确,密码正确
验证成功。
(3)分析实践任务一:
分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
在命令行输入md5sum RaDa.exe指令得到其md5摘要值
2)找出并解释这个二进制文件的目的;
-
首先,打开实践可能用到的软件,如下图:
-
打开WireShark进行监听,运行之后打开Process Monitor,输入过滤条件 Process Name is RaDa.exe,并运行RaDa,如下图:
-
可以看到程序文件RaDar.exe复制到了C:\RaDa\bin目录下,并且新建了temp目录,并且可以看到很多注册表的操作,如下图:
-
之后我们可以验证确实把RADa.exe复制到了C:\RaDa\bin目录下,如下图所示:
-
往下分析发现该恶意程序中可执行DDos拒绝服务攻击,如下图
-
发现该恶意程序对主机注册表进行了读写和删除操作,如下图
-
在命令行regedit 进入注册表,打开注册表杳看并未发现有关于RaDa的信息,恶意程序已经删除了注册表信息
-
接下来执行了上传、下载、休眠,屏幕截图等命令;
-
之后会发现一个作者信息,如下图
-
查询受害主机上可用的网路适配器的数据库查询语句,如下图:
3)识别并说明这个二进制文件所具有的不同特性;
-
输入file RaDa.exe识别出这是32位PE文件,并且还是GUI文件,如下图:
-
查看process explore,发现该恶意程序用http连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页上,然后分别下载和上传某些文件。
并且在受害主机C盘目录下创建一文℃:/RaDa/tmp"来保存其下载的文件;
4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
在前面的实践一中可以看出,该文件采用UPX对文件进行加壳。
5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫。然后它也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马。可以认为他是一个后门程序或者僵尸程序。
6)给出过去已有的具有相似功能的其他工具;
Bobax,特洛伊木马Setiri。
7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以调查出这个二进制文件的开发作者,脱壳之后,用strings命令分析就行,实践一进行了详细的介绍。
(4)分析实践任务二:
Windows 2000系统被攻破并加入僵尸网络
任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,
同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理非常简单,只要在自己的PC上运行客户端软件,然后通过因特
网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为
"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称)。 - 当IRC客户端申请加入一个IRC网络时要发送口令、昵称和用户信息:USER 、PASS 、NICK 。
- IRC服务器通常在TCP6667端口监听,ssl加密时用6697端口,也会使用6660—6669端口
2)僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制
的网络。攻击者通过各种途径传播僵尸程序感染互联网上的大量主机,而被感染的主机将通过一个控制信道接收攻击者的指令,组成一个僵尸网络。 - 僵尸网络通常用于折叠拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿。
3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 在wireshark中打开分下材料botnet_pcap_file.dat,输入筛选条件ip.src == 172.16.134.191 && (tcp.dstport == 6667 or tcp.dstport == 6697),
筛选源地址为172.16.134.191、目的端口为6667或6697的数据包,如下图:分析可得蜜罐主机(IP地址:172.16.134.191)与66.33.65.58,
63.241.174.144 ,217.199.175.10,209.196.44.172, 209.126.161.29,进行了通信。
4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
-
首先输入命令 sudo apt-get install tcpflow,进行tcpflow软件的安装
-
可以通过查找这段观察期间不同昵称的出现个数来判断。进入botnet_pcap_file.dat目录,输入命令
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",查看一共产生了五个文件,
因为我们要找的是访问 209.196.44.172的主机,所以后面着重看第一个文件。
-
输入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,可以发现共有3461个不同的主机访问了以209.196.44.172为服务器的僵尸网络
5)那些IP地址被用于攻击蜜罐主机?
使用tcpdump进行分析,输入tcpdump -n -nn -r /home/kali/Desktop/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 -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,只有137端口,说明攻击者成功访问了137号端口。
137端口主要用于“NetBIOS Name Service”(NetBIOS名称服务)。。
7)那些攻击成功了?是如何成功的?
-
使用wireshark,逐一对筛选出的端口进行排查,
输入指令ip.addr==172.16.134.191 && tcp.port == 135对135端口进行排查,由以下截图发现进行了三次握手
-
输入指令ip.addr==172.16.134.191 && tcp.port == 139对139端口进行排查,由以下截图发现了TCP协议、SMB协议和NBSS协议
-
输入指令ip.addr==172.16.134.191 && tcp.port == 25对25端口进行排查,由以下截图发现进行了三次握手
-
输入指令ip.addr==172.16.134.191 && tcp.port == 445对445端口进行排查,由以下截图发现了可疑程序PSEXESVC.EXE
PSEXESVC.EXE:在横向移动过程,攻击者通常会使用PsExec在远程主机执行命令。在客户端执行psexec.exe后,如果服务器认证成功,
会将psexesvc.exe上传到服务端的ADMIN$目录并作为服务运行,在执行完命令后删除对应的服务和psexesvc.exe。
通过对客户端和服务端的事件日志、注册表、文件系统进行分析,可以从客户端主机获得连接的目的主机,连接时间等信息;从服务端主机可以获得连接的客户端信息,连接时间等信息。
通过下图中看出,返回分组中包含\PIPE\ntsvcs,说明这次的攻击成功。
-
输入指令ip.addr==172.16.134.191 && tcp.port == 4899对4899端口进行排查,由以下截图发现了进行三次握手
-
输入指令ip.addr==172.16.134.191 && tcp.port == 80对80端口进行排查,由以下截图发现攻击者进行了缓冲区溢出攻击
但是从下图可以分析得出,发现www.worm.com,说明攻击者使用了蠕虫,但是根据tcp流内容分析,攻击者可能没有攻击成功。
综上所述,攻击者对445端口的漏洞发起的PsExec蠕虫攻击是成功的。在这次攻击中,攻击者使用PsExec.exe,
获得了远程主机的访问权限,其他端口都没有攻击成功。
3.学习中遇到的问题及解决
问题1:下载tcpflow一直失败,
解决1:尝试各种方法都不行后,最后一想是网络配置的问题,忘记改为桥接模式了,改成后即可。
4.学习感想和体会
本次实验内容比较多,感觉视频的顺序有点乱,导致刚开始做的时候不太顺利,做的过程中也是出现了一些的问题,但自己本次实验
掌握了更多的分析工具,比如PEiD、超级巡警脱壳机、IDA Pro、process explorer等。