SAST大规模应用实践 – 作者:Xcheck

1623922278_60cb1666f4114808b695a.png!small?1623922279409

SAST 简介

SAST(静态应用安全测试)是指不运行被测程序本身,仅通过分析或者检查源程序的语法、结构、过程、接口等来检查程序是否存在安全漏洞。在腾讯,Xcheck 就是我们自研的一个 SAST 工具。

SAST 工具的优势

相比于动态分析或运行时测试方案,SAST 工具能在开发阶段,而不是开发完成之后,探测出源码中的安全漏洞,从而大大降低修复安全问题的成本。因为是基于源码进行扫描,它们还能找到许多动态分析工具通常无法找到的漏洞。而且,部分 SAST 工具是不依赖于编译(或者能够自动化完成编译环境的构建),使得自动化执行海量的扫描任务变得可行。

SAST 大规模应用的障碍

既然 SAST 工具具有那么大的优点,为什么在实际工作之中并没有得到广泛的应用呢,原因有很多,但是主要有以下两个原因:

误报多

常见的 SAST 工具的扫描结果中往往包含着大量的误报,分析这些误报需要耗费工程师大量宝贵的时间,同时,也增加了工程师对这个工具质疑与不满。

速度慢

常见的 SAST 工具扫描的效率不是很高,扫描一个中型项目耗费几个小时很常见。现在的开发节奏很快,这样的速度使得 SAST 工具无法融入 DevSecOps 流程,也无法得到大规模的使用,任务队列随时都是排队状态。误报多的原因在对源码分析的过程中,扫描工具并未对源代码进行足够深入的理解,导致了很多关键信息丢失,为了防止漏报,本着“宁可错杀,不可错放”的原则,只能尽可能多的上报告警,最终导致了海量的误报。每个语言或多或少都有自己的一些特性,如果不支持,会直接导致在污点传播分析时无法确认标识符指向的对象(比如:JavaScript的变量声明提升)。这样的语言特性不胜枚举,每个语言又都不一样,而且不幸的是,大多数厂商在这方面并没有给予足够好的支持。还有一个主要原因,部分检查器为了降低复杂度,只使用了过程内分析,失了上下文信息,从而无法准确定位到某些标识符正确指向的对象,最终导致误报或漏报。

速度慢的原因

简单来说,这个问题本来复杂度就高,要想解决好必然耗时。众所周知,主流的 SAST 工具都是基于污点传播模型实现。这也导致了在代码分支多,调用层级很深的情况下,污点传播信息网络比较庞大(特别是考虑了调用顺序和全局变量的情况下)。基于这样一个庞大的数据集进行污点传播分析,必然是一个耗时的事情。调研中发现,有的产品需要多次对这个庞大的数据集逐个运行匹配规则,结果耗时成倍增长。

Xcheck 的解决方案

降低误报

Xcheck 在设计之初就意识到精确理解语言特性的重要性,并针对所支持语言尽可能的实现了对代码的精准理解。从而,基本解决了因为错误理解代码造成的误报,或者因传播链断裂造成的漏报问题。

此外,针对用户自定义的转义和过滤逻辑,Xcheck也在尽力识别,从而进一步降低误报。

提升速度

SAST 扫描过程中怎样才能既快又准,这个问题目前业界并没有完美的解决方案。所以,我们换了一个思路,把问题转化为:怎样的效率与精度的取舍策略,更符合 SAST 扫描的绝大多数场景。

针对复杂度高的问题,Xcheck在算法上采用了精简方案,把最耗时的分支处理问题进行了简化,使复杂度从指数级降为线性。根据实测可知,这样的策略并未显著提升误报或漏报。另外,基于对代码的正确理解,Xcheck减少了对污点传递无关代码的分析,进一步提升了扫描速度。

运营策略

首先需要明确一个概念,Xcheck 不是跑起来就一劳永逸的,是需要持续运营优化的。1623922524_60cb175c99a05cabc8f5b.png!small?1623922525328

对于一些极端的情况,不进行任何适配,Xcheck 仅使用默认的规则来扫描,甚至连一个漏洞都无法发现。但是,这样并不能说明这款工具不好。因为,在一些实际项目中存在私有化框架,和私有封装的风险函数,识别这些信息的规则是缺失的,所以无法发现漏洞。而判定一款 SAST 工具是否优秀的标准主要是:1. 对语言的语义是否能精准全面的理解;2. 污点传递模型实现方式是否足够的精确高效。

“主动出击”,主动发现并修复 Xcheck 的规则缺失或存在的 Bug:

  • 运维人员不定期对扫描结果进行人工审计,主要关注误报

  • 搭建框架信息搜集系统,定期发起对目标语言设计框架的流行情况统计,以便制定后续新框架规则开发计划

  • 通过爬虫主动搜集已知组件信息,从而添加对应的扫描规则

  • 开放自定义规则开发接口,在各个研发圈子,安全圈子发文推广,打造 Xcheck 扫描生态,群策群力打磨工具

“被动响应”,根据用户反馈完善规则或修改 Xcheck 的 Bug:

  • 建立客服账号解答用户遇到的各种问题

  • 将 SAST 工具接入 CI 平台并搜集用户反馈,Xcheck 目前已经接入公司内所有主流 CI 平台

Xcheck 的实施效果

服务器配置

这里简单介绍一下 Xcheck 在公司内运行的一些情况,首先看一下服务器的配置:1623922672_60cb17f05847818c95e66.png!small?1623922672607目前总共使用了 4 台上述配置的服务器。

运营数据

1623922792_60cb18688b92f76457ce6.png!small?1623922792816

需要重点说明的是大部分项目都是在 30 秒内完成的:1623922812_60cb187cc83ac018bb26f.png!small?1623922813476目前统计到的漏洞类型分布情况如下图所示:1623922854_60cb18a647c78cc0c70be.png!small?1623922854692专注于代码安全 | 公众号:腾讯代码安全检查Xcheck

来源:freebuf.com 2021-06-17 17:44:48 by: Xcheck

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论