20199108 2019-2020-2 《网络攻防实践》第9周作业

1.实践内容

恶意代码基础知识

恶意代码定义与分类

  • 恶意代码指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集

单纯的技术炫耀,或恶作剧
远程控制被攻击主机,使之能为攻击者的傀儡主机,满足其实施跳板攻击或进一步传播恶意代码的需要
窃取私人信息或机密信息
窃取计算、存储、带宽资源
拒绝服务、进行破坏活动

  • 恶意代码类型
计算机病毒 是一种能够自我复制的代码,感染过程需要人工干预才能完成
蠕虫 一类自主运行的恶意代码,并不需要将自身嵌入到其他宿主程序中,一般不需要人工参与
恶意移动代码 移动代码可以从远程主机下载并在本地执行的轻量级程序,不需要或仅需要极少人为干预
特洛伊木马 一类伪装成有用的软件,隐藏其恶意目标的恶意代码
后门 是指一类能够绕开正常的安全控制机制
僵尸程序 攻击者出于恶意目的,隐藏其恶意目标的恶意代码
内和套件 在用户态通过替换或修改系统关键可执行文件,用以获取并保持最高控制权

恶意代码的命名规则
[恶意代码类型]恶意代码家族名称[.变种号]

计算机病毒
计算机病毒是一个能够感染其他程序的程序,靠修改其他程序,并把自身的拷贝嵌入其他程序而实现病毒的感染

病毒程序通过修改其他程序的方法将自己的精确复制或可能演化的形式放入其他程序中,从而感染它们

计算机病毒的基本特性

感染性
潜伏性
可触发性
破坏性
衍生性

计算机病毒的感染及引导机制

可执行文件 是计算机病毒最普遍的感染目标,可以执行文件作为宿主程序,当其被用户运行时,依附在在上面的病毒就可以被激活取得控制权
前缀感染机制 病毒将自身复制到宿主程序的开始
后缀感染机制 病毒将自身复制到宿主程序的末端,并在指令开始时加入一条转跳指令
插入感染机制 病毒在感染宿主程序时,病毒代码放在宿主程序的中间

引导扇区
通过BIOS定位带磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。
引导型病毒的感染目标为主引导区和分引导区

支持宏指令的数据文件
宏病毒:将自身以宏指令的方式复制到数据文件中,当被感染的数据文件被应用程序打开时,将自动执行宏病毒体,完成病毒的引导

网络蠕虫

一种通过网络自主传播的恶意代码。
基本特性 能够通过网络进行自主传播
组成结构

弹头 用于侵入目标系统,利用目标系统安全漏洞实施攻击
缓冲区溢出攻击
破坏目标系统服务中的内存结构
文件共享攻击
利用电子邮件传播
利用其它普通的错误配置

传播引擎 通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播

目标选择算法和扫描引擎

一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击
电子邮件地址
主机列表
被信任的系统
网络邻居主机
域名服务
通过特定规则任意选择IP目标地址

有效载荷 附加的攻击代码,执行一些特殊目地的操作

植入后门
安装分布式拒绝服务攻击代理
组建僵尸网络
执行一个复杂计算

后门与木马

后门 能够为攻击者提供多种不同类型的访问通道

本地特权提升和本地账号
单个命令的远程执行
远程命令行解释访问器
远程控制GUI
无端口后门

在Windows平台中,后门工具可以利用自启动文件夹、注册表自启动项及预订计划任务三种方法达到自启动的效果

特洛伊木马

欺骗用户或系统管理员安装特洛伊木马程序
隐藏在计算机的正常程序中,将自己伪装成看起来属于该系统
隐藏和伪装技术有
命名伪装游戏
使用软件包装工具
攻击软件发布站点
代码下毒

僵尸程序与僵尸网络
僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式,它与蠕虫的区别在于是否受控,蠕虫一般为自主传播方式,而僵尸程序则是接受控制后进行攻击和传播

僵尸网络的功能结构

分为主体功能和辅助功能模块
主体功能中的命令与控制模块是整个僵尸程序的核心

僵尸程序的命令与控制机制

基于IRC协议的命令与控制机制
基于HTTP协议的命令与控制机制
基于P2P协议的命令与控制机制

Rootkit

Rootkit能够通过控制目标计算机操作系统的关键组件,来为攻击者提供强有力的手段,获取访问并隐藏在系统中。是用来获得root权限的kit工具包。

用户模式Rootkit

提供后门访问的二进制替换程序
隐藏攻击者的二进制替换程序
用于隐藏但不替换的二进制程序
另外一些零散工具
安装脚本

windows下实现用户Rootkit主要的三种技术

Windows为了支持第三方工具扩展Windows的内置功能特性,提供了一些开发接口。用户模式rootkit可以使用这些开发接口,将自身实现的恶意功能逻辑插入到现有的Windows函数之间,无需覆盖Windows代码。
Windows使用WFP机制,来防止操作系统关键文件被修改或替换,rootkit想要覆盖操作系统关键文件,必须使WFP功能失效。
用户模式rootkit还可以使用DLL注入和API挂钩技术,把恶意代码直接加入运行进程的内存空间

内核模式Rootkit

文件和目录隐藏
进程隐藏
网络端口隐藏
混杂模式隐藏
改变执行方向
设备截取和控制

恶意代码分析方法

代码分析:是按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。

与分析良性代码相比,分析恶意代码的主要区别在于:
不能提前知道恶意代码的目的
恶意代码具有恶意的攻击目的,会对所运行环境进行恶意破坏
恶意代码分析在绝大数情况下不会拥有待分析程序的源代码
恶意代码目前都会引入大量各种各样的对抗分析技术

恶意代码分析的技术方法主要包括静态分析和动态分析两类

恶意代码的分析环境

恶意代码发烧友的分析实验环境

采用虚拟化技术构建恶意代码分析环境

用于研究的恶意代码自动分析环境

恶意代码静态技术分析

反病毒软件扫描
文件格式识别
可以让我们迅速了解待分析恶意代码所期望的运行平台
字符串提取工具
恶意代码实例名
帮助或命令行选项
用户会话
后门口令
相关URL信息、Emile地址
包含库文件和函数调用
二进制结构分析
反汇编与反编译
代码结构与逻辑分析
加壳识别与代码脱壳

恶意代码动态技术分析

基于快照对比的方法和工具
系统动态行为监控方法
   文件行为监控软件
   进程行为监控软件
   注册表监控软件
本地网络栈行为监控软件
网络协议栈监控方法
沙箱技术
动态调试技术

2.实践过程


实验环境:WinXP Attacker虚拟机(安装有cygwin以及基本的脱壳软件和字符串提取工具)。
首先利用file RaDa.exe命令查看RaDa.exe的文件类型,可知这是一个32位Windows PE可执行文件,并且有图形化窗口。


下面来看看有没有加壳,下面使用PEiD工具(查壳)来查看加壳的类型。在这里我们可以看到这个是一个版本为0.89.6的UPX壳,还可以看到文件的入口点、EP段、偏移、文件类型等信息。

下面用strings RaDa.exe查看RaDa.exe中可打印字符串,发现都是乱码,这也验证了这是一个加壳程序,所以下一步是我们要进行脱壳。

们用超级巡警这个软件进行脱壳,这里也识别出了是一个UPX壳,这个压缩壳还是比较容易脱,脱完之后输出为RaDa_unpacked.exe

再用strings查看脱壳后的RaDa.exe(RaDa_unpacked.exe),脱壳之后出现正常的字符串,再从中寻找有用信息


首先分析crackme1.exe。对crackme1.exe进行执行,猜测参数执行,可以发现一个参数输入与其他的参数输入得到的输出明显不一样,所以可以猜测这个程序的输入是一个参数。

接着我们使用IDA 工具来打开文件,尝试阅读其汇编语言,验证我们的猜想。

通过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”这两个字符串。有内容我们可以猜测,前者就是我们需要的口令,后者就是输入口令正确时程序的反馈信息。
通过查看整个程序的call flow,通过view——>graphs

我们可以得出结论,1程序是用C语言写的,2程序估计是使用strcmp函数来比较口令的,3关键的部分在sub_401280这里。
接下来我们开始查看sub_401280的汇编代码,在functions——>sub_401280


倒数第二行cmp [ebo+arg_0],2为判断程序是否有两个参数
在c语言中,main函数通常为int main(int argc,const char **argv),即第一个参数argc对应argv的大小,第二个参数对应命令行的格式。如在命令行输入crackme1.exe 1,那么参数对应的值为argc=2,argv={”crackme1.exe”,”1”}。
如果argc=2,那么进行下一步判断

call strcmp中,程序用“I know the secret”对应的字符串和[eax]对应的字符串(用户输入的口令)相比较,通过比较的结果反馈口令是否正确。
那么尝试输入口令I know the secret,我们可以通过程序的测试。

分析一下crackme2.exe的函数调用情况。

String界面,明文字符串“I know the secret”和“crackmeplease.exe”

Function call,主要查看sub_401280

倒数第二行,cmp [ebp+arg_0],2判断程序参数是否为两个

通过参数个数的判断后,接着用strcmp函数对argc里面的第一个字符串,即程序名,和“crackmeplease.exe”进行判断

通过程序名判断后,用户输入的口令与”I know the secret”判断。
于是我们就去测试,首先呢copy crackme2.exe crackmeplease.exe给程序改个名字,然后输入crackmeplease.exe "I know the secret"

通过测试得到的反馈信息。

样本分析,分析一个自制恶意代码样本

任务:现在你作为一名安全事件处理者的任务(如果你接受的话)就是深入分析这个二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。

提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
找出并解释这个二进制文件的目的。
识别并说明这个二进制文件所具有的不同特性。
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
给出过去已有的具有相似功能的其他工具。
可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

准备工作

1确认文件完整性

2确认二进制文件格式

这里看出他是图像界面的

3取得文件中的可打印字符串
下面用strings RaDa.exe查看RaDa.exe中可打印字符串,发现都是乱码,这也验证了这是一个加壳程序

4使用监控软件process explorer与wireshark

5反汇编工具PEID分析,这里可以看到文件的入口点、偏移、文件类型、EP段、汇编程序以及加壳类型。



可以看到其加壳类型

6、利用超级巡警自动脱壳工具脱壳

7、再次查看是否脱壳成功
再用strings查看脱壳后的RaDa.exe(RaDa_unpacked.exe),脱壳之后出现正常的字符串,再从中寻找有用信息

8、进一步使用IDA分析

解答:
问题1解答
样本摘要及基本信息

大小:20,992字节
MD5: md5sum计算 caaa6985a43225a0b3add54f44a0d4c7
PE文件格式 运行在Windows 2000, XP and 2003及以上 版的操作系统中
UPX加壳并进行了壳伪装处理
UPX段改名为JDR
版本号从1.25改为0.99
问题2解答
找出并解释这个二进制文件的目的

后门工具 -> HTTP Bot?
能够使远程的攻击者完全地控制系统
它采用的通信方式使得只要系统能够通过浏览器上网,就能够获得来自攻击者的指令。

问题3解答
识别并说明这个二进制文件所具有的不同特性

RaDa.exe被执行时,它会将自身安装到系统中,并通过修改注册表的方式使得每次系统启动,它都能够被启动,启动后循环执 行一下操作:

⑴从指定的web服务器请求指定的web页面;
⑵解析获得的web页面,获取其中的指令
⑶执行解析出来的指令
⑷等待一段时间
⑸返回第⑴步
启动后,RaDa一直在后台运行,不会弹出任何窗口。它支持以下指令:

exe 在宿主主机中执行指定的命令
put 将宿主主机中的指定文件上传到服务器
get 将服务器中的指定文件下载到宿主主机中
screenshot 截取宿主主机的屏幕并保存到tmp文件夹
sleep 停止活动一段时间

默默运行在后台,会定期给IP为10.10.10.10发出链接请求

问题4解答
识别并说明这个二进制文件所采用通讯方法
通过HTTP协议进行通信,RaDa通过调用隐藏的IE实例向web服务器发送请求,获取命令。

问题5解答
识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
⑴、这个二进制文件使用UPX加壳之后又做了手工修改,使得难以脱壳,而不脱壳又会影响反汇编。
⑵、脱壳之后,可以在文件中找到字符串“Starting DDoS Smurf remote attack.”这会使分析者误以为样本可以发动DDos攻击,而实际上它没有提供任何用以发动DDos攻击的子程序。
⑶、提供了—help参数,但是使用这个参数之后,除了输出版权信息外并没有提供其他有用的信息。--verbose参数也没有什么用处, GUI窗口中的“Show config”及“Show usage”也显示与— help参数相同的信息。
⑷、通过查看网卡的MAC地址以及查看VMware Tools的注册表项来判断操作系统是否运行在VMware虚拟机上,如果是,则使用— authors参数时将不会输出作者信息。

问题6、7解答
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
这是一个后门程序,运行并按照攻击者命令进行工作;如果是多对1控制,则可认为是HTTP Bot
这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫
它也没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马
给出过去已有的具有相似功能的其他工具

问题9解答-bonus
可能调查出这个二进制文件的开发作者吗? 如果可以,在什么样的环境和什么样的限定 条件下?

可以直接从脱壳后的二进制程序中直接获取
利用监视工具process explorer 可以查看结构信息,可以看出copyright (C)2004 baul siles &david perez

实践四;取证分析,Windows 2000系统被攻破并加入僵尸网络
分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题
1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
2)僵尸网络是什么?僵尸网络通常用于干什么?
3)蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
5)哪些IP地址被用于攻击蜜罐主机?
6)攻击者尝试了哪些安全漏洞?
7)哪些攻击成功了?是如何成功的?

1)IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),所有的沟通就在他们所在的Channel内以不同的Nickname进行交谈。申请加入的时候要发送口令、昵称和用户信息:USER 、PASS 、NICK 6667端口(明文传输)、6697端口(SSL加密)

2)僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。攻击者可以向自己控制的所有bots发送指令,让它们在特定的时间同时开始连续访问特定的网络目标,从而达到DDos的目的。利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息。Botnet的控制者可以从僵尸主机中窃取用户的各种敏感信息和其他秘密,例如个人帐号、机密数据等。攻击者利用Botnet从事各种需要耗费网络资源的活动,从而使用户的网络性能受到影响,甚至带来经济损失

3)对数据包进行筛选,选出源地址为172.16.134.191且通信端口为6667(IRC使用的TCP端口)的数据包,命令如下:
ip.src == 172.16.134.191 && tcp.dstport == 6667

观察到共5个IRC服务器,分别为
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进行分流,指令如下:
tcpflow -r botnet.pcap "host 209.196.44.172 and port 6667读取文件
执行之后我们将获得三个文件:172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和report.xml
筛选host和端口6667后进行分流
输入如下指令进行搜索有多少主机连接

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

可以发现共有3457台主机

5)哪些IP地址被用于攻击蜜罐主机
使用下面的指令找出所有的可能连接的主机的IP地址
哪些IP地址被用于攻击蜜罐主机
使用下面的指令找出所有的可能连接的主机的IP地址
使用下面的指令查找端口并输出到1.txt中,如图所示,查找到148个被攻击的端口。
tcpdump -n -nn -r botnet_pcap_file '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命令结合使用。

3.学习中遇到的问题及解决

  • 问题1:使用命令tcpflow -r botnet_pcap_file 'host 209.196.44.172 and port 6667'(读取文件,筛选host和端口6667后进行分流)

  • 问题1解决方案:sudo apt-get install tcpflow

4.实践总结

本次前两个实践,有参考书参考,相对来说,问题不是很大,但是后面两个感觉很复杂,自己也参考了其他同学,与其他同学还是有一定的差距,加油啦。

参考资料

posted @ 2020-04-25 20:54  跳起来摘苹果  阅读(340)  评论(0编辑  收藏  举报