一个信息系统能够正常启动,并不等于它值得信任。真正的安全问题是:系统保存和提供的哪些东西有价值,它们可能以什么方式受损,我们准备怎样预防、发现、处置并恢复,以及如何证明这些措施确实有效。

在第一部分,我们建立一套可反复使用的分析框架。面对任意系统,先回答三个问题:保护什么资产?资产受到什么威胁?用什么对策把风险降到可接受范围?
完成本章后,你应该能够:
计算机安全保护的不只是文件。硬件、固件、操作系统、应用程序、数据库、密码与密钥、处理能力、网络带宽、通信链路、机房设施和组织声誉都可能是资产。安全也不是“装一个产品”就结束,而是贯穿设计、部署、运维、人员变动与退役的过程。
安全不是脱离业务的绝对状态。可接受的保护强度取决于资产价值、潜在损害、威胁发生概率、控制成本以及法律和业务约束。
机密性要求访问与披露遵循授权限制。它包含两层含义:一是敏感数据不能被无权主体读取;二是个人应能影响与自己有关的信息如何被收集、保存和分享。机密性丢失的直接表现是未授权披露。
访问控制、传输加密、存储加密、密钥管理和数据脱敏都能服务于机密性,但任何单一措施都不充分。例如,文件已经加密,若密钥与密文放在同一处且权限相同,攻击者仍可能同时取得二者;通信内容被加密,流量的时间、长度和通信双方仍可能泄露行为规律。
数据完整性要求信息与程序只按规定方式被修改;系统完整性要求系统持续执行预期功能,不受故意或意外操纵。完整性丢失包括未授权修改、删除、插入、重排、伪造,以及系统功能被改造成非预期行为。
完整性保护不仅要发现“变了”,还要回答“谁改的、是否有权、能否恢复”。哈希适合发现比特变化,消息认证码和数字签名还能提供更强的来源与完整性证据,细粒度权限限制修改者,审计记录帮助追踪修改过程,可信备份负责恢复。
可用性要求授权主体在需要时能够使用资源,并达到约定的性能。系统虽然仍返回响应,但如果耗时已经超过业务允许范围,也可能在实际意义上不可用。冗余、限流、容量规划、健康检查、故障转移、备份与灾难恢复都是常见措施。
真实性回答“这个用户、设备、消息或来源是真的吗”;可追责性要求行为能唯一追溯到相应主体。身份认证、来源认证、不可否认性和受保护的审计日志共同支持这两项属性。由于防护不可能消灭全部风险,系统必须保留足够证据,以便调查、归责、修复和处理争议。

同一资产在不同目标上的要求可能不同。学生成绩对机密性与完整性要求较高;匿名娱乐投票对完整性的要求较低;关键身份认证服务对可用性的要求极高。可以把损失影响分为低、中、高:低表示影响有限且主要功能仍可完成;中表示业务能力明显下降并产生显著损失;高表示关键任务中断或造成灾难性后果。
安全分析中的术语必须保持清楚,否则容易把“可能发生的危险”和“已经执行的行为”混为一谈。

对策本身也可能引入新漏洞。例如,集中身份服务便于统一控制,却可能成为高价值单点目标;自动备份提高恢复能力,若备份账号权限过大,又可能扩大泄露范围。因此,部署控制后仍然存在的风险称为残余风险,它需要继续监控、接受、转移或进一步降低。
未授权披露包括直接暴露、通信截获、通过统计或流量特征进行推断,以及绕过保护后的入侵读取。它首先威胁机密性。
欺骗使授权主体相信错误数据,包括冒充合法身份、伪造数据、否认已经发送或接收的行为。它主要威胁数据或系统完整性,也会削弱真实性与可追责性。
破坏使服务或功能中断、失常,包括让组件失去能力、腐化系统功能,以及通过占用通信或计算资源阻碍正常操作。它威胁可用性与系统完整性。
篡夺是未授权主体取得系统资源或功能的控制权,包括盗用处理能力、带宽或账号,以及让组件执行有害功能。它主要威胁系统完整性。
被动攻击只观察或利用信息,不改变系统资源,典型形式是监听消息内容和分析流量模式。它往往难以察觉,因此重点是通过加密、流量保护和最小化暴露来预防。
主动攻击会修改数据流、制造虚假数据流或影响运行,常见形式包括伪装、重放、消息修改和拒绝服务。完全阻止所有主动攻击通常不现实,设计重点应同时覆盖检测、响应和恢复。

外部攻击由安全边界外的未授权主体发起;内部攻击由边界内、原本拥有某些访问权的主体滥用权限发起。内部人员熟悉流程并拥有合法入口,不能仅靠边界防火墙处理,因此还需最小权限、职责分离、行为审计和异常检测。
仅列出威胁还不足以指导建设。完整的功能要求既包含技术控制,也包含管理与运行控制。常见领域包括:访问控制、意识与培训、审计与可追责、持续安全评估、配置管理、应急与业务连续性、身份鉴别、事件响应、维护、介质保护、物理与环境保护、安全规划、人员安全、风险评估、系统与服务采购、通信保护,以及系统与信息完整性。
其中访问控制、身份鉴别、通信保护和信息完整性偏重技术;培训、规划、人员、物理环境、风险评估等偏重管理;配置管理、事件响应和介质保护则横跨两者。有效安全必须把技术、流程和人员放在同一张图上。
加密、数字签名、访问控制、完整性校验、认证交换、流量填充、路由控制和可信第三方见证属于可针对具体协议或数据流部署的机制。可信功能、安全标签、事件检测、审计轨迹和安全恢复则贯穿多个层次。
一个服务通常需要多个机制,一个机制也可能支持多个服务。数字签名可以同时支持来源真实性、完整性和不可否认性;审计日志能支持检测与追责,但如果日志本身可被任意修改,它就无法提供可信证据。
攻击面会随计算环境变化而扩大。恶意软件仍是高频入口,钓鱼把技术漏洞与人的判断结合起来;移动设备与便携终端带来丢失和越界接入问题;内部账号滥用、拒绝服务、无线网络弱配置、口令窃取和经济欺诈则说明风险不会集中在单一层次。
成熟控制通常先得到广泛采用,例如防火墙、恶意代码防护、虚拟专用网络和补丁管理。它们容易理解、成本可控且能覆盖常见威胁,但“普及”并不意味着“足够”。现代系统还需要传输与静态数据加密、入侵检测与阻止、集中日志、端点防护、数据防泄漏、服务端访问控制、取证工具、公钥基础设施、一次性令牌、无线安全、虚拟化隔离和适当的生物特征认证。
选择控制时应避免按产品热度排序。正确方法是把每项控制映射到资产、威胁、漏洞与安全目标。例如,补丁管理主要减少可利用漏洞,集中日志提高检测与追责能力,备份提高恢复能力,数据防泄漏面向敏感数据的异常外发,而多因素认证降低口令单点失守的影响。
完整安全战略包含三个相互约束的层面:策略规定系统应该做什么,机制负责如何做到,保障回答设计与实现是否真的符合要求。评估则依据明确准则,用测试、检查、审计和分析来形成证据。
安全策略应明确允许和禁止的行为、主体、资源、条件与责任,并由资产价值、系统漏洞、潜在威胁和攻击概率驱动。策略同时要权衡易用性与安全性,以及防护成本与失败、恢复成本。增加认证步骤会影响使用体验,深度检测会消耗处理能力,但控制不足又可能造成更大损失。

保障不是“绝对证明安全”,而是对控制按预期工作的信心水平。它同时检查设计是否满足需求、实现是否符合规格。评估越严格,得到的信心通常越强,但仍要承认系统、环境和威胁会变化,因此需要持续验证。
下面的实验只在本地沙盒中操作两个普通文本文件。两个文件大小完全相同,内容只把金额从 100 改为 900。使用 SHA-256 计算摘要,真实结果如下:
original.txt 30 bytes
SHA-256: 15961b47e1d5894256e21c7b02ccce3098cfe70ec63601129f9547f9361cf93c
tampered.txt 30 bytes
SHA-256: 6e2a08b80a384770d58318588b697770f1536f348c4fb70c668f1bbaef64709e可以看到,文件大小不能证明内容未变,而单个数字的变化会使摘要完全不同。复现实验可运行:
shasum -a 256 original.txt tampered.txt摘要不相同,足以说明两个输入不同;但如果攻击者能够同时替换文件和旁边保存的摘要,单纯比较就失去意义。要把校验结果变成可信证据,基准摘要必须通过受保护的渠道获得,或使用消息认证码、数字签名来绑定来源与内容。即使签名验证通过,也只说明签名之后内容未变且对应密钥参与了签名,不能自动证明内容在业务上正确。
完整性校验必须保护“比较基准”。把文件与可随意修改的摘要放在同一权限边界中,只能发现偶然损坏,难以抵抗主动篡改。
安全之所以困难,是因为简单目标往往需要复杂机制;攻击者会从设计者未预料的角度寻找弱点;机制必须放在正确的物理位置和协议层次;密钥等秘密信息还涉及生成、分发、保存与轮换;攻击者通常只需找到一处缺口,而防守者需要覆盖完整路径。
此外,安全投入的收益常常在事故发生前不明显,持续监控又容易被短期任务挤占。若安全被推迟到系统完成后才补做,架构层面的缺陷往往代价高昂。强控制也可能降低性能与易用性,因此安全设计必须基于风险,而不是无限堆叠措施。
可以用以下习惯建立安全思维:
计算机安全以资产为起点,以机密性、完整性、可用性、真实性和可追责性描述保护目标。漏洞使威胁有机会变成攻击,对策通过预防、检测、响应和恢复降低风险,但仍会留下残余风险。
分析时要区分策略、服务和机制:策略规定允许什么,服务描述要提供什么保护,机制给出实现方法。最后还需通过保障与评估取得可解释的信心。把这些概念连成闭环后,面对新系统就不必从产品清单出发,而能从资产、后果和证据出发做出可验证的安全决策。