TCP/IP协议漏洞实验


实验题目:Attack Lab: Attacks on TCP/IP Protocols

实验学时:6

日期:2016.5.2  

实验目的:

  体会TCP/IP协议的漏洞,并针对这些漏洞做出相应攻击,感受网络安全方面所面临的挑战,理解为何网络安全措施是必要的。

 


一、实验背景

  1.1 网络设置

  为了完成本次实验,至少需要三台机器,一台用来攻击,一台作为被攻击者,第三台机器作为观察者。可以在同一台电脑上开设三台虚拟机,也可以开设两台虚拟机,然后用本机作为第三台观察者。本实验中,我们需要把这三台机器放置在同一个LAN中,按照如下图设置:

TCP/IP协议漏洞实验

  1.2 操作系统

  本实验可以适用于多种操作系统,我们选择使用Ubuntu Linux操作系统。

 

  1.3 Netwox工具

  因为需要使用工具对不同类型的网络包进行传输,我们可以使用Netwag来做,然而Netwag的用户体验不是很友好,所以本实验中我们选择Netwox命令行来完成。

  1.4 Wireshark工具

  本实验中还需要一个网络交通的sniffer工具,尽管Netwox可以作为一个sniffer工具,我们还是选择使用更好的Wireshark工具来进行检测。

  1.5 允许ftp和telnet服务

  为了避免安全问题,默认条件下ftp和telnet服务是关闭的,在本实验中我们需要使用命令行打开这两项服务,所使用命令行如下:

TCP/IP协议漏洞实验

 

二、实验过程

  2.1 Task1 ARP缓存中毒

   ARP缓存是ARP协议的重要部分,一旦执行ARP协议,MAC地址和IP地址之间的映射就会被缓存到ARP缓存表中,而如果缓存映射已经存在,就不需要每次都执行ARP协议了,但是ARP缓存并不是一成不变的,如果利用主机定期发送的ARP请求来错误地更新它的ARP缓存,就会出现错误,即ARP缓存中毒。

  本实验中,首先配置开启三台机器的ftp和telnet服务。

TCP/IP协议漏洞实验

  然后配置其IP地址。

TCP/IP协议漏洞实验

TCP/IP协议漏洞实验

TCP/IP协议漏洞实验

  配置完成后,信息如表格所示:

机器

IP地址

MAC地址

身份

主机1

192.168.0.122

00:0c:29:c7:cd:7e

观察者

主机2

192.168.0.123

00:0c:29:a6:54:e1

被攻击者

主机3

192.168.0.124

00:0c:29:72:7a:a9

攻击者

  首先建立正常情况下主机1和主机2的ARP映射,此处我选择使用ping命令对主机1和主机2进行连接。可以看到,连接成功并发送6个包,然后检查主机1对主机2IP地址的ARP映射,确实是主机2的MAC地址。

TCP/IP协议漏洞实验

  与此同时,主机2上打开Wireshark,也监测到了这一信息,包括来自主机1的询问以及对主机1的应答。

TCP/IP协议漏洞实验

  此时在主机2上查看ARP映射,也是没有问题的,主机1的IP对应主机1的MAC地址。

TCP/IP协议漏洞实验

  然后攻击开始,使用主机3的netwox命令制造广播信息,构建一条IP地址为主机1而MAC地址为主机3的应答信息,这条信息被不断地广播,如图所示。

TCP/IP协议漏洞实验

  此时检查主机2上的ARP映射,发现已经有所改变。也就是主机1所对应的IP地址和MAC地址已经不正确了,然后建立telnet连接,也是连接不上的。

TCP/IP协议漏洞实验

  在本实验中,通过主机3不断的周期性广播,导致主机2上ARP映射表信息是错误的,所以也就不能建立正确的telnet连接了。

 

2.2 Task2 ICMP重定向攻击

2.2.1 实验原理

ICMP重定向被路由器用来向更新主机的路由信息,最开始只有最少的路由信息。当一台主机接收到一个ICMP重定向信息,他将会根据接收到的信息来修改路由表。因为缺少确认,如果攻击者希望受害者设置它的路由信息为一个特别形式,他们可以发送欺骗ICMP重定向信息给受害者,并且欺骗受害者修改它的路由表。

现有两台设备:

被攻击者A

攻击者B

当A经过默认路由器与一个远程主机通信时,与A同属一个网络的主机B可以通过修改设置,充当与主机A直接相连的路由器。构造ICMP重定向报文,指示主机A将数据包转发到主机B上

2.2.2实验步骤

    还是使用之前实验的seedUbuntu虚拟机,主机A作为被攻击者,主机B作为攻击者。

1、     开启服务

TCP/IP协议漏洞实验

2、     查询网络配置

被攻击者A:

TCP/IP协议漏洞实验

 

攻击者B:

TCP/IP协议漏洞实验

详细信息如下表所示:

主机

Ip地址

Mac地址

被攻击者A

192.168.30.129

00:0c:29:3c:61:ca

攻击者B

192.168.30.128

00:0c:29:74:3c:27

3、     被攻击者A安装traceroute。

(如果安装不成功要重启一下,可能是因为之前修改了网络设置,连不上网了)

TCP/IP协议漏洞实验

4、     通过traceroute指令可以跟踪包经过的设备,从wireshark上看详细的转发过程,这能更好的看出网关的作用。

安装成功后,被攻击者A远程访问一个网址时(此处选用山东大学齐鲁软件学院的ip地址211.87.225.17.),数据包会被发送至默认网关,默认网关再将数据包转发给目标地址。

TCP/IP协议漏洞实验

 

打开wireshark观察详细信息如下图所示:

TCP/IP协议漏洞实验

从上图可以看出:

源ip

192.168.30.129

目标ip

211.87.225.17

默认网关mac

00:50:56:ed:93:99

 

5、     攻击者B为了使自己能够转发数据包,对其进行转发数据包的设置

TCP/IP协议漏洞实验

6、     B开始向被攻击者A发送imcp重定位消息。为了不让A发现此次攻击是B发起的,要将源地址改为了192.168.153.10.

在主机B上使用netwox86号工具可以完成这个攻击,指令如下图所示:

TCP/IP协议漏洞实验

7、     攻击完成,被攻击者A再次执行之前的命令,远程访问山东大学齐鲁软件学院

TCP/IP协议漏洞实验

8、     此时,在被攻击机B中使用WIRESHRK监听eth0,发现不断收到ICMP包

TCP/IP协议漏洞实验

从上图可以看出:

源ip

192.168.30.129

目标ip

211.87.225.17

默认网关mac

00:0c:29:74:3c:27

攻击者将默认网关的mac地址修改为了自己的mac地址。

  2.3 Task3 SYN泛洪攻击

  SYN泛洪攻击是Dos攻击的一种,攻击者向被攻击者的某一个TCP端口发送很多SYN请求,但是攻击者并不需要完成严格意义上的三次握手过程。攻击者可以使用错误的IP地址,也可以选择不继续这一过程。每个处于半连接状态的任务都会进入被攻击者的有限等待队列,通过这一过程,攻击者可以覆盖被攻击者的任务队列,这一队列里都是已经完成了SYN、SYN-ACK,但是还没有完成最后一步ACK的连接,当队列满了以后,被攻击者将不能再进行任何连接。原理图如下所示:

TCP/IP协议漏洞实验

  本实验中选择将主机一作为攻击者,主机三作为被攻击者,主机2作为观察者。

  首先在主机2上建立对主机3的连接,连接成功。

TCP/IP协议漏洞实验

  主机3上检查,发现23端口状态为”ESTABLISHED”,即三次握手成功。

TCP/IP协议漏洞实验

  然后使用主机1对主机3的23端口发动泛洪攻击。

TCP/IP协议漏洞实验

  此时使用Wireshark查看主机3的状态,发现流量非常大。

TCP/IP协议漏洞实验

  此时主机1已经没有办法telnet连接至主机3了。

TCP/IP协议漏洞实验

  为了保护服务器不被SYN泛洪攻击,SYN cookies被发明,其核心技术是在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器再根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。所以如果这个包是非法的,将不会占用被攻击者的数据区域,也就不会覆盖被攻击者的任务队列。

2.4 Task4 针对Telnet和SSH的TCP RST攻击

2.4.1 实验原理

TCP RST攻击是针对TCP连接的,它可以终止两个被攻击主机之间的TCP连接。它主要是攻击者伪造一个RST报文向建立连接的任意一方发送,接收方接收到这样的报文后,将断开TCP连接。

例如:Machine 2(IP:192.168.40.138)的Telnet客户端和Machine 3(ip:192.168.40.142)的Telnet服务器之间建立了 Telnet连接,我们向Telnet客户段发送 TCP RST,就可以终止两者之间的TCP连接

一、RST介绍

      RST标示复位、用来异常的关闭连接。

           1. 发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓冲区中的包,发送RST。

            2. 而接收端收到RST包后,也不必发送ACK包来确认。

二、什么时候发送RST包

      1.  建立连接的SYN到达某端口,但是该端口上没有正在 监听的服务。

      2. TCP收到了一个根本不存在的连接上的分节。

      3. 请求超时。 使用setsockopt的SO_RCVTIMEO选项设置recv的超时时间。接收数据超时时,会发送RST包。

下面是RST攻击的简单示意图

TCP/IP协议漏洞实验

2.4.2实验过程

1、建立三台主机,分别是主机1,2,3

主机1向主机2(ip:192.168.224.134)发起连接请求

 

 

talnet  192.168.224.134

 

 TCP/IP协议漏洞实验

2、查看主机2端口监听状况,如下图所示已经建立了连接

 

netstat -an |grep :23

 TCP/IP协议漏洞实验

 

3、这时,在主机3中通过netwox78号工具发起针对主机1RST攻击。

sudo netwox 78 -i "192.168.224.138"

 TCP/IP协议漏洞实验

4、主机1断开连接,主机2处于监听状态

TCP/IP协议漏洞实验

TCP/IP协议漏洞实验

5、值得注意的是,此时对主机1的攻击还没有结束,当主机1尝试连接主机2,发现最开始能连上,但还没来得及显示后续内容,连接就中断了。

SSH的攻击方式和TALNET类似。

2.4.3防范RST攻击

一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。所以,如果C要伪造A发给B的包,要在上面提到的IP头和TCP头,把源IP、源端口、目标IP、目标端口都填对。这里B作为服务器,IP和端口是公开的,A是我们要下手的目标,IP当然知道,但A的源端口就不清楚了。如果知道了源端口,实施RST攻击将变得非常容易

2.5 Task7 TCP会话劫持

2.5.1 相关知识

(1)Telnet

Telnet表示远程登录协议和方式,分为Telnet客户端和Telnet服务器程序. Telnet可以让用户在本地Telnet客户端上远端登录到远程Telnet服务器上。

TCP/IP协议漏洞实验

(2)TCP/IP

根据TCP/IP中的规定,使用TCP协议进行通讯需要提供两段***,TCP协议使用这两段***确保连接同步以及安全通讯,系统的TCP/IP协议栈依据时间或线性的产生这些值。在通讯过程中,双方的***是相互依赖的。如果攻击者在这个时候进行会话劫持,结果肯定是失败,因为会话双方“不认识”攻击者,攻击者不能提供合法的***;所以,会话劫持的关键是预测正确的***,攻击者可以采取嗅探技术获得这些信息。在劫取的数据包中,有两个重要的数据

SEQ:当前数据包中的第一个字节的序号

ACK:期望收到对方数据包中第一个字节的序号

(3) TCP会话劫持过程

TCP/IP协议漏洞实验

 假设现在主机A和主机B进行一次TCP会话,C为攻击者,劫持过程如下:

A向B发送一个数据包

SEQ (hex): X ACK (hex): Y

FLAGS: -AP--- Window: ZZZZ,包大小为:60

 

B回应A一个数据包

SEQ (hex): Y ACK (hex): X+60

FLAGS: -AP--- Window: ZZZZ,包大小为:50

 

A向B回应一个数据包

SEQ (hex): X+60 ACK (hex): Y+50

FLAGS: -AP--- Window: ZZZZ,包大小为:40

 

B向A回应一个数据包

SEQ (hex): Y+50 ACK (hex): X+100

FLAGS: -AP--- Window: ZZZZ,包大小为:30

 

攻击者C冒充主机A给主机B发送一个数据包

SEQ (hex): X+100 ACK (hex): Y+80

FLAGS: -AP--- Window: ZZZZ,包大小为:20

 

B向A回应一个数据包

SEQ (hex): Y+80 ACK (hex): X+120

FLAGS: -AP--- Window: ZZZZ,包大小为:10

2.5.2 攻击过程

(1)打开三台虚拟机,分别开启Telnet服务和ftp服务

TCP/IP协议漏洞实验

(2)设置三台虚拟机的IP地址分别为192.168.0.122;192.168.0.123;192.168.0.124。122和123建立Telnet连接,124对其进行攻击。

先查看IP地址

TCP/IP协议漏洞实验


TCP/IP协议漏洞实验

TCP/IP协议漏洞实验


TCP/IP协议漏洞实验

(3)启动机器3(192.168.0.124)的wireshark,准备捕获数据报

(4)机器1(192.168.0.122)与机器2(192.168.0.123)建立Telnet连接

TCP/IP协议漏洞实验

(5)查看连接情况

TCP/IP协议漏洞实验

(6)当我们用123和122连接的Telnet会话给123发送一个ls的命令在命令行里当即发映出结果。在124机器上我们在连接之前开启了一个wireshark,在我们发了几个包之后我们在124机器上的wireshark上发现了下列捕捉的包。

TCP/IP协议漏洞实验


TCP/IP协议漏洞实验

(7)用netwox 40指令来伪造包。

观察捕捉到的数据包,预测下一个数据包的***和确认号,使用工具netwox 40 来伪造数据报,我们需要修改五个参数:源IP地址,目的IP地址,***,确认号以及数据字段。其中源IP地址为客户端IP地址,目的IP地址为服务器IP地址,***和确认号为我们观察所预测的***和确认号,数据字段为攻击者想要服务器执行的指令。我们查到可以用netwox来伪造包之后,我们查阅了很多的资料,也请教了很多同学才确定netwox命令的写法,我们根据之前总结出的tcp包的seq和ackseq 确定了如下的指令:当我们回车之后 这个数据包被发出,我们劫持了123和122之间的telnet会话并用自己的伪造数据包使得123来执行我们自定义的命令 mkdir aa

 

在开始使用netwox 40之前,我们需要先了解各个参数及其含义,可通过命令netwox 40 –help得到,如下图,

TCP/IP协议漏洞实验


TCP/IP协议漏洞实验

理解了这些参数后,我们就可以伪造数据包了,攻击者想要服务器执行mkdir aa,也就是新建一个名为aa的空文件夹,注意对于数据字段的编写一定要用16进制,否则会 错误信息,如下图

TCP/IP协议漏洞实验

正确编辑的结果如下:

TCP/IP协议漏洞实验

这是123那台机器上创建出的aa文件夹 说明劫持(欺骗)成功

TCP/IP协议漏洞实验

捕捉的相应的tcp数据

TCP/IP协议漏洞实验

 

 

 

三、实验心得

Task 2心得体会

通过本次实验,了解了icmp攻击的原理,感受到了网络安全所面临的挑战。通过查阅资料了解到,利用ICMP报文进行网络攻击主要分为三种类型:死亡之Ping、ICMP DoS攻击、基于重定向的路由欺骗。

本次实验进行的是ICMP重定向攻击,攻击者可利用ICMP重定向报文破坏路由,并以此增强其窃听能力。除了路由器,主机必须服从ICMP重定向。在本次的试验中,攻击者向网络中的被攻击者发送ICMP重定向消息,提供一个伪造的地址,这就可能引起被攻击者具有一张无效的路由表。如果攻击者伪装成路由器截获所有到某些目标网络或全部目标网络的IP数据包,这样就形成了窃听。

对于ICMP的攻击的防范,需要从其原理出发,有针对性的进行防范,比如针对带宽的ICMP攻击,就可以设置ICMP限速,或者使用防火墙来过滤非法ICMP报文。

Task3 心得体会

之前考虑三次握手协议的侧重点都是在与如何建立链接,而没有想到过会遭受到什么样的攻击。当连接方并不像真正连接而是只不断发送大量SYN请求时,服务器就会不知所措,导致其他用户无法链接。

在设计三次握手协议时,我们优先考虑的总是如何能够建立可靠高效的连接,却从没有考虑过攻击者会如何利用漏洞进行攻击的问题。显然,越复杂的协议漏洞越多。为了作为这种机制的保护,一种新的机制又诞生,SYN cookie。所以信息安全永远是一个解决用户方简介与安全性的博弈。

Task4心得体会

通过这次的实验,我对针对TCP的talnet连接和ssh连接的RST攻击有了更加直观的认识。Talnet连接是早期服务器/客户机模式远程登录的程序,因为它进行数据传输采用的是明文格式,在对重要信息传输时并不安全。后来出现了SSH加密登录。但是这两种连接都无法抵抗RST的攻击。我在实验中明白理解了RST攻击的几个关键因素。一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。所以,如果C要伪造A发给B的包,要在上面提到的IP头和TCP头,把源IP、源端口、目标IP、目标端口都填对。这里B作为服务器,IP和端口是公开的,A是我们要下手的目标,IP当然知道,但A的源端口就不清楚了。如果知道了源端口,实施RST攻击将变得非常容易

 

Task7感想

做TCP/IP攻击的第七个Task时,刚开始的时候我们 对TCP会话劫持并不是很了解,在对tcp/ip协议进行了解、对telnet对话进行了解、对会话劫持进行了解、对netwox进行了解之后我们对这个实验怎么做才有了较清晰的思路。下面我就我们在做实验中遇到的困难以及解决方式和思考来具体谈。在刚开始了解TCP会话的时候,其实是比较容易的 ,因为上学期的机网我们已经学过了。所以对于这一块的了解是最快的。我们对telnet对话的了解也没有出现什么问题,问题就出在我们对会话劫持这一段的了解是了解到会话劫持基本上分为两步1、捕捉2、欺骗(伪造包)。我们的捕捉这一块可以用实验提供的虚拟机上的wireshark来捕捉(在我们后面的了解中也可以用netwox7来捕捉)。在伪造包这一块我们找了很多资料联系实验报告上的资料我们觉得应该使用提供的netwox来完成这一块的内容,在请教了很多同学之后,发现netwox 40 可以完成发送伪造包的任务,我们查看了netwox的帮助手册,还是不太清楚怎么正确的使用这条命令,再请教了同学之后我们大体确定了格式,和做实验的流程便开始了摸索的过程。我们开始捕捉的时候的过程并不是很顺畅,因为网络经常断开,所以在经过调试之后我们把网络连接改为桥接之后网络就稳定多了,在我们推测了***和确认***之后我们编写了我们自己的伪造包。结果我们发布出去,后来我们检查了很久发现-H mkdir aa 这一块,是因为指令没有转化成16进制,在我们把指令部分改为16进制之后我们的伪造数据包便可以发出。这次试验对我们来说算是一场学习以及挑战的过程。整个过程我们学习到了很多知识不仅是有关于tcpip 还了解到团队的协作和请教同学的重要性,让我们在以后学习的路上多增添了一份信心。