本文来自微信公众号“GoUpSec”。
微软的签名密钥泄露为云安全乃至“纵深防御”敲响了警钟,因为黑客在获取微软签名密钥的过程中,微软纵深防御的每一层似乎都出现了(不应该出现的)错误。
微软今年7月份发布的安全公告声称,一名中国黑客(Storm-0558)早在2021年就获取了微软帐户(MSA)加密密钥,用来伪造身份验证令牌,监视美国国务院、商务部以及其他美国政府机构的电子邮件账户。但微软在该公告中并未透露加密密钥泄露的原因和过程。
本周三,微软研究中心在官方博客发布取证调查报告,披露了黑客如何获取微软加密密钥并成功入侵了微软工程师的企业账号。
微软在博客中指出,中国黑客(微软代号为Storm-0558)获得了对25个美国政府机构的Exchange Online和Azure Active Directory(现称为Microsoft Entra ID)帐户的“合法”访问权限。
一连串错误导致签名密钥泄露
根据微软本周三发布的博客,2021年4月,微软消费者签名系统崩溃产生了崩溃进程快照(故障转储),通常来说,故障转储会去除敏感信息,不应包含签名密钥,但是由于微软设定了一个竞争条件(race condition)允许密钥在某些情况下出现在故障转储中(该问题已经得到纠正),而微软的系统未检测到故障转储中存在机密信息(此问题已纠正),导致MSA密钥无意中泄漏到微软保护区之外的(实施严格访问控制的)生产环境。
这个当时被微软认为不包含敏感信息的故障转储随后从隔离的生产网络转移到微软与互联网连接的企业网络的调试环境中。
屋漏偏逢连夜雨,在崩溃转储被转移到调试环境之前和之后,本应在故障转储中检测此类敏感数据的凭证扫描系统也未能检测到签名密钥。(此问题已纠正)
在9月6日发布的取证分析中,微软透露,遭入侵的微软工程师帐户可能有权访问存储MSA密钥的调试环境(从而提取了密钥)。但令人遗憾的是,这最关键的取证分析结论仅仅是微软的“猜测”。
微软表示:“由于日志保留政策,我们没有包含(保留)该攻击者进行窃取密钥的具体证据的日志,但这是攻击者获取密钥的最可能的机制。”
微软的“万能钥匙”
获取合法加密密钥后,黑客Storm-0558利用Get Access Token For Resource API中的零日漏洞,伪造签名的访问令牌并冒充25个组织的目标帐户。
该API由Microsoft于2018年提供,旨在帮助使用消费者和企业应用程序的客户系统都能以加密方式验证签名。微软在7月份的公告中确认,该缺陷“已被修复,目前仅接受分别从Azure AD或MSA发行的令牌”。
虽然被盗的加密密钥是针对消费者帐户的,但“微软代码中的验证错误”使黑客还可以为政府机构和其他组织的微软托管帐户创建虚假令牌,从而访问这些帐户。
俄勒冈州的民主党参议员罗恩·怀登(Ron Wyden)在7月27日的一封公开信中表示,微软应该“为其疏忽的网络安全做法负责”。
他认为,微软不应该拥有“单一万能钥匙”,一旦被盗,攻击者就可以访问客户的私人通信。怀登还提出了有关加密密钥如何存储的问题。
此外,还有安全专家对微软报告的事件影响范围和严重性提出质疑。
微软声称,此次攻击活动中,黑客Storm-0558“仅能”访问Exchange Online和Out look。
然而,Wiz研究主管Shir Tamari在7月21日的帖子中指出,黑客或许能够访问各种Microsoft服务,包括“Outlook、SharePoint、OneDrive和Teams,以及客户的应用程序支持微软账户认证。”
给纵深防御敲响警钟
作为缓解措施的一部分,微软已经撤销了所有有效的MSA签名密钥,以防止黑客访问其他受损密钥,并确保没有其他证据表明有其他攻击者使用相同的令牌伪造技术未经授权访问客户帐户。
微软还将云日志记录的访问权限扩展至所有用户,该功能以前是为其高级客户保留的。这可以帮助网络防御者检测未来类似的攻击尝试。
很多网络安全业界人士认为,微软签名密钥泄露事件为云安全乃至“纵深防御”敲响了警钟,因为黑客在获取微软签名密钥的过程中,微软纵深防御的每一层似乎都出现了(不应该出现的)错误。