Lecture 12: 信任与操作系统(Trust and Operating Systems)
Lecture 12: 信任与操作系统(Trust and Operating Systems)
概述
本讲从哲学与工程角度探讨信任:操作系统是软件世界的”信任之根”(trusted computing base),所有应用都依赖它提供安全与正确执行。我们学习信任的定义、建立信任的三种方式(假设/推断/替代),并通过 Linux 信任体系与 2024 年 xz/ssh 供应链攻击案例,理解过度信任(over-trust)的风险。
核心概念与系统机制图解
什么是信任?
- 定义(AI 伦理文献):”一方愿意对另一方的行为保持脆弱(vulnerable),基于对对方将执行对信任方重要之行动的期望,无论信任方能否监控或控制对方。”
- 哲学版本:信任是一种不加质疑的态度——我们停止质疑其可靠性,假定它会正常工作。
- 为什么需要信任:
- 扩展能动性(agency):信任让你能做超出直接控制范围的事;
- 提高效率:不必事事亲力亲为;
- 保持心智健全(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 主题的联系:我们信任内核执行权限检查,正是”推断 + 替代”的结合——公开源码、代码评审(推断),加上权限检查失败时的显式报错(替代)。
关键要点
- 信任 = 愿意脆弱 + 期望对方尽责 + 无法监控;它扩展能动性但也带来风险。
- 信任的三种建立方式:假设(弱)、推断(最强)、替代(依赖后备方案)。
- 操作系统是信任之根(trusted computing base):应用的安全性不可能超过其 OS。
- 软件的信任靠”通过不信任建立信任”:测试、评审、日志、一致性检查、冗余。
- 供应链攻击(xz/ssh)证明:过度信任 + 确认偏误可攻破看似健全的信任体系。
常见陷阱与注意事项
- 确认偏误:系统”看起来正常”就不再审视。
- 过度信任第三方组件:每个依赖(库、日志系统)都是攻击面。
- 特权不降权:常以 root 运行、用后不释放权限。
- 没有后备/监控:缺乏日志与一致性检查,错误无法被发现和纠正。
思考题
- 问题:为什么说”推断是建立信任的最强方式”?
- 答案:推断基于可验证的证据(过往行为、构造方式、口碑),比无条件假设可靠;比替代更根本——替代只是把信任转移给后备系统,而推断直接评估受托方本身的可信度。
- 问题:xz/ssh 攻击中,信任链是如何被利用的?
- 答案:ssh 开发者信任 systemd 日志系统,systemd 信任 xz 压缩库,而 xz 被长期渗透的”合法”维护者植入了后门——信任链上任何一环的过度信任都被攻击者利用,且攻击者还操纵了扫描工具禁用检测(破坏”替代”防线)。
