20199314 2019-2020-2 《网络攻防实践》第9周作业.md

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

恶意代码安全攻防

1. 恶意代码基础知识

1.1 恶意代码定义与分类

恶意代码定义: 恶意代码(malicious code)又称为恶意软件(malicious software,Malware),是能够在计算机系统中进行非授权操作的代码。

恶意代码的分类:

  • 计算机病毒:
    一种能够自我复制的代码,通常将自己嵌入到其他的程序之中进行感染(需要人为的干预)。

  • 蠕虫:
    自我复制机制与计算机病毒类似,但是它可以自己运行,不需要嵌入到其他的宿主程序之中。

  • 恶意移动代码:
    属于移动代码的范畴:本地执行的轻量级程序,不需要或很少需要人工干预。

  • 后门:
    一类能够绕开正常的安全机制,为攻击者提供便捷的访问途径的一类恶意代码。

  • 特洛伊木马:
    一种将自己伪装成有用的,但隐藏其恶意目标的恶意代码。

  • 僵尸网络:
    攻击者出于恶意目的,传播僵尸程序来控制多台主机,并利用一对多的命令和控制信道组成的网络。

  • 内核套件:
    在用户态通过替换或修改系统关键可执行文件,或者在直接内核态来控制操做系统的内核,来获得和保持root权限的恶意代码。分为用户态Rootkit和内核态Rootkit。

恶意代码特性

嵌入其他程序进行感染,而感染过程通常需要人 工干预才能完成 。

1.2.1 计算机病毒基本特性

  • 感染性:
    是指地算计病毒被执行之后,就会自己把自己复制到其他的满足条件的程序之中。像传染一样。一般情况下传染的速度很快。这是计算机病毒最重要的特点。

  • 潜伏性:
    一般情况下计算机病毒成功感染之后,不会立刻采取其他的措施。在时机到来之前,会先等着。传染过程也难以被发现。

  • 可触发性:
    虽然计算机病毒会先等着,但是不会一直等下去,以满足条件就会开始感染或者破坏。这个条件可能是时间,在系统时间到某个时刻时候就开始行动;也可能是病毒自带的计数器,像定时炸弹一样;也可能是一种文件的出现,观察到某种类型的文件之后就开始行动。

  • 破坏性:
    计算机病毒一般都带着一些恶意的目的。如果编写者是由于其他的目的,比如炫耀自己,这种情况下不会对计算机造成太大的破坏。但是有的病毒就是为了破坏才编写的。

  • 衍生性:
    当某个人对某个计算机病毒很了解,或者这个病毒就是这个人写的,这时候这个人作为使用者就可以根据自己的目的来对这个病毒进行修改,这样就会衍生出其他的病毒。

1.2.2 计算机病毒的感染及引导机制

计算机病毒一般情况下会把自己寄宿在可执行文件、引导扇区和支持宏指令文件三种。

  • 可执行文件
    可执行文件是计算机病毒最普遍的感染目标。可执行文件作为宿主程序,程序激活依附在上面的病毒取得控制权。有前缀感染机制、后缀感染机制、插入感染机制。

  • 引导扇区:
    通过BIOS定位磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。

  • 支持宏指令数据文件
    将自身以宏指令的方式复制到数据文件中,当被感染的数据文件被应用程序打开时,将自动执行宏病毒体,完成病毒的引导。

计算机病毒的传播机制:主要包括移动存储、电子邮件及下载、共享目录等。

1.3 网络蠕虫

网络蠕虫定义: 是一种通过网络自主传播的恶意代码.

1.3.1 网络蠕虫的基本特性

网络蠕虫定义特性在于网络间自主传播。

1.3.2 网络蠕虫的组成结构

  • 弹头(渗透攻击):
    利用目标尽可能多的安全漏洞侵入目标系统。获取目标系统访问权:包括缓冲区溢出攻击、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置。

  • 传播引擎:
    传送自身目标复制样本到目标系统上。通过在目标系统上执行传播引擎指令方式有FTP/TFTP/HTTP/SMB/SOCKET等完成蠕虫样本的传播。

  • 目标选择算法和扫描引擎:
    一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。不同目标选择算法: 包括电子邮件地址、主机列表、被信任的系统、网络邻居主机、域名服务、通过特定规则选择任意ip目标地址。

  • 有效载荷:
    附加的攻击代码,为操作者在目标系统上执行一些特殊目地的操作: 植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等。

1.4 后门与木马

1.4.1 后门

后门是允许攻击者绕过系统常规安全控制机制的程序,能够按照攻击者自己的意图提供访问通道。包括以下:

  • 本地权限提升和本地帐号:
    让攻击者可以将其权限等级提升root或者新建一个本地账户,让攻击者有权限访问任意系统或文件。

  • 远程执行单个命令:
    让攻击者可以通过此类命令单独执行一个命令,得到结果。

  • 远程命令行解释器访问:
    远程shell,让攻击者通过网络快速直接地来远程在shell上直接输入命令,获得运行结果,比如netcat。

  • 远程控制GUI:
    用图形化的方式来远程访问目标,相较远程shell有更加多样化的功能。

    • 无端口后门
      无需打开UDP或者TCP端口的无端口后门:如ICMP后门、基于Sniffer非混杂模式的后门、基于Sniffer混杂模式的后门.

1.4.2 特洛伊木马

木马作为特洛伊木马的简称,是指一类看起来具有某个有用或善意目的,但实际掩盖着一些隐藏恶意功能的程序。特洛伊木马程序可以用于以下目的:

  • 欺骗用户或管理员安装木马程序。

  • 隐藏在正常程序中,假装自己是系统的一部分,通常与后门工具结合。

1.5 僵尸程序与僵尸网络

僵尸网络(botnet)是在网络蠕虫、特洛伊木马、 后门工具等传统恶意代码形态的基础上发展融合而产生的一种新型攻击方式。与蠕虫区别在于其是可控的。

1.5.1 僵尸网络功能结构

僵尸程序的功能组成结构可以分为主体功能模块和辅助功能模块,

  • 主体功能模块包括实现僵尸网络定义特性的命令(核心)控制模块和实现网络传播特性的传播模块

  • 而包含辅助功能模块(由信息窃取模块、主机控制模块、下载更新模块和防分析检测模块构成)的僵尸程序则具有更强大的攻击功能和更好的生存能力。

发送的命令按照僵尸程序对应实现的功能模块可以分为僵尸网络控制命令、扩散传播命令、信息窃取命令、主机控制命令和下载与更新命令。

  • 基于HTTP协议的命令与控制机制
    HTTP协议则是近年来除IRC协议外的另一种流行的僵尸网络命令与控制协议,目前已知的采用HTTP协议构建命令与控制机制的僵尸程序有Bobax、Rustock、Clickbot等,

  • 基千P2P协议的命令与控制机制
    基于IRC协议和HTTP协议的命令与控制机制均具有集中控制点,这使得这种基于客户端-服务器架构的僵尸网络容易被跟踪、检测和反制,一旦防御者获得僵尸程序,他们就能很容易地发现僵尸网络控制器的位置,再使用监测和跟踪手段掌握僵尸网络的全局信息,通过关闭这些集中的伦尸网络控制器也能够较为容易地消除僵尸网络所带来的威胁。因此采用P2P僵尸程序的控制协议设计。

1.6 Rootkit

Rootkit,它能够通过控制目标计算机操作系统的关键组件,来为攻击者提供强有力的手段,用来获取访问并隐藏在系统中。

Rootkit的定义特性: 具备替换或修改现有操作系统软件进行隐藏的特性。

Rootkit可以运行在两个不同的层次上,即用户模式和内核模式。 用户模式Rootkit修改的是操作系统用户态中用户和管理员所使用的一些内建程序和库文件,而内核模式Rootkit则直接攻击操作系统最核心的内核,修改内核从而隐藏目身。

  • 用户模式Rootkit
    恶意修改操作系统在用户模式下的程序或者代码,达到隐藏的目的(木马化操作系统用户模式应用程序)。主要分为五种不同类型:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器后门shell监听器、安装脚本。

  • 内核模式Rootkit:
    恶意修改操作系统内核,从而达到更深的隐藏和更强的隐蔽性(对内核组件的恶意修改和木马化)。主要有如下方式:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。

2 恶意代码分析方法

2.1 恶意代码静态分析技术

  • 恶意代码分析技术主要包括静态分析和动态分析两大类。

  • 静态代码分析是指不执行代码的情况下进行分析,动态代码分析则是在受控的环境体重执行恶意代码,利用各种方法来获取想要的信息。

2.2 恶意代码静态分析技术

  • 反病毒软件扫描:
    反病毒软件进行扫描的方法充分利用了反病毒业界对恶意代码样本的积累性专业知识、 经验和分 析实践, 能够为你自己的分析提供一些有用的信息帮助。

  • 文件格式识别:
    文件格式识别能够让我们快速地了解待分析样本的文件格式。

  • 字符串提取分析:
    利用一些专用的字符串提取工具, 我们可以彻底地搜查目标程序, 并提取出程序中3个或更多的连续可打印字符所组成的全部字符串

  • 二进制结构分析:
    事实上, 我们先前介绍的字符串提取工具 strings 命令只是 binutils家族的一员, 除此之外,binutils还有两个我们经常会使用的命令, 即nm 和objdump。

  • 反汇编与反编译:反汇编与反编译是对二进制程序编译链接的逆过程, 反汇编是把二进制程序的目标代码从二进制机器指令码转换为汇编代码的处理过程, 而反编译则更进一步, 期望将汇 编代码再进一步还原成高级编程语言形式的源代码。

  • 代码结构与逻辑分析:在代码结构与逻辑分析过程中, 一些功能强大的逆向分析工具, 如 IDA Pro, 为分析师提供了一些辅助分析功能, 从而帮助分析师更好地理解恶意代码的程序结构与功能逻辑。

  • 加壳识别与代码脱壳:对于恶意代码的加壳识别,可以使用如PE心、pe-scan 、 PE Sniffer、fileinfo 、 Exeinfo PE 、 DiE、 FastScanner 、 FFl等文件格式识别工具, 这些工具除了能够识别文件格式类型之外,还能给出文件使用的加壳软件、采用的编译器等额外信息。在识别出恶惹代码所使用的加壳工具之后 , 下一步就是进行脱壳, 恢复出恶意代码加壳之前的原有形态,对于常见的加壳工具如UPX、 PEPack、 ASPack等, 拥有相应的脱壳工具。

2.3 恶意代码动态分析技术

  • 基于快照比对的方法和工具
    在恶意代码运行之前对系统的资源做一个快照。然后再恶意代码运行之后的一段时间再做一次快照,通过对比可以对恶意代码的影响进行分析。

  • 系统动态行为监控
    这是动态分析中最核心的部分。在代码运行的时候对恶意代码对文件系统、运行进程列表等的动作进行实时的监控。监控软件包括以下几类:

文件行为监控软件: 大多数恶意代码都会读写文件,filemon软件记录了各种文件的所有操作与操作所发生的时间,可以让我们了解恶意代码对那些文件进行了什么操作。

进程行为监控软件: 这类软件用于监控恶意代码对进程的激活与修改。常用的软件有process explorer、top、lsof等。

注册表监控软件: Windows平台上的恶意代码还会修改和利用注册表。regmon软件能够实时地显示每个和注册表有关的行为。

本地网络栈行为监控软件: 很多恶意代码都有着网络行为,所以也需要对本地网络栈进行监控。类unix平台的lsof命令可以帮助我们查看到unix系统的开放的端口。win平台可以用TCPView或者Fport来查看是否新的端口。

  • 网络协议栈监控
    除了从运行平台来监控自己之外,更加有效的方法是从本地网络上的另一台主机来监控。

    • 沙箱技术
      沙盒技术用于安全运行程序的安全环境,经常被用于执行和分析非可信的代码。
  • 动态调试技术
    动态调试是在程序运行时刻对它的执行过程进行调试 (debugging) 的技术过程

3. 实践1--恶意代码文件类型识别、脱壳与字符串提取

实验环境: winxp虚拟机

1.从云班课上下载rada软件并移植到虚拟机上。cd到rada目录。

2.首先查看文件类型,直接用file命令就可以file rada.exe。可以看出来是一个PE文件(PE文件的全称是Portable Executable,意为可移植的可执行的文件),还有图形界面(GUI),运行平台是32位的windows.

3.接着使用 PEiD 工具查看文件加壳类型,PEiD是用来查看Windows PE文件基本信息的工具。可以看到文件的入口点、偏移、EP段等信息和加壳的类型(UPX)。


4.使用strings命令查看脱壳前的rada.exe中可打印的字符串,可以发现有大量的是一些乱码。

5.使用自动化脱壳工具,超级巡警工具对文件进行脱壳,生成了脱壳软件。

6.使用strings命令查看脱壳后的rada.exe中可打印的字符串,脱壳成功可以发现有大量的调用函数。

7.利用IDA进行脱壳软件的字符提取,用IDA打开脱壳之后的文件(未找到作者信息)。

8.运行rada程序,使用软件process explorer进行监控,查看程序属性,在find里面输入copyright查找到编写者名字Raul siles&David Perze,出版于2004年。

4. 实践2--分析Crackme程序

1.首先查看文件类型,直接用file命令就可以,file crackme1.exe查看文件类型。

2.首先运行crackme1.exe。猜测参数执行,当一个参数输入与其他的参数输入得到的输出明显不一样(多个参数:i think you are missing something,一个参数:paedon? what did you say?)所以猜测这个程序的输入不止有一个参数。

3.然后使用IDA打开程序,关注字符串窗口。

4.直接查看程序中的明文字符串strings,前两个为已经执行过的命令,后两者为没有出现过的字符串I know the secret、You know how to speak to programs,Mr Reverse Engineer。猜测前者为我们需要的口令,后者为口令成功输入的反馈。

5.查看整个程序的 call flow:

6.注意到c语言匹配和打印函数,寻找上层函数sub_401280的字符串。可以发现输入对应命令后的输出。

7.注意"I know the secret"这个字符串,输入程序。成功。

8.分析crackme2,程序的过程如上。查看string一共有五条输出命令。String 界面,明文字符串“I know the secret”和“crackmeplease.exe”

9.查看Function call,主要查看 sub_401280

10.注意到 sub_401280流程图中操作接着用strcmp 函数对 argc 里面的第一个字符串,即程序名,和“crackmeplease.exe”进行判断(直接输入crackmeplease.exe命令失败所以不是这个口令)。

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

12.,注意到.exe的后缀可能需要先对比程序程序名,再对比字符串I know the secret.然后就将程序复制一个改名,再输入参数,成功。

  1. we have a little secret"Chocolate"应该是string在中的乱码信息,不是明文。

5. 实践3--样本分析实践

1.使用md5 sum命令查看摘要信息, md5摘要值为caaa6985a43225a0b3add54f44a0d4c7 。

2.使用process explorer工具动态分析如图所示,一共顺序进行了以下四步,

  • 尝试与10.10.10.10建立tcp连接
  • 将文件RaDa.exe复制到了C:\RaDa\bin目录下
  • 将自己添加到了自动启动之中(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run即为控制计算机启动项的注册表信息)
  • 开启远程ddos攻击)smurf攻击)

3.通过以上猜测目的这个软件应该是一个后门程序,不同特性其建立网页连接是为了远程获取指令或者下载什么东西?

4.使用IDA打开脱壳后的程序,查看字符串,并修改修改字符类型为unicode。

6.查看以上四部操作,找到其对应的函数sub_404FB0。

7.在sub_404FB0这个函数中,这个字符串被拷贝到变量dword_40C070,寻找这个变量对应的函数,为sub_40AAA0。函数流程图如下。

8.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。在之前已经分析过UPX 压缩技术。
9.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
首先程序是一个后门程序。不具有传播和感染的性质,所以不是病毒和蠕虫;也没有将自己伪装成有用的程序以欺骗用户运行,不是木马。
10.给出过去已有的具有相似功能的其他工具:Bobax,Setiri、GatSla.
11.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
在之前实践一已经分析过了,作者为Raul siles 和 David Perze。

6. 实践3--取证分析

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

IRC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。
IRC明文传输使用的端口6667,偶尔也会使用6660—6669SSL加密。使用的端口6697。

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

僵尸网络是一组以协调方式连接的计算机, 用于恶意目的。僵尸网络中的每台计算机都称为僵尸网络。这些机器人形成受损计算机网络,由第三方控制并用于传输恶意软件或垃圾邮件或发起攻击。

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

1.下载botnet_pcap_file.dat,导入到wireshark。
2.输入过滤器筛选,ip.src == 172.16.134.191 && tcp.dstport == 6697,ip.src == 172.16.134.191 && tcp.dstport == 6667,加密和明文传输。

3.可以发现与IRC服务器都为明文传输,而且一共和5个IP进行了通信。分别为209.126.161.29, 66.33.65.58, 63.241.174.144, 217.199.175.10, 209.196.44.172五个服务器。

  • 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
    1.打开kali虚拟机中输入sudo apt-get install tcpflow安装tcpflow。输入tcpflow -r botnet.pcap "host 209.196.44.172 and port 6667"指令进行读取文件指定host和端口6667的信息分流。桌面生成了三个文件。209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、report.xml。重点看第一个从209.196.044.172,6667端口通信的流量。

  • 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
    grep获取昵称输出,sed去除前缀,tr将空格转换为新行,tr -d去除\r,grep -v "^$"去除空行,sort -u排序并去重,wc计算行数,但是很奇怪输出的个数为5.

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

    1.输入tcpdump -n -nn -r botnet.pcap 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 1.txt;wc -l 1.txt,筛选目标地址为172.16.134.191的连接者个数和ip,并输出为txt二五年间。

  • 攻击者尝试了哪些安全漏洞?攻击方式是什么?是否成功?
    1.查看tcp响应过的端口,tcpdump -r botnet.pcap -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

TCP端口有135、 139、 25、 445、 4899、 80;udp端口有137。445和80端口为smb和HTTP端口容易被列为攻击目标。
2.用wireshark筛选通过80端口的数据包,tcp.dstport==80 && ip.dst == 172.16.134.191,连接最多的就是24.197.194.106这个IP,不停在http协议上尝试web探测,不过也都是回应正常的页面(没成功)应该是lls漏洞(远程执行代码漏洞)。

3.接下来分析445端口,也就是smb协议端口。ip.dst == 172.16.134.191 and tcp.dstport == 445,发现加载了一个动态库,应该有点东西。

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

5.该 ip 地址与蜜罐建立了会话,说明攻击成功

6.IP为210.22.204.101的主机,查询支持的smb协议应该是相尝试远程登陆吧,

7.最后也成功建立了连接,还有知道了登陆账户。

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

7.学习中遇到的问题及解决

问题1:cat 209.196.044.172.06667-172.016.134.191.01152无法找到文件。
问题1解决办法:tcpflow分流的时候文件后缀为.dat文件,只需要把.dat去掉重新解压就行。

8.实践总结

学习的内容多,实践也难,尤其是分析的时候,要是没有大佬们的博客,看数据得看一下午。心累。8

posted @ 2020-04-29 15:54  20199314贺泽华  阅读(395)  评论(0编辑  收藏  举报