欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何扩展Facebook上的静态分析(上)

来源:本站整理 作者:佚名 时间:2019-08-13 TAG: 我要投稿


程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。目前静态分析技术向模拟执行的技术发展以能够发现更多传统意义上动态测试才能发现的缺陷,例如符号执行、抽象解释、值依赖分析等等并采用数学约束求解工具进行路径约减或者可达性分析以减少误报增加效率。目前的静态分析工具,无论从科研角度还是实用性角度还有很大的提高余地,国际最好分析工具误报率在5-10%之间。
对于Facebook来说,其开发人员一直在致力于开发高级静态分析工具,这些工具采用类似于程序验证的推理技术。而今天,我们在本文中描述的工具(Infer和Zoncolan)就专门针对与崩溃和Facebook安全性相关的问题,这些工具有时执行跨越许多进程或文件的复杂推理,并且它们试图集成到正常的工作流程中。
这些工具在代码修改时运行,在代码审查进程中起到木马(Bots)的作用。Infer是Facebook 的 Infer 是一个静态分析工具。可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题。Infer的运行原理,捕获编译命令,将文件翻译成 Infer 内部的中间语言。这种翻译和编译类似,Infer 从编译过程获取信息,并进行翻译。这就是我们调用Infer 时带上一个编译命令的原因了,比如: Infer — clang -c file.c, Infer — javac File.java。结果就是文件照常编译,同时被 Infer 翻译成中间语言,留作第二阶段处理。特别注意的就是,如果没有文件被编译,那么也没有任何文件会被分析。总之,Infer的目标是Facebook的移动应用程序以及后端的c++代码,代码库包含数千万行代码。在代码投入运行之前,已经看到开发人员修复了超过10万个报告的问题。
而 Zoncolan的目标是1亿行Hack代码,并且它还被集成在安全工程师使用的工作流程中。目前,它已经修复了数千个安全和隐私漏洞,性能超过了Facebook针对此类漏洞使用的任何其他检测方法。我们将描述在开发和部署这些分析过程中遇到的人和技术挑战,以及我们学到的经验。
接下来,我们将从三个方面来讨论如何深入扩展Facebook上的静态分析:重要的漏洞,人员和相关操作行为的漏洞。
Facebook静态分析的背景
对于漏洞的判断
使用静态分析来防止可能影响产品的漏洞,不过静态分析开发人员必须意识到并非所有漏洞都是相同的:根据运行背景和性质,不同的漏洞可能具有不同级别的重要性或严重性。很少使用的服务上的内存泄漏可能不如允许攻击者访问未授权信息的漏洞那么重要。此外,漏洞类型的频率可能影响决定它的重要性。如果某种崩溃(例如Java中的空指针漏洞)每小时发生一次,那么肯定比一年只发生一次的类似严重漏洞更重要。
目前Facebook有几种方法可以收集有关漏洞的数据:首先,Facebook维护有关运行中发生的崩溃和其他漏洞的统计数据;其次,他们有一个“漏洞赏金”计划,公司外的人可以在Facebook开发的应用程序上报告漏洞,例如,Messenger,Instagram或WhatsApp;第三,他们有一个内部计划来跟踪发生的最严重的漏洞(SEV)。
我们对Facebook问题的理解推动了我们对高级分析的关注,最近的一篇论文指出:
“在Google上广泛部署的所有静态分析都相对简单,尽管一些团队针对有限的领域(如Android应用程序)开发特定于项目的分析框架,这些领域可以进行进程间分析。”
人员和部署情况
并非所有的漏洞都是相同的,因此如何部署模型,还取决于预期的受众(即使用分析工具的研究人员)。
对于针对给定平台上的所有或各种工程师的漏洞类别,我们倾向于“差异时间”部署,在这种部署中,分析人员作为木马参与代码评审,当工程师提交代码修改时自动进行注释。稍后,我们将描述一个惊人的情况,其中差异时间部署的修复率达到70%,其中更传统的“离线”或“批处理”部署(在工作流程之外向工程师提供漏洞列表)的修复率为0% 。
如果目标用户是公司中规模较小的领域安全专家,我们将使用两个额外的部署模型。根据部署的“差异时间”,安全相关问题被推送给随叫随到的安全工程师,这样他们就可以在必要时对正在进行的代码更改进行评论。此外,为了在代码库中查找给定漏洞的所有实例或进行历史探索,离线检查提供了一个用于查询、筛选和分类所有警报的用户界面。
在所有情况下,我们的部署都关注于我们的工具所服务的人员及其工作方式。
采取的行动和遗漏的漏洞
我们已经了解了部署模型如何影响工具的使用,下面的两个案例会更详细地帮助我们理解这一点,并帮助我们改进已有的静态分析工具,以帮助研究人员采取行动和发现遗漏的漏洞。
由于报告的错误而采取的操作类型取决于部署模型和漏洞类型,在diff时,操作是对diff的更新,它就删除静态分析报告。在Zoncolan的离线部署中,如果漏洞非常重要,需要与产品团队一起跟进,则报告可以触发安全专家为产品工程师创建任务。与手动安全检查或漏洞赏金报告相比,Zoncolan获得的SEV更多。我们测量的43.3%的严重安全漏洞是通过Zoncolan检测到的,截至发稿时,在我们观察到大约11个“遗漏的漏洞”中,Zoncolan的“捕获率”超过了80%。
这些遗漏的漏洞是以某种方式被观察到的,至于观察的手段则取决于漏洞的种类。对于安全漏洞,Facebook有漏洞赏金报告,安全审查或SEV审查。对于我们的移动应用程序,我们会记录移动设备上发生的崩溃和应用程序没有响应的事件。
活跃的报告和遗漏的漏洞与学术静态分析文献中关于真阳性和假阴性的经典概念有关,静态分析中的常识是,保持对假阳性的控制很重要,因为它们会对使用这些工具的工程师产生负面影响,因为它们往往会导致对报告的警报漠不关心。另一方面,假阴性是一种潜在的有害漏洞,可能在很长一段时间内都不会被发现。影响安全性或隐私的未检测到的漏洞可能会导致未检测到的漏洞。在实践中,更少的假阳性通常意味着更多的假阴性,反之亦然。更少的假阴性意味着更多的假阳性(误报)。例如,控制误报的一种方法是,当你不确定漏洞是否存在时,就不报告。但是这种方式 (例如,通过忽略路径或启发式筛选)会产生遗漏漏洞的后果。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载