Lec 1什么是计算机安全?
这是当前课程已收录的第一篇。
Lec 1 什么是计算机安全?
TL;DR
- 安全结论只在明确的系统模型与威胁模型内成立;设计必须分别说明攻击者能力、安全目标和实现机制。
- 机密性、完整性与可用性描述不同保护目标,而现实系统不可能同时抵御所有物理、软件与社会工程攻击。
- 失败通常来自目标定义错误、威胁模型遗漏或实现漏洞;公开设计、最小权限和纵深防御用于降低单点假设失效的代价。
1. 安全的核心框架
计算机安全的目标:在对手(adversary)的攻击下,系统仍能正确运行。
系统设计的三要素:
| 要素 | 含义 | 示例 |
|---|---|---|
| 模型(Model / Threat Model) | 系统与攻击者的交互方式,攻击者能力边界 | 攻击者可发送网络包,但不能物理接触服务器 |
| 目标(Goal) | 系统需要保证的安全属性 | 只有 Alice 能读取文件 F |
| 实现(Implementation) | 如何在该模型下实现目标 | 设置文件权限、启用密码+双因素认证 |
Kerckhoff 原则:
实现方案永远假定为公开,唯一保密的是密钥(secret key)
2. 安全目标的三大类别
- 机密性(Confidentiality):对手无法获取敏感信息
- 完整性(Integrity):对手无法篡改系统状态
- 可用性(Availability):系统在攻击下仍能正常运行
3. 安全为何困难
3.1 负向目标(Negative Goal)
实现正向功能只需一条代码路径,而安全要求没有任何漏洞路径——需要考虑所有可能攻击。
3.2 典型案例:成绩单文件
攻击途径包括:利用服务器漏洞、猜测助教密码、窃取笔记本、拦截网络传输、破解加密方案、入侵注册办公室……
4. 三类失败原因
4.1 目标设计不当
-
航空公司商务舱票:允许"随时改签不收费",但未限定"登机后禁止改签"——攻击者可无限循环乘机。
-
Sarah Palin 邮件被盗:Yahoo 密码重置通过安全问题完成,而答案可从互联网公开信息找到。策略实际上等价于"密码 OR 安全问题"。
-
Mat Honan 账户链式攻击:
- Amazon 允许无验证添加信用卡
- 用刚添加卡的末四位通过 Apple 密码重置
- 进入 Apple 邮件 → 触发 Gmail 密码重置
- 教训:各个策略单独看合理,组合后产生漏洞。
-
Fairfax 学校权限提升: 老师可将学生加入班级 → 修改学生密码 → 将 Superintendent 变为"学生" → 修改其密码 → 获取全校文件访问权。
-
TLS 证书 OCR 漏洞:CA 对
.eu域名联系人邮件地址用 OCR 识别 ASCII 图片,a1telekom.at被误读为altelekom.at,攻击者注册误读域名即可冒充合法域名获取证书 -
管理/维护盲点:谁能修改权限?谁能访问审计日志?谁能管理备份?
4.2 威胁模型假设错误
| 假设 | 实际漏洞 |
|---|---|
| 用户不会向对手透露 2FA 码 | 电话社工可骗取用户实时输入验证码 |
| 个人信息难以获取 | Facebook 等使安全问题答案几乎公开 |
| 56-bit DES 够安全(1980s) | 如今暴力破解仅需 ~$100 |
| IP 限速防止 DDoS | 攻击者控制百万台僵尸设备 |
| CAPTCHA 需要 OCR 才能破解 | 人工破解服务每个不到 $0.01 |
| 所有 CA 不会被攻破 | 2011 年 DigiNotar 被攻破,伪造了 Google/Yahoo/Tor 等证书 |
| 安全通过隐藏实现(Security through Obscurity) | Clipper Chip 等案例证明此策略不可靠 |
4.3 实现结果的漏洞
缓冲区溢出:C 代码对缓冲区边界检查不当 → 覆盖返回地址 → 任意代码执行。
iCloud 限速遗漏:对所有登录接口限速,但"查找 iPhone" API 遗忘限速 → 每天可暴力猜测数百万次密码。
不安全默认配置:路由器默认密码、AWS S3 Bucket 默认公开权限——大系统中极易遗漏配置,默认必须安全。
MS Office 签名绕过:
- Bug 1:未检查签名文档是否为顶层文档,可嵌套欺骗显示"已签名"
- Bug 2:Mac 版只要存在签名对象就显示"受数字签名保护",不验证签名内容
Citi 缺失授权检查:账户页面 URL 含账户 ID(x.citi.com/id=1234),服务器未校验当前登录用户是否匹配,可枚举他人账户。
随机数质量问题:
- Sony PS3:签名时重用随机数 nonce → 私钥可被数学推导出
- Debian OpenSSL(2008):开发者删除 PRNG 初始化代码,所有生成密钥可被猜测
- Android 比特币钱包:
SecureRandom未初始化 → ECDSA nonce 重复 → 私钥泄露 → 比特币被盗
5. 设计原则
目标与威胁模型层面
- 创建简单、通用的安全目标
- 通过更好的系统设计消除对不合理假设的依赖
- 不断学习、迭代(安全不可能一次做对)
- 纵深防御(Defense in Depth):多层防御,单点失效不导致整体崩溃
实现层面
- 系统越简单,漏洞越少
- 将安全关键部分独立为小模块(如 HSM 硬件安全模块)
- 复用经过充分测试的代码和密码库
- 充分理解并测试边界情况
关键公式 / 定义
机密性(非正式):对任意高效对手 ,其输出与受害者秘密独立。
可行性阈值(实践经验值):
安全的博弈定义(非正式):
- 挑战者(Challenger)设置系统
- 对手(Adversary)在威胁模型约束下与系统交互
- 若对手无法以不可忽略概率违反安全目标,则称系统是安全的
公开漏洞数据库, 如https://www.cve.org/
我的理解
安全结论永远附着在威胁模型上;不先说明资产、对手能力和失败边界,“安全”就只是无法验证的形容词。