漏洞披露的罗生门:安全行业的复杂博弈
漏洞披露的罗生门
在技术快速变迁的世界里,安全领域鲜有恒常不变的事物——但若说真有什么不变的话题,那就是社交媒体上周期性爆发的漏洞披露讨论(过去是邮件列表,如今主要是 Twitter 和 Facebook)。
业内许多人都曾参与并贡献于这些讨论、规范和操作模式——我特别想强调 Katie Moussouris 和 Art Manion 的贡献,但还有许多人的真正影响只在小圈子内被知晓。在所有关于漏洞披露的讨论中,必须记住:许多聪明人都曾为此问题绞尽脑汁。答案可能并不简单。
在这篇博文中,我想重点讨论几个对我个人而言重要的方面——这些影响我思考的维度,在我看来尚未得到充分重视。
我的职业生涯中曾处于谈判桌的多个(但非全部)角色:
作为向厂商报告漏洞后遭到威胁的独立漏洞发现者
作为认为报告漏洞不值得花费时间的独立研究者
作为需要构建安全设备以处理恶意输入、同时避免增加客户风险的设备开发商
作为需要客户自行安装软件的开发商
作为试图改善行业实践、纠正不良激励机制的 Google Project Zero 成员
明显缺席的角色是:在紧迫截止日期前交付软件、为功能开发而竞争的中高层管理者,以及直接向政府出售漏洞的安全研究员。我将在最后部分回到这个话题。
我预计几乎所有读者都会找到强烈反对的观点。这在意料之中,某种程度上也正是本文的目的。
漏洞报告的简化视角
我将快速描述关于漏洞报告/修复的简化观点。这种观点在讨论中经常出现,尤其是那些对此话题思考不深的人。其核心论点是:
在漏洞公开前,只有发现者和软件厂商知晓该漏洞
在此状态下,几乎没有人面临风险
在厂商发布补丁前公开漏洞信息会使许多人面临风险(因为他们现在可能被攻击),因此不应发生
这个论点的变体被用来声称:研究者不应在补丁可用前公开漏洞信息,或不应在补丁应用前公开信息,或不应公开有助于构建漏洞利用的信息。
这个论点乍看简单合理,实则错误。下文将解释这种观点的多种缺陷。
Zardoz 的教训
对于近年才进入网络安全领域的人:Zardoz 是一个邮件列表,"白帽"黑客在此分享安全漏洞以便修复,同时避免"公众"知晓。
这种活动的结果是:当时每个黑客和活跃的情报机构都试图获取该邮件列表访问权限(因为它定期包含重要的新攻击方法)。他们通常都能成功。引用维基百科关于 Zardoz 的条目:
另一方面,Zardoz 帖子在黑客间的传播是个公开秘密,这在著名的 Phrack 对知名安全专家组成的 IRC 频道的 parody 中公开嘲笑过。
历史一再证明,提前共享漏洞信息的小团体中至少有一个成员会被攻陷;攻击者总能读到这些通信。
可以合理假设漏洞报告邮箱同样如此。这些是高价值目标,获取其访问权限(即便需要物理篡改或人力情报)的效用如此之大,必须假设资金充足的持久对手已掌握访问权限。毕竟这是他们的工作。
(Zardoz 并非特例。遗憾的是其他案例较少被记录。2000 年代初,各种 CERT 内部邮件列表的邮件池在业余黑客圈子流传,可以确信如今任何专业情报机构都能复制这种访问级别。)
风险分布不均的谬误
社会中的风险分布并不均匀。某些人群面临更高风险:压迫国家的异见人士、持有大量加密货币者、被美国政府视为从事间谍活动的自认记者、政治利益相关方和谈判者。其中部分人遭遇黑客攻击可能面临从轻微不适到死亡的严重后果。
世界上大多数用户面临的风险则低得多:对他们而言,被黑的最坏情况是带来不便和适度财务损失。
这意味着原始论点中"受害者计数"做了错误假设:每个人都有相同的"被黑损失"。事实并非如此:有些人面临生命和自由风险,但大多数人不会。对后者而言,不立即更新设备或不太关心安全可能是理性行为——为什么要为自认不太可能或伤害不大的事件采取预防措施?
但对高风险人群,偏执往往是理性的——暂时完全避免使用技术、保持补丁更新、投入时间和资源保障安全。
任何关于披露利弊的讨论都应考虑风险状况的巨大差异。将此论点推向极端,问题变成:"如果能让 5 人免于死亡风险,让 1 亿人面临不便风险可以接受吗?"
我不确定这种计算是否有答案,考虑到所有概率和数据点的不可测性。
被遗忘的补丁差异分析
我们行业有时(令我惊讶地)忘记的一个教训是:从攻击者角度看,补丁的公开与包含漏洞触发条件的详细分析差异不大。
曾经有个分析补丁的小产业,专门研究修复了哪些漏洞、修复是否正确以及如何触发。他们通常在聚光灯外运作,但这不意味着不存在——许多曾是我们的客户。
攻击者可以构建基础设施帮助他们快速分析补丁并提取所需信息。而防御者主要由于组织性(非技术性)原因无法做到这点。这意味着若没有完整的漏洞讨论,防御者将处于显著的信息劣势。
不了解漏洞细节,就无法监控网络和主机的漏洞利用行为,也无法实施补丁之外的缓解措施。
而专业攻击者在获得补丁后不久(如果之前没有)就会掌握漏洞的所有信息。
"不发布触发条件"的谬误
发布漏洞信息时,是否应发布能使程序崩溃的漏洞触发条件?
是的,构建首个触发条件通常耗费攻击者大量时间。我们为何要为他们节省时间?
因为若无公开的漏洞触发条件,防御人员极难判断所用产品是否包含该漏洞。典型案例是 CVE-2012-6706:所有人都认为该漏洞仅存在于 Sophos;没有公开 PoC。因此无人意识到该漏洞存在于上游 Unrar,直到 2017 年才被重新发现并修复。由于没有发布触发条件,这个漏洞获得了额外 5 年寿命。
如果你运行着防病毒网关或任何遗留软件,至少需要触发条件来检查产品是否包含漏洞软件。若试图构建任何形式的自定义攻击检测,同样需要触发条件。
"不发布漏洞利用"的谬误
那么,应该发布漏洞利用吗?显然答案是否定的?
根据我的经验,即便拥有成熟安全团队的大型组织也常难以理解攻击方式的演变。许多现在身处管理岗位的人当年面对的是(按今日标准)相对简单的漏洞,尚未完全理解或认识到漏洞利用方式的变化。
总体而言,防御者几乎总是处于信息劣势:攻击者不会告知其行为,还会在防御者产生错误应对思路时欢呼鼓励。阅读解密的 cryptolog_126.pdf Eurocrypt 考察报告可很好理解这种动态:
最后四个环节中三个毫无价值,Eurocrypt 几乎没什么让我们感兴趣的(这是好消息!)。学术水平实际上极高;只是外部密码学研究者的方向与我们感兴趣的方向相去甚远。
防御方资源丰富,但许多被误用:实施的缓解措施经不起攻击者策略的轻微调整,购买的产品无法改变攻击者的策略或漏洞利用经济性等。
这种误用的重要原因是真实漏洞利用信息的稀缺。我个人认为,Project Zero 的漏洞利用分析,以及 Pwn2Own 参赛者和其他安全研究团队(如盘古等中国团队)关于漏洞利用内部机制的大量优秀分析,对于向防御者传递真实攻击的理解不可或缺,也是帮助行业保持正确方向所必需的。
真实漏洞利用可被熟练防御者研究、理解,并潜在用于缓解、检测和测试其他防御措施。
软件交付与优先级的现实
软件公司通过交付新功能盈利。这些组织中的管理者因交付功能和获取客户而晋升。若成功,他们的职业前景光明;当新功能的安全缺陷显现时,他们早已在职业阶梯上晋升四级或跳槽两次,远离自己创造的风险。
现代软件开发中(即便有 SDLC),攻击面的真实成本未被恰当核算;主要因为这些成本由运行软件的客户承担——即便如此,也仅由少数具有特殊风险状况的客户承担。
冷静审视当前软件开发激励机制可见:对于交付产品的团队而言,几乎不存在为 4-5 年安全周期投资的动机。所有人都认为自己在激烈竞争中,速度是优先考量。这包括漏洞报告:Project Zero 强制执行 90 天期限的全部原因在于,若无硬性期限,软件厂商通常会优先修复明显缺陷,因为...如果能交付新功能,何必分心修复?
如今,增加新攻击面的唯一抑制因素是博客文章或 Blackhat 演讲中的批评。软件行业可有管理者因交付问题严重、给用户带来风险的软件而职业受损?我知道的案例为零。若有请告知,我极有兴趣了解。
代表他人承担风险的科技行业
(下文将以微软为例,但替换为苹果或 Google/Android 仅需微小调整。科技巨头在此方面非常相似。)
微软自 2005 年以来盈利超过 2480 亿美元。没有哪年每月盈利低于 10 亿美元。2005 年前十年的利润较低,我未找到数据,但即便 2000 年微软每季度盈利也超过 10 亿。部分利润是通过代表客户承担风险获得的——未恰当沙盒化 SMB 组件、安全人员配备不足、未淘汰和迁移客户远离不安全协议。
软件产品行业(包括手机制造商)数十年来通过销售高风险产品并将风险转嫁给客户和社会获取超额利润。我的类比是:他们构建的金融产品在某些地缘政治事件下会产生超额收益但灾难性崩溃,然后将部分超额收益和全部风险出售给不知情的第三方。
任何能在转移风险同时盈利的行业都会承担超额风险,需要监管确保获利者同时承担风险。由于历史意外(软件受版权保护的事实)和对金鹅监管的抵触,我们容忍了 30 年的社会风险积累,主要由软件和科技行业的超额利润驱动。
既然微软(及整个科技行业)已向其他社会成员出售了大量在地缘政治尾部事件(如大国竞争重现)中崩溃的"有毒票据",他们确实不愿为此担责——毕竟未来可能有监管,他们可能不得不承担部分正在产生的风险。
这种困境的正确解决方案是什么?游说,以及协调一致的公关努力转移指责。比起承认"安全研究和零日漏洞供应商暴露的所有风险最初都是科技行业为超额利润创造的",安全研究者、零日漏洞供应商和恰好销售零日漏洞工具的人是方便得多的指责目标。
公平地说,他们这样做是理性的,但我不同意我们应该放任他们这样做:-)。
知情权
我个人对漏洞披露的观点受以下看法影响:消费者有权获得所使用产品所有已知风险的全部信息。如果烟草业内部研究显示吸烟可能致癌,这些信息应从第一天起公开,包括所有数据。
同样,软件产品的消费者应能随时获取关于产品安全性的所有已知信息。我个人认为,当前接受的 90 天期限是平衡竞争利益(补丁可用性 vs 告知用户设备不安全)的尝试。
进一步延迟或向客户隐瞒数据——依我个人之见——是种欺骗;我认为科技行业应更积极地警告用户:按当前工程实践,任何消费级设备中的个人数据都不完全安全。单个漏洞利用链现在可能耗资百万美元,但这百万美元会分摊到大量目标上,因此单次入侵的成本相当低。
我承认我的观点(给予用户全部信息使其至少理论上能基于完整信息做出决策)是哲学性的:我认为隐瞒可能改变他人决策的可用信息是种欺骗,而同意(即便在商业关系中)需要彼此透明。他人或有不同哲学。
罗生门,或观点如何受职业激励驱动
为本文提供标题的电影《罗生门》是黑泽明 1950 年执导的经典黑白电影。维基百科描述:
该片以多个角色对同一事件提供主观、相异、利己且矛盾的描述这一情节设计闻名。
若未观看,我强烈推荐。
我将本文命名为"漏洞披露的罗生门"是为强调情况的复杂性。存在多个维度,我的观点深受我所处立场的影响——以及那些我未曾经历的立场。
每位讨论参与者都有影响其论点的基础利益和/或哲学观点。
软件厂商不愿面对通过向社会转移风险获取超额利润的事实。零日漏洞供应商不愿面对部分客户杀人(有时完全无辜)或至少违反某些法律的事实。安全研究者希望保留发布研究的权利,即便他们未能显著影响安全经济的缺陷。
每个人都想成为自己故事中的英雄,在他们对世界的描述中,他们确实是。
围绕漏洞披露、漏洞发现及其权衡的所有问题都不简单。声称存在简单明显安全漏洞披露路径的人,要么思考不够深入,要么有足够强烈的动机自我欺骗存在唯一真理之道。
目睹这场辩论反复 20 余年后,我对所有人的请求是:当你向世界解释为何是自己故事中的英雄时,花片刻思考替代叙事,努力认识到故事可能没那么简单。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

评论