关于 SELinux 的各种理论知识

在用户态部署 SELinux SELinux 架构图(源自 SELinux Notebook ): 正如此文 所述: There can only be one Security Server, which resides in the kernel. However, the AVCs and OMs can reside both in the kernel and in userspace. Security Server 即二进制策略储存处,内核 LSM 中又称 policydb,有且仅有一份,处于内核中; Access Vector Cache(AVC)缓存 Security Server 对近期一些访问行为的决定,既可在 …

SELinux:给文件单独打标签

需求:针对某个设备文件,阻止除特定进程以外的进程写入。 拿 /dev/tty20 做试验。实验环境:Fedora 38,x64 虚拟机。 给设备打标签,阻止普通写 创建 .te 策略文件之最最基础版: 1policy_module(tty20, 1.0.0) 2 3type tty20_t; 构建并加载策略模块: 1make -f /usr/share/selinux/devel/Makefile 2semodule -i tty20.pp 这里参考了这篇问答 。 尝试变更 /dev/tty20 的标签: 1chcon -t tty20_t /dev/tty20 大概率会因为缺少必要的权限而报错。 查看最近 AVC 类型的审计日志: …

关于 SELinux 策略的各种操作

具体策略的查询 关于 SELinux 策略,我们时常要去了解:关于系统中的一个操作,为什么 SELinux 会允许/拒绝;其背后具体的规则是怎样的。此时我们可以使用 sesearch 来查询策略中具体的规则: 1# 探究【主体 A】对【客体 B】是否有【类型 C】的【权限 D】: 2# sesearch -A -s A -t B -c C -p D 3sesearch -A -s kernel_t -t unconfined_t -p setsched 4sesearch -A -s kernel_t -t unconfined_t -c key -p view 在查出对应的规则后,可以配合 seinfo 进一步了解规则中主、客体的 …

SELinux:系统启动时通过用户态配置动态关闭的流程

要在系统启动时彻底关闭 SELinux(即设为 Disabled 状态),已知有几种办法: 内核启动参数 selinux=0 配置 /etc/selinux/config 关于 /etc/selinux/config,我们知道可以通过它来对 SELinux 进行初始设置,包括运行状态以及要加载的策略文件。那么,这是怎么做到的呢?又是谁实际执行了这些操作?在开闭 SELinux 上,通过它与通过内核启动参数有何不同? 首先,内核对该文件完全是不感知的:查遍 security/selinux 下的所有代码,都没有关于该文件的内容。随后在 Fedora 的 Wiki 上查到: When booting up the machine, …

CVE-2021-43057 分析

0x00 基本信息 信息总览:NVD 链接 漏洞披露:bugs.chromium.org 漏洞评估:CVSS 7.8 上游补丁:链接 0x01 详细描述 在 selinux_ptrace_traceme 函数(即 SELinux 对 PTRACE_TRACEME 的 LSM 接口的实现)中发现一个 Use-After-Free 问题,该问题是由于错误地尝试获取其他内核任务的*主体凭证(Subjective Credential)*而导致的。具体情况如下: 原先在 SELinux 中,有个函数 task_sid() 可以获取一个内核任务的*客体凭证(Objective Credential)*所对应的 SID,但却被用在了一些应该使用 …