一、密钥越权概述
1.1 到底什么是密钥越权?
咱们先不急着看理论定义。我遇到过不少开发同事,一听到「密钥越权」就觉得是黑客拿着别人密码去登录系统。其实没那么简单。
要我说,密钥越权可以拆成两个词理解:密钥和越权。密钥不只是密码,它还包括 API 、SSH 密钥、对称加密密钥、证书私钥——只要是用来做身份认证或数据加密的凭证,都算。越权就好理解了,你本不该有的权限,却拿到了。
所以,密钥越权说白了就是:
"一个人或一个系统,用本不属于自己的密钥,执行了超出其授权范围的操作。"
审计视角的严格定义:
密钥越权是指,在密钥的全生命周期(生成、存储、分发、使用、轮换、吊销)中,由于访问控制失效或密钥管理策略缺失,导致非授权主体获取或使用了本应受保护的密钥材料,并借此完成越权操作的安全事件。
我为什么会强调「全生命周期」?因为我以前审过一家金融机构,他们把生产环境的数据库加密密钥直接存在 Git 仓库里,然后说「没事,仓库是私有的」。结果一个内部员工 fork 了 repo,密钥就泄露了。这事本质上就是个密钥存储阶段的越权问题。
1.2 密钥越权的危害有多大?
我见过太多案例了。密钥越权的危害,往往不是单点问题,而是一连串的连锁反应。
| 危害类别 | 具体表现 | 我见过的真实案例 |
|---|---|---|
| 数据泄露 | 攻击者用越权获取的密钥解密敏感数据 | 某云服务商的存储密钥被越权获取,数百万用户数据被拖库 |
| 权限提升 | 低权限用户拿到高权限密钥,执行管理员操作 | 某运维平台的低权限账号,通过越权拿到 root 密钥,直接删了生产库 |
| 横向移动 | 攻击者用一份密钥访问多个原本隔离的系统 | 某企业内部所有微服务共用同一个 JWT Secret,越权后直接打通全部服务 |
| 合规风险 | 违反 PCI-DSS、GDPR、等保等法规对密钥管理的强制性要求 | 某支付公司因密钥越权被审计发现,罚了 200 万且停业整改 3 个月 |
警告:密钥越权最可怕的地方在于——它很难被业务日志直接发现。审计日志里通常只记录「谁调了什么接口」,但不会记录「这个接口密钥按理说他该不该有」。所以很多密钥越权行为,直到数据已经泄露半年后,才在复盘时被揪出来。
你看,一个密钥越权问题,轻则数据泄露,重则整条业务线停摆。我之前帮一家电商做安全审计,发现他们的支付回调接口密钥居然写在前端 JS 里,而且没有做来源校验。结果呢?黄牛直接模拟回调,给自己账户充值。这就是典型的密钥使用阶段越权——密钥本身没错,但使用者权限不对。
1.3 典型场景归纳:密钥越权都在哪儿出现?
做审计这些年,我总结出一个规律。密钥越权虽然花样百出,但本质上就集中在四个场景里。
- 密钥存储阶段的越权——密钥放在了不该放的地方。
- 密钥分发阶段的越权——密钥给了不该给的人。
- 密钥使用阶段的越权——有密钥的人做了不该做的事。
- 密钥吊销阶段的越权——该收回的密钥没及时收回。
嗯,咱们一个一个说。
场景一:密钥存储阶段的越权
这是我审计时发现最多的一个问题。说白了,密钥存储阶段越权就是「钥匙挂在了客厅墙上,结果连小偷都能看到」。常见的表现形式包括:
- 硬编码密钥到代码仓库(GitHub、GitLab 公开或内部仓库)
- 密钥明文存放在配置文件,且配置文件权限设为 777
- 开发环境、测试环境、生产环境使用同一套密钥材料
- 密钥文件未加密,直接存放在共享存储或 NAS 上
我记得有个互联网公司,他们给每个开发人员都发了生产环境的数据库只读密钥,理由是「方便排查线上问题」。结果有个开发离职了,密钥没回收。三个月后,那个前员工用这份密钥拖走了整个用户表。这就是典型的存储越权——你就不该让他有这个密钥。
场景二:密钥分发阶段的越权
分发阶段的问题更隐蔽。密钥本身可能没问题,但分发过程出了问题。你想想看,密钥在传输过程中被截获、分发策略配置错误、或者分发到了错误的接收方——这都算越权。
- 通过明文邮件、即时通讯工具发送密钥
- 密钥分发未做接收方身份验证
- 密钥管理系统权限配置错误,低权限用户可申请高敏感密钥
避坑指南:我曾经审过一个内部密钥分发系统,配置上说「只有管理员才能获取数据库主密钥」。但审计日志一查,发现普通运维工单审批通过后,系统自动把主密钥以明文形式返回给了提单人。嗯,配置是配置,实现是实现,这是两个东西。审计就是要抓这些「配置与实现不一致」的漏洞。
场景三:密钥使用阶段的越权
这个场景最容易出大事故。密钥已经拿到手了,但使用者是否超越了授权范围?常见有三种:
- 水平越权:你有密钥 A 只能看自己的数据,但你用它去查别人的数据
- 垂直越权:你是只读用户,但你用密钥执行了写操作或管理操作
- 跨域越权:密钥本来只给服务 A 用,但被拿去调用了服务 B
我遇到过最典型的案例是:某公司的内部 API 网关对所有服务都使用同一个 HMAC Secret。结果一个第三方开发团队拿到了这个 Secret,他们原本只能调「用户信息查询」接口,但因为没有做接口级别的密钥绑定,他们直接把「批量删除用户」的接口也调通了。你看,密钥没错,是使用策略错了。
场景四:密钥吊销阶段的越权
这其实是个被严重低估的越权场景。很多公司只关心「密钥怎么发出去」,不关心「密钥怎么收回来」。我没收回来,那就等于主动把权限给别人了。
- 员工离职后,其持有的 未及时吊销
- 密钥轮换后,旧密钥仍可通过某些兼容模式继续使用
- 证书到期后未从信任列表移除,被攻击者利用未失效的旧证书
你别笑,这种事太多了。我前年帮一家物流公司做审计,发现他们有三年前的 AWS Access Key 还在活跃使用,而持有这个 Key 的员工早已离职去了竞争对手。这哪是什么技术问题?这是流程问题。
1.4 四阶段越权的关系图谱
下面这张图,是我做审计时常用的分析框架。我把密钥越权的四个典型阶段画出来了,你一看就明白它们之间的联动关系。
你看这张图,核心逻辑其实很清晰。
密钥本身是中心点,四阶段围在它周围。任何一个阶段出现越权,都会触发连锁后果。而审计的介入点就藏在每个阶段的检查项里——我建议你记牢这个框架,后面我们每个章节都会回到这张图上来。
1.5 审计时的几个忠告
做了这么多年密钥越权审计,我有几个发自内心的建议,写在这里,算是一点个人经验的沉淀吧。
- 别只看技术,更要看流程。密钥越权往往不是技术漏洞,而是流程漏洞。你修了代码里的硬编码,但没改审批流,改天又会出现新的硬编码。
- 审计日志是最后的防线。我之前审过一家公司,他们密钥管理系统没有审计日志。出了越权事件,根本不知道谁在什么时候拿了什么密钥。这就是典型的审计缺失。
- 最小权限原则不是口号。你想想看,每个开发真的都需要生产环境的服务器密钥吗?每个服务真的都需要所有的 吗?把权限收一收,能防住 80% 的越权事件。
重要提醒:本章我们说的「典型场景归纳」,只是一个大致框架。实际项目中,密钥越权的场景往往交叉出现——一个事件可能同时涉及存储越权和使用越权。审计的时候,要学会拆解。
好了,密钥越权的概念、危害和四类典型场景,我已经都讲清楚了。后面每一章,咱们都会拿真实案例来说事。你把这章的基础打牢了,后面的案例你一听就通。