内容简介:“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞
2017-06-16 09:59:35 阅读:121次 来源: 启明星辰ADLAB
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()函数即可触发该漏洞。
接着先看看几个组播相关的数据结构:
该结构体的两个成员分别用于指定所加入的多播组的组IP地址和所要加入组的本地接口IP地址。ip_setsockopt()实现了该功能,它通过调用ip_mc_join_group()把socket加入到多播组。
其中sk.__sk_common.skc_rcv_saddr对于组播而言,只接收该地址发来的组播数据,对于单播而言,只从该地址所代表的网卡接收数据;mc_ttl为组播的ttl;mc_loop表示组播是否发向回路;mc_index表示组播使用的本地设备接口的索引;mc_addr表示组播源地址;mc_list为组播列表。
next_rcu指向链表的下一个节点;multi表示组信息,即在哪一个本地接口上,加入到哪一个多播组;sfmode是过滤模式,取值为MCAST_INCLUDE或MCAST_EXCLUDE,分别表示只接收sflist所列出的那些源的多播数据报和不接收sflist所列出的那些源的多播数据报;sflist是源列表。
下面分别从该漏洞内存分配的关键代码及二次释放的关键代码进行分析。
1、The Allocate
内存分配调用链:
使用setsockopt()函数中的MCAST_JOIN_GROUP选项。
net/socket.c
进入内核调用SyS_setsockopt()函数,level 设置的不为 SOL_SOCKET即可,一般设置为SOL_IP,在1798行处被调用。紧接着调用sock_common_setsockopt()函数。
net/ipv4/ip_sockglue.c
然后进入ip_setsockopt()函数,调用 do_ip_setsockopt()函数(1264行代码)。
net/ipv4/ip_sockglue.c
代码1019~1021行调用copy_from_user()将用户态的数据拷贝到内核态。之前已经将option设置为MCAST_JOIN_GROUP,紧接着调用ip_mc_join_group()函数:
net/ipv4/igmp.c
代码2128行sock_kmalloc()进行了内存分配。
2、The first free
在内核里无时无刻都在产生软中断,而此次漏洞涉及的软中断是由 accept()系统调用引起的,由于该函数本身作用于进程上下文,并不会产生软中断。但是调用 accept() 时,会在内核中诱发某种软中断产生,该软中断会调用rcu_process_callbacks()函数:
kernel/rcu/tree.c
__rcu_process_callbacks调用rcu_do_batch()函数,如下:
kernel/rcu/tree.c
注意代码中第2879行,函数__rcu_reclaim()实现如下:
kernel/rcu/rcu.h
在113行调用kfree()进行了第一次释放。
3、The second free
当断开TCP连接时,内核通过sock_close()函数直接调用sock_release()来实现断开功能,该函数会清空ops,更新全局 socket 数目,更新 inode 引用计数。随后进入到 inet_release()函数调用 tcp_close()函数来最终关闭 sock。
net/ipv4/af_inet.c
用户程序断开TCP连接时,内核里使用 ip_mc_drop_socket()函数进行回收。
net/ipv4/igmp.c
代码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
12. http://www.securityfocus.com/bid/98562/info
13. http://www.openwall.com/lists/oss-security/2017/05/30/24
15.Linux Kernel Documentation
本文转载自 启明星辰ADLAB
原文链接:https://mp.weixin.qq.com/s/6NGH-Dk2n_BkdlJ2jSMWJQ以上所述就是小编给大家介绍的《“Phoenix Talon”in Linux Kernel —潜伏长达11年之久的内核漏洞》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 漏洞预警 | 潜伏长达11年之久的Linux内核漏洞
- 当心!潜伏身边的国家级网络攻击
- 万豪2015年曾有机会发现漏洞 黑客在系统中潜伏3年
- 万豪2015年曾有机会发现漏洞 黑客在系统中潜伏3年
- 黑客已潜伏进全球十多家移动运营商,只要他们高兴,可随时切断通讯网络
- BUF早餐铺 | 微软发布IE补丁导致部分联想笔记本电脑无法启动;WannaCry仍在潜伏;网信办发布《金融...
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python编程
[美]埃里克·马瑟斯 / 袁国忠 / 人民邮电出版社 / 2016-7-1 / CNY 89.00
本书是一本针对所有层次的Python 读者而作的Python 入门书。全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括matplotlib、NumPy 和Pygal 等强大的Python 库和工具介绍,以及列表、字典、if 语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D 游戏开发如何利用数据生成交互式的信息图......一起来看看 《Python编程》 这本书的介绍吧!