20212931 2021-2022-2 《网络攻防实践》第八次实验任务

一、实验内容

(一)基础知识

恶意代码


  • 1.简介

    定义:恶意代码(Malware,或Malicious Code)指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
    指令集合:二进制执行文件、脚本语言代码、宏代码、寄生在文件或者启动扇区的指令流。
    目的:远程控制被攻击主机、满足施跳板攻击或进一步传播恶意代码、窃取私人信息或机密信息、窃取计算存储带宽资源、拒绝服务等。
    类型:不感染的依附性恶意代码(特洛伊木马、逻辑炸弹)、不感染的独立性恶意代码(点滴器、繁殖器)、可感染的依附性恶意代码(病毒)、可感染的独立性恶意代码(蠕虫)

  • 2.计算机病毒

    定义:计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成。
    特性:感染性(本质特性)、潜伏性、可触发性、破坏性、衍生性。
    感染及引导机制:

    • 感染可执行文件(最为普遍的方式):前缀感染机制(病毒将自身复制到宿主程序的始端)、后缀感染机制(病毒将自身复制到宿主程序的末端)、插入感染机制(病毒在感染宿主程序时,病毒代码放在宿主程序的中间)。
    • 感染引导扇区:通过BIOS定位磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。
    • 感染数据文件(支持宏的数据文件):将自身以宏指令的方式复制到数据文件中,当被感染的数据文件被应用程序打开时,将自动执行宏病毒体,完成病毒的引导。
  • 3.网络蠕虫

    定义:一种通过网络自主传播、自我复制的独立恶意代码。(从这里就可以看出病毒和蠕虫的区别)
    传播机制:主动攻击网络服务漏洞、通过网络共享目录、通过邮件传播。
    组成结构:

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

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

  • 5.僵尸程序与僵尸网络

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

  • 6.Rootkit

    定义:隐藏性恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。换句话说,就是root权限的kit工具包。
    用户模式Rootkit:恶意修改操作系统在用户模式下的程序/代码,达到隐藏目的(木马化操作系统用户模式应用程序)。主要分为五种类型:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本。
    内核模式Rootkit:恶意修改操作系统内核,从而达到更深的隐藏和更强的隐蔽性(对内核组件的恶意修改和木马化)。主要有如下方式:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。

恶意代码分析技术


  • 1.简介

    代码分析:按需求使用一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
    恶意代码分析的技术方法主要包括静态分析和动态分析两类。
    分析良性代码与分析恶意代码的区别:

    • 不能提前知道恶意代码的目的。
    • 恶意代码具有恶意的攻击目的,会对所运行环境进行恶意破坏。
    • 恶意代码分析在绝大数情况下不会拥有待分析程序的源代码。
    • 恶意代码目前都会引入大量各种各样的对抗分析技术。
  • 2.分析环境

    采用虚拟化技术构建恶意代码分析环境:保证主机和虚拟机的隔离,防止主机收到伤害,同时最好让主机隔离网络连接

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

  • 3.静态分析

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

    • 反病毒软件扫描:使用反病毒软件对待分析样本进行扫描。主要有卡巴斯基、赛门铁克、瑞星、金山等。
    • 文件格式识别:依靠专业工具如file(确定恶意代码目标平台和文件类型),peid(文件类型、编译链接器、是否加壳),FileAnalyzer(分析Win32平台窗口程序中包含的特殊文件)等进行识别分析。
    • 字符串提取:主要提取的信息包括可能获得的有用信息、恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息和Email地址、库和函数调用。
    • 二进制结构分析:nm指令在可执行文件中查找symbols重要元素。objdump主要功能有从可执行文件中限制不同类型的信息、编译器类型、代码段数据段位置、反汇编。
    • 代码结构与逻辑分析:程序结构主要是了解Call Graph,即用户函数、系统函数和函数调用关系。分析系统函数调用列表可在高层分析二进制程序的行为逻辑。程序逻辑主要是了解程序控制流图(CFG),CFG完备地反映了一个程序的执行逻辑。
    • 加壳识别和代码脱壳:包括四个方面:加密(固定加密/解密器)、多样性(多样化解密器)、多态(多态病毒能够通过随机变换解密器从而使得每次感染所生成的病毒实例都具有唯一性)、变形(直接在病毒体上加入各种代码混淆技术)。
  • 4.动态分析

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

    • 动态分析中的监视与控制:行为监视即一系列监控软件来控制和观察恶意代码的运行情况。网络控制即与业务网络和互联网保持物理隔离。
    • 快照比对:分为四步:对“干净”资源列表做快照、运行恶意代码、对恶意代码运行后的“脏”资源列表做快照、对比“干净”和“脏”快照,获取恶意代码行为结果。
    • 动态行为监控:包括Notification机制(Win32/Linux系统本身提供的行为通知机制)和API Hooking技术(对系统调用或API调用进行劫持,监控行为)。
    • 网络监控:主要监控四个方面,包括恶意代码开放的本地端口、恶意代码发起的网络连接、控制恶意代码网络流和恶意代码流行攻击方式-ARP欺骗。
    • 沙盒:沙盒技术用于安全运行程序的安全环境,经常被用于执行和分析非可信的代码。
    • 动态跟踪调试:在程序的执行过程中进行二进制调试(Debugging)。

(二)实践内容

  • 动手实践任务一:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
  • 动手实践任务二:分析Crackme程序

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

  • 分析实践任务一:分析一个自制恶意代码样本rada,并撰写报告。
  • 分析实践任务二:Windows 2000系统被攻破并加入僵尸网络

    任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。

二、实践过程

动手实践任务一


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

    在Kali下使用file命令查看rada.exe

    可以发现是带有图形化界面(GUI)的 Win32 PE(可移植可执行)程序,运行环境为windows系统
    使用PEiD或Exeinfo PE查壳,发现使用了UPX加壳

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

    我首先使用了kali中的upx工具直接脱壳,失败,原因是详见UPX防脱壳机脱壳、去除特征码、添加花指令小探

    然后使用使用PEiD自带插件对rada.exe去壳

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

    在kali上使用Strings打印脱壳后软件的字符串

    发现编写作者为Raul siles&David Perze,编写时间为2004年9月

动手实践任务二


  • 1.初次尝试执行crackme1.exe,发现缺少有效值

  • 2.使用IDA打开crackme1.exe,寻找提示语句,分析逻辑,找到有效输入值"I know the secret",别忘记""


  • 3.继续使用IDA打开rackme2.exe,寻找提示语句,分析逻辑,发现与crackme1.exe不同,多了一个主函数的输入值判断,需要修改其启动名crackmeplease.exe,后面参数同为"I know the secret"


分析实践任务一


  • 1.分析流程:

    在Kali上使用md5sum RaDa.exe获取摘要

    使用IDA打开RaDa.exe,查看其代码流,发现访问操作和下载操作

    转到对应的结构图部分,发现其访问了指定的url

    然后判断了三个私有网段,确保自身在私有网络内,然后下载了指定文件然后新建了目录

    并且修改了注册表,将其自身添加入启动项内

    而程序的具体参数和功能如下

    • --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的虚拟机中运行,则显示样本的作者;否则显示参数不存在
  • 2.问题回答:

    1、提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
    md5摘要:caaa6985a43225a0b3add54f44a0d4c7
    2、找出并解释这个二进制文件的目的;
    控制系统,应该是后门程序
    3、识别并说明这个二进制文件所具有的不同特性;
    请求Web服务器,解析指令执行操作、复制自身到C:\RaDa\bin并添加自启动、
    4、识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
    UPX加壳,同时手动修改进行防范脱壳(具体解释参考上文提及的论坛)
    一些干扰的误导选项,如没有用到的sql语句SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True,无意义的starting DDOS smurf remote attack。
    5、对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
    样本不具有传播和感染的性质,同时没有将自己伪装成有用的程序以欺骗用户运行,因此不属于病毒、蠕虫、木马,应当是一个后门程序或者僵尸程序
    6、给出过去已有的具有相似功能的其他工具;
    木马Bobax,特洛伊木马Setiri、GatSla
    7、可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
    作者为Raul siles 和 David Perze。使用ida或strings能查看,或者在非vmware环境下执行--authors参数

分析实践任务二


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

    因特网中继聊天(Internet Relay Chat),简称IRC。IRC的工作原理非常简单,客户端软件通过因特网以IRC协议连接到IRC服务器上即可。IRC特点是通过服务器中继与其他连接到这一服务器上的用户交流。
    注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER 、PASS 、NICK 。注册完成后,客户端就使用JOIN信息来加 入频道,格式如下:JOIN
    IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。
    注意:攻击者滥用IRC构建僵尸网络时,可能使用任意的端口构建IRC僵尸网络控制信道,那么基于端口识别服务不再可靠,要进行基于应用协议特征进行识别(如USER/NICK)。

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

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

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

    使用Wireshark打开数据文件,根据IRC简介,常见端口为6667,因此设置过滤条件ip.src == 172.16.134.191 && tcp.dstport == 6667

    得到五个服务器地址:

    • 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为服务器的僵尸网络

    在Kali上使用tcpflow软件对样本分流tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"

    生成一个report文件和两个分流的文件,报告文件内有两个主机互相通信的时间,IP,mac地址,使用端口,包裹数
    查询主机个数主要看是209.开头的文件,从这个文件中找到有多少个主机访问了209.196.44.172,包裹数过于庞大,使用管道连接指令筛选。
    本次使用命令:cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^: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
    命令详解:

    • 1.cat命令,连接209.输出文件。cat命令简介
    • 2.grep搜索获取昵称输出行。
    • 3.sed去除前缀,最后的g是全局的意思。
    • 4.tr将空格转换为换行。
    • 5.tr -d删除\r。
    • 6.grep -v就是NOT指令,去除空行。
    • 7.sort -u排序并去除重复。
    • 8.wc -l输出行数。

    计算出来结果有3461个

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

    蜜罐主机作为诱导主机,进入其流量一般都应当是攻击行为,因此使用tcpdump查找连接主机ip
    注:awk -F就是指定分隔符,可指定一个或多个,print后面做字符串的拼接;cut -d是指定字段的分隔符;uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。
    本次使用命令: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 > ip.txt;wc -l ip.txt

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

    要分析攻击者针对的安全漏洞,首先要定位到可能被攻击的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

    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

    首先查看UDP137,发现为空,然后逐个筛选TCP端口
    端口135的数据很少,且并没有实际数据交互,推测是在探测

    端口25的情况类似,也应当只是扫描

    端口139的情况有些不同,出现了SMB协议,但并未有实际数据交互,应当是SMB查点

    端口80数据量很大,在浏览中发现http协议中异常字段,类似于缓冲区溢出攻击的特征

    添加http筛选条件,发现后续还有不同攻击,应该是目录穿越攻击

    在验证80端口的外流流量时,注意到80端口最后访问的一个有趣操作,类似于缓冲区溢出攻击但有区别,追踪后发现是一种
    红色代码蠕虫攻击

    80端口遭受了大量多种攻击,但向外流量均为一个iis服务器的默认页面,所以80端口的这些攻击均失败。
    端口445中多次出现了SMB协议,而且Path:\172.16.134.191\ADMIN$等多次重复组合出现,筛选浏览,发现61.111.101.78发送了PSEXESVC.EXE,这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。

    445的出口流量,发现每个IP地址连入的连接都有响应的回应,所以攻击者肯定是获得了权限,因此这个攻击成功的。

    最后的端口4899,起初只看到单个地址,查得4899端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上载的这个软件方便控制。

    但当后续把筛选条件拓展时,发现24.197.194.106对其曾尝试攻击过一次,至此,才算结束。

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

  • 学习中遇到的最大问题就是汇编语言的解读,不熟悉的时候经常漏看,跳看,程序逻辑理解不清,只能一字一句的查找寻找解释。

四、学习感悟、思考

本次实验,动手实践了恶意代码文件类型识别、脱壳与字符串提取,动手实践了分析案例 Crackme 程序,寻找其启动方式和内部信息,另外分析了恶意样本,进一步了解了取证分析的细节。随着实验内容的加深,除却对工具的学习外,更多的感受到底层编程语言及其逻辑、协议设计及其逻辑的要求进一步加深,万丈高楼平地起,还是得埋头打基础。

posted @ 2022-05-06 14:01  Psalm46  阅读(132)  评论(0编辑  收藏  举报