绿盟科技发布LINUX内核本地提权漏洞技术分析与防护方案

简介:

绿盟科技发布Linux内核本地提权漏洞威胁预警通告 这个漏洞9年才被修复 。就 CVE-2016-5195 这个漏洞,绿盟科技发布技术分析及防护方案。报告全文如下:

Linux内核的内存子系统在处理写时拷贝(Copy-on-Write,缩写为COW)时存在条件竞争漏洞,导致可以破坏私有只读内存映射。一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,进而可以获取整个系统的最高权限。漏洞详情如下:

https://github.com/dirtycow/dirtycow.github.io/wiki/VulnerabilityDetails

漏洞验证程序

POC链接地址如下:

https://github.com/dirtycow/dirtycow.github.io/blob/master/dirtyc0w.c

受影响的范围

该漏洞从Linux内核版本>=2.6.22以后就开始存在,影响全版本Linux,直到2016年10月18日才修复。其中Red Hat、Debian和Ubuntu三个发行版的受影响及修复情况见如下链接:

漏洞分析

COW=Copy On Write写时复制,当程序准备写一块映射的区域,则会生成一块映射的复制,对此区域的任何修改都不会写回原来的文件。在通常的情况下,如果在COW时候发生了缺页异常,则处理缺页异常的函数handle_mm_fault()函数则会停止页表写入并重试COW。

通常情况下,当一个程序写一个内存页,且这个物理页不可写的时候,会触发异常,因为当前物理页在用户空间,不在内核空间中。所以调用handle_pte_fault,这个函数经过一系列的判断,发现是因为内存页不可写导致的异常,则会调用do_wp_page来完成写时复制(COW)。不过,父子进程是以匿名映射来共享内存的,所以只需要完成reuse_swap_page即可。但是,会丢失FOLL_WRITE标志位。

如果另一个线程不停的告诉内核这个物理页不再需要、可以释放,当内核释放掉那个物理页后,handle_mm_fault在处理一个读错误(!pte_present)从而获得一个pagecache也就是文件的缓存。从而破坏私有映射完成只读文件的写入。

作者在修复代码中是这样处理的,在解除映射的时候检查了COW状态和页表的脏位(dirty bit),如下图所示:

cow.png

作者在代码中增加了一个COW的标识来表示COW是否完成,设置COW位为未完成。而且,当程序要写一块内存时,必须满足以下条件:

这块内存可写或者完成COW而且脏位被设置。这样就保证了程序不会在没有COW的情况下完成写操作。

LINUX内核本地提权漏洞修复建议

  • 使用绿盟科技的远程评估系统RSAS进行安全评估。
  • 短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
  • 中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发。
  • 长期服务:基于行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)。

绿盟科技声明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

相关文章请参看

绿盟科技发布Linux内核本地提权漏洞威胁预警通告 这个漏洞9年才被修复

Linux内核出现本地提权漏洞 CVE-2016-5195 2007年以后的版本都可能受到影响



原文发布时间:2017年3月24日

本文由:绿盟科技 发布,版权归属于原作者

原文链接:http://toutiao.secjia.com/linux-kernel-vulnerability-analysis-and-protection

本文来自云栖社区合作伙伴安全加,了解相关信息可以关注安全加网站

相关文章
|
14天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
7天前
|
算法 Linux 调度
深入理解Linux内核的进程调度机制
【4月更文挑战第17天】在多任务操作系统中,进程调度是核心功能之一,它决定了处理机资源的分配。本文旨在剖析Linux操作系统内核的进程调度机制,详细讨论其调度策略、调度算法及实现原理,并探讨了其对系统性能的影响。通过分析CFS(完全公平调度器)和实时调度策略,揭示了Linux如何在保证响应速度与公平性之间取得平衡。文章还将评估最新的调度技术趋势,如容器化和云计算环境下的调度优化。
|
12天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
20 3
|
19天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
|
19天前
|
Ubuntu Linux
Linux查看内核版本
在Linux系统中查看内核版本有多种方法:1) 使用`uname -r`命令直接显示版本号;2) 通过`cat /proc/version`查看内核详细信息;3) 利用`dmesg | grep Linux`显示内核版本行;4) 如果支持,使用`lsb_release -a`查看发行版及内核版本。
36 6
|
21天前
|
Prometheus 监控 数据可视化
linux分析方法与技巧
【4月更文挑战第3天】在Linux环境中,进行日志分析和系统性能分析的关键方法包括:使用`cat`, `less`, `tail`查看和过滤日志,`logrotate`管理日志文件,`rsyslog`或`syslog-ng`聚合日志,以及通过`top`, `mpstat`, `pidstat`, `free`, `iostat`, `netstat`, `strace`, `sar`, `dstat`等工具监控CPU、内存、磁盘I/O和网络。对于高级分析,可利用Brendan Gregg的性能工具,以及Grafana、Prometheus等可视化工具。
17 2
linux分析方法与技巧
|
22天前
|
Linux 内存技术
Linux内核读取spi-nor flash sn
Linux内核读取spi-nor flash sn
18 1
|
29天前
|
监控 Linux Shell
Linux 进程问题调查探秘:分析和排查频繁创建进程问题
Linux 进程问题调查探秘:分析和排查频繁创建进程问题
39 0
|
3天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
Ubuntu Linux Shell
linux免交互登陆远程主机并执行命令(密钥对和Expect)
linux免交互登陆远程主机并执行命令(密钥对和Expect)