从安全需求到系统架构设计全流程 - 第1节

一、安全需求分析基础:什么是安全需求

安全需求,说白了就是系统必须满足的“安全底线”。

我经常跟团队讲一个比喻:你盖一栋楼,功能需求是“有几间房、装什么电梯”,安全需求就是“这楼抗震几级、消防通道够不够宽”。没有安全需求,系统就像纸糊的城堡——功能再花哨,一碰就碎。

在我做过的项目里,最惨的一次教训是:一个内部管理系统,上线第三天就被拖库了。原因?开发时根本没想过“谁可以访问什么数据”这个基本问题。嗯,从那以后,我再也不敢把安全需求放在最后补。

核心定义:安全需求是系统必须满足的、与保护资产机密性、完整性、可用性相关的约束条件。它不是“锦上添花”,而是“雪中送炭”。

二、安全需求的三大来源

安全需求不是拍脑袋想出来的。我个人习惯从三个方向去挖掘:法规、业务、威胁建模。缺一个,需求就可能漏掉。

2.1 法规合规驱动

这是最“硬”的来源。法律条文摆在那,不满足就罚款、停业、甚至坐牢。

举个例子:你做一款面向欧盟用户的App,GDPR(通用数据保护条例)要求用户数据必须加密存储、必须提供删除权。这不是你“想不想做”的问题,是必须做。

法规/标准 典型安全需求 适用场景
GDPR(欧盟) 数据加密、用户删除权、隐私影响评估 涉及欧盟公民个人数据的系统
等保2.0(中国) 身份鉴别、访问控制、安全审计 中国境内的信息系统
PCI-DSS 持卡人数据加密、网络分段、定期渗透测试 处理信用卡支付的系统
HIPAA(美国) 患者数据保密、访问日志、传输加密 医疗健康信息系统
我的经验:法规需求最好在项目启动时就拉法务或合规团队一起过一遍。等开发到一半才发现“哦,这个数据不能明文存”,那改造成本至少翻三倍。

2.2 业务场景驱动

业务本身会“长”出安全需求。你想想看:一个电商平台,用户要付钱,那支付环节就必须防篡改、防重放。一个医疗系统,病历数据就是命,必须保证谁改了、什么时候改的都能追溯。

我遇到过这样一个案例:某在线教育平台,业务方说“我们要支持学生上传作业”。听起来很简单对吧?但仔细一想——上传的文件可能包含恶意脚本,如果直接展示给其他学生看,那就是XSS攻击的温床。于是,文件类型校验、内容扫描、存储隔离这些安全需求就出来了。

业务安全需求通常来自:

  • 资产识别:系统里最值钱的数据是什么?用户密码?交易记录?核心算法?
  • 业务流程分析:哪个环节最容易出问题?登录?支付?数据导出?
  • 用户角色梳理:谁可以做什么?管理员、普通用户、访客的权限边界在哪?

2.3 威胁建模驱动

这是我最喜欢的方法。因为它不是“被动响应”,而是“主动找茬”。

威胁建模,就是站在攻击者的角度,想方设法搞垮你的系统。然后针对每一种攻击路径,推导出对应的安全需求。

常用的框架是STRIDE,微软提出的威胁分类法:

威胁类型 含义 典型安全需求
Spoofing(假冒) 攻击者冒充他人身份 强身份认证、多因素认证
Tampering(篡改) 数据被非法修改 完整性校验、数字签名
Repudiation(抵赖) 用户否认做过某操作 审计日志、不可否认性机制
Information Disclosure(信息泄露) 敏感数据被未授权访问 加密、访问控制、最小权限
Denial of Service(拒绝服务) 系统不可用 限流、冗余、DDoS防护
Elevation of Privilege(权限提升) 普通用户获得管理员权限 权限分离、输入校验、安全编码
避坑指南:我曾经见过一个团队,威胁建模只做了一次,然后就扔在那不管了。结果系统迭代了三个版本,新的攻击面全没覆盖。威胁建模一定要持续做,每次架构变更都要重新过一遍。

三、安全需求分类:功能性与非功能性

安全需求不是铁板一块。我个人习惯把它们分成两类:功能性和非功能性。分清楚这两类,后续的设计和验收才不会打架。

3.1 功能性安全需求

这类需求是“系统必须做什么”。它是具体的、可测试的、可以直接写进用户故事里的。

举个例子:

  • “用户登录时,密码输入错误超过5次,账户锁定30分钟。”
  • “所有API调用必须携带有效的JWT令牌。”
  • “管理员删除用户时,必须二次确认并记录操作日志。”

功能性安全需求的特点:

  • 可验证:测试人员可以写用例来验证“锁没锁”、“令牌验没验”。
  • 可编码:开发人员知道“if…else…”怎么写。
  • 与业务逻辑交织:它往往嵌入在业务流程里。

3.2 非功能性安全需求

这类需求是“系统应该做到什么程度”。它不直接对应某个功能按钮,但决定了系统的安全质量。

举个例子:

  • “系统应能抵御常见Web攻击,如SQL注入、XSS。”
  • “数据传输过程中,加密强度不低于AES-256。”
  • “系统在遭受DDoS攻击时,核心业务可用性不低于99.9%。”

非功能性安全需求的特点:

  • 偏架构:它影响的是系统整体设计,而不是某个模块。
  • 偏策略:它定义的是“安全水位”,而不是具体操作。
  • 难量化:“抵御攻击”怎么测?需要渗透测试、代码审计等手段。
对比维度 功能性安全需求 非功能性安全需求
关注点 系统做什么 系统做得怎么样
可测试性 强(有明确输入输出) 弱(需要专业工具和评估)
影响范围 局部模块 全局架构
典型例子 “密码必须包含大小写字母和数字” “密码存储必须使用bcrypt算法”
验收方式 功能测试 安全审计、渗透测试
我的建议:写需求文档时,把功能性和非功能性分开列。不然开发看到“加密”两个字,可能就用了MD5——他觉得“我加密了啊”,但你没说“用什么算法、多高强度”。非功能性需求就是用来堵这种漏洞的。

四、知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作安全需求分析的“地图”。

安全需求分析知识体系 安全需求分析 来源一:法规合规 来源二:业务场景 来源三:威胁建模 GDPR / 等保2.0 / PCI-DSS / HIPAA 资产识别 / 流程分析 / 角色梳理 STRIDE(假冒/篡改/抵赖/泄露/DoS/提权) 安全需求分类 功能性安全需求 非功能性安全需求 可验证 / 可编码 / 与业务逻辑交织 偏架构 / 偏策略 / 难量化

这张图展示了安全需求分析的完整脉络:从三大来源出发,经过分类梳理,最终形成可落地、可验证的需求条目。我个人习惯在项目启动会上就把这张图贴出来,让所有人对齐认知——安全不是安全团队的事,是每个人的事。

本章要点回顾:
  • 安全需求是系统的“安全底线”,不是可选项。
  • 三大来源:法规合规(硬约束)、业务场景(内生需求)、威胁建模(主动防御)。
  • 功能性需求管“做什么”,非功能性需求管“做到什么程度”。
  • 威胁建模推荐使用STRIDE框架,持续迭代。