尽管 Facebook 近期被不重视用户隐私保护等话题缠身,特别是其原本可以避免很多不必要的错误。但是,就其数十亿用户和支持其用户的庞大数据平台来说,想要在一亿行巨量代码库中发现每一个缺陷并不容易。
为了在巨量代码库中准确定位问题,Facebook 的工程师四年前开始构建定制评估工具。这个工具不仅可以检查已知类型的错误,还可以在 30 分钟内扫描完整个代码库,帮助工程师在变更、修改或增加主要功能之前发现缺陷,将缺陷扼杀在摇篮中。
该工具名为 Zoncolan,是一个“静态分析”工具,可以映射代码库的行为和功能,并通过不同路径中相互作用查找隐藏在各个分支中的潜在问题。在如此大规模代码库中使用人工手动审查无穷无尽的代码变更,并做代码审核是不切实际的。静态级别分析非常合适,因为它对不良架构和缺陷代码行为设定了“规则”,并自动扫描系统中这些类别的错误。一旦出现,马上抓住。理想情况下,该系统不仅可以标注潜在问题,还可以为工程师提供实时反馈帮助他们学会如何避免踏入陷阱。
“每当工程师要对我们的代码库进行改动时,Zoncolan 就会开始在后台运行,(对疑似缺陷)标记之后,并同时直接报告给软件工程师本人,也同时报告给当值的安全工程师,”Facebook 安全工程经理 Pieter Hooimeijer 说道, “因此,它每天运行数千次,在 2018 年中就发现了 1,500 个问题。”
静态分析工具本身并不会发现新的漏洞,只是根据被设定的规则来捕捉事物。 但是,这些工具不仅可以不厌其烦的一次又一次捕获相同的错误,还可以根据这些缺陷深入挖掘出一个新的规则。
静态代码分析工具对于 Facebook 来说是独一无二的,这个工具被广泛应用于安全组以及应用开发中。但是 Hooimeijer 指出,因为它是为了全面映射 Facebook 的特定代码库而量身定制的,因此 Zoncolan 特别有效。Hooimeijer 表示之前 Facebook 在 3 月份被披露以明文形式存储数亿用户密码后,公司就对该漏洞设置了规则,让 Zoncolan 根据规则扫描潜在问题。
Hooimeijer 表示:“四年前,我们不得不争抢一群安全工程师,并开始手动梳理代码寻找问题。现在,我们使用 Zoncolan 来确保代码库中没有其他类似性质的问题。在这种情况下,我们创建了新的规则,在实践中发现了类似问题。”扩展 Zoncolan 检测能力的新规则的灵感来自 Facebook 内部代码库,也包括该公司的 Bug 赏金计划。
Zoncolan 采用了一种特别定制的方法来寻找安全漏洞,而不是更常用的寻找各种设计和性能缺陷的静态分析方法,关注可识别的数据流及设计模式,作为减少静态分析误报的一种方法。不过,Facebook 并不是唯一一家有自己定制开发的代码检查工具的公司,谷歌也有自己的定制静态分析工具,评估该公司庞大的 20 亿行代码库。
“任何拥有良好软件开发生命周期的公司都有源代码分析器,以确保他们的产品在投入前扫清一切缺陷”企业危机响应咨询服务公司 TrustedSec 的首席执行官 David Kennedy 说, “大多数成熟的组织都使用静态代码分析器,因为它最有价值的地方就是可以识别缺陷,当然它并不涵盖所有内容。”
Kennedy 指出,像 Zoncolan 这样的工具不会发现权限泄露,这导致 Facebook 在 9 月份遭遇 3000 万账户数据泄露问题 ,源代码分析器不会发现这一点。Facebook 过去几年中最严重的问题是包括与意外代码错误无关的基于用户隐私权的问题。
Hooimeijer 回应 Zoncolan 不是完美的解决方案。但他表示,鉴于 Facebook 在该工具上所做的投资,他希望该工具的某个版本有朝一日可以开源,供其他组织使用。不过,Zoncolan 在 Facebook 代码中如此有效地捕获 bug 是基于 Facebook 内部开发的,如果要在 Facebook 之外的环境中运行,还需要增强灵活性,适配更多环境。
实现这一目标的第一步是 Facebook 在 2018 年发布了一个名为 Pyre 的代码检查器,是为编程语言 Python 发布的开源代码检查工具。该工具没有 Zoncolan 的范围广、功能强,但是 Facebook 准备开源的一个类型范例。
“我们已经投入了大量精力来构建这个,这个工具就是 Python 的 Zoncolan。”Hooimeijer 表示, “我们也希望在 Facebook 以外分享精彩的好工具。”安全社区将永远欢迎高质量的开源工具。但是,Facebook 需要不断磨练每一个防守,以便在安全问题滚雪球之前抓住,进而保障用户安全。
原文链接:《HOW FACEBOOK CATCHES BUGS IN ITS 100 MILLION LINES OF CODE》