Skip to content

入门:安全目标 CIA、保护与信任域

基于通用操作系统概念 · 核于 2026-08

速查

  • 安全目标 CIA:所有 OS 安全设计的终极目标,机密性(Confidentiality,防泄露)+ 完整性(Integrity,防篡改)+ 可用性(Availability,防拒绝),三者缺一不可,常被并称"安全三角"。
  • 保护 vs 安全保护(Protection)= 机制(特权级/地址隔离/ACL,"怎么隔离");安全(Security)= 策略(谁能做什么、如何认证,"该不该让做")。保护是墙,安全决定开门策略。
  • 信任域:CPU 用特权级划出**内核态(Ring 0,可信,全权限)用户态(Ring 3,不可信,受限)**两个信任域——内核信任自己,不信任任何应用。
  • 隔离三大件:①特权级隔离(应用不能执行特权指令);②地址空间隔离(虚拟内存让进程互相看不见对方内存);③时间隔离(调度让进程轮流跑,不能一直霸占)。
  • 最小权限原则(Least Privilege):每个程序/进程/用户只授予完成任务所必需的最小权限,且权限只在需要时持有、用完即收回——缩小攻击面。
  • 参考监视器(Reference Monitor):所有访问决策都必须经过的不可绕过的内核仲裁点,它要始终生效、防篡改、可审计——这是 OS 保护的理论基石。
  • 信任边界与攻击面:跨越信任边界(syscall/IPC/网络输入)的数据都不可信,必须校验;攻击面 = 所有暴露给不可信输入的接口总和
  • 可信计算基(TCB):系统中所有必须正确才能保证安全的代码与硬件的集合——TCB 越小越安全(微内核 TCB 小于单体内核)。
  • 纵深防御(Defense in Depth):不依赖单层防护,多层叠加(特权级 + ASLR + DEP + Canary),任一层被攻破仍有其他层兜底。
  • CIA 取舍:机密性与可用性常冲突——加密越严越慢、访问越严越不便;安全设计永远在三角间权衡,没有"绝对安全"。
  • 安全是链条:整个系统的安全强度由最薄弱环节决定(木桶原理),一个弱口令可让全套 ACL 失效。
  • 本叶边界:只讲 OS 层隔离与防护(特权级/内存/文件权限);网络层加密/TLS/防火墙归网络安全章
  • 进阶顺序访问控制与身份认证缓冲区溢出与防御参考

一、CIA 三要素:安全的终极目标

任何 OS 安全机制,最终都在守护三个目标——合称 CIA 三元组(Triad)

要素含义防的是什么典型机制
机密性 Confidentiality信息不被未授权者获取泄露、窃听访问控制(ACL/capability)、加密、权限位
完整性 Integrity信息不被未授权者篡改(含可检测篡改)篡改、伪造写权限校验、哈希校验、数字签名、日志审计
可用性 Availability授权用户能正常访问系统与数据拒绝服务(DoS)、宕机冗余备份、限流、特权级(防独占 CPU)、看门狗
  • 三者缺一不可:一份医疗病历,泄露(破机密性)侵犯隐私,被篡改(破完整性)可能致命,医生看不了(破可用性)同样致命。
  • 常相互冲突:最严格的机密性(断网、全盘加密、强制复杂密码)会损害可用性(慢、易锁死、难用);安全设计永远在三角间权衡取舍
  • CIA 之外还有真实性(Authenticity,主体身份可信)、**不可否认性(Non-repudiation,行为可追溯)**等扩展目标,但 CIA 是核心。

二、保护与安全:机制与策略

两个常被混用的词,在 OS 里有明确分工:

  • 保护(Protection)= 机制(Mechanism):回答"如何隔离与校验"。它是硬件 + OS 提供的技术手段——CPU 特权级、虚拟内存页表、ACL 表、capability 令牌。机制本身不关心"该不该让",只负责"能不能做到精确隔离"
  • 安全(Security)= 策略(Policy):回答"谁应该能做什么"。它是管理者制定的规则——"普通用户不能读 /etc/shadow"、"管理员才能安装软件"。策略决定开门的规则,机制负责把门装好并执行规则

一句话:保护机制是墙和门,安全策略决定墙上开哪些门、谁拿钥匙。 好的设计原则是"机制与策略分离"——机制应足够通用以支持任何策略,这样换策略不用改内核。例如 Unix 的 rwx 位是机制,"谁能进 sudo 组"是策略。

三、信任域:用户态与内核态

OS 把世界划成两个信任域,基于"信任程度"而非"善恶":

  • 内核态(Ring 0,可信域):内核代码与驱动运行于此,被完全信任——能执行所有特权指令(操作页表、关中断、访全部内存、操纵硬件)。内核 bug 等于系统失守。

  • 用户态(Ring 3,不可信域):所有应用运行于此,不被信任——不能执行特权指令、不能直接访内核内存、不能直接操纵硬件。要 OS 服务必须经**系统调用(syscall)**陷入内核态,由内核仲裁。

  • 为什么要这样划:同一台机器上跑着你的浏览器、银行 APP、来路不明的脚本,它们互不信任。OS 用特权级 + 虚拟内存把每个进程关进沙箱,让"应用犯错或作恶,只影响自己,不波及系统与他人"。

  • 参考监视器(Reference Monitor):所有跨越信任域的访问决策都必经的内核仲裁点。它要满足三条:①始终生效(不可绕过);②防篡改(攻击者改不了);③可审计(决策有记录可查)。syscall 入口、文件权限校验、内存访问的页表检查都是参考监视器的实例。

  • 可信计算基(TCB):系统中"必须正确才能保证安全"的全部代码与硬件。内核 + 硬件是 TCB 的主体。TCB 越小越安全——这是微内核的核心论点:把更多服务挪出内核,缩小 TCB,减少被攻破面。

四、最小权限原则与纵深防御

两条贯穿所有安全设计的基本原则

  • 最小权限原则(Principle of Least Privilege):每个主体(用户/进程/程序)只应拥有完成其合法任务所必需的最小权限,且权限应只在需要时授予、用完即收回

    • 例:Web 服务器只需读静态文件、监听 80 端口,不该有 root 权限——一旦被攻破,攻击者也只能拿到 Web 服务器那点权限,而不是整个系统。Android 把每个 APP 关进独立沙箱、各自独立 UID,正是此原则的工程实践。
    • 反例:早期很多服务以 root 跑,一个缓冲区溢出直接拿到系统最高权限——这是最小权限原则被违反的典型灾难。
  • 纵深防御(Defense in Depth)不把安全赌在单层防护上,而是多层叠加,任一层被攻破仍有其他层兜底。

    • 缓冲区溢出攻击的典型纵深防御:ASLR(让攻击者猜不准地址)+ DEP(让注入的代码不可执行)+ Stack Canary(检测返回地址被覆盖)+ CFI(限制间接跳转目标)。单用任一种都可能被绕过,叠加后才形成可靠防线
    • 这与"安全是链条、强度由最薄弱环节决定"并不矛盾——纵深防御正是为了把每个环节都加固,消除薄弱点。

下一步

理解了安全目标与信任域后,下一步深入机制层——访问控制与身份认证(ACL 与 capability 两类权限模型的取舍、Unix rwx、身份认证方式)。