前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAST大规模应用实践

SAST大规模应用实践

原创
作者头像
腾讯代码安全检查Xcheck
发布2021-04-29 09:40:08
1.2K0
发布2021-04-29 09:40:08
举报
文章被收录于专栏:Xcheck代码安全检查

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 在公司内运行的一些情况,首先看一下服务器的配置:

CPU

内存

64核

192GB

目前总共使用了 4 台上述配置的服务器。

运营数据

并发

150

最大单日任务数

50737(远未跑满负载)

总任务数

3277287

5分钟内扫描完成率

98.36%

误报率

6.57%

需要重点说明的是大部分项目都是在 30 秒内完成的:

目前统计到的漏洞类型分布情况如下图所示:


想了解Xcheck更多信息或者代码安全审计相关技术欢迎关注xcheck公众号~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SAST 简介
  • SAST 工具的优势
  • SAST 大规模应用的障碍
    • 误报多
      • 速度慢
        • 速度慢的原因
        • Xcheck 的解决方案
          • 降低误报
            • 提升速度
            • 运营策略
            • Xcheck 的实施效果
              • 服务器配置
                • 运营数据
                相关产品与服务
                应用安全开发
                应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档