SAST 简介
SAST(静态应用安全测试)是指不运行被测程序本身,仅通过分析或者检查源程序的语法、结构、过程、接口等来检查程序是否存在安全漏洞。在腾讯,Xcheck 就是我们自研的一个 SAST 工具。
SAST 工具的优势
相比于动态分析或运行时测试方案,SAST 工具能在开发阶段,而不是开发完成之后,探测出源码中的安全漏洞,从而大大降低修复安全问题的成本。因为是基于源码进行扫描,它们还能找到许多动态分析工具通常无法找到的漏洞。而且,部分 SAST 工具是不依赖于编译(或者能够自动化完成编译环境的构建),使得自动化执行海量的扫描任务变得可行。
SAST 大规模应用的障碍
既然 SAST 工具具有那么大的优点,为什么在实际工作之中并没有得到广泛的应用呢,原因有很多,但是主要有以下两个原因:
误报多
常见的 SAST 工具的扫描结果中往往包含着大量的误报,分析这些误报需要耗费工程师大量宝贵的时间,同时,也增加了工程师对这个工具质疑与不满。
速度慢
常见的 SAST 工具扫描的效率不是很高,扫描一个中型项目耗费几个小时很常见。现在的开发节奏很快,这样的速度使得 SAST 工具无法融入 DevSecOps 流程,也无法得到大规模的使用,任务队列随时都是排队状态。误报多的原因在对源码分析的过程中,扫描工具并未对源代码进行足够深入的理解,导致了很多关键信息丢失,为了防止漏报,本着“宁可错杀,不可错放”的原则,只能尽可能多的上报告警,最终导致了海量的误报。每个语言或多或少都有自己的一些特性,如果不支持,会直接导致在污点传播分析时无法确认标识符指向的对象(比如:JavaScript的变量声明提升)。这样的语言特性不胜枚举,每个语言又都不一样,而且不幸的是,大多数厂商在这方面并没有给予足够好的支持。还有一个主要原因,部分检查器为了降低复杂度,只使用了过程内分析,失了上下文信息,从而无法准确定位到某些标识符正确指向的对象,最终导致误报或漏报。
速度慢的原因
简单来说,这个问题本来复杂度就高,要想解决好必然耗时。众所周知,主流的 SAST 工具都是基于污点传播模型实现。这也导致了在代码分支多,调用层级很深的情况下,污点传播信息网络比较庞大(特别是考虑了调用顺序和全局变量的情况下)。基于这样一个庞大的数据集进行污点传播分析,必然是一个耗时的事情。调研中发现,有的产品需要多次对这个庞大的数据集逐个运行匹配规则,结果耗时成倍增长。
Xcheck 的解决方案
降低误报
Xcheck 在设计之初就意识到精确理解语言特性的重要性,并针对所支持语言尽可能的实现了对代码的精准理解。从而,基本解决了因为错误理解代码造成的误报,或者因传播链断裂造成的漏报问题。
此外,针对用户自定义的转义和过滤逻辑,Xcheck也在尽力识别,从而进一步降低误报。
提升速度
SAST 扫描过程中怎样才能既快又准,这个问题目前业界并没有完美的解决方案。所以,我们换了一个思路,把问题转化为:怎样的效率与精度的取舍策略,更符合 SAST 扫描的绝大多数场景。
针对复杂度高的问题,Xcheck在算法上采用了精简方案,把最耗时的分支处理问题进行了简化,使复杂度从指数级降为线性。根据实测可知,这样的策略并未显著提升误报或漏报。另外,基于对代码的正确理解,Xcheck减少了对污点传递无关代码的分析,进一步提升了扫描速度。
运营策略
首先需要明确一个概念,Xcheck 不是跑起来就一劳永逸的,是需要持续运营优化的。
对于一些极端的情况,不进行任何适配,Xcheck 仅使用默认的规则来扫描,甚至连一个漏洞都无法发现。但是,这样并不能说明这款工具不好。因为,在一些实际项目中存在私有化框架,和私有封装的风险函数,识别这些信息的规则是缺失的,所以无法发现漏洞。而判定一款 SAST 工具是否优秀的标准主要是:1. 对语言的语义是否能精准全面的理解;2. 污点传递模型实现方式是否足够的精确高效。
“主动出击”,主动发现并修复 Xcheck 的规则缺失或存在的 Bug:
-
运维人员不定期对扫描结果进行人工审计,主要关注误报
-
搭建框架信息搜集系统,定期发起对目标语言设计框架的流行情况统计,以便制定后续新框架规则开发计划
-
通过爬虫主动搜集已知组件信息,从而添加对应的扫描规则
-
开放自定义规则开发接口,在各个研发圈子,安全圈子发文推广,打造 Xcheck 扫描生态,群策群力打磨工具
“被动响应”,根据用户反馈完善规则或修改 Xcheck 的 Bug:
-
建立客服账号解答用户遇到的各种问题
-
将 SAST 工具接入 CI 平台并搜集用户反馈,Xcheck 目前已经接入公司内所有主流 CI 平台
Xcheck 的实施效果
服务器配置
这里简单介绍一下 Xcheck 在公司内运行的一些情况,首先看一下服务器的配置:目前总共使用了 4 台上述配置的服务器。
运营数据
需要重点说明的是大部分项目都是在 30 秒内完成的:目前统计到的漏洞类型分布情况如下图所示:专注于代码安全 | 公众号:腾讯代码安全检查Xcheck
来源:freebuf.com 2021-06-17 17:44:48 by: Xcheck
请登录后发表评论
注册