SYN Flood攻击的基本原理及防御

合集下载

SYNFlood攻击

SYNFlood攻击

SYNFlood攻击什么是SYN Flood攻击?SYN泛洪(半开放式攻击)是⼀种,旨在通过消耗所有可⽤的服务器资源来使服务器⽆法⽤于合法流量。

通过重复发送初始连接请求(SYN)数据包,攻击者可以淹没⽬标服务器计算机上的所有可⽤端⼝,从⽽使⽬标设备对合法流量的响应缓慢或完全不响应。

SYN Flood攻击如何⼯作?SYN Flood攻击通过利⽤连接的握⼿过程来⼯作。

在正常情况下,TCP连接表现出三个不同的过程以进⾏连接。

1. ⾸先,客户端将SYN数据包发送到服务器以启动连接。

2. 然后,服务器使⽤SYN / ACK数据包响应该初始数据包,以便确认通信。

3. 最后,客户端返回⼀个ACK数据包,以确认已从服务器接收到该数据包。

完成发送和接收数据包的顺序之后,TCP连接将打开并能够发送和接收数据。

为了创建,攻击者利⽤以下事实:接收到初始SYN数据包后,服务器将以⼀个或多个SYN / ACK数据包进⾏响应,并等待握⼿的最后⼀步。

运作⽅式如下:1. 攻击者通常使⽤IP地址将⼤量SYN数据包发送到⽬标服务器。

2. 然后,服务器响应每个连接请求,并保留⼀个开放的端⼝以准备接收响应。

3. 当服务器等待永远不会到达的最终ACK数据包时,攻击者将继续发送更多SYN数据包。

每个新的SYN数据包的到来使服务器暂时维持新的开放端⼝连接⼀段时间,⼀旦所有可⽤端⼝都被利⽤,服务器将⽆法正常运⾏。

在⽹络中,当服务器使连接保持打开状态但连接另⼀端的计算机未打开时,该连接被视为半打开。

在这种DDoS攻击中,⽬标服务器会不断离开开放的连接,并等待每个连接超时,然后端⼝才能再次可⽤。

结果是,这种类型的攻击可以被视为“半开放式攻击”。

SYN泛滥可以通过三种不同的⽅式发⽣:1. 直接攻击:未被欺骗的SYN泛洪称为直接攻击。

在这种攻击中,攻击者根本不会掩盖其IP地址。

由于攻击者使⽤具有真实IP地址的单个源设备来发起攻击,因此攻击者极易受到发现和缓解的影响。

[原创]SYNflood攻击原理

[原创]SYNflood攻击原理

[原创]SYNflood攻击原理剖析"拒绝服务"攻击-SYN拒绝服务一、洪水——大自然对人类的报复每一年,自然界都要用各种方式去报复人们对它做的一切,例如洪水。

每一年,人们都要为洪水后满地的狼籍和可能造成的人员伤亡和财产损失而发愁。

为了抵抗洪水,人们砍伐树木挖采岩石建造更高的堤坝;为了破坏这些堤坝,大自然发起更猛烈的洪水冲垮这些防护措施。

在大自然与人类抗衡的同时,网络上也有人与人之间的抗衡。

每一年,有些人总要不断试验各种令某些网站长时间无法访问的攻击方法。

每一年,投资者都要因为这些网站被恶意停止所造成的经济损失头痛。

为了抵抗这些人的攻击,技术人员研究各种方法让这些攻击造成的损失降低;为了各种目的,攻击者们研究更多的攻击方法让网站再次瘫痪。

这种攻击被称为“Denial of Service(DoS)”,臭名昭著的“拒绝服务”攻击。

它通常使用不只一台机器进行攻击,攻击者能同时控制这些机器,这种结构就是“Distributed”,分布式。

所以,我们要讨论的拒绝服务,默认都是指“Distributed Denialof Service(DDoS)”,分布式拒绝服务。

二、面对洪水……1.洪水以外的东西——被滥用的SYN拒绝服务(Synchronize Denial of Service)当一个地区即将发生洪水(或者已经发生)的时候,当地居民的表现很少有镇定的:东奔西跑的、收拾财物的、不知所措的……整个城镇乱成一锅粥,造成的后果就是街道交通混乱,谁也跑不了。

这个问题到了网络上,就变成了一堆数据包只能在服务器外面乱撞而不入。

为什么会这样,因为攻击者使用了SYN攻击。

要明白SYN攻击的原理,要从连接建立的过程开始说起。

从我们输入一个网址到我们能看到这个网页,机器在非常短的时间内为我们做了三件重要的事情:1.机器发送一个带有“ SYN”(同步)标志的数据包给服务器,请求连接;2.服务器返回一个带有SYN标志和ACK(确认)标志数据包给机器;3.机器也返回一个ACK确认标志数据包给服务器,数据传输建立。

SYN FlOOD攻击原理、检测及防御

SYN FlOOD攻击原理、检测及防御
法和 防 御 的 方 法。
关键 词 : S Y N F l o o务攻击和分布式拒绝服务攻击是网络攻击方式中危害极 3 S Y N F l o o d攻击 检测 大的攻击, 和其他的网络攻击不 同, 拒绝服务攻击不是对攻击 目标的 3 . 1传统 检测 方法 系统和数据进行危害, 而是对攻击 目标的网络进行耗尽 , 同时对系统 种是查看本地连接是否有大量的半开连接队列 ,但这个方法 的操 作面 临着 资 源不 断 减少 的情况 ,这 样 就会 导致 攻 击 目标 的 服务 不是 很 准确 。 另一 种是 给 每一 个请 求连 接 的 I P地 址分 配一 个 C o o k i e . 器系统出现崩溃的情况 , 使得用户无法使用网络服务。S N Y F L O O D 如 果短 时 间 内连 续 受 到某 个 I P的重 复 S Y N包 ,就认 定 是受 到 了攻 就 是 拒绝 服务 攻 击 和分 布式 拒 绝服 务攻 击 的 重要 方式 之 一 ,如果 攻 击 , 以后从 这 个 I P地址 来 的包会 被 丢弃 。由于 S Y N包 的源 I P地址 可 击 的目标是支持 T C P应用的,那么这种攻击方式就可以对攻击 目标 以随意伪 造 , S Y N F I o o d 攻 击 可 以很容 易规 避 S Y N C o o k i e 检测。 的所 有 网络 连 接进 行 攻 击 ,同时 使 用户 无 法 正 常 进行 网络 的访 问 , 3 . 2 牛顿 均差 插值 检测 法 S N Y F L O O D攻 击 的原 理就 是利 用 T C P协 议在 建 立 连接 的时候 三次 插值法利用函数 f ( x ) 在某区间中若干点的函数值 , 作出适当的特 握 手 的缺 陷 , 同 时利 用 I P的欺骗 技 术 。为 了更 好 的 解决 这 种攻 击 方 定函数 , 在这些点上取已知值 , 在 区间的其他点上用这特定函数 的值 式, 对S Y N F L O O D攻 击 进行 必要 的检测 是 非 常重 要 的 , 在 检测 方 面 作为 函数 f ( x ) 的近似值。如果这特定函数是多项式 , 就称它为插值多 人们已经在使用一些方法 的,同时在防御方法上人们也找到了一些 项式。利用插值基函数很容易得到拉格 朗日插值多项式 , 公式结构紧 措施 , 可以通过修改系统的配置 , 采用必要的防火墙或者 只允许合法 凑, 在理论分析中甚为方便 , 但当插值节点增减时全部插值基 函数均 的I P源在设备上进行使用 , 这样进行 网络连接 的时候才能避免 出现 要 随之 变化 ,整 个公 式 也将 发生 变 化 ,这在 实 际计算 中是很 不 方便 的, 为了克服这一缺点 , 提出了牛顿插值 。 I P欺骗 的情 况 。 1 T C P三次 握手 4攻 击 防御 只 要服 务器 提供 T C P 应用 , 攻 击 者就 可 以进行 S Y N F l o o d攻击 , T C P 是传输控制协议 的简称 , 它是一种传输层协议 , 在使用 的时 候 主要 是进 行 面 向连 接 。面 向连 接是 一 种数 据 在传 输 的时 候建 立起 而且 S Y N F l o o d 攻 击 一般很 难 以防 御和追 踪 , 现介绍 几 种防 御办 法 。 来 的虚 电路 连 接 ,在 进行 连接 的时候 主要 是 对 客户 端 和服 务器 之 间 4 . 1修改 系统 配 置 进行 连 接 。 这个 连 接 的过程 通常 被人 们称 作 为 T C P的 三次握 手 。 T C P 我们 可 以修 改系统 支持 的最 大 T C P 连 接数 以及 通过 负 载均衡 等 的第 一 次握 手 是客 户 端 向服 务器 发 送 S Y N包 , 并且 要 在 系统 缓 存 中 来 提 高 防御 S Y N F l o o d 攻击 能力 。 开辟~个空间来对服务器 的请求进行处理,这时候连接 的状态表现 4 . 2采用 防火 墙 为S Y N 的发送 状 态 。T C P的第二 次握 手是 服务 器 收到 S Y N包 之后 , 防火墙通常用于保护内部网络不受外部网络 的非授权访 问, 它 对 客户 发送 的 S Y N包 进行 确认 ,然后 向客户 端发 送 S Y N + A C K包 这 位于 客户 端 和服 务器 之 间 。 由于防火 墙 所能 处理 的半 开 连接 数 远大 时在系统的缓存区域同时也是要开辟一块空间对客户端 的请求进行 于服 务 器所 能 处 理 的半 开 连 接 数 以及 根 据 S Y N F l o o d攻击 特 性 , 因 D O S 攻击 有效 地保 护 内部 的服 务器 。 处理, 这 时 的连 接状 态 是 S Y N 的接 收状 态 。T C P的第 三 次握 手 是客 此 防火 墙 可 以用 来 阻止 D 户端 收 到服务 器 发送 的 S Y N + A C K包 ,然后 将 A C K包重 新 发送 给服 4 . 3边缘路由设备只允许合法源 I P进入网络 务器, 服务 器 收到 A C K包 以后 , 客户 端 和服 务器 的连接 就 完 成 了 , 三 通 过在 边 界 路 由设 备 上 配 置访 问控 制 列表 只 允 许合 法 源 I P地 这样会大大过滤掉 S Y N F l o o d 攻击流量. 即使部分利 次握手也就完成了, 这时客户端和服务器就可以进行数据 的传输了。 址才能访问网络. 2 S Y N F L O O D攻击 原理 用 合法 源 I P地址 进行 的攻 击 . 也 非 常容 易被 追踪 。 这是 目前解 决互 联 网S Y N F l o o d攻击 最有 效 的办法 。 2 . 1 T C P 握 手 缺陷 5结束 语 T C P的第二次握手时 ,服务器在收到客户端发送的 S Y N 包以 后, 要在系统的缓存中对客户的请求进行处理, 同时服务器要向客户 为了更好的对 S Y N F L O O D 攻击原理进行掌握 ,同时对传统 的 进 而 找 到更 加准 确 的检 测方 法 , 在检 测方 法 端发 送 S Y N + A C K包 , 在没 有 S Y N F L O O D 攻 击 的 情况 下 , 也 可 能会 攻 击检 测方 法 进行 分 析 , 出现 因为 网络 的原 因 导致 服务 器 在一 定 的 时间 内无 法 收 到 A C K包 , 进行分析的时候对防御 的方法也能进行必要的分析。S Y N F L O O D 在 收到 S Y N F L O O D 攻 击 以后 ,服 务 器会 不 断 的进 行 S Y N + A C K包 攻击方式是与其他攻击方式不 同的攻击 , 在进行攻击的时候 , 不需要 的传 输 , 这样 就 会 导致 缓存 不 断要 进行 空 间 的预 留 , 进 而 出 现系 统缓 使用木马等程序就能对攻击 目标进行攻击,只是需要攻击 目标在使 C P服务 即可 。现 在 , 网络应 用规 模越 来越 大 , 为 了更 好 的利用 网 存不 断 释放 的情 况 , 这时的 S Y N F L O O D 攻 击 就是 利用 的 T C P 握手 用 T 络, 一定要提高网络的使用安全 , 拒绝服务攻击 的危害越来越严重 , 时 出现 的缺 陷 。 需 要提 高全 网用户 的 网络 安全 防 护意 识 和技 术水 平 以及 需要 网络 服 2 . 2 I P欺 骗 在网络 中, 路由设备要根据数据包 的目标 I P地址进行数据包 的 务提供商和用户进行共 同防御 。拒绝服务攻击将仍是我们必须重点 传输 , 使数据包传输到 目的端 , 在这个过程 中, 对源 I P地址是不会进 防范和 研究 的 网络安 全 的威 胁 之 一 。 参 考文 献 行检查的, 这样也就为 S Y N F L O O D 的攻击提供了一个便利的条件。 S Y N F L O O D 进行 攻 击 的 时候 ,可 以对 源 I P 的地 址 进行 随意 的伪 [ 1 ] 胡伟栋, 汪为农. 分布式拒绝服务攻击及其防范叨. 计算机工程 , 2 0 0 0 造 ,使 源 I P地 址在 进行 追 踪 的时候 非常 难进 行 ,尽 管 S Y N F L O O D ( 1 0 ) . 可 以通过 这种 方 式来 进行 攻击 , 同 时也可 以找到 防御 的方 法 。 [ 2 1 - ¥卫. I n t e r n e t 网络层 安全 协议 理论 研 究 与 实现 叨. 计 算机 学报 , 1 9 9 9

TCP洪水攻击(SYNFlood)的诊断和处理

TCP洪水攻击(SYNFlood)的诊断和处理

TCP洪⽔攻击(SYNFlood)的诊断和处理SYN Flood是当前最流⾏的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的⽅式之⼀,这是⼀种利⽤TCP协议缺陷,发送⼤量伪造的TCP连接请求,常⽤假冒的IP或IP号段发来海量的请求连接的第⼀个握⼿包(SYN包),被攻击服务器回应第⼆个握⼿包(SYN+ACK 包),因为对⽅是假冒IP,对⽅永远收不到包且不会回应第三个握⼿包。

导致被攻击服务器保持⼤量SYN_RECV状态的“半连接”,并且会重试默认5次回应第⼆个握⼿包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不⾜),让正常的业务请求连接不进来。

详细的原理,⽹上有很多介绍,应对办法也很多,但⼤部分没什么效果,这⾥介绍我们是如何诊断和应对的。

诊断我们看到业务曲线⼤跌时,检查机器和DNS,发现只是对外的web机响应慢、CPU负载⾼、ssh登陆慢甚⾄有些机器登陆不上,检查系统syslog:tail -f /var/log/messagesApr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies.检查连接数增多,并且SYN_RECV 连接特别多:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 16855CLOSE_WAIT 21SYN_SENT 99FIN_WAIT1 229FIN_WAIT2 113ESTABLISHED 8358SYN_RECV 48965CLOSING 3LAST_ACK 313根据经验,正常时检查连接数如下:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 42349CLOSE_WAIT 1SYN_SENT 4FIN_WAIT1 298FIN_WAIT2 33ESTABLISHED 12775SYN_RECV 259CLOSING 6LAST_ACK 432以上就是TCP洪⽔攻击的两⼤特征。

泛洪攻击实验报告(3篇)

泛洪攻击实验报告(3篇)

第1篇一、实验背景随着互联网技术的飞速发展,网络安全问题日益凸显。

其中,泛洪攻击作为一种常见的网络攻击手段,给网络系统带来了极大的威胁。

为了深入了解泛洪攻击的原理和防御方法,我们进行了本次泛洪攻击实验。

二、实验目的1. 理解泛洪攻击的原理和危害;2. 掌握泛洪攻击的实验方法;3. 学习防御泛洪攻击的策略。

三、实验环境1. 操作系统:Windows 102. 虚拟机软件:VMware Workstation3. 实验工具:Scapy四、实验原理泛洪攻击是一种利用目标系统资源耗尽而导致的拒绝服务攻击。

攻击者通过发送大量数据包或请求,使目标系统无法正常处理正常用户请求,从而达到拒绝服务的目的。

常见的泛洪攻击类型包括:1. TCP SYN泛洪攻击:利用TCP三次握手过程中的漏洞,发送大量伪造的SYN请求,使目标系统处于半连接状态,消耗系统资源。

2. UDP泛洪攻击:发送大量UDP数据包,使目标系统无法正常处理正常数据。

3. ICMP泛洪攻击:发送大量ICMP请求,使目标系统无法正常处理网络请求。

五、实验步骤1. 准备实验环境(1)在VMware Workstation中创建两台虚拟机,分别作为攻击者和目标系统。

(2)在攻击者虚拟机上安装Scapy工具。

2. 编写攻击脚本(1)使用Scapy编写TCP SYN泛洪攻击脚本,如下所示:```pythonfrom scapy.all importdef syn_flood(target_ip, target_port):while True:syn_packet = IP(dst=target_ip) / TCP(sport=RandShort(), dport=target_port, flags="S")send(syn_packet)if __name__ == "__main__":target_ip = "192.168.1.2"target_port = 80syn_flood(target_ip, target_port)```(2)运行攻击脚本,对目标系统进行TCP SYN泛洪攻击。

syn_flood攻击原理

syn_flood攻击原理

syn_flood攻击原理SYN flood攻击是一种常见的网络攻击手段,其原理是通过发送大量伪造的TCP连接请求(SYN包),占用服务器的资源,使其无法处理正常的连接请求,进而导致服务不可用。

下面将详细介绍SYN flood攻击的工作原理。

SYN flood攻击利用了TCP协议的三次握手过程。

在正常情况下,TCP连接的建立需要客户端发送一个SYN包给服务器,服务器收到后返回一个SYN+ACK包给客户端,最后客户端发送一个ACK包给服务器,即完成了三次握手,建立了正常的TCP连接。

而SYN flood攻击利用了这个过程的缺陷,即没有限制SYN请求的数量和源地址。

攻击者向目标服务器发送大量的伪造的源IP地址和端口的SYN包,服务器接收到这些SYN包后,会回复相应的SYN+ACK包,但攻击者并不回复ACK包,也就是第三次握手的ACK包。

正常情况下,服务器在指定的时间内没有收到ACK包会重新发送SYN+ACK包,等待客户端再次回复ACK包。

但是在SYN flood攻击中,攻击者发送大量的伪装的SYN请求,服务器不断地回复SYN+ACK包,并等待ACK包的回复,这使得服务器的资源被耗尽,无法处理其他的正常请求。

SYN flood攻击主要有两种方式:常规SYN flood和分片SYN flood。

常规SYN flood攻击使用普通的SYN包发送大量的请求,这些请求既可以是伪造的源IP地址和端口的请求,也可以是真实的请求,攻击的主要目标是让服务器的资源耗尽。

分片SYN flood攻击是对常规SYN flood攻击的改进。

由于IP包的长度有限,攻击者将一个SYN包分成多个片段发送给服务器。

在接收到第一个片段时,服务器会进行资源分配,并等待片段的其余部分。

但攻击者并不发送剩余的片段,导致服务器一直等待这个SYN请求,从而占用更多的资源。

为了对抗SYN flood攻击,通常有以下几个方法:1.加强服务器的防火墙和安全策略,限制并过滤恶意的IP地址和请求。

防火墙-流量型攻击之SYN Flood及防御

防火墙-流量型攻击之SYN Flood及防御

防火墙-流量型攻击之SYN Flood及防御大家好,作者和你们又见面了!上一期作者带着大家一起了解了单包攻击的基本防御知识,知道了单包攻击的几大类型,以及防火墙支持防御的攻击种类。

但是,在现网中单包攻击只占了很小一部分比例,更多的攻击还是集中在流量型攻击和应用层攻击。

本期作者将继续为大家讲解一下现网上常见的流量型攻击。

过去,攻击者所面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度的限制,攻击者无法发出过多的请求。

虽然类似“Ping of Death”的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的操作系统,但大多数的DoS攻击还是需要相当大的带宽,而以个人为单位的黑客们很难消耗高带宽的资源。

为了克服这个缺点,DoS攻击者开发了分布式的攻击。

木马成为黑客控制傀儡的工具,越来越多的计算机变成了肉鸡,被黑客所利用,并变成了他们的攻击工具。

黑客们利用简单的工具集合许多的肉鸡来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial of Service)攻击。

随着互联网的蓬勃发展,越来越多的计算机不知不觉的被利用变成肉鸡,攻击逐渐变成一种产业。

提起DDoS攻击,大家首先想到的一定是SYN Flood攻击。

今天作者就给大家详细说说SYN flood的攻击和防御。

最初的SYN Flood攻击类似于协议栈攻击,在当年的攻击类型中属于技术含量很高的“高大上”。

当年由于系统的限制以及硬件资源性能的低下,称霸DDoS攻击领域很久。

它与别人的不同在于,你很难通过单个报文的特征或者简单的统计限流防御住它,因为它“太真实”、“太常用”。

SYN Flood具有强大的变异能力,在攻击发展潮流中一直没有被湮没,这完全是他自身的优秀基因所决定的:1.单个报文看起来很“真实”,没有畸形。

2.攻击成本低,很小的开销就可以发动庞大的攻击。

2014年春节期间,某IDC的OSS系统分别于大年初二、初六、初七连续遭受三轮攻击,最长的一次攻击时间持续将近三个小时,攻击流量峰值接近160Gbit/s!事后,通过对目标和攻击类型分析,基本可以判断是有一个黑客/黑客组织发起针对同一目标的攻击时间。

SYNFlOOD攻击原理、检测及防御

SYNFlOOD攻击原理、检测及防御

SYNFlOOD攻击原理、检测及防御SYN LLOOD是现在比较常见的攻击方式,它可以利用TCP协议的缺陷来对TCP连接请求进行伪造,进而导致CPU在资源方面出现耗尽的情况,或者是导致CPU出现内存不足的情况。

在对SYN FLOOD攻击进行分析的时候可以从TCP三次握手和握手的时候出现的缺陷,同时在IP方面出现的欺骗进行分析,这样可以更好的对SYN FLOOD 进行分析,进而找到检测的方法和防御的方法。

标签:SYN Flood攻击;检测;防御拒绝服务攻击和分布式拒绝服务攻击是网络攻击方式中危害极大的攻击,和其他的网络攻击不同,拒绝服务攻击不是对攻击目标的系统和数据进行危害,而是对攻击目标的网络进行耗尽,同时对系统的操作面临着资源不断减少的情况,这样就会导致攻击目标的服务器系统出现崩溃的情况,使得用户无法使用网络服务。

SNY FLOOD就是拒绝服务攻击和分布式拒绝服务攻击的重要方式之一,如果攻击的目标是支持TCP应用的,那么这种攻击方式就可以对攻击目标的所有网络连接进行攻击,同时使用户无法正常进行网络的访问,SNY FLOOD攻击的原理就是利用TCP协议在建立连接的时候三次握手的缺陷,同时利用IP的欺骗技术。

为了更好的解决这种攻击方式,对SYN FLOOD攻击进行必要的检测是非常重要的,在检测方面人们已经在使用一些方法的,同时在防御方法上人们也找到了一些措施,可以通过修改系统的配置,采用必要的防火墙或者只允许合法的IP源在设备上进行使用,这样进行网络连接的时候才能避免出现IP欺骗的情况。

1 TCP三次握手TCP是传输控制协议的简称,它是一种传输层协议,在使用的时候主要是进行面向连接。

面向连接是一种数据在传输的时候建立起来的虚电路连接,在进行连接的时候主要是对客户端和服务器之间进行连接。

这个连接的过程通常被人们称作为TCP的三次握手。

TCP的第一次握手是客户端向服务器发送SYN包,并且要在系统缓存中开辟一个空间来对服务器的请求进行处理,这时候连接的状态表现为SYN 的发送状态。

Linux服务器防御DDOS攻击

Linux服务器防御DDOS攻击

CentOS SYN Flood攻击原理Linux下设置特别值得一提的是CentOS SYN有很多值得学习的地方,这里我们主要介绍CentOS SYN攻击,包括介绍CentOS SYN 原理等方面。

CentOS SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。

一:什么是CentOS SYN Flood攻击CentOS SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Hands hake)过程进行的攻击。

这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCP SYN (synchronize)包到对方。

对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK (ACKnowled ge Character)包回去,这样三次握手就结束了。

在上述过程中,还有一些重要的概念。

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的CentOS SYN包(syn=j)开设一个条目,该条目表明服务器已收到CentOS SYN包,并向客户发出确认,正在等待客户的确认包。

这些条目所标识的连接在服务器处于CentOS SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

或者说TCP服务器收到TCP SYN request包时。

在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即把形成的TCP连接。

一般把收到CentOS SYN包而还未收到ACK包时的连接状态成为半开连接(Half-open Connection)。

Backlog参数:表示未连接队列的最大容纳数目。

CentOS SYN -ACK 重传次数:服务器发送完CentOS SYN -ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数。

SYN Flood攻击防范技术

SYN Flood攻击防范技术

1 概述1.1 产生背景SYN Flood攻击是一种通过向目标服务器发送SYN报文,消耗其系统资源,削弱目标服务器的服务提供能力的行为。

一般情况下,SYN Flood攻击是在采用IP源地址欺骗行为的基础上,利用TCP连接建立时的三次握手过程形成的。

众所周知,一个TCP连接的建立需要双方进行三次握手,只有当三次握手都顺利完成之后,一个TCP连接才能成功建立。

当一个系统(称为客户端)请求与另一个提供服务的系统(称为服务器)建立一个TCP连接时,双方要进行以下消息交互:(1) 客户端向服务器发送一个SYN消息;(2) 如果服务器同意建立连接,则响应客户端一个对SYN消息的回应消息(SYN/ACK);(3) 客户端收到服务器的SYN/ACK以后,再向服务器发送一个ACK消息进行确认。

当服务器收到客户端的ACK消息以后,一个TCP的连接成功完成。

连接的建立过程如图1所示:图1 TCP连接的建立在上述过程中,当服务器收到SYN报文后,在发送SYN/ACK回应客户端之前,需要分配一个数据区记录这个未完成的TCP连接,这个数据区通常称为TCB资源,此时的TCP连接也称为半开连接。

这种半开连接仅在收到客户端响应报文或连接超时后才断开,而客户端在收到SYN/ACK报文之后才会分配TCB资源,因此这种不对称的资源分配模式会被攻击者所利用形成SYN Flood攻击。

图2 SYN Flood攻击原理图如图2所示,攻击者使用一个并不存在的源IP地址向目标服务器发起连接,该服务器回应SYN/ACK消息作为响应,由于应答消息的目的地址并不是攻击者的实际地址,所以这个地址将无法对服务器进行响应。

因此,TCP握手的最后一个步骤将永远不可能发生,该连接就一直处于半开状态直到连接超时后被删除。

如果攻击者用快于服务器TCP连接超时的速度,连续对目标服务器开放的端口发送SYN报文,服务器的所有TCB资源都将被消耗,以至于不能再接受其他客户端的正常连接请求。

TCP协议中的SYN攻击与防范措施

TCP协议中的SYN攻击与防范措施

TCP协议中的SYN攻击与防范措施引言:在网络安全领域中,SYN攻击是一种常见而且隐蔽的网络攻击方式。

SYN Flood attack(SYN洪水攻击)是其中一种最常见的DDoS (分布式拒绝服务)攻击之一。

本文将讨论TCP协议中的SYN攻击原理,以及有效防范这种攻击的措施。

一、SYN攻击原理SYN攻击是通过发送大量虚假的TCP连接请求(SYN包)来消耗服务端资源的一种攻击方式。

它利用了TCP协议中的三次握手(SYN-SYN/ACK-ACK)机制,但并不真正完成连接建立。

具体来说,攻击者发送大量的虚假SYN包给目标服务器,每个SYN包都伪造了源IP地址。

服务器在接收到这些SYN包后会回应SYN/ACK包,等待客户端的确认(ACK)包,但攻击者不发送这个确认包,导致服务器一直处于等待状态,同时消耗大量的资源,如网络带宽、服务器处理能力和内存资源。

二、SYN攻击的影响SYN攻击可以导致服务器的性能下降、服务不可用,甚至造成网络瘫痪。

它可以通过大量恶意请求占用服务器的连接队列,导致合法请求无法建立连接。

这对于那些高访问率的网站或者关键基础设施非常危险。

三、防范SYN攻击的措施1. SYN防火墙在应对SYN攻击时,我们可以设置SYN防火墙来抵御这种攻击。

SYN防火墙是一种通过限制入站SYN包的数量和频率,来检测和拦截恶意的SYN请求的防御机制。

它可以采用IP地址过滤、端口过滤和基于连接速率的过滤等方法,以抵挡入侵者对服务器的攻击。

2. SYN CookieSYN Cookie是另一种常见的防御SYN攻击的方法。

它通过在服务器上启用SYN Cookie功能,在三次握手的过程中,把服务器需要暂存的信息进行哈希处理,并发送给客户端。

而客户端在后续请求中会携带这个哈希值,服务器根据哈希值重新验证请求的有效性。

这种方式可以不依赖于服务器存储连接的状态,从而减轻了服务器的负担。

3. 加强网络基础设施除了以上两种主要的防范措施,我们还可以通过加强网络基础设施来抵御SYN攻击。

TCPSYNFlood攻击的原理机制检测与防范及防御方法

TCPSYNFlood攻击的原理机制检测与防范及防御方法

TCPSYNFlood攻击的原理机制检测与防范及防御方法TCP SYN Flood攻击的原理机制/检测与防范及防御方法作者: 来源: 剑客网站日期: 2006-8-6 9:41TCP SYN Flood攻击的原理机制/检测与防范及防御方法现在的攻击者,无所不在了.对于一些攻击手法,很多高手也都是看在眼里而没什么实质性防范措施.除了改端口,换IP,弄域名..还能做什么? 本篇文章介绍了TCP SYN Flood攻击的原理机制/检测与防范及防御方法,希望能给大伙一个思路.TCP SYN Flood攻击的机制客户端通过发送在TCP报头中SYN标志置位的数据分段到服务端来请求建立连接。

通常情况下,服务端会按照IP报头中的来源地址来返回SYN/ACK置位的数据包给客户端,客户端再返回ACK到服务端来完成一个完整的连接(Figure-1)。

在攻击发生时,客户端的来源IP地址是经过伪造的(spoofed),现行的IP路由机制仅检查目的IP地址并进行转发,该IP包到达目的主机后返回路径无法通过路由达到的,于是目的主机无法通过TCP三次握手建立连接。

在此期间因为TCP缓存队列已经填满,而拒绝新的连接请求。

目的主机一直尝试直至超时(大约75秒)。

这就是该攻击类型的基本机制。

发动攻击的主机只要发送较少的,来源地址经过伪装而且无法通过路由达到的SYN连接请求至目标主机提供TCP服务的端口,将目的主机的TCP缓存队列填满,就可以实施一次成功的攻击。

实际情况下,发动攻击时往往是持续且高速的。

Figure-3 SYN Flood Attack这里需要使用经过伪装且无法通过路由达到的来源IP地址,因为攻击者不希望有任何第三方主机可以收到来自目的系统返回的SYN/ACK,第三方主机会返回一个RST(主机无法判断该如何处理连接情况时,会通过RST重置连接),从而妨碍攻击进行。

Figure-4 IP Spoofing由此可以看到,这种攻击方式利用了现有TCP/IP协议本身的薄弱环节,而且攻击者可以通过IP伪装有效的隐蔽自己。

配置SYN Flood 攻击防范功能

配置SYN Flood 攻击防范功能

配置SYN Flood攻击防范功能
SYN Flood攻击是一种通过向目标服务器发送SYN报文,消耗其系统资源,削弱目标服务器的服务提供能力的行为。

一般情况下,SYN Flood攻击是在采用IP源地址欺骗行为的基础上,利用TCP连接建立时的三次握手过程形成的。

操作step
step1执行命令system-view,进入系统视图。

step2执行命令vlan vlan-id,创建VLAN并进入VLAN视图。

step3执行命令quit,退回系统视图。

step4执行命令firewall enable,打开攻击防范使能开关。

step5执行命令firewall defend syn-flood enable,使能全局SYN Flood攻击防范功能。

缺省情况下,SYN Flood攻击防范功能处于关闭状态。

step6执行命令interface vlanif vlan-id,进入VLANIF接口视图。

step7执行命令firewall defend enable,打开攻击防范使能开关。

step8执行命令quit,退回系统视图。

step9(可选)执行命令firewall defend syn-flood ip ip-address[max-rate rate-number],设置
使用display firewall defend flag命令查看S-switch设备配置的攻击防范信息,显示
“syn-flood”表示SYN Flood防范功能已经使能。

SYN Flood攻击实验

SYN Flood攻击实验

实验五SYN Flood攻击实验班级﹒学号:网络1201·2012******** 姓名:******实验日期:2014.11.28 任课教师:*******【实验目的】理解SYN Flood攻击原理熟悉SYN Flood攻击方法熟悉抵御SYN Flood攻击的方法【实验原理】SYN-Flood是目前最流行的DDoS攻击手段,DDoS只是洪水攻击的一个种类。

其实还有其它种类的洪水攻击。

以前的DoS手段在向分布式这一阶段发展的过程中也经历了逐步淘汰的过程。

SYN-Flood的攻击效果最好,故众黑客不约而同选择它。

以下了解一下SYN-Flood的详细情况。

Syn Flood利用了TCP/IP协议的固有漏洞。

面向连接的TCP三次握手是Syn Flood 存在的基础。

假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是很严重的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。

实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常小),此时从正常客户的角度看来,服务器失去响应,这种情况称做:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

TCP原理篇之SYN Flood

TCP原理篇之SYN Flood

TCP原理篇之SYN FloodTCP协议的SYN Flood攻击,这种攻击方式虽然原始,但是生命力顽强,长久以来在DDoS圈里一直处于德高望重的地位。

SYN Flood攻击的影响也不容小觑,从攻击中可以看到,以SYN Flood为主的数十G流量,很容易就造成被攻击目标网络瘫痪。

但TCP类的攻击远不止如此,本篇我们就来全面讲解基于TCP协议的各种DDoS攻击方式和防御原理,首先来了解TCP协议的基础知识。

0x01 TCP协议基础提起TCP,相信大家都不会陌生,每一位网络工程师入门时学到的第一个协议就是TCP了吧。

由于与生俱来的优良品质(面向连接、超时重传等可靠性保证),这个传输层协议构建了网络的半壁江山,很多常用的协议或应用如Web、Telnet/SSH、FTP等都是承载于TCP的。

这里我们用一些篇幅再来温习一遍TCP协议,我们以一次FTP连接建立和断开的过程为例,分析TCP报文的交互过程,了解TCP报文中的关键字段。

下面给出了使用Wireshark工具中Flow Graph功能绘制出的整个交互过程的流图:我们重点关注交互过程的一头一尾,即三次握手建立连接以及四次握手断开连接的过程。

三次握手建立连接在TCP中,通信双方使用三次握手来建立一个连接。

第一次握手,客户端向服务器发起请求,报文中的SYN标志位置为1,序号为2452765130(用X标记),如下图所示:第二次握手,服务器收到客户端的请求后,向客户端回应报文。

报文中的SYN和ACK标志位均置为1,序号为1996069412(用Y标记),确认序号为客户端的序号+1即X+1=2452765131,如下图所示:第三次握手,客户端收到服务器回应的报文后,首先检查报文中的确认序号是否正确。

如果确认序号正确(客户端的序号+1),发送确认报文。

确认报文中的ACK标志位置为1,确认序号为服务器的序号+1即Y+1=1996069413,如下图所示:而如果客户端检查服务器回应报文中的确认序号不正确,则会发送RST(Reset)复位报文,报文中的RST标志位置为1,表示连接出现问题,需要重新建立。

syn泛洪攻击原理

syn泛洪攻击原理

syn泛洪攻击原理Syn泛洪攻击原理是一种常见的网络攻击方式,它利用TCP协议中的漏洞,向目标服务器发送大量的伪造的SYN包,从而使服务器无法正常处理合法的请求,导致服务瘫痪。

本文将从攻击原理、攻击方式和防御措施三个方面来介绍Syn泛洪攻击。

Syn泛洪攻击利用了TCP协议中的三次握手过程中的漏洞。

在正常的TCP连接建立过程中,客户端向服务器发送一个SYN包,服务器收到后回复一个SYN+ACK包,客户端再回复一个ACK包,这样连接就建立成功了。

而在Syn泛洪攻击中,攻击者向目标服务器发送大量的伪造的SYN包,服务器收到后会回复一个SYN+ACK包,但攻击者并不回复ACK包,而是继续发送大量的伪造的SYN包,这样服务器就会一直等待ACK包,从而无法处理正常的请求,导致服务瘫痪。

攻击方式Syn泛洪攻击可以通过多种方式进行,其中比较常见的有以下几种: 1. 单一IP地址攻击:攻击者使用单一的IP地址向目标服务器发送大量的伪造的SYN包。

2. 分布式攻击:攻击者利用多个被感染的计算机向目标服务器发送大量的伪造的SYN包,从而形成分布式攻击。

3. 反射攻击:攻击者利用一些开放的网络服务(如DNS、NTP等)向目标服务器发送大量的伪造的SYN包,从而形成反射攻击。

防御措施为了防止Syn泛洪攻击,可以采取以下几种防御措施:1. 过滤伪造的IP地址:可以通过过滤伪造的IP地址来防止Syn泛洪攻击。

2. 增加连接队列长度:可以增加连接队列长度来缓解Syn泛洪攻击对服务器的影响。

3. 启用SYN Cookie:可以启用SYN Cookie来防止Syn泛洪攻击。

4. 使用防火墙:可以使用防火墙来过滤Syn泛洪攻击的流量。

Syn泛洪攻击是一种常见的网络攻击方式,它可以对目标服务器造成严重的影响。

为了防止Syn泛洪攻击,我们需要采取一些有效的防御措施,从而保护网络的安全。

SYN Flood攻击的基本原理及防御

SYN Flood攻击的基本原理及防御

SYN Flood攻击的基本原理及防御文章来源:/syn.htm第一部分SYN Flood的基本原理SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

要明白这种攻击的基本原理,还是要从TCP连接建立的过程开始说起:大家都知道,TCP与UDP不同,它是基于连接的,也就是说:为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的标准过程是这样的:首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。

第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。

以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。

问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。

win7和Linux下如何防御SYN FLOOD攻击

win7和Linux下如何防御SYN FLOOD攻击

一、分别讨论在windows和Linux操作系统中可以采用何种策略防御SYNFlood攻击?1.Windows的SYN攻击保护机制Windows中针对于SYN攻击的防范.就是通过调整TCP/IP协议栈来实现的。

正常情况下,操作系统对TCP连接的一些重要参数有一个常规的设置.如:SYN Timeout时间、SYN+ACK 的重试次数、SYN报文从路由器到系统再到Winsock的延时等等。

这个常规设置针对系统优化.可以给用户提供方便快捷的服务。

一旦系统受到攻击.就需要启动保护机制,防止系统崩溃。

正常情况下.Windows系统的TCP协议栈工作的机制是Windows操作系统响应正常的TCP 请求(SYN请求),服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN+ACK 包.此时服务器进入SYN_RECEIVED状态。

Windows第一次重传之前等待时问默认为3秒,服务器发送完SYN+ACK包,如果未收到客户确认包。

服务器进行重传,默认重传5次,总超时时间需要3分钟。

TCP协议栈开辟了一个比较大的内存空间backlog队列来存储半连接条目.如果重传次数超过系统规定的最大重传次数.系统才将该连接信息从半连接队列中删除。

当SYN请求不断增加并占满了这个空间,致使系统丢弃后面的SYN连接。

为防范SYN攻击.Windows系统的TCP协议栈内嵌了SynAttackProtect机制,Windows2003系统也采用此机制。

SynAttackProtect机制是通过关闭某些socket选项。

增加额外的连接指示和减少超时时间,使系统能处理更多的SYN连接。

以达到防范SYN攻击的目的。

SynAttackProtect机制的启动,系统根据TcpMaxHalfOpen、TcpMaxHalfopenRetried和TcpMaxPortsexhausted三个参数判断是否遭受SYN攻击。

保护机制SYN半连接的阈值TcpMaxHalfOpen的大小的设置是关键,太小影响正常的连接。

linux防御tcp syn flood 攻击的方法

linux防御tcp syn flood 攻击的方法

linux防御tcp syn flood 攻击的方法TCP SYN 洪水攻击是一种常见的网络攻击手段,它利用TCP三次握手过程中的漏洞,通过发送大量的伪造的TCP SYN包给服务器,导致服务器资源耗尽,无法处理正常的请求。

为了防御这种攻击,我们可以采取以下方法:1. 增加内核参数:Linux系统中,可以通过修改内核参数来增加服务器的容量来承载更多的TCP连接。

可以增加系统的最大连接数限制,如`net.core.somaxconn`、`net.ipv4.tcp_max_syn_backlog`等参数,提高服务器的连接容量。

2. 启用SYN Cookie:SYN Cookie是一种防御SYN洪水攻击的机制,当服务器检测到大量的伪造的SYN包时,会启动SYN Cookie机制。

该机制会将部分连接信息编码到SYN-ACK包的序列号字段中,以减轻服务器负担。

可以通过修改内核参数`net.ipv4.tcp_syncookies`来启用SYN Cookie。

3. 配置防火墙规则:通过配置防火墙规则,可以限制对服务器的访问,阻止大量的伪造SYN包达到服务器。

可以使用iptables工具配置规则,限制源IP地址或者限制连接频率等方式来防御SYN洪水攻击。

4. 使用反向代理:使用反向代理服务器可以将部分流量分发到不同的后端服务器上,将SYN洪水攻击分散到多台服务器上进行处理。

这样可以减轻单台服务器的负载,提高整体的抗攻击能力。

5. 使用专业的防火墙设备:为了更好地防御SYN洪水攻击,可以考虑使用专业的防火墙设备,这些设备通常配备了更多的资源和功能,能够提供更好的攻击防御能力。

综上所述,通过增加系统容量、启用SYN Cookie、配置防火墙规则、使用反向代理或专业的防火墙设备等方式,可以提高服务器的抗SYN洪水攻击的能力,保障服务器的正常运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SYN Flood攻击的基本原理及防御创建时间:2001-06-28文章属性:转载文章来源:/syn.htm文章提交:xundi (xundi_at_)Shotgun首发于天极网第一部分SYN Flood的基本原理SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

要明白这种攻击的基本原理,还是要从TCP连接建立的过程开始说起:大家都知道,TCP与UDP不同,它是基于连接的,也就是说:为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的标准过程是这样的:首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。

第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。

以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。

问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。

实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

从防御角度来说,有几种简单的解决方法,第一种是缩短SYN Timeout时间,由于SYN Flood 攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。

第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。

可是上述的两种方法只能对付比较原始的SYN Flood攻击,缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,以上的方法将毫无用武之地。

第二部份SYN Flooder源码解读下面我们来分析SYN Flooder的程序实现。

首先,我们来看一下TCP报文的格式:0 1 2 3 4 5 60 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| IP首部| TCP首部| TCP数据段|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+图一TCP报文结构如上图所示,一个TCP报文由三个部分构成:20字节的IP首部、20字节的TCP首部与不定长的数据段,(实际操作时可能会有可选的IP选项,这种情况下TCP首部向后顺延)由于我们只是发送一个SYN信号,并不传递任何数据,所以TCP数据段为空。

TCP首部的数据结构为:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 十六位源端口号| 十六位目标端口号|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 三十二位序列号|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 三十二位确认号| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 四位| |U|A|P|R|S|F| | | 首部|六位保留位|R|C|S|S|Y|I| 十六位窗口大小|| 长度| |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 十六位校验和| 十六位紧急指针| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 选项(若有)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 数据(若有)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+图二TCP首部结构根据TCP报文格式,我们定义一个结构TCP_HEADER用来存放TCP首部:typedef struct _tcphdr{USHORT th_sport; //16位源端口USHORT th_dport; //16位目的端口unsigned int th_seq; //32位序列号unsigned int th_ack; //32位确认号unsigned char th_lenres; //4位首部长度+6位保留字中的4位unsigned char th_flag; //2位保留字+6位标志位USHORT th_win; //16位窗口大小USHORT th_sum; //16位校验和USHORT th_urp; //16位紧急数据偏移量}TCP_HEADER;通过以正确的数据填充这个结构并将TCP_HEADER.th_flag赋值为2(二进制的00000010)我们能制造一个SYN的TCP报文,通过大量发送这个报文可以实现SYN Flood的效果。

但是为了进行IP欺骗从而隐藏自己,也为了躲避服务器的SYN Cookie检查,还需要直接对IP首部进行操作:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 版本| 长度| 八位服务类型| 十六位总长度|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 十六位标识| 标志| 十三位片偏移|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 八位生存时间| 八位协议| 十六位首部校验和|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 三十二位源IP地址|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 三十二位目的IP地址|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 选项(若有)|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 数据|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+图三IP首部结构同样定义一个IP_HEADER来存放IP首部typedef struct _iphdr{unsigned char h_verlen; //4位首部长度+4位IP版本号unsigned char tos; //8位服务类型TOSunsigned short total_len; //16位总长度(字节)unsigned short ident; //16位标识unsigned short frag_and_flags; //3位标志位unsigned char ttl; //8位生存时间TTLunsigned char proto; //8位协议号(TCP, UDP 或其他)unsigned short checksum; //16位IP首部校验和unsigned int sourceIP; //32位源IP地址unsigned int destIP; //32位目的IP地址}IP_HEADER;然后通过SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERL APPED));建立一个原始套接口,由于我们的IP源地址是伪造的,所以不能指望系统帮我们计算IP校验和,我们得在在setsockopt中设置IP_HDRINCL告诉系统自己填充IP首部并自己计算校验和:flag=TRUE;setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));IP校验和的计算方法是:首先将IP首部的校验和字段设为0(IP_HEADER.checksum=0),然后计算整个IP首部(包括选项)的二进制反码的和,一个标准的校验和函数如下所示:USHORT checksum(USHORT *buffer, int size){unsigned long cksum=0;while(size >1) {cksum+=*buffer++;size -=sizeof(USHORT);}if(size ) cksum += *(UCHAR*)buffer;cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >>16);return (USHORT)(~cksum);}这个函数并没有经过任何的优化,由于校验和函数是TCP/IP协议中被调用最多函数之一,所以一般说来,在实现TCP/IP栈时,会根据操作系统对校验和函数进行优化。

相关文档
最新文档