“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

栏目: 服务器 · Linux · 发布时间: 7年前

内容简介:“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

2017-06-16 09:59:35 阅读:121次 来源: 启明星辰ADLAB

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

About “Phoenix Talon”

2017年5月9日,启明星辰ADLab发现 Linux 内核存在远程漏洞“Phoenix Talon”(取凤凰爪四趾之意),涉及CVE-2017-8890、CVE-2017-9075、CVE-2017-9076、CVE-2017-9077, 可影响几乎所有Linux kernel 2.5.69 ~Linux kernel 4.11的内核版本、对应的发行版本以及相关国产系统。 可导致远程 DOS,且在符合一定利用条件下可导致 RCE,包括传输层的TCP、DCCP、SCTP以及网络层的IPv4和IPv6协议均受影响。实际上该漏洞在 Linux 4.11-rc8 版本中已经被启明星辰ADLab发现,且后来的Linux 4.11 stable版同样存在此问题。 经研究这些漏洞在 Linux 内核中至少已经潜伏了11年之久,影响极为深远。

启明星辰ADLab已第一时间将“Phoenix Talon”漏洞反馈给了Linux 内核社区,漏洞上报后Linux社区在Linux 4.12-rc1中合并了修复该问题的补丁。

这些漏洞中以CVE-2017-8890最为严重(达到Linux内核漏洞两个评分标准的历史最高分,CVSS V2评分达到满分10.0,CVSS V3评分是历史最高分9.8,NVD上搜索历史上涉及Linux内核漏洞这样评分的漏洞不超过20个) ,以下分析以该漏洞为例,引用官方描述如下:

“The inet_csk_clone_lock function in net/ipv4/inet_connection_sock.c in the Linux kernel through 4.10.15 allows attackers to cause a denial of service (double free) or possibly have unspecified other impact by leveraging use of the accept system call.”

The Vulnerability

CVE-2017-8890本身是一个 double free 的问题,使用setsockopt()函数中MCAST_JOIN_GROUP选项,并调用accept()函数即可触发该漏洞。

接着先看看几个组播相关的数据结构:

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

该结构体的两个成员分别用于指定所加入的多播组的组IP地址和所要加入组的本地接口IP地址。ip_setsockopt()实现了该功能,它通过调用ip_mc_join_group()把socket加入到多播组。

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

其中sk.__sk_common.skc_rcv_saddr对于组播而言,只接收该地址发来的组播数据,对于单播而言,只从该地址所代表的网卡接收数据;mc_ttl为组播的ttl;mc_loop表示组播是否发向回路;mc_index表示组播使用的本地设备接口的索引;mc_addr表示组播源地址;mc_list为组播列表。

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

next_rcu指向链表的下一个节点;multi表示组信息,即在哪一个本地接口上,加入到哪一个多播组;sfmode是过滤模式,取值为MCAST_INCLUDE或MCAST_EXCLUDE,分别表示只接收sflist所列出的那些源的多播数据报和不接收sflist所列出的那些源的多播数据报;sflist是源列表。

下面分别从该漏洞内存分配的关键代码及二次释放的关键代码进行分析。

1、The Allocate

内存分配调用链:

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

使用setsockopt()函数中的MCAST_JOIN_GROUP选项。

net/socket.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

进入内核调用SyS_setsockopt()函数,level 设置的不为 SOL_SOCKET即可,一般设置为SOL_IP,在1798行处被调用。紧接着调用sock_common_setsockopt()函数。

net/ipv4/ip_sockglue.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

然后进入ip_setsockopt()函数,调用 do_ip_setsockopt()函数(1264行代码)。

net/ipv4/ip_sockglue.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

代码1019~1021行调用copy_from_user()将用户态的数据拷贝到内核态。之前已经将option设置为MCAST_JOIN_GROUP,紧接着调用ip_mc_join_group()函数:

net/ipv4/igmp.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

代码2128行sock_kmalloc()进行了内存分配。

2、The first free

在内核里无时无刻都在产生软中断,而此次漏洞涉及的软中断是由 accept()系统调用引起的,由于该函数本身作用于进程上下文,并不会产生软中断。但是调用 accept() 时,会在内核中诱发某种软中断产生,该软中断会调用rcu_process_callbacks()函数:

kernel/rcu/tree.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

__rcu_process_callbacks调用rcu_do_batch()函数,如下:

kernel/rcu/tree.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

注意代码中第2879行,函数__rcu_reclaim()实现如下:

kernel/rcu/rcu.h

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

在113行调用kfree()进行了第一次释放。

3、The second free

当断开TCP连接时,内核通过sock_close()函数直接调用sock_release()来实现断开功能,该函数会清空ops,更新全局 socket 数目,更新 inode 引用计数。随后进入到 inet_release()函数调用 tcp_close()函数来最终关闭 sock。

net/ipv4/af_inet.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

用户程序断开TCP连接时,内核里使用 ip_mc_drop_socket()函数进行回收。

net/ipv4/igmp.c

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞

代码2612行调用kfree_rcu()进行第二次释放。

Affected

1、受影响的内核版本

经研究,理论上Linux kernel 2.5.69 ~ Linux kernel 4.11的所有版本都受“Phoenix Talon”影响,且经开源社区验证“Phoenix Talon”漏洞影响的Linux内核版本部分列表如下:

Linux kernel

大版本

Linux kernel

小版本

Linux kernel

大版本

Linux kernel

小版本

2.6 

2.6 

3.0

3.0

2.6.1 

3.0.1 

2.6.11 

3.0.18

2.6.11.1

3.0.2 

2.6.11.10

3.0.34 

2.6.11.11

3.0.37 

2.6.11.12

3.0.4 

2.6.11.2

3.0.5 

2.6.11.3

3.0.58 

2.6.11.4

3.0.59 

2.6.11.5

3.0.60 

2.6.11.6

3.0.62

2.6.11.7

3.0.65 

2.6.11.8

3.0.66

2.6.11.9

3.0.69 

2.6.12 

3.0.72 

2.6.12.1

3.0.75 

2.6.12.12

3.0.98 

2.6.12.2

3.1

3.1

2.6.12.22

3.1.8 

2.6.12.3

3.10 

3.10 

2.6.12.4

3.10.10 

2.6.12.5

3.10.14 

2.6.12.6

3.10.17

2.6.13 

3.10.20

2.6.13.1

3.10.21 

2.6.13.2

3.10.22 

2.6.13.3

3.10.23 

2.6.13.4

3.10.26 

2.6.13.5

3.10.27 

2.6.14 

3.10.30 

2.6.14.1

3.10.31

2.6.14.2

3.10.36 

2.6.14.3

3.10.37 

2.6.14.4

3.10.38 

2.6.14.5

3.10.41 

2.6.14.6

3.10.43

2.6.14.7

3.10.45 

2.6.15 

3.10.5

2.6.15.1

3.10.7 

2.6.15.11

3.10.73 

2.6.15.2

3.10.81 

2.6.15.3

3.10.9 

2.6.15.4

3.10.90 

2.6.15.5

3.11

3.11

2.6.15.6

3.11.3 

2.6.15.7

3.11.6

2.6.16 

3.11.9

2.6.16.1

3.12

3.12

2.6.16.10

3.12.1

2.6.16.11

3.12.11 

2.6.16.12

3.12.12

2.6.16.13

3.12.14

2.6.16.14

3.12.15

2.6.16.15

3.12.16 

2.6.16.16

3.12.17 

2.6.16.17

3.12.18 

2.6.16.18

3.12.2 

2.6.16.19

3.12.21 

2.6.16.2

3.12.22

2.6.16.20

3.12.3 

2.6.16.21

3.12.4 

2.6.16.22

3.12.40 

2.6.16.23

3.12.44 

2.6.16.24

3.12.48 

2.6.16.25

3.12.49 

2.6.16.26

3.12.7 

2.6.16.27

3.13

3.13

2.6.16.28

3.13.0

2.6.16.29

3.13.1 

2.6.16.3

3.13.11 

2.6.16.30

3.13.3 

2.6.16.31

3.13.4

2.6.16.32

3.13.5

2.6.16.33

3.13.6

2.6.16.34

3.13.7

2.6.16.35

3.13.9 

2.6.16.36

3.14

3.14

2.6.16.37

3.14.2 

2.6.16.38

3.14.3 

2.6.16.39

3.14.37 

2.6.16.4

3.14.4 

2.6.16.40

3.14.45 

2.6.16.41

3.14.5

2.6.16.43

3.14.54 

2.6.16.44

3.14.7

2.6.16.45

3.14.73

2.6.16.46

3.14.79

2.6.16.47

3.14-1

2.6.16.48

3.14-4

2.6.16.49

3.15

3.15

2.6.16.5

3.15.10 

2.6.16.50

3.15.2 

2.6.16.51

3.15.5 

2.6.16.52

3.16

3.16

2.6.16.53

3.16.0-28

2.6.16.6

3.16.1 

2.6.16.7

3.16.2 

2.6.16.8

3.16.36

2.6.16.9

3.16.6

2.6.17 

3.16.7 

2.6.17.1

3.17

3.17

2.6.17.10

3.17.2 

2.6.17.11

3.17.4 

2.6.17.12

3.17.6

2.6.17.13

3.18

3.18

2.6.17.14

3.18.1 

2.6.17.2

3.18.11 

2.6.17.3

3.18.17 

2.6.17.4

3.18.2 

2.6.17.5

3.18.22 

2.6.17.6

3.18.3 

2.6.17.7

3.18.7 

2.6.17.8

3.18.8 

2.6.17.9

3.18.9

2.6.18

3.19

3.19

2.6.18.1

3.19.3 

2.6.18.2

3.2

3.2

2.6.18.3

3.2.1 

2.6.18.4

3.2.12 

2.6.18.5

3.2.13 

2.6.18.6

3.2.2

2.6.18.7

3.2.23 

2.6.18.8

3.2.24 

2.6.19 

3.2.38

2.6.19.1

3.2.42

2.6.19.2

3.2.44

2.6.19.3

3.2.50

2.6.19.4

3.2.51 

2.6.2 

3.2.52

2.6.20 

3.2.53

2.6.20.1

3.2.54

2.6.20.10

3.2.55

2.6.20.11

3.2.56 

2.6.20.12

3.2.57 

2.6.20.13

3.2.60

2.6.20.14

3.2.62 

2.6.20.15

3.2.63

2.6.20.2

3.2.72 

2.6.20.2

3.2.78

2.6.20.3

3.2.81

2.6.20.4

3.2.82 

2.6.20.5

3.2.9 

2.6.20.6

3.3

3.3

2.6.20.7

3.3.2 

2.6.20.8

3.3.4 

2.6.20.9

3.3.5 

2.6.21 

3.4

3.4

2.6.21.1

3.4.1 

2.6.21.2

3.4.10 

2.6.21.3

3.4.11 

2.6.21.4

3.4.12 

2.6.21.6

3.4.13 

2.6.21.7

3.4.14 

2.6.22 

3.4.15 

2.6.22.1

3.4.16 

2.6.22.11

3.4.17 

2.6.22.12

3.4.18 

2.6.22.13

3.4.19 

2.6.22.14

3.4.2 

2.6.22.15

3.4.20 

2.6.22.16

3.4.21 

2.6.22.17

3.4.25 

2.6.23.1

3.4.26 

2.6.23.10

3.4.27 

2.6.23.14

3.4.29

2.6.23.2

3.4.3 

2.6.23.3

3.4.31 

2.6.23.4

3.4.32 

2.6.23.5

3.4.36 

2.6.23.6

3.4.4 

2.6.24 

3.4.42 

2.6.24.1

3.4.5 

2.6.24.2

3.4.58 

2.6.25.1

3.4.6 

2.6.25.19

3.4.64 

2.6.25.2

3.4.67

2.6.25.3

3.4.7 

2.6.25.4

3.4.70

2.6.25.6

3.4.71 

2.6.25.7

3.4.72 

2.6.25.8

3.4.73 

2.6.25.9

3.4.76 

2.6.26 

3.4.8 

2.6.26.3

3.4.80 

2.6.26.4

3.4.81

2.6.26.6

3.4.86 

2.6.26.7

3.4.87 

2.6.27.12

3.4.88 

2.6.27.13

3.4.9 

2.6.27.14

3.4.93

2.6.27.24

3.5

3.5

2.6.27.46

3.5.1 

2.6.27.5

3.5.2 

2.6.27.8

3.5.3 

2.6.28.1

3.5.4 

2.6.28.2

3.5.5 

2.6.28.3

3.5.6 

2.6.28.4

3.5.7 

2.6.28.5

3.6

3.6

2.6.28.6

3.6.1 

2.6.28.8

3.6.10 

2.6.29 

3.6.11 

2.6.29.1

3.6.2 

2.6.29.4

3.6.3 

2.6.3 

3.6.4 

2.6.30 

3.6.5 

2.6.30.1

3.6.6 

2.6.30.10

3.6.7 

2.6.30.3

3.6.8 

2.6.30.4

3.6.9 

2.6.30.5

3.7

3.7

2.6.31 

3.7.1 

2.6.31.1

3.7.10 

2.6.31.11

3.7.2 

2.6.31.13

3.7.3 

2.6.31.2

3.7.4 

2.6.31.4

3.7.5 

2.6.31.5

3.7.6

2.6.31.6

3.7.7 

2.6.32 

3.7.8 

2.6.32.1

3.7.9 

2.6.32.10

3.8

3.8

2.6.32.11

3.8.1 

2.6.32.12

3.8.2 

2.6.32.13

3.8.4 

2.6.32.14

3.8.5 

2.6.32.15

3.8.6 

2.6.32.16

3.8.9 

2.6.32.17

3.9

3.9

2.6.32.18

3.9.4

2.6.32.2

3.9.8

2.6.32.22

4.0

4.0

2.6.32.28

4.0.5

2.6.32.3

4.0.6 

2.6.32.4

4.1

4.1

2.6.32.5

4.1.1 

2.6.32.6

4.1.15

2.6.32.60

4.1.4 

2.6.32.61

4.2

4.2.3 

2.6.32.62

4.2.8

2.6.32.7

4.3

4.3.3

2.6.32.8

4.5

4.5.5

2.6.32.9

4.6

4.6.1

4.10 

4.10 

4.6.2

4.10.1

4.6.3

4.10.10 

4.7

4.7.4 

4.10.11

4.7.9

4.10.12 

4.8

4.8.1

4.10.13 

4.8.12

4.10.15 

4.8.13

4.10.2

4.8.3

4.10.3

4.8.6

4.10.4 

4.8.7

4.10.5

4.9

4.9.11

4.10.6 

4.9.13 

4.10.7

4.9.3 

4.10.8

4.9.4 

4.10.9

4.9.8 

经启明星辰ADLab测试Linux kernel 4.11亦受影响。

2、受影响的发行版本

经开源社区验证部分受影响发行版本(不完整列表)如下:

Red Hat Enterprise MRG 2

Red Hat Enterprise Linux 7

Red Hat Enterprise Linux 6

Red Hat Enterprise Linux 5

SUSE Linux Enterprise Desktop 12 SP1

SUSE Linux Enterprise Desktop 12 SP2

SUSE Linux Enterprise Server 11 SP3 LTSS

SUSE Linux Enterprise Server 11 SP4

SUSE Linux Enterprise Server 12 GA

SUSE Linux Enterprise Server 12 SP1

SUSE Linux Enterprise Server 12 SP2

SUSE Linux Enterprise Server for SAP 11 SP3

SUSE Linux Enterprise Server for SAP 11 SP4

SUSE Linux Enterprise Server for SAP 12 GA

SUSE Linux Enterprise Server for SAP 12 SP1

SUSE Linux Enterprise Server for SAP 12 SP2

另外,启明星辰ADLab对下列的部分发行版本做了测试,确认均受“Phoenix Talon”漏洞影响:

Ubuntu 14.04LTS (Trusty Tahr)

Ubuntu 16.04LTS (Xenial Xerus)

Ubuntu 16.10(Yakkety Yak)

Ubuntu 17.04(Zesty Zapus)

Ubuntu 17.10(Artful Aardvark)

Solution

1、官方已经发布了修复该问题的补丁,可通过升级Linux内核修复“Phoenix Talon”相关漏洞。

2、使用 Grsecurity/PaX 对内核加固。

Timeline

May 09 - Report sent to Linux Kernel Community

May 09 - Linux Kernel Community confirmed

May 09 - Linux Kernel Community patched in linux upstream

May 10 - Assgined CVE number

“Phoenix Talon”在Linux内核中潜伏长达11年之久,影响范围非常广泛(以上只是官方以及我们测试的部分结果,即使这些也足够看出“Phoenix Talon”波及之深之广),启明星辰ADLab提醒广大用户尽快采取相应的修复措施,避免引发漏洞相关的网络安全事件。

Reference:

1. https://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-8890.html

2. https://security-tracker.debian.org/tracker/CVE-2017-8890

3. https://www.suse.com/security/cve/CVE-2017-8890/

4. https://bugzilla.redhat.com/show_bug.cgi?id=1450973

5. https://bugzilla.suse.com/show_bug.cgi?id=1038544

6. https://www.mail-archive.com/netdev@vger.kernel.org/msg167626.html

7. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8890

8. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9075

9. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9076

10. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9077

11. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/id=657831ffc38e30092a2d5f03d385d710eb88b09a

12. http://www.securityfocus.com/bid/98562/info

13. http://www.openwall.com/lists/oss-security/2017/05/30/24

14. https://www.kernel.org

15.Linux Kernel Documentation

“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞 “Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞


以上所述就是小编给大家介绍的《“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与应用

算法设计与应用

迈克尔 T. 古德里奇(Michael T. Goodrich)、罗伯特·塔马契亚(Roberto Tamas / 乔海燕、李悫炜、王烁程 / 机械工业出版社 / 2017-11-20 / CNY 139.00

本书全面系统地介绍算法设计和算法应用的各个领域,内容涵盖经典数据结构、经典算法、算法分析方法、算法设计方法以及算法在各个领域的应用,还包含一些高级主题。本书采用应用驱动的方法引入各章内容,内容编排清晰合理,讲解由浅入深。此外,各章都附有巩固练习、创新练习和应用练习三种类型的题目,为读者理解和掌握算法设计和应用提供了很好的素材。 本书可作为高等院校计算机及相关专业“数据结构和算法”课程的本科生......一起来看看 《算法设计与应用》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码