allbet代理:TCP 重置攻击的事情原理

admin 3个月前 (07-05) 科技 47 1

原文链接:https://fuckcloudnative.io/posts/deploy-k3s-cross-public-cloud/

TCP 重置攻击 是使用一个单一的数据包来执行的,只有几个字节巨细。攻击者制作并发送一个伪造的 TCP 重置包来滋扰用户和网站的毗邻,诱骗通讯双方终止 TCP 毗邻。我们伟大的 xx 长城便运用了这个手艺来举行 TCP 关键字阻断。

明白 TCP 重置攻击并不需要具备深挚的网络知识功底,只需要一台笔记本就可以对自己举行模拟攻击。本文将会带你领会 TCP 重置攻击的原理,同时会辅助你明白许多关于 TCP 协议的特征。本文主要内容:

  • 回首 TCP 协议的基础知识
  • 领会 TCP 重置攻击的原理
  • 使用一个简朴的 Python 脚原本模拟攻击

下面最先剖析 TCP 重置攻击原理。

1. 伟大的 xx 长城是若何行使 TCP 重置攻击的?

这一段略过,缘故原由你明白,感兴趣的请直接看原文。

2. TCP 重置攻击的事情原理

在 TCP 重置攻击中,攻击者通过向通讯的一方或双方发送伪造的新闻,告诉它们立刻断开毗邻,从而使通讯双方毗邻中止。正常情形下,若是客户端收发现到达的报文段对于相关毗邻而言是不准确的,TCP 就会发送一个重置报文段,从而导致 TCP 毗邻的快速拆卸。

TCP 重置攻击行使这一机制,通过向通讯方发送伪造的重置报文段,诱骗通讯双方提前关闭 TCP 毗邻。若是伪造的重置报文段完全真切,吸收者就会以为它有用,并关闭 TCP 毗邻,防止毗邻被用来进一步交流信息。服务端可以确立一个新的 TCP 毗邻来恢复通讯,但仍然可能会被攻击者重置毗邻。万幸的是,攻击者需要一定的时间来组装和发送伪造的报文,以是一样平常情形下这种攻击只对长毗邻有杀伤力,对于短毗邻而言,你还没攻击呢,人家已经完成了信息交流。

从某种意义上来说,伪造 TCP 报文段是很容易的,由于 TCP/IP 都没有任何内置的方式来验证服务端的身份。有些特殊的 IP 扩展协议(例如 IPSec)确实可以验证身份,但并没有被普遍使用。客户端只能吸收报文段,并在可能的情形下使用更高级别的协议(如 TLS)来验证服务端的身份。但这个方式对 TCP 重置包并不适用,由于 TCP 重置包是 TCP 协议自己的一部门,无法使用更高级别的协议举行验证。

只管伪造 TCP 报文段很容易,但伪造准确的 TCP 重置报文段并完成攻击却并不容易。为了明白这项事情的难度,我们需要先领会一下 TCP 协议的事情原理。

3. TCP 协议事情原理

TCP 协议的目的是向客户端发送一份完整的数据副本。例如,若是我的服务器通过 TCP 毗邻向你的盘算机发送我的网站的 HTML,你的盘算机的 TCP 协议栈应该能够以我发送的形式和顺序输出 HTML

然而现实生活中我的 HTML 内容并不是按顺序发送的,它被分解成许多小块(称为 TCP 分组),每个小块在网络上被单独发送,并被重新组合成原来发送的顺序。这种重新组合后的输出被称为 TCP 字节省

将分组重建成字节省并不简朴,由于网络是不可靠的。TCP分组可能会被抛弃,可能不按发送的顺序到达客户端,也可能会被重复发送、报文损坏等等。因此,TCP 协议的职责是在不可靠的网络上提供可靠的通讯。TCP 通过要求毗邻双方保持密切联系,延续讲述它们吸收到了哪些数据来实现可靠通讯,这样服务端就能够推断出客户端尚未吸收到的数据,并重新发送丢失的数据。

为了进一步明白这个历程,我们需要领会服务端和客户端是若何使用序列号(sequence numbers)来符号和跟踪数据的。

TCP 序列号

TCP 协议的通讯双方, 都必须维护一个序列号(sequence numbers),对于客户端来说,它会使用服务端的序列号来将吸收到的数据凭据发送的顺序排列。

当通讯双方确立 TCP 毗邻时,客户端与服务端都市向对方发送一个随机的初始序列号,这个序列号标识了其发送数据流的第一个字节。TCP 报文段包罗了 TCP 头部,它是附加在报文段开头的元数据,序列号就包罗在 TCP 头部中。由于 TCP 毗邻是双向的,双方都可以发送数据,以是 TCP 毗邻的双方既是发送方也是吸收方,每一方都必须分配和治理自己的序列号。

确认应答

当吸收方收到一个 TCP 报文段时,它会向发送方返回一个 ACK 应答报文(同时将 TCP 头部的 ACK 标志位置 1),这个 ACK 号就示意吸收方期望从发送方收到的下一个字节的序列号。发送方行使这个信息来推断吸收方已经乐成吸收到了序列号为 ACK 之前的所有字节。

TCP 头部花样如下图所示:

allbet代理:TCP 重置攻击的事情原理 第1张

一个确认应答报文的 TCP 头部必须包罗两个部门:

  • ACK 标志位置位 1
  • 包罗确认应答号(ACK number)

TCP 总共有 6 个标志位,下文就会讲到其中的 RST 标志位。

allbet代理:TCP 重置攻击的事情原理 第2张

TCP 头部包罗了多个选项,其中有一个选择确认选项(SACK),若是使用该选项,那么当吸收方收到了某个局限内的字节而不是延续的字节时,就会发送 SACK 见告对方。例如,只收到了字节 1000~30004000~5000,但没有收到 3001~3999。为了简朴起见,下文讨论 TCP 重置攻击时将忽略选择确认选项。

若是发送方发送了报文后在一段时间内没有收到 ACK,就以为报文丢失了,并重新发送报文,用相同的序列号符号。这就意味着,若是吸收方收到了重复的报文,可以使用序列号来判断是否见过这个报文,若是见过则直接抛弃。网络环境是错综复杂的,往往并不是如我们期望的一样,先发送的数据包,就先到达目的主机,反而它很骚,可能会由于网络拥堵等杂乱无章的缘故原由,会使得旧的数据包,先到达目的主机。一样平常分两种情形:

  1. 发送的数据包丢失了
  2. 发送的数据包被乐成吸收,但返回的 ACK 丢失了

这两种情形对发送方来说其实是一样的,发送方并不能区分是哪种情形,以是只能重新发送数据包。

allbet代理:TCP 重置攻击的事情原理 第3张

只要不频仍重复发送数据,分外的开销基本可以忽略。

为伪造的重置包选择序列号

构建伪造的重置包时需要选择一个序列号。吸收方可以吸收序列号不按顺序排列的报文段,但这种容忍是有限度的,若是报文段的序列号与它期望的相差甚远,就会被直接抛弃。

因此,一个乐成的 TCP 重置攻击需要构建一个可信的序列号。但什么才是可信的序列号呢?对于大多数报文段(除了重置包,即 RST 包)来说,序列号是由吸收方的吸收窗口巨细决议的。

TCP 滑动窗口巨细

想象一下,将一台上世纪 90 年代初的古老盘算机,毗邻到现代千兆光纤网络。闪电般快速的网络可以以令人瞠目结舌的速率向这台古老的盘算机传送数据,速率远远跨越该盘算机的处置能力。但并没有什么卵用,由于只有吸收方吸收并处置了报文,才气以为这个报文已经被收到了。

allbet代理:TCP 重置攻击的事情原理 第4张

TCP 协议栈有一个缓冲区,新到达的数据被放到缓冲区中守候处置。但缓冲区的巨细是有限的,若是吸收方的处置速率跟不上发送方的发送速率,缓冲区就会被填满。一旦缓冲区被填满,多余的数据就会被直接抛弃,也不会返回 ACK。因此一旦吸收方的缓冲区有了空位,发送方必须重新发送数据。也就是说,若是吸收方的处置速率跟不上,发送方的发送速率再快也没用。

缓冲区到底有多大?发送方若何才气知道什么时候可以一次发送更多的数据,什么时候该一次发送很少的数据?这就要靠 TCP 滑动窗口了。吸收方的滑动窗口巨细是指发送方无需守候确认应答,可以延续发送数据的最大值。 假设吸收方的通告窗口巨细为 100,000 字节,那么发送方可以无需守候确认应答,延续发送 100,000 个字节。再假设当发送方发送第 100,000 个字节时,吸收方已经发送了前 10,000 个字节的 ACK,这就意味着窗口中另有 90,000 个字节未被确认,发送方还可以再延续发送 10,000 个字节。若是发送了 10,000 个字节的历程中没有收到任何的 ACK,那么吸收方的滑动窗口将被填满,发送方将住手发送新数据(可以继续发送之前丢失的数据),直到收到相关的 ACK 才可以继续发送。

allbet代理:TCP 重置攻击的事情原理 第5张

TCP 毗邻双方会在确立毗邻的初始握手阶段通告对方自己窗口的巨细,后续还可以动态调整。TCP 缓冲区大的服务器可能会声明一个大窗口,以便最大限度提高吞吐量。TCP 缓冲区小的服务器可能会被迫声明一个小窗口,这样做会牺牲一定的吞吐量,但为了防止吸收方的 TCP 缓冲区溢出,照样很有需要的。

allbet代理:TCP 重置攻击的事情原理 第6张

换个角度来看,TCP 滑动窗口巨细是对网络中可能存在的未确认数据量的硬性限制。我们可以用它来盘算发送方在某一特定时间内可能发送的最大序列号(max_seq_no):

max_seq_no = max_acked_seq_no + window_size

其中 max_acked_seq_no 是吸收方发送的最大 ACK 号,它示意发送方知道吸收方已经乐成吸收的最大序列号。window_size 是窗口巨细,它示意允许发送方最多发送的未被确认的字节。以是发送方可以发送的最大序列号是:max_acked_seq_no + window_size

TCP 规范划定,吸收方应该忽略任何序列号在吸收窗口之外的数据。例如,若是吸收方确认了所有序列号在 15,000 以下的字节,且吸收窗口巨细为 30,000,那么接下来吸收方只能吸收序列号局限在 15,000 ~ 45,000 之间的数据。若是一个报文段的部门数据在窗口内,另一部门数据在窗口外,那么窗口内的数据将被吸收确认,窗口外的数据将被抛弃。注重:这里忽略了选择确认选项,再强调一遍!

对于大多数 TCP 报文段来说,滑动窗口的规则告诉了发送方自己可以吸收的序列号局限。但对于重置报文来说,序列号的限制加倍严酷,这是为了抵御一种攻击叫做盲目 TCP 重置攻击(blind TCP reset attack),下文将会注释。

TCP 重置报文段的序列号

对于 TCP 重置报文段来说,吸收方对序列号的要求加倍严酷,只有当其序列号正好即是下一个预期的序列号时才气吸收。继续搬出上面的例子,吸收方发送了一个确认应答,ACK 号为 15,000。若是接下来收到了一个重置报文,那么其序列号必须是 15,000 才气被吸收。

allbet代理:TCP 重置攻击的事情原理 第7张

若是重置报文的序列号超出了吸收窗口局限,吸收方就会直接忽略该报文;若是其序列号在吸收窗口局限内,那么吸收方就会返回一个 challenge ACK,告诉发送方重置报文段的序列号是错误的,并告之准确的序列号,发送方可以行使 challenge ACK 中的信息来重新构建和发送重置报文。

其实在 2010 年之前,TCP 重置报文段和其他报文段的序列号限制规则一样,但无法抵御盲目 TCP 重置攻击,厥后才接纳这些措施施加分外的限制。

盲目 TCP 重置攻击

若是攻击者能够截获通讯双方正在交流的信息,攻击者就能读取其数据包上的序列号和确认应答号,并行使这些信息得出伪装的 TCP 重置报文段的序列号。相反,若是无法截获通讯双方的信息,就无法确定重置报文段的序列号,但仍然可以批量发出尽可能多差别序列号的重置报文,以期望猜对其中一个序列号。这就是所谓的盲目 TCP 重置攻击(blind TCP reset attack)。

在 2010 年之前 TCP 的原始版本中,攻击者只需要猜对吸收窗口内的随便哪一个序列号即可,一样平常只需发送几万个报文段就能乐成。接纳分外限制的措施后,攻击者需要发送数以百万计的报文段才有可能猜对序列号,这几乎是很难乐成的。更多细节请参考 RFC-5963。

4. 模拟攻击

以下实验是在 OSX 系统中完成的,其他系统请自行测试。

现在来总结一下伪造一个 TCP 重置报文要做哪些事情:

  • 嗅探通讯双方的交流信息。
  • 截获一个 ACK 标志位置位 1 的报文段,并读取其 ACK 号。
  • 伪造一个 TCP 重置报文段(RST 标志位置为 1),其序列号即是上面截获的报文的 ACK 号。这只是理想情形下的方案,假设信息交流的速率不是很快。大多数情形下为了增添乐成率,可以延续发送序列号差别的重置报文。
  • 将伪造的重置报文发送给通讯的一方或双方,时其中止毗邻。

为了实验简朴,我们可以使用内陆盘算机通过 localhost 与自己通讯,然后对自己举行 TCP 重置攻击。需要以下几个步骤:

  1. 在两个终端之间确立一个 TCP 毗邻。
  2. 编写一个能嗅探通讯双方数据的攻击程序。
  3. 修改攻击程序,伪造并发送重置报文。

下面正式最先实验。

确立 TCP 毗邻

可以使用 netcat 工具来确立 TCP 毗邻,这个工许多操作系统都预装了。打开第一个终端窗口,运行以下下令:

$ nc -nvl 8000

这个下令会启动一个 TCP 服务,监听端口为 8000。接着再打开第二个终端窗口,运行以下下令:

$ nc 127.0.0.1 8000

该下令会实验与上面的服务确立毗邻,在其中一个窗口输入一些字符,就会通过 TCP 毗邻发送给另一个窗口并打印出来。

allbet代理:TCP 重置攻击的事情原理 第8张

嗅探流量

编写一个攻击程序,使用 Python 网络库 scapy 来读取两个终端窗口之间交流的数据,并将其打印到终端上。完整的代码参考我的 GitHub 堆栈,代码的焦点是挪用 scapy 的嗅探方式:

t = sniff(
        iface='lo0',
        lfilter=is_packet_tcp_client_to_server(localhost_ip, localhost_server_port, localhost_ip),
        prn=log_packet,
        count=50)

这段代码告诉 scapylo0 网络接口上嗅探数据包,并纪录所有 TCP 毗邻的详细信息。

  • iface : 告诉 scapy 在 lo0(localhost)网络接口上举行监听。
  • lfilter : 这是个过滤器,告诉 scapy 忽略所有不属于指定的 TCP 毗邻(通讯双方皆为 localhost,且端口号为 8000)的数据包。
  • prn : scapy 通过这个函数来操作所有相符 lfilter 规则的数据包。上面的例子只是将数据包打印到终端,下文将会修改函数来伪造重置报文。
  • count : scapy 函数返回之前需要嗅探的数据包数目。

发送伪造的重置报文

下面最先修改程序,发送伪造的 TCP 重置报文来举行 TCP 重置攻击。凭据上面的解读,只需要修改 prn 函数就行了,让其检查数据包,提取需要参数,并行使这些参数来伪造 TCP 重置报文并发送。

例如,假设该程序截获了一个从(src_ip, src_port)发往 (dst_ip, dst_port)的报文段,该报文段的 ACK 标志位已置为 1,ACK 号为 100,000。攻击程序接下来要做的是:

  • 由于伪造的数据包是对截获的数据包的响应,以是伪造数据包的源 IP/Port 应该是截获数据包的目的 IP/Port,反之亦然。
  • 将伪造数据包的 RST 标志位置为 1,以示意这是一个重置报文。
  • 将伪造数据包的序列号设置为截获数据包的 ACK 号,由于这是发送方期望收到的下一个序列号。
  • 挪用 scapysend 方式,将伪造的数据包发送给截获数据包的发送方。

对于我的程序而言,只需将这一行作废注释,并注释这一行的上面一行,就可以周全攻击了。凭据步骤 1 的方式设置 TCP 毗邻,打开第三个窗口运行攻击程序,然后在 TCP 毗邻的其中一个终端输入一些字符串,你会发现 TCP 毗邻被中止了!

allbet代理:TCP 重置攻击的事情原理 第9张

进一步实验

  1. 可以继续使用攻击程序举行实验,将伪造数据包的序列号加减 1 看看会发生什么,是不是确实需要和截获数据包的 ACK 号完全相同。
  2. 打开 Wireshark,监听 lo0 网络接口,并使用过滤器 ip.src == 127.0.0.1 && ip.dst == 127.0.0.1 && tcp.port == 8000 来过滤无关数据。你可以看到 TCP 毗邻的所有细节。
  3. 在毗邻上更快速地发送数据流,使攻击更难执行。

总的来说,TCP 重置攻击既深奥又简朴,祝你实验顺遂。

Kubernetes 1.18.2 1.17.5 1.16.9 1.15.12离线安装包公布地址http://store.lameleg.com ,迎接体验。 使用了最新的sealos v3.3.6版本。 作了主机名剖析设置优化,lvscare 挂载/lib/module解决开机启动ipvs加载问题, 修复lvscare社区netlink与3.10内核不兼容问题,sealos天生百年证书等特征。更多特征 https://github.com/fanux/sealos 。迎接扫描下方的二维码加入钉钉群 ,钉钉群已经集成sealos的机器人实时可以看到sealos的动态。

allbet代理:TCP 重置攻击的事情原理 第10张

,

欧博官网手机

欢迎进入欧博官网手机(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

Allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:allbet代理:TCP 重置攻击的事情原理

网友评论

  • (*)

最新评论

  • UG环球官网开户网址 2020-07-05 00:11:37 回复

    联博统计www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。跟别的文不一样

    1

文章归档

站点信息

  • 文章总数:480
  • 页面总数:0
  • 分类总数:8
  • 标签总数:948
  • 评论总数:151
  • 浏览总数:5598