传输层的安全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传输层的安全相关的知识,希望对你有一定的参考价值。

1.tcp与udp协议的安全问题

  tcp作为互联网中非常重要的一个协议,攻击者对它的攻击自然也是相当关注。突然想起经常听到tcp数据流服务这个词,为什么称数据流呢?这里数据流指的是应用层将数据下发给tcp层时是以字节流的形式的发送的。tcp维护着一个tcp发送缓冲区和一个接收缓冲区,所有应用层发来的字节流会存放在发送缓冲区中,网络层上传的tcp数据会存放在接收缓冲区中。对于tcp协议的安全将从四个方面来进行分析,分别是头部、协议、流量和验证。

  基于头部的攻击可分为2类:一是攻击者可以发送无效的头部信息,这样就可以扰乱tcp层的运行;二是攻击者可以通过收到的tcp回应数据来探测目标主机的一些信息。在tcp头部的攻击中最常被攻击的就是标识字段了,这6个标识字段分别是:URG(数据包中含有紧急数据)、ACK(回应号有效)、PSH(需要将数据推送到应用)、RST(复位数据包)、SYN(同步数据包)、FIN(结束数据包)。比如我们可以伪装数据包修改这些标识的组合,有些系统对于未知的组合会断开连接,这将导致被攻击者连接断开。这种攻击对应上述分类的第一类攻击它会中断单个连接,当然现在系统在这个地方都做了改进。在第二类探测攻击中,仍然是利用这些标识。由于tcp标准并没有规定所有组合,不同的操作系统对于某一特定标识组合有不同的回应,因此可以发送探测包获得目标主机的操作系统类型或其他特定的信息。探测攻击很难消除,因为操作系统实现tcp协议存在不同的标准,除非统一这些标准。

  tcp协议是目前因特网中最复杂的协议之一,由于它的复杂性,针对tcp协议的攻击层出不穷。这里仍然将攻击分为2类,一类是攻击者与目标进行不正确的通信;一类是攻击者将数据包插入到tcp协议流中。第一类攻击中有一个经典的攻击成为SYN雪崩,攻击者使用自己的ip地址和多个端口号发送连接请求,受害者受到请求后会回复ACK数据包并进入半连接状态,显然这个时候受害者在内存中会存放这次会话数据。当受害者内存中占有大量的半连接会话时将会大量消耗性能,严重可导致主机掉线并且忽略掉其他主机连接请求。针对这种情况目标主机可以进行过滤,也就是接受连接请求的时候只允许存在限定数量的源IP连接请求。但是显然攻击者还可以使用分布式主机同时对某一主机发起攻击,这样目标主机可能一下子就掉线了。第二类攻击需要攻击者可以看到流量,比如切断连接攻击,如下图所示。

技术分享

这里还有一个点需要考虑,伪装数据包不是仅仅改变源IP地址就可以了的,还有mac地址以及一些标志都要进行修改,当然好在前提是我们可以嗅探到数据包进行伪造。如果攻击者还修改了数据包的源mac地址,那这样的话由于无法知道攻击者是哪台主机,这将会对消除攻击带来难度。接下来再来看一个第二类攻击例子,这种攻击称为会话劫持,它要求攻击者可以看到受害者与服务器之间的流量。与切断连接攻击不同的是它是窃取连接,攻击者将代替受害者与服务器之间通信或代替服务器与受害者进行通信。如下图所示。技术分享

  在流量方面,从切断连接和窃取连接可以看到它们的基础正是能够看到流量,syn雪崩也是由于大量的流量而降低服务性能,因此它是其他攻击的基础。

  tcp协议不支持验证,因此这方面没有代表性攻击。不过tcp首部中第1和2个字段是源端口和目的端口,操作系统其实可以限定端口号的范围从而起到一个验证的保护作用。由于udp协议首部很简单,因此基于首部和协议的攻击不常见,基于验证方面和流量的攻击与tcp差不多。不过也要看到tcp与udp的区别,udp不需要回复确认和保持连接,因此对udp发动雪崩需要更高的成本。

2.传输层安全的解决方案

  tcp/ip协议簇在设计时并没有专门在传输层安全方面做太多保障措施,现在传输层的安全一般都是由低层或应用层来提供,这些安全措施我会在其他层做相应的介绍。接下来对上面的攻击进行分析,主要是基于头部和协议的攻击。在基于头部的攻击中我们发现基本上就是围绕着标志位,针对这方面的攻击只要系统做过滤检查基本就可以做到100%检测并阻断。在基于协议的攻击中,syn雪崩是一个很头疼的问题。针对这类攻击,一般是对攻击者ip进行限制,比如一次只限制一个ip加几个端口进行连接。还有当在规定时间没有收到客户端的ack确认时一般服务器会重发5次,可以修改配置文件将重发次数降为2次,减少服务器等待时间。防火墙技术也可在这里使用,让防火墙将完成3次握手的数据包再发送给服务器。但是这些措施显然,如果攻击者可以每秒攻击上万次或更多,那对于syn雪崩仍然无法很好的进行防御。攻击者攻击也是有风险的,因为即使你伪装ip地址,服务器收到的源ip地址是出口路由器的ip地址,这样攻击者的大概地理位置就会被发现。而且SNMP应该也会做一些限制,我曾经用C#做过端口扫描程序,如果一下子扫描太多我那个ip地址短时间就不能使用了。我现在是刚入门,如果以后有好的想法我再去更新这篇随笔。

  在针对协议的攻击中,还有RST攻击。显然RST需要攻击者能够看到流量并伪装成正确的数据包。我百度了7到8页,发现几乎都是同样的话那就是使用防火墙丢弃所有的rst包。确实如果不采用防火墙真的拿这样的攻击没办法。可是这样的话RST本身的作用就没有了,再来回顾出现RST包的情况:目标主机无端口监听;请求超时;目标主机连接关闭。如果在两端采用防火墙,当目标主机出现上述三种情况返回一个RST数据包时。由于被防火墙隔离,因此发送方将会继续尝试发送数据包直到由于没有答复而放弃发送,一般防火墙遇到这种情况应该会返回一些错误信息的。可以看出没有RST数据包,连接仍然可以释放只是需要更长的时间周期。在会话劫持中,除了发送RST让客户端断开,还可以发送FIN或其他方式让客户端退出连接,总之就是让服务器相信攻击者就是合法的客户端。在会话劫持中如果攻击者不使用RST方式中断客户端的连接而使用其他方式,这样设置防火墙过滤RST将无法阻挡会话劫持攻击,此时可以使用更加复杂的TSL协议来增加攻击者与服务器连接难度。

  传输层安全TLS和安全套接层SSL是在应用层和传输层之间再加一个安全层。TLS(Transport Layer Security)协议可看作是一个新的层,位于应用层与tcp之间。它提供服务器与客户端之间的验证,提供应用程序之间的保密性和数据完整性,TLS包括TLS记录协议与TLS握手协议。SSL(Security Socket Layer)和TLS差不多,也是通过相互验证达到认证的目的,它使用数字签名确保完整性、使用加密确保私密性,它由SSL记录协议和SSL握手协议组成。TLS是在SSL的基础上进行改进得到的版本,但是TLS和SSL的差别很大而且加密算法都不同,这导致它们之间是无法进行互操作的。由于TSL是SSL的增强版,故先来研究SSL,目前它已广泛的用于浏览器与服务器之间的身份认证和信息加密。前面提到SSL分为SSL记录协议和SSL握手协议,记录协议为应用层协议主要提供数据封装、压缩和加密。握手协议则是在记录协议的基础上用于通信双方的身份认证、加密算法的协商、交换密钥。通过记录协议和握手协议,SSL可确保客户端与服务器之间的数据不会被窃取以及数据在传输过程中不被改变。接下来我画了一个图来说明SSL协议的传输过程。

技术分享

 TLS和SSL的通信机制差不多,其实现在我们使用的基本上都是TLS协议。另外关于TLS密钥的分配是TLS协议中非常重要的一部分,对这块我只是懂点皮毛感兴趣的可以自行百度。对于TLS协议从中间人角度看也是有可能被攻击的,比如A和B通信,C可以看到A与B之间的通信流量。这时C可以伪造证书给A,假装自己是一个服务器,并与真正的服务器建立一个有效连接,这样C就可以任意的查看修改这些信息了。不过成本应该是相当高的,因为攻击者除了要得到TLS以下层的数据流量外,还需要知道加解密算法以及各种密钥。

以上是关于传输层的安全的主要内容,如果未能解决你的问题,请参考以下文章

网络通信与信息安全之深入解析TCP与UDP传输协议

[Java网络安全系列面试题] 说一说TCP和UDP的区别与联系?

TCP粘包和拆包

TCP协议UDP协议(传输层重点协议)

王道考研 计算机网络19 传输层 传输层的寻址与端口 TCP UDP

传输层协议之TCP/UDP