风险识别框架:OWASP API Top 10 风险解读、风险分类模型、风险等级评估标准

做 API 安全审计,第一步不是拿工具扫漏洞,而是先搞清楚——我们到底在防什么。

我见过太多团队,上来就部署 WAF、上网关、配认证,结果被一个「未授权访问」打穿。为什么?因为连风险清单都没对齐。

这一章,我们就来搭风险识别框架。说白了,就是三件事:知道有哪些坑(Top 10)、学会怎么归类(分类模型)、能判断坑有多深(等级评估)。

2.1 OWASP API Top 10:最该先看的风险清单

OWASP 每隔几年会发布一份 API 安全风险排名。目前最新是 2023 版。我个人习惯,每次接手新项目,第一件事就是拿这份清单去对接口文档。

排名 风险名称 一句话解释
API1:2023 对象级授权失效 用户 A 能访问用户 B 的数据(比如改 URL 里的 ID)
API2:2023 认证失效 弱密码、 泄露、Session 固定
API3:2023 对象属性级授权失效 能修改不该改的字段(比如把 isAdmin 改成 true)
API4:2023 资源消耗无限制 没有限流、没有分页,一个请求打崩后端
API5:2023 功能级授权失效 普通用户能调用管理员接口
API6:2023 服务端请求伪造(SSRF) API 帮你访问内网资源
API7:2023 安全配置错误 CORS 乱配、Debug 接口没关、默认密码没改
API8:2023 注入攻击 SQL、NoSQL、命令注入
API9:2023 资产管理不当 老版本接口没下线、文档暴露在公网
API10:2023 日志与监控不足 被攻击了都不知道,审计日志是空的

我的经验:Top 10 里,API1 和 API3 占了实际漏洞的 60% 以上。很多公司花大价钱买 WAF,结果被一个「遍历用户 ID」的接口打穿。审计时,优先查授权。

2.2 风险分类模型:把问题装进正确的抽屉

光有清单还不够。你想想看,一个「认证失效」和一个「配置错误」,修复方式完全不同。所以我们需要一个分类模型,把风险分门别类。

我常用的分类模型分三层:

  • 第一层:攻击面——风险出现在哪个环节?(认证层、授权层、数据层、传输层、配置层)
  • 第二层:攻击手法——攻击者怎么利用的?(暴力破解、参数篡改、注入、重放)
  • 第三层:影响范围——打穿之后能造成什么后果?(数据泄露、服务中断、权限提升)

举个例子:一个「未授权访问管理员接口」的风险,分类就是:授权层 → 参数篡改 → 权限提升。这样分类,后续修复和审计都能精准定位。

小技巧:我建议每个 API 接口在文档里就标注好「风险分类标签」。比如 GET /api/users/{id} 的标签是 [授权层][对象级][数据泄露]。审计时一目了然。

API 风险分类模型 攻击面 认证层 / 授权层 数据层 / 传输层 配置层 攻击手法 暴力破解 / 参数篡改 注入 / 重放 SSRF / 路径遍历 影响范围 数据泄露 服务中断 权限提升 分类示例:未授权访问管理员接口 → 授权层 / 参数篡改 / 权限提升 每个风险必须同时标注三层,缺一不可

2.3 风险等级评估标准:给风险打分

分类完了,接下来要排优先级。不可能所有风险都立刻修,资源有限,得先修最要命的。

我一般用 CVSS 3.1 的简化版,只取三个维度:

  1. 利用难度(低/中/高)——攻击者需要什么条件?有工具就能扫?还是需要内网权限?
  2. 影响程度(低/中/高)——数据泄露?服务不可用?还是只是信息泄露?
  3. 暴露面(公网/内网/管理网)——这个接口谁都能访问?还是只有内部能用?

然后按下面的矩阵打分:

利用难度 影响程度 暴露面 最终等级
低 高 公网 严重
低 中 公网 高危
中 高 内网 高危
高 高 公网 中危
低 低 内网 低危
高 低 管理网 信息

注意:我曾经遇到一个团队,把所有「内网接口」的风险都标成低危。结果攻击者通过 SSRF 打穿内网,直接拿到数据库。暴露面不能只看网络位置,还要看接口的敏感程度。

2.4 实战:给一个真实风险做完整评估

我们拿一个真实场景来走一遍流程。假设审计发现:

GET /api/orders?userId=123 这个接口,没有校验当前登录用户是不是 userId=123 本人。攻击者把 userId 改成 456,就能看到别人的订单。

按我们的框架:

  • OWASP 分类:API1:2023 对象级授权失效
  • 分类模型:授权层 → 参数篡改 → 数据泄露
  • 等级评估:
    • 利用难度:低(改个参数就行)
    • 影响程度:高(订单数据含姓名、地址、手机号)
    • 暴露面:公网(这个接口对前端 App 开放)
    • 最终等级:严重

我的建议:每个风险都要走完这三步。别跳步。我见过有人直接给「严重」等级,但说不出为什么严重。审计报告要有理有据,不然开发不认账。

嗯,到这里,风险识别框架就搭好了。你有了清单(Top 10)、有了抽屉(分类模型)、有了尺子(等级评估)。下一件事,就是拿着这个框架,去审计真实的 API 接口了。