20212923 2021-2022-2 《网络攻防实践》第八次作业

20212923 2021-2022-2 《网络攻防实践》第八次作业

实践八:恶意代码分析实践

课程:《网络攻防实践》

班级: 2129

姓名: 王文彬

学号:20212923

实验教师:王志强

实验日期:2022年5月1日

必修/选修: 选修

一.实践内容

1. 实践要求介绍

  • 动手实践任务一

    • 任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
      • 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;
      • 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
      • 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
  • 动手实践任务二

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

    • 任务:分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
      • 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
      • 找出并解释这个二进制文件的目的;
      • 识别并说明这个二进制文件所具有的不同特性;
      • 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
      • 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
      • 给出过去已有的具有相似功能的其他工具;
      • 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
  • 分析实践任务二——Windows 2000系统被攻破并加入僵尸网络

    • 任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。回答下列问题:
      • IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
      • 僵尸网络是什么?僵尸网络通常用于什么?
      • 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
      • 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
      • 那些IP地址被用于攻击蜜罐主机?
      • 攻击者尝试攻击了那些安全漏洞?
      • 那些攻击成功了?是如何成功的?

恶意代码

  • 知识点总结:
  1. 恶意代码指的是是计算机按照攻击者意图运行以达到恶意目的的指令集合;

  2. 指令集合:二进制执行文件,脚本语言代码,宏代码,寄生在文件、启动扇区的指令流;

  3. 恶意代码的目的:技术炫耀/恶作剧,远程控制,窃取私密信息,盗用资源,拒绝服务、破坏等。

  4. 恶意代码类型:

    • 计算机病毒,蠕虫,恶意移动代码,后门,特洛伊木马,僵尸程序,Rootkit等;
    • 计算机病毒是最早出现的恶意代码,媒体/工业界的概念混淆,经常以计算机病毒等价于恶意代码
  5. 计算机病毒的感染机制

    • 感染可执行文件;
      • 前缀感染
      • 后缀感染
      • 插入感染
    • 感染引导扇区;
    • 感染数据文件-宏指令
  6. 后门

    • 后门是允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道;
    • 后门类型
      • 本地权限提升;
      • 单个命令的远程执行;
      • 远程命令行解释器访问-NetCat;
      • 远程控制GUI—VNC,BO,冰河,灰鸽子;
      • 无端口后门:ICMP后门,给予Sniffer非混杂模式的后门,基于Sniffer混杂模式的后门。
    • 自启动后门
      • Windows:自启动文件/文件夹;注册表自启动项;计划任务
      • Linux/Unix:inittab,rc.d/init.d,用户启动脚本,cron计划任务
  7. 僵尸程序与僵尸网络

    • 僵尸程序(Bot):来自与robot,攻击者用于一对多控制目标主机的恶意代码;

    • 僵尸网络(BotNet):攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。

    • 僵尸网络的危害——提供通用攻击平台

      • 分布式拒绝服务攻击
      • 发送垃圾邮件
      • 窃取敏感信息
      • 点击欺诈
    • IRC僵尸网络工作机制

    • HoneyBot僵尸网络跟踪实现效果

    • 僵尸网络跟踪--僵尸网络列表

    • 僵尸主机地域分布

恶意代码分析方法

  1. 静态分析

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

    • 通过在受控环境中执行目标代码,以获取目标代码的行为及运行结果。
  3. 恶意代码静态分析方法列表

  4. 文件格式确定

    • file:确定恶意代码目标平台和文件类型
    • peid:文件类型、编辑链接器、是否加壳
    • file analyzar:分析win32平台窗口程序中包含的特殊文件
    • Strings命令:
      • 恶意代码实例名
      • 帮助或命令行选项
      • 用户会话
      • 后门口令
      • 相关URL信息
      • 库、函数调用
    • 结合grep/find寻找关注信息
  5. 恶意代码混淆机制技术原理

    • 加密:固定加密/解密器;对解密器进行特征检测
    • 多样性:多样化解密器;
    • 多态:多态病毒能够通过随机变化解密器从而使得每次感染所生成的病毒实例都具有唯一性。应对:虚拟机进行脱壳
    • 变形:直接在病毒体中通过各种代码混淆技术
  6. 恶意代码动态进行方法列表


任务一:对提供的rada恶意代码样本,进行分析

(1)首先我们对老师给的压缩包进行解压到XP虚拟机中,解压密码是rada;

(2)使用命令file Rada.exe对其文件格式、运行平台和加壳工具识别:

(3)我们打开超级巡警脱壳机对rada.exe进行脱壳;
image

(4)我们可以在Process Explorer中查看字符串这一项中,我们可以浏览看到该恶意代码在我们计算机做了什么,同时也可以看到该恶意程序的编写作者。

(5)我们也可以使用IDA工具打开脱壳以后的恶意代码,点击进入Strings项目中,首先进入Edit-->set up-->选中unicode;

(6)我们可以在当前界面靠下看到-author的字眼,可以看到该恶意代码的编写作者;

(7)我们还可以进入-author的函数内,点击View-->Graphs-->Function calls可以看到该函数之间的函数调用,我们可以寻找sub_40b010,在functions界面中我们可以点击进入sub_40b010后,点击进入View-->Graphs-->Flow chart,进而找到该恶意代码的作者。


任务二:分析Crackme程序

分析crackme1.exe

(1)我们首先在bash中对crackme1程序的输入格式进行试探,我们分别进行如下图的命令行输入,可以得到如下的结果:

(2)我们接下来打开IDA工具,点击PE Execurable打开该程序,我们可以看到如下界面

(3)我们可以在Strings前几行中看到我们之前在试探输入格式的错误内容;

(4)我们在界面中点击View-->Graphs-->Function calls,去寻找输出函数,可以找到如下图

(5)我们进入sub_401280函数中,点击进入View-->Graphs-->Flow chart,我们可以看到正确的输入格式及结果;

(6)我们可以去命令行中进行验证

分析crackme2.exe

(1)与分析crackme1.exe程序过程相似,首先我们在命令行中对该程序的输入格式进行试探,可以得到如下的界面;

(2)接下来打开IDA工具,点击PE Execurable打开该程序,我们可以看到如下界面

(3)我们仍旧可以在前几行看到我们之前在试探输入格式中的输出内容,相比于crackme1.exe多了几行;

(4)我们在界面中点击View-->Graphs-->Function calls,去寻找输出函数,可以找到如下图

(5)我们进入sub_401280函数中,点击进入View-->Graphs-->Flow chart,我们可以看到正确的输入格式及结果;

(6)我们可以去命令行中进行验证


任务三:分析一个自制恶意代码样本rada

  • 问题一:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
    • 如下图,我们可以输入md5sum rada.exe对其进行解析。

    • 我们可以使用命令file rada.exe对其进行分析后可以得到一些可以识别的信息,类似于系统等。

综上实践,我们可以看到该文件的摘要是caaa6985a43225a0b3add54f44a0d4c7

是一个UPX加壳文件,UPX段改名为JDR,版本号从1.25改为0.99;

同时是PE文件格式;

运行在Windows 2000,xp和2003及以上版的os中;

  • 问题二:找出并解释这个二进制文件的目的
    • a. 当我们运行该二进制文件后,我们可以使用Process Explorer中对其字符串进行观察:

      • 我们可以发现该恶意程序对主机注册表文件进行读写和删除操作;

      • 同时该恶意代码继续执行了上传、下载、休眠、屏幕截图等命令;

      • 该恶意代码还进行了查询受害者主机上可用的网络适配器的数据库查询语句;

    • b.我们可以查看wireshark抓包文件,可以看到恶意代码在进行ftp上传下载。

综上实践,我们可以了解到该二进制文件是一个后门程序,攻击者可以借助该后门程序对主机进行操作。

  • 问题三:识别并说明这个二进制文件所具有的不同特性
    • 我们可以分析可知,进入c盘后我们可以看到改二进制文件在c盘中进行复制,同时,点击则一直运行在后台,同时重启后自动运行,我们在字符串分析中也看到该二进制文件对我们主机的注册表文件进行了修改;

    • 同时我们可以看到该二进制还自动打开网页进行访问等功能

综上实践,它会自动安装到C盘中,并修改注册表跟随系统开机启动:访问http://10.10.10.10/Rada/Rada_command.html,还可以解析指令并执行指令。

该程序支持以下指令:

操作 解释
put 将宿主主机中的指定文件上传到服务器
exe 将宿主主机中执行制定的命令
get 将服务器中的指定文件下载到宿主主机中
screenshot 截取宿主主机的屏幕并保存到tmp文件夹
sleep 停止活动一段时间
  • 问题四:识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
    • 我们可以使用查壳工具对该二进制文件进行查壳,因为我们使用strings Rada.exe命令查看可打印字符串时发现都是乱码;

    • 同时这个二进制文件使用UPX加壳后又做了手工修改;

    • 我们进行脱壳以后,可以在文件中找到字符串“Starting DDoS Smurf remote attack.”这个语句可以会误导分析者恶意代码要发动Ddos攻击,而实际上并没有。

综上实践,我们可以知道该二进制文件使用的是UPX加壳技术。

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

我们可以从上述的实践进行判断,首先该恶意程序一直在重复做访问固定界面的操作,因此不具有传播和感染的特性,因此其不属于病毒或者蠕虫;另一方面,该恶意程序需要我们进行点击后才会运行,同时其并没有伪装成我们常用的软件附着在上面,因此其也不属于木马,因此判断其为一个后门程序。

  • 问题六:给出过去已有的具有相似功能的其他工具

Bobax,2004年发现的木马,也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。还有特洛伊木马Setiri。

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

我们在第一个实践中分别在三个地方可以找到该程序的作者,是Raul siles和David Perze于2004年编写的。


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

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

(1)IRC指的是因特网中继聊天(Internet Relay Chat),一般称为互联网中继聊天,简称:IRC。

(2)IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为"Channel"(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称)。

(3)注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:USER <username> <hostname> <servername> <realname>、PASS <password>、NICK <nickname>。注册完成后,客户端就使用JOIN信息来加 入频道,格式如下:JOIN <channel>

(4)IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。

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

    • 僵尸网络(botnet)是在网络蠕虫、特洛伊木马、 后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。僵尸网络我在文章开头也有简单介绍过,指的是攻击者出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
    • 僵尸网络一般用于提供通用攻击平台
      • 分布式拒绝服务攻击
      • 发送垃圾邮件
      • 窃取敏感信息
      • 点击欺诈
  • 问题三:蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

    • 我们可以使用wireshark打开该数据包,我们输入限定条件ip.src == 172.16.134.191 && tcp.dstport == 6667后,可以在交互过程中我们可以发现有五台IRC服务器,分别是:
Num IP
Num.1 209.126.161.29
Num.2 66.33.65.58
Num.3 63.241.174.144
Num.4 217.199.175.10
Num.5 209.196.44.172

  • 问题四:在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
    • 当我们在命令行中输入tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"后,我们在该目录下可以得到三个文件,分别为report.xml以及两个进行分流后的文件,我们主要通过209.196.044.172.06667-172.016.134.191.01152该分流文件对ip=209.196.44.172进行查找。

    • 我们从参考视频中可以发现,在进行查找主机之前,在命令行中键入了export LC_COLLATE='C'和export LC_CTYPE='C',这句命令主要是为了去除所有本地化的设置,能够让命令正确执行。

    • 接下来我们在命令行内键入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后可以得到如下,可以看到一共有3457个主机访问了该僵尸网络。

在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。

  1. LC_COLLATE:定义该环境的排序和比较规则;
  1. LC_CTYPE:用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。
  • 问题五:哪些IP地址被用于攻击蜜罐主机?

    • 当我们在命令行内键入tcpdump -n -nn -r /home/user/Desktop/botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > tcpdump.txt;wc -l tcpdump.txt命令后,我们可以得到如下的结果

    • 可以得到,一共有165个ip被用于攻击蜜罐主机。

  • 问题六:攻击者尝试攻击了哪些安全漏洞?

    • 利用指令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端口,我们可以得到以下端口,对应的是135(rpc),139(netbios-ssn),25(smtp),445(smb),4899(radmin),80(http)

      • TCP135号端口和25号端口

        • 我们可以看到其只是进行了链接,但是没有数据的交互,所以攻击者可能只是对这两个端口进行了connect扫描。
      • TCP80号端口

        • 当我们输入筛选条件tcp.dstport==80 && ip.dst == 172.16.134.191后,我们可以看到IP为24.197.194.106的设备有很多通信记录,正是因为其行为就是不停的用++脚本++在攻击IIS服务器的漏洞,从而获取系统权限。

        • 我们可以看到ip为210.22.204.101的设备出现了很多C,攻击者想通过缓冲区溢出攻击来获得一个命令行

        • 我们可以看到IP为218.25.147.83的设备,在发送N,我们追踪流后可以发现,攻击者正在使用红色蠕虫病毒

        • 我们增加筛选条件tcp.srcport==80 && ip.src == 172.16.134.191&&http后,我们发现通过蜜罐主机80端口向外的流量均被回应一个lis服务器的默认界面,表示攻击失败。

      • 139号端口

        • 当我们对139号端口进行筛选时,我们可以看到有很多连接到该端口,但是却有很多空会话,判断为SMB查点,但没有成功。
      • 445号端口

        • 发现有一个PSEXESVC.exe的文件,该文件是一种Dv1dr32的蠕虫,主要通过IRC进行通信

        • 找到出口,发现每一个IP都能够有一个响应,同时返回信息包含有\pipe\ntsvcs,因此我们可以知道,攻击者肯定获得了权限,该攻击是成功的

      • 4899号端口

        • 4899端口是一个远程控制软件radmin服务端监听端口,该软件不是木马,是借助445端口攻击成功后,进行下载为了进行远程控制。
    • 同样对UDP短裤进行筛选,使用命令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 ,只有137端口

      • UDP137号端口:这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是NetBIOS查点。
  • 问题七:那些攻击成功了?是如何成功的?

    • 该题答案可以参考问题六。

二、 实验过程中遇到的问题和解决过程

1.在进行查找有多少主机访问过僵尸网络过程中,按照步骤进行后,总是输出0

  • 在于输入grep命令过程中,在该试验中我们应当输入grep -a,因为grep原本是搜寻文字文件,若拿二进制的档案作为搜寻的目标,则会显示如下的讯息: Binary file 二进制文件名 matches 然后结束。若加上-a参数则可将二进制档案视为文本文件搜寻,相当于--binary-files=text这个参数。

三、感想

在此次实践中,从分析角度更深刻的了解了恶意代码的攻击原理,同时也学习了相关对于恶意软件分析工具的使用等知识。

四、参考文献

linux grep -a命令,linux grep用法

网络攻防技术与实践课程

posted @ 2022-05-06 17:14  lalalaouye  阅读(92)  评论(0编辑  收藏  举报