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


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

    0 总体结构

    本次作业属于那个课程 《网络攻防实践》
    这个作业要求在哪里 《网络攻防实践》第九周作业
    我在这个课程的目标是 学习网络攻防相关技术、掌握网络攻防相关能力
    这个作业在哪个具体方面帮助我实现目标 学习恶意代码的基础知识,恶意代码的分析步骤和工具
    作业正文 下述正文
    其他参考文献 见文末

    1.实践内容

    先来一张整体的结构框架图,感受下这些似陌生又熟悉的名词和技术们:


    1.1 恶意代码基础知识

    • 恶意代码定义与分类

      • 恶意代码定义:Malware或Malicious Code指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。

      • 恶意代码的类型:

        恶意代码类型 定义特征 典型实例
        计算机病毒(Virus) 是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。 Brain,Concept,CIH
        蠕虫(Worm) 蠕虫是一类自主运行的恶意代码,并不需要将自身嵌入到其他宿主程序中。蠕虫通常通过修改操作系统相关配置,使其能够在系统启动时得以运行。 Morris,Code Red,Slammer
        恶意移动代码(Malicious mobile code) 属于移动代码的范畴;移动代码是指可以从远程主机下载并在本地执行的轻量级程序不需要或仅需要极少的人工干预。移动代码通常在Web服务器端实现,实现技术包括Java applets、JavaScript脚本代码、VBScript脚本代码和ActiveX控件等。 Santy Worm
        后门(Backdoor) 是指一类能够绕开正常的安全控制机制,从而为攻击者提供访问途径的一类恶意代码。攻击者可以通过使用后门工具对目标主机进行完全控制 Netcat,BO,冰河
        特洛伊木马(Trojan) 是一类伪装成有用的软件,但隐藏起恶意目标的恶意代码。后门仅为攻击者给出非法访问途径,而特洛伊木马的特征则在于伪装性 Setiri
        僵尸程序(Bot) 攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的攻击网络僵尸程序(Bot)是用于构建僵尸网络以形成一对多控制攻击平台的恶意代码形态。 Sdbot,Agobot
        内核套件(Rootkit) 是在用户态通过替换或修改系统关键可执行文件,或者在内核态通过控制操作系统内核,用以获取并保持最高控制权(root access)的一类恶意代码,又分为用户态Rootkit和内核态Rootkit两种。 LRK,FU,hdef
        融合型恶意代码 融合上述多种恶意代码技术,构成更具破坏性的恶意代码形态。 Nimda
      • 恶意代码的命名规则与分类体系:反病毒界一般采用“三元组命名”规则来对发现的恶意代码新样本进行命名,三元组是指:恶意代码的类型、家族名称和变种号,一般形式为:

        [恶意代码类型]恶意代码家族名称[.变种号]

        反病毒界对于病毒的命名非常的混乱,而事实上各种形态的恶意代码在各个关键技术环节上都有着其明确的定义特性,如图:

    • 恶意代码发展史

      • 恶意代码的起源:从20世纪40年代人类发明创造了电子计算机之后不久,就有了最早的恶意代码——计算机病毒的概念。

      • 恶意代码的发展过程:如下图

      • 恶意代码的发展趋势:①恶意代码的复杂度和破坏力不断增强;②恶意代码技术的创新越来越频繁;③关注重点从计算机病毒转移到蠕虫和内核级的攻击工具;

    • 计算机病毒

      • 计算机病毒的概念在1983年有Fred Cohen首次提出,他认为:“计算机病毒是一个能感染其他程序的程序,它靠篡改其他程序,并把自身的拷贝嵌入其他程序而实现病毒的感染”;

        1994年《中华人民共和国计算机安全保护条例》给出了我国对计算机病毒的具有法规效力的定义:“计算机病毒是指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码”

      • 计算机病毒基本特性:

        ①感染性:又可称为传染性、自我复制、自我繁殖、再生性,指的是计算机病毒具有把自身复制到其他程序中的特性。感染性是计算机病毒最本质的特性,也是判断一个恶意代码是否是计算机病毒的首要依据

        ②潜伏性:计算机病毒一旦感染目标程序后,并不会立即进行破坏行为,而是在系统中潜伏

        ③可触发性:计算机病毒在满足特定的触发条件后,激活其感染机制或破坏机制。触发的实质是一种或多种判断条件控制;

        ④破坏性:计算机病毒在触发后会执行一定的破坏性动作来达到病毒编写者的目标。

        ⑤衍生性:计算机病毒的编写者或其他了解此病毒的人可以根据其个人意图对某一个已知的病毒程序做出修改,从而衍生出另外一种或多种病毒变种。

      • 计算机病毒的感染及引导机制:

        感染方式决定了计算机病毒如何从宿主程序上被引导运行的方式,因此计算机病毒的感染和引导机制是紧密相关的。计算机病毒潜在的感染目标可分为可执行文件、引导扇区和支持宏指令的数据文件三大类(1)可执行文件:计算机病毒最普遍的感染目标,因为以可执行文件作为宿主程序,当其被用户运行时,依附在上面的病毒就可以被激活获得控制权最普遍的三种对可执行文件的感染方式包括前缀感染机制、后缀感染机制和插入感染机制,除此之外,还有重复感染、交叉感染等更复杂的感染方式

        前缀感染机制指的是病毒将自身复制到宿主程序的开始,当宿主程序被执行时,操作系统首先会运行病毒代码;

        后缀感染机制指的是病毒将自身复制到宿主程序的末端,然后通过修改宿主程序开始时的指令,加入一条跳转指令,使得在宿主程序执行时首先跳转到病毒代码,执行完病毒代码后再通过一条跳转指令继续执行宿主程序;

        中间插入感染机制指的是病毒在感染宿主程序时,能把它拦腰截断,把病毒代码放在宿主程序的中间

        (2)引导扇区:根据下图中OS启动的过程可知,引导型病毒的感染目标为主引导区和分区引导区,通过感染引导区上的引导记录,病毒就可以在系统启动时先于OS便截取系统控制权

        (3)支持宏指令的数据文件:在数据文件中包含可执行指令也称为宏指令。感染数据文件的病毒称为宏病毒,宏病毒感染数据文件的方式为将自身以宏指令的方式复制到数据文件中,因此当被感染的数据文件被应用软件打开时,将自动执行宏病毒体,完成病毒的引导。

      • 计算机病毒的传播机制:病毒不会像蠕虫一样,能够自主地跨越网络传播,而是需要借助人类的帮助从一台计算机传播到另一台计算机的;计算机病毒传播渠道包括移动存储、电子邮件及下载、共享目录等

    • 网络蠕虫

      • 网络蠕虫的基本特性:通过网络自主传播、没有感染宿主、无须人为干预的传播

      • 网络蠕虫的组成结构

        (1)“弹头”:用来穿透目标;蠕虫使用一些渗透攻击代码作为“弹头”,侵入目标系统,常用的获得目标系统访问权技术有:

        • 缓冲区溢出攻击:许多网络服务程序在开发时,由于程序员的疏忽导致在不同的内存缓冲区间移动数据时忘记检查数据的大小,从而导致程序中的缓冲区溢出攻击。通过精心构造发向目标系统网络服务的缓冲区数据,攻击者可以破坏目标系统服务中得内存结构,并在其主机上执行缓冲区中包含的攻击指令,从而获得访问权;
      • 文件共享攻击:利用Windows文件共享、类UNIX平台上的NFS等网络文件系统以及P2P文件共享网络,蠕虫可以向目标系统的文件系统传播自身,通过覆盖一些常被运行或自动加载的可执行文件,蠕虫可以完成快速的自主网络传播;

        • 利用电子邮件传播:在邮件阅读器上,蠕虫可以欺骗用户运行包含蠕虫传播实例的邮件附件,但这需要和用户进行交互,也可以通过阅读器支持的脚本功能,蠕虫还可以无须用户运行附件而仅仅是阅读邮件时自动完成传播;
        • 利用其它普遍的错误配置:蠕虫获得访问权的其他常用方式还包括探测众多常见的错误配置,如弱口令账户等。

        (2)传播引擎:一些蠕虫能够在弹头攻击的通道中同时装在全部代码,如能够在进行网络攻击连接中直接发送,在共享文件攻击中写入目标系统、包含在传输电子邮件的附件或脚本中等。但另外一些蠕虫需要单独的传播引擎,蠕虫传播引擎常利用的网络传输机制包括文件传输协议FTP、小文件传输协议TFTP、超文本传输协议HTTP、服务信息块协议SMB以及原始SOCKET套接字等。

        (3)目标选择算法和扫描引擎:蠕虫在受害计算机中运行之后,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。蠕虫可以选择如下所列多种不同目标选择算法:①电子邮件地址;②主机列表;③被信任的系统;④网络邻居主机;⑤域名服务:蠕虫可以连接至受害计算机的本地域名服务器,用它来查询其他受害者的网络地址,因为域名服务器对于蠕虫而言,成为了潜在目标地址的储藏室;⑥通过特定规则任意选择IP目标地址:这是最常用的一种手段。

        (4)有效载荷:即为附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。蠕虫常常携带的有效载荷有:

        • 植入后门:使得攻击者可以远程完全控制目标系统,最有效的后门可以使用Rootkit技术隐藏在目标系统中,以保证攻击者长期的控制;
        • 安装分布式拒绝服务攻击代理:等待攻击者命令,对一些互联网在线主机或服务实施分布式拒绝服务攻击;
        • 组建僵尸网络:植入僵尸程序,所有被蠕虫侵占的主机将连接到一个僵尸网络中从而被攻击者更有效地控制,并灵活地依据攻击者命令进行各种攻击行为;
        • 执行一个复杂的计算:构造一个分布式虚拟超级计算机来执行一些特殊复杂计算,如破解强力密码,解决数学计算难题等。
    • 后门与木马

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

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

      • 后门:后门工具能够为攻击者提供多种不同类型的访问通道,包括以下几种:①本地权限提升和本地账号;②单个命令的远程执行:攻击者可以通过此类后门单独执行一个命令,并获得命令运行结果;③远程命令行解释器访问:即远程Shell;④远程控制GUI:能够以图形化界面的方式来访问目标系统,并提供较远程Shell功能更多;⑤无端口后门:可以无须打开TCP或UDP监听端口的无端口后门,具体包括ICMP后门,基于Sniffer非混杂模式的后门、基于Sniffer混杂模式的后门。

        在Windows平台中,后门工具可以利用自启动文件夹、注册表自启动项及预定计划任务这三种主要方法来达到自启动的效果;在类UNIX平台,后门工具则也可以利用inittab系统初始化脚本、inetd网络服务配置、与用户登录或程序激活相关的用户启动脚本,以及Crond后台程序计划任务来配置自启动。

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

        攻击者设计的木马欺骗和伪装技术有:①命名伪装:混淆文件扩展名,如通过超长文件名隐藏EXE等扩展名、利用已知扩展名隐藏的查看设置构造扩展名欺骗等;②软件包装工具:能够让攻击者将恶意代码与并无恶意的良性程序捆绑在一起发布,使得用户在网络上下载到这些被木马化的程序之后,在运行时毫无察觉;③攻击软件发布站点:可以使得攻击者能够将官方站点上的软件进行木马化,使得下载者都安装了一个植入了恶意代码的版本;④代码下毒:是指攻击者在软件厂商的开发和测试软件的过程中植入一些与软件功能无关的程序逻辑,甚至于恶意代码;

    • 僵尸程序与僵尸网络僵尸网络(botnet)是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸程序与蠕虫的区别是蠕虫一般是自主传播方式僵尸程序接受控制后进行攻击和传播僵尸程序为了隐藏自身在受害主机上的存在,会采用一些伪装和欺骗机制,此时也具有特洛伊木马的特性;与后门工具类似,僵尸程序也会对受害主机进行控制,只不过是控制机制为一对多

      • 僵尸程序和僵尸网络的演化过程

      • 僵尸网络的功能结构:由僵尸网络控制器和僵尸程序两部分组成;下图显示了僵尸程序的功能组成结构:

        主体功能模块中的命令与控制模块作为整个僵尸程序的核心,实现与僵尸网络控制器的交互、接受攻击者的控制命令、进行解析和执行,并将执行结果反馈给僵尸网络控制器;

        传播模块通过各种不同的方式将僵尸程序传播到新的主机,使其加入僵尸网络接受攻击者的控制,从而扩展僵尸网络的规模;

        僵尸程序按照传播策略分为自动传播型僵尸程序和受控传播型僵尸程序两大类,而僵尸程序的传播方式包括通过远程攻击软件漏洞传播、扫描NetBIOS弱密码传播、扫描恶意代码留下的后门进行传播、通过发送邮件病毒传播、通过文件系统共享传播等;

        此外,最新的僵尸程序也开始结合即时通信软件和P2P文件共享软件进行传播。

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

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

      • 僵尸程序的命令与控制机制:当前主流使用的僵尸网络命令与控制机制包括:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制和基于P2P协议的命令与控制机制这三大类

        (1)基于IRC协议的命令与控制机制:一种简单的、低延迟的、匿名的实时通信方式;IRC僵尸网络中发送的命令按照僵尸程序对应实现的功能模块可以分为僵尸网络控制命令、扩散传播命令、信息窃取命令、主机控制命令和下载与更新命令。

        (2)基于HTTP协议的命令与控制机制:优势在于:首先,由于IRC协议已经是僵尸网络主流控制协议了受到了安全业界的关注较多,使用HTTP协议构建控制信道则可以让僵尸网络控制流量淹没在大量的互联网Web同次年中,使得基于HTTP协议的僵尸网络活动更难被检测;另外大多数组织机构在网关上部署了防火墙,使用HTTP协议构建控制信道一般都可以绕过防火墙;

        (3)基于P2P协议的命令与控制机制:基于IRC和HTTP协议的命令与控制机制均具有集中控制点,这使得这种基于客户端-服务器架构的僵尸网络容易被跟踪、检测和反制,为了让僵尸网络更具有韧性和隐蔽性,一些新出现的僵尸程序开始使用P2P协议构建其命令与控制机制。

    • Rootkit

      能够通过控制目标计算机OS的关键组件,来为攻击者提供强有力的手段,用来获取访问并隐藏在系统中。Rootkit定义是:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中,必须具备替换或修改现有操作系统软件进行隐藏的特性。

      根据操作系统的分层,Rootkit可以运行在两个不同的层次上,即用户态和核心态,下图给出了两类Rootkit和普通的应用程序级木马后门之间的位置对比

      • 用户模式Rootkit:大部分类UNIX用户模式Rootkit中集成的工具可以被分为如下五中不同的类型:①提供后门访问的二进制替换程序;②隐藏攻击者的二进制替换程序;③用于隐藏但不替换的二进制程序;④另外一些零散的工具;⑤安装脚本。

        在Windows平台上,实现用户模式Rootkit主要有三种不同的技术:①Windows为了支持第三方工具扩展Windows的内置功能特性,提供了一些开发接口;②Windows使用了WFP(Windows File Protection)机制来防止操作系统关键文件被修改或替换,因此Windows用户模式Rootkit想要覆盖操作系统关键文件,就必须首先使得WFP失效;③用户模式Rootkit还可以使用DLL注入和API挂钩技术吧恶意代码直接加入运行进程的内存空间中。

      • 内核模式Rootkit:利用对内核的操作,内核模式Rootkit可以修改内核,彻底地隐藏攻击者在计算机上的活动,大多数内核模式Rootkit采用如下技术手段:①文件和目录隐藏;②进程隐藏;③网络端口隐藏;④混杂模式隐藏;⑤改变执行方向;⑥设备截取和控制;

        (1)Linux内核模式Rootkit如图:

        (2)Windows内核模式Rootkit实现的技术有:①利用恶意设备驱动程序;②修改内存中当前运行的内核;③覆盖硬盘上的内核镜像;④在虚拟系统中配置一个内核来愚弄用户以及试图在内核级运行用户模式代码。


    1.2 恶意代码分析方法

    • 恶意代码分析技术概述

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

      静态代码分析方法在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程,理解恶意代码的机理,并提取特征码用于检测。

      动态代码分析方法则通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。

    • 恶意代码分析环境

      一个能够完全受控、易于构建与恢复的分析环境是必需的。

      • 恶意代码发烧友的分析环境:

      • 基于虚拟化构建恶意代码分析环境:在进行恶意代码分析时,一定要保证这台包含分析环境的宿主计算机不要连接业务网络和互联网。

      • 用于研究的恶意代码自动分析环境:

    • 恶意代码静态分析技术

      • 反病毒软件扫描

      • 文件格式识别:在Windows平台上,二进制可执行文件EXE和DLL都是以PE文件格式组织的,而在Linux平台上,可执行文件格式则是ELF;

      • 字符串提取分析:在提取的字符串中,可能获得的有用信息内容包括:①恶意代码实例名;②帮助或命令行选项;③用户会话;④后门口令;⑤相关URL信息、E-mail地址;⑥包含库文件和函数调用;

      • 二进制结构分析:大部分二进制文件形式存在的恶意代码,如可执行程序、动态链接库、内核驱动模块、静态程序库等;

      • 反汇编(Disassemble)与反编译(Decompile):反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程;反编译则是将汇编代码再进一步还原成高级编程语言形式的源代码;

      • 代码结构与逻辑分析

      • 加壳识别与代码脱壳:恶意代码通常使用的加壳混淆机制包括加密、多样性、多态和变形等;加壳工具根据所使用的技术不同,又分为压缩壳、加密壳、多态壳、变形壳、和伪装壳等

    • 恶意代码动态分析技术

      • 基于快照比对的方法和工具:原理为首先对原始“干净”的系统资源列表做一个快照,然后激活恶意代码并给予充分运行时间,之后再对恶意代码运行后“脏”的系统资源列表进行快照,并对比两个快照之间的差异,从而获得恶意代码行为对系统所造成的影响;
      • 系统动态行为监控方法:针对恶意代码对文件系统、运行进程列表、注册表、本地网络栈等方面的行为动作,进行实时监视、记录和显示。系统动态行为监控通常基于行为通知(Notification)机制或者API劫持技术(API Hooking)实现;系统动态行为监控软件包括:①文件行为监控软件;②进程行为监控软件;③注册表监控软件;④本地网络栈行为监控软件;
      • 网络协议栈监控方法
      • 沙箱技术:提供了受限制的执行环节,使得在沙箱中运行的代码不能够修改用户系统,从而提供了一个用于运行不可信程序的安全环境;沙箱技术的提出主要目的是为了防御恶意代码对系统所造成的恶意影响;
      • 动态调试技术:在程序运行时刻对它的执行过程进行调试的技术过程。

    2.实践过程

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

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

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

      (2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;

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


    • 实践步骤:

      Step 1:首先选择Winxpattacker主机,将rada.rar解压并进入rada的目录下;使用file RaDa.exe命令对恶意代码文件格式进行识别;

      说明:其中PE32表示该恶意代码是在Windows32平台上运行<GUI>表示该程序有图形界面intel 80386表示运行的OS处理器

      Step 2:输入命令strings RaDa.exe进行字符串提取,可以发现最后有几个常用的API函数,LoadLibraryA等,其余是一串乱码,那么判断此程序经过了加壳处理

      说明:API函数: ①KERNEL32.DLL:kernel32.dll是非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域;②MSVBVM60.DLL:VB的运行库文件!有些用VB写的程序在编译成exe文件后,需要有这个运行库才能运行;③LoadLibraryA④GetProcAddress⑤ExitProcess,其中3,4,5都是动态调用使用的Windows API主要的三个函数,可以看下这篇博客动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)

      Step 3:使用XP已安装好的软件PEiD识别恶意代码文件格式,并且可以查看该恶意代码使用的加壳工具

      说明:点击EP段的能看到详细的汇编代码段信息;点开首字节会出现反汇编的代码即将二进制代码转换为的汇编代码;点开子系统是恶意代码运行的操作系统的详细信息;

      Step 4:使用XP中的超级巡警自动脱壳工具进行程序的脱壳,脱壳结束后会生成一个unpacked.exe文件;在压缩包rada.rar中还有个rada_dump_.exe文件,看了下教材可以使用dump出程序进行手工脱壳,疑惑这个文件是用来手动脱壳的?

      Step 5:再次使用PEiD查看RaDa_unpacked.exe文件,发现其是用VB6.0编写的程序

      Step 6:使用命令strings RaDa_unpacked.exe进行字符串再次提取,能够看到脱壳之后的此程序调用的一些函数,但是没有作者等信息;

      Step 7:使用XP自带的IDA Pro工具进行反汇编,一打开脱壳之后的文件就能看到恶意代码的作者邮箱,程序编写的时间等信息

      PS:我也使用了process explorer进程监听的程序运行RaDa_unpacked.exe但是发现这俩找到的rada恶意代码的作者信息好像不一样???咦?什么原因呢?


    2.2 动手实践

    • 实践挑战:使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

    • 实践过程:


      crackme1.exe分析:

      Step 1:命令行中依此键入下图中命令,其中命令后面的数字表示参数个数;发现输入一个参数的时候输出的明文和其他的都不一样

      Step 2:使用XP自带的IDA Pro打开crackme1.exe查看4条明文信息

      Step 3:下一步分析代码结构和逻辑;在IDA Pro中可以看到左边是二进制代码右边是汇编代码,红色框处实际是可以看到代码的函数调用关系,但这并不明晰;

      Step 4:点击工具栏view->Graphs->Function calls打开程序控制流图;从图中可以发现函数strcmp,并位于关键程序段401280下,由此可知此恶意代码是由C语言编写

      Step 5:接下来分析关键程序段sub_401280点击function->Graph查看关键程序段的程序控制流图;从程序控制流图中可以对应着命令行中输入参数的情况和函数调用的实际情况;从函数strcmp所在的程序段中找到参数"I know the secret"猜测这是破解的密钥

      Step 6:在命令行中输入crackeme1 "I know the secret"进行验证;


      crackme2.exe分析:

      Step 7:采用和上述的分析方法类似,其中明文中多了一行crackmeplease.exe,这个后缀名和crackme2.exe是一样的,这里存疑?

      Step 8:同样打开程序控制流图

      Step 9:其中strcmp函数位于sub_401280程序段中,和crackme1.exe是一致的;

      Step 10:打开sub_401280程序段的程序控制流图;在命令行中键入命令crackme2.execrackme2.exe 1无参数和一个参数时输出的情况;

      Step 11: 回到sub_401280程序段中进行分析;发现strcmp函数位于两个程序段中,第一个参数信息为"crackmeplease.exe",在命令行中输入命令crackme2.exe "crackmeplease.exe"进行检验,发现不对;

      Step 12:接着分析两个含有strcmp函数的程序段发现俩有一条命令不一样,add eax,4如果I know...是第1个参数那么回退到程序调用的上一段减4就是第0个参数,也就是程序名(从主调用程序段中可知ebp+arg_4为程序名)

      Step 13:命令行中修改crackme2.exe的名字为crackmeplease.exe,并执行命令crackmeplease.execrackmeplease.exe 1根据提示信息可知已经执行过了第一个strcmp函数所在的程序段即已经过了loc_4012D5程序段(crackmeplease.exe所在程序段)在命令行中使用命令crackmeplease.exe “I know the secret”验证通过;至此两个恶意代码分析结束。


    2.3 实践作业:样本分析实践

    • 实践任务:分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:

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

      2、找出并解释这个二进制文件的目的;

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

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

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

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

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


    • 实践过程:

      Step 0: 题目分析:首先这是一个恶意代码的分析,根据前面的知识可知有静态分析和动态分析两种,前面2.1实践已经做了静态分析,加之这个实践的问题,这里应该采用动态分析;动态分析的方法又有很多种,这个实践我主要采用基于快照对比、系统动态行为监控(包括文件行为监控、进程行为监控)这两种恶意代码动态分析技术;实践中用到的工具我用百度网盘链接分享:链接:https://pan.baidu.com/s/1ck_Zzqzo1lrvuvuai1ptfg 提取码:ijz3

      Step 1:首先使用MD5对该恶意代码进行摘要信息分析,输入命令md5sum RaDa.exe;再输入命令file RaDa.exe对恶意代码进行文件分析;接下来是脱壳等操作,这在前面实践2.1已经做过,这里不赘述

      Step 2:然后开始动态分析的软件准备;首先要下载一个快照对比的软件,这里踩了一些坑,具体见问题解决;我下载的是RegSnap软件,亲测可用;然后点击工具栏打开->新建一个快照

      Step 3:快照软件先放着,我们进入系统动态行为监控的第一步文件行为监控,这里选择教材上讲到的软件Filemon亲测这个软件可用;一运行软件就会滚动出现一堆正在或已运行过的进程,看到这里我觉得我遇到了对的Mr.software!

      Step 4:下一步是进程行为监控,打开XP自带的Process Explorer,先把他挂着,然后运行rada.exe的时候就可以监控了;

      Step 5:然后我们回到快照软件RegSnap中再新建一个快照捕获恶意代码rada运行之后对系统的文件、注册表等做的修改;然后点击菜单栏的打开->对比快照;过了大约2-3秒钟就会出现一个report.htm,我就大致截个图吧,感觉能直观看到恶意代码对系统做了修改但是具体一点的修改似乎没捕捉到,也可能是我对这些看不懂的字符串敏感度太低,毕竟新手略菜~

      PS:这一步也可以最后分析完做~

      Step 6:接下来我们看下Filemon捕获到的rada运行的进程开始正儿八经的文件行为分析;我们可以从Filemon中看到相关的可执行程序、DLL或被打开和读取的库文件;通览过rada.exe所涉及到的进程后,我们从rada.exe运行的开始位置开始分析

      这里我将rada.exe运行涉及到的DLL做了一些整理,毕竟新手很多DLL都不是很懂,就查了下;

      DLL名称 详解
      MSVBVM60.dll: msvbvm60.dll是VB的运行库文件!有些用VB写的程序在编译成exe文件后,需要有msvbvm60.dll这个运行库才能运行!
      IMM32.dll: 一个非常重要的系统文件,它与我们平常使用的输入法密切相关
      LPK.dll: 这是一个和病毒同名的DLL,这个病毒很善于伪装自己而进入到系统文件中;
      USP10.dll: USP10.dll是字符显示脚本应用程序接口相关文件
      VB6CHS.dll: 动态链接库(Dynamic Link Library或者Dynamic-link library)缩写为vb6chs.dll,又称为动态链接库,是微软公司在微软视窗操作系统中实现共享函数库概念的一种实作方式。这类文件中封装了系统正常运行所不可或缺的大量代码。
      rPcss.dll: rpcss.dll是分布式COM服务相关文件,是在Windows系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。
      UXtheme.dll: UxTheme.dll就是XP系统主题支持的核心文件,也就是它让XP无法使用第三方主题。
      MSCTF.dll: Msctf.dll是属于微软的文本服务
      ntdll.dll: ntdll.dll是重要的Windows NT内核级文件。描述了windows本地NTAPI的接口
      KERNERL32.dll: 系统中核心动态链接文件;
      SXS.dll: sxs.dll是windows操作系统的一部分,用来记录与windows表单文件有关的信息;
      ole32.dll: ole.dll文件是链接和嵌入在应用程序中的对象的过程文件。它是用于编写和整合来自不同应用程序的数据在Windows作业系统的骨干部分。
      CLBCATQ.dll: 居然没有查到!
      COMRes.dll: 是电脑操作系统的COM Services服务所用到的一个系统动态链接库文件,和查看图片有关;
      scrrun.dll: 用于阅读、编写脚本、文本文件的一个重要dll文件;
      shell32.dll: 系统文件shell32.dll是存放在WindowsSystem32系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。

      Step 7:在Filemon中可以看到rada.exe恶意代码新建了一个目录tmp,并且创建了新目录C:RaDain将rada.exe移到了此目录下下面的红色(CREATE即移动了rada.exe)、黄色(SET INFORMATION)、蓝色(WRITE)、绿色(CLOSE)框对此进行了详细的展示

      Step 8:然后再运行已经脱壳的RaDa_unpacked.exe程序,打开Process Explorer查看string进行详细的分析;首先是看到一个http://10.10.10.10/RaDa结合wireshark抓包中的结果可以知道恶意代码通过http协议向http://10.10.10.10/RaDa/RaDa_commands.html进行请求访问;

      PS:这里其实很存疑,为何这个恶意代码一运行就开始访问网页?接着往下分析;

      Step 9:接下来可以看到恶意代码进行了下载和上传操作并且看到了之前我们通过Filemon分析到的新建目录C:RaDa mp,并修改了注册表项;我们根据这个路径查看下注册表项内容;

      Step 10:接着往下看又有一个注册表的地址,是VMware Tools这里还不知道是干啥用的;此句命令的下面是Strating DDos Smurf remote attack...这里恶意代码开始执行DDos拒绝服务攻击

      说明:从这里我们结合Step8/9/10来梳理下恶意代码的操作流程分析为何恶意代码一开始就访问了网页首先访问网页然后进行进行下载上传文件到C:RaDa mp;接下来修改了注册表并且开始了DDoS攻击;从这一系列的操作中,我们大致能猜测出恶意代码通过http访问获取受害主机的控制权并且受害主机被控制进行操作;根据以上的分析加上上周学到的知识判断这是一个后门程序,无自我复制,通过网络自主传播等特征所以不是蠕虫;没有欺骗的手段,所以也不是木马等病毒

      根据rada.exe访问http的特性可知与其类似的恶意代码还有2004年发现的Bobax木马;特洛伊木马Setiri及其前辈GatSla;

      上面Step8/9/10的一系列操作除了可以分析出此恶意程序是后门程序以外,通过这一系列的操作加之是在恶意代码运行的最开始阶段因此还能得出此恶意代码在被执行的时候会将自身安装到系统中,并且通过修改注册表的方式使其每次能够被启动

      Step 11:接下来发现有三条命令行,RegWrite/RegRead/RegDelete,通过查询得知Reg...使用VB修改注册表的命令,这也验证了之前Filemon中看到的关于VB的DLL文件,说明恶意代码用VB程序修改了注册表信息,我们再进入注册表中发现已经被删除了

      Step 12:发现了几个简单比较能懂的命令;

      exe : 在宿主主机中执行指定的命令;

      get : 将服务器中的指定文件下载到宿主主机中;

      put : 将宿主主机中的指定文件上传到服务器;

      screenshot : 截取宿主主机的屏幕并保存到tmp文件夹中;

      sleep : 停止活动一段时间;

      接下来是作者的信息,2004年由Raul Siles & David Perez编写;

      Step 13:后面有一些--的命令行;查了下做了以下的整理:

      名称 详解
      --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
      --cycles 指定多少次向服务器请求命令文件后退出,默认是0(没有限制)
      --help 输出版权信息
      --installdir 指定样本的安装路径,默认是C:RaDain
      --noinstall 使用该参数,样本将不会安装、也不会添加注册表
      --uninstall 卸载样本
      --authors 如果确认不是在VMware的虚拟机中运行,则显示样本的作者;否则显示参数不存在

      从上面的这些参数解释中完全能和上面的分析对照上,也验证了分析的正确性;

      Step 13: 最后还有个注册表写的VMware Tools还没解决,打开XP中自带的IDA工具,将脱壳的rada.exe进行分析,首先点击Strings然后右键Type修改为Unicode;找到HKLM\Software\VMware,Inc.\VMware Tools\InstallPath

      Step 14:定位到这句命令所在的函数sub_404FB0中;在这个函数中通过汇编语言的命令得知字符串aHklmSoftwareVm移动到了变量dword_40C070中;然后定位此变量的函数为sub_40AAA0

      Step 15:查看函数sub_40AAA0的控制流图,找到SELECT这句类似于SQL的语句,由这个语句本身透露出的信息(SELECT * FROM Win32_NetworkAdapterConfigure...)可知,这个函数进行了网卡配置信息的查询;然后分析上下函数调用情况确认VMware Tools是否写入到了注册表中;通过注册表来判断OS是否运行在VMware虚拟机上,如果是,则使用—-authors参数时将不会输出作者信息;

      至此才算是将所有的疑惑解答完毕,但是还是有些地方没有分析到,后面还得继续学习呀~


    2.4 实践作业:取证分析实践


    • 实践任务:

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

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

      3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

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

      5、那些IP地址被用于攻击蜜罐主机?

      6、攻击者尝试攻击了那些安全漏洞?

      7、那些攻击成功了?是如何成功的?

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

    • IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过60个国家提供了IRC的服务。

    • IRC客户端:Xchat、mirc,注册时需要发送的消息有:

      用户信息:USER

      用户口令:PASS

      昵称:NICK

    • 注册完成后,客户端使用JOIN信息加入频道,格式为:JOIN

    • IRC服务器通常在6667端口监听,也会使用6660-6669端口


    • 问题2:僵尸网络是什么?僵尸网络通常用于什么?

    • 僵尸网络的历史渊源最早可追溯到1993年互联网发展初期在IRC聊天网络中出现的Bot工具;僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络僵尸网络基本特性是使用一对多的命令与控制机制;当前主流使用的僵尸网络命令与控制机制包括:基于IRC协议的命令与控制机制、基于HTTP协议的命令与控制机制、基于P2P协议的命令与控制机制;

    • 僵尸网络常带来的危害有: ①拒绝服务攻击,使用Botnet发动DDos攻击是当前最主要的威胁之一;②发送垃圾邮件:一些bots会设立sockv4、v5 代理,这样就可以利用Botnet发送大量的垃圾邮件,而且发送者可以很好地隐藏自身的IP信息;③窃取秘密:Botnet的控制者可以从僵尸主机中窃取用户的各种敏感信息和其他秘密;④滥用资源:攻击者利用Botnet从事各种需要耗费网络资源的活动,从而使用户的网络性能受到影响,甚至带来经济损失;⑤僵尸网络挖矿;


    • 问题3:蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

      使用过滤规则ip.src == 172.16.134.191 and tcp.dstport == 6667过滤pcap文件,发现有5台IRC服务器与蜜罐主机进行了通信:①209.126.161.29、②66.33.65.58、③63.241.174.144 、④217.199.175.10、⑤209.196.44.172

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

      使用tcpflow分流的方式进行查看,输入命令tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"之后产生了三个文件:①209.196.044.172.06667-172.016.134.191.01152、②172.016.134.191.01152-209.196.044.172.06667、③report.xml下图是report.xml的截图;

    • 问题5:那些IP地址被用于攻击蜜罐主机?

      • 使用命令行进行查看:

        $ 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 ' ' '
        '  # 将空格转换为新行 
        | tr -d "15"  # 去除
         
        | grep -v "^$"  # 去除空行 
        | sort -u  # 排序并去除重复 
        | wc -l # 获得行数
        
      • 这里我搜索出来的是5???我都懵了?怎么和大家的相差这么大?

      • 找出被攻击的IP端口:由于蜜罐的特殊性,所有进入蜜罐的流量都被视为是可疑流量,由于IP地址数过多,这里使用以下命令行查找被攻击的端口有150个并写入到1.txt文件中

        tcpdump -n -nn -r botnet.pcap '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地址有168个并且写入到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:攻击者尝试攻击了那些安全漏洞?那些攻击成功了?是如何成功的?

      • 首先使用tcpdump命令行查看下攻击者扫描的蜜罐的端口:

        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 //TCP端口
        tcpdump -r botnet.pcap -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq  //udp端口
        
      • 可以看到TCP端口有:①135(rpc)、②139(netbios-ssn)、 ③25(smtp)、 ④445(smb)、 ⑤4899(radmin)、 ⑥80(http);

      • UDP端口有:①137(netbios-ns);

      • 使用snort查看下各个协议的流量;发现TCP的流量数据最多,正好也说明了攻击者尝试的TCP端口这么多;

      • 使用过滤规则tcp.port == 135 || tcp.port == 25过滤数据包;发现全是一堆TCP连接请求但是并没有数据传输,因此攻击者只是对这俩端口进行了conncet扫描;

      • 再使用过滤规则tcp.dstport == 80 && ip.dst == 172.16.134.191过滤数据包,发现IP 24.197.194.106和蜜罐交互最多,并且里面有很多HTTP请求、协商协议请求和shell的一些操作(类似于上两周做的漏洞攻击的分析的shell操作)看到这里会想到上两周做的漏洞攻击分析,那么查一下看到http的关键词发现和IIS漏洞非常的符合,结合IIS漏洞的特点可知攻击者使用http协议对蜜罐主机进行了疯狂的Web探测,但是最后没有建立连接,因此以失败告终

        PS:这里还能看到JOIN和QUIT僵尸网络的数据包,这是由于蜜罐主机与IRC服务器进行了通信并且称为僵尸网络中一员;

      • 在抓包的最后的几行数据包中出现了一个异样的源IP,查看详情之后发现是蠕虫

      • 使用过滤规则tcp.dstport == 4899过滤数据包,4899是Radmin默认使用也经常被黑客当作木马来使用(正是这个原因,目前的杀毒软件也对Radmin查杀了)。有的人在使用的服务端口号;通过抓包的数据流分析可知攻击者利用4899端口成功攻击~

      • 使用过滤规则tcp.dstport == 139过滤数据包;139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows"文件和打印机共享"和SAMBA。在Internet上共享自己的硬盘可能是最常见的问题。139属于TCP协议。通过wireshark的抓包也正印证了上面的描述;下面红框中就是139端口试图进行的会话连接;

      • 使用过滤规则tcp.dstport == 445过滤数据包;445端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘,甚至会在悄无声息中将你的硬盘格式化掉!这个端口其实实质上还是共享文件夹的端口SMB,从wireshark抓包中同样也看到了攻击者利用这个445端口进行SMB连接的情况;

      • 下面是UDP端口的分析:UDP端口137(netbios-ns)一般安装了NetBIOS协议后,该端口会自动处于开放状态,使用者只需要向局域网或互联网上的某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息;

      • 在查看pcap数据包的时候还发现了另外两个UDP端口: 1434(1434端口是微软SQL Server未公开的监听端口)、28431(这个端口竟然没查到,难道是攻击者输入错误的端口号?wireshark中的数据包也很少)


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

    • 问题1 :想要下载一个快照对比软件,教材上提供了RegSnap和完美卸载(Total Uninstall);必须吐槽下,教材已经跟不上互联网的更新了,在网上搜索完美卸载是一个真的软件如其名的完美卸载程序的工具...并不是一个快照对比工具,于是我换了英文名Total Uninstall来搜索,现在互联网上都称这个软件为完全卸载?!我???真是个狠人,而且主要的功能是做完全的卸载注册表中等一些难卸载的文件了...
    • 解决1 :Total Uninstall不行,就换个软件用呗,换了RegSnap可用,看到打开新建快照的那一瞬间我觉得我遇上了对的那个软件了~
    • 问题2 :实践四的分析真的一头雾水;
    • 解决2 :参考了同学的博客才大致知道如何进行分析;
    • 问题3:实践四中使用tcpdump命令时出现错误:tcpdump: botnet_pcap_file: Permission denied;
    • 解决3:修改botnet_pcap_file文件名为botnet.pcap;

    4.实践总结

    这次的实践是真的多!我也写的是真的慢,慢慢的品味教材,慢慢的再写知识点再慢慢的做实践,边做边查,艾玛,我真的成了个慢蜗牛了!不过这次的实践中最让我满意的是实践三,按照教材的逻辑框架自己实现了实践,而且下载到了两个不错的工具,很nice~废话不多说了,继续努力吧!

    参考资料

  • 相关阅读:
    分工的好处
    这是真正的随笔,无论形式还是内容。。。
    javascript 检查函数传入的实参个数和期待的形参个数是否相同的方法
    JS中比较难记的函数
    3.0 Basic Usage of Class
    0.0 Visual Studio
    2.0 Exercise of Basic Statements
    5.0 String And RegularExpressions.
    1.0 HelloWorld
    dell mini9 fluxbox 声卡的安装 和 屏幕分辨率和刷新率的调节
  • 原文地址:https://www.cnblogs.com/Jody9123/p/12806111.html
Copyright © 2020-2023  润新知