TCP off-path exploits(又一个弄巧成拙的例子)
承接前面几篇文章的观点,本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题,会引入多么大的麻烦,这次是可怕的被攻击 (⊙o⊙)。
TCP 端口号只有 16bit,序列号只有 32bit,这意味着在强大攻击算力面前,它很容易会被 Blind In-Window Attacks 伤害。比如,如果一个针对知名服务器 80 端口的攻击者恰好猜对了 sport,并且使用 in_window 的序列号伪造了 SYN 报文(or RST,Data…)发给服务端,服务器将重置正常的连接,这种攻击随着主机内存的增加从而 window 的增加而更加容易。
为了让这种 Blind In-Window Attacks 更难以实施,RFC5961 引入了 Challenge ACK 的概念,如果收到莫名其妙的异常报文(比如异常 SYN,RST),将重置的责任推给发送方:
- 向发送方发一个 Challenge ACK,如果果真是发送方发生了异常,收到 Challenge ACK 后自然会自行 RST 连接,否则就是遭受了 Blind In-Window Attack。
多么好的创意,却弄巧成拙。
设计者意识到 Blind In-Window Attacks 可能会带来海量的 Challenge ACK 报文注入网络占用带宽资源,从而导致另一类 DDoS Attack,于是提出 ACK Throttling 方案:在固定时间段(比如 1 分钟)只发送固定数量(比如 100)个 Challenge ACK。
是不是很完美?是也不是,说 “是” 因为想到的问题都解决了,说 “不是” 因为总有想不到的。下面是一个闭环:
- 为解决 Blind In-Win Attacks => 引入 Challenge ACK => 造成潜在 DDoS => 引入 ACK Throttling => 为 Blind In-Win Attack 提供了有效信息 => Blind In-Win Attack 实施更容易,不再 Blind!
下面是一个攻击图示:

如 Linux 常规配置的 Throttling thresh 是 1 分钟 100 次,攻击者只需要与熟知端口服务器创建正常连接,然后发送一个猜测的 sport,seq 携带 SYN 的报文,紧接着在 1 分钟内在合法连接 conn-2 中发送 100 个 In-Win 的 RST,如果攻击者收到了 100 个 Challenge ACK,说明猜错了,继续改变 sport,seq,如果它收到了 99 个 Challenge ACK,说明猜对了,因为有一个 Challenge ACK 发给了被攻击者 A,是不是很有趣?
紧接着,知道了 sport,攻击者便可以用同样的方法猜测 seq 和 ack 来注入数据了。是不是机关算计太聪明,反误了卿卿性命?
针对这(又一个,yet another)个问题,我曾经本想着提交一个派池,不再用固定的 threshold,而是用随机数,一会儿换一个,当我查代码时,发现在 4.7 版本已经更正了:
/* RFC 5961 7 [ACK Throttling] */
static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb)
{.../* Then check host-wide RFC 5961 rate limit. */now = jiffies / HZ;if (now != challenge_timestamp) {u32 half = (sysctl_tcp_challenge_ack_limit + 1) >> 1;challenge_timestamp = now;WRITE_ONCE(challenge_count, half +prandom_u32_max(sysctl_tcp_challenge_ack_limit));}count = READ_ONCE(challenge_count);if (count > 0) {WRITE_ONCE(challenge_count, count - 1);NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK);tcp_send_ack(sk);}
}
而在此之前,它长这样:
/* RFC 5961 7 [ACK Throttling] */
static void tcp_send_challenge_ack(struct sock *sk, const struct sk_buff *skb)
{.../* Then check the check host-wide RFC 5961 rate limit. */now = jiffies / HZ;if (now != challenge_timestamp) {challenge_timestamp = now;challenge_count = 0;}if (++challenge_count <= sysctl_tcp_challenge_ack_limit) {NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK);tcp_send_ack(sk);}
}
但天知道会不会有引入另一个问题,一定会。
讲这个故事的技术细节不是本意,我想表达的是,不要为解决一件小事而引入复杂的机制。回到 RFC5961 之前,SYN,RST 的 Blind In-Win Attack 发生多吗?成功概率大吗?不是因为它有可能发生就一定要去解决它。此外,针对安全问题,我一向的观点是 “不与陌生人说话”,你说的每句话都在透露信息,如果非要说,那么 “说谎,并且每次说不同的谎”,真相不重要,重要的是指纹,不要让人猜到你的特征。
浙江温州皮鞋湿,下雨进水不会胖。
相关文章:
TCP off-path exploits(又一个弄巧成拙的例子)
承接前面几篇文章的观点,本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题,会引入多么大的麻烦,这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit,序列号只有 32bit,这意味着在强大攻击算力面前&…...
Ajax总结
引言 这是属于前端的部分了,先是学习了三件套(HTML,JS,CSS没怎么学,但是大概能理解)之后就开始学习这个了,学习之前应该要知道她是做什么的,但是我没有做这一步,之后会先了解为什么要学习这门技…...
修改网络ip地址方法有哪些?常用的有这四种
在数字时代,IP地址作为网络设备的唯一标识,对于网络连接和通信至关重要。然而,有时候我们可能需要修改设备的IP地址,以满足特定的网络需求或解决网络问题。本文将为您详细介绍几种修改网络IP地址的常用方法,无论是对于…...
SpringBoot获取bean的几种方式
目录 一、BeanFactory与ApplicationContext的区别 二、通过BeanFactory获取 三、通过BeanFactoryAware获取 四、启动获取ApplicationContext 五、通过继承ApplicationObjectSupport 六、通过继承WebApplicationObjectSupport 七、通过WebApplicationContextUtils 八、通…...
Debian12 安装配置 ODBC for GaussDB
第一步 apt install -y unixodbc 第二步下载 dws_8.2.x_odbc_driver_for_x86_redhat.zip 到 /tmp,之后 cd /tmp unzip dws_8.2.x_odbc_driver_for_x86_redhat.zip cp lib/* /usr/local/lib cp odbc/lib/* /usr/local/lib echo /usr/local/lib >> /etc/ld…...
空中绘图板:用 Mediapipe 和 OpenCV 实现的创新手势识别应用
在这个数字化飞速发展的时代,手势识别技术正逐渐走入我们的日常生活,从智能家居到增强现实,无处不在。而今天,我将与大家分享一个充满创意和趣味的项目——空中绘图板。这个项目利用了强大的 Mediapipe 库和 OpenCV,实…...
讲一个自己写的 excel 转 html 的 java 工具
由来 这是一个从开发需求中诞生的工具,在工作中因为有一个 excel 转 html 的任务,又没找到一个专门做这方面的工具(其他工具几乎都是简单的转换,无法还原 excel 样式,而且转换的宽高有点儿差距)࿰…...
前端往后端传递参数的方式有哪些?
文章目录 1. URL 参数1.1. 查询参数(Query Parameters)1.2. 路径参数(Path Parameters) 2. 请求体(Request Body)2.1. JSON 数据2.2. 表单数据2.3. 文件上传 3. 请求头(Headers)3.1. 自定义请求…...
Vue axios 异步请求,请求响应拦截器
在 Vue.js 中使用 axios 进行网络请求是非常常见的做法,因为它提供了比原生的 Fetch API 更丰富的功能,并且更易于处理错误和配置。结合 Axios 的拦截器功能,你可以对所有的请求或响应进行预处理,比如添加认证头信息、统一处理错误…...
yarn install 安装报错:Workspaces can only be enabled in private projects.
在本地运行项目的时候,使用yarn install 安装模块依赖的时候,遇到报错:Workspaces can only be enabled in private projects. 一、原因分析 报这个错误是因为你使用了yarn的workspace,但并未将工程标记为private。 二、解决办法 …...
http 请求总结get
关于get请求传递body的问题 错误代码 有400 , 415 等情况 <!doctype html><html lang"zh"><head><title>HTTP Status 400 – 错误的请求</title><style type"text/css">body {font-family:Tahoma,Arial,sans-seri…...
TCP 和 UDP 的区别:解析网络传输协议
引言 在计算机网络的世界中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种极为重要且应用广泛的传输层协议。它们在功能、特性以及适…...
【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
起因: pyinstaller加上 --icon 参数打包时报错。 命令如下: 解决: 关闭 Windows 的病毒防护即可,步骤如下。 点屏幕右下角通知栏,进入“病毒和威胁防护”: 打开: 关闭实时保护(…...
SpringBoot项目配置文件的优先级
从外部讲 内部讲 所以优先级是:外部的config里的application.yml最高 然后是外部与jar包同目录下的application.yml 再到内部的classpath下config下的application.yml 最后到classpath下的application.yml 最后来个优先级最高的 启动时候 指定spring.config.location…...
JS中类型化数组(Typed Arrays)详解和常见应用场景
在JavaScript中,类型化数组(Typed Arrays) 是用于处理二进制数据的对象。它们允许我们以一种高效的方式操作和存储大量的数值数据,特别适合处理类似于图像、音频、视频等场景的原始二进制数据。 类型化数组的基本概念 类型化数组…...
虚幻引擎是什么?
Unreal Engine,是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计,但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏,现在也用于电影的虚拟制片…...
LabVIEW生物医学信号虚拟实验平台
介绍了一款基于LabVIEW的多功能生物医学信号处理实验平台的设计和实现。平台通过实践活动加强学生对理论的理解和应用能力,特别是在心电图(ECG)和脑电图(EEG)的信号处理方面。实验平台包括信号的滤波、特征提取和频谱分析等功能,能直观体验和掌握生物医学…...
【软件工程】十万字知识点梳理 | 期末复习专用
原创文章,禁止转载。 文章目录 图CRC卡片用例图类图状态图活动图泳道图软件质量因素自顶向下集成自底向上集成人员与工作量之间的关系时序图关键路径软件结构基本路径测试判定表数据流图(DFD)体系结构设计问题数据字典挣值分析等价划分程序流程图PAD | N-S燃尽图甘特图对象模…...
Android --- 在AIDL进程间通信中,为什么使用RemoteCallbackList 代替 ArrayList?
1.RemoteCallbackList vs ArrayList RemoteCallbackList 是一个特殊的 List,它用来管理跨进程的回调,特别是当回调对象是在不同进程中时。它在 AIDL(Android Interface Definition Language)通信中常常用来处理跨进程的通信。 Arr…...
ADC(二):外部触发
有关ADC的基础知识请参考标准库入门教程 ADC(二):外部触发 1、TIM1的CC1事件触发ADC1DMA重装载2、TIM3的TRGO事件(的更新事件)触发ADC1DMA重装载3、TIM3的TRGO事件(的捕获事件)触发ADC1DMA重装载4、优化TIM3的TRGO事件(的捕获事件)触发ADC1D…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
