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