​LINUX下SYN攻防战—DDOS攻击【转】

LINUX下SYN攻防战

        (一)SYN攻击原理

        SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费服务器CPU和内存资源。SYN攻击聊了能影响主机外,还可以危害路由器,防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。

        我们知道,在网络中两台电脑建立TCP连接时需要进行三次握手过程。客户端首先向服务器发送TCP SYN数据包,接着服务器会向客户端发关相应的SYN ACK数据包。最后客户端会以ACK进行响应。从而建立正常的握手过程。

在具体的连接细节中,服务器最早接受到SYN包时,在TCP协议栈中会将相应的半连接记录添加到队列中,之后等待接受下面准备握手的数据包,如果握手成功,那么这个半连接记录将从队列中删除。或者当服务器未收到客户端的确认包时,会重发请求包,一直到超时才将此条目从未连接队列删除。但是,在服务器中的TCP协议栈中存储的半连接记录是有限的(Ubuntu 默认 128 查看方式:cat /proc/sys/net/ipv4/tcp_max_syn_backlog

或者sysctl -a|grep net.ipv4.tcp_max_syn_backlog )。

        当服务器受到SYN型的DOS攻击后,队列会很快处于充满状态。客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢严重者引起网络堵塞甚至系统瘫痪,服务器随后就不再接受新的网络连接,从而造成正常的客户端无法访问服务器的情况发生。

        (二)实战SYN攻击过程

        SYN攻击实现起来非常的简单,互联网上有大量面成的SYN攻击工具可以直接利用。假设在Linux服务器中安装了Web服务,在 Linux的命令提示符中执行"service httpd start"命令,即可开启Web服务,接着执行"netstat -ant | grep 80"命令,可以看到80端口已经处于打开状态了。

        在网络的其它机器上利用SYN攻击软件(例如"synkill"等)对Linux服务器的80端口进行 DOS攻击。之后在Linux服务器中执行命令"netstat -ant | grep 80",可以看到大量的网络连接信息,包括连接的类型、原地址、目标直地址、连接状态等。当然,因为SYN工具通常会伪告客户端地址,因此在连接列表中是找不到真实地址的

        。在连接状态中显示"SYN_RECV",表示当前处于半连接状态。

        我们可以每隔几秒钟运行命令"netstat -n -p TCP | grep SYN_RECV |grep 80 | wc -l",来检查某个端口(这里为80)       的未连接队列的条目数,当发现该条目数增大到某个极大值,并处于平衡状态时,那么就很有可能是Linux的TCP协议栈中的队列满了,此时用户就无法建立新的连接了。

        (三)如何在Linux中防御SYN型DOS攻击

        在Linux中防御SYN型DOS攻击的方法比较常见的有增大队列SYN最大半连接数,减小超时值,利用SYN cookie技术,过滤可疑的IP地址等常用方法。

        (1)增大队列SYN最大半连接数

        在Linux中执行命令"sysctl -a|grep net.ipv4.tcp_max_syn_backlog",在返回的"net.ipv4.tcp_max_syn_backlog=128"中显示 Linux队列的最大半连接容量是128。这个默认值对于Web服务器来说是远远不够的,一次简单的SYN攻击就足以将其完全占用。因此,防御DOS攻击最简单的办法就是增大这个默认值,在Linux中执行命令

        "sysctl -w et.ipv4.tcp_max_syn_backlog=3000",这样就可以将队列SYN最大半连接数容量值改为3000了。

        

        (2)减小超时值

        在Linux中建立TCP连接时。在客户端和服务器之间创建握手过程中,当服务器未收到客户端的确认包时,会重发请求包,一直到超时才将此条目从未连接队列删除。

        也就是说半连接存在一定的存活时间,超过这个时间,半连接就会自动断开。

        半连接存活时间实际上是系统所有重传次数等待的超时时间之和,这个值越大,半连接数占用的Backlog队列的时间就越长,系统能处理的 SYN请求就越少,因此,缩短超时时间就可以有效防御SYN攻击。这可以通过缩小重传超时时间和减少重传次数来实现。在Linux中默认的重传次数为5 (sysctl -a|grep net.ipv4.tcp_synack_retries

)次,总超时时间为3分钟,在Linux中执行命令"sysctl -w net.ipv4.tcp_synack_retries=1",将超时重传次数设置为1。

        (3)利用SYN cookie来防御DOS攻击

        除了在TCP协议栈中开辟一个内存空间来存储半连接数之外,为避免因为SYN请求数量太多,导致该队列被填满的情况下,Linux服务器仍然可以处理新的 SYN连接,可以利用SYN Cookie技术来处理SYN连接。

        什么是SYN Cookie呢?SYN Cookie是用一个Cookie来响应TCP SYN请求的,在正常的TCP连接过程中,当服务器接收一个SYN数据包,就会返回一个SYN -ACK包来应答,然后进入TCP -SYN -RECV(半开放连接)状态来等待最后返回的ACK包。

        服务器用一个数据空间来描述所有未决的连接,然而这个数据空间的大小是有限的,所以攻击者将塞满这个空间。

        在TCP SYN COOKIE的执行过程中,当服务器收到一个SYN包的时候,他返回一个SYN -ACK包。这个数据包的ACK序列号是经过加密的,它由TCP连接的源地址和端口号,目标地址和端口号,以及一个加密种子经过HASH计算得出的,然后服务器释放所有的状态。

        如果一个ACK包从客户端返回后,服务器重新计算COOKIE来判断它是不是上个SYN -ACK的返回包。如果是的话,服务器就可以直接进入TCP连接状态并打开连接。这样服务器就可以避免守候半开放连接了,在Linux中执行命令"echo" "echo "1" > / proc/sys/net/ipv4/tcp_syncookies ",这样即可启动SYN Cookie,并将其添加到了Linux的启动文件,这样即使系统重启也不影响SYN Cookie的激活状态。

        (4)过滤可疑的IP直址

        当客户机对服务器进行攻击时。在服务器上可以进行抓包操作,这样可以对数据包中的IP进行检测,然后再对这些可疑的潮行过滤,从而将其无法正常连接服务器。利用Linux自带的"tcpdump"命令可以实现抓包操作。

        执行命令"tcpdump -c 1000 -l eth 0 -n dst port 80 > test.txt",就可以在当前目录下创建一个'test.txt"文件,在其中包含大量的网络数据包,通过对该文件的的分析,就很容易得到可疑的客户端IP,之后利用系统自带的"iptables"命令即可对可疑IP进行屏蔽。

        便如执行命令"iptables -A INPUT -s 219.29.78.79 -d 0/0 -j REJECT",即可禁止"219.29.78.79"的外部主要访问本机所有端口。

        其中"-j REJECT"参数表示禁止访问。

2 Dos攻击--denial of service attack 拒绝服务攻击(英语:denial-of-service attack,简称DoS攻击)亦称洪水攻击。是一种网络攻击手法,其目的在于使目标计算机的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。

当黑客使用网络上两个或以上被攻陷的计算机作为“僵尸”向特定的目标发动“拒绝服务”式攻击时,称为分布式拒绝服务攻击(distributed denial-of-service attack,简称DDoS攻击)--Wikipedia

攻击现象:

1 网络异常缓慢(打开文件或访问网站)

2 特定网站无法访问

3 无法访问任何网站

4 垃圾邮件的数量急剧增加[4]

5 无线或有线网络连接异常断开

6 长时间尝试访问网站或任何互联网服务时被拒绝

7 服务器容易断线、卡顿

拒绝服务的攻击也可能会导致目标计算机同一网络中的其他计算机被攻击,互联网和局域网之间的带宽会被攻击导致大量消耗,不但影响目标计算机,同时也影响局域网中的其他计算机。如果攻击的规模较大,整个地区的网络连接都可能会受到影响。

2018年3月,源代码托管服务GitHub遭到迄今为止规模最大的DDoS攻击。

攻击形式:

DDoS攻击可以具体分成两种形式:带宽消耗型以及资源消耗型。它们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。

DDoS攻击可以具体分成两种形式:带宽消耗型以及资源消耗型。它们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。

带宽消耗型攻击

DDoS带宽消耗攻击可以分为两个不同的层次;洪泛攻击或放大攻击。洪泛攻击的特点是利用僵尸程序发送大量流量至受损的受害者系统,目的在于堵塞其带宽。放大攻击与其类似,是通过恶意放大流量限制受害者系统的带宽;其特点是利用僵尸程序通过伪造的源IP(即攻击目标IP)向某些存在漏洞的服务器发送请求,服务器在处理请求后向伪造的源IP发送应答,由于这些服务的特殊性导致应答包比请求包更长,因此使用少量的带宽就能使服务器发送大量的应答到目标主机上。

UDP洪水攻击(User Datagram Protocol floods)

UDP(用户数据报协议)是一种无连接协议,当数据包通过UDP发送时,所有的数据包在发送和接收时不需要进行握手验证。当大量UDP数据包发送给受害系统时,可能会导致带宽饱和从而使得合法服务无法请求访问受害系统。遭受DDoS UDP洪泛攻击时,UDP数据包的目的端口可能是随机或指定的端口,受害系统将尝试处理接收到的数据包以确定本地运行的服务。如果没有应用程序在目标端口运行,受害系统将对源IP发出ICMP数据包,表明“目标端口不可达”。某些情况下,攻击者会伪造源IP地址以隐藏自己,这样从受害系统返回的数据包不会直接回到僵尸主机,而是被发送到被伪造地址的主机。有时UDP洪泛攻击也可能影响受害系统周围的网络连接,这可能导致受害系统附近的正常系统遇到问题。然而,这取决于网络体系结构和线速。

ICMP洪水攻击(ICMP floods)

ICMP(互联网控制消息协议)洪水攻击是通过向未良好设置的路由器发送广播信息占用系统资源的做法。

死亡之Ping(ping of death)

死亡之Ping是产生超过IP协议能容忍的数据包数,若系统没有检查机制,就会死机。

泪滴攻击

每个数据要发送前,该数据包都会经过切割,每个小切割都会记录位移的信息,以便重组,但此攻击模式就是捏造位移信息,造成重组时发生问题,造成错误。

资源消耗型攻击

协议分析攻击(SYN flood,SYN洪水)

传送控制协议(TCP)同步(SYN)攻击。TCP进程通常包括发送者和接受者之间在数据包发送之前创建的完全信号交换。启动系统发送一个SYN请求,接收系统返回一个带有自己SYN请求的ACK(确认)作为交换。发送系统接着传回自己的ACK来授权两个系统间的通讯。若接收系统发送了SYN数据包,但没接收到ACK,接受者经过一段时间后会再次发送新的SYN数据包。接受系统中的处理器和内存资源将存储该TCP SYN的请求直至超时。DDoS TCP SYN攻击也被称为“资源耗尽攻击”,它利用TCP功能将僵尸程序伪装的TCP SYN请求发送给受害服务器,从而饱和服务处理器资源并阻止其有效地处理合法请求。它专门利用发送系统和接收系统间的三向信号交换来发送大量欺骗性的原IP地址TCP SYN数据包给受害系统。最终,大量TCP SYN攻击请求反复发送,导致受害系统内存和处理器资源耗尽,致使其无法处理任何合法用户的请求。

LAND攻击

这种攻击方式与SYN floods类似,不过在LAND攻击包中的原地址和目标地址都是攻击对象的IP。这种攻击会导致被攻击的机器死循环,最终耗尽资源而死机。

CC攻击(Distributed HTTP flood,分布式HTTP洪水攻击)

CC攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求(通常使用HTTP GET)。CC(Challenge Collapsar,挑战黑洞)根据其工具命名,攻击者创造性地使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。

僵尸网络攻击

僵尸网络是指大量被命令与控制(C&C)服务器所控制的互联网主机群。攻击者传播恶意软件并组成自己的僵尸网络。僵尸网络难于检测的原因是,僵尸主机只有在执行特定指令时才会与服务器进行通讯,使得它们隐蔽且不易察觉。僵尸网络根据网络通讯协议的不同分为IRC、HTTP或P2P类等。

应用程序级洪水攻击(Application level floods)

与前面叙说的攻击方式不同,应用程序级洪水攻击主要是针对应用软件层的,也就是高于OSI的。它同样是以大量消耗系统资源为目的,通过向IIS这样的网络服务程序提出无节制的资源申请来迫害正常的网络服务。

防御方式

拒绝服务攻击的防御方式通常为入侵检测,流量过滤和多重验证,旨在堵塞网络带宽的流量将被过滤,而正常的流量可正常通过。

防火墙

防火墙可以设置规则,例如允许或拒绝特定通讯协议,端口或IP地址。当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则阻止一切从攻击源IP发出的通信。

复杂攻击难以用简单规则来阻止,例如80端口(网页服务)遭受攻击时不可能拒绝端口所有的通信,因为其同时会阻止合法流量。此外,防火墙可能处于网络架构中过后的位置,路由器可能在恶意流量达到防火墙前即被攻击影响。然而,防火墙能有效地防止用户从启动防火墙后的计算机发起攻击。

交换机

大多数交换机有一定的速度限制和访问控制能力。有些交换机提供自动速度限制、流量整形、后期连接、深度包检测和假IP过滤功能,可以检测并过滤拒绝服务攻击。例如SYN洪水攻击可以通过后期连接加以预防。基于内容的攻击可以利用深度包检测阻止。

路由器

和交换机类似,路由器也有一定的速度限制和访问控制能力,而大多数路由器很容易受到攻击影响。

黑洞引导

黑洞引导指将所有受攻击计算机的通信全部发送至一个“黑洞”(空接口或不存在的计算机地址)或者有足够能力处理洪流的网络设备商,以避免网络受到较大影响。

流量清洗

当流量被送到DDoS防护清洗中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开。正常的流量则回注回客户网站。这样一来可站点能够保持正常的运作,处理真实用户访问网站带来的合法流量

   

原文: https://www.cnblogs.com/menghuanbiao/p/5212177.html

维基百科 https://zh.wikipedia.org/wiki/%E9%98%BB%E6%96%B7%E6%9C%8D%E5%8B%99%E6%94%BB%E6%93%8A

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注