您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Facebook 如何在一亿行代码中迅速找到缺陷?

时间:2019-08-28 13:30:37  来源:  作者:

 

尽管 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》


Tags:Facebook   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近,美国联邦贸易委员会(FTC)重新发起对Facebook的反垄断起诉。FTC称,Facebook的用户数量和用户贡献内容的累积构成了垄断要件。Facebook的用户大,内容积累长,已经具有不可替代...【详细内容】
2021-08-24  Tags: Facebook  点击:(165)  评论:(0)  加入收藏
1摘要本文给大家剖析了一个有趣的现象:IT 业界使用最广泛的版本管理系统 Git,却不被硅谷领先的科技公司 Google、Facebook 等垂青的原因。分析了 Google 的版本和分支管理模式...【详细内容】
2021-05-17  Tags: Facebook  点击:(228)  评论:(0)  加入收藏
说到状态管理器,轮子满天飞。在 Class 时代,redux 与 mobox 几乎占据了全部市场,几乎没有没用过 redux 的同学。随着 Hooks 的诞生,新的一批轮子应运而生,其中有代表性的有 unstated-next、constate 等等。当然无论什么轮...【详细内容】
2020-05-17  Tags: Facebook  点击:(505)  评论:(0)  加入收藏
为了在巨量代码库中准确定位问题,Facebook 的工程师四年前开始构建定制评估工具。这个工具不仅可以检查已知类型的错误,还可以在 30 分钟内扫描完整个代码库,帮助工程师在变更、修改或增加主要功能之前发现缺陷,将缺陷扼...【详细内容】
2019-08-28  Tags: Facebook  点击:(194)  评论:(0)  加入收藏
最近,当大学刚毕业的 Zuhayeer Musa 和 Zaheer Mohiuddin 开始进入软件行业时,他们开始犯难了。他们在网上找到的所有与软件工程岗位相关的信息似乎都没能告诉他们:这些岗位的...【详细内容】
2019-06-21  Tags: Facebook  点击:(256)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条