Linux 2.6.* 内核Capability LSM模块进程特权信任状本地权限提升漏洞

【信息科学与工程学】【安全领域】第八十三篇 云安全解决方案02 企业中“搞人”与“搞事情”常见问题的分析框架。我将选取4个典型场景,每个场景都从实际管理现象出发,逐步推导出数学模型、参数设定及关联知识。 阅读详情
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必备知识——开发必备(实时更新) tail -f 文件 阅读详情

相关推荐

Linux安全体系的文件权限管理

<br /><br />自主访问机制(Discretionary Access Control,DAC) 指对象(比如程序、文件或进程等)的的拥有者可以任意的修改或授予此对象相应的权限。Linux的UGO(User、Group、Other)和ACL(Access Control List,访问控制列表)权限管理方式就是典型的自主访问机制。<br />Linux支持UGO和ACL权限管理方式,UGO将权限位信息存储在节点的权限中,ACL将权限位信息存储在节点的扩展属性中。不同的文件系统权限位的存储和处理方式不

neverforgetZYP的专栏 7011

Linux 0号进程的建立

目录进程内核表示进程0的创建进程0的运行 0号进程内核中是一个比较特殊的进程,因为它是静态创建的,不是通过do_fork()创建的。所以从0号进程出发有助于理解一个进程的创建需要为它准备好哪些条件。 进程内核表示 进程可以简单理解为Linux操作系统中的一个运行实体,在内核中用数据结构task_struct表示,这个结构体表示了进程运行时所需要的所有信息,所以这是内核中较为复杂的一个结构体,基于我们此篇文章所需要表达的知识,我们重点介绍下该结构体的成员thread_info,这个成员所分配的内存空间与

wu670431的博客 1027

Linux能力机制

Linux能力机制早期linux信任模型非常简单,就是"超级用户对普通用户"模型。普通用户的很多操作需要root权限,这通过setuid实现。如果程序编写不好,就可能...

Linux知识积累 3492

Linux 权能综述

为了执行权限检查,传统的 UNIX 实现区分两种类型的进程特权进程(其有效用户 ID 为0,称为超级用户或 root),和非特权用户(其有效 UID 非0)。特权进程绕过所有的内核权限检查,而非特权进程受基于进程的认证信息(通常是:有效 UID,有效 GID,和补充组列表)的完整权限检查的支配。 自内核 2.2 版本开始,Linux 将传统上与超级用户关联的特权分为几个单元,称为 capabil

tq08g2z的专栏 3267

[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权能(CapabilityLSM未被编译进内核时,在插入Capability模块(commoncap.ko

陈巍@人生态度 1181

容器的“信任幻觉”:深入解析容器逃逸风险与纵深防御

容器技术(如Docker)依赖共享内核实现隔离,但内核漏洞或配置错误可能导致容器逃逸。本文剖析四大攻击向量:内核漏洞利用、不安全的内核子系统交互(如CVE-2022-0492)、特权容器和危险挂载,并提出纵深防御方案:1)无根容器(Rootless)降低逃逸危害;2)AppArmor/SELinux限制容器行为;3)Seccomp过滤危险系统调用;4)Capabilities剥离非必要权限。通过多层防护,平衡容器化敏捷性与安全性。

专注于网络安全攻防技术与安全运营(SecOps)实践。 726

linux lsm实现进程白名单,linux安全模块学习之LSM的介绍实现

原标题:linux安全模块学习之LSM的介绍实现文章来自公众号:睿江云计算相关背景介绍近年来Linux系统由于其出色的性能和稳定性,开放源代码特性带来的灵活性和可扩展性,以及较低廉的成本,而受到计算机工业界的广泛关注和应用。但在安全性方面,Linux内核只提供了经典的UNIX自主访问控制(root用户,用户ID,模式位安全机制),以及部分的支持了POSIX.1e标准草案中的capabilities...

weixin_33421411的博客 904

[转载] Linuxcapability深入分析

[转载] Linuxcapability深入分析 一)概述: 1)从2.1版开始,Linux内核有了能力(capability)的概念,即它打破了UNIX/LINUX操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作. 2)capability可以作用在进程上(受限),也可以作用在程序文件上,它与sudo不同,sudo只针对用户/程序/文件的概

a172742451的专栏 3026

Linux学习笔记 - 程序的执行(一)

进程用来表示正在运行的一组程序竟争系统资源的行为。程序和进程之间的联系,表现在如何在程序文件的内容上建立起进程执行上下文。除了把一组指令装入内存并让CPU执行外,内核还须灵活处理以下几方面的问题:  不同的可执行文件格式。 共享库:很多可执行文件并不包含执行程序所需的所有代码,而是期望内核在运行时从共享库中加载函数。 执行上下文的其他信息:这包括程序员熟悉的命令行参数与环境变量。

cangel1988的专栏 1938

linux系统利用可执行文件的Capabilities实现权限提升

一、操作目的和应用场景 Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。 这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为

whatday的专栏 3537

Linux安全模块LSM)简介

Linux安全模块LSM)简介 2009-07-11 11:36中国IT实验室佚名 关键字:Linux技巧   Linux安全模块(LSM)是Linux内核的一个轻量级通用访问控制框架。本文介绍Linux安全模块(LSM)的相关背景,设计思想,实现方法;并说明如何使用Linux安全模块(LSM)来增强Linux系统的...

weixin_33896069的博客 793

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的最简优化指南。作者旨在编译一份性能最佳且适合程序开发用的内核...

weixin_30564901的博客 312

Linux 进程创建

作者:李智敏,华清远见嵌入式学院上海分中心讲师。在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(父和子)。下面给出了 task_struct 的一小部分。task_struct 位于 ./linux/include/linux/s

华清远见 | 程序员的学习天堂 802

[linux]进程(十一)——进程权能

进程权能介绍 点击打开链接 1,基本概念 传统UNIX的访问控制模型非常简单,就是“超级用户对普通用户”模型。在这种模型中,一个进程或帐户要么什么都能做即具有全部的系统权限, 要么几乎什么也不能做即只有很小的权限,这取决于进程的UID。例如,如果一个进程需要加载/卸载内核模块以及管理文件系统等操作时,就 需要完全的root权限。很显然这样做对系统安全存在很大的威胁。 2进程权能 L

知了112的专栏 1361

selinux 学习笔记一(LSM在kernel中的实现)

LSMlinux security module)作为一个单独模块,通过在kernel编译过程中的编译flag:CONFIG_SECURITY 控制是否启用该模块中定义的安全相关的功能。具体配置信息见:kernel/linux-4.9/security/Kconfig 当在编译阶段打开该配置开关,kernel中的用于管理各个进程的task_struct对象会增加一个安全相关的引用。如下所示: k...

weixin_34273046的博客 3091
上一篇: Debian Woody 3.0安装使用
下一篇: 无聊死了~~~完整的a2c.c
bmsdr
博客等级 码龄22年 10粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值