学号 2019-2020-2 《网络攻防实践》第9周作业
1.实践内容
恶意代码基础知识
恶意代码定义与分类
- 恶意代码定义:使计算机按照攻击者的意图执行以达到恶意目标的指令集
- 恶意代码类型:恶意代码可以根据其执行方式、 传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶总移动代码、 特洛伊木马 、 后门、 僵尸程序、 内核套件等
- 计算机病毒的感染及引导机制:可执行文件、引导扇区、支持宏指令的数据文件
- 计算机病毒的传播机制
恶意代码的特性
计算机病毒
计算机病毒是指编制或者在计算机程序中插入的, 破坏计算机功能或数据、影响计算机仗用, 并能自我复制的一组计算机指令或者程序代码
- 计算机病毒基本特性:感染性、潜伏性、可触发性、破坏性、衍生性
- 计算机病毒的传播渠道包括移动存储、电子邮件及下载、共享目录等。
网络蠕虫
-
网络蠕虫是一种通过网络自主传播的恶意代码
-
网络蠕虫的基本特性:
-
网络蠕虫的组成结构:
后门与木马
- 后门:对千后门工具而言, 攻击者希望它能够持续地在目标系统中运行, 并且在系统重启之 后能够仍然随着系统进行启动, 这样才能够保证他对目标系统的随时控制
- 特洛伊木马:攻击者设计出了无数的木马欺骗和伪装技术方法, 将恶意功能隐藏在木马程序中, 并植入到目标计算机系统中,这些技术包括简单而有效的命名伪装游戏、使用软件包装工具、 攻击软件发布站点、 代码下毒等。
僵尸程序与僵尸网络
- 僵尸网络(botnet)是在网络蠕虫、特洛伊木马、 后门工具等传统恶意代码形态的基础 上发展融合而产生的一种新型攻击方式。
- 僵尸程序的命令与控制机制:①基于IRC协议的命令与控制机制②基于HTTP协议的命令与控制机制③基千P2P协议的命令与控制机制
Rootkit
通过控制目标计算机操作系统的关键组件, 来为攻 击者提供强有力的手段, 用来获取访问并隐藏在系统中
恶意代码分析方法
恶意代码静态分析技术
- 反病毒软件扫描:反病毒软件进行扫描的方法充分利用了反病毒业界对恶意代码样本的积累性专业知识、 经验和分 析实践, 能够为你自己的分析提供一些有用的信息帮助。
- 文件格式识别:文件格式识别能够让我们快速地了解待分析样本的文件格式
- 字符串提取分析:利用一些专用的字符串提取工具, 我们可以彻底地搜查目标程序, 并提取出程序中3个或更多的连续可打印字符所组成的全部字符串
- 二进制结构分析:事实上, 我们先前介绍的字符串提取工具 strings 命令只是 binutils家族的一员, 除此之外,binutils还有两个我们经常会使用的命令, 叩nm 和objdump。
- 反汇编与反编译:反汇编与反编译是对二进制程序编译链接的逆过程, 反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程, 而反编译则更进一步, 期望将汇 编代码再进一步还原成高级编程语言形式的源代码。
- 代码结构与逻辑分析:在代码结构与逻辑分析过程中, 一些功能强大的逆向分析工具, 如 IDA Pro, 为分析师提供了一些辅助分析功能, 从而帮助分析师更好地理解恶意代码的程序结构与功能逻辑
- 加壳识别与代码脱壳:对于恶意代码的加壳识别,可以使用如PE心、pe-scan 、 PE Sniffer、fileinfo 、 Exeinfo PE 、 DiE、 FastScanner 、 FFl等文件格式识别工具, 这些工具除了能够识别文件格式类型之外,还能给出文件使用的加壳软件、采用的编译器等额外信息。在识别出恶惹代码所使用的加壳工具之后 , 下一步就是进行脱壳, 恢复出恶意代码加壳之前的原有形态,对于常见的加壳工具如UPX、 PEPack、 ASPack等, 拥有相应的脱壳工具
恶意代码动态分析技术
- 基千快照比对的方法和工具:针对恶意代码动态分析的快照比 对方法也是首先对原始的的系统资源列表做一个快照, 然后激活恶意代码并给予充分的运行时间, 之后我们再对恶意代码运行后的系统资源列表进行快照, 并对比两个快照之间的差异, 从而获取恶意代码行为对系统所造成的影响
系统动态行为监控方法
系统动态行为监拧通常基于行为通知(Notification)机制或者API劫持技术(API Hooking)实现
网络协议栈监控方法
对千恶意代码的网络行为,除了从恶意代码运行平台本地的网络协议栈进行监拧之外。
沙箱技术
沙箱技术提供了受限制的执行环境, 使得在沙箱中运行的代码不能够修改用户系统, 从而提供了一个用于运行不可信程序的安全环境。
动态调试技术
动态调试是在程序运行时刻对它的执行过程进行调试 (debugging) 的技术过程
2.实践过程
2.实践
2.1动手实践:恶意代码文件类型识别、脱壳与字符串提取
1.首先使用file命令来分析对应的恶意程序,在cmd中cd切换到桌面/test即恶意程序所在的目录,执行指令 file RaDa.exe
,然后得到下图所示的信息。
2.然后再使用执行指令 strings RaDa.exe
来查看该程序可打印字符串,执行指令后发现可打印的字符串为乱码,无法分析出有效信息,所以判断该程序采用了加壳防止反汇编的技术,因此我们下一步要分析该程序使用了哪种加壳工具。
3.使用PEiD工具来查看该程序使用的加壳工具,框出地方的信息即为该程序使用的加壳工具。注:PEiD是用来查看Windows PE文件基本信息的工具。
4.使用超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,故可以实现自动脱壳,并在恶意程序同目录下生成了一个脱壳以后的程序。
5.此时再次使用PEiD工具来查看脱壳后的程序,可以看到编写该程序所使用的语言和开发工具为VB6.0
6.使用strings命令查看脱壳后的rada.exe中可打印的字符串,可以发现刚刚的乱码变成了函数调用名。
7.运行rada程序,并使用软件process explorer进行监控,查看程序属性,发现作者名字Raul siles&David Perze,写于2004年。
2.分析Crackme程序
1.首先使用file命令来分析该恶意程序的大概信息,切换到恶意程序所在目录,分别执行 file crackme1.exe
和 file crackme2.exe
来查看两个文件信息,两个文件均为windows系统下运行的32位可执行程序,且没有图形界面,仅使用控制台操作
2.题目要求寻找特定输入,使其能够输出成功,那么也就是提示了我们这俩程序是有输入值得,但是不知道有几个输入值和输入值的数据类型,我们开始一个一个尝试,分别尝试了输入一个整数,两个整数,一个字符串,多个字符串和数字;观察其输出,只有两种,当输入为一个值时,输入是一样的,当输入多个值时(2个3个...个)输出反馈是一致的,可以断定该程序的输入为一个参数,但是不清楚输入值数据类型为字符还是数字
3.接下来用IDA打开该恶意程序进行分析,可以看到有“GCC”,说明该恶意程序是用C语言编写的
4.接着查看程序中的明文字符串,发现了两个测试程序时没有出现过的字符串 I know the secret
、 You know how to speak to programs,Mr Reverse Engineer
。猜测前者为我们需要的口令,后者为口令成功输入的反馈。
5.发现我们的猜想是对的。
6.同样使用IDA工具来分析第二个恶意程序,一开始怎么输入都不可以,在网上查询了关于这个恶意软件的博客,发现需要首先复制,然后再执行,就会输出一个新的反馈信息。
3.分析一个自制恶意代码样本rada,并撰写分析报告
1.首先使用MD5对该恶意程序进行摘要信息分析
2.执行 file RaDa.exe
分析该恶意程序的运行环境,结果为win32位程序,有图形界面
3.我们打开之前用过的监视工具process explorer 和wireshark开启监听,点击运行恶意程序RaDa_uppacked.exe,然后首先分析其程序运行详细信息如下:该恶意程序使用http连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页上,然后分别下载和上传某些文件,并且在受害主机C盘目录下创建一个文件夹“C:/RaDa/tmp”来保存其下载的文件,往下分析发现该恶意程序中可执行DDos拒绝服务攻击
4.继续往下分析,发现该恶意程序对主机注册表进行了读写和删除操作.
5.往下分析发现了一些看似指令的字符,其中就认识几个,put,get,sleep,screenshot猜想其指令意思分别是上传,下载,休眠,屏幕截图
6.接着发现了一条和数据库查询语句相关的信息
1.这个二进制文件摘要信息:
MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7
PE格式:运行在Windows 2000, XP and 2003及以上版的操作系统中
使用了UPX加壳工具进行了加壳处理
2.这个恶意文件的目的
该文件是一个http后门程序,当连接上互联网时,该程序就会通过http请求连接到指定主机,进行接受攻击者指令操作
3.识别并说明这个二进制文件所具有的不同特性
软件运行时,在C盘下创建了一个RaDa目录,里面一个bin文件夹,一个tmp文件夹,tmp是用来临时存储从目标主机下载到受害主机的文件和从受害主机获取的文件信息。bin文件夹里面安装了一个RaDa.exe可执行文件。
4.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
该文件使用了UPX加壳,不经过脱壳处理是无法进行反编译分析的,直接提取的字符串信息为乱码,所以这边如果在实验三运行原程序,process explorer 也会显示乱码。
5.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
判定其为后门程序,该程序执行需要通过攻击者远程发送指令,并且没有将自己伪装成其他程序,不符合木马和病毒的特征,因此判定为后门。
6.给出过去已有的具有相似功能的其他工具
海阳顶端、Bobax – 2004等都是使用http方式来同攻击者建立连接
7.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,见第一个实验,使用进程监视工具分析该恶意程序即可找到作者信息。
4.实践作业:取证分析
1.IRC介绍
-
IRC全称Internet Relay Chat,即因特网中继聊天。 用户使用客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器即可聊天。
-
当IRC客户端申请加入一个IRC网络时分为注册及加入两个阶段
1)注册时需要发送的消息有三种,分别是口令, 昵称和用户信息。格式如下: USER PASS NICK
2)注册完成后使用JOIN信息来加 入频道。格式如下: JOIN
- IRC服务器通常在6667端口监听,也会使用6660—6669端口。在上一篇博客攻防对抗实践部分也利用IRC协议进行过攻击。
2.僵尸网络
- 僵尸网络Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。
- 僵尸网络通常用于拒绝服务攻击、发送垃圾邮件、窃取秘密、滥用资源、僵尸网络挖矿等。
3.由于IRC服务器通常在6667端口监听,故只需知道蜜罐主机发出的尝试连接6667端口的数据包即可,连接时使用的是TCP三次握手。使用 ip.src == 172.16.134.191 and tcp.dstport == 6667
过滤规则进行查找,发现蜜罐主机与5台IRC服务器进行了连接:
观察到共5个IRC服务器,分别为
209.126.161.29
66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
4.首先用tcpflow进行分流,指令如下:
tcpflow -r botnet.pcap "host 209.196.44.172 and port 6667" #读取文件,筛选host和端口6667后进行分流
接着执行以下两条命令,避免出现字符编码问题。
- export LC_COLLATE='C'
- export LC_CTYPE='C'
5.然后利用如下指令进行搜索有多少主机连接(grep搜索获取昵称输出行sed去除前缀,g表示全局,tr将空格转换为换行,tr -d删除 ,grep -v就是NOT指令,去除空行,sort -u排序并去除重复,wc -l输出行数)
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 ' ' '
' | tr -d "15" | grep -v "^$" | sort -u | wc -l
- 哪些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
共有165个主机。
7.先使用snort进行检测,发现主要是TCP包,查看一下TCP响应过的端口,命令如下:
tcpdump -r botnet.pcap -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
响应的端口分别为:
-
135
-
139
-
25
-
445
-
4899
-
80
8.接下来用wireshark筛选出经过每个端口的数据包
筛选通过80端口的数据包tcp.dstport==80 && ip.dst == 172.16.134.191
看到210.22.204.101向蜜罐发送了超多的C,可能在进行缓冲区溢出攻击
218.25.147.83进行了蠕虫攻击
-
问题1:tcpflow: command not found
-
问题1解决方案:apt-get install tcpflow
-
问题2:tcpdump: botnet.pcap_file: No such file or directory
-
问题2解决方案:将文件名改成了botnet.pcap
-
问题3:观察多少不同的主机访问了以209.196.44.172为服务器的僵尸网络时候那个超长的命令输出5
-
问题3解决方案:grep表示二进制文件不能匹配,用grep -a可以解决
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 ' ' '
' | tr -d "15" | grep -v "^$" | sort -u | wc -l
4.实践总结
感觉分析的作业都特别的难啊,主要还是自己太菜了,希望老师照顾一下给我们讲讲,也幸好还能借鉴一下大佬们的博客,跟着诸位大佬做出来,感谢!
参考资料
- 诸位大佬博客9101、9102、9103
- Tcpflow