1. 安全基础概念:CIA三元组、威胁模型与策略制定

各位同学,咱们今天聊点实在的。系统安全这事儿,说白了就是一场攻防博弈。你不需要成为黑客,但得知道黑客在想什么。我做了十几年运维,见过太多“我以为很安全”的系统,结果被人从最意想不到的地方捅了篓子。

这一章,咱们把地基打牢。先搞懂安全领域最核心的三个词——机密性、完整性、可用性。然后看看威胁从哪来,最后聊聊怎么定规矩。

1.1 CIA三元组:安全的三个支点

CIA不是美国中央情报局,是 Confidentiality(机密性)、Integrity(完整性)、Availability(可用性)。这三个词,是所有安全工作的出发点。你做的任何安全配置,最终都能归到这三条里。

属性 核心含义 一句话人话 我踩过的坑
机密性 数据只能被授权的人看到 不该看的别看 某次数据库权限没回收,实习生看到了全公司工资单
完整性 数据在传输和存储中不被篡改 数据是原装的 日志被删了,查了半天才发现是写权限没控制好
可用性 系统在需要时能正常服务 别宕机 DDoS打过来,业务挂了3小时,备份没切过来

核心原则:这三个属性是互相制衡的。你加密做得太狠(机密性),解密慢,可用性就下降。你为了高可用搞多副本,数据一致性(完整性)又可能出问题。做安全,就是在这三个角里找平衡。

1.1.1 机密性:谁该看,谁不该看

机密性,说白了就是权限控制。谁有资格读这份文件?谁能看到这个数据库字段?

我习惯用 最小权限原则——只给一个人完成工作所必需的最小权限。举个例子,一个前端开发,他需要读API文档,但不需要看生产环境的数据库密码。那就只给他文档库的只读权限。

我的经验:权限不是越收越紧就好。收得太死,员工会想办法绕过你——比如把密码写在便签纸上贴在显示器上。嗯,我亲眼见过。

实现机密性的常见手段:

  • 加密:传输层用TLS,存储层用AES-256
  • 访问控制:RBAC(基于角色的权限控制)、ACL(访问控制列表)
  • 数据脱敏:日志里把身份证号中间几位打星号

1.1.2 完整性:数据没被人动过手脚

完整性保证的是:数据从A传到B,中间没被人改过。你想想看,如果银行转账记录能被篡改,那还得了?

我曾经遇到过一个案例:某系统的日志文件被攻击者删除了关键条目,导致我们花了三天才还原攻击路径。从那以后,我强制所有日志服务器启用 写一次读多次(WORM) 策略,日志一旦写入就不能再改。

保证完整性的常用技术:

  • 哈希校验:SHA-256,下载文件后比对哈希值
  • 数字签名:用私钥签名,公钥验证
  • 审计日志:记录谁在什么时候改了什么

1.1.3 可用性:关键时刻别掉链子

可用性最容易被忽视。很多公司把精力都放在防泄露上,结果DDoS一来,网站直接打不开。你数据再安全,用户访问不了,有什么用?

我记得有一次,某电商平台大促前夜,数据库主库挂了。因为没做读写分离,整个站直接瘫痪。那晚我陪着运维团队熬到凌晨四点,才把从库切上来。教训就是:高可用不是锦上添花,是命根子。

提升可用性的手段:

  • 冗余部署:多活、主备、异地容灾
  • 负载均衡:Nginx、F5、云上的SLB
  • 限流降级:扛不住的时候,先保核心业务

1.2 安全威胁模型:你的对手是谁

搞安全,不能闭门造车。你得知道谁会来打你,用什么方式打。这就是威胁模型的作用。

我常用的一个框架是 STRIDE,微软提出的威胁分类法。它把威胁分成六类:

威胁类型 英文 针对的CIA属性 举个栗子
假冒 Spoofing 机密性 伪造登录页面,骗用户输入密码
篡改 Tampering 完整性 中间人攻击,修改HTTP响应内容
抵赖 Repudiation 完整性 用户说“我没下过这个订单”,但你没日志可查
信息泄露 Information Disclosure 机密性 SQL注入,把用户表拖出来
拒绝服务 Denial of Service 可用性 DDoS,把带宽打满
权限提升 Elevation of Privilege 机密性+完整性 普通用户通过漏洞拿到root权限

注意:威胁模型不是做一次就完事了。系统在变,攻击手法也在变。我建议每半年重新做一次威胁建模,特别是大版本上线前。

除了STRIDE,还有一个更简单的模型叫 攻击树。你把攻击者的最终目标画在树根,然后往上分叉,列出所有可能的攻击路径。比如“拿到数据库权限”这个目标,可以分叉成“SQL注入”、“弱密码爆破”、“内部人员泄露”等。每个叶子节点就是一个防御点。

1.3 安全策略制定原则:规矩怎么定

有了CIA三元组做理论,有了威胁模型做分析,接下来就是定规矩了。安全策略不是写一堆没人看的文档,而是可执行、可审计的规则。

我总结了几条原则,都是血泪换来的:

  1. 最小权限原则:前面说过了,权限只给到够用为止。别图省事给个“管理员”角色完事。
  2. 纵深防御:别指望一道墙挡住所有人。网络层、应用层、数据层,每层都设防。攻击者突破一层,还有下一层等着他。
  3. 默认拒绝:没明确允许的,一律禁止。防火墙规则、文件权限、API访问,都按这个来。
  4. 可审计性:所有操作都要有日志。谁、什么时间、做了什么、结果如何。出了事能追溯。
  5. 最小暴露面:不必要的端口关掉,不必要的服务停掉,不必要的接口删掉。你暴露得越少,攻击面越小。

我的习惯:每次新系统上线前,我都会问三个问题:1)这个服务必须对外暴露吗?2)这个端口能不能只对内网开放?3)这个接口有没有做鉴权?三个问题答完,至少能砍掉一半的攻击面。

1.4 知识结构图:CIA与威胁模型的关系

下面这张图,把CIA三元组、STRIDE威胁模型和防御策略串在了一起。你仔细看,每个威胁类型都对应着CIA的一个或两个属性,而防御策略就是针对这些威胁的。

CIA三元组与STRIDE威胁模型关系图 CIA三元组与STRIDE威胁模型关系图 机密性 Confidentiality 完整性 Integrity 可用性 Availability 假冒 Spoofing 篡改 Tampering 抵赖 Repudiation 信息泄露 Info Disclosure 拒绝服务 DoS 权限提升 Elevation of Privilege 防御策略:最小权限 + 纵深防御 + 默认拒绝 + 可审计性 加密 · 访问控制 · 哈希校验 · 冗余部署 · 限流降级

1.5 避坑指南:新手最容易犯的三个错

最后,分享几个我亲眼见过的翻车现场。你记住了,能少走半年弯路。

坑一:只防外部,不防内部。 我见过一家公司,防火墙做得固若金汤,但内部员工可以随便访问所有人的邮件。结果离职员工把客户名单带走了。记住:内鬼比外贼更难防。

坑二:安全策略写得太复杂。 有一份安全文档写了200页,没人看,也没人执行。我建议:策略文档别超过10页,剩下的用自动化工具落地。

坑三:忘了备份的可用性。 很多公司天天做备份,但从没演练过恢复。真出事了才发现备份文件是坏的。我的习惯是:每季度做一次恢复演练,确保备份真的能用。

好了,这一章的内容就到这儿。CIA三元组是安全的地基,威胁模型是地图,策略是施工规范。这三样东西搞明白了,后面的权限配置、加密通信、日志审计,你学起来会轻松很多。