当前位置: 首页 > article >正文

Linux内核安全模块深入剖析【2.6】

第 11 章 Yama11.1 简介Yama 是一个源自古印度语的英文单词翻译成汉语就是“阎罗”阎罗是印度神话中掌管地狱的神。Yama 可以称为半个安全模块说它是“半个”原因是1它是目前3.14 Linux 主线中最简单的安全模块只用到了 4 个 LSM 钩子函数这4 个钩子函数都和 ptrace 相关。2它没有一个完整的安全概念在背后支撑多级安全、基于角色的访问控制、类型增强等都和它无关它是针对具体问题——ptrace——的安全加固。3它可以和其他安全模块同时起作用系统里可以既有 SELinux 的访问控制又有 Yama对 ptrace 的控制而 SELinux、 SMACK、 Tomoyo、 AppArmor 这四者之间是互斥的不能同时存在。11.2 机制先谈一下 ptrace 有什么潜在的安全问题。 ptrace 是一个系统调用调用它可以让两个进程形成“跟踪”关系。跟踪进程可以查看和修改被跟踪进程内存、寄存器、信号等可以了解被跟踪进程系统调用情况。也就是说在跟踪进程面前被跟踪进程毫无秘密可言。Linux 原有的、自主访问控制下的对 ptrace 的操作控制是满足下列两个条件之一即可1跟踪进程的 uid 同时等于被跟踪进程的 uid、 euid、 suid并且跟踪者进程的 gid 同时等于被跟踪者进程的 gid、 egid、 sgid。2跟踪者进程具备能力 CAP_SYS_PTRACE。看一下代码kernel/ptrace.c static int __ptrace_may_access(struct task_struct *task, unsigned int mode) { … const struct cred *cred current_cred(), *tcred; tcred __task_cred(task); if (uid_eq(cred-uid, tcred-euid) uid_eq(cred-uid, tcred-suid) uid_eq(cred-uid, tcred-uid) gid_eq(cred-gid, tcred-egid) gid_eq(cred-gid, tcred-sgid) gid_eq(cred-gid, tcred-gid)) goto ok; if (ptrace_has_cap(tcred-user_ns, mode)) goto ok; … } static int ptrace_has_cap(struct user_namespace *ns, unsigned int mode) { if (mode PTRACE_MODE_NOAUDIT) return has_ns_capability_noaudit(current, ns, CAP_SYS_PTRACE); else return has_ns_capability(current, ns, CAP_SYS_PTRACE); }这里的问题是 uid/gid 相同的进程可以互相跟踪如果一个进程被攻破与之同 uid/gid的进程都沦陷。而如果特权进程被攻破全系统的进程都不能幸免。Yama 提供了四种模式 disabled、 relational、 capability、 no_attach。 disabled 就是 Yama 不起作用和没有它一样。 capability 就是只有在跟踪者进程具备 CAP_SYS_PTRACE 能力时允许跟踪进程和被跟踪进程之间形成跟踪关系。 no_attach 就是根本不允许任何进程之间形成跟踪关系。 relational 是在以下三种情况之一出现时允许形成跟踪关系1跟踪者进程和被跟踪者进程之间存在纵向亲缘关系跟踪者进程是被跟踪者进程的父进程、祖父进程……2 被跟踪者进程曾经通过系统调用 prctl 的选项 PR_SET_PTRACER 声明愿意被某个跟踪者进程跟踪。3跟踪者进程具备 CAP_SYS_PTRACE 能力。security/yama/yama_lsm.c int yama_ptrace_access_check(struct task_struct *child, unsigned int mode) { … if (mode PTRACE_MODE_ATTACH) { switch (ptrace_scope) { case YAMA_SCOPE_DISABLED: /* No additional restrictions. */ break; case YAMA_SCOPE_RELATIONAL: rcu_read_lock(); if (!task_is_descendant(current, child) !ptracer_exception_found(current, child) !ns_capable(__task_cred(child)-user_ns, CAP_SYS_PTRACE)) rc -EPERM; rcu_read_unlock(); break; case YAMA_SCOPE_CAPABILITY: rcu_read_lock(); if (!ns_capable(__task_cred(child)-user_ns, CAP_SYS_PTRACE)) rc -EPERM; rcu_read_unlock(); break; case YAMA_SCOPE_NO_ATTACH: default: rc -EPERM; break; } } … }Yama 在系统调用 prctl 中增加了一个选项:PR_SET_PTRACER通过它进程可以明确向内核注册自己可以被哪个进程跟踪。举个例子prctl(PR_SET_PTRACER, 1972, 0, 0, 0)这个例子意思是进程可以被系统中 pid 为 1972 的进程跟踪。如果传入的进程号是 0表示进程不愿被任何进程跟踪有纵向亲缘关系的除外如果传入的进程号是-1表示愿意被任何进程跟踪。11.3 伪文件系统Yama 的设计者希望 Yama 能够和别的安全模块同时起作用所以 Yama 不能使用/proc/[pid]/attr 目录下的文件。 Yama 也没有使用 securityfs 文件系统虽然使用 securityfs 不会引起和别的安全模块的冲突。 Yama 的做法是在/proc/sys/kernel/目录下创建子目录 yama在子目录 yama 下创建文件 ptrace_scope。这个伪文件的内容是一个 0 到 3 的数字对应 Yama 的四种工作模式见表 11-1。对此文件的读操作不需要特殊能力写操作需要能力 CAP_SYS_PTRACE。还有一点需要注意一旦向此文件写入了 3就不可以再写入其他值了。背后的含义就是一旦切入了最安全模式 no_attach就不可以再变为不安全模式了。11.4 嵌套使用Yama 提供了一个内核编译选项 CONFIG_SECURITY_YAMA_STACKED选择了它可以让 Yama 和其他安全模块同时起作用。11.5 总结很多人都曾经利用 LSM 机制开发过自己的安全模块功能或多或少但是这类工作大都未能进入主线。 Yama 是一个特例。从某种角度看 Yama 堪称完美。首先 Yama 解决的是一类实际的安全问题而不是某种虚无缥缈的假想的安全威胁。其次 Yama 可以和别的安全模块共存。 Yama 承认自己只做了很小一部分工作如果用户想要更全面的安全可以启用另一个安全模块来和 Yama 合作。其实内核各个安全模块所做的工作重复之处甚多。Yama 的开发者 Kees Cook 在 Yama 被 Linux 主线接收后还曾经提交过新的安全模块不过没有被接收 在 Ubuntu 发行版中 那些未进主线的新模块的功能至少有一部分被合并入 Ubuntu修改过的 Yama 之中。11.6 参考资料读者可参考 Documentation/security/Yama.txt。习题Yama 可以和别的 LSM 模块共存。阅读代码看看 Yama 是如何做到和别的 LSM 模块共存的。思考一下 Yama 的这种作法可否推广到其他 LSM 模块。第三部分 完整性保护完整性保护的目的可以概括为一句话防止数据被篡改。完整性保护的手段就是保存一个从原始数据推导出的度量值在访问数据之前先针对数据推导出当前的度量值如果这个度量值和原始的度量值不一致那么就说明数据已经有了变化。这样就产生了两个深层的问题一个是这个度量值保存在哪里另一个是如何保证这个度量值本身不被篡改。第 12 章 IMA/EVM12.1 简介本章介绍 Linux 内核的完整性子系统代码位于 security/integrity 目录下。完整性子系统又可分为两个部分IMAIntegrity Measurement Architecture和 EVMExtended Verification Module。在解释它们的具体含义之前读者首先要明白 IMA/EVM 是 TCGTrusted Computing Group开放标准的一部分。在 TCG 开放标准的架构中可信平台模块Trusted Platform Module TPM是一个芯片其上层是可信启动Trusted BootTBoot。在实践中可信启动的一种实现方式是修改 GRUB在其中加入完整性度量功能形成 GRUB-IMA。在启动层之上是内核内核中含有 TPM 的驱动以及本章要讲述的 IMA 和 EVM。内核之上是用户态的库和应用这部分包含可信软件栈Trusted Software Stack和平台信任服务Platform Trust Services。TCG 开放标准规定的可信计算架构如图 12-1 所示。所以首先要了解一下什么是可信计算Trusted Computing。12.1.1 可信计算可信计算的首要问题是什么是可信而关于可信目前还没有统一的定义不同的专家和不同的组织有不同的解释。1990 年国际标准化组织与国际电子技术委员会ISO/IEC在其发布的目录服务系列标准中基于行为预期性定义了可信性如果第二个实体完全按照第一个实体的预期行动则第一个实体认为第二个实体是可信的。2002 年TCG 用实体行为的预期性来定义可信如果一个实体的行为总是以预期的方式达到预期的目标则这个实体是可信的。在人类社会中“信任”是一个模糊的概念可以是百分之百信任百分之五十信任不信任可以今天信任明天就不信任。在计算机的世界里很难做到模糊化TCG 在可信 PC 规范中采用了一种简单的信任度量模型1二值化只考虑信任和不信任两种极端情况。2无损化不考虑信任传递中的损失即认为信任在传递过程中没有损失。所谓信任传递就是甲信任乙乙信任丙于是甲也信任丙。3用数据完整性度量值充当信任值受目前信任度量理论和技术的限制还不能直接度量measure计算机系统的可信性于是采用数据完整性的度量值来作为可信性的度量值。在可信 PC 规范中信任链起始于 BIOS 启动块Boot BlockBIOS 启动块度量 BIOS BIOS 度量启动加载模块boot loader启动加载模块度量 OSOS 度量应用。一级度量一级一级信任一级把信任扩展到整个计算机系统。而存储和保护度量值的地方就在 TPMTrusted Platform Module。TCG 所定义的 TPM 是一种 SoCSystem on Chip芯片如图 12-2 所示。TPM 主要用来管理密钥、执行加解密运算、数字签名、安全存储数据。本章要介绍的 IMA和 EVM 会使用 TPM 管理的密钥会利用 TPM 提供的 PCRPlatform Configuration Register来存储完整性度量值。

相关文章:

Linux内核安全模块深入剖析【2.6】

第 11 章 Yama11.1 简介Yama 是一个源自古印度语的英文单词,翻译成汉语就是“阎罗”,阎罗是印度神话中掌管地狱的神。Yama 可以称为半个安全模块,说它是“半个”,原因是:(1)它是目前&#xff08…...

告别野指针和内存泄漏:用Cppcheck给你的C/C++项目做个免费‘体检’(附VS项目集成教程)

用Cppcheck为C/C项目构建自动化代码质量防护网 在软件开发领域,代码质量直接影响着产品的稳定性和安全性。对于C/C这类系统级语言来说,内存泄漏、野指针等问题往往潜伏在代码深处,直到运行时才突然爆发。而静态代码分析工具就像一位经验丰富的…...

STM32F103驱动TFT-LCD屏避坑指南:FSMC时序配置与ILI9341初始化那些事儿

STM32F103驱动TFT-LCD屏的实战技巧:时序优化与初始化陷阱全解析 1. 硬件连接与FSMC基础配置 对于STM32F103开发者而言,驱动TFT-LCD屏最常见的硬件方案是通过FSMC(灵活的静态存储控制器)接口模拟8080并行时序。这种设计巧妙利用了S…...

从仿真曲线到实际性能:手把手教你用IPKISS分析MZI Lattice Filter的插损与带宽

从仿真曲线到实际性能:手把手教你用IPKISS分析MZI Lattice Filter的插损与带宽 在光子集成电路设计中,仿真结果往往只是第一步。真正考验工程师功力的,是如何从这些曲线中提取出有工程价值的性能指标。本文将带您深入解读MZI Lattice Filter的…...

如何高效管理macOS安装文件?这款跨平台工具给你答案

如何高效管理macOS安装文件?这款跨平台工具给你答案 【免费下载链接】gibMacOS Py2/py3 script that can download macOS components direct from Apple 项目地址: https://gitcode.com/gh_mirrors/gi/gibMacOS 在技术爱好者和系统管理员的世界里&#xff0c…...

Display Driver Uninstaller架构解析:深度驱动清理技术原理与最佳实践

Display Driver Uninstaller架构解析:深度驱动清理技术原理与最佳实践 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drive…...

【Android】针灸大师-穴位解剖精准经络系统-医学生必备-会员版

【Android】针灸大师-穴位解剖精准经络系统-医学生必备-会员版 链接:https://pan.xunlei.com/s/VOtJd241jF6B-cTY3Gs64aacA1?pwdeynm# 针灸大师(Acupuncture master)将经络穴位与人体精细解剖相结合,是交互式学习十二经脉,奇经八脉,经络系统…...

大模型赋能金融行业:应用场景、现实挑战与应对策略

大模型技术在金融领域的应用日益深入,成为行业变革的重要驱动力,有助于降本增效、提升客户体验、赋能风险管理、促进业务创新和助力数字化转型。然而,金融行业应用大模型仍面临高质量数据不足、算力紧缺、技术缺陷、人才短缺及隐私安全等挑战…...

AI大神吴恩达力荐,轻松入门大语言模型实战(附中文PDF+代码)

这本书由AI科普大神Jay Alammar与BERTopic算法作者Maarten Grootendorst联合撰写,是O’Reilly出版的LLM入门标杆指南,获吴恩达推荐。全书以图解方式讲解LLM原理、提示工程、文本分类生成、多模态应用及优化技术,分为理解原理、应用及优化三部…...

RAG大模型落地必杀技:解决幻觉、私有数据三大痛点,提升回答可信度!

本文深入解析了检索增强生成(RAG)技术,旨在解决大模型应用中的知识过时、幻觉和私有数据使用难题。文章详细阐述了RAG的三大核心模块——知识库、检索和生成,并系统讲解了索引、检索、生成的具体实施流程和优化策略。此外&#xf…...

SD-PPP:如何在5分钟内为Photoshop安装免费AI插件并掌握专业绘图工作流

SD-PPP:如何在5分钟内为Photoshop安装免费AI插件并掌握专业绘图工作流 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp SD-PPP是一款免费开源的Photoshop AI插件,将先进的AI绘图能力直接集成…...

taotoken的按token计费模式如何帮助个人开发者控制实验成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的按Token计费模式如何帮助个人开发者控制实验成本 对于个人开发者、学生或独立研究者而言,在探索AI应用或进行…...

井下无信号密闭空间:UWB基站断联失效,无感定位纯视觉独立解算

井下无信号密闭空间:UWB基站断联失效,无感定位纯视觉独立解算矿山井下巷道、采掘工作面、密闭峒室等区域,属于典型无外源通信、信号隔绝的密闭作业空间。数字孪生与视频孪生技术逐步下沉矿山安全生产领域,镜像视界浙江科技有限公司…...

危险源空间风控,无感定位替代UWB成为新标准路径

在化工重大危险源管控领域,数字孪生与视频孪生技术正重塑安全风控底层逻辑。镜像视界浙江科技有限公司深耕空间智能感知与风险防控赛道,依托全栈自主技术体系,构建起适配化工高危场景的无感定位风控方案,其技术原创性、场景适配深…...

OpCore Simplify:一键生成OpenCore EFI的终极解决方案

OpCore Simplify:一键生成OpenCore EFI的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置的复杂流程头疼吗&…...

数据结构太难了?用画图的方式理解链表和栈和树和图

别怕,把它们画出来,你会发现数据结构就是一堆积木。👋 你好,我是 Evan,一名计算机专业的学长,也是《大一突围》专栏的作者。还记得大一第一次见到“链表”时,我被指针绕晕了。后来我试着一个节点…...

new一个指针再被智能指针接管和直接调用make_unique有什么区别? (接上篇的未完待续)

上篇代码有错误&#xff0c;在本篇幅更正#include <iostream> #include <memory> #include <vector> #include <utility> #include <cstddef> #include <type_traits> //std::enable_if_t<!std::is_array<T>::value, int&…...

Ryujinx模拟器完整指南:在PC上免费畅玩Switch游戏的终极解决方案

Ryujinx模拟器完整指南&#xff1a;在PC上免费畅玩Switch游戏的终极解决方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾经梦想在电脑上体验《塞尔达传说&#xff1a;王国…...

为ClaudeCode配置Taotoken作为稳定后备API服务避免中断

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为ClaudeCode配置Taotoken作为稳定后备API服务避免中断 基础教程类&#xff0c;针对担心Claude Code服务不稳定或配额不足的用户&a…...

Play Integrity API Checker:你的Android设备安全检测终极指南

Play Integrity API Checker&#xff1a;你的Android设备安全检测终极指南 【免费下载链接】play-integrity-checker-app Get info about your Device Integrity through the Play Intergrity API 项目地址: https://gitcode.com/gh_mirrors/pl/play-integrity-checker-app …...

windows VS工具判断动态库是32位还是64位

dumpbin /headers yourfile.dll | findstr "machine"...

如何在Windows任务栏实时监控硬件性能?TrafficMonitor硬件监控插件完整指南

如何在Windows任务栏实时监控硬件性能&#xff1f;TrafficMonitor硬件监控插件完整指南 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 还在为复杂的系统监控软件烦恼吗&#xf…...

HS2-HF Patch终极指南:一键解锁完整汉化与去码体验

HS2-HF Patch终极指南&#xff1a;一键解锁完整汉化与去码体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》的语言障碍和功能限制而…...

跨境电商标题焦虑?QA揭秘“批量更新标题“如何拯救你的运营效率

Q1&#xff1a;什么是"批量更新标题"&#xff1f;这玩意儿真的存在吗&#xff1f;Q&#xff1a;小彭&#xff0c;我听说有个功能叫"批量更新标题"&#xff0c;能批量改产品标题&#xff0c;是真的吗&#xff1f;还是又是那种"画大饼"的工具&…...

体验 Taotoken 官方价折扣与活动价带来的实际成本优势

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 体验 Taotoken 官方价折扣与活动价带来的实际成本优势 对于需要频繁调用大模型 API 的开发者和团队而言&#xff0c;成本控制是一个…...

五轴龙门机床厂家推荐,五轴龙门机床哪家好?

五轴龙门机床厂家推荐&#xff0c;五轴龙门机床哪家好&#xff1f;五轴龙门机床性能参数与场景适配分析。五轴龙门机床是高端装备制造的核心加工设备&#xff0c;广泛应用于航空航天、新能源、重工装备等领域。本文基于海天精工、纽威数控、环球工业机械、济南二机床四款主流国…...

centos7启动yum 安装失败原因(个人观点如有错误请指正)

第一步&#xff1a;修复 DNS&#xff08;最关键&#xff09; bash 运行 echo "nameserver 8.8.8.8" >> /etc/resolv.conf echo "nameserver 114.114.114.114" >> /etc/resolv.conf第二步&#xff1a;下载阿里云 CentOS7 国内源 bash 运行 curl…...

【软件架构师-综合题(3)】软件工程知识点

软件工程这一章围绕一个核心问题展开&#xff1a;软件不是靠灵感写出来的&#xff0c;而是要经过需求、设计、实现、验证、演化这一整条工程链路&#xff0c;被稳定地组织起来。 顺着这条链路去整理&#xff0c;第三章更适合分成六个层次来看&#xff1a;先看开发方法和开发模型…...

2026年,探寻靠谱体育器材的终极指南

在追求健康与活力的时代&#xff0c;体育器材成为了我们运动生活中的重要伙伴。但面对市场上琳琅满目的品牌和产品&#xff0c;如何选择靠谱的体育器材成为了许多人的难题。今天&#xff0c;让我们一同探寻 2026 年靠谱体育器材的终极指南。一、品质与口碑沧州九牌体育用品制造…...

关于fiddler报错“The system proxy was changed. click to reenable capturing”的解决办法

背景&#xff1a;第一次下载安装fiddler&#xff0c;安装过程没有任何问题&#xff0c;但启动即报错 参考了很多帖子&#xff0c;一个一个排查后&#xff0c;发现是sslvpn的问题&#xff08;因为访问校园网需要安装了 EasyConnect 深信服SSLVPN客户端&#xff09;&#xff0c;把…...