20199125 2019-2020-2 《网络攻防实践》第九周作业
一.概况
本次作业属于哪门课 | 网络攻防实践 |
---|---|
作业要求 | 恶意代码基础知识和分析方法 |
收获 | 关于病毒、蠕虫、木马等分类有了较为明确的认识,初步掌握了逆向分析方法和一些工具的使用 |
二、知识点总结
1.恶意代码定义和分类
恶意代码:指的是使计算机按照攻击者意图执行以达到恶意目标的指令集。
分类:计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸网络、内核套件。
2.恶意代码的发展趋势
- 恶意代码的复杂度和破坏力不断增强,从早期简单感染DOS操作系统的Brain病毒到复杂的内核级后门工具和破坏力强大的蠕虫,恶意代码在快速传播、隐蔽性、破坏力和对抗性上都在不断地发展。
- 恶意代码技术的创新越来越频繁,特别是在近几年,大量的新概念被不断提出,同时验证这些新概念和新技术的恶意代码也频繁地公布于众。
- 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具,在20世纪80-90年代,恶意代码的关注重心在于感染可执行程序的计算机病毒,但从最近几年的发展趋势来看,更多的关注焦点已经转移到对整个互联网造成严重危害的僵尸网络、网页木马、以及内核级的高级攻击技术。
3.计算机病毒
3.1计算机病毒概念
计算机病毒是一种能够自我复制的代码,通过将自身嵌入到其他程序进行感染,而感染过程通常需要人工干预才能完成。
3.2计算机病毒基本特性
- 感染性
- 潜伏性
- 可触发性
- 破坏性
- 衍生性
3.3计算机病毒的感染及引导机制
计算机病毒需要将自身嵌入到一个宿主程序上才能运行,而感染的方式也决定了计算机病毒如何从宿主程序上被引导运行的方式,因此计算机病毒的感染和引导机制是紧密相关的。计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类。
计算机病毒的传播主要依赖移动存储介质、电子邮件及下载、共享目录等。
4.网络蠕虫
4.1网络蠕虫概念
网络蠕虫是一种通过网络自主传播的恶意代码,它的出现相对于传统计算机病毒和木马、后门来说比较晚,但无论是从传播速度、传播范围还是破坏程度上来说,都是以往的恶意代码所无法比拟的,从定义本质上讲,网络蠕虫是一种可以自我复制的代码,并且通过网络传播,通常无须人为干预就能传播。当蠕虫感染了一台计算机,并且在完全控制以后,就会将这台计算机作为传播源,进而扫描并感染其他的脆弱系统。
4.2网络蠕虫的基本特征
- 自我复制
- 通过网络自主传播
- 不需要宿主,独立程序
- 直接通过网络传播,包括内网和互联网
- 不需要人为干预
4.3网络蠕虫的组成结构
- 弹头:获取计算机的访问权限
- 传播引擎:完成蠕虫样本的复制传播
- 目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确认其是否可以被攻击。
- 有效载荷:附加的攻击代码。
5.后门和木马
5.1后门与木马定义区别
后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道;而木马作为特洛伊木马的简称,是指一类看起来具有某个有用或善意目的,但实际上掩盖着一些隐藏恶意功能的程序;只有后门工具伪装成良性程序,这才具备真正的木马特征。
6.僵尸程序与僵尸网络
6.1定义
僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸程序为了隐藏自身在受害主机上的存在,会采用一些伪装和欺骗机制,此时也具有特洛伊木马特性,但这并非僵尸程序必有的特征,与后门工具相似,僵尸程序也会为攻击者提供对受害主机的远程控制。
6.2僵尸程序和僵尸网络的演化过程
6.3僵尸网络的功能结构
最早出现的IRC僵尸网络由僵尸网络控制器和僵尸程序两部分组成
下图显示了僵尸程序的功能组成结构,可以分为主体模块和辅助功能模块
6.4僵尸网络的命令与控制机制
- 基于IRC协议的命令与控制机制
- 基于HTTP协议的命令与控制机制
- 基于P2P协议的命令与控制机制
7.Rootkit
7.1 Rootkit定义
一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权限并隐藏在计算机中。根据操作系统的分层,Rootkit可以运行在两个不同的层次上,即用户模式和内核模式。用户模式
Rootkit修改的是操作系统用户态中用户和管理员所使用的一些内建程序和库文件,而内核模式Rootkit则直接攻击操作系统最核心的内核,修改内核从而隐藏自身。
7.2用户模式Rootkit
- UNIX用户模式Rootkit:提供后门访问的二进制替换程序;隐藏攻击者的二进制替换程序;用于隐藏但不替换的二进制程序;安装脚本;另一些零散的工具如嗅探器,shell监听器等。
- Windows用户模式Rootkit:通过API将自身恶意功能逻辑插入到windows函数;修改文件保护,破坏WFP机制;DDL注入和API挂钩,将恶意代码加入程序运行内存
7.3内核模式Rootkit
利用对内核的操作,内核模式Rootkit可以修改内核,彻底地隐藏攻击者在计算机上的活动,大多数内核模式Rootkit采用如下技术手段:
- 文件和目录隐藏
- 进程隐藏
- 网络端口隐藏
- 混杂模式隐藏
- 改变执行方向
- 设备截取和控制
8.恶意代码分析方法
8.1恶意代码分析技术概述
代码分析:是按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序的结构、数据流程和程序行为的处理过程。程序分析技术在程序理解、程序测试、程序优化和程序重构等方面都有着重要的应用。
8.2恶意代码分析环境
- 恶意代码发烧友的分析环境
- 基于虚拟化构建恶意代码分析环境
8.3恶意代码静态分析技术
- 反病毒扫描
- 文件格式识别
- Windows:exe、dll (PE)
- Linux:ELF
- 字符串提取分析
- 恶意代码实例名
- 帮助或命令行选项
- 用户会话
- 后门口令
- 相关URL信息、Email地址
- 包含库文件和函数调用
- 二进制结构分析
- 反汇编与反编译
- 代码结构与逻辑分析
- 加壳识别与代码脱壳
8.4恶意代码动态分析技术
- 基于快照对比的分析方法和工具
- 系统动态行为监控方法
- 文件行为监控软件
- 进程行为监控软件
- 注册表监控软件
- 本地网络栈行为监控软件
- 网络协议栈监控方法
- 沙箱技术
- 动态调试技术
三、实践内容
1.恶意代码文件的类型识别、脱壳与字符串提取
实践步骤:
1.首先使用file命令来分析对应的恶意程序,在cmd中切换到恶意程序所在的目录,执行指令file RaDa.exe
,然后得到下图所示的信息,可以看到该程序是一个32位的运行在windows操作系统上的程序,GUI表示这个程序是一个有图形界面的程序,intel 80386表示处理器架构
2.然后再使用执行指令strings RaDa.exe
来查看该程序可打印字符串,执行指令后发现可打印的字符串为乱码,无法分析出有效信息,所以判断该程序采用了加壳防止反汇编的技术,因此我们下一步要分析该程序使用了哪种加壳工具。
3.使用PEiD工具来查看该程序使用的加壳工具,下图红色圈圈出地方的信息即为该程序使用的加壳工具,下一步是我们采用脱壳工具来脱壳,获取有效信息
4.使用实验工具平台提供的超级巡警自动脱壳即可实现程序脱壳,并在恶意程序同目录下生成了一个脱壳以后的程序
5.此时再次使用PEiD工具来查看脱壳后的程序,可以看到编写该程序所使用的语言和开发工具为VB6.0
6.再次执行命令strings RaDa_unpacked.exe
来查看脱壳后的恶意程序的可打印字符串,然后分析出有效信息,题目要求找出该恶意程序的作者,但是使用strings工具来提取字符串,发现并未查到作者信息,这里我经过查询资料采用了其中的一个监视工具process explorer,也就是进行进程监控的一个程序,当打开这个工具,同时运行恶意程序,在进程监控里点击该恶意程序,查看详细信息,终于找到了恶意程序的作者信息
2.分析Crackme程序
实践步骤:
1.首先使用file命令来分析该恶意程序的大概信息,切换到恶意程序所在目录,分别执行file crackme1.exe
和file crackme2.exe
来查看两个文件信息,两个文件均为windows系统下运行的32位可执行程序,且没有图形界面,仅使用控制台操作
2.题目要求寻找特定输入,使其能够输出成功,那么也就是提示了我们这俩程序是有输入值得,但是不知道有几个输入值和输入值的数据类型,我们开始一个一个尝试,分别尝试了输入一个整数,两个整数,一个字符串,多个字符串和数字;观察其输出,只有两种,当输入为一个值时,输入是一样的,当输入多个值时(2个3个...个)输出反馈是一致的,可以断定该程序的输入为一个参数,但是不清楚输入值数据类型为字符还是数字
3.接下来用IDA打开该恶意程序进行分析,分析该恶意程序字符串信息,可以看出来除了上面输出反馈的两句话,还有另外两句,但是当我们输入参数时,一直不显示,此外,可以看到有“GCC”,说明该恶意程序是用C语言编写的
4.分析了一圈该恶意程序的字符串,并没有发现更多有用的信息,只能尝试一下另外那两个未输出过的字符串,这里我猜想其中一句是正确的,恶意程序通过用户输入一段字符串来进行匹配,若匹配正确则输出正确的反馈信息,首先输入其中一句,然后发现反馈信息跟随便输入的参数一样,于是排除该字符串,尝试另外一个字符串作为输入,发现其反馈信息为另外一个从未出现过的字符串,故判定输入的字符串为正确的输入信息,由于未学过汇编语言,没看出啥有用的信息,暂时只能这么猜了。
5.同理分析第二个恶意程序,每次运行输入不同数目的参数,观察其反馈值,可以看到当输入两个三个等多个参数时,其输出没有变化,初步判定该程序输入值只有一个
6.同样使用IDA工具来分析第二个恶意程序,也是用C语言开发的,这里不同的是多个几个字符串,我把每个字符串都作为输入去看反馈值,遗憾的是发现每次输出都不正确,后来在网上查询了关于这个恶意软件的分析博客,发现需要首先复制,然后再执行,就会输出一个新的反馈信息,而这个反馈信息在该恶意程序中是找不到的,这里一直没搞懂为啥这样。
3.分析一个自制恶意代码样本rada,并撰写分析报告
实验步骤:
1.首先使用MD5对该恶意程序进行摘要信息分析
2.执行file RaDa.exe
分析该恶意程序的运行环境,结果为win32位程序,有图形界面
3.如前面的实验已经分析过的,该恶意程序已经经过加壳,所以经过脱壳后对其分析,其过程前面已经写过,这里不再赘述,主要讲分析的部分;同样的,我们打开之前用过的监视工具process explorer 和wireshark开启监听,点击运行恶意程序RaDa.exe,然后首先分析其程序运行详细信息如下:该恶意程序使用http连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页上,然后分别下载和上传某些文件,并且在受害主机C盘目录下创建一个文件夹“C:/RaDa/tmp”来保存其下载的文件,往下分析发现该恶意程序中可执行DDos拒绝服务攻击
4.继续往下分析,发现该恶意程序对主机注册表进行了读写和删除操作,然后我们打开注册表查看并未发现有关于RaDa的信息,可能是该恶意程序已经删除了注册表信息
5.往下分析发现了一些看似指令的字符,其中就认识几个,put
,get
,sleep
,screenshot
猜想其指令意思分别是上传,下载,休眠,屏幕截图
6.接着发现了一条和数据库查询语句相关的信息,这里应该是查询受害者主机上可用的网络适配器信息吧,我也没搞懂
7.然后分析完了恶意程序,把wireshark监听的数据分析一下,可以看到受害主机向目标主机10.10.10.10
发送了大量的数据包,但是使用追踪数据流,并没有发现任何信息
现在可以来回答一下题目中的问题:
1.这个二进制文件摘要信息:
- MD5摘要信息:
caaa6985a43225a0b3add54f44a0d4c7
- PE格式:运行在Windows 2000, XP and 2003及以上版的操作系统中
- 使用了UPX加壳工具进行了加壳处理
2.这个恶意文件的目的
该文件是一个http后门程序,当连接上互联网时,该程序就会通过http请求连接到指定主机,进行接受攻击者指令操作
3.识别并说明这个二进制文件所具有的不同特性
在分析该文件的时候,发现当我点击其运行以后,在实验主机的C盘下创建了一个RaDa目录,里面一个bin文件夹,一个tmp文件夹,tmp前面分析过是用来临时存储从目标主机下载到受害主机的文件和从受害主机获取的文件信息,而我打开bin文件夹发现里面安装了一个RaDa.exe可执行文件,并且我点击运行的文件在桌面上没有任何提醒信息,只有通过查看进程才能发现,具有较好的隐蔽性。
4.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
该文件使用了UPX加壳,不经过脱壳处理是无法进行反编译分析的,直接提取的字符串信息为乱码。
5.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
判定其为后门程序,该程序执行需要通过攻击者远程发送指令,此外,并未发现该程序会自我复制和传播,也没有将自己伪装成其他程序,不符合木马和病毒的特征,因此判定为后门。
6.给出过去已有的具有相似功能的其他工具
例如海阳顶端、Bobax – 2004等都是使用http方式来同攻击者建立连接,我在上周的Linux攻防后门植入也是使用这种方式,首先在攻击机上搭建Apache服务,然后通过漏洞控制靶机使用wget http请求来访问攻击机下载后门程序。
7.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,操作方法见第一个实验,使用进程监视工具分析该恶意程序即可找到作者信息。