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

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

一、实践内容

1.恶意代码定义和分类

  • 恶意代码:指的是使计算机按照攻击者意图执行以达到恶意目标的指令集。
  • 分类:计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸网络、内核套件。
    • 计算机病毒:一种能够自我复制的代码,通过嵌入其他程序进行感染,需要人工干预传播
    • 蠕虫:与计算机病毒相比,不需要嵌入其他宿主程序中,可以自主运行
    • 恶意移动代码:可以自动从远程主机下载并在本地执行的轻量级程序,常在web端实现
    • 后门:可以绕开正常的安全控制机制,为攻击者提供访问的代码
    • 特洛伊木马:伪装成有用软件,但是内含恶意目标的恶意代码
    • 僵尸网络:使用僵尸程序构建的执行一对多命令的攻击网络。
    • 内核套件:用以获取并保持最高控制权的一类恶意代码。

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:恶意代码文件类型识别、脱壳和字符串提取

  • 实践任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
    • 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
    • 使用超级巡警脱壳机等脱壳软件,对rada恶意代码进行脱壳处理
    • 使用字符串提取工具,对脱壳后的rada代码进行样本分析,从中发现rada恶意代码的编写作者是谁
      1.进入rade文件,使用file命令来分析对应的恶意程序:file RaDa.exe

  • 可以看到该程序是一个32位的运行在windows操作系统上的程序,GUI表示这个程序是一个有图形界面的程序,intel 80386表示处理器架构
    2.使用执行指令:strings RaDa.exe,来查看该程序可打印字符串
  • 执行指令后发现可打印的字符串为乱码,无法分析出有效信息,所以判断该程序采用了加壳防止反汇编的技术
    3.打开PEiD工具来查看该程序使用的加壳工具


  • 可以看到加壳的工具为:UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
    4.使用虚拟机提供的超级巡警自动脱壳即可实现程序脱壳:

    5.在输出目录中,可以看到脱壳后的程序

    6.使用字符串提取工具,对脱壳后的rada代码进行样本分析,输入命令:命令strings RaDa_unpacked.exe

实践2:分析Crackme程序

  • 实践挑战:使用IDA pro静态分析或者动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。
    1.针对crackme1.exe,按着题目要求进行特定输入
  • 从输入两个以上值后输出不变,可以看出该程序的输入为一个参数
    2.用IDA打开该恶意程序进行分析,查看程序中的明文字符串以及函数结构

  • 从明文字符串看出前面四项为输入参数后的反馈字符,最终输入为:I know the secret;从函数结构看出字符串匹配密码是C语言写的且关键程序段为401280,继续分析代码结构:
  • 程序用“I know the secret”对应的字符串和[eax]对应的字符串(用户输入的口令)相比较。
    3.根据分析结果输入“I know the secret”

    4.同理分析第二个恶意程序,每次运行输入不同数目的参数,观察其反馈值,可以看到当输入两个三个等多个参数时,其输出没有变化,初步判定该程序输入值只有一个

    5.同样使用IDA工具来分析第二个恶意程序

  • 继续分析代码结构:

  • 第二次判断的字符串应该是crackmeplease.exe,所以我们将程序改名,改名之后的判断通过之后应该就是下一个参数的问题,所以再输入“I know the secret”
    6.解开程序

实践作业:样本分析

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

      2.打开process explorer查看恶意软件rada

      可以得出软件启动后的行为有:
  • 通过HTTP协议请求10.10.10.10\RaDa\RaDa_commands.html
  • 将文件RaDa.exe复制到了C:\RaDa\bin目录下
  • 修改注册表,将rada设置为开机启动。 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 即为控制计算机启动项的注册表信息, RaDa: C:\RaDa\bin\RaDa.exe
    3.利用脱壳工具后使用 IDA 对其进行分析(具体过程和上述实验一样),关注有IP地址的这一段:
  • 进入 Strings 对话框,在 Type 右键点击 Setup,设置类型为 Unicode,找到操作对应的函数sub_404FB0

    4.在sub_404FB0这个函数中,这个字符串被拷贝到变量dword_40C070,寻找这个变量对应的函数,为sub_40AAA0,打开其Call Graph查看。这里我们看到判断了三个网段分别为192.168.、172.16.、10.


    5.问题回答:
  • 提问:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
  • 回答:摘要为caaa6985a43225a0b3add54f44a0d4c7;Win32 PE 加 UPX 壳 GUI 文件。
  • 提问:找出并解释这个二进制文件的目的。
  • 回答:这个二进制文件通过网络获取指令,并执行;攻击者可以利用其完全控制该系统,是一个后门程序。
  • 提问:识别并说明这个二进制文件所具有的不同特性。
  • 回答:会请求 Web 服务器;解析获得的指令并执行。
  • 提问:识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
  • 回答:UPX 压缩技术。
  • 提问:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
  • 回答:不具有自主传播模块,不具有传播和感染的性质,所以它不属于病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。是一个后门程序。
    给出过去已有的具有相似功能的其他工具。
  • 提问:给出过去已有的具有相似功能的其他工具。
  • 回答:使用http方式来同攻击者建立连接————Bobax、海阳顶端、Setiri等
  • 提问:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
  • 回答:Raul siles和David Perze于2004年编写的

实践作业:取证分析

  • 题目:一个未设置管理员密码的Windows 2000蜜罐主机,被攻击后加入了一个僵尸网络,在蜜罐主机运营期间,共发现了15164个不同主机加入了这个僵尸网络。用Snort工具收集的该蜜罐主机5天的网络流日志,并通过编辑去除了一些不相关的流量并将其 组合到了单独的一个二进制网络日志文件中,同时IP地址和一些 其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。分析这个日志文件并回答以下给出的问题:

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

    • IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。IRC明文传输使用的端口6667,偶尔也会使用6660—6669SSL加密。使用的端口6697。
  • 2.僵尸网络是什么?僵尸网络通常用于干什么?

    • 僵尸网络是一组以协调方式连接的计算机, 用于恶意目的。僵尸网络中的每台计算机都称为僵尸网络。这些机器人形成受损计算机网络,由第三方控制并用于传输恶意软件或垃圾邮件或发起攻击。
  • 3.蜜罐主机(ip 172.16.134.191 )与哪些IRC服务器进行了通信?
    用wireshark打开botnet_pcap_file.dat,设置过滤条件:ip.src == 172.16.134.191 && tcp.dstport == 6667,筛选源地址为蜜罐主机,目的端口为6667的包:

    统计目的地址得:209.126.161.29 ;66.33.65.58 ;3.241.174.144 ;217.199.175.10 ;206.196.44.172

  • 4.在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
    再攻击机Kali里面输入命令:tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",进行分流。这条指令的含义就是读取文件,筛选host和端口6667后进行分流执行之后我们将获得三个文件,172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152和 report.xml。输入如下指令进行搜索有多少主机连接: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地址被用于攻击蜜罐主机?
    我们认为进入蜜罐的流量都是攻击。使用以下命令查找端口并输出到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

    可以看到共有148个端口被攻击了
    接着使用如下指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接IP地址输出到2.txt中:tcpdump -n -nn -r botnet_pcap_file.dat '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.攻击者尝试了哪些安全漏洞?+ 7.哪些攻击成功了?是如何成功的?
    先用:snort -r botnet_pcap_file -c /etc/snort/snort.conf -K asciisnort,分析一下,发现绝大部分都是TCP和UDP包

    然后tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq筛选有响应的TCP端口,即SYN,ACK标志为1

    再用tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq筛选有响应的UDP端口

    对每个端口逐一分析:
    tcp.port135 or tcp.port25筛选这两个端口,发现这两个端口的流量都是只有连接,没有数据交互,应该是只对这两个端口进行了扫描

    ip.dst == 172.16.134.191 and tcp.dstport==80筛选连接蜜罐主机80端口的包,发现24.197.194.106不断地在进行攻击,应该是在用脚本攻击IIS服务器

三、学习中遇到的问题及解决

问题:虚拟机脱壳和代码分析的软件操作不熟练
解决:加大参考同学博客的力度,不断对比,找到正确的操作方法

四、实践总结

本次实验难度最大,我几乎参考了所有同学的博客,有很多时候无法得到想要的东西,因此这次实验做的时间最长。

参考资料

  • 几乎所有同学的博客
posted @ 2020-04-29 23:51  20199306—胡一鸣  阅读(249)  评论(0编辑  收藏  举报