Lecture 12: 信任与操作系统(Trust and Operating Systems)

目录 · ← l9 · l11 →

Lecture 12: 信任与操作系统(Trust and Operating Systems)

概述

本讲从哲学与工程角度探讨信任:操作系统是软件世界的”信任之根”(trusted computing base),所有应用都依赖它提供安全与正确执行。我们学习信任的定义、建立信任的三种方式(假设/推断/替代),并通过 Linux 信任体系与 2024 年 xz/ssh 供应链攻击案例,理解过度信任(over-trust)的风险。

核心概念与系统机制图解

什么是信任?

  • 定义(AI 伦理文献):”一方愿意对另一方的行为保持脆弱(vulnerable),基于对对方将执行对信任方重要之行动的期望,无论信任方能否监控或控制对方。”
  • 哲学版本:信任是一种不加质疑的态度——我们停止质疑其可靠性,假定它会正常工作。
  • 为什么需要信任
    1. 扩展能动性(agency):信任让你能做超出直接控制范围的事;
    2. 提高效率:不必事事亲力亲为;
    3. 保持心智健全(sanity):不必持续担忧。
  • 风险:信任带来依赖与脆弱性;信任被违背可能造成严重伤害(例如 OS 静默断开蓝牙连接,导致血糖监测仪停止报警)。

过度信任 vs 不值得信任

  • 过度信任(over-trust):信任方把信任扩展到不合理范围(信任方的问题)。
  • 不值得信任(untrustworthiness):受托方客观上缺乏诚信/可靠性(受托方的问题)。

建立信任的三种方式

| 方式 | 机制 | 强度 | | :— | :— | :— | | 假设(Assumption) | 没有证据地信任(如有人喊”小心!车来了”) | 弱、有风险 | | 推断(Inference) | 依据过往行为/特征推断(用得久、口碑好、品牌) | 最强 | | 替代(Substitution) | 有后备方案兜底(杂技演员信任搭档因为下面有安全网) | 取决于后备方案本身可信 |

软件中的信任:操作系统是信任之根

应用 ──依赖──► 操作系统内核 ──依赖──► 硬件/固件(BIOS)
              (trusted computing base)
应用的安全性不会超过它所运行的操作系统
  • 软件如何建立信任:假设方式不可用;推断 = 通过”不信任”走向信任(测试、验证、插桩、代码评审);替代 = 出错时检测并纠正(日志、一致性检查、超时、冗余)。
  • 确认偏误(Confirmation Bias):看起来正常工作的系统让我们停止质疑——一种过度信任。

案例:2024 xz/ssh 供应链攻击

攻击者伪装成开源开发者 "Jia Tan" 数年 → 逐步获得 xz 维护权
→ 在 xz 中植入后门 (同时操纵 OSS-Fuzz 扫描器禁用检测)
→ sshd 依赖 systemd → systemd 依赖 xz 压缩库
→ 动态链接时后门被带入 sshd → 可远程接管任何 Linux 系统
→ 仅因有人好奇 sshd 的小延迟而偶然发现
教训: 强信任体系也会因过度信任而失败
  • Linux 对 AI 生成代码的政策(2026 年 4 月):AI 可协助写代码,但只有人类可以贡献代码,人类对每一行负全责。

代码示例与系统调用解说

示例:信任边界与最小权限(代码层面的”替代”思想)

#include <cstdio>
#include <sys/types.h>
#include <unistd.h>

// 演示: 程序启动后立即放弃特权 (drop privileges)
int main() {
    if (getuid() == 0) {
        // 需要 root 才能做的事, 做完立即降权
        setuid(1000);   // 放弃 root 特权
        setgid(1000);
    }
    // 之后以普通用户身份运行——即使被攻破, 损害也被限制在信任边界内
    FILE* f = fopen("/etc/passwd", "r");  // 普通用户无法写系统关键文件
    if (!f) perror("open denied (by design)");
    return 0;
}

【代码做了什么?】 程序在完成特权操作后调用 setuid/setgid 降权,以最小权限继续运行。

【系统机制透视】

  • 这是”最小权限原则“的实践:把信任边界尽量缩小。操作系统通过用户/组 ID、权限位、capabilities 实施这一边界——内核本身是唯一真正”全权”的软件。
  • 与 Lecture 12 主题的联系:我们信任内核执行权限检查,正是”推断 + 替代”的结合——公开源码、代码评审(推断),加上权限检查失败时的显式报错(替代)。

关键要点

  1. 信任 = 愿意脆弱 + 期望对方尽责 + 无法监控;它扩展能动性但也带来风险。
  2. 信任的三种建立方式:假设(弱)、推断(最强)、替代(依赖后备方案)。
  3. 操作系统是信任之根(trusted computing base):应用的安全性不可能超过其 OS。
  4. 软件的信任靠”通过不信任建立信任”:测试、评审、日志、一致性检查、冗余。
  5. 供应链攻击(xz/ssh)证明:过度信任 + 确认偏误可攻破看似健全的信任体系。

常见陷阱与注意事项

  • 确认偏误:系统”看起来正常”就不再审视。
  • 过度信任第三方组件:每个依赖(库、日志系统)都是攻击面。
  • 特权不降权:常以 root 运行、用后不释放权限。
  • 没有后备/监控:缺乏日志与一致性检查,错误无法被发现和纠正。

思考题

  1. 问题:为什么说”推断是建立信任的最强方式”?
    • 答案:推断基于可验证的证据(过往行为、构造方式、口碑),比无条件假设可靠;比替代更根本——替代只是把信任转移给后备系统,而推断直接评估受托方本身的可信度。
  2. 问题:xz/ssh 攻击中,信任链是如何被利用的?
    • 答案:ssh 开发者信任 systemd 日志系统,systemd 信任 xz 压缩库,而 xz 被长期渗透的”合法”维护者植入了后门——信任链上任何一环的过度信任都被攻击者利用,且攻击者还操纵了扫描工具禁用检测(破坏”替代”防线)。