Linux 内核 TCP MSS 机制详细分析

本文通过Linux内核源码分析TCP MSS机制,详细解释了如何设置和影响MSS值,包括iptables、route命令以及内核源码中的tcp_output.c相关部分。测试环境中,作者在尝试复现CVE-2019-11477漏洞时,发现MSS设置问题,深入研究发现内核不会允许MSS值低于48,因为计算时会考虑TCP头部大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:Hcamael@知道创宇 404 实验室
时间:2019 年 6 月 26 日
英文版本:https://paper.seebug.org/967/

前言

上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了。[2][3]

而我在尝试复现CVE-2019-11477漏洞的过程中,在第一步设置MSS的问题上就遇到问题了,无法达到预期效果,但是目前公开的分析文章却没对该部分内容进行详细分析。所以本文将通过Linux内核源码对TCP的MSS机制进行详细分析。

测试环境

  1. 存在漏洞的靶机
    操作系统版本:Ubuntu 18.04

内核版本:4.15.0-20-generic

地址:192.168.11.112

内核源码:

$ sudo apt install linux-source-4.15.0
$ ls /usr/src/linux-source-4.15.0.tar.bz2
带符号的内核:

$ cat /etc/apt/sources.list.d/ddebs.list
deb http://ddebs.ubuntu.com/ bionic main
deb http://ddebs.ubuntu.com/ bionic-updates main
$ sudo apt install linux-image-4.15.0-20-generic-dbgsym
$ ls /usr/lib/debug/boot/vmlinux-4.15.0-20-generic
关闭内核地址随机化(KALSR):

内核是通过grup启动的,所以在grup配置文件中,内核启动参数里加上nokaslr

$ cat /etc/default/grub |grep -v “#” | grep CMDLI
GRUB_CMDLINE_LINUX_DEFAULT=“nokaslr”
GRUB_CMDLINE_LINUX=""
$ sudo update-grub
装一个nginx,供测试:

$ sudo apt install nginx
2. 宿主机
操作系统:MacOS

Wireshark:抓流量

虚拟机:VMware Fusion 11

调试Linux虚拟机:

$ cat ubuntu_18.04_server_test.vmx|grep debug
debugStub.listen.guest64 = “1”
编译gdb:

$ ./configure --build=x86_64-apple-darwin --target=x86_64-linux --with-pytho

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值