20199326 2019-2020-2 《网络攻防实践》第九周作业
实践内容
9.1 恶意代码基础知识
恶意代码:恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。恶意代码类型如下图
计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类。计算机病毒感染机制示意图如下:
计算机启动过程:
首先通过BIOS定位到磁盘的主引导区,运行存储在那里的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。
引导型病毒的感染目标为主引导区和分区引导区,通过感染引导区上的引导记录,病毒就可以在系统启动时先于操作系统便截取系统控制权。如下图。
计算机病毒与网络蠕虫的特性比对:
僵尸网络是指攻击者处于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。僵尸网络区别于其他攻击方式的基本特性是使用一对多的命令与控制机制,另外,僵尸网络还具有恶意性和网络传播性。僵尸程序则是接受控制后进行攻击和传播
Rootkit:是一种更加高超的恶意代码形态,它能够通过控制目标计算机操作系统的关键组件,来为攻击者提供强有力的手段,用来获取访问并隐藏在系统中。属于特洛伊木马的范畴。
根据操作系统的分层,Rootkit可以运行在两个不同的层次上,即用户模式和内核模式。用户模式Rootkit修改的是操作系统用户态中用户和管理员所使用的一些内建程序和库文件。而内核模式rootkit则直接攻击操作系统最核心的内核,修改内核从而隐藏自身。
应用程序级木马后门,用户模式Rootkit和内核模式Rootkit位置对比,如下图:
实现Windows系统中用户模式Rootkit的三种不同技术:
9.2 恶意代码分析方法
代码分析:按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
恶意代码分析主要包括静态分析与动态分析方法,来对代码进行逆向工程来确定其功能。
恶意代码分析与良性代码分析的区别:
在恶意代码分析网段中,包括了系统主要的四类恶意代码自动化分析组件,分别为静态分析机、动态分析机、网络分析机、综合分析机。
分析流程:先静态分析,然后动态分析。必要时再从二进制层次上对恶意代码进行微观的静态结构及逻辑分析,并结合动态分析中的运行调试机制,来理解恶意代码的细节特征与行为机理。
静态分析技术列表如下图:
恶意代码动态分析技术列表如下图:
实践过程
实践一
声明:
cygwin:是一个在windows平台上运行的类UNIX模拟环境。可以在windows上输入linux的命令。
1.解压老师发的压缩包到win XP attacker上,然后运行命令行,file命令一下恶意程序RaDa.exe。可以看到文件类型,它是PE32位可执行文件。有图形化窗口,用了intel 80386处理器的汇编指令集。
2.打开PEiD中文版,导入这个Rada.exe,查看下基本信息。这里可以看到文件的入口点、偏移、文件类型、EP短、汇编程序以及加壳类型。
节查看器
汇编代码
PE细节
扩展信息,检测为那一行包含了加壳信息,
3.命令行输入strings命令,对恶意程序进行字符串提取。可以发现是乱码。
4.我们使用脱壳工具超级巡警虚拟机脱壳器对恶意程序进行脱壳。得到了unpacked.exe
5.再使用strings对脱壳过的文件进行字符串提取。发现有点正常代码那味了。但是找了半天没找到作者名字。
6.经查阅有关资料,可使用反汇编工具IDA来进一步分析。
7.打开IDA后,点击New。
8.然后选择PE Execulable(PE 可执行文件).
9.找到脱壳过的文件
10.然后疯狂下一步
11.可以看到有很多窗口,最大的窗口显示的是汇编代码
12.我们找到Strings窗口(在右下角的位置),然后就开始看,突然,出现了,是作者的名字,Yeah!
实验结束!!!
实践二
Crack1:
1.我在C盘创建了个Crack目录,把需要用到的两个exe都放里面了,然后命令行输入crackme1,回车,发现他提示了一个信息,如下图,大致意思是他觉得你没输入完全。然后我又尝试跟了几个参数,发现带一个参数和带若干参数的结果不太一样。怀疑可能输入参数是1个
2.打开IDA Pro Free,然后把crackme1.exe导入进去,查看字符串那一栏,发现前四行有不同的英文输入,我之前的测试出现了2个,那么,另外两个是什么意思呢。
3.按如下图所示操作,我们查看他的函数调用
4.放大,再放大,发现有个标志start,然后往下看,在401280这一代码块出现了C语言的一些库,比如strcmp,printf,所以这个代码肯定是C语言写的了石锤。
5.我们返回主界面,找到401280这一代码块,双击。
6.然后从IDA VIEW-A这一栏可以看到,定位到了对应位置的汇编代码部分,然后我们按下图操作,转换成流表。
7.可以看到有许多选择结构。false,true这样子的。大致逻辑就是,先输入参数,参数输的多或少都给你来一句i know you are missing something。输的是1个参数的话,就进入下一个判断结构。
8.从划线的那句话可以看到,正确密码是“I know the secret”
9.输入密码,攻击成功!
Crack2
1.首先由IDA PRO Free打开crackme2.exe。可以看到如下基本信息
2.我们打开函数表,可以看到他的大致结构。关键代码段,401280
3.找到401280代码段,然后查看他的数据流表,如下图。
4.根据划线句,可以得知参数有两个。
5.打开命令行,开始试,我输入了1个参数,2个参数,无参数。发现输入1个参数的时候,进入了下一个判断。
6.然后我们根据判断条件,还有就是根据crack1实验的经验,先试一下密码是不是crackmeplease.exe,发现不是。
7.然后我们深入查看这个判断条件,发现这两快相差了一个add eax 4代码,eax寄存器加4,据此大致判断出需要两个参数,第一个是程序名,第二个是i know...
8.验证一下。发现成功了
实践三
做这个实践的时候,我是懵逼的。本人阅读理解能力不好。下面开始面向问题来实践。
1.第一个问题是求这个恶意程序的摘要,这个简单,我们在cmd里输入md5sum即可求得。如下图
2.第二个问题是问你这个恶意程序是干什么的。我也不知道你是干啥用的。只能硬着头皮分析一波了。打开Process Explorer这个软件,对这个恶意代码进行动态分析,看看他运行的时候干了啥事。如下图,这是脱壳过的程序的字符串。虽然不是乱码了,但是还是很难懂,划线的几句话倒是可以理解,第一句话,访问了个网站,第二句话,进入到tmp目录,第三句话,注册表修改,第四句话,ddos,分布式拒绝服务攻击,看完这句话,我觉得这不是个好程序,有可能目标是造成服务器拒绝服务。
3.第三个问题是说说这个程序有啥不同的特性,看得程序少,我也不知道他跟其他恶意程序有啥不同的。真要说啥特性的话,修改注册表算不算一个特性呢
4.第四个问题,让你识别并解释这个防止分析的技术。这个代码我们从前边实践得出结论,它是经过UPX加壳的。那么UPX是啥呢。UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。说白了,类似压缩软件的技术。
5.第五个问题,让你给这个恶意代码分个类。我觉得吧,从我运行它的情况看,它不像一个木马,电脑没有中招,从他跟网站交互这方面看,还有修改注册表为开机启动,更像是一个后门程序。
6.第六个问题,问你有什么工具与之类似。这我了解的真的少,参考了下同学的博客,Bobax。
7.第七个问题,问你作者是谁,怎么找到的。前面的实践与之重合,这里不再赘述。
使用IDA PRO FREE进行分析的过程:
1.打开字符串这一栏,转换成UNICODE码,可以看到一些基础信息下图包含了前半页的内容,从中观察,就是访问网站,修改注册表。
2.我们深入看看这个代码块吧,发现有很多dword值。
3.转换成数据流表,可以看到几个ip判断。这几个ip都是私有网段的ip。也就是说确保服务器在私有网段内,然后进行下一步操作。暂时就分析出了这些。
实践四
问题1:IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
IRC(Internet Relay Chat),因特网中继聊天。简单来说,就是你在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER
IRC使用的服务器端口有:
6667(明文传输,如irc://irc.freenode.net)、
6697(SSL加密传输,如ircs://irc.freenode.net:6697)等。
问题2:僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。僵尸网络通常用于DDos,海量垃圾邮件等。
问题3:蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信
打开wireshark,设置限定条件ip.src == 172.16.134.191 && tcp.dstport == 6667
然后看看都有哪些IRC服务器与之交互。如下图
确定了5个IP地址。
63.241.174.144
217.199.175.10
209.196.44.172
209.126.161.29
66.33.65.58
问题4:在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
需要安装一个工具tcpflow,设置限定条件为host 209.196.44.172 and port 6667
,如下图。
会产生3个文件,如下图
然后筛选一下有多少主机连接了僵尸网络,筛选条件如下:
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
grep搜索获取昵称输出行sed去除前缀,g表示全局,tr将空格转换为换行,tr -d删除\r,grep -v就是NOT指令,去除空行,sort -u排序并去除重复,wc -l输出行数
筛选结果显示有3462个。
问题5:哪些IP地址被用于攻击蜜罐主机?
使用下面的指令找出所有可能连接的主机IP地址:
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
cut -d是指定字段的分隔符,uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用.使用下面的指令查找端口并输出到2.txt中.
下图列举了一些ip地址
问题6、7:攻击者尝试攻击了哪些安全漏洞?哪些攻击成功了?是如何成功的?
使用snort -r botnet.pcap -c /etc/snort/snort.conf -K ascii
指令先查一下网络流分布情况
发现大部分是tcp包,少部分是udp包。先筛选出这两种协议响应的端口。
tcpdump -r 路径 -nn 'src host 172.16.134.191 and tcp[tcpflags]== 0x12' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
筛选出了tcp的端口。如下图
然后我们修改指令如下
tcpdump -r 路径 -nn 'src host 172.16.134.191 and udp ' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
筛选出了udp端口。
wireshark打开那个监听的文件,首先看看tcp的135和25端口。如下图。发现这俩端口没有特别的信息。
接下来分析445端口,445是SMB协议端口。设置过滤条件为ip.dst==172.16.134.191 and tcp.dstport==445
,结果如下图。在画圈的那里发现了PSEXESVC.EXE,这是一种Dv1dr32蠕虫,这种蠕虫通过IRC进行通信。
然后看看是否攻击成功,查找从蜜罐发往61.111.101.78的信息ip.dst==61.111.101.78
,发现每个IP地址连入的连接都有响应的回应,并且返回信息中含有\PIPE\ntsvcs,这是一个远程调用,所以攻击者肯定是获得了权限,攻击是成功的。
然后看一下80端口,设置一下筛选条件为ip.dst172.16.134.191 and tcp.dstport80 and http
可以看到210.22.204.101向蜜罐发了很多的C,可能在进行缓冲区溢出攻击
最后看一下udp的137端口,设置条件ip.dst == 172.16.134.191 and udp.port == 137
可以看到这里的所有IP地址进行访问的负载都是一样的。这里推测应该是在进行NetBIOS查点
学习感想和体会
好累啊。这次实践量有点大,很多知识都来不及消化,有点囫囵吞枣。实践我是一个一个做的,感到吃力的就是第4个实验,对于linux一些筛选的命令不太熟悉、
学习中遇到的问题及解决
问题:筛选命令不熟悉
需要学习下相关linux知识
参考文献
IRC简介
同学的博客