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

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

1.实践内容

恶意代码基础知识

恶意代码定义与分类

  • 恶意代码定义:使计算机按照攻击者的意图执行以达到恶意目标的指令集
  • 恶意代码类型:恶意代码可以根据其执行方式、 传播方式和对攻击目标的影响分为计算机病毒、蠕虫、恶总移动代码、 特洛伊木马 、 后门、 僵尸程序、 内核套件等
  • 计算机病毒的感染及引导机制:可执行文件、引导扇区、支持宏指令的数据文件
  • 计算机病毒的传播机制

 发展趋势:

  1. 恶意代码的复杂度和破坏力不断增强:从早期简单感染 DOS 操作系统的 Brain 病毒到复杂的内核级后门工具和破坏力强大的蠕虫,恶意代码在快速传播、隐蔽性、破坏力和对抗性上都在不断的发展;

  2. 恶意代码技术的创新越来越频繁:特别是在最近的几年中,大量的新概念被不断地提出,同时验证这些新概念和新技术的恶意代码也频繁地公布与众;

  3. 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具:在 20 世纪 80~90 年代,恶意代码的关注重心在于感染可执行程序的计算机病毒,但从最近几年的发展趋势来看,更多的关注焦点已经转移到对整个互联网造成严重危害的僵尸网络、网页木马,以及内核级的高级攻击技术。

计算机病毒

  • 定义:计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另一台计算机,这也是其传播机制。
  • 特性:

             感染性:是指地算计病毒被执行之后,就会自己把自己复制到其他的满足条件的程序之中。像传染一样。一般情况下传染的速度很快。这是计算机病毒最重要的特点。

             潜伏性:一般情况下计算机病毒成功感染之后,不会立刻采取其他的措施。在时机到来之前,会先等着。传染过程也难以被发现。

             可触发性:虽然计算机病毒会先等着,但是不会一直等下去,以满足条件就会开始感染或者破坏。这个条件可能是时间,在系统时间到某个时刻时候就开始行动;也可能是病毒自带的计数器,像定时炸弹一样;也可能是一种文件的出现,观察到某种类型的文件之后就开始行动。

             破坏性:计算机病毒一般都带着一些恶意的目的。如果编写者是由于其他的目的,比如炫耀自己,这种情况下不会对计算机造成太大的破坏。但是有的病毒就是为了破坏才编写的。

             衍生性:当某个人对某个计算机病毒很了解,或者这个病毒就是这个人写的,这时候这个人作为使用者就可以根据自己的目的来对这个病毒进行修改,这样就会衍生出其他的病毒。

  • 计算机病毒的机制:

             感染机制:计算机病毒一般情况下会把自己寄宿在可执行文件、引导扇区和支持宏指令文件三种。在寄宿在可执行文件的时候,计算机病毒会随着可执行文件的执行而运行;寄宿在引导扇区的时候,,通过感染引导区的引导记录,病毒就可以在系统启动的时候获取控制全;寄宿在支持宏指令的文件的时候,会等待其他的程序来打开这个文件,这时候执行代码。

             传播机制:计算机病毒在一个系统之中被触发的时候,就会去寻找系统内其他的可以被它感染的程序,复制自己进下一个宿主内。

网络蠕虫

     基本特性:相较于计算机病毒,网络蠕虫不需要感染目标程序,自己就是一个独立程序,同时他还可以自己通过扫描其它系统的网络漏洞来传播自己到其他的系统,不需要人为的操作。

网络蠕虫的组成结构

书中将网络蠕虫比喻成了一个导弹,由弹头、传播引擎、目标选择算法和扫描引擎、有效载荷来组成

                                  

  • 弹头:为了取得目标主机的访问权而存在的代码,对各种安全漏洞进行攻击。

  • 传播引擎:在弹头获取到了目标系统的访问权之后,下一步自然是将自己想要传播的蠕虫传过去。通过执行传播引擎中的指令,来完成传播。

  • 目标扫描算法和扫描引擎:在入侵成功之后,就要想办法入侵下一个系统。目标选择算法负责确定可能可以称为目标的地址,而扫描引擎就对目标选择算法确定的地址进行扫描,看看是不是真的可以入侵。

  • 有效载荷:想要入侵一个系统肯定是有目的的,而实现这个目的的代码就是目标载荷。比如组件僵尸网络、植入后门等,这些都需要有效载荷来实现。

 

后门与木马

          定义:后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访间通道; 而木马作为特洛伊木马的简称,是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。

  • 后门:后门工具能够为攻击者提供多种不同类型的访问通道,包括本地权限提升和本地账号、单个命令的远程执行、远程命令行解释器访问、远程控制 GUI、无端口后门。对于后门工具而言,攻击者希望它能够持续地在目标系统中运行,并且在系统重启之 后能够仍然随着系统进行启动,这样才能够保证他对目标系统的随时控制。 因此后门工具往往都利用了系统的自启动功能,将自身加入到系统重启机制中。

  • 特洛伊木马:通过使自己看起来像是正常的有用的软件,特洛伊木马程序可以用于下目的:欺骗用户或系统管理员安装特洛伊木马程序,这样木马程序就通过亳无戒备的用户进入到计算机系统中;隐藏在计算机的正常程序中,将自己伪装成看起来属于该系统,使得用户和管理员不会觉察到它的存在,通常与后门工具结合,成为木马后门。常用技术包括命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒。

僵尸程序与僵尸网络

  • 僵尸网络(botnet)是在网络蠕虫、特洛伊木马、 后门工具等传统恶意代码形态的基础 上发展融合而产生的一种新型攻击方式。
  • 僵尸程序的命令与控制机制:①基于IRC协议的命令与控制机制②基于HTTP协议的命令与控制机制③基千P2P协议的命令与控制机制

Rootkit

通过控制目标计算机操作系统的关键组件, 来为攻 击者提供强有力的手段, 用来获取访问并隐藏在系统中

  • 隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
  • 分类: 用户模式、内核模式。两类Rootkit和普通的应用程序级木马后门之间的位置对比图如下:

恶意代码分析

  • 恶意代码分析技术主要包括静态分析和动态分析两大类。

  • 静态代码分析是指不执行代码的情况下进行分析,动态代码分析则是在受控的环境体重执行恶意代码,利用各种方法来获取想要的信息。

恶意代码静态分析技术

  • 恶意代码静态分析技术包括:反病毒扫描软件、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构和逻辑分析、加壳识别与代码脱壳。

反病毒扫描软件

  • 这是最简单直接的方法。用现成的软件来扫描待分析的样本,如果软件可以识别病毒,就可以知道该病毒的欸行、家族等。国内外都有着很多的相关软件。除了这些已有的软件之外,我们还可以使用ClamAV来尝试构造自己的反病毒软件。

文件格式识别

  • 当我们有了一个我们从未见过的恶意代码样本的时候,首先要知道他是什么文件格式。用file的命令就可以通过提取关键特征来识别文件类型。除此之外,还有很多恶意代码文件格式的识别工具。

字符串提取分析

  • 通过提取程序中连续的可以打印的字符所组成的字符串,也许就能获得我们所需要的关键信息,也是一种简单直接的方式。

  • 有可能会得到的信息有:代码的名字、程序的帮助和说明、会话内容、口令、库文件和函数的调用等。

  • 用string命令可以实现。当然也有相关的软件。

二进制结构分析

  • 二进制文件的恶意代码,通常会在编译和链接过程中留下来一些信息。通过工具binutils,可以查看一些遗留下来的信息。先前的string就是binutils的一个命令。objdump也是一个二进制程序分析工具。

反汇编与反编译

  • 反汇编是把二进制程序还原成汇编代码,反编译则是更进一步的还原成编程语言。

  • 一般情况下不会直接逐句逐行的读这些代码,一般会在掌握了更多的信息之后再回头对程序进行分析。

代码结构与逻辑分析

  • 在反汇编和反编译获得了二进制程序的汇编语言或者高级语言的代码之后,就可以对代码的逻辑也结构进行分析。如IDA pro之类的分析工具可以为我们提供一些辅助功能。

加壳识别与代码脱壳

  • 在静态分析的时候,会发现很多恶意代码会通过加壳来影响对手的分析,隐藏自己的各种信息。因此,我们需要对加壳的恶意代码进行识别并且进行脱壳。

恶意代码动态分析技术

  • 基千快照比对的方法和工具:针对恶意代码动态分析的快照比 对方法也是首先对原始的的系统资源列表做一个快照, 然后激活恶意代码并给予充分的运行时间, 之后我们再对恶意代码运行后的系统资源列表进行快照, 并对比两个快照之间的差异, 从而获取恶意代码行为对系统所造成的影响

系统动态行为监控方法

系统动态行为监拧通常基于行为通知(Notification)机制或者API劫持技术(API Hooking)实现

网络协议栈监控方法

对千恶意代码的网络行为,除了从恶意代码运行平台本地的网络协议栈进行监拧之外。

沙箱技术

沙箱技术提供了受限制的执行环境, 使得在沙箱中运行的代码不能够修改用户系统, 从而提供了一个用于运行不可信程序的安全环境。

动态调试技术

动态调试是在程序运行时刻对它的执行过程进行调试 (debugging) 的技术过程

2.实践过程

动手实践:恶意代码文件类型识别、脱壳与字符串提取

  • 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和识别工具

  • 使用超级巡警脱壳机等托克软件,对rada恶意代码样本进行脱壳处理

  • 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁

用Windows XP attacker,上面安装有超级巡警脱壳器等分析软件

首先使用file命令来分析对应的恶意程序,在cmd中切换到恶意程序所在的目录,执行指令file RaDa.exe,然后得到下图所示的信息,可以看到该程序是一个32位的运行在windows操作系统上的程序,GUI表示这个程序是一个有图形界面的程序,intel 80386表示处理器架构

然后再使用执行指令strings RaDa.exe来查看该程序可打印字符串,执行指令后发现可打印的字符串为乱码,无法分析出有效信息,所以判断该程序采用了加壳防止反汇编的技术,因此我们下一步要分析该程序使用了哪种加壳工具。

 接下来使用 PEiD 工具查看 RaDa.exe 的基本信息(加壳类型等)

 

 使用实验工具平台提供的超级巡警自动脱壳即可实现程序脱壳,并在恶意程序同目录下生成了一个脱壳以后的程序

 再次执行命令strings RaDa_unpacked.exe来查看脱壳后的恶意程序的可打印字符串,然后分析出有效信息,题目要求找出该恶意程序的作者,但是使用strings工具来提取字符串,发现并未查到作者信息,这里我经过查询资料采用了其中的一个监视工具process explorer,也就是进行进程监控的一个程序,当打开这个工具,同时运行恶意程序,在进程监控里点击该恶意程序,查看详细信息,终于找到了恶意程序的作者信息

 这时候用 IDA Pro Free 打开这个文件,查看详细信息

 

2.分析Crackme程序

实践步骤:
1.首先使用file命令来分析该恶意程序的大概信息,切换到恶意程序所在目录,分别执行file crackme1.exefile crackme2.exe来查看两个文件信息,两个文件均为windows系统下运行的32位可执行程序,且没有图形界面,仅使用控制台操作

 可以看到这两个文件都是32位 windows 下 PE 文件,没有图形界面,是命令行程序

接下来,尝试对 crackme1.exe 进行分析,首先运行它,可以发现,在接受1个参数时,程序的输出与众不同,所以我们猜测该程序的输入为一个参数。另外,可以发现程序的两种输出信息。一种是“I think you are missing something.”,这个猜测是参数数目不对的提示;另一种是“Pardon? What did you say?”,对于这种反馈信息,猜测应该是参数错误的提示。

 接下来用IDA打开该恶意程序进行分析,分析该恶意程序字符串信息,可以看出来除了上面输出反馈的两句话,还有另外两句,但是当我们输入参数时,一直不显示,此外,可以看到有“GCC”,说明该恶意程序是用C语言编写的

 然后在上面可以找到函数关系图。

发现start函数中有一个strcmp函数。这个是c语言里的字符串对比的函数,可以判断这个就是用来验证我们输入的参数对不对的函数。然后再查看strcmp的上层函数sub-401280.

 根据发现在strcmp对比完之后顺着继续找

 

 将这个字符数组当作参数输入

 成功!!!

关于crackme2.exe的前序分析操作同crackme1.exe,直接进入分析阶段。首先还是来看函数调用图,发现核心函数还是sub_401280

Function call,主要查看 sub_401280

 

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

 通过程序名判断后,用户输入的口令与”I know the secret”判断

 

我们要做的是在程序名为“crackmeplease.exe”中再输入"I know the secret"  破解需要两步:一是把程序名改为“crackmeplease.exe”,二在输入"I know the secret"。尝试一下

3.分析一个自制恶意代码样本rada,并撰写分析报告

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

代码样本rada,并撰写分析报告

在打开RaDa文件之前,先打开了文件行为监控软件(Filemon)、进程行为监控软件(Process Explore)、网络监控软件(Wireshark)

 使用md5sum命令查看摘要信息, md5摘要值为caaa6985a43225a0b3add54f44a0d4c7

 

 在进程探测器中点击运行的进程,可以看到该二进制文件的编码字符串内容,当恶意程序打开后或以http协议与目标地址10.10.10.10RaDa_commands.html进行连接,在本机目录下会新建tmpbin两个文件夹,注册表

wireshark上发现大量发现10.10.10.10TCP数据包: 

 使用 IDA Pro 进行分析,首先查看字符串窗口,把类型 Type 改成 unicode 类型,首先看到的是命令行参数,其次是版本和作者,然后是注册表字符串,最后是一个网页RaDa_commands.html

 往下找,发现三个网段,10开头的网段让我想到了目标IP地址10.10.10.10,这里应该是确保本地连接至目标IP网段内网,然后获取一些指令

 根据线索分析,得到RaDa_commands.html。寻找这个字符串对应的函数sub_404FB0,进入这个函数,看黄色部分的汇编代码,得知是被拷贝到dword_40C030这个变量中。

 

 回答问题

1.这个二进制文件摘要信息:

 MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7

PE格式:运行在Windows 2000, XP and 2003及以上版的操作系统中

使用了UPX加壳工具进行了加壳处理

2.这个恶意文件的目的

 这个二进制文件通过连接互联网与攻击机取得会话连接,然后进行攻击,不具备自主传播,可以排除是蠕虫或者病毒,推测是后门程序或者僵尸程序。

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

RaDa.exe被执行时,将在该目录下新建bintmp文件,其中bin目录下的二进制文件修改注册表,自动随虚拟机开启,然后从指定的目标服务器请求web页面,获取指令和参数。 RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:从指定的web服务器请求指定的web页面;解析获得的web页面,获取其中的指令;执行解析出来的指令

4.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术

该文件使用了UPX加壳,不经过脱壳处理是无法进行反编译分析的,直接提取的字符串信息为乱码,所以这边如果在实验三运行原程序,process explorer 也会显示乱码

5.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由

未发现该程序会自我复制和传播,也没有将自己伪装成其他程序,不符合木马和病毒的特征,该程序执行需要通过攻击者远程发送指令

6.给出过去已有的具有相似功能的其他工具

Bobax – 2004,海阳顶端都是使用http方式来同攻击者建立连接

7.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的
可以通过--authors参数获取相关作者信息Authors: Raul Siles & David Perez,2004;环境和限定条件是不在虚拟

实践四:取证分析,Windows 2000系统被攻破并加入僵尸网络

任务:数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题

  • IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
  • 僵尸网络是什么?僵尸网络通常用于干什么?
  • 蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
  • 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
  • 哪些IP地址被用于攻击蜜罐主机?
  • 攻击者尝试了哪些安全漏洞?
  • 哪些攻击成功了?是如何成功的?

IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?

因特网中继聊天(Internet Relay Chat),简称 IRC 。 IRC 的工作原理非常简单,只要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台IRC服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER <username> <hostname> <servername> <realname>、PASS <password>、NICK <nickname>。注册完成后,客户端就使用 JOIN 信息来加入频道,格式如下:JOIN <channel>。IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。 SSL 加密传输在 6697 端口。

2.僵尸网络是什么?僵尸网络通常用于干什么?
僵尸网络是指攻击者(称为botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
它往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。

3.蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?

通过 Wireshark 打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,因为我们知道 IRC 服务通过6667端口

 查找目标服务器IP地址,主要有63.241.174.144,     217.199.175.10,        209.126.161.29,      66.33.65.58,       209.196.44.172

4.在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

首先先拉取209.196.44.172与172.016.134.191之间的所有的 IRC 数据包。这里使用命令tcpflow -r botnet_pcap_file '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.01152report.xml,可以先看一下report.xml这里提到了这两个文件的相关信息,可以看到如下图的内容,包括上述双方的ip地址,端口,mac地址,通信时间等等。

 

  输入如下指令进行搜索有多少主机连接

 

 

 首先,我们利用tcpdump指定IP地址收集被攻击的端口写入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

统计个数

 

 接着使用如下指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接IP地址输出到2.txt中。

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

 

 6.攻击者尝试攻击了哪些安全漏洞?
使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii指令先查一下网络流分布情况。发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口

查看一下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 

接下来用wireshark筛选出经过每个端口的数据包筛选通过80端口的数据包

tcp.dstport==80 && ip.dst == 172.16.134.191

 

 218.25.147.83进行了蠕虫攻击

3.实践总结

遇到的最大的问题就是哪里都有很多问题,看不懂汇编。工具不会使用,这章的内容比较多,也比较复杂,需要进一步学习

 



猜你喜欢

转载自www.cnblogs.com/yz0218/p/12803926.html