20199317 2019-2020-2 《网络攻防实践》第9周作业
- 2020 年 4 月 29 日
- 筆記
20199317 2019-2020-2 《网络攻防实践》第9周作业
1.实践内容
1.1 恶意代码基础知识
1.1.1 恶意代码定义与分类
-
恶意代码定义:恶意代码(Malware,或Malicious Code)指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
恶意代码是一组指令集,实现方式可以是二进制执行文件、脚本语言代码、宏代码,或是寄生在其他代码或启动扇区中的一段指令流。 -
恶意代码类型:
1.1.2 计算机病毒
-
计算机病毒的定义:计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组自我复制的一组计算机指令或者程序代码。
-
计算机病毒的基本特性:感染性(最基本特性)、潜伏性、可触发性、破坏性、衍生性。
-
计算机病毒的感染及引导机制:计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类
(1)可执行文件
以可执行文件作为宿主程序,当其被用户运行时,依附在上面的病毒就可以被激活取得控制权。最普遍的三种对可执行文件的感染方式包括前缀感染机制、后缀感染机制和插入感染机制,其感染机制如下:
(2)引导扇区
通过感染引导区上的引导记录,病毒就可以在系统启动时先于操作系统便截取系统控制权。
(3)支持宏指令的数据文件:宏病毒感染数据文件的方式为将自身以宏指令的方式复制到数据文件中,因此当被感染的数据文件被应用软件打开时,将自动执行宏病毒体,完成病毒的引导。 -
计算机病毒的传播机制:病毒需要借助人类的帮助从一台计算机传播到另一台计算机,传播渠道包括移动存储、电子邮件及下载、共享目录等。
1.1.3 网络蠕虫
-
网络蠕虫定义:网络蠕虫是一种可以自我复制的代码,并且通过网络传播,通常无须人为干预就能传播。
-
计算机病毒与网络蠕虫的特性对比:
-
蠕虫的内部组成结构:
(1)“弹头”:获取目标系统访问权,最常用的技术有:缓冲区溢出攻击,文件共享攻击,利用电子邮件传播,利用其他普遍的错误配置。
(2)传播引擎:完成蠕虫样本的传播
(3)目标选择算法和扫描引擎:目标选择算法寻找新的攻击目标,利用扫描引擎扫描扫描每一个由目标选择算法确定的地址,确定是否可以被攻击。
(4)有效载荷:即附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。有效载荷可为空,也包括如下:植入后门,安装分布式拒绝服务攻击代理,组件僵尸网络,执行一个复杂的计算等。
1.1.4 后门与木马
-
后门:后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道。后门工具往往都利用了系统的自启动功能,将自身加入到系统重启机制中。
-
特洛伊木马:简称木马,是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。木马程序可以用于:欺骗用户或系统管理员安装特洛伊木马程序,这样木马程序就通过毫无戒备的用户进入到计算机系统中;隐藏在计算机的正常程序中,将自己伪装成看起来属于该系统,使得用户和管理员不会觉察到它的存在,通常与后门工具结合,成为木马后门。
1.1.5 僵尸程序与僵尸网络
-
僵尸网络的定义:指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。
-
僵尸程序的功能组成结构:
-
僵尸程序的命令与控制机制:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制和基于P2P协议的命令与控制机制这三大类。
1.1.6 Rootkit
-
Rootkit的定义:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
-
Rootkit的特性:恶意的Rootkit程序将自身伪装成恰当且普通的程序,这种伪装和隐藏机制正是特洛伊木马的定义特性;Rootkit还作为后门行使其职能,各种Rootkit通过后门口令、远程Shell或其他可能的后门途径,为攻击者提供绕过正常机制的后门访问通道,这正是后门工具的定义特性;具备替换或修改现有操作系统软件进行隐藏的特性,这才是Rootkit的定义特性。
-
根据操作系统的分层,Rootkit可以运行在两个不同的层次上,即用户模式和内核模式。
用户模式Rootkit修改的是操作系统用户态中用户和管理员所使用的一些内建程序和库文件,内核模式Rootkit则直接攻击操作系统最核心的内核,修改内核从而隐藏自身。
1.2 恶意代码分析方法
1.2.1 恶意代码分析技术概述
- 恶意代码分析的关键点在于构造一个受控的分析环境,在通用代码分析技术中一系列针对二进制程序的静态和动态分析方法基础上,通过进一步的技术手段来应对恶意代码的对抗分析机制,推测出恶意代码的目的,并确定其行为特征。
1.2.2 恶意代码分析环境
- 恶意代码分析环境有:恶意代码发烧友的分析环境,基于虚拟化构建恶意代码分析环境,用于研究的恶意代码自动分析环境。
1.2.3 恶意代码静态分析技术
-
利用静态分析方法,能够对恶意代码的特性和目的有一个大体的了解,甚至能够识别出恶意代码的各个组成部分;而利用动态分析,实际上是激活一个受控分析实验环境中的代码,当一个代码在实际系统中运行时,我们能够更加迅速地了解其行为。
-
恶意代码静态分析的主要技术手段:
1.2.4 恶意代码动态分析技术
-
在通过一些静态分析方法查看与分析了恶意代码示例,接下来将使用动态分析技术,将这些恶意代码激活,以观察它们是如何活动的。在恶意代码分析的过程中,我们的恶意代码分析实验环境一定要与业务网络和互联网完全断开,并在分析完之后尽快恢复恶意代码运行平台,以清除恶意代码所遗留的文件和系统影响。
-
在恶意代码动态分析时,需要使用一些监控软件和观察恶意代码的运行情况,常用恶意代码动态分析监控技术和工具为:
-
恶意代码动态分析的主要技术手段有:
2.实践过程
实践一:恶意代码文件类型识别、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下。
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具。
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理。
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
实践过程
(1)在windowsXP下的命令行中使用file
命令对rada恶意代码进行文件格式的识别,如下:
可以看到,rada的文件类型为32位操作系统下的PE文件,有图形化界面。
使用PEiD对rada进行加壳识别,PEiD是用来查看Windows PE文件基本信息的工具
可以看到文件的入口点、文件偏移、EP段及加壳类型(UPX壳)
(2)使用strings RaDa.exe
命令查看脱壳之前的rada.exe中的可打印字符串
可以看到基本都是乱码,而原因是该文件被加了壳
使用自动化工具——超级巡警之虚拟机自动脱壳器对该文件脱壳,如下:
然后使用strings RaDa.exe
命令查看脱壳之后的rada.exe中的可打印字符串
可以看到,产生了大量函数调用名及其他有用字符串。
(3)运行rada程序,并使用软件process explorer
进行监控,查看程序属性,发现作者名字Raul siles & David Perze
,写于2004年。
实践二:分析Crackme程序
实践挑战:使用IDA Pro静态或动态分析crackmel.exe 与crackme2.exe,寻找特定的输入,使其能够输出成功信息。
实践过程
(1)在windowsXP下的cmd中直接运行crackme1.exe,尝试输入参数,如下:
可以确定该程序仅带有一个参数。
(2)使用IDA pro工具打开crackme1.exe
首先查看程序中的明文字符串,发现了两个在(1)中测试时没有出现过的字符串:I know the secret
、You know how to speak to programs,Mr Reverse Engineer
。猜测前者为密码,后者为成功的提示语。
验证猜想,如下:
猜测验证成功。
(3)接下来进行分析。首先看函数调用图,view——graphs——function calls
。
可以看到strcmp
,还有printf
和fprintf
,即sub_401280为关键代码。
重点分析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
。
(4)在windowsXP下的cmd中直接运行crackme2.exe,尝试输入参数,如下:
可以确定该程序仅带有一个参数。
(5)使用IDA pro工具打开crackme2.exe
首先查看程序中的明文字符串,猜测I know the secret
为密码,crackmeplease.exe功能未知。
(6)进入分析阶段。首先看函数调用图发现关键函数:
发现关键函数还是sub_401280。
分析sub_401280,找到sub_401280函数的流程图,如下:
可以看到,该函数首先判断参数是否为2,若参数不为2,输出I think you are missing something;
若参数为2,则进行crackmeplease.exe的比较,猜测密码为crackmeplease.exe,于是
失败。。。
试着观察 crackmeplease.exe 程序段和 I know the secret 程序段,发现I know the secret 程序段多了一条指令add eax,4
,如果I know the secret是第一个参数,那么减就是第0个参数,即程序名
验证猜想,把程序名改为crackmeplease.exe试验一下,如下:
通过了第二层判断。
接着验证crackmeplease.exe "I know the secret"
验证成功。
实践三:分析一个自制恶意代码样本rada,并撰写分析报告
待分析二进制文件位置: rada.zip, 警告这个二进制文件是一个恶意代码,因此必须采用一些预防措施来保证业务系统不被感染,建议在一个封闭受控的系统或网络中理这个未知的实验品。
回答问题:
- 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
- 找出并解释这个二进制文件的目的。
- 识别并说明这个二进制文件所具有的不同特性。
- 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
- 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
- 给出过去已有的具有相似功能的其他工具。
奖励问题: - 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
实践过程
(1)使用md5sum
命令查看摘要信息, md5摘要值为caaa6985a43225a0b3add54f44a0d4c7
(2)打开process explorer软件进行监测,启动恶意软件rada。右键查看其属性,可以发现rada启动后有如下行为:
1)通过HTTP协议请求10.10.10.10\RaDa\RaDa_commands.html
2)将文件RaDa.exe复制到了C:\RaDa\bin目录下,并且新建了temp目录。
3)修改注册表,将rada设置为开机启动。
依次按照“开始”——>“运行”——>输入“regedit”——>回车打开注册表编辑器
,然后依次打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
查看自启动项
可以看到加入了RaDa: C:\RaDa\bin\RaDa.exe。
接着可以看到该程序对主机实行了DDOS拒绝服务攻击。
总结:该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,于是猜测这应该是一个后门程序。
继续往下看,可以看到进行了对注册表的读写和删除操作
rada一直在后台运行,不会弹出任何窗口,它可以支持exe、put、get、screenshot、sleep等指令。
(3)对该文件脱壳之后,利用IDA Pro进行分析,首先就应该看字符串。在Type下筛选unicode类型
这一步重点分析VMware tools
双击字符串进行定位,找到其对应的函数sub_404FB0
。
接下来对函数sub_404FB0进行分析
可以看到,这个字符串被拷贝到变量dword_40C070,搜索这个变量对应的函数,找到是sub_40AAA0
查看函数sub_40AAA0流程图
可以看到,这个函数首先进行网卡配置信息的查询(Select * from win32_networkadapterconfi),然后确认dword_40C070
对应的字符是否存在,若存在,则判断vmware tools是不是在注册表里面。
我们注意到当--authors
在我们的虚拟机上输出的是Unknow argument,可是我们确实也能在明文字符串信息中找到作者的信息。这个时候我们观察到--authors
参数对应的处理函数是sub_40B010,找到之后,我们打开Call Graph进行观察,我们可以看到,这里调用了sub_40AAA0
函数,也就是上面虚拟机对应的处理函数。然后我们发现,这里的处理是如果是虚拟机就输出Unknow argument
,如果不是,就输出正确的作者信息。这种方式的采用是为防止被分析。
(4)从前边的分析可以看出,这个样本不具有传播和感染的性质,也没有将自己伪装成有用的程序以欺骗用户运行,所以也不属于木马,所以可能是后门程序
(5)与其相似的工具还有2004年发现的木马Bobax,还有特洛伊木马Setiri及其前辈GatSla。开发作者在实践一已经给出。
实践四: Windows 2000系统被攻陷并加入僵尸网络
案例分析挑战内容:
在2003年3月初,Azusa Pacific大学蜜网项目组部署了一一个未打任何补丁的Windows2000蜜罐主机,并且设置了一个空的管理员密码。在运营的第一一个星期内,这台蜜罐主机就频繁地被攻击者和蠕虫通过利用几个不同的安全漏洞攻陷。在一次成功的攻击之后,蜜罐主机加入到一个庞大的僵尸网络中,在蜜罐主机运营期间,共发现了15164 个不同主机加入了这个僵尸网络。这次案例分析的数据源是用Snort工具收集的该蜜罐主机5天的网络流日志,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和一些其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。你的任务是分析这个日志文件并回答以下给出的问题。
- IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息? IRC一般使用哪些TCP端口?
- 僵尸网络是什么?僵尸网络通常用于什么?
- 蜜罐主机(IP地址: 172.16.134.191) 与哪些IRC服务器进行了通信?
- 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 哪些IP地址被用于攻击蜜罐主机?
- 攻击者尝试攻击了哪些安全漏洞?
- 哪些攻击成功了?是如何成功的?
实践过程
(1)IRC,即因特网中继聊天,IRC协议基于客户端——服务端模型,用户运行IRC客户端软件连接到IRC服务器上,IRC服务器通过互相连接可构成庞大的IRC聊天网络,并将用户的消息通过聊天网络发送到目标用户或用户群。
申请加入的时候要发送口令、昵称和用户信息:USER <username> <hostname> <servername> <realname>
、PASS <password>
、NICK <nickname>
。
明文传输时使用tcp 6667端口,ssl加密时用6697端口。
(2)僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。
僵尸网络通常用于拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿等
(3)使用Wireshark打开数据文件,因为IRC一般通过6667端口,于是设置过滤条件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)使用命令tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'
(读取文件,筛选host和端口6667后进行分流)
执行完后,将获得三个文件:172.016.134.191.01152-209.196.044.172.06667
、209.196.044.172.06667-172.016.134.191.01152
和report.xml
。
我们先看一下report.xml
这里提到了172.016.134.191.01152-209.196.044.172.06667和209.196.044.172.06667-172.016.134.191.01152这两个文件的相关信息,可以看到如下图的内容,包括上述双方的ip地址,端口,mac地址,通信时间
因为我们要找的是访问 209.196.44.172的主机,故此处着重查看209.196.044.172.06667-172.016.134.191.01152文件,找到访问209.196.44.172的主机数。相关指令有:
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
# 指令注释
首先这个指令肯定是管道连接的。
第一条是cat命令,连接209.输出文件;
第二条grep搜索获取昵称输出行;
第三条sed去除前缀,最后的g是全局的意思;
第四条tr将空格转换为换行;
第五条tr -d删除\r;
第六条grep -v就是NOT指令,去除空行;
第七条sort -u排序并去除重复;
最后一条wc -l输出行数。
看到输出,只统计出了5次结果。但正确结果应该是3457,不知道是为什么。
(5)使用下面的指令查找端口并输出到1.txt中
tcpdump -n -nn -r botnet_pcap_file.dat '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
# 指令注释
cut -d是指定字段的分隔符;
uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。
查找到148个被攻击的端口
接下来找出所有的可能连接的主机的IP地址。输入下面指令,这个指令的作用就是将连接IP地址输出到2.txt中:
tcpdump -n -nn -r botnet_pcap_file 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt
# 指令注释
awk -F就是指定分隔符,可指定一个或多个,print后面做字符串的拼接。
总共有165个主机可能被用于入侵蜜罐。
(6)使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii
指令先查一下网络流分布情况。我们发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口。
利用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端口。
可以看到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)号端口响应。
接下来对上述端口进行分析,udp 137号端口是个在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是NetBIOS查点。
以tcp.port == 25 || tcp.port == 135
为过滤条件查看135号端口和25号端口
我们看到只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对这两个端口进行了connect扫描。
接下来查看80端口,首先筛选tcp.dstport==80 && ip.dst == 172.16.134.191
。
可以看到,首先连接最多的就是24.197.194.106,他的行为就是不停的用脚本在攻击IIS服务器的漏洞,从而获取系统权限,正是因为用的脚本,所以才会有这么多记录。
第二个,是68.169.174.108访问的80端口,属于正常的HTTP访问。最后还有一个192.130.71.66也是一个正常的访问。
第三个,是210.22.204.101访问的80端口,大量“C”表明攻击者是想通过缓冲区溢出攻击来获得一个命令行。
第四个,是218.25.147.83访问的80端口,大量“N”的出现,初步怀疑是缓冲区溢出攻击。但是继续往下看,你会看到c:\notworm,百度后发现是红色代码蠕虫攻击。
最后,查看80端口有没有攻击成功了,我们通过蜜罐主机80端口向外的流量进行分析,设置过滤条件tcp.srcport80 && ip.src 172.16.134.191 && http
发现蜜罐主机做的几次回应均为一个iis服务器的默认页面,所以80端口的这些攻击均失败。
接下来是TCP 139号端口
大部分都是连接的,但是很多空会话。同样这个也没有成功,这个应该是个SMB查点。
接下来分析TCP 445端口。
这个端口连接非常多,同时我们也能看到许多\samr, \srvsvc,查询字符串后发现这是一个PSEXESVC.EXE字符串。
然后Wireshark中也能找到,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。
接下来找出口流量,发现每个IP地址连入的连接都有响应的回应,并且返回信息中含有\PIPE\ntsvcs,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限,因此这个攻击成功的。
最后分析TCP 4899端口。
我们发现,只有一个IP访问过,即210.22.204.101。
查询可得4899端口是一个远程控制软件radmin服务端监听端口。
3.学习中遇到的问题及解决
- 问题1:实践三中,做到Type下筛选unicode类型时,不知道怎么修改。
- 问题1解决方案:选择字符串界面的type字段,右键选择Setup,在出现的Setup strings window 界面选择Unicode
4.实践总结
这次实践的难度太大了,虽然做完了实践但还是有很多地方不理解。。。
参考资料
- [《网络攻防技术与实践》(诸葛建伟著)]
- [老师的给的指导视频]
- [ 多位同学的博客 ]