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

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

前言

问题 解答
这个作业属于哪个课程 《网络攻防实践》
这个作业的要求在哪里 <作业要求>
我在这个课程的目标是 熟练掌握网络攻防知识,学习第九章 恶意代码基础知识和分析方法
这个作业在哪个具体方面帮助我实现目标 学习Linux操作命令以及虚拟机的应用;学习网络攻防知识,为以后研究打下基础
作业正文 如下
其他参考文献 见正文最后

1.实践内容

1.1 恶意代码基础知识

  • 恶意代码定义:指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。
  • 分类:计算机病毒、蠕虫、恶意移动代码、后门、特洛伊木马、僵尸网络、内核套件。

  • 计算机病毒
    • 计算机病毒是一种能够自我复制的代码,通过将自身嵌入其他程序进行感染,而感染过程通常需要人工干预才能完成 。
    • 特性:感染性(最本质的特性 )、潜伏性 、可触发性 、破坏性 、衍生性
    • 感染及引导机制:感染可执行文件(前缀感染机制、后缀感染机制、中间插入感染机制) 、感染引导扇区 、感染数据文件-宏指令
    • 传播方式:移动存储( U盘);电子邮件及其下载(邮件病毒);文件共享(SMB共享服务、NFS、 P2P)。

注:计算机病毒是需要人类帮助的,而蠕虫是主动跨越网络传播。

  • 网络蠕虫

    • 网络蠕虫是一种通过网络自主传播、自我复制的独立恶意代码。
    • 特性:主动传播性,通常无须人为干预就能传播。
    • 传播方式:主动攻击网络服务漏洞 、通过网络共享目录 、通过邮件传播
    • 组成结构:蠕虫的“弹头” (渗透攻击模块);传播引擎 ( FTP/TFTP/HTTP/SMB/直接传送/单包);目标选择算法+扫描引擎(扫描策略);有效载荷(攻击负荷)
  • 后门

    • 后门是允许攻击者绕过系统常规安全控制机制的程序,按照攻击者自己的意图提供通道。
    • 类型:本地权限提升和本地帐号;单个命令的远程执行;远程命令行解释器访问-NetCat;远程控制GUI-VNC、BO、冰河、灰鸽子;无端口后门(ICMP后门、基于Sniffer非混杂模式的后门、基于Sniffer混杂模式的后门等)。
  • 木马

    • 木马是看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。
    • 伪装技术:命名伪装、使用软件包装工具、攻击软件发布站点、代码下毒。
  • 僵尸程序与僵尸网络

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

    • 僵尸程序是攻击者用于一对多控制目标主机的恶意代码。

    • 功能:主体功能包括命令与控制模块、传播模块;辅助功能包含信息窃取模块、主机控制模块、下载更新模块和防分析检测模块。

    • 僵尸网络的工作机制:主要包含以下7步,渗透攻击、加入控制服务器、动态影射至IRC服务器、加入IRC信道、监听命令、接收命令、执行攻击。

    • 僵尸网络的命令和控制机构:命令和控制机构主要分为三大类:基于IRC协议的命令和控制机构、基于HTTP协议的命令和控制机构、基于P2P协议的命令与控制机构。

  • 小结:计算机病毒、蠕虫、特洛伊木马、后门和僵尸程序都包含攻击者添加至系统中的新的代码程序,都不会替换或修改受害系统的组件。而下面介绍的Rookit是技术更加高超的恶意代码形态。

  • Rootkit

    • 隐藏性的恶意代码形态,通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中。
    • 分类: 用户模式、内核模式。两类Rootkit和普通的应用程序级木马后门之间的位置对比图如下:

1.2恶意代码分析方法

  • 与分析良性代码相比,分析恶意代码的主要差别在于:
    • 不能提前知道恶意代码的目的是什么
    • 恶意代码具有恶意的攻击目的,故代码的分析需要一个受控、可恢复的分析环境
    • 恶意代码在绝大多数时候不会具有源代码,故分析难度高很多
    • 恶意代码会引入大量的对抗分析技术
  • 恶意代码分析技术主要包括:静态分析和动态分析
  • 静态分析技术:
    • 恶意代码静态分析技术列表:

  • 反病毒扫描:通过现有的已知的病毒,来分析判断病毒的种类、家族和变种信息。

  • 文件格式识别:了解待分析样本的文件格式,能够获得恶意软件执行的平台等信息。

  • 字符串提取:获取恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL信息、E-mail信息和包含库文件和函数调用。

  • 二进制结构分析:获取程序的头部摘要信息、目标文件运行架构、重定位入口、符号表入口、不同的代码段、编译代码时使用的程序等。

  • 反汇编与反编译:将二进制程序,转化成汇编代码和高级语言代码。

  • 代码结构与逻辑分析:获取函数调用关系图和程序控制流图。(CFG图)

  • 加壳识别与代码脱壳:对代码进行加密、多样性、多态和变形的机制。

  • 动态分析技术:

    • 基于快照对比的方法和工具
    • 系统动态行为监控方法
    • 网络协议栈监控方法
    • 沙箱技术
    • 动态调试技术

2.实践过程

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

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

  • 实验环境:WinXPattack,将下载的文件复制到winxpattack的桌面
  • 在cdm中切换到恶意程序所在目录--桌面,使用 file 命令查看 RaDa.exe 的文件类型

可以看到RaDa.exe是一个Windows PE可执行文件,并且有图形化窗口。其中PE32表示这是一个32位的运行在windows操作系统上的程序,GUI表示这个程序是一个有图形界面的程序,intel 80386表示处理器架构。

  • 使用 PEiD 工具(可在winXPattack的开始点击查找到),查看 RaDa.exe 的基本信息

如图可以看到文件的入口点、偏移、文件类型、EP段、汇编程序以及加壳类型(UPX壳)为:UPX 0.89.6-1.02/1.05-2.90->Markus &Laszlo

  • 使用超级巡警工具对文件进行脱壳,该工具有这个壳的样本库,故可以实现自动脱壳。

  • 使用strings命令,strings RaDa.exestrings RaDa_unpacked.exe分别查看脱壳前、后的RaDa.exe中可打印的字符串。若查看脱壳之前的,则是一些乱码;查看脱壳rada.exe后的文件RaDa.unpacked.exe可以发现有大量的函数调用名(如下图)。

在脱壳后的文件中并没有发现关于作者的任何信息

  • 使用winxpattack里的process explorer软件,查看程序属性,找到copyright(版权)发现作者名字Raul siles&David Perze,时间2004年。

2.2 实践二 分析Crackme程序

题目:给定的两个 crackme,通过使用 IDA pro 工具或者其他调试工具,猜测出其口令,通过其测试。

分析crackme1.exe

  • 使用file命令查看crackme1.exe的文件类型,可以看出其是32位Windows下的PE文件,没有图形界面,是命令行文件。

  • 在cmd中直接运行该程序查看输出,先猜测该程序带有一个参数。

  • 使用IDA pro工具打开crackme1.exe,选择文件类型为PE。

  • 首先直接查看程序中的明文字符串,发现了两个测试程序时没有出现过的字符串“I know the secret”、“You know how to speak to programs,Mr Reverse Engineer”。猜测前者为我们需要的口令,后者为口令成功输入的反馈。

  • 验证猜想,正确

  • 在IDA pro工具页面的菜单处:点击view——>graphs——>function calls,查看函数调用图(Function Call)

可以得出结论:程序是用 C 语言写的,可以发现字符串比较函数 strcmp 和输出函数 fprintf 和 printf ,估计是使用 strcmp 函数来比较口令。那么关键部分就在 sub_401280 函数中。

  • 打开sub_401280函数的流程图(方法:首先选中“IDA View-A ”窗口中的00401280,再通过view——>graphs——>flow chart)

cmp [ebo+arg_0],2为判断程序是否有两个参数。如在命令行输入 crackme1.exe 1 ,那么参数对应的值为 argc=2,argv={”crackme1.exe”,”1”} 。如果有两个参数,那么进行下一步判断,程序用 I know the secret 对应的字符串和用户输入的口令相比较,通过比较的结果反馈口令是否正确。

分析crackme2.exe

  • 对crackme2.exe进行分析,与上述分析步骤crackme1.exe差不多。

  • file crackme2.exe

  • 直接使用IDA pro工具来打开crackme2.exe,可以看到明文字符串如下:

  • 再来看函数调用图,发现核心函数还是sub_401280。

  • 主要查看sub_401280

  • cmp [ebp+arg_0],2判断程序参数是否为两个;通过参数个数的判断后,接着用strcmp函数对argc里面的第一个字符串,即程序名,和 crackmeplease.exe 进行判断:

  • 通过程序名判断后,用户输入的口令与 I know the secret 判断。

  • 通过口令判断后,通过一定规则输出通过测试的信息。具体是 unk_403080 中的字符串分别与0x42h进行异或运算。

  • 进行测试:

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

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

  • 首先使用MD5对该恶意程序进行摘要信息分析,md5摘要值为caaa6985a43225a0b3add54f44a0d4c7。
  • 打开Process Explorer 软件对脱壳后的文件:RaDa_unpacked.exe进行监测,运行RaDa_unpacked.exe,断开主机网络。程序运行详细如下:

通过HTTP协议请求 10.10.10.10\RaDa\RaDa_commands.html,连接到目标为10.10.10.10的主机下的一个名为RaDa_commands的网页,之后又下载和上传文件到 C:/RaDa/tmp 。

将文件 RaDa.exe 复制到了 C:\RaDa\bin 目录下,(REG-SZ:在注册表中,代表一个简单的文本字符串,最常见的一种数据类型)可以看出该恶意代码将其自我复制到主机系统盘,并激活了自启动,还试图从一个HTML页面获取并解析命令,故猜测这应该是一个后门程序。

再往下,starting DDos smurf remote attack,该恶意程序可能对主机实行了DDos拒绝服务攻击

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

图中可以看到一些指令:exe在宿主主机中执行指定的命令,get下载,put上传,screenshot截屏,sleep停止活动一段时间。

  • wireshark监听如下图:

可以看到受害主机(192.168.200.2)向目标主机(10.10.10.10)发送了大量数据包,但是追踪其tcp数据流并未发现任何相关信息

  • 回到IDA工具查看脱壳后的文件,(进入 Strings 对话框,在Type 右键点击Setup,设置类型为 Unicode。),也可以找到作者信息

  • 找到一个 IP 地址,双击定位:猜测程序被执行后访问了这个地址。

  • 根据上图ip地址往下,发现得到RaDa_commands.html。寻找这个字符串对应的函数sub_404FB0,(双击sub_404FB0)进入这个函数,看黄色部分的汇编代码,得知是被拷贝到dword_40C030这个变量中。

  • 由上图找到dword_40C030变量对应的函数sub_4052C0 ,打开其Call Graph查看(方法与实践二里的相同,在菜单view处)。这里我们看到判断了三个网段分别为192.168.、172.16.、10.,(三个私有网段,确保服务器在私有网段中,然后到服务器去取命令文件)

  • 回答问题
    (1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
    • MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7
    • 是一个 Windows PE 可执行文件
    • 使用了UPX加壳工具进行了加壳处理
      (2)找出并解释这个二进制文件的目的。
    • 通过上面的分析可知,连接互联网时,该恶意程序就会通过http请求连接到指定主机,进行接受攻击者指令操作,并且攻击者可以完全控制该系统,所以这应该是一个后门程序。
      (3)识别并说明这个二进制文件所具有的不同特性。
    • 该程序启动之后将自己复制到c盘之中,并且每过一段时间就会尝试与10.10.10.10建立tcp连接。
      (4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
    • 使用了UPX加壳工具进行了加壳处理
      (5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
    • 猜测是后门程序,因为该恶意代码不具有自主传播模块,故不属于病毒和蠕虫,也并未进行伪装,故不是木马,并且该程序执行需攻击者远程发送指令。
      (6)给出过去已有的具有相似功能的其他工具。
    • Bobax——2004也是使用HTTP协议从指定的服务器下载命令文件,然后解析并执行其中的指令。
      (7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
    • 可以,通过Process Explorer 软件对脱壳后的文件:RaDa_unpacked.exe进行监测,在strings窗口发现是Raul siles和David Perze于2004年编写的。(见实践一最后)

实践四 取证分析

题目:一个未设置管理员密码的Windows 2000蜜罐主机,被攻击后加入了一个僵尸网络,在蜜罐主机运营期间,共发现了15164个不同主机加入了这个僵尸网络。用Snort工具收集的该蜜罐主机5天的网络流日志,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和一些其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。分析这个日志文件并回答以下给出的问题。

分析过程:

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

  • IRC是Internet Relay Chat的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理:您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。
  • 特点是:速度非常快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。
    -IRC是一种公开的协议,采用TCP和SSL协议。一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。
    -IRC用户通过客户端软件和服务器相连。IRC是一个分布式的客户端/服务器结构。通过连接到一个IRC服务器,我们可以访问这个服务器以及它所连接的其他服务器上的频道。IRC频道存在于一个IRC服务器上。一个频道类似于一个聊天室,频道名称必须以#符号开始,例如#irchelp。IRC机器人是一些运行在后台或者服务器上的程序,通过登陆某一个频道,分析接受到的内容并做出相应的动作。
  • IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口。SSL加密传输在6697端口。

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

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

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

IRC服务器通常在6667端口监听,故只需知道蜜罐主机发出的尝试连接6667端口的数据包即可,连接时使用的是TCP三次握手。使用“ip.src == 172.16.134.191 and tcp.dstport == 6667” 过滤规则进行查找,发现蜜罐主机与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为服务器的僵尸网络?

  • 使用kali环境,sudo apt install tcpflow
  • 首先使用tcpflow分流(筛选指定host与端口),命令tcpflow -r 9.dat "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文件(直接点击即可),可以看到如下图的内容,包括上述双方的ip地址,端口,mac地址,通信时间等等。

  • 因为我们要找的是访问 209.196.44.172的主机,故着重看一下第一个文件。在当前主机进入到IRC的频道之后,频道会将当前频道中所有的主机的信息都发送过来,我们可以从其中的数据包中计算当前频道共有多少主机。这个计算分为两部分。首先我们计算在当前主机加入IRC时刻,IRC中主机的个数。然后我们在计算截至结束嗅探的时候的不断有主机加入和退出IRC频道,我们在补充上这个过程中的主机个数。代码如下,其中的test.txt文件是复制的<209.196.044.172.06667-172.016.134.191.01152>文件,(此处实践参照同学,但出了些错误)

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

  • 因为蜜罐的特殊性,只要是进入蜜罐的流量都应该被认为是攻击。所以首先明确被攻击的端口。使用指令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查找端口并输出到1.txt中,如图所示,查找到148个被攻击的端口。其中cut -d是指定字段的分隔符,uniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。

  • 接着使用如下指令找出所有的可能连接的主机的 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个主机被用于蜜罐入侵

产生了两个文件1.txt与2.txt在桌面

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

  • 攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii指令先查一下网络流分布情况。我们发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口。

  • 利用下面的指令筛选出蜜罐主机相应的 TCP 端口。输出可以看到 TCP 响应端口为135(rpc),139(netbios-ssn),25(smtp)445(smb),4899(radmin),80(http)。

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
(0x12代表有回复)

  • 将协议部分改为 udp ,同样可以筛选出 udp 端口137(netbios-ns)
    tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

  • 接下来逐个分析上面的端口,首先是udp 137号端口,这个是在局域网中提供计算机的IP地址查询服务,处于自动开放状态,所以访问这个端口是 NetBIOS 查点。

  • tcp 135号端口和25号端口,我们看到只是进行了连接,但是是没有数据的交互的(len=0),所以这攻击者可能是对这两个端口进行了connect扫描。

  • 然后看TCP 80端口,首先利用Wireshark进行筛选tcp.dstport==80 && ip.dst == 172.16.134.191,发现连接最多的就是24.197.194.106这个IP地址,他的行为就是不停用脚本攻击IIS服务器的漏洞,从而获取系统权限.因为用的脚本,所以才会有这么多记录。

  • 然后是210.22.204.101访问的80端口,可以看到超多的C,可能攻击者是想通过缓冲区溢出攻击来获得一个命令行。

  • 最后一个访问80端口的是218.25.147.83,看到这么多N以为是缓冲区溢出攻击,但是继续往下看会看到c:\notworm,通过百度可以发现这是一个红色代码蠕虫攻击。

  • 我们通过蜜罐主机80端口向外的流量进行分析,发现蜜罐主机做的几次回应均为一个iis服务器的默认页面http/1.1,所以80端口的这些攻击均失败。

  • 接下来是TCP 139号端口。虽然有很多连接到这个端口的,但是基本都是一样的,大部分都是连接,然后很多空会话,同样这个也没有成功,这个应该是个SMB查点。

  • 下面分析445端口。查询字符串后可以发现一个PSEXESVC.EXE字符串,同时你在Wireshark中也能找到,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。通过找出口流量,发现每个IP地址连入的连接都有响应的回应,并且返回信息中含有\PIPE\ntsvcs,通过搜索可知,这是一个远程调用,所以攻击者肯定是获得了权限,因此这个攻击成功的。


  • 最后还剩一个TCP 4899端口。这个端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上传的这个软件方便控制。

3. 学习中遇到的问题

  • 问题1:kali没网,kali tcpflow安装失败,这些问题还算小问题好解决
  • 问题1的解决:换成桥接模式;估计自己的apt-get install tcpflow有问题,换了一个安装指令为:sudo apt install tcpflow安装成功,就是有点慢。
  • 问题2:实践四的问题(4)最后有点问题
  • 问题2的解决:还未解决,不太会搞代码

4. 实践总结

这周实践内容有点多,有难度,有点懵,还需学习。

参考资料

  • 《网络攻防技术与实践》(诸葛建伟)
  • 老师给的文件中的实践演示
posted on 2020-04-30 08:35  20199116xjq  阅读(374)  评论(0编辑  收藏  举报