查看原文
其他

TCP-RST 攻击与防护,看这一篇就够了

The following article is from tobe的呓语 Author tobe

1

“小黑,听说昨天晚上你把张大胖揍了一顿啊,咋回事儿?”

“张大胖这个家伙,看我不顺眼,居然用什么「ARP 攻击」让我打不了游戏!你说我能不教训他么?”

关于 ARP 攻击事件,看这篇:一次成功的黑客欺骗攻击,没想到结局如此悲催

“这。。。”小李满头黑线,弱弱的说:“不是说你晚上打游戏太晚吵到他们了么。。。”

“蛤?张大胖晚上外放抖音我都没说啥,他还好意思嫌弃我?”

“搞了半天你们俩也是半斤八两。”小李心里这么想,但嘴上可不敢表现出来,就劝他:“那舍友之间也不能动粗啊,低头不见抬头见的,都是大学生了,还是不要打架为好,再说了,对付他的 ARP 攻击,只用设置一个静态的 ARP 映射表就可以了,比你打他一顿都快。”

“真有你说的那么简单?我还以为这东西复杂的很呢。”

“哪儿有,ARP 攻击可以说是最基础的攻击手段了,还有不少简单的网络攻击手段,像什么「TCP-RST 攻击」,「DNS 缓存攻击」,「TCP SYN拒绝服务攻击」等等,用到的知识也都是咱们计算机网络上学过的。”

这句话仿佛给小黑打开了一扇崭新的大门,他一脸坏笑的看着小李:“嘿嘿,你说我用这些攻击手段让张大胖晚上看不了视频怎么样?”

小李心里咯噔一下,意识到自己刚刚说了不该说的话,支支吾吾的说:“这个嘛,,,从技术上说没什么问题,你们又是在一个局域网下,实施起来还会更方便。”

“nice~那你教教我,怎么执行你说的那些攻击手段?”

2

小李转念一想,教给小黑技术总比让他打人要好,于是说:“那我先教你 TCP RST 攻击 吧,不过这个手段涉及到 TCP 协议,我得知道你对 TCP 协议了解的清不清楚。”

小黑拍拍胸脯:“TCP 协议,不就是三次握手,四次分手嘛,我记得可清楚了!”

“是四次挥手。。。意思差不多吧。”

“呀,我是真的记得,「分手」只是是为了好记!不信你听我给你讲,TCP 是面向连接的可靠的运输协议,当客户进程想要通过 TCP 协议与服务端进程通信时,就需要与服务器进行三次握手,其实就是来回发送三个数据包,具体的过程是这样的:

等到握手完毕,客户端进程和服务端进程之间就建立起了一条「虚拟管道」,通过这条管道,两个进程之间就能够互相传递消息了:

最后,如果客户端发现通信结束,可以关闭连接时,就向服务器发送终止报文,开始「四次挥手」:

四次挥手完,客户端进程和服务端进程就会主动把这条连接关闭,通信也就结束了。”

小李惊叹:“woc!没想到你小子竟然记得这么清楚!还真是小看你了!”

“哈哈,当时咱老师不是说 TCP 三次握手啥的必考嘛,我就给记下来了,而且我觉得这些协议挺有意思,所以一直没忘~”小黑得意之情溢于言表。

3

“那看来今天这「TCP-RST 攻击」你很容易就能理解了,像你刚刚讲到的,客户端利用标志位 SYN 请求与服务器握手,利用 FIN 标志位通知服务器断开连接,这两个是正常情况下使用的标志位。但 TCP 报文的标志位有 6 个,除了 FIN ,还有一个标志位也可以断开 TCP 连接,你还记不记得?”

“这些细节我早忘记了。。。”

小李哈哈一笑:“看来还是有你没记住的嘛,我这儿有 TCP 报文的结构图,你看:

注意到 RST 标志位了吗?这就是 RST 攻击的关键。”

“我看看,「重置连接」?处理异常的时候用吗?”

“对的,如果客户端或者服务器认为现在发生了异常,就会向对方发送 RST 报文,一个常见的例子就是,客户端向服务器发起连接,但服务器发现自己并没有正在监听该端口的进程,肯定就不能进行第二次握手啊,他就会给客户端发送 RST 包,表示出现了异常。客户端收到 RST 包后,知道服务器那边出现了异常,就强制切断自己这边的连接。

小黑恍然大悟:“也就是说,我只要伪装服务器,给张大胖的电脑发送 RST 包,就能强制关闭他的 TCP 连接?”

小李点点头:“这就是 TCP-RST 攻击,如果你持续发出 RST 包,会导致张大胖的网络「卡顿」,因为他的 TCP 连接被强制中断了:

但是 RST 攻击并不能阻止所有的 TCP 连接,比如说张大胖在浏览一些简单网页的时候,阻断率就不高,因为等到 RST 包到达张大胖电脑的时候,页面内容就已经传输结束了。”

4

“我听明白了,那伪造 TCP 报文有什么需要注意的吗?”

“伪造 RST 包还有点门道的,最关键的两个因素是源端口和序列号你也知道,一个 TCP 连接是由「客户端端口,客户端 IP,服务端端口,服务端 IP」这四个信息唯一确定的,所以你首先需要知道这四个信息,不过这对你来说不是问题,因为你和张大胖在一个局域网,你很容易就能截获张大胖和服务器之间的数据包,然后找到它们。所以麻烦在于序列号。”

“序列号?要这有什么用?”

“诶,你可别忘了 TCP 的滑动窗口!”

“啊,我想起来了,如果序列号不在滑动窗口范围内,这个数据包会被直接丢弃,即使是 RST 包也不例外,所以我还得保证序列号落在接收方的滑动窗口才行啊!可这我怎么能保证啊?”

“不能保证,所以就暴力尝试喽,反正只要有一个 RST 包的序列号在范围内,你就成功了。”

“有道理,我今天晚上就去教训教训这个张大胖,让他见识一下真正的网络攻击!”

5

当天晚上,其他舍友们惊奇的发现,张大胖居然没有外放抖音了!小黑也难得的没有玩游戏,不知道在电脑上捯饬着什么。

咱也不知道,咱也不敢问。



后台回复“加群”,带你进入高手如云交流群


推荐阅读:

5G 还没搞懂,又来了个 WiFi 6,真香!

探究!一个数据包在网络中的心路历程

牛逼的Linux性能剖析—perf

HTTPS 的 7 次握手以及 9 倍时延

利用Nextcloud搭建个人私有网盘

如何快速排查线上 Linux 系统故障?

当初我要是这么学习操作系统就好了

一文读懂Linux进程、进程组、会话、僵尸

五分钟带你读懂TCP协议(图文并茂)

NFV和SDN之间到底有什么关系?

云计算大势下,开发者该如何提升竞争力?

Linux后台服务启动方式systemd、daemon、nohup大比拼

Linux 程序编译过程的来龙去脉

一文搞定 UDP 和 TCP 高频面试题!

海量的超赞 Linux 软件

Linux主流发行版本配置IP总结




喜欢,就给我一个“在看”



10T 技术资源大放送!包括但不限于:云计算、虚拟化、微服务、大数据、网络、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公众号内回复「1024」,即可免费获取!!

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存