Facebook 的隐私和安全跟踪记录算不上好,尤其是考虑到其很多重大过失都是本可避免的情况下。但要守护数亿用户和巨大的平台,要从该公司上亿行代码中找出每个漏洞真不是件容易的事。因此,Facebook 的工程师从四年前就开始构建定制评估工具,不仅检查已知漏洞类型,还可在 30 分钟内完全扫描整个代码库,帮助工程师在正式上线前找出各种调整、修改或主要新功能中的问题。
该平台名为 Zoncolan,是一款静态分析工具,能够映射代码库行为与函数,查找单个分支及程序不同路径互操作中的潜在问题。这么大规模的代码库,纯靠人工审查那无尽的代码修改是不现实的。但静态分析伸缩性绝佳,因为其能设置关于不良架构或代码行为的 “规则”,自动扫描系统以找出此类漏洞。堪称一劳永逸。理想状态下,该系统不仅标记潜在问题,还能为工程师提供实时反馈,帮助他们学习如何消除隐患。
Facebook 安全工程经理 Pieter Hooimeijer 称:工程师每提交一次代码库修改,Zoncolan 都会在后台执行扫描,扫描结果要么直接报告给提交修改的工程师,要么标记问题并报告给当班安全工程师。所以,基本上该系统每天都会执行数千次,2018 年里共发现了约 1,500 个问题。
“这是迄今为止已知暴露识别中最有价值的东西。但仍未覆盖全部
——David Kennedy,TrustedSec
静态分析工具本身并不能发现新型漏洞,只能根据已设定规则捕获已知漏洞。但他们在持续捕获同类型错误上堪称尽职尽责老黄牛,还能从单条新规则回溯查找出一系列漏洞。而且不止 Facebook 在用静态分析,安全社区和更广大的开发产业也广泛使用静态分析工具。但 Hooimeijer 指出,Zoncolan 因定制用于全面映射 Facebook 特定代码而尤其有效。Hooimeijer 称,3 月份 Facebook 披露自身意外明文存储了数亿用户密码,在此之前,该公司已向 Zoncolan 馈送了一条关于该漏洞的规则,扫描代码库以查找潜在类似问题。还真找到了一些。
关于此事件,Hooimeijer 评论道:
“要是发生在四年前,我们就不得不马上组织一大批安全工程师,人工梳理代码,查找其他问题。现在,我们用 Zoncolan 确保代码库里没有其他类似问题。在此事件中,我们创建的新规则切实找出了类似问题。”
其中,扩展了 Zoncolan 检测能力的新规则,源自 Facebook 内部资源,包括该公司的漏洞奖励项目。
与查找普通设计及性能漏洞的通用静态分析工具不同,Zoncolan 拥有专为追捕安全漏洞而特别定制的方法。该工具还专注可识别数据流及数据模式,作为削减静态分析典型误报的一种方式。另外,Facebook 按自己意愿定制系统的做法也不是仅此一家;谷歌也有自己的定制静态分析工具,评估本公司那巨大的 20 亿行代码库。
企业事件响应咨询公司 TrustedSec 首席执行官 David Kennedy 称,拥有良好软件开发生命周期的公司都有源代码分析器,确保能够在投入生产之前筛查出暴露。大多数成熟的公司都会利用静态代码分析器,因为这是目前为止在已知暴露识别中最有价值的。但静态代码分析器仍未覆盖全部。
Kennedy 指出,Zoncolan 这样的工具无法发现导致 9 月 Facebook 3,000 万账户数据泄露的权限问题。
“源代码分析器发现不了这样的问题。”
过去几年来 Facebook 曝出的很多重大问题都是策略性隐私问题,与偶然的代码漏洞无关。
Hooimeijer 也认为 Zoncolan 不是万灵丹。但他表示,鉴于 Facebook 对该平台的投入,希望此工具的某个版本终将开源,供其他公司企业使用。令 Zoncolan 可高效搜寻 Facebook 代码漏洞的特性,可以通用化,用于打造适用面更广的工具。但想要适用 Facebook 之外的多样化环境,开源版本还需置入灵活性。
Facebook 于 2018 年开源的 Python 代码检查器 Pyre,就是迈向此目标的一步。该工具不具备 Zoncolan 的完整视野和安全焦点,但确实可以代表 Facebook 计划发布的那类资源。
“我们为此投入良多,其轨迹就是:Python 版 Zoncolan。我们想在 Facebook 之外分享其令人惊叹的能力。”
安全社区总是欢迎更多高品质开源工具涌现的。但 Facebook 先得动用这种防御手段捕获用户安全问题。