| Linux内核Capability LSM模块进程特权信任状本地权限提升漏洞 (Linux,缺陷) |
| 涉及程序: |
| Linux内核程序 |
| 描述: |
| Linux内核Capability LSM模块进程特权信任状本地权限提升漏洞 |
| 详细: |
| Linux Kernel是开放源代码操作系统Linux的内核。 Linux Kernel在处理Capability模块实现时存在问题,本地攻击者可以利用这个漏洞提升权限。 当特权操作由Capability LSM 模块控制时,系统基于进程信任状(creds)来仲裁特权操作。当Capability未被编译进内核时,内核使用默认的安全模块(security/dummy.c)仲裁特权操作,机制非常简单,仅仅检查进程euid、fsuid(进行文件系统相关特权操作时)是否为0。在这种情况下,dummy模块根本不关心进程的信任状,每个进程的信任状都拷贝其父进程的信任状。追根溯源,每个进程的信任状无论进程用户是否为超级用户,最终都拷贝Init进程的信任状,信任状中包含有超级用户进程的所有权能。在根据用户ID进行特权判断情况下,此错误未被激发。但在插入Capability模块后,特权机制转为根据进程信任状进行判断,而此前存在的任何进程的信任状都与Init进程一致,导致这些进程都具有超级用户root的特权。此错误的本质是装载Capability模块时没有对已有进程的信任状按Capability机制的要求进行重新计算。试验表明,此错误出现在2.6.* Linux内核中。 <*来源:liangbin (liangbin@venustech.com.cn) 链接:http://marc.theaimsgroup.com/?l=bugtraq&m=110384535113035&w=2 *> 受影响系统: Linux kernel 2.6.9 Linux kernel 2.6.8 Linux kernel 2.6.7 Linux kernel 2.6.6 Linux kernel 2.6.5 Linux kernel 2.6.4 Linux kernel 2.6.3 Linux kernel 2.6.2 Linux kernel 2.6.1 Linux kernel 2.6 |
| 攻击方法: |
| 以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负! 当Capability模块未被编译进内核时,(如果已经编译进内核,须disable相应编译选项后重新编译内核)。在装载Capability模块前,以普通用户身份允许一个vim编辑器,在vim种输入命令: :r /etc/shadow vim 将回应 “can't open file /etc/shadow”,这个访问root文件操作的操作被拒绝。 不要终结vim,转到其它控制台以root身份登录,插入Capability模块: #modprobe capability 在模块被转载后,回到vim中再次尝试打开shadow文件,将发现能够以普通用户读写并且保存(w!)shadow文件!根本的原因是vim进程的信任状中包含了权能CAP_DAC_OVERRIDE和CAP_DAC_READ_SEARCH,因而能够进行超越访问控制策略的特权操作。 使用以下命令可查看vim的信任状: $cat /proc/2454/status (2454 是vim进程的pid) Name: vim State: S (sleeping) SleepAVG: 91% Tgid: 2454 Pid: 2454 PPid: 1552 TracerPid: 0 Uid: 500 500 500 500 Gid: 500 500 500 500 FDSize: 256 Groups: 500 VmSize: 9356 kB VmLck: 0 kB VmRSS: 2728 kB VmData: 856 kB VmStk: 16 kB VmExe: 1676 kB VmLib: 3256 kB Threads: 1 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 8000000000003000 SigCgt: 00000000ef824eff CapInh: 0000000000000000 CapPrm: 00000000ffffffff CapEff: 00000000fffffeff 最后3行即是vim的信任状,可以看到它具有除了CAP_SETPCAP外的所有Capability权能。 以上测试在 2.6.* 和2.5.72-lsm1中通过。 |
| 解决方案: |
| 临时解决方法: 如果您不能立刻安装补丁或者升级,CNNS建议您采取以下措施以降低威胁: * 第三方补丁如下: 在 security/capability.c中加入以下代码 static void recompute_capability_creds(struct task_struct *task) { if(task->pid <= 1) return; task_lock(task); task->keep_capabilities = 0; if ((task->uid && task->euid && task->suid) && !task->keep_capabilities) cap_clear (task->cap_permitted); else task->cap_permitted = CAP_INIT_EFF_SET; if (task->euid != 0){ cap_clear (task->cap_effective); } else{ task->cap_effective = CAP_INIT_EFF_SET; } if(task->fsuid) task->cap_effective &= ~CAP_FS_MASK; else task->cap_effective |= CAP_FS_MASK; task_unlock(task); return; } 并且在已有capability_init 函数在其返回前加入以下代码: struct task_struct *task; read_lock(&tasklist_lock); for_each_process(task){ recompute_capability_creds(task); } read_unlock(&tasklist_lock); return 0; 厂商补丁: Linux ----- 目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本: http://www.kernel.org/ |
相关推荐
Linux安全体系的文件权限管理
<br /><br />自主访问机制(Discretionary Access Control,DAC) 指对象(比如程序、文件或进程等)的的拥有者可以任意的修改或授予此对象相应的权限。Linux的UGO(User、Group、Other)和ACL(Access Control List,访问控制列表)权限管理方式就是典型的自主访问机制。<br />Linux支持UGO和ACL权限管理方式,UGO将权限位信息存储在节点的权限中,ACL将权限位信息存储在节点的扩展属性中。不同的文件系统权限位的存储和处理方式不
Linux 0号进程的建立
目录进程的内核表示进程0的创建进程0的运行 0号进程在内核中是一个比较特殊的进程,因为它是静态创建的,不是通过do_fork()创建的。所以从0号进程出发有助于理解一个进程的创建需要为它准备好哪些条件。 进程的内核表示 进程可以简单理解为Linux操作系统中的一个运行实体,在内核中用数据结构task_struct表示,这个结构体表示了进程运行时所需要的所有信息,所以这是内核中较为复杂的一个结构体,基于我们此篇文章所需要表达的知识,我们重点介绍下该结构体的成员thread_info,这个成员所分配的内存空间与
Linux能力机制
Linux能力机制早期linux上信任状模型非常简单,就是"超级用户对普通用户"模型。普通用户的很多操作需要root权限,这通过setuid实现。如果程序编写不好,就可能...
Linux 权能综述
为了执行权限检查,传统的 UNIX 实现区分两种类型的进程:特权进程(其有效用户 ID 为0,称为超级用户或 root),和非特权用户(其有效 UID 非0)。特权进程绕过所有的内核权限检查,而非特权进程受基于进程的认证信息(通常是:有效 UID,有效 GID,和补充组列表)的完整权限检查的支配。 自内核 2.2 版本开始,Linux 将传统上与超级用户关联的特权分为几个单元,称为 capabil
[AD_LAB-04003] Linux 2.6.* 内核Capability LSM模块进程特
[安全通告]通告:[AD_LAB-04003] Linux 2.6.* 内核Capability LSM模块进程特权信任状本地权限提升漏洞分类:设计错误日期:12/20/2004CVE编号:NO受威胁的系统: Linux kernel 2.6.*未受威胁的系统:1.漏洞描述当POSIX权能(Capability)LSM未被编译进内核时,在插入Capability模块(commoncap.ko
容器的“信任幻觉”:深入解析容器逃逸风险与纵深防御
容器技术(如Docker)依赖共享内核实现隔离,但内核漏洞或配置错误可能导致容器逃逸。本文剖析四大攻击向量:内核漏洞利用、不安全的内核子系统交互(如CVE-2022-0492)、特权容器和危险挂载,并提出纵深防御方案:1)无根容器(Rootless)降低逃逸危害;2)AppArmor/SELinux限制容器行为;3)Seccomp过滤危险系统调用;4)Capabilities剥离非必要权限。通过多层防护,平衡容器化敏捷性与安全性。
linux lsm实现进程白名单,linux安全模块学习之LSM的介绍实现
原标题:linux安全模块学习之LSM的介绍实现文章来自公众号:睿江云计算相关背景介绍近年来Linux系统由于其出色的性能和稳定性,开放源代码特性带来的灵活性和可扩展性,以及较低廉的成本,而受到计算机工业界的广泛关注和应用。但在安全性方面,Linux内核只提供了经典的UNIX自主访问控制(root用户,用户ID,模式位安全机制),以及部分的支持了POSIX.1e标准草案中的capabilities...
[转载] Linux的capability深入分析
[转载] Linux的capability深入分析 一)概述: 1)从2.1版开始,Linux内核有了能力(capability)的概念,即它打破了UNIX/LINUX操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作. 2)capability可以作用在进程上(受限),也可以作用在程序文件上,它与sudo不同,sudo只针对用户/程序/文件的概
Linux学习笔记 - 程序的执行(一)
进程用来表示正在运行的一组程序竟争系统资源的行为。程序和进程之间的联系,表现在如何在程序文件的内容上建立起进程执行上下文。除了把一组指令装入内存并让CPU执行外,内核还须灵活处理以下几方面的问题: 不同的可执行文件格式。 共享库:很多可执行文件并不包含执行程序所需的所有代码,而是期望内核在运行时从共享库中加载函数。 执行上下文的其他信息:这包括程序员熟悉的命令行参数与环境变量。
linux系统利用可执行文件的Capabilities实现权限提升
一、操作目的和应用场景 Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。 这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为
Linux安全模块(LSM)简介
Linux安全模块(LSM)简介 2009-07-11 11:36中国IT实验室佚名 关键字:Linux技巧 Linux安全模块(LSM)是Linux内核的一个轻量级通用访问控制框架。本文介绍Linux安全模块(LSM)的相关背景,设计思想,实现方法;并说明如何使用Linux安全模块(LSM)来增强Linux系统的...
Linux 2.6.36内核优化指南
Linux 2.6.36内核优化指南 作者:KenWu Email: ken.wug@gmail.com 转载本文档请注明原文链接http://kenwublog.com/docs/linux-kernel-2-6-36-optimization.htm! 介绍 本文档是一篇关于Linux Kernel 2.6.36的最简优化指南。作者旨在编译一份性能最佳且适合程序开发用的内核(...
Linux 进程创建
作者:李智敏,华清远见嵌入式学院上海分中心讲师。在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(父和子)。下面给出了 task_struct 的一小部分。task_struct 位于 ./linux/include/linux/s
[linux]进程(十一)——进程权能
进程权能介绍 点击打开链接 1,基本概念 传统UNIX的访问控制模型非常简单,就是“超级用户对普通用户”模型。在这种模型中,一个进程或帐户要么什么都能做即具有全部的系统权限, 要么几乎什么也不能做即只有很小的权限,这取决于进程的UID。例如,如果一个进程需要加载/卸载内核模块以及管理文件系统等操作时,就 需要完全的root权限。很显然这样做对系统安全存在很大的威胁。 2,进程权能 L
selinux 学习笔记一(LSM在kernel中的实现)
LSM(linux security module)作为一个单独模块,通过在kernel编译过程中的编译flag:CONFIG_SECURITY 控制是否启用该模块中定义的安全相关的功能。具体配置信息见:kernel/linux-4.9/security/Kconfig 当在编译阶段打开该配置开关,kernel中的用于管理各个进程的task_struct对象会增加一个安全相关的引用。如下所示: k...
7011




被折叠的 条评论
为什么被折叠?



