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

问题
作业所属课程 网络攻防实践
作业要求 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10695
课程目标 了解网络攻防的概要
这个作业在哪个具体方面帮助我实现目标 学习和了解恶意代码的基础知识和学习各类常见恶意代码实现机理
作业正文.... 见后文
参考资料 见后文

恶意代码安全攻防

一、实践内容

恶意代码基础知识

  • 恶意代码:一组指令集,并不一定是二进制文件,还有可能是脚本语言代码、宏代码、或寄生在其他代码或启动扇区的一段指令流。

  • 恶意代码的发展趋势

    • 恶意代码的复杂度和破坏力不断增强,从早期简单感染DOS操作系统的Brain病毒到复杂的内核级后门工具和破坏力强大的蠕虫,恶意代码在快速传播、隐蔽性、破坏力和对抗性上都在不断地发展。
    • 恶意代码技术的创新越来越频繁,特别是在近几年,大量的新概念被不断提出,同时验证这些新概念和新技术的恶意代码也频繁地公布于众。
    • 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具,在20世纪80-90年代,恶意代码的关注重心在于感染可执行程序的计算机病毒,但从最近几年的发展趋势来看,更多的关注焦点已经转移到对整个互联网造成严重危害的僵尸网络、网页木马、以及内核级的高级攻击技术。

计算机病毒

  • 概念:其代码可自己复制,注入到其他程序,注入过程需要人工干预才可。

  • 基本特性:

    • 感染性:感染性又可称为传染性、自我复制、自我繁殖、再生性,指的是计算机病毒具有把自身复制到其他程序中的特性。
    • 潜伏性:计算机病毒一旦感染目标程序后,一般情况下除了感染外,并不会立即进行破坏行为,而是在系统中潜伏。
    • 可触发性:计算机病毒在满足特定的触发条件后,激活其感染机制或破坏机制。
    • 破坏性:计算机病毒在触发后会执行一定的破坏性动作来达到病毒编写者的目标。
    • 衍生性:计算机病毒的编写者或其他了解此病毒的人可以根据其个人意图,对某一个已知的病
  • 感染及引导机制:计算机病毒需要将自身嵌入到一个宿主程序上才能运行,而感染的方式也决定了计算机病毒如何从宿主程序上被引导运行的方式,因此计算机病毒的感染和引导机制是紧密相关的。计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类。

  • 传播:一旦病毒在计算机系统中被触发,它就会寻找可供感染的宿主程序位置,并复制自身并寄生在宿主上,病毒可能依附在移动存储或硬盘的引导扇区,或者可以嵌入代码的文档、可执行文件或者脚本文件。然而在通常意义下,病毒不会像第9.1.4节将要介绍的蠕虫一样,

网络蠕虫

  • 概念:其代码可自己复制,不需要注入,是自主运行类。修改操作系统相关配置,电脑在启动时得以运行。一般通过主动扫描和攻击网络服务的漏洞进行传播,一般不需要人工干涉。

  • 特性:

    • 复制性:自我复制,感染性
    • 定义特性:通过网络的自主传播
    • 宿主:不需要宿主,独立程序
    • 传播路径:直接通过网络传播,包括内网和互联网
    • 传播是否需要用户交互:一般来说,不需要用户交互,通过目标系统上的安全漏洞或错误配置进行传播。但对于一小部分蠕虫,如邮件蠕虫,用户交互是必要的。
  • 组成结构:

    • 弹头:获取计算机的访问权限,常用如下手段:
      • 缓冲区溢出攻击
      • 文件共享攻击
      • 利用电子邮件传播
      • 利用其他普遍的错误配置
    • 传播引擎:完成蠕虫样本的复制传播,传播引擎通常利用的网络传输机制包括文件传输协议FTP、小文件传输协议TFTP.超文本传输协议HTTP.服务信息块协议SMB以及原始SOCKET套接字等。
    • 目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确认其是否可以被攻击。目标选择算法有下面几种:
      • 电子邮件地址
      • 主机列表
      • 被信任的系统
      • 网络邻居主机
      • 域名服务
      • 通过特定规则任意选择IP目标地址
    • 有效载荷:蠕虫的有效载荷就是附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作,蠕虫常常携带的有效载荷包括如下:
      • 植入后门
      • 安装分布式拒绝服务攻击代理
      • 组建僵尸网络
      • 执行一个复杂的计算

后门与木马

  • 后门和木马是恶意代码中经常被混淆的两类技术形态,在实际的样本实例中也往往融合在一起使用。从定义特性上进行分析得到如下结论:

    • 后门概念:后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道。
    • 木马概念:木马作为特洛伊木马的简称,是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
  • 后门工具能够为攻击者提供多种不同类型的访问通道,包括如下几种:

    • 本地权限提升和本地账号
    • 单个命令的远程执行
    • 远程命令行解释器访问
    • 远程控制GUI
    • 无端口后门
  • 特洛伊木马程序可以用于以下目的:

    • 欺骗用户或系统管理员安装特洛伊木马程序,这样木马程序就通过毫无戒备的用户进入到计算机系统中
    • 隐藏在计算机的正常程序中,将自己伪装成看起来属于该系统,使得用户和管理员不会觉察到它的存在,通常与后门工具结合,成为木马后门。

僵尸程序与僵尸网络

  • 概念:僵尸网络(botnet) 是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸网络是指攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。

  • 演化过程:

  • 僵尸网络的功能结构可以分为主体功能模块和辅助功能模块:

    • 主体功能模块:实现僵尸网络定义特性的命令与控制模块和实现网络传播特性的传播模块。

    • 辅助功能模块:对僵尸程序除主体功能外其他功能的归纳,主要包括信息窃取、僵尸主机控制、下载与更新和躲避检测与对抗分析等功能模块。

    • IRC僵尸网络的工作机制如图:

  • 僵尸网络的命令与控制机制:

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

Rootkit

  • 概念:通过控制目标计算机操作系统的关键组件,来为攻击者提供强有力的手段,用来获取访问并隐藏在系统中。属于特洛伊木马的范畴,它获取运行在目标计算机上与操作系统相关联的常规程序,并用恶意版本替换它们。

  • 分层运行:根据操作系统的分层,Rootkit可以运行在两个不同的层次上,即用户模式和内核模式。用户模式Rootkit修改的是操作系统用户态中用户和管理员所使用的一些内建程序和库文件,而内核模式Rootkit则直接攻击操作系统最核心的内核,修改内核从而隐藏自身。

  • 用户模式Rootkit

    • unix平台用户模式RootKit中集成的工具可以被分为如下五种不同的类型:
      • 提供后门访问的二进制替换程序
      • 隐藏攻击者的二进制替换程序
      • 用于隐藏但不替换的二进制程序
      • 另外一些零散的工具
      • 安装脚本
    • Windows平台实现Rootkit技术有以下三种技术:
      • Windows为了支持第三方工具扩展Windows的内置功能特性,提供了一些开发接口。用户模式Rootkit可以使用这些开发接口将自身实现的恶意功能逻辑插入到现有的Windows函数之间,而无须覆盖Windows代码。
      • Windows使用了WFP机制来防止操作系统关键文件被修改或替换,因此Windows用户模式Rootkit要想覆盖操作系统关键文件,就必须首先使得WFP功能失效,而WFP可以非常容易地修改注册表中SFCDisable键值进行关闭,或者可以修改用于替换的备份文件目录Dllcache路径位置来破坏WFP机制。
      • 用户模式Rootkit还可以使用DLL注入和API挂钩技术把恶意代码直接加入运行进程的内存空间中。
  • 内核模式Rootkit

    • 大多数内核模式RootKit采用如下技术手段:
      • 文件和目录隐藏
      • 进程隐藏
      • 网络端口隐藏
      • 混杂模式隐藏
      • 改变执行方向
      • 设备截取和控制

恶意代码分析方法

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

  • 与分析两性代码的区别:

    • 通常不能提前知道恶意代码的目的是什么,需要找出恶意代码的目的。
    • 恶意代码具有恶意的攻击目的,会对所运行的环境进行恶意的破坏,因此在恶意代码分析时需要-一个受控、可恢复的环境。
    • 恶意代码分析在绝大多数情况下不会拥有待分析程序的源代码,因而需涉及二进制代码分析,其难度要比源码分析要高很多。
    • 恶意代码目前都会引入大量各种各样的对抗分析技术,对恶意代码分析带来了很多困难和挑战。
  • 恶意代码分析环境

    • 恶意代码发烧友的分析环境
    • 基于虚拟化构建恶意代码分析环境
    • 用于研究的恶意代码自动分析环境
  • 恶意代码静态分析技术

    • 包含反病毒扫描、文件格式识别 、字符串提取分析、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息、Email地址、包含库文件和函数调用、二进制结构分析、反汇编与反编译、代码结构与逻辑分析、加壳识别与代码脱壳
  • 恶意代码动态分析技术

    • 包括基于快照对比的分析方法和工具、系统动态行为监控方法 、网络协议栈监控方法、沙箱技术、动态调试技术

二、实践过程

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

问题: 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:

  • 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
  • 使用超级巡警脱壳机等脱壳软件,对rada恶意代码进行脱壳处理。
  • 使用字符串提取工具,对脱壳后的rada代码进行样本分析,从中发现rada恶意代码的编写作者是谁

回答:
1. 在win攻击机上创建共享文件夹,与宿主机之间传输文件,将实践所需文件拷贝到虚拟机。

2. 使用指令file RaDa.exe来查看该文件的文件类型,可知道这是一个有图形化界面(GUI的Win32 PE可移植可执行)程序,截图如下。

3. 使用程序PEiD.exe查看该文件加壳类型,可知该文件加了 UPX 壳,并且在扩展信息中可以看到加壳的工具为UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo,截图如下:

4. 使用系统自带的超级巡警进行脱壳,截图如下:

5. 使用系统自带的反汇编软件 IDA Pro Free来反汇编刚脱壳的文件,截图如下:

实践二:分析Crackme程序

问题: 使用IDA pro静态分析或者动态分析crackme1.execrackme2.exe寻找特定的输入,使其能够输出成功信息。

回答:
1. 使用实践一中所提到的 IDA Pro Free软件来打开文件crackme1.exe,截图如下:

2. 如题我们需要得到正确的输入信息,先尝试一下随便输入的信息看回馈情况,在这里我输入我学号和姓名加学号为例,截图如下:

3. 这里用IDA Pro Free再次打开文件crackme1.exe,可以看到刚才我测试的两条输入信息的反馈信息,I think you are missing somethingPardon? What did you say?

4. 这里使用IDA Pro Free自带的函数分析功能,使用树状图的显示查看crackme1.exe的函数结构,可以看到最为特殊的函数sub_401280,如图所示:

5. 通过树状图提供的信息,我从start开始找,再找到sub_401110,函数最后定位到sub_401280函数,如图所示:



``
6.sub_401280函数这段反汇编语言中可以看到cmp [ebp+arg_0],2,它的作用是判断程序是否有两个参数,再往下就能看到正确的口令为I know the secret,截图如下:

7. 接下来用口令I know the secret进行验证,截图如下:

8. 有了之前的经验,使用同样的办法验证crackme2.exe,有区别的是从IDA Pro Free中看到crackme2.exe需要先改名为crackmeplease.exe,截图如下:


实践三:分析一个自制恶意代码样本rada,并撰写分析报告

问题:

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

回答:
整体分析:
分析1: 首先打开三个监视软件wiresharkProcess Monitorregshot.exe,截图如下:


分析2: 打开恶意软件rada.exe,然后观察上面的三个监视软件,能看到一系列的变化,截图如下:

分析3:regshot.exe中可以看到增加了两个注册列表项,用来进行开机自启动的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,可以看到在C盘里面建了文件,截图如下:

分析4: 切换到Process Monitor中可以看到,可以看到程序监测到了在C盘新建文件的过程,并且建立的结果是success,截图如下:

分析5: 使用IDA Pro Free来查看之前已经脱壳的文件RaDa_unpacked.exe,进入Strings对话框,在Type右键点击Setup设置类型为Unicode,截图如下:

分析6:strings对话框看命令行参数:可以看到作者、时间等信息,截图如下:

分析7:strings对话框找到一个 IP 地址,双击定位:猜测程序被执行后访问了这个地址,截图如下:

分析8: 由上图可知,看到RaDa_commands.html,寻找这个字符串对应的函数sub_404FB0进入这个函数,看黄色部分的汇编代码,得知是被拷贝到dword_40C030这个变量中,截图图下:

分析9: 接下来,找到dword_40C030变量对应的函数sub_4052C0打开其Call Graph查看。这里我们看到判断了三个网段分别为192.168.172.16.10.(三个私有网段,确保服务器在私有网段中,然后到服务器去取命令文件),截图如下:

回答1: 使用md5sum RaDa.exe来查看该恶意程序的摘要信息分析,使用file RaDa.exe来查看文件类型,截图如下:

回答2: 当连接上互联网时,该程序就会通过http请求连接到指定主机,攻击者可以利用其完全控制该系统,是一个http后门程序。
回答3: RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动。会请求 Web 服务器;解析获得的指令并执行。
回答4: UPX加壳技术,采用的工具是UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
回答5: 不具有自主传播模块,不具有传播和感染的性质,所以它不属于病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。是一个http后门程序。
回答6: 使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令————Bobax、海阳顶端、Setiri等。
回答7: 由上述分析可知是Raul silesDavid Perze于2004年编写的

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

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

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

问题一回答:

  • 因特网中继聊天(Internet Relay Chat)简称IRCIRC的工作原理非常简单,只需要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台 IRC 服务器上即可。IRC 特点是通过服务器中继与其他连接到这一服务器上的用户交流。

  • 注册时需要发送的消息有三种,格式分别是:

    • 口令USER <username> <hostname> <servername> <realname>
    • 昵称PASS <password>
    • 用户信息NICK <nickname>
  • 客户端就使用JOIN信息来加入频道,格式:JOIN <channel>

  • IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。

问题二回答:

  • 僵尸网络是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
  • 僵尸网络,是互联网上受到黑客集中控制的一群计算机,往往被黑客用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS、海量垃圾邮件等,同时黑客控制的这些计算机所保存的信息也都可被黑客随意“取用”。

问题三回答:

  • 上面提到,IRC服务使用的是6667端口,所以用过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667来进行筛选,可以找到所有与蜜罐主机进行通信的IRC服务器
    • 209.126.161.29
    • 66.33.65.58
    • 63.241.174.144
    • 217.199.175.10
    • 209.196.44.172

问题四回答:

  • 首先使用指令sudo apt-get install tcpflow安装tcpflow工具,截图如下:

  • 使用指令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"提取209.196.44.172172.016.134.191之间的所有的 IRC 数据包,此时会获得三个文件,172.016.134.191.01152-209.196.044.172.06667209.196.044.172.06667-172.016.134.191.01152report.xml,使用指令cat report.xml看到他包含其他两个文件的相关信息:上述双方的ip地址,端口,mac地址,通信时间等等。截图如下:

  • 首先我们计算在当前主机加入IRC时刻,IRC中主机的个数,使用的PY代码如下所述,主机的个数是 3457。这仅仅是第一步的计算。然后我们在计算截至结束嗅探的时候的不断有主机加入和退出IRC频道,我们在补充上这个过程中的主机个数,共计3608个。具体使用的代码如下(这里借用了启龙写的代码):

import re

pattern = re.compile( r':irc5.aol.com 353 rgdiuggac @(.*?):(.*?)\n', re.S)

pattern2 = re.compile(r':(.*?)!~', re.S)

dict = {}
with open("test.txt", 'r') as fp:
    thisline = fp.readline()
    while thisline:
        if thisline.startswith(":irc5.aol.com 353 rgdiuggac"):
            items = re.findall(pattern, thisline)
            string = items[0][1]
            splitstring = string.split(" ")

            for item in splitstring:
                dict[item] = 1
        else:
            items = re.findall(pattern2, thisline)
            print(items)
            if len(items) == 1:
                dict[items[0]] = 1

        thisline = fp.readline()

print(len(dict) - 1)

问题五回答:

  • 我们假定进入蜜罐的流量都是攻击操作,使用以下命令查找端口并输出到1.txt 中,可以看到共有148个端口被攻击

  • 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

  • 使用指令cat 1.txt来查看输出结果

  • 接着使用如下指令找出所有的可能连接的主机的 IP 地址。这个指令的作用就是将连接IP地址输出到2.txt中,可以看到一共有165个主机被用于蜜罐入侵。

  • 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

  • 使用指令cat 1.txt来查看输出结果

问题六回答:

  • 从被攻击的端口着手,使用指令snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii查看一下网络流分布情况。发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的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端口。输出可以看到 TCP 响应端口有:

    • 135:rpc
    • 139:netbios-ssn
    • 25:smtp
    • 445:smb
    • 4899:radmin
    • 80:http
  • 同上筛选出蜜罐主机相应的UDP端口,输出可以看到UDP```响应端口有:137(netbios-ns)

  • 下面,就筛选出来的端口来逐一分析,先来tcp 80端口,wireshark中使用条件tcp.dstport==80 && ip.dst == 172.16.134.191进行筛选,可以看到连接最多的就是IP地址24.197.194.106,他的行为就是不停的用脚本在攻击IIS服务器的漏洞,从而获取系统权限。

  • 再看80端口下一个ip地址210.22.204.101,攻击者是想通过缓冲区溢出攻击来获得一个命令行。

  • 再看80端口下一个ip地址218.25.147.83,在tcp流中看到c:\notworm说明这是一个蠕虫攻击,百度查得是红色代码病毒。

  • 其他的ip都是正常访问,再通过条件tcp.srcport==80 && ip.src == 172.16.134.191 && http来筛选查看,蜜罐主机在80端口对外的流量进行分析,发现蜜罐主机做的回应均为一个IIS服务器的默认页面,所以80端口的这些攻击均失败。

  • 通过条件tcp.dstport==139 && ip.dst == 172.16.134.191来看TCP 139号端口。可以看到有很多主机连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样也没有成功,所以应该是SMB查点。

  • 通过条件tcp.dstport==445 && ip.dst == 172.16.134.191来看TCP 445号端口,这个端口连接非常多,可以看到许多\samr, \srvsvc字符串,查询字符串后很容易发现一个PSEXESVC.EXE字符串,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。

  • 通过如图蜜罐反馈给ip61.111.101.78的信息来看,说明两者建立了会话,说明攻击成功。

  • 再看,通过字符串信息可以知道ip210.22.204.101对蜜罐使用了LAN Manager口令猜测,并且成功攻击。

  • 同样的方法来看端口tcp 135号端口和25号端口,在数据流中只能看到双方进行了连接,但是没有数据的交互的,所以这攻击者可能是对这两个端口进行了connect扫描。

  • 再来看udp 137号端口,这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是NetBIOS查点。

问题七回答:

  • 通过对问题六的回答可知,成功的攻击有tcp 445端口ip地址为210.22.204.101发起的Dv1dr32蠕虫攻击和tcp 445端口ip地址为61.111.101.78发起的LAN Manager口令猜测攻击。

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

  • 问题1: :云班课下载的实践资料无法传到win攻击机。
  • 问题1解决方案: 通过百度查询,最后使用虚拟机自带的共享文件功能将实践资料传到攻击机。

四、实践总结

本周的实践真的是做的我有点心累,面对庞杂的新知识,需要慢慢的去理解,实践的任务也挺重,做完之后就只想睡觉了,bye~

参考资料

如何在VMware虚拟机和宿主机之间通过共享文件夹共享数据
IRC操作
脱壳基本方法
参考了很多大佬们的博客

posted @ 2020-04-29 23:23  蒋昕睿_20199307  阅读(301)  评论(0编辑  收藏  举报