原文链接:
https://about.fb.com/news/2019/01/designing-security-for-billions/

产品安全经理Collin Greene
数十亿人使用Facebook与他们息息相关的人建立联系。我们有责任建立安全的服务以帮助人们安全。
在Facebook,我们采用所谓的“深度防御”方法来实现安全性,这意味着我们分层保护了许多保护措施,以确保我们从多个角度预防和解决代码中的漏洞。这是跨越团队,部门和时区的一项巨大而持续的工作。安全工程师和实践遍布整个公司,以帮助确保从一开始就将数据保护内置到我们的代码和设计中,而不是在最后添加。
由于编写完美的代码实际上是不可能的,因此软件中存在错误的情况并不少见。尽管大多数错误不会带来严重的后果,但有些错误可能会造成安全漏洞,这些漏洞可能被利用来获取对数据或用户帐户的访问权限。因此,Facebook致力于发现,修复和防止这些错误。我们致力于不断提高我们的防御能力,以便我们能够应对不断出现的威胁并领先于对手,这意味着此类工作永远不会完成。
在下图中,您可以看到我们的“纵深防御”方法如何依靠技术,专家安全团队和更广泛的安全社区的组合来帮助保护我们的平台。在下一篇文章中,我们将更深入地研究这五个组件中的每一个-安全框架,自动化测试工具,同级和设计审查,红队练习以及我们的漏洞赏金计划。

安全框架:减少编程错误
每位加入Facebook的工程师都要经历为期6周的全面训练营,他们在其中学习了本文中描述的基本安全流程。这样可以确保我们的整个工程团队都接受过信息安全方面的培训。
我们还投入大量资金来构建框架,以帮助工程师在编写代码时防止和消除所有类别的错误。框架是开发的构建块,例如定制的编程语言和通用代码位库,它们为工程师在编写代码时提供了内置的保护措施。
我们构建的框架的一个示例称为Hack,这是流行的编程语言PHP的更新。Hack通过要求开发人员在代码中明确定义和键入某些变量和参数,从而帮助他们避免引入错误。此信息的添加使开发软件可以在开发人员进行编码时标记潜在的错误。您可以想到这些需求,例如保龄球馆中的充气保险杠:它们引导并指导程序员可以采取的行动,实际上限制了可能引入的错误的数量。另外,Hack开发人员必须在其代码中添加的其他信息可以使以后的分析变得更加容易,并有助于我们开发下一部分将介绍的分析工具。(编码人员可以阅读我们在Hack上的开发人员博客文章,它是开源的,以获取更多技术细节。)
我们还创建了XHP,这是对PHP / Hack的一种开源扩展,可以帮助工程师更无缝地集成PHP和HTML代码,从而减少了无意中将错误引入代码中的可能性。这有助于防止称为跨站点脚本漏洞的常见类型的问题。
Hack和XHP是安全框架的示例,可帮助确保我们的工程师从一开始就构建更安全的技术,而不是要求他们编写其他代码。
自动化测试工具:不间断,自动,大规模地分析代码
由于仅安全框架无法预期并防止所有问题,因此我们还投资构建了分析工具,该工具可以大规模检查代码并尽快发现安全错误。
我们不断从影响Facebook和其他技术公司的安全事件中学习,发现新型软件漏洞,然后利用这些知识来防止将来出现类似问题。这就是我们的基于预防和检测的工具的用武之地。
我们在Facebook上部署了许多不同类型的工具,包括静态分析工具和动态分析工具,其中静态分析工具检查编写的源代码,动态分析工具运行代码以观察程序运行时的错误。这些工具寻找潜在的问题,因此可以将其修复或标记以进行进一步分析。
无论我们如何找到安全错误,我们都会通过对问题进行分类然后进行根本原因分析来做出响应,这使我们可以从每个错误中学习,以防止将来(或类似的错误)发生。然后,此分析将反馈到我们的纵深防御方法的其他阶段。例如,它可能导致我们建立新的编码框架,新工具或新培训。
例如,我们构建了一个独特的工具,该工具会定期更新以检测新类型的错误。然后,该工具会持续分析Facebook的整个代码库(目前有超过1亿行Hack代码),以识别这些漏洞。用人工审阅者连续监视这么多的代码(每天要更改数千次)会非常耗费时间和资源。该工具使我们能够持续不断地自动检查我们的代码中是否存在某些类型的错误。
同行评审,设计评审,红色团队练习:与人类专家一起找出技术遗漏的缺陷
除了上一节中所述的自动分析之外,所有代码更改都必须经过强制性的同行评审。某些新功能还将接受设计审查,Facebook的安全专家将在其中提供反馈,以帮助工程师发现可能导致安全问题的任何缺陷。这些内部审查提供了另一层审查,以帮助确保我们遵循行业最佳实践。
为了想象我们的产品可能被滥用或攻击的方式,我们还运行了威胁建模练习,其中我们试图预测恶意行为者如何滥用我们的系统或滥用我们的平台。我们修复了这些练习中出现的问题,并利用这些经验教训来帮助设计新的编码框架和分析工具。
深度防御方法的下一层是定期测试我们的保护措施,以验证我们的代码和防御机制是否按预期运行,并且我们的响应团队已准备好并且能够检测和调查攻击。为此,我们有一个由内部安全专家组成的所谓“红队”,他们计划并执行我们系统上的分阶段“攻击”。这些未经宣布的练习有助于我们在准备压力测试我们的系统和流程时对我们的准备情况有个现实的了解。
然后,我们采用红色团队的发现,并与公司中的其他合作伙伴团队一起,制定出我们将如何应对所谓的“台式”演习中的类似安全事件的计划。这有助于我们改善在安全性,隐私,公共政策,通信,产品和法律方面工作的团队之间的协调性,并有助于我们在实际事件中发挥所需的组织力量。
漏洞赏金计划:与全球安全社区互动
与其他技术行业一样,我们面临着许多相同的安全挑战,因此我们长期投资于共享我们的工具和知识,从而可以改善社区的集体防御能力。反过来,外部信息安全专家会通过Facebook的漏洞赏金计划向我们提供专业知识,该计划是业内运行时间最长的计划之一。
自2011年以来,我们一直鼓励安全研究人员以负责任的方式披露潜在问题,以便我们修复错误,公开认可他们的工作并给予悬赏。我们的错误赏金计划有助于帮助我们快速检测到新的错误,发现趋势并聘请Facebook以外的最佳安全人才来帮助我们确保平台的安全。从每个报告中汲取的教训都将反馈给我们更大的安全性工作,这使我们能够更好,更快地找到,修复和预防错误。迄今为止,我们已向来自100多个国家/地区的研究人员支付了750万美元的赏金。我们将通过扩展漏洞赏金计划来继续创新,以包括可能导致数据滥用和第三方应用程序受损的问题在平台上。
保护Facebook上超过20亿人的独特使命
支持我们的全球社区是一项巨大的责任,它促使我们不断改进和投资我们的安全技术和人才。随着Facebook的发展壮大,以支持数十亿人互相联系,我们对发现,解决和预防安全问题的关注使我们能够扩展防御能力。有时,这意味着必须调整我们的策略以保护不断扩展的全球社区,重写我们广泛使用的编码框架并开放源代码独特的安全工具。而且因为我们知道安全工作永远不会100%完成,所以随着Facebook社区的发展,我们的安全团队将继续创新。
译者按:
企业应该要积极拥抱安全社区,借助外部力量,通过安全众测来持续地发现安全问题。
本文迁移自知识星球“火线Zone”