白帽子讲Web安全 02:从评估到防御,构建数据驱动的安全体系
导读:很多人做安全防护上来就堆砌各种安全组件,却忽略了完整的评估流程。Web安全不是堆工具,而是一套完整的思考方法论,今天我们就聊聊安全评估全流程,以及现代化安全建设思路。
安全领域有三个基石要素:机密性、完整性、可用性。拒绝服务攻击DoS,破坏的正是系统的可用性。后续行业虽然拓展出可审计性、不可抵赖性等概念,但三大核心要素依旧是安全方案设计的出发点。
想要解决系统安全问题,不能靠灵光一现,一套标准化的安全评估流程,可以帮我们系统性梳理风险,少踩很多坑。整个评估流程分为四大递进阶段:资产等级划分 → 威胁建模 → 风险分析 → 设计安全方案,上一个阶段的输出,决定下一个阶段的工作目标。
图1:安全评估四阶段流程图。整个流程层层递进,新系统需要完整走完全部环节;长期维护的成熟系统,部分环节可只执行一次。
🔍 资产等级划分:搞清楚我们到底要保护什么
所有安全工作的起点,是资产等级划分。互联网业务的本质由数据驱动,服务器、网络属于硬件IT资产,但互联网安全的核心,其实就是数据安全。不同业务的核心资产各不相同:有的企业最看重客户隐私数据,有的企业核心是内部员工资料。
想要理清资产,安全团队需要和各业务负责人深度沟通访谈,梳理业务手里的数据资产,区分数据轻重等级。完成分级之后,下一步就是划分信任域与信任边界。
举个最简单的网站模型:外网互联网是完全不可信区域;Web应用承接外部访问;数据库存放核心敏感数据,需要做网络隔离。
图2:简易网站信任域模型。越靠近核心数据,信任等级越高,网络隔离管控也应当越严格。
现实业务远比示例复杂。当多个应用互相交互数据时,我们同样要划定边界,对跨边界流转的数据执行安全校验,不能默认应用之间天然可信。
⚠️ 威胁建模:把潜在的"敌人"全部找出来
分清资产与信任域后,就要思考危险来自何方。这里要分清两个极易混淆的概念:
-
威胁(Threat):可能造成伤害的来源
-
风险(Risk):威胁发生后带来的损失
威胁建模,就是用系统化手段挖掘全部潜在威胁。除了经验驱动的头脑风暴,业界经典的STRIDE模型可以帮我们不漏项地梳理威胁维度。
| 缩写 | 含义 | 对应安全三要素 |
|---|---|---|
| S | Spoofing 身份伪造 | 机密性 |
| T | Tampering 篡改数据/代码 | 完整性 |
| R | Repudiation 抵赖 | 不可抵赖性 |
| I | Information Disclosure 信息泄露 | 机密性 |
| D | Denial of Service 拒绝服务 | 可用性 |
| E | Elevation of Privilege 权限提升 | 机密性、完整性 |
表1 STRIDE威胁模型,覆盖六大威胁方向,做威胁梳理的时候可以逐项对照检查。
威胁建模有个关键产出叫做攻击面。很多时候我们投入巨大成本部署防护,攻击者却从一个完全意料之外的入口入侵,本质就是攻击面梳理不全。
书中举了一个很有意思的《智取华山》的例子😯:国民党守军做"威胁建模",只认准"自古华山一条道",重兵把守正面通道,直接默认后山悬崖没有通行可能。当这个信任前提破灭,所有防御工事直接失效。
启发:威胁建模不是做完一次就万事大吉,业务迭代的同时,威胁模型也需要持续回顾更新。
📊 风险分析:不是所有威胁都要同等对待
挖掘出一堆威胁之后,我们不可能对每一个威胁投入同等资源防护。我们需要评估威胁的风险大小。
风险的基础计算公式:
风险=发生可能性times潜在危害风险 = 发生可能性 times 潜在危害风险=发生可能性times潜在危害
危害再大,但发生概率极低,实际风险有限;危害不大,但极易被利用,同样属于高风险。就好比地震破坏力巨大,但板块内部发生概率低,实际风险就会下降。
微软提出的DREAD模型,可以量化评估风险,五个维度每项划分为高(3分)、中(2分)、低(1分),累加得到风险总分:
| 维度 | 说明 |
|---|---|
| D Damage Potential | 潜在危害,漏洞被利用之后造成多大破坏 |
| R Reproducibility | 可复现性,攻击是否可以稳定复现 |
| E Exploitability | 利用难度,攻击者实现攻击的门槛高低 |
| A Affected Users | 受影响用户范围,多少资产/用户会遭殃 |
| D Discoverability | 可发现性,漏洞被攻击者找到的难易程度 |
表2 DREAD风险评分模型。可以根据总分划分风险等级,例如12‑15分为高危,8‑11分为中危,0‑7分为低危。
拿华山的例子简单理解:正面强攻是高危,必须重兵;后山小路虽然很难攀爬(利用难度、可发现性得分低),但是一旦突破,全盘失守,依旧属于中危,完全不能置之不理。
⚠️ 划重点:模型只是辅助工具!无论是STRIDE还是DREAD,都只是思考框架。漏洞研判、风险定级,最终依旧依赖安全工程师的实战经验。
🛡️ 设计安全方案:安全不应该成为业务的绊脚石
安全评估最终产出物,就是安全方案。好方案不是照搬网上的模板,必须完全匹配前面资产、威胁、风险分析的结果。
很多人有一个误区:安全与业务天生冲突,做安全就要牺牲体验和性能。其实不然,安全本身就是产品不可或缺的属性,不存在不安全的业务,只有不安全的业务实现方式。就像挑选水杯,除了容量,我们还要关心材质是否有毒、高低温下会不会损坏,安全性是产品与生俱来的一部分。
一套优秀的安全方案,应当具备这些特质:
✅ 真正有效的抵御对应威胁
✅ 对用户尽量透明,不破坏使用体验
✅ 性能损耗可控,不拖垮业务
✅ 高内聚、低耦合,不和业务代码深度绑定
✅ 方便迭代、升级、扩展
反面教材就是早期Windows Vista的UAC弹窗,频繁弹出询问普通用户是否允许操作。普通用户根本没有能力分辨行为是否危险,粗暴弹窗只会带来糟糕的体验,这就是典型牺牲体验的安全设计。
🧠 新时代安全:态势感知,走向数据驱动的防御
传统安全评估属于长周期、静态化的工作。随着云计算、大数据的普及,安全对抗变成持续动态博弈,于是就有了态势感知。
态势感知分为"态"和"势"两层含义:
-
态:我方资产、漏洞、攻击面;攻击者的威胁源、攻击能力;
-
势:双方行为动向、攻击者动机、攻击发生概率、外部大环境。
态势感知依靠数字化构建实时"数据沙盘",持续监控,做到全面、快速、准确研判攻防现状。
这里有一条信息价值升级链路:数据 → 信息 → 知识 → 情报
-
数据:原始采集到无加工的原始日志、字符;
-
信息:对原始数据整理加工,提取出有意义内容;
-
知识:从信息提炼抽象规律,形成逻辑推理能力;
-
情报:高价值、具有时效性、保密性的关键信息。
威胁情报、ATT&CK攻击矩阵都是这个思路的产物:ATT&CK把黑客完整攻击拆解为一个个原子化步骤,实现攻击行为数字化建模。
长远来看安全系统正在向类似人体免疫系统的自适应安全控制系统演进,通过威胁情报、安全编排,实现部分防御工作自动化。
💡 设计安全方案核心准则:默认安全 Secure by Default
"默认安全"是方案设计第一原则,落实到实践中,优先白名单思维,谨慎使用黑名单。
举几个现实场景:
-
防火墙策略:业务只需要Web服务,白名单直接放行80、443端口,其余全部拒绝。如果用黑名单,只封禁22端口,运维人员私自修改SSH端口到2222就直接绕过防护。
-
服务器软件管控:维护一份允许安装软件及版本的白名单,不在清单内一律禁止安装,避免未知软件引入新攻击面。
-
XSS过滤:处理富文本输入,黑名单过滤
<script>这类标签,遇到浏览器新增未知标签就会被绕过;而白名单仅放行已知安全标签,会更加可靠。
黑名单永远追不上新的攻击手法;白名单明确允许合法行为,未知全部拦截,天然更加安全。
📝 写在最后
Web安全防护,不是出现漏洞再救火,而是从梳理资产开始,威胁挖掘、风险量化,最后产出兼顾业务体验的防护方案。同时攻防对抗永不停歇,静态评估远远不够,我们还需要态势感知、威胁情报,用数据驱动持续的安全运营。
模型和工具只是脚手架,真正的安全,终究离不开人的思考与经验。