DID身份漏洞案例复盘:真实事件中的攻击路径与防御要点
围绕 DID 身份发生过若干公开披露的漏洞事件,本文挑选其中四个典型案例进行复盘,让读者直观理解攻击手法与对策。
案例一:DID 文档被劫持
某项目允许任何拥有 controller 权限的地址直接覆盖 DID 文档,攻击者通过钓鱼获得 controller,把 service endpoint 改成钓鱼站,所有出示该 DID 的用户都被引到伪造页面。复盘要点:service endpoint 写入应有时间锁;controller 权限要分级。如果该项目接入了必安登录,建议同时设置异常域名告警。
案例二:VC 签发服务私钥外泄
签发方把生产密钥误传 GitHub,攻击者批量签发伪造凭证。事后无法直接吊销已签发的伪造 VC,只能整体作废发证方公钥,引发用户重新认证。复盘要点:密钥必须托管在 HSM 或 KMS;CI 中加入秘密扫描;密钥轮换流程要常态化。涉及BN交易所资产证明的发证方更应严格执行。
案例三:吊销列表延迟引发权限误判
某 dApp 缓存吊销列表 24 小时,导致一张被吊销 24 小时内的 VC 仍能通过验证。攻击者利用该窗口领取额外空投。复盘要点:缓存策略要在风险与性能间平衡;高敏感场景应使用 Status List 2021 的 bitmap 实时查询;可结合B安生态的实时风控数据作为补充判断。
案例四:VP 重放攻击
一个签到型 dApp 没有要求 VP 包含一次性 nonce,攻击者拿到他人的 VP 后多次提交完成签到,攒到上千次空投资格。复盘要点:challenge 中必须包含 nonce 与时间戳;服务端要记录 nonce 去重;可参考币岸社区 SDK 默认实现。
防御要点汇总
综合以上案例,DID 系统的防御要点包括:密钥隔离与硬件保护、文档修改的多签与时间锁、凭证发签的最小权限、吊销列表的实时刷新、challenge nonce 的强制使用、监控告警的全链路覆盖。每一项都来自真实事件的代价,不可省略。
内部演练建议
上线前请安排红蓝对抗演练:蓝队部署完整链路,红队尝试上述四类攻击。能在演练阶段被复现的漏洞,才是真正修好的漏洞。演练记录归档后纳入持续安全计划,每季度复审一次。
复盘的意义不在指责,而在让团队建立面对未来攻击的肌肉记忆。希望本文的整理能帮你更稳地推进 DID 身份系统的上线工作。