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

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

作业说明

这个作业属于哪个课程 网络攻防实践
这个作业的要求在哪里 第九次作业: 恶意代码基础知识和分析方法
我在该课程的目标 对网络攻防技术有一个比较全面的认识,能够掌握基本的攻防操作。
这个作业在哪个具体方面帮助我实现目标 学习了恶意代码基础知识和分析方法。

作业正文

实践内容

恶意代码基础知识

  • 定义:恶意代码是指使计算机按照攻击者的意图执行以达到恶意目的的指令集。(不一定是二进制执行文件)

  • 分类

  • 计算机病毒

    • 定义(我国):指编制或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码。

    • 基本特性:感染性(最本质)、潜伏性、可触发性、破坏性、衍生性。

    • 感染及引导机制:

      • 可执行文件:前缀感染机制、后缀感染机制、中间插入感染机制。

      • 引导扇区:通过BIOS定位到磁盘的主引导区,运行存储在那的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录复制装载操作系统。
      • 支持宏指令的数据文件:目前许多流行的数据文件格式支持在数据文件中包含的一些执行代码,使得应用软件在打开这些数据文件时自动执行所包含的代码从而完成一些自动化数据处理的功能。
    • 传播机制:移动存储、电子邮件及下载、共享目录等。

  • 网络蠕虫

    • 定义:是一种它能够给网络自主传播的恶意代码。出现相对于计算机病毒、木马、后门来说比较晚,但是传播速度、传播范围和破坏程度都是以往的恶意代码无法比拟的。
    • 组成结构:
      • 弹头:为获得计算机的访问权,使用一些渗透攻击代码作为“弹头”,侵入目标系统,为了能够占领更多的系统,蠕虫可以利用目标系统尽可能多的安全漏洞实施攻击。
      • 传播引擎:获得目标系统的访问权之后,蠕虫必须传输自身复制样本到目标系统上。传播引擎通常利用的网络传输机制包括文件传输协议FTP、小文件传输协议TFTP、超文本传输协议HTTP,服务信息块协议SMB以及原始SOCKET套接字。
      • 目标扫描算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,然后利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。
      • 有效载荷:蠕虫的有效载荷就是附加的攻击代码,为攻击者在目标系统上执行一些特殊目的的操作。除了没有有效载荷的蠕虫之外,其他蠕虫常常携带的有效载荷有植入后面、安装分布式拒绝服务攻击代理、组建僵尸网络等等。
  • 后门与木马

    • 后门:是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道。提供对受害计算机远程控制的任何程序或受害计算机上的远程命令解释器应该被视为后门。

    • 根据访问通道的不同分类:

      • 本地权限提升和本地账号;
      • 单个命令的远程执行;
      • 远程命令解释器访问;
      • 远程控制GUI;
      • 无端口后门。
    • 木马:是特洛伊木马的简称,指一类看起来具有某个有用或善意目的,但实际上掩盖着一些隐藏恶意功能的程序。如果将后门工具伪装成良性程序才具备真正的木马特性。

  • 僵尸程序与僵尸网络

    • 僵尸网络:在网络蠕虫、特洛伊木马、后门等传统恶意代码形态的基础上发展融入而产生的一种新型攻击方式。
    • 命令和控制机构:
      • 基于IRC协议的命令和控制机构
      • 基于HTTP协议的命令和控制机构
      • 基于P2P协议的命令与控制机构。
  • Rootkit

    • 定义:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
    • 分类:用户模式Rootkit、内核模式Rookit

恶意代码分析方法

  • 代码分析:又称程序分析,是按需求使用的一定的规则、方法和工具对计算机程序进行分析,以推导出其程序结构、数据流程和程序行为的处理过程。
  • 恶意代码分析技术的方法:
    • 静态分析:在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程。主要技术手段:反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。
    • 动态分析:通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。主要技术手段:快照比对、系统动态行为监控、网络协议栈监控、沙箱、动态调试。
    • 恶意代码分析与良性代码分析的区别:

实验过程

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

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

具体操作:

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

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

(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,确定rada恶意代码的编写作者。

实验环境:winXP

在cmd中切换到恶意程序所在的目录,使用 file 命令查看 RaDa.exe 的文件类型,可以看到 RaDa.exe 是一个 Windows PE 可执行文件,并且有图形化窗口:

PE32表示这是一个32位的运行在windows操作系统上的程序,GUI表示这个程序是一个有图形界面的程序,intel 80386表示处理器架构.

再使用PEiD工具查看RaDa.exe的基本信息

“检测为”后面显示的是该文件被加壳的类型。

乱码说明文件被加了壳。所以下一步是我们要进行脱壳。(超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,可以自动脱壳,省去了手工脱壳的麻烦,并在恶意程序同目录下生成了一个脱壳以后的程序)

再用strings RaDa_unpacked.exe查看脱壳后的RaDa.exe,可以看到产生大量函数调用名以及其他有用字符串,但是并未查找到作者信息。

再打开IDA ,可以看到作者信息和发布时间,还有邮箱。

同时这个程序是由MSVB编写的。继续往下是一些函数调用,汇编代码也可以看到。

实践二:分析Crackme程序

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

Crackme1.exe: 对 crackme1.exe 进行执行,猜测参数执行,可以发现一个参数输入与其他的参数输入得到的输出明显不一样,所以可以猜测这个程序的输入是一个参数。

利用IDA Pro打开程序分析,通过Strings窗口可以查看该程序中出现的字符串,发现 I think you are missing something. 和 Pardon? What did you say? 前面见过了,猜测第一个是参数不对的返回情况,第二个是给的参数数量对了,但是具体的内容不对。还有两个不知道意思,所以继续进行分析。

基本猜测:一个是密码,一个是成功的提示语,根据内容猜测,密码为:i know the secret。

接下来看函数调用图(Function Call),C语言编写使用字符串匹配密码,可以看到字符串比较函数 strcmp 和输出函数 fprintf 和 printf 。那么显而易见,关键程序段401280。

参数的判断:

参数过多或过少的情况:

发现关键的函数strcmp,输入参数与i know the secret 比较,确认了猜测正确:

随意输入一个参数时的提示信息:

没出现过的信息,估计是成功的提示信息:

验证一下猜想(注意命令行传递参数以空格隔开,字符串用双引号引起来):

Crackme2.exe:查看明文,发现有5个有价值的信息记下来。

猜测密码是I know the secret,crackmeplease.exe则用处不明;

方法同上,关键程序段是401280,C语言编写,由strcmp 判断密码。

判断参数有多少个,第一个参数为运行的程序名:

猜测程序参数不为1时,输出I think...:

回到IDA,发现I have ...越过了第一层判断,回到第一层判断,猜测“crackmeplease.exe”是密码,验证发现猜测错误。

比较此4012D5程序段和401313程序段,发现仅401313多了一个add eax,4:

由上面分析知,I know...一定是密码,如果I know是第一个参数,那么减4是第0个参数,即程序名。

验证:把程序名改为crackmeplease.exe试验一下。

通过了第二个判断,最终出现了字符串明文中没有的信息,猜测成功。

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

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

任务:分析一个自制的恶意代码样本,以提高对恶意代码逆向工程分析技术的知识,并提高逆向工程分析的方法、工具和技术。深入分析二进制文件,并获得尽可能多的信息,包括它是如何工作的,它的目的以及具有的能力,最为重要的,请展示你获取所有信息所采取的恶意代码分析技术。

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

首先查看摘要和文件类型,执行md5sum RaDa.exe指令得到其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7
利用file RaDa.exe识别出这是32位PE文件,并且还是个GUI文件。

打开之前用过的监视工具 process explorer 和 wireshark 开启监听,并运行恶意程序RaDa.exe,分析其程序运行详细信息

通过HTTP协议请求 10.10.10.10\RaDa\RaDa_commands.html ,连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页,之后又下载和上传文件到 C:/RaDa/tmp 。将文件 RaDa.exe 复制到了 C:\RaDa\bin 目录下,可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。往下看可以发现该恶意程序对主机实行了DDos拒绝服务攻击。

再往下看可以发现该恶意程序对主机的注册表进行了读写和删除操作。

再往下看可以看到一些指令,exe 在宿主主机中执行指定的命令, get 下载, put 上传, screenshot 截屏, sleep 休眠。

使用wireshark进行分析:

可以看到受害主机向目标主机 10.10.10.10 发送了大量的数据包。

再打开 IDA Pro 进行简单分析,首先查看字符串 string ,string里把unicode选中查看字符串。这时可以查看到很多的字符串:

点击这些字符串就可以找到调用的函数。

看一下VMware tools的意思,双击选中的字符串进行定位:

发现其调用函数 sub_404FB0,这个函数中,这个字符串被拷贝到变量 dword_40C070 中,搜索到这个变量对应的函数是 sub_40AAA0 。

查看函数 sub_40AAA0 流程图,这个函数首先进行网卡配置信息的查询,然后确认 dword_40C070 对应的字符是否存在,若存在则判断vmware tools是不是在注册表里面。

可以发现这只是作者为了防止通过参数得到作者信息的手段。

答案梳理:

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

摘要为caaa6985a43225a0b3add54f44a0d4c7;

使用了UPX加壳工具进行了加壳处理,加壳方式 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo

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

这个二进制文件通过网络获取指令,连接互联网时,该恶意程序就会通过http请求连接到指定主机,进行接受攻击者指令操作,并且攻击者可以完全控制该系统,所以这应该是一个后门程序。

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

该程序启动之后将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。

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

UPX加壳

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

不具有自主传播模块,不具有传播和感染的性质,所以它不属于病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。并且该程序执行需攻击者远程发送指令,故猜测是一个后门程序。

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

Bobax——2004也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。

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

可以,作者Raul siles和David Perze,他们在2004年编写完成。

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

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

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

  • 定义:IRC是Internet Relay Chat的英文缩写,中文一般称为“互联网中继聊天" 。
  • 工作原理:您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
  • IRC是一种公开的协议,采用TCP和SSL协议。一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。
  • 连接方式:IRC用户通过客户端软件和服务器相连。大多数的IRC服务器不需要客户注册登录,但在连接前必须设定好昵称(nickname)。IRC是一个分布式的客户端/服务器结构。通过连接到一个IRC服务器,我们可以访问这个服务器以及它所连接的其他服务器上的频道。IRC频道存在于一个IRC服务器上。一个频道类似于一个聊天室,频道名称必须以#符号开始,例如#irchelp。IRC机器人是一些运行在后台或者服务器上的程序,通过登陆某一个频道,分析接受到的内容并做出相应的动作。
  • 当IRC客户端申请加入一个IRC网络时,发送nickname。
  • 一般使用6667(6660~6669)端口。

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

  • 定义:IRC语境下的僵尸网络是指IRC机器人连接成的IRC网络;采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络 。
  • 用处:通常用于DDos攻击、分布式扫描、暴力密码破解等。

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

由于IRC协议使用TCP连接,要找出与蜜罐主机通讯的IRC主机,可以利用建立TCP连接的三次握手过程进行分析。

只需要找出蜜罐主机向哪些机器的IRC端口发送过SYN包,即可找出蜜罐主机试图通讯的IRC服务器。

IRC协议最常用的端口为6667,在WireShark中对日志文件进行分析,可以看到除了6667外其他端口上没有数据包,因此这里所有的IRC数据都使用的是6667端口。利用如下命令过滤出蜜罐主机向6667端口发送的SYN包ip.src == 172.16.134.191 and tcp.dstport == 6667 and tcp.flags.syn == 1

可以看出过滤得到21个tcp包,利用此表达式进行IP Address统计,得到如下结果:

从上述结果中可以看到,蜜罐主机试图与5台机器进行联系,其中向63.241.174.144217.199.175.10209.196.44.172这三台机器发各送了一个SYN包,向 209.126.161.2966.33.65.58这两台机器各发送了9个SYN包。

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

首先尝试利用命令ip.src ==209.196.44.172 || ip.dst ==209.196.44.172进行筛选,结果只有蜜罐主机:

使用tcpflow分流(筛选指定host与端口),在命令行输入tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",可以看到产生了三个文件: 209.196.044.172.06667-172.016.134.191.01152172.016.134.191.01152-209.196.044.172.06667report.xml

209.196.044.172.06667-172.016.134.191.01152这个文件进行筛选:

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
这个指令是管道连接的,第一条cat命令,连接209.输出文件,第二条grep搜索获取昵称输出行,第三条sed去除前缀,最后的g是全局的意思。其中tr将空格转换为换行。tr -d删除\r.grep -v就是NOT指令,去除空行。sort -u排序并去除重复。wc -l输出行数。


最终结果是5。

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

首先假定进入蜜罐的流量都是攻击。使用以下命令查找端口并输出到1.txt 中:tcpdump -n -nn -r botnet_pcap_file.dat '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,其中tcpdump -nn指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示;grep -v 排除指定字符串;cut -d '.' -f 10截取以'.'为分隔符的第 10 列; uniq 命令用于检查及删除文本文件中重复出现的行列; wc -l 用于统计文件的行数。

可以看到共有148个端口被攻击了。

接着使用如下指令找出所有的可能连接的主机的IP地址。这个指令的作用就是将连接IP地址输出2.txt中: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 > 2.txt;wc -l 2.txt 其中 awk -F 就是指定分隔符,可指定一个或多个, print 后面做字符串的拼接。

可以看到一共有165个主机被用于蜜罐入侵,

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

使用tcpdump命令找到攻击者扫描且蜜罐有响应的端口:

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端口

得到的TCP端口: 135(rpc)、 139(netbios-ssn)、 25(smtp)、 445(smb)、 4899(radmin)、 80(http) ;

udp端口: 137(netbios-ns) 。

逐个分析所用的端口:

  • udp 137号端口,在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口肯定就是 NetBIOS 查点了。
  • tcp 135号端口和25号端口,我们看到只是进行了连接,没有数据传输,所以这攻击者可能是对这两个端口进行了 connect 扫描。

  • TCP 80 端口,首先筛选 tcp.dstport==80 && ip.dst == 172.16.134.191 ,连接最多的就是 24.197.194.106 这个IP,他的行为就是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。

接下来是210.22.204.101访问的80端口,攻击者是想通过缓冲区溢出攻击来获得一个命令行

下一个访问80端口的是218.25.147.83,这里会看到 c:\notworm ,说明这是一个蠕虫攻击。上网搜索发现是红色代码(red code)病毒

其余的 ip 地址均为正常访问蜜罐。

通过tcp.srcport==80 && ip.src== 172.16.134.191&&http从蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的回应均为一个 iis 服务器的默认页面,所以80端口的这些攻击均失败。

  • TCP 139号端口。虽然有很多主机连接到这个端口的,但是大部分都是连接,很多空会话,同样也没有成功,所以应该是SMB查点。

  • TCP 445端口,这个端口连接非常多,可以看到许多samr,srvsvc字符串,查询字符串后很容易发现一个PSEXESVC.EXE字符串,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。

找出口流量,发现每个IP地址连入的连接都有响应的回应,并且返回信息中含有\PIPE\ntsvcs,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限,因此这个攻击成功的。

  • TCP 4899端口。只有IP地址210.22.204.101 访问过。可以查到 4899 端口是一个远程控制软件 radmin服务端监听端口,此软件不是木马,应该是上面攻击成功后上传的这个软件,方便控制。

学习中遇到的问题及解决

问题一:kali不能联网。

解决:老问题用老方法。

问题二:winXP上不了网。

解决:额。。开个防火墙就行了,不知道为什么。。

学习感想和体会

这次实验难度挺大。。

posted @ 2020-04-30 10:08  happycarrot  阅读(283)  评论(0编辑  收藏  举报