一、安全需求概述:什么是系统级安全需求?为什么需要安全需求规范?安全需求与功能需求的区别

1.1 什么是系统级安全需求?

系统级安全需求,说白了就是——你的系统必须能扛住哪些威胁。

我见过不少团队,一上来就写「用户登录要加密」「数据库要脱敏」。这些当然没错,但它们只是功能层面的安全点,不是系统级安全需求。

系统级安全需求关注的是整个系统的安全边界、信任模型、数据流向、认证授权框架。它不关心某个按钮怎么加密,而是关心:

  • 谁可以访问系统?
  • 数据在传输、存储、使用过程中如何保证机密性?
  • 系统如何检测和响应攻击?
  • 安全机制之间如何协同,不出现盲区?

一句话定义:系统级安全需求是描述系统「在安全方面必须做到什么」的顶层约束,它决定了安全架构的骨架。

举个例子。我曾经参与过一个金融支付系统的项目。业务方提的需求是「用户转账需要短信验证」。这看起来是个安全功能,对吧?但真正的问题来了——短信验证码的生成逻辑放在哪个服务里?验证码的传输通道是否独立?如果短信网关被劫持,系统怎么降级?

这些,才是系统级安全需求要回答的问题。

1.2 为什么需要安全需求规范?

你想想看,一个系统从需求到上线,要经过多少人?产品、架构、开发、测试、运维……每个人对「安全」的理解都不一样。

没有规范,就会出现:

  • 开发说「我加了 HTTPS,安全了」
  • 测试说「我测了 SQL 注入,没问题」
  • 运维说「防火墙规则配好了」
  • 结果上线第一天,被撞库攻击打穿了

为什么会这样?因为每个人只看到了自己那一亩三分地,没人从系统整体去看安全。

我个人习惯,在项目启动阶段就拉一个安全需求规范文档。它就像一张安全地图,告诉所有人:

  1. 我们要防谁?(威胁模型)
  2. 我们要保什么?(资产清单)
  3. 我们怎么保?(安全控制措施)
  4. 保到什么程度算合格?(验收标准)

我的经验:没有规范的安全需求,最后都会变成「安全口号」。比如「系统要安全」「数据要保密」——这种话说了等于没说。

我记得有一次做政务云项目,客户要求「系统必须通过等保三级」。但等保三级是个合规目标,不是技术需求。如果我们直接把「通过等保三级」写进需求文档,开发根本不知道要做什么。

所以,安全需求规范的作用就是把合规要求翻译成可落地、可验证的技术条款。

1.3 安全需求与功能需求的区别

这个问题,我每次培训都会被问到。其实区分起来很简单:

维度 功能需求 安全需求
关注点 系统「做什么」 系统「不能发生什么」
表述方式 用户能完成某操作 系统能抵御某攻击
触发条件 正常业务流程 异常/恶意场景
验收标准 功能正确执行 攻击无法成功
典型例子 用户登录后跳转首页 连续5次登录失败后锁定账号

我举个例子你就明白了。

功能需求:「用户输入用户名和密码,点击登录按钮,系统验证通过后进入主页。」

安全需求:「系统应防止暴力破解,同一账号在5分钟内连续失败5次后,锁定该账号30分钟,并触发告警。」

看到了吗?功能需求描述的是正常流程,安全需求描述的是异常场景下的防护。

注意:安全需求不是功能需求的「附加项」。它们是并行的、独立的。很多项目失败,就是因为把安全需求当成「功能做完后再补的补丁」。

我曾经见过一个团队,把「密码加密存储」写成了功能需求。结果开发用 MD5 加密,测试说「功能实现了,密码确实存成了密文」。但 MD5 能叫加密吗?那是哈希,而且是不安全的哈希。

这就是混淆安全需求和功能需求的后果——你以为做了安全,其实只是做了个样子。

1.4 系统级安全需求的核心框架

下面这张图,是我自己总结的系统级安全需求四层模型。每次做新项目,我都会拿它来对照检查。

系统级安全需求四层模型 安全目标 机密性 · 完整性 · 可用性 · 可追溯性 安全域划分 用户域 | 应用域 | 数据域 | 管理域 | 网络域 每个域定义信任边界、访问策略、隔离级别 安全控制措施 身份认证 | 权限管理 | 数据加密 | 日志审计 | 入侵检测 每个控制措施需明确:技术选型、配置参数、失效处理 安全验证与验收 渗透测试 · 代码审计 · 合规检查 · 红蓝对抗 自上而下分解 从目标到落地 自下而上验证 从实现到目标

这个模型的核心思想是:安全需求不能只停留在「目标」层面,必须层层分解到可验证的控制措施。

我每次做安全评审,都会拿着这个模型问团队:

  • 你的安全目标是什么?
  • 你的安全域划分清楚了吗?
  • 每个域的控制措施是什么?
  • 你怎么验证这些措施有效?

如果哪个环节答不上来,那就是安全需求的缺口。

1.5 避坑指南:安全需求常见的三个误区

做安全需求这么多年,我见过太多翻车的案例。这里列三个最常见的坑:

误区一:把安全需求写成「安全功能」

比如「系统使用 AES-256 加密」。这是功能实现,不是需求。正确的写法是:「系统应保证存储数据的机密性,防止未授权读取。加密算法应使用经过国家密码管理局认可的算法。」

误区二:安全需求过于抽象

比如「系统应保证高可用」。什么叫高可用?99.9% 还是 99.99%?单机房还是多活?故障切换时间是多少?必须量化。

误区三:忽略安全需求的「负向验证」

功能需求只要测「能跑通」就行。安全需求必须测「跑不通」——也就是攻击场景。我曾经有个项目,安全需求写了「防 SQL 注入」,结果测试只测了正常查询,没测恶意输入。上线第一天就被注了。

嗯,这些坑我基本都踩过。所以现在我做安全需求规范,一定会要求:每条安全需求都必须有对应的攻击场景和验收用例。

1.6 小结

系统级安全需求不是功能需求的附属品,它是独立的安全架构约束。没有规范的安全需求,系统就像没有围墙的城市——看起来繁华,实际上不堪一击。

记住三个关键点:

  • 系统级安全需求关注整体边界和框架,不是某个功能点
  • 安全需求规范是沟通工具,让所有人对「安全」有一致的理解
  • 安全需求必须可验证,不能验证的需求等于没写