Linux 内核存在 TCP 安全漏洞(CVE-2018-5390)

作者:启明星辰ADLab

0x01 漏洞简介

2018年7月15日,国外安全研究人员Juha-Matti Tilli发现并报告了Linux内核的TCP安全漏洞(CVE-2018-5390),该漏洞可允许远程攻击者无需任何权限在受影响的Linux设备上导致远程拒绝服务。

内核4.9及以上的Linux版本均受该漏洞影响,受影响的设备包括安装了上述内核的计算机平台及Linux嵌入式设备。

为保障企业及机构业务的安全,消除安全隐患,应对可能发生的攻击事件,启明星辰ADLab实验室提醒大家尽快进行系统升级。

0x02 漏洞分析

2018年7月23日,Linux社区修复了CVE-2018-5390漏洞;2018年8月6号,针对该漏洞的内核补丁发布,漏洞得以公开。启明星辰ADLab第一时间对该漏洞进行了跟踪分析。

由于网络原因,在进行TCP通信时会出现TCP包乱序的情况。Linux内核在处理TCP乱序包时会进入快速响应模式,将乱序的包文按序列号大小顺序进行重新排序;为此,Linux内核设置了2个队列:乱序队列及按序队列,乱序队列存放乱序的报文,按序队列存放顺序的报文。

若乱序队列中有报文暂存,Linux内核每收到一个报文都将调用tcp_prune_queue函数,tcp_prune_queue函数会调用tcp_collapse_ofo_queuetcp_prune_ofo_queue函数进行乱序包队列调整及排序操作,以便将乱序的报文顺序化。

tcp_prune_queue函数主要流程如下:

tcp_clollapse_ofo_queue函数主要流程如下:

tcp_prune_ofo_queue函数主要流程如下:

当乱序包队列的包数量比较大时(默认的队列内存大小为6M,假设每个TCP包大小为576字节,则队列中有10000多个包),Linux内核会对乱序队列进行全队列的红黑树查找排序及内存调整。该调整及排序方法的复杂指数很高且十分耗时,这种立即处理且耗时的运算容易消耗大量CPU资源。

针对该情况,攻击者可以通过发送大量的恶意数据包使得接收方主机频繁进行排序及队列调整操作,造成接收方主机的CPU占比达到极高,从而导致主机拒绝服务。

攻击者攻击时需要满足以下条件:

  1. 攻击者和受攻击方之间进行TCP数据传输。
  2. 攻击者通过多个IP向受攻击方发送大量的足够小的TCP包,并注入相关的包引发乱序情况。

该漏洞首次出现在2016年12月发布的Linux内核4.9版本中,4.9版本的Linux内核在处理TCP堵塞机制时引进了谷歌推荐的BBR算法,对TCP机制进行了较大的调整,这种调整使得Linux内核更容易受到DDOS攻击。

为了应对这种恶意的TCP包攻击,Linux内核增加了对恶意包的判断:如果乱序队列中恶意包的数量过多,则不进行排序,以减少CPU开销。主要的修改点包括:

  1. tcp_prune_queue函数增加了sk->sk_rmem_alloc的判断:当sk->sk_rmem_alloc小于sk->sk_rcvbuf时,直接返回;减少调用tcp_collapse_ofo_queuetcp_collapsetcp_prune_ofo_queue函数的次数。
  2. tcp_prune_ofo_queue函数中,删除了每次循环操作都要进行内存申请的代码,只有在队列缓冲大小已经处理至少12.5%后,才进行内存申请。
  3. tcp_collapse_ofo_queue函数中,增加了检测恶意包的代码,当认为有恶意攻击时,函数就直接返回。

0x03 漏洞影响

该漏洞影响Linux内核4.9及以上的各版本系统,影响的设备包括安装了上述内核的计算机平台及Linux嵌入式设备,几乎涉及所有厂家:比如亚马逊、苹果、Ubuntu和ZvXEL。

目前已知的受影响系统包括但不限于:

  • RHEL 6 and 7
  • RHEL 7 for Real Time
  • RHEL 7 for ARM64 systems,
  • RHEL 7 for IBM POWERsystems
  • RHEL Atomic Hos
  • Ubuntu 18.04 LTS(BionicBeaver)
  • Ubuntu 16.04 LTS(XenialXerus)
  • JuniperJunos
  • OracleLinux 7

0x04 处置建议

为保障业务的安全,消除安全隐患,应对可能发生的攻击事件,我们对后续工作建议如下:

  1. 检查系统版本。Linux已发布针对该漏洞的内核补丁,如果系统在受影响范围内,,尽快下载并更新系统补丁。
  2. 监控CPU异常,及时发现CPU占用较高的情况。
  3. 防护策略配置。对长时连接且短时发送大量数据的IP进行监控,发现恶意IP并及时在防火墙上进行屏蔽。

漏洞链接:
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git/commit/?id=1a4f14bab1868b443f0dd3c55b689a478f82e72e//git.kernel.org/pub/scm/linux/kernel/git/davem/net.git/commit/?id>
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-5390//cve.mitre.org/cgi-bin/cvename.cgi?name>


启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员。截止目前,ADLab通过CVE发布Windows、Linux、Unix等操作系统安全或软件漏洞近400个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。