从安全需求到系统架构设计全流程 - 第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算法” |
| 验收方式 | 功能测试 | 安全审计、渗透测试 |
四、知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作安全需求分析的“地图”。
这张图展示了安全需求分析的完整脉络:从三大来源出发,经过分类梳理,最终形成可落地、可验证的需求条目。我个人习惯在项目启动会上就把这张图贴出来,让所有人对齐认知——安全不是安全团队的事,是每个人的事。
- 安全需求是系统的“安全底线”,不是可选项。
- 三大来源:法规合规(硬约束)、业务场景(内生需求)、威胁建模(主动防御)。
- 功能性需求管“做什么”,非功能性需求管“做到什么程度”。
- 威胁建模推荐使用STRIDE框架,持续迭代。