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

恶意代码安全攻防

说明:整个分析花费了我很长的时间,每一个点基本都详细分析了,篇幅较长。php


0.整体结构


本次做业属于哪一个课程 网络攻防实践
这个做业要求在哪里 恶意代码基础知识和分析方法
我在这个课程的目标是 学习网络攻防相关技术和原理
这个做业在哪一个具体方面帮助我实现目标 学习恶意代码安全攻防的相关知识

1.实践内容


第九章的内容比较复杂,结构性不强,我主要从两个方面介绍,恶意代码基础知识恶意代码分析技术。其中分不少小点,如恶意代码基础知识分为计算机病毒、蠕虫、RootKit等,而恶意代码分析技术分为分析环境、分析方法、反汇编等知识。html

  • 恶意代码基础知识
    恶意代码简单介绍
    计算机病毒
    网络蠕虫
    后门与木马
    僵尸程序与僵尸网络
    Rootkit
  • 恶意代码分析技术
    恶意代码分析基础
    恶意代码分析环境
    恶意代码静态分析
    恶意代码动态分析

恶意代码基础知识


恶意代码简单介绍


  • 定义:Malware is a set of instructions that run on your computer and make your system do something that an attacker wants it to do.linux

  • 指令集合:二进制执行文件、脚本语言代码、宏代码、寄生在文件或者启动扇区的指令流。ios

  • 目的:炫耀、远程控制被攻击主机、知足施跳板攻击或进一步传播恶意代码、窃取私人信息或机密信息、窃取计算存储带宽资源、拒绝服务等。web

  • 类型:分为计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸程序、Rootkit等。这里就不具体讲各个的定义或者是什么了,下面具体分开具体讲。给出一个恶意代码的分类依据算法

    类别 实例
    不感染的依附性恶意代码 特洛伊木马、逻辑炸弹
    不感染的独立性恶意代码 点滴器、繁殖器
    可感染的依附性恶意代码 病毒
    可感染的独立性恶意代码 蠕虫

计算机病毒


  • 定义:计算机病毒是一种可以自我复制的代码,经过将自身嵌入其余程序进行感染,而感染过程一般须要人工干预才能完成。这里必须记住:计算机病毒是借助人类帮助从一台计算机传至另外一台计算机,这也是其传播机制。
  • 特性:感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。
  • 感染及引导机制
    • 感染可执行文件(最为广泛的方式):前缀感染机制(病毒将自身复制到宿主程序的始端)、后缀感染机制(病毒将自身复制到宿主程序的末端)、插入感染机制(病毒在感染宿主程序时,病毒代码放在宿主程序的中间)。
      vi1.pngshell

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

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


网络蠕虫


  • 定义:一种经过网络自主传播自我复制的独立恶意代码。(从这里就能够看出病毒和蠕虫的区别)
  • 传播机制:主动攻击网络服务漏洞、经过网络共享目录、经过邮件传播。
  • 组成结构
    • 弹头:利用目标系统安全漏洞入侵目标系统。包括缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。这里其实就是咱们以前说的渗透攻击模块
    • 传播引擎:经过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。方式有FTP/TFTP/HTTP/SMB/直接传送/单包等。
    • 目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每个由目标选择算法肯定的地址,肯定其是否能够被攻击。包括电子邮件地址、主机列表、被信任的系统、网络邻居主机等。这里就是扫描策略
    • 有效载荷附加的攻击代码,执行一些特殊目地的操做。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。

vi2.png


后门与木马


  • 后门定义:容许攻击者绕过系统常规安全控制机制的程序,按照攻击者本身的意图提供通道。
  • 后门类型:本地特权提高、单个命令的远程执行、远程命令行解释访问器(NetCat)、远程控制GUI(VNC、BO、冰河、灰鸽子)、无故口后门(ICMP后门,基于Sniffer非混杂模式或混杂模式的后门)。
  • 自启动后门:Windows经过修改自启动文件、注册表自启动项,Linux修改inittabrc.d/init.d文件。
  • 木马定义:看起来具备某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
  • 木马的假装技术:命名假装、使用软件包装工具、攻击软件发布站点、代码下毒(开发者有意为之,后面的利益就不可知了)。

僵尸程序与僵尸网络


  • 僵尸程序定义:攻击者用于一对多控制目标主机的恶意代码。
  • 僵尸网络定义攻击者传播僵尸程序控制大量主机,并经过一对多的命令与控制信道所组成的网络。(注意仔细品味几种恶意程序的定义的黑体字,体会不一样)
  • 僵尸网络功能结构:主体功能分为命令控制模块和传播模块,辅助功能分为信息窃取模块、主机控制模块、下载更新模块、防分析检测模块。
  • 僵尸网络类型:IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)。
  • IRC僵尸网络工做机制图

vi3.png


Rootkit


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

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

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

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

    vi4.png


恶意代码分析技术


恶意代码分析基础


  • 代码分析:按需求使用必定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
  • 恶意代码分析的技术方法主要包括静态分析和动态分析两类。
  • 分析良性代码与分析恶意代码的区别:(这也是为何咱们后面须要那么麻烦的缘由)
    • 不能提早知道恶意代码的目的。
    • 恶意代码具备恶意的攻击目的,会对所运行环境进行恶意破坏。
    • 恶意代码分析在绝大数状况下不会拥有待分析程序的源代码。
    • 恶意代码目前都会引入大量各类各样的对抗分析技术。

恶意代码分析环境

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

vi5.png

  • 采用虚拟化技术构建恶意代码分析环境:这是通常状况下咱们使用的环境,其实也没什么好说的,以前的博客都已经详细说明了。主要重点是在进行恶意代码分析时,必定要保证主机和虚拟机的隔离,防止主机收到伤害,同时最好让你的整个主机也隔离网络链接,不要玩火,人人有责!!!

    vi6.png

  • 用于研究的恶意代码自动分析环境:专业人员使用的,分为静态分析机、动态分析机、网络分析机和综合分析机。

vi7.png


恶意代码静态分析


  • 定义:经过反病毒引擎扫描识别已知的恶意代码家族和变种名,逆向分析恶意代码模块构成,内部数据结构,关键控制流程等,理解恶意代码的机理,并提取特征码用于检测。
  • 恶意代码静态分析方法列表:后面会简单解释。这里同时提供一个博客主要是分析恶意代码分析实战
分析方法 目的 使用工具 难度
反病毒软件扫描 标识已知恶意代码 反病毒引擎,VirusTotal
文件格式识别 肯定攻击平台和类型 file,peid,FileAnalyzer
字符串提取 寻找恶意代码分析线索 strings
二进制结构分析 初步了解二进制文件结构 binutils (nm, objdump)
反汇编 二进制代码->汇编代码 IDA Pro,GDB,VC 中高
反编译 汇编代码->高级语言 REC,DCC,JAD 中高
代码结构与逻辑分析 分析二进制代码组,理解二进制代码逻辑结构 IDA Pro,Ollydbg
加壳识别和代码脱壳 识别是否加壳及类型、对抗代码混淆恢复原始代码 UPX,VMUnpacker,手工
  • 反病毒软件扫描:使用反病毒软件对待分析样本进行扫描。主要有卡巴斯基、赛门铁克、瑞星、金山等。
  • 文件格式识别:依靠专业工具如file(肯定恶意代码目标平台和文件类型),peid(文件类型、编译连接器、是否加壳),FileAnalyzer(分析Win32平台窗口程序中包含的特殊文件)等进行识别分析。
  • 字符串提取:主要提取的信息包括可能得到的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。
  • 二进制结构分析nm指令在可执行文件中查找symbols重要元素。objdump主要功能有从可执行文件中限制不一样类型的信息、编译器类型、代码段数据段位置、反汇编。
  • 代码结构与逻辑分析:程序结构主要是了解Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑
  • 加壳识别和代码脱壳:包括四个方面:加密(固定加密/解密器)、多样性(多样化解密器)、多态(多态病毒可以经过随机变换解密器从而使得每次感染所生成的病毒实例都具备惟一性)、变形(直接在病毒体上加入各类代码混淆技术)。

恶意代码动态分析


  • 定义:经过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。
  • 恶意代码动态分析方法列表
分析方法 目的 使用工具 难度
快照比对 获取恶意代码行为结果 FileSnap,RegSnap,完美卸载
动态行为监控 实时监控恶意代码动态行为轨迹 Filemon,Regmon,Process Explorer,lsof
网络监控 分析恶意代码网络监听端口及发起网络会话 Fport, lsof,TDImon,ifconfig,tcpdump
沙盒 在受控环境下进行完整的恶意代码动态行为监控与分析 Norman Sandbox,CWSandbox,FVM Sandbox 中高
动态跟踪调试 单步调试恶意代码程序,理解程序结构和逻辑 Ollydbg,IDAPro,gdb,SoftICE,systrace
  • 动态分析中的监视与控制行为监视即一系列监控软件来控制和观察恶意代码的运行状况。网络控制即与业务网络和互联网保持物理隔离。
  • 快照比对:分为四步:对“干净”资源列表作快照、运行恶意代码、对恶意代码运行后的“脏”资源列表作快照、对比“干净”和“脏”快照,获取恶意代码行为结果。
  • 动态行为监控:包括Notification机制(Win32/Linux系统自己提供的行为通知机制)和API Hooking技术(对系统调用或API调用进行劫持,监控行为)。
  • 网络监控:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络链接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
  • 沙盒:沙盒技术用于安全运行程序的安全环境,常常被用于执行和分析非可信的代码。
  • 动态跟踪调试:在程序的执行过程当中进行二进制调试(Debugging)。

2.实践过程


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

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

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

Solution

  • 重要说明:在进行静态分析的时候,请务必断开与物理机的网络链接,最好也断开物理机与外部网络的链接,即便rada恶意代码并无恶意行为。

  • 实验环境:WinXP Attacker虚拟机(安装有cygwin以及基本的脱壳软件和字符串提取工具)。

  • 首先利用file RaDa.exe命令查看RaDa.exe的文件类型,可知这是一个32位Windows PE可执行文件,而且有图形化窗口。

    rada1.png

  • 下面来看看有没有加壳,下面使用PEiD工具(查壳)来查看加壳的类型。在这里咱们能够看到这个是一个版本为0.89.6的UPX壳(压缩壳,更多内容参考UPX壳分析)。还能够看到文件的入口点、EP段、偏移、文件类型等信息。

    rada2.png

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

    rada3.png

  • 咱们用超级巡警这个软件进行脱壳,这里也识别出了是一个UPX壳,这个压缩壳仍是比较容易脱,脱完以后输出为RaDa_unpacked.exe。自动脱壳实在是无聊,我简直是工具人,那么找个帖子手动脱壳吧,掌握ESP定律,参考这个帖子新手脱壳必看基础教程,做业写不完了,先不拓展了,继续。

    rada4.png

  • 脱壳结束,咱们就能够进行分析啦!打开IDA Pro Free选择脱壳以后的文件,一直next就行,能够看到以下信息。首先是做者的信息DataRescue sa/nv,甚至是邮箱都一目了然。同时这个程序是由MSVB编写的。继续往下是一些函数调用,甚至汇编代码都一目了然。到这里本次实验结束,结束以后就把内容打包,文件删除吧。

    rada5.png

    rada6.png


实践二:分析Crackme程序

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


  • 实验环境:装有IDA Pro的WinXP Attacker虚拟机。下面两个程序都是静态分析(利用IDA进行动态分析我不会啊)。

  • 首先分析crackme1.exe。对crackme1.exe进行执行,猜想参数执行,能够发现一个参数输入与其余的参数输入获得的输出明显不同,因此能够猜想这个程序的输入是一个参数

    crack1.png

  • 接下来利用IDA Pro打开这个程序分析,咱们打开经过Strings窗口能够查看该程序中出现的字符串,咱们发现了前面的两种反馈信息,I think you are missing something.Pardon? What did you say?,这两个咱们以前已经见过了,很容易猜想,第一个是参数不对的返回状况,第二个是给的参数数量对了,可是具体的内容不对。还有两个咱们不知道啥意思,因此咱们要继续进行分析。同时,在这里咱们应该要有一种敏感,就是看到字符串,那么字符串操做函数就要回想在你脑子里。

    crack2.png

  • 接下来看函数调用图(Function Call),上面说了,要找字符串操做相关的函数,以及输出函数,由于咱们测试程序的时候明显是有输出的。若是你能理解,那么你确定找的是下图部分,能够看到字符串比较函数strcmp和输出函数fprintfprintf。那么显而易见,sub_401280这个函数就显得相当重要了。

    crack3.png

  • 下面咱们就看这个函数的汇编代码了,其实汇编我也不大会,不过不打紧,能看懂基本操做就好了。打开这个函数,你就能够看到pushsubmove等操做,这些都是基本的汇编操做,想补如下就去网上稍微看看,我就不展开了,直入主题,首先push了ebp入栈,而后比较最后一个cmp比较函数参数是否是2(这里为何是2?去学C吧)。

    crack4.png

  • 下面就是比较了,很容易看到左边就是函数参数不为2的状况(不为2输出的字符串也明显与咱们以前猜想的内容一致),右边就是参数为2的状况。

    crack5.jpg

  • 进入右边,发现又调用了一个字符串匹配函数strcmp,也就是讲咱们输入的字符串与I know the secret进行比较,若是不匹配就输出Pardon? What did you say?(这个咱们以前已经见过啦)。那么正确,就输出You know how to speak to programs, Mr. Reverse-Engineer

    crack6.jpg

    crack7.jpg

  • 根据上面的分析,咱们去实验吧,很明显,咱们获得了正确的结果。

    crack8.png

  • 接下来分析crackme2.exe。下面我就主要用IDA Pro进行分析,不猜想了。首先仍是看明文字符串,有五个,本身先有个印象就好,下面咱们仍是要寻找字符串操做函数

    crac1.png

  • 咱们首先仍是打开call function,咱们能够看到字符串比较函数strcmp和输出函数fprintf以及输入函数等。那么此时应该寻找,sub_401280这个函数了。

    crac2.png

  • 和上面同样,找到这个函数的汇编代码,一样的,下面有判断参数是否为2,若是不是,就返回I think you are missing something。这个不重要,下面咱们着重看若是参数对了是什么样子。

    crac3.jpg

    crac4.jpg

  • 下面的就是参数的个数对了的状况,这是啥?难道匹配这个字符串?千万不要这样子觉得,注意这里比较的是什么?是ebp+arg_4,不是上面的ebp+arg_0了。那就是说咱们这里匹配的不是执行参数了,那应该是什么呢?arg_4arg_0相差了4(变量定义的时候dword ptr 8dword ptr 0C),那么arg_0表明的是第一个参数,其实arg_4表明的就是第0个参数,也就是程序名(这里可能又有人要问为何是4,32位平台堆栈指针每次4字节变化)。其实下面是能够验证的,由于在下面进行第一个参数匹配的时候先执行了add eax, 4指令,也就是地址变回去了。

    crac5.jpg

  • 下面就是判断失败的输出了。判断成功的输出,咱们能够看到对第一个参数进行了匹配,那么这个应该就是咱们的第1个参数应该输入的值了。同时下面还给出了输入第一个参数不对的状况。

    crac6.jpg

    crac7.jpg

    crac8.jpg

  • 分析了这么多,好像是分析完了,因而咱们就去测试,首先呢copy crackme2.exe crackmeplease.exe给程序改个名字,而后输入crackmeplease.exe "I know the secret"发现输出了一个字符串We have a little secret: Chocolate,但是这个咱们没见过这个明文字符串啊。好吧,那咱们继续看看是怎么回事吧。

    crac9.png

  • 咱们继续往下看,又是一个判断,并且这仍是一个循环,左边这个很明显是跳出循环的条件。看右边的,有个操做是xor eax 42h,这个指令是将eax0x42异或,网上看有个指令是add eax,offset unk_403080。那么就很简单了,后面的操做就是unk_403080中的字符逐个与0x42进行异或运算。能够验证0x15 xor 0x42对应的ascii码是W。至此分析恶意代码样本实验结束。

    crac10.jpg

    crac11.jpg


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

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

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

问题分析


  • 拿到一个程序第一步咱们应该是干吗,固然是打开他,在打开他以前,那这是一个恶意软件,打开以前咱们至少要打开监控工具吧。这也就是咱们一般说的动态分析

  • 首先打开Filemon(文件),Regmon(注册表),Wireshark(网络)三个软件进行监测。这个时候能够启动这个恶意软件了。(软件在网上找的,古老)

  • 观察Filemon咱们能够看到程序文件RaDa.exe复制到了C:\RaDa\bin目录下,而且新建了temp目录。

    rad2.png

  • 继续观察Regmon,咱们能够看到进行了不少注册表的操做,其中其中有一个时在自启动项里面加入了RaDa: C:\RaDa\bin\RaDa.exe

    rad3.png

    rad5.png

  • 继续看Wireshark给咱们的结果,时不时的访问10.10.10.10,并且是80端口,估计是访问某个html页面,这个我也没看懂,可是这个恶意软件确定是和网络有关的无疑了。动态分析给咱们的信息是在太少了,只能静态分析了。

    rad4.png

  • 下面就是静态分析了。首先准备工做一鼓作气:摘要filestrings脱壳

  • 利用md5sum RaDa.exe指令获得其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。利用file RaDa.exe识别出这是32位PE文件,而且仍是个GUI文件,当时打开怎么没反应,难道是要参数?同时这是一个加壳文件,能够用strings RaDa.exe输出看是否是所有乱码。

  • 下面咱们超级巡警进行脱壳,这是一个UPX壳,而且成功脱壳。

    ra1.png

    ra2.png

  • 脱壳以后就是利用IDA Pro进行分析了。那么按照以前静态分析的套路,咱们首先就应该看字符串。

  • 首先你应该把Type改为unicode类型,不出意外你确定会看到下列这些字符串。看下面几种字符串,首先第一张图明显就是命令行参数了,能够本身逐个试一下,看看都有什么含义。第二张图咱们看到是一个版本做者的字符串。第三张图能够看到是一个注册表的字符串,可是这里有两个,还有一个VMware tools值得咱们注意。最后一张图的字符串时RaDa_commands.html,很明显,这个应该就是咱们以前进行访问的那个html网页了。看明文字符串能带给咱们不少信息,筛选重要的字符串对于咱们分析来讲相当重要。

    ra6.jpg

    ra7.jpg

    ra8.jpg

    ra9.jpg

  • 字符串看完下一步咱们就看汇编代码逻辑了。首先咱们仍是看命令行参数的代码逻辑。咱们能够看到命令行参数都在sub_405E40这个函数中,这个函数应该就是处理命令行参数的。最下面给出每一个命令行参数的详细解释,我也没有一个一个分析。

    ra3.jpg

    ra4.jpg

参数 做用
--verbose 显示Starting DDoS Smurf remote attack
--visible 决定在获取html文件时,IE窗口是否可见
--server 指定命令文件控制服务器的ip地址、访问协议及目录等,默认是http://.10/RaDa
--commands 指定命令文件,默认是RaDa_commands.html
--cgipath 指定服务器上cgi文件的根目录,默认是cgi-bin
--cgiget 指定负责文件上传的cgi脚本,默认是upload.cgi
--cgiput 指定负责文件下载的cgi脚本,默认是download.cgi
--tmpdir 指定临时文件夹的位置,默认是C:\RaDa\tmp
--period 指定两次向服务器请求命令文件的时间间隔,默认是60秒
--cycles 指定多少次向服务器请求命令文件后退出,默认是0(没有限制)
--help 输出版权信息
--gui 使用该参数会使样本出现一个GUI窗口
--installdir 指定样本的安装路径,默认是C:\RaDa\bin
--noinstall 使用该参数,样本将不会安装、也不会添加注册表
--uninstall 卸载样本
--authors 若是确认不是在VMware的虚拟机中运行,则显示样本的做者;不然显示参数不存在
  • 继续根据线索分析,咱们知道RaDa_commands.html这个字符串极其重要,由于咱们看到有网络访问,那么咱们就去寻找这个字符串对应的函数了。首先咱们确定很简单的能寻找到这个字符串对应的函数是sub_404FB0,咱们进入这个函数,看黄色部分的汇编代码,很容易知道他是被拷贝到dword_40C030这个变量中了。还能看到不少其余的字符串拷贝(这些字符串就是默认的一些值)。

    ra11.jpg

  • 那么咱们确定也很是容易找到这个dword_40C030变量对应的函数了(鼠标放在上面就有了),也就是函数sub_4052C0 ,找到这个函数,而且打开其Call Graph方便查看。这里咱们看到判断了三个网段分别为192.168.172.16.10.,很明显,这是三个私有网段,也就是说确保服务器在私有网段中,而后到服务器去取命令文件。

    ra12.jpg

    ra10.jpg

  • 有命令文件就必定有命令,那么下面就是一些具体的命令以及其功能。其实sleep应该是咱们以前在作动态分析的时候最能感知的。

    rada9.jpg

    命令 功能
    exe 在宿主主机中执行指定的命令
    put 将宿主主机中的指定文件上传到服务器
    get 将服务器中的指定文件下载到宿主主机中
    screenshot 截取宿主主机的屏幕并保存到tmp文件夹
    sleep 中止活动一段时间
  • 最后一部分分析,就是关于咱们找到的字符串中有Vmware Tools,因此咱们猜想这个程序是否是对虚拟机有所检测(仍是要说一下字符串对咱们的分析来讲相当重要)。

  • 首先咱们找到该字符串对应的函数sub_404FB0,在这个函数中,这个字符串被拷贝到变量dword_40C070,继续寻找这个变量对应的函数,找到是sub_40AAA0。接下来咱们主要看看这个函数干吗了以及哪里调用了这个函数。

    radas1.jpg

    radas2.jpg

  • 咱们看到这个函数进行了网卡配置信息的查询(Select),而后进行了右边就确认dword_40C070对应的字符是否存在,并进行了Mac地址查询,注册表的查看等操做(Wscript.shell)。也就是判断vmware tools是否是在注册表里面。

    radas4.jpg

    radas5.jpg

  • 咱们注意观察当--authors在咱们的虚拟机上输出的是Unknow argument,但是咱们确实也能在明文字符串信息中找到做者的信息。这个时候咱们观察到--authors参数对应的处理函数是sub_40B010,找到以后,咱们打开Call Graph进行观察,结果就显而易见意见了,这里调用了sub_40AAA0函数,也就是上面虚拟机对应的处理函数,咱们发现,这里的处理是若是是虚拟机就输出Unknow argument,若是不是,就输出正确的做者信息。到此,咱们的分析部分也就结束了。

    radas7.jpg

    radas6.jpg


问题解答


分析部分其实已经讲了很是透彻了,下面简要梳理答案。

  • 问题一: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,2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,而后解析并执行其中的指令。还有特洛伊木马Setiri。

  • 问题七:很简单了,做者在上面的分析中给出了是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地址被用于攻击蜜罐主机?
  • 攻击者尝试了哪些安全漏洞?
  • 哪些攻击成功了?是如何成功的?

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


  • 因特网中继聊天(Internet Relay Chat),简称IRC。IRC的工做原理很是简单,您只要在本身的PC上运行客户端软件,而后经过因特网以IRC协议链接到一台IRC服务器上便可。IRC特色是经过服务器中继与其余链接到这一服务器上的用户交流。经过IRC简介了解IRC的相关内容。
  • 注册时须要发送的消息有三种,分别是口令,昵称和用户信息。格式以下:USER <username> <hostname> <servername> <realname>PASS <password>NICK <nickname>。注册完成后,客户端就使用JOIN信息来加 入频道,格式以下:JOIN <channel>
  • IRC服务器明文传输一般在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。
  • 注意:攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道,那么基于端口识别服务再也不可靠,要进行基于应用协议特征进行识别(如USER/NICK)。

问题二:僵尸网络是什么?僵尸网络一般用于干什么?


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

问题三:蜜罐主机(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

    win1.png


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


  • 说明:这里先不要用kali尝试了,在kali下tcpflow输出的文件用grep命令有点问题(grep不到所有的字符串),这里坑了我好久,因此我就直接用在macOS上作了。估计是文件编码的问题,若是有谁知道麻烦告知,谢谢。

  • 这里仍是主要参考答案方法3的思路。首先咱们用tcpflow进行分流,指令为tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"这条指令的含义就是读取文件,筛选host和端口6667后进行分流。生成了一个report文件和两个分流的文件,固然咱们主要看的就是209.开头的文件。从这个文件中找到有多少个主机访问了209.196.44.172

    JfuuVI.png

  • 下一步,因为macOS字符编码的问题,参考RE error: illegal byte sequence on Mac OS X。因此使用sed命令可能致使illegal byte sequence问题。因此限先执行如下两条指令export LC_COLLATE='C'export LC_CTYPE='C'。同时下面会用到不少Linux指令,建议你们参考Linux菜鸟教程查看相关的教程。

    win4.png

  • 下面咱们输入以下指令进行搜索有多少主机链接。下面讲解这个指令:首先这个指令确定是管道链接的,第一条是cat命令,链接209.输出文件。第二条grep搜索获取昵称输出行。第三条sed去除前缀,最后的g是全局的意思。第三条tr将空格转换为换行。第四条tr -d删除\r。第五条grep -v就是NOT指令,去除空行。第六条sort -u排序并去除重复。最后一条wc -l输出行数。因此看到输出咱们就知道总共有3457个主机访问了以209.196.44.172为服务器的僵尸网络。

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

win5.png


问题五:哪些IP地址被用于攻击蜜罐主机?


  • 由于蜜罐的特殊性,只要是进入蜜罐的流量都应该被认为是攻击。因此首先明确被攻击的端口。使用下面的指令查找端口并输出到1.txt中,如图所示,查找到148个被攻击的端口。大部分指令上面讲过了,咱们看cut -d是指定字段的分隔符,uniq命令用于检查及删除文本文件中重复出现的行列,通常与sort命令结合使用。

tcpdump -n -nn -r botnet_pcap_file '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

JfWfKK.png

JfW2gx.png

  • 下面咱们使用下面的指令找出全部的可能链接的主机的IP地址。这个指令的做用就是将链接IP地址输出到2.txt中,咱们看到总共有165个主机可能被用于入侵蜜罐。其中awk -F就是指定分隔符,可指定一个或多个,print后面作字符串的拼接。

tcpdump -n -nn -r botnet_pcap_file 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 2.txt;wc -l 2.txt

JfWg81.png

JfWRv6.png


问题6、七:攻击者尝试了哪些安全漏洞?哪些攻击成功了?是如何成功的?


  • 攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用snort -r botnet_pcap_file -c /etc/snort/snort.conf -K ascii指令先查一下网络流分布状况。咱们发现大部分都是TCP包,有一部分UDP包,因此咱们首先应该筛选出响应的TCP端口和UDP端口

    JfObTI.png

  • 利用下面的指令筛选出蜜罐主机相应的TCP端口,指令上面都讲过了,差很少,多了一个筛选条件就是响应0x12。输出能够看到TCP响应端口为135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)。一样的,将指令协议部分改为udp就能够查询udp端口响应,咱们能查到仅有137(netbios-ns)号端口响应。

tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

JfX6gS.png

  • 下面就是就上面几个端口进行逐个分析,先说明udp 137号端口,这个是个在局域网中提供计算机的IP地址查询服务,处于自动开放状态,因此访问这个端口确定就是NetBIOS查点了

  • 接下来咱们看tcp 135号端口和25号端口,咱们看到只是进行了链接,可是是没有数据的交互的,因此这攻击者多是对这两个端口进行了connect扫描。

    JhuzgU.png

  • 而后看TCP 80端口,首先利用Wireshark进行筛选tcp.dstport==80 && ip.dst == 172.16.134.191,首先链接最多的就是24.197.194.106这个IP,他的行为就是不停的用脚本在攻击IIS服务器的漏洞,从而获取系统权限,正是由于用的脚本,因此才会有这么多记录。

    JhMfl8.png

  • 接下来是68.169.174.108访问的80端口,好吧,都是正常的HTTP访问,并没有异常。同时,最后还有一个192.130.71.66也是一个正常的访问,就再也不叙述了。

JhQVXD.png

  • 接下来是210.22.204.101访问的80端口,这么多C是什么状况,看来攻击者是想经过缓冲区溢出攻击来得到一个命令行了。

JhQRE9.png

  • 最后一个访问80端口的是218.25.147.83,看到这么多N我还觉得是缓冲区溢出攻击呢,可是继续往下看,你会看到c:\notworm,稍微百度下你就会发现这是一个红色代码蠕虫攻击。

    Jhldqe.png

  • 最后就是看80端口有没有攻击成功了,咱们经过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机作的几回回应均为一个iis服务器的默认页面,因此80端口的这些攻击均失败。

    Jh1j6f.png

  • 接下来是TCP 139号端口。这个也比较简单,虽然有不少链接到这个端口的,可是基本都是同样的,大部分都是链接,而后不少空会话,一样这个也没有成功,这个应该是个SMB查点。

    Jh87RI.png

  • 下面分析与139端口关系极其密切的TCP 445端口。这个端口链接很是多,同时咱们也能看到许多\samr, \srvsvc,这些都是基本的查点,这里确实很差找,建议用strings查询相关的字符串进行分析,或者就像我同样硬看,查询字符串后很容易发现一个PSEXESVC.EXE字符串,同时你在Wireshark中也能找到,是由61.111.101.78发起的,经过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是经过IRC进行通讯。那么咱们怎么判断是否是攻击成功了呢?咱们一样找出口流量,发现每一个IP地址连入的链接都有响应的回应,而且返回信息中含有\PIPE\ntsvcs,经过搜索可知,这是一个远程调用,因此攻击者确定是得到了权限,所以这个攻击成功的。

    JhNWUU.png

    JhaQld.png

  • 最后还剩一个TCP 4899端口。只有一个IP访问过,即210.22.204.101。能够查得4899端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上载的这个软件方便控制。到此,咱们的分析就结束啦。

    Jhd334.png


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


  • 问题一:对汇编代码的了解不够,致使分析过程可能存在不完整、不彻底正确的部分。
  • 问题一解决方案:稍微复习了一下汇编的指令。
  • 问题二:tcpflow分流的编码,kali下用grep没法识别。
  • 问题二解决方案:在本身的macOS上没有问题。

4.学习感悟、思考

  • 其实每次作实验,感受都有不少东西能够扩展,特别是单纯使用工具感受无聊的时候,可是一扩展就要看不少东西,做业又不少,感受解放生产力会更好。
  • 此次实验真的比较难,不少内容我虽然弄懂了,可是还有一些深层和细节不懂,强烈但愿老师能讲解下。
  • 不少内容没有按照答案的思路来分析,可是感受比答案稍微简介点,尤为用Wireshark分析方面。
  • 日志分析的重要性在于化繁为简,分门别类,提取有效信息。
  • 文本搜索匹配真的能作不少事。

参考资料

相关文章
相关标签/搜索