跳到主要内容

安全与保护:内核中的堡垒

在现代互联的世界中,操作系统是最后一道防线。安全不仅仅是一个特性,它是确保用户间隔离、保护内核免受应用侵害以及维护数据完整性的根本属性。

本章探讨用于强制执行访问控制的机制、硬件级漏洞的真相,以及用于构建安全沙箱环境的现代工具。


1. 多层安全模型

1.1 认证 (Authentication) vs. 授权 (Authorization)

  • 认证:验证用户是谁(密码、SSH 密钥、生物识别)。
  • 授权:验证用户被允许做什么(权限、ACL)。

1.2 最小特权原则 (Principle of Least Privilege)

安全的基础规则:一个进程应该仅拥有执行其任务所需的最小权限集,且仅在所需的最短时间内拥有。


2. 访问控制机制

2.1 DAC (自主访问控制)

传统的 Unix 模型(UID, GID)。

  • 所有者:拥有文件的用户决定谁可以读取、写入或执行该文件。
  • 弱点:如果用户的帐户被入侵,攻击者将完全控制该用户的所有文件。它无法防止所有者对文件的“意外”滥用。

2.2 MAC (强制访问控制)

由中心权威机构(操作系统安全策略)决定访问。用户不能覆盖这些规则。

  • SELinux (安全增强型 Linux):为每个文件、进程和套接字使用“标签 (Labels)”。策略基于 类型强制 (Type Enforcement)。即使是 root 用户也可以被限制。
  • AppArmor:使用基于文件路径的“配置文件 (Profiles)”。它比 SELinux 更易于配置,但粒度稍粗。

2.3 RBAC (基于角色的访问控制)

权限被分配给角色,而用户被分配给角色。这简化了大型组织中的权限管理。


3. 沙箱与隔离技术

我们如何安全地运行不可信的代码?

3.1 Linux Capabilities (能力机制)

传统上,进程要么是 root (UID 0),要么是普通用户。这种划分太“全或无”了。

  • Capabilities:Linux 将 root 特权分解为 40 多个离散单元(例如,CAP_NET_BIND_SERVICE 允许进程在没有完整 root 权限的情况下绑定到 80 端口)。

3.2 seccomp-bpf (安全计算模式)

减少内核攻击面最强大的工具。

  • 机制:进程告诉内核:“我只使用这 10 个系统调用。如果我尝试使用其他的,就请杀掉我。”
  • 用例:Chrome/Firefox 使用 seccomp 来沙箱化它们的渲染进程。

3.3 Landlock

一种新的 Linux 安全模块 (LSM),允许非特权进程通过创建私有的“文件系统规则”来沙箱化自己(例如,“我只能从 /tmp 读取”)。


4. 硬件安全与侧信道

4.1 保护环与 ASLR

  • 保护环:硬件强制的特权级别(Ring 0 vs. Ring 3)。
  • ASLR (地址空间布局随机化):每次应用启动时随机化栈、堆和库的内存位置,使得“缓冲区溢出”和“Return-to-libc”攻击变得困难得多。

4.2 侧信道攻击:Meltdown 与 Spectre

这些攻击利用了 CPU 的性能优化而非软件漏洞。

  • Meltdown (熔断):利用乱序执行来读取内核内存。通过 KPTI(拆分用户和内核页表)进行缓解。
  • Spectre (幽灵):利用预测执行和分支预测在进程间泄露数据。通过编译器更改 (Retpolines) 和微代码更新进行缓解。

5. 内核中的加密

内核为应用程序和自身提供高性能的加密原语。

  • 内核加密 API (Kernel Crypto API):一个密码学库(AES, SHA),可以利用硬件加速(如 Intel AES-NI)。
  • dm-crypt / LUKS:提供全盘加密。数据在块层被实时加密/解密。
  • 内核密钥保留服务 (Kernel Key Retention Service):内核内部的安全“金库”,用于存储密码、密钥和令牌,防止它们泄露到用户态内存。

6. 现代威胁态势

6.1 权限提升 (Privilege Escalation)

攻击者最初是低特权用户,通过发现 SetUID 二进制文件或内核驱动程序中的漏洞来获取 root 访问权限。

  • 防御:最小化 SetUID 二进制文件并使用 MAC (SELinux)。

6.2 供应链攻击

恶意代码被注入到依赖项中(例如 NPM 包或 C 库)。

  • 防御:静态分析、软件物料清单 (SBOM) 以及严格的沙箱化。

7. 安全审计与工具

工具关注点关键概念
auditd日志记录跟踪每次系统调用、文件访问和登录
sealertSELinux解释动作为什么被阻止以及如何修复
getcap / setcap能力机制检查/设置离散的进程特权
lynis审计用于 Linux 加固的安全扫描器
faillog认证检查失败的登录尝试

8. 核心概念复习清单

  • 解释 DAC 和 MAC 之间的区别。
  • 为什么 seccomp 对现代浏览器安全至关重要?
  • ASLR 如何缓解缓冲区溢出攻击?
  • 什么是“能力机制 (Capability)”,它如何提高安全性?
  • 解释 Meltdown 如何允许非特权用户读取内核内存。

第 08 章结束。继续前往:第 09 章:虚拟化与容器