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

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

1.实践内容

恶意代码基础知识

恶意代码定义与分类

  • 恶意代码(Malware、Malicious Code),指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。

  • 恶意代码的实现方式:二进制执行文件、脚本语言代码、宏代码、寄生在其他代码或启动扇区中的一顿指令流

  • 恶意代码的类型:计算机病毒、蠕虫、恶意移动代码、特洛伊木马、后门、僵尸程序、内核套件

  • 恶意代码的命名规则与分类体系:[恶意代码类型.]恶意代码家族名称[.变种号]

  • 基于多维度标签的恶意代码技术形态分类方法

恶意代码发展史

  • 恶意代码的发展趋势:

    • 恶意代码的复杂度和破坏力不断增强

    • 恶意代码技术的创新越来越频繁

    • 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具

计算机病毒

  • 计算机病毒使一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成

  • 基本特性 :感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。

  • 计算机病毒的感染及应带机制

    • 可执行文件(最为普遍的方式):前缀感染机制(病毒将自身复制到宿主程序的始端)、后缀感染机制(病毒将自身复制到宿主程序的末端)、插入感染机制(病毒在感染宿主程序时,病毒代码放在宿主程序的中间)。

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

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

    • 传播机制:一旦病毒在计算机系统中被触发,他就会寻找可供感染的宿主程序位置,并复制自身并寄生在宿主上,病毒可能依附在移动存储或硬盘引导扇区,或者可以嵌入代码的文档、可执行文件或者脚本文件。

网络蠕虫

  • 网络蠕虫(Worm)是一种通过网络自主传播的恶意代码,他的出现相对于传统计算机病毒和木马、后门来说比较晚。但无论从传播速度、传播范围环视破坏程度上来讲,都是以往的恶意代码所无法比拟的。

  • 网络蠕虫是一种可以自我复制的代码,并且通过网络传播,通常无须认为干预就能够传播。

  • 组成结构:

    • 弹头:利用目标系统安全漏洞入侵目标系统。包括缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。这里其实就是我们之前说的渗透攻击模块。

    • 传播引擎:通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。方式有FTP/TFTP/HTTP/SMB/直接传送/单包等。

    • 目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。这里就是扫描策略。

    • 有效载荷:附加的攻击代码,执行一些特殊目地的操作。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。

后门与木马

  • 后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道

  • 木马(特洛伊木马的简称)是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序

  • 区分:将提供对受害计算机远程控制的任何程序或受害计算机上的远程命令行解释器均视为木马;而根据定义特性,它们应该被视为后门,但如果将后门工具伪装成良性程序,这才具备真正的木马特性。

  • 后门类型:本地特权提升、单个命令的远程执行、远程命令行解释访问器(NetCat)、远程控制GUI(VNC、BO、冰河、灰鸽子)、无端口后门(ICMP后门,基于Sniffer非混杂模式或混杂模式的后门)。

  • 自启动后门:Windows通过修改自启动文件、注册表自启动项,Linux修改inittab、rc.d/init.d文件。

  • 木马的伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒(开发者有意为之,后面的利益就不可知了)。

僵尸程序与网络

  • 僵尸网络(botnet)是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。

  • 僵尸网络功能结构:主体功能分为命令控制模块和传播模块,辅助功能分为信息窃取模块、主机控制模块、下载更新模块、防分析检测模块。

  • 僵尸网络类型:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。

  • IRC僵尸网络的工作机制

Rootkit

  • 定义:隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。换句话说,就是root权限的kit工具包。

  • 用户模式Rootkit:恶意修改操作系统在用户模式下的程序/代码,达到隐藏目的(木马化操作系统用户模式应用程序)。主要分为五种类型:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本。

  • 内核模式Rootkit:恶意修改操作系统内核,从而达到更深的隐藏和更强的隐蔽性(对内核组件的恶意修改和木马化)。主要有如下方式:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。

  • Linux内核Rootkit:参考Linux Rootkit Learning,这篇博文讲的很好!。下图所示是利用LKM机制实现Linux内核模式Rootkit,LKM就是可装载内核模块。下图主要是通过insmod命令插入恶意内核模块,然后进行系统调用表的修改。

恶意代码分析方法

恶意代码分析技术概述

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

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

  • 分析良性代码与分析恶意代码的区别:

    • 不能提前知道恶意代码的目的。

    • 恶意代码具有恶意的攻击目的,会对所运行环境进行恶意破坏。

    • 恶意代码分析在绝大数情况下不会拥有待分析程序的源代码。

    • 恶意代码目前都会引入大量各种各样的对抗分析技术。

恶意代码分析环境

  • 恶意代码发烧友的分析环境:这个网络拓扑图真的没什么好说的,就是利用一个集线器或者交换机把计算机连接在一起,在于成本低。

恶意代码静态分析技术

  • 定义:通过反病毒引擎扫描识别已知的恶意代码家族和变种名,逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。

  • 反病毒软件扫描:使用反病毒软件对待分析样本进行扫描。主要有卡巴斯基、赛门铁克、瑞星、金山等。

  • 文件格式识别:依靠专业工具如file(确定恶意代码目标平台和文件类型),peid(文件类型、编译链接器、是否加壳),FileAnalyzer(分析Win32平台窗口程序中包含的特殊文件)等进行识别分析。

  • 字符串提取:主要提取的信息包括可能获得的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。

  • 二进制结构分析:nm指令在可执行文件中查找symbols重要元素。objdump主要功能有从可执行文件中限制不同类型的信息、编译器类型、代码段数据段位置、反汇编。

  • 代码结构与逻辑分析:程序结构主要是了解Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑。

  • 加壳识别和代码脱壳:包括四个方面:加密(固定加密/解密器)、多样性(多样化解密器)、多态(多态病毒能够通过随机变换解密器从而使得每次感染所生成的病毒实例都具有唯一性)、变形(直接在病毒体上加入各种代码混淆技术)。

恶意代码动态分析技术

  • 定义:通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。

  • 恶意代码动态分析方法列表

  • 动态分析中的监视与控制:行为监视即一系列监控软件来控制和观察恶意代码的运行情况。网络控制即与业务网络和互联网保持物理隔离。

  • 快照比对:分为四步:对“干净”资源列表做快照、运行恶意代码、对恶意代码运行后的“脏”资源列表做快照、对比“干净”和“脏”快照,获取恶意代码行为结果。

  • 动态行为监控:包括Notification机制(Win32/Linux系统本身提供的行为通知机制)和API Hooking技术(对系统调用或API调用进行劫持,监控行为)。

  • 网络监控:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。

  • 沙盒:沙盒技术用于安全运行程序的安全环境,经常被用于执行和分析非可信的代码。

  • 动态跟踪调试:在程序的执行过程中进行二进制调试(Debugging)。

2.实践过程

实践一:恶意代码静态分析

任务:对提供的rada恶意代码样本(U盘或FTP/materials/course9下载),在WinXP_Attacker虚拟机中进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。

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

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

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

  • 搜先查看文件类型,利用file RaDa.exe命令查看RaDa.exe的文件类型,可以看出来是一个PE文件,还有图形界面(GUI)。运行平台是32位的windows

  • 下面来看看有没有加壳,下面使用PEiD工具(查壳)来查看加壳的类型。我们可以看到这个是一个版本为0.89.6的UPX壳

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

  • 接下来用超级巡警这个软件进行脱壳,脱完之后输出为RaDa_unpacked.exe

  • 分析,打开IDA Pro Free选择脱壳之后的文件,可以看到如下信息。可以看到作者的信息DataRescue sa/nv,当然还有好多信息,慢慢看吧!

实践二:分析Crackme程序

任务:在WinXP Attacker虚拟机中使用IDA Pro静态或动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息。

  • 首先分析crackme1.exe。对crackme1.exe进行执行,猜测是有参数的,经过试验,猜测这个程序的输入是一个参数。

  • 接下来利用IDA Pro打开这个程序分析,我们打开通过Strings窗口可以查看该程序中出现的字符串,我们发现了前面的两种反馈信息,I think you are missing something.Pardon? What did you say?,这两个我们之前已经见过了,很容易猜测,第一个是参数不对的返回情况,第二个是给的参数数量对了,但是具体的内容不对。

  • 接下来看函数调用图(Function Call),找一下有关字符串的相关函数,输出函数

  • sub_401280这个函数里有strcmp printf,那我们就来看看它,可以看到push、sub、move、cmp等操作,我们知道cmp比较函数参数是不是2。

  • 字符串匹配函数strcmp,输入的字符串与I know the secret进行比较,如果不匹配就输出Pardon? What did you say?。正确的话,就输出You know how to speak to programs, Mr. Reverse-Engineer

  • 接下俩我们实验一下啦!

  • 接下来我们分析crackme2.exe。有了第一个做铺垫,我们来直接用IDA Pro进行分析

  • 按照之前的步骤,我们打开调用图(Function Call),找一下有关字符串的相关函数,输出函数。

  • 我们看到上面这些函数(strcmp、fprintf等),那么我们来看看sub_401280这个函数吧!

  • 按照之前的步骤,我觉得字符串应该是crackmeplease.exe,但是我将这个字符串当作参数输入之后并没有成功。最后,大佬的帮助下我知道这个是对程序名的判断!

  • 知道是名字问题,那我们就改名吧!动起来!改名之后的判断下一个参数的问题,通过上图可以看到,最后一次判断是对比字符串I know the secret.

实践三:样本分析,分析一个自制恶意代码样本

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

  • 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。

  • 找出并解释这个二进制文件的目的。

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

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

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

  • 给出过去已有的具有相似功能的其他工具。

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

solution

  • 首先打开Filemon(文件),Regmon(注册表),Wireshark(网络)三个软件进行监测。启动它!!在Filemon中,看到RaDa.exe读取了大量的DLL文件、在C:\rada路径下创建了tmp文件、复制到了C:\RaDa\bin目录下并改写了文件

  • 然后是regmon的保存的txt文件。这里可以发现他把自己添加到了自动启动。 查看注册表也可以发现。

  • 接着我们再看看wireshark的结果,在wireshark中看到主机与10.10.10.10进行了大量的通信。

  • 接下来我们静态分析吧!利用md5sum RaDa.exe指令得到其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。利用file RaDa.exe识别出这是32位PE文件,并且还是个GUI文件,

  • 我们超级巡警进行脱壳,这是一个UPX壳,并且成功脱壳。

  • 脱壳之后就是利用IDA Pro进行分析了,查看全部字符串之前先把类型改为unicode(统一码)

  • 我们可以从下图看到版本作者

answer

  • md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。32位PE GUI可执行程序,同时这是一个UPX加壳文件。

  • 通过上面的分析,我们知道用户上网,就得到了攻击者的指令,并且攻击者可以完全控制该系统(指令),所以这应该是一个后门程序或者僵尸程序。

  • RaDa.exe被执行时,它会将自身安装到系统C盘中,并通过修改注册表的方式使得每次系统启动,启动后主要就是以下过程:

    • 从指定的web服务器请求指定的web页面。

    • 解析获得的web页面,获取其中的指令。

    • 执行解析出来的指令,主要的指令上面给出。

    • 等待一段时间后继续按照这个循环执行。

  • 防分析技术如下:

    • UPX加壳,答案提到的手动修改没有仔细研究。

    • 通过查看网卡的MAC地址以及查看VMware Tools的注册表项 来判断操作系统是否运行在VMware虚拟机上,如果是,则使用—-authors参数时将不会输出作者信息。

    • Starting DDoS Smurf remote attack字符串可能让别人联想这是DDos攻击。

  • 一个后门程序或者僵尸程序。

  • Bobax、特洛伊木马Setiri。

  • Raul siles和David Perze于2004年编写的。

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

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

  • 僵尸网络是什么?僵尸网络通常用于干什么?

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

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

  • 哪些IP地址被用于攻击蜜罐主机?

  • 攻击者尝试了哪些安全漏洞?

  • 哪些攻击成功了?是如何成功的?

answer

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

  • IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。

  • 所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),所有的沟通就在他们所在的Channel内以不同的Nickname进行交谈。

  • 申请加入的时候要发送口令、昵称和用户信息:USER 、PASS 、NICK

  • 6667端口(明文传输)、6697端口(SSL加密)

僵尸网络是什么?僵尸网络通常用于干什么?

  • 僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络

  • 攻击者可以向自己控制的所有bots发送指令,让它们在特定的时间同时开始连续访问特定的网络目标,从而达到DDos的目的。

  • 利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息

  • Botnet的控制者可以从僵尸主机中窃取用户的各种敏感信息和其他秘密,例如个人帐号、机密数据等

  • 攻击者利用Botnet从事各种需要耗费网络资源的活动,从而使用户的网络性能受到影响,甚至带来经济损失

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

  • 使用Wireshark打开数据文件,并设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667,因为我们上面的分析知道IRC通过6667端口,我们可以找到五个IRC服务器209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172

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

  • 这个。。。。参考下大佬的播客八!

  • 首先用tcpflow进行分流,指令 tcpflow -r botnet.pcap "host 209.196.44.172 and port 6667" #读取文件,筛选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台主机

哪些IP地址被用于攻击蜜罐主机?

  • 使用下面的指令找出所有的可能连接的主机的IP地址

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
共有165个主机

攻击者尝试了哪些安全漏洞?哪些攻击成功了?是如何成功的?

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

  • 问题:代码部分了解不足,无法完美分析
  • 问题解决方案:学习学习再学习

4.实践总结

感觉自己需要再花时间消化消化,好多还是一知半解!!!脑子不够了不够了!

自己还是好好调整时间吧!总感觉时间不够用,我的科研好久没有进度了!!

参考资料

猜你喜欢

转载自www.cnblogs.com/dsqblog/p/12801603.html
今日推荐