Fortigate泄露事件中的私钥
几天前,互联网论坛上出现了一个Fortigate/Fortinet设备配置文件的泄露下载链接。这些数据似乎是在2022年由于一个被称为CVE-2022-40684的安全漏洞而收集的。根据Fortinet 2022年的一篇博客文章,他们当时已经意识到该问题被积极利用。最初由heise报道,Kevin Beaumont的一篇文章包含了更多信息。
未被广泛认识到的是,这次泄露还包含TLS和SSH私钥。由于我正在开发badkeys(一个用于识别不安全和解密密钥的工具),这引起了我的注意。(以下分析基于泄露的不完整子集。如果我获得更完整的信息,可能会更新这篇文章。)
泄露的配置包含如下所示的密钥(并非来自泄露的实际密钥):
|
|
它们还包括OpenSSH格式的相应证书和密钥。如您所见,这些私钥是加密的。然而,在这些密钥上方,我们可以找到加密密码。密码也是加密的,看起来像这样:
|
|
快速搜索加密方法发现了一个包含解密这些密码代码的脚本。加密密钥是静态且公开已知的。
密码行包含一个Base64字符串,解码为148字节。前四个字节,填充12个零字节,是初始化向量。剩余的字节是加密的有效载荷。加密使用CBC模式的AES-128。解密的密码大多是十六进制数字,并用零字节填充——有时还有其他字符。(我不清楚它们的含义。)
如果技术细节让您感到困惑,重要的是在几乎所有情况下,都可以解密私钥。(我可能会在稍后分享一个提取密钥的工具。)
使用静态加密密钥是一个已知的漏洞,被追踪为CVE-2019-6693。根据Fortinet 2020年的公告,通过引入一个允许配置自定义密码的设置来“修复”了这个问题。
通过提供并记录更改密码的选项来“修复”默认密码是我有强烈意见的事情。它不起作用(另见)。
这一事件的一个结果是,它为我们提供了一些真实世界的数据,关于如果给出选项并在安全公告中记录,有多少人实际上会更改他们的密码。99.5%的密钥可以用默认密码解密。(请将其视为下限而非精确数字。由于不清楚的填充机制,密码解密可能不稳定。)
总体而言,大约有100,000个PKCS格式的私钥和60,000个OpenSSH格式的私钥。大多数相应的证书是自签名的,但有几千个是由公开信任的Web证书颁发机构颁发的,其中大多数已过期。然而,数据包括84个WebPKI证书的密钥,这些证书截至今天早上既未过期也未撤销。只有10个未过期的证书已被撤销。
我已将仍然有效的证书报告给负责的证书颁发机构以进行撤销。CA有义务在24小时内撤销已知受损密钥的证书。因此,这些证书都将很快被撤销。(由于一些CA的报告流程困难,我还提交了两份报告。)
如上所述,早在2022年就已经知道这个漏洞被积极利用。然而,似乎绝大多数情况下,这并没有导致人们更换可能受损的私钥并撤销他们的证书。虽然我们无法从这一观察中判断密码和其他未用于公开信任证书的私钥是否也是如此,但似乎很可能。
rant
不幸的现实是,如今安全产品本身往往是安全漏洞的来源。虽然我没有经验证据(也没有其他人有数据,我以前抱怨过这个吗?),但我相信近年来我们已经进入了一种情况,安全产品从“大多无用,有时有害”转变为“几乎肯定导致的安全问题比它们预防的更多”。我对此有更多想法,可能会在另一个时间分享。
如果您想知道该怎么做,解决方案既不是修补和修复您的Fortinet设备,也不是从其同样糟糕的竞争对手之一购买额外的攻击面。而是停止相信增加更多攻击面会提高安全性。
检测受影响的密钥
对这些密钥的检测已添加到badkeys中。它是一个开源工具,可通过Python的包管理安装。您可以使用它扫描SSH主机密钥、证书或私钥。确保在此之前更新badkeys阻止列表(badkeys –update-bl)。
请注意,此检测目前基于不完整的数据,并未覆盖泄露中的所有密钥。可能会有更多更新以提供更完整的覆盖范围。另请注意,我尚未公开私钥。与其他情况不同,这意味着badkeys无法给您私钥。(我可能决定在未来的某个时间点发布密钥。)
badkeys阻止列表使用一种尚未充分记录的格式(改进此格式在我的待办事项列表中)。我分享受影响密钥的SPKI SHA256哈希列表,以便其他人更容易编写自己的检测。
更新(2025-01-23)
如前所述,原始分析是使用不完整的数据集完成的。后来我能够访问更完整的数据,将密钥数量增加到大约98,000个SSH密钥和167,000个PKCS密钥。这也导致报告撤销的额外证书。我没有跟踪确切数字。因此,上述所有数字均指不完整的数据集。
您可以在此处找到一个脚本,用于从Fortigate配置文件中提取和解密密码和私钥。
更新(2025-01-24)
在进一步分析期间,我发现数据集中包含314个属于Let’s Encrypt ACME账户的私钥。我现在已停用这些账户。鉴于事件最初报告已超过一周,这加深了印象,即Fortinet本身及其受影响的客户似乎都没有付出任何努力来清理此事件。
更新(2025-04-16)
密钥。
图片来源:paomedia / Public Domain