20192428魏来 《网络与系统系统攻防技术》实验四 恶意代码分析

《网络与系统攻防技术》实验四 恶意代码分析

实践目标

  1. 恶意代码文件类型标识、脱壳与字符串提取。对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
    1. 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
    2. 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
    3. 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
  2. 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
  3. 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
    1. 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
    2. 找出并解释这个二进制文件的目的;
    3. 识别并说明这个二进制文件所具有的不同特性;
    4. 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
    5. 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
    6. 给出过去已有的具有相似功能的其他工具;
    7. 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
  4. 取证分析实践 Windows 2000系统被攻破并加入僵尸网络
    问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
    1. IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
    2. 僵尸网络是什么?僵尸网络通常用于什么?
    3. 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
    4. 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
    5. 哪些IP地址被用于攻击蜜罐主机?
    6. 攻击者尝试攻击了那些安全漏洞?
    7. 那些攻击成功了?是如何成功的?

实验准备

本次实验需要使用以下几种工具:IDA Pro、Peid、超级巡警脱壳器(VMUnpacker)V1.3、Process Explorer等。
实验环境为Windows 10、辅助环境为Kali

实验过程

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

该部分实践为对文件Rada进行分析,首先使用Linux环境下的file指令对文件进行分析;
image
分析可得,文件类型为:PE32 executable (GUI) Intel 80386, for MS Windows
尝试分析文件字符串,使用 strings 文件名来分析文件,得到如下结果:
image
证明该文件有壳,需要使用脱壳文件,但首先需要分析壳的特征码,得到壳信息,这里使用peid对壳进行分析:
image
通过peid分析得到壳信息,接下来使用脱壳程序进行脱壳:
image
image
接下来对我们脱壳后的程序进行验证,使用strings 文件名查看文件字符串,结果如下图:
image
表面我们脱壳成功!
使用PE(Process Explorer)打开我们的脱壳的程序,这里需要使用管理员权限打开,然后在PE中找到我们的脱壳程序的进程,双击打开详情,选择Strings找到字符串列,在里面可以找到程序的一些信息,这里我们找到了程序的作者信息:
image
实践一完成!

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

crackme1

首先分析crackme1,我们使用IDA Pro打开该exe文件,可以看到程序的汇编语言:
image
这里可以点击视图-->图表-->函数调用打开查看函数调用的关系,不过因为程序会调用许多内置函数,这个图对我们分析程序代码帮助不大,下面是我们crackme1.exe文件的函数调用表:
image
点开IDA Pro中的functions一栏,选择我们的main函数,也可以直接进行反编译:
image
反编译后的代码一目了然,可以清楚的看到程序中的逻辑内容部分。最终我们得到该程序的key值为:"I know the secret",将其加在程序名后作为参数启动,即可输出成功信息:
image

crackme2

分析crackme2,我们同样使用IDA Pro打开该exe文件,可以看到程序的汇编语言,我们查看函数的逻辑结构如下图:
image
如下图有三个判断,判断成功后方可运行最终的flag程序,我们对三个判断进行分析:
image
首先判断是否为两个输入,输入1为文件名,输入2为字符串(类似于crackme1.exe文件)
image
判断二则为判断文件名,文件名是否为crackmeplease.exe?只需要将crackme2.exe改名即可
image
最后一个判断和crackme1文件一样,该程序的key值为:"I know the secret"。
最后附加我们成功运行的操作:
image

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

这里我们使用Windows系统下预装摘要工具Certutil,对文件产生摘要值:

 certutil -hashfile 你的文件路径

可以在命令后指定算法,这里我们产生MD5和SHA256两种摘要值:
image
MD5:caaa6985a43225a0b3add54f44a0d4c7
Sha256:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90

这里我们右键RaDa.exe,选择管理员运行,再打开ProcessExplorer查看RaDa_unpacked.exe的字符串信息(Strings),得到如下截图;
image
可以看到文件执行的操作有:

  • 回连10.10.10.10
  • 创建目录C:\RaDa\bin
  • DDos Smurf remote attack

因此我们可以对该样本分析出结果,可得:

  1. 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息:
    • MD5:caaa6985a43225a0b3add54f44a0d4c7
    • Sha256:13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
  2. 找出并解释这个二进制文件的目的
    • 这是一个后门程序,该程序将回连10.10.10.10,并进行DDOS攻击
  3. 识别并说明这个二进制文件所具有的不同特性
    • 开机自启动,win+R,输入taskmgr /0 /startup进行查看
      image
  4. 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
    • 如实践一我们所使用破壳工具做的,该文件使用UPX加壳,来防止被杀毒软件检杀。
  5. 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
    • 额,我认为这是一个后门程序,因为它会进行回连操作,并且并非用于首次攻击,是由被攻击者启动来运行的。
  6. 给出过去已有的具有相似功能的其他工具
    • Bobax、Setiri、GatSla等
  7. 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
    image
    可以查看作者,如上图,在win10环境64位系统下

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

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

    • 因特网中继聊天(Internet Relay Chat),一般称为互联网中继聊天,简称:IRC。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。
    • 一般端口号为6667,或者6660-6669范围的端口
    • 申请加入一个IRC网络时会发送服务器的域名,TCP申请端口和昵称
    • IRC上的信息交流采用请求与应答的模式. 请求是由服务器或客户端发出的,其目的是请求(另)一个服务器执行某个操作或提供某些信息; 应答是服务器对一个请求的回应信息. 请求通常被称为命令; 由于对每种应答都规定了一个三位数字做标识,应答也称为数字应答(numeric reply).
  2. 僵尸网络是什么?僵尸网络通常用于什么?

    • 僵尸网络是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
    • 通常用来发起大规模的网络攻击,如分布式拒绝服务攻击(DDoS)。
    • 任何连接互联网的设备都可以添加到僵尸网络中,包括笔记本电脑、台式电脑、智能手机、DVR播放器、无线路由器以及其他物联网(IoT)设备。
  3. 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

    • 我们使用WireShark打开botnet_pcap_file.dat文件,因为需要查看与IRC服务器通信,结合IRC特性,我们输入ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697,对文件内通信进行筛选。
    • 分析下图可得,IRC服务器:66.33.65.5863.241.174.144217.199.175.10209.196.44.172209.126.161.29
    • image
  4. 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

    • 这里我参考了陈涵文同学的博客,这里我们使用指令:
    tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667'
    # 生成三个文件,分别为172.016.134.191.01152-209.196.044.172.06667、209.196.044.172.06667-172.016.134.191.01152、report.xml
    
    cat 209.196.044.172.06667-172.016.134.191.01152 | grep --text "^: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
    # 获取209.196.044.172.06667-172.016.134.191.01152文件中的数据并通过管道传送给grep搜索有关IRC通信的数据
    # grep --text: 和grep -a作用相同,即不要忽略二进制的数据。
    # sed:去除前缀;
    # tr:将空格转换为换行
    # tr -d删除\r
    # grep -v:去除空行
    # sort -u排序并去除重复
    # wc -l:输出行数。
    
    • 最终得到输出值即为在该文件观察期间,连接209.196.44.172的主机数。
  5. 哪些IP地址被用于攻击蜜罐主机?

    • 这里还是参考陈涵文同学的博客,使用指令:
    • 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 > ipaddr.txt;wc -l ipaddr.txt
      image
    • 得到最终一共有165个IP地址,下图为攻击者IP:
      image
  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   //对TCP进行筛选
    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  //对UDP进行筛选
    
    • 可以发现响应端口有以下这些:135(rpc)、139(netbios-ssn)、25(smtp)、445(smb)、4899(radmin)、80(http)、137(netbios-ns)
    • 接下来我们使用Wireshark对这几个端口进行一一分析:

    首先对135端口进行分析:tcp.dstport == 135 && ip.dst == 172.16.134.191,结果如下图,只是建立了连接:
    image
    然后对139端口进行分析:tcp.dstport == 139 && ip.dst == 172.16.134.191,结果如下图,我发现该端口下有大量IP尝试连接,但大多数返回值为RST,说明服务端发现攻击类型并拒绝建立连接,同时该端口下建立好的连接也存在大量空对话:
    image
    然后对25端口进行分析:tcp.dstport == 139 && ip.dst == 172.16.134.191,结果如下图,也仅仅只是建立了连接:
    image
    然后对445端口进行分析,发现445端口涉及到了服务端的管理员文件夹:
    image
    又发现调用了服务器内路径的PSEXESVC.EXE工具,该工具可以通过在远程主机上运行命令来执行维护任务,因此具有攻击嫌疑。同时又调用了\WINNT\System32\raddrv.dll(远程管理员视频钩子驱动程序)、\WINNT\System32\admdll.dll(远程控制客户端)等,因此可见攻击了445端口:
    image
    然后又对4899端口进行分析,该端口是Radmin远程控制工具,可能是被利用来控制蜜罐主机,而该端口只有210.22.204.101反复访问:
    image
    最后对80端口进行分析,发现和139端口差不多,并且进行了类似缓冲区溢出攻击的相关数据包,但都被蜜罐主机识别并发送RST数据包:
    image

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

    • 攻击445端口成功,使用蠕虫攻击实现的。

问题及解决方案

问题一:使用powershell对crackme2.exe文件破解失败

问题图片如下,我发现即使将文件名改为crackmeplease.exe,运行依旧返回文件名错误的结果:
image
解决方案:换成cmd,powershell下运行文件需要加.\,导致文件名失败出错,下图为相同文件、相同字符串的运行结果。
image

问题二:关闭RaDa文件的开机自启动项后,文件失效,无法启动也无法使用Process Explorer进行探查

无法打印作者名,打开开机自启动即可解决。

问题三:IDA pro的反编译功能不能使用

问题原因为版本过久,使用了5.0版本的IDA,无法反编译,更换为7.0版本后可以正常使用反编译功能。

学习感悟

本次实验任务量比较大,做了很久才做完,收获满满。对恶意软件进行了一些基础的分析,明白了恶意软件进行攻击的一些经典操作,在今后的学习中还需加强学习,争取更深层次的了解恶意软件的攻击方式。

posted @ 2022-04-17 17:37  岁岁敲代码  阅读(164)  评论(0编辑  收藏  举报