欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

深入了解静态代码扫描以及如何以较低成本提高代码质量

最编程 2024-05-02 09:25:42
...
开源中国社区团队直播首秀,以分享为名讲述开源中国社区背后的故事”

从代码的质量左移讲起

所谓质量左移是指代码在测试之前,在编码阶段就已经介入了代码的质量检测,提前发现并修复代码问题,有效减少测试时间,提高研发效率,发现BUG越晚,修复的成本越大。

源代码作为软件的最初原始形态,其安全缺陷是导致软件漏洞的直接根源。因此,通过静态方法分析发现源代码中的安全缺陷是降低软件潜在漏洞的重要方法。

代码保障,保障的是什么?

代码保障的三个核心:代码缺陷,代码安全,代码规范

所谓代码缺陷,即为代码中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。IEEE729-1983对缺陷有一个标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。

代码安全方面,当今互联网安全形势严峻,2020年上半年,国家信息中心安全漏洞共享平台(CNNVD)所收录的漏洞总数为7780,较2019年上半年增加1377个,同比增长17.7%,收录总数达到历史新高。其中包括高危漏洞高达2609个(占33.7%,同比增长8.9%)。

代码规范方面,团队统一代码规范,有助于提升代码可读性以及工作效率,但是现实中研发团队缺乏工具审核规范,缺乏整改规范的示范用例,造成管理代码规范执行起来效果往往是事倍功半。

质量左移最佳方案-静态代码扫描

现如今,日常业务的代码保障工作在生产环节中已经变得越来越重要。一旦出现资损故障更容易引发重大损失。就目前来说,有效的防控手段一般有:

  1. 项目上线前 Code Review,提前发现问题,解决问题;
  2. 线上实时监控,出现问题时执行预案,及时修复。

由上可以看出,上线后的修复只能减小资产损失规模,要想真正避免资产损失还得靠人工 Code Review 在项目上线之前发现问题。然而,一方面 Code Review 需要额外的人工介入,且其质量参差不齐,无法得到保障;另一方面,高质量的 Code Review 也会花费较多时间,成本较高。

那么有没有一种两全其美的方法,以一种低成本的方式,自动发现代码中存在的资损风险,从而保障代码质量?答案是:代码扫描!

代码扫描根据编译状态又分为静态扫描和动态扫描。而根据质量左移的理念,在代码编译前的就进行代码扫描,尽早发现代码问题是最好的方式,这里就对最常用的静态扫描进行说明。

静态代码扫描的主要原理有 3 种:AST(抽象语法树)扫描、正则匹配扫描,分析源文件扫描。

什么是抽象语法树扫描呢?简单说就是以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,找出用户可控变量的使用过程是否流入到了危险函数,从而定位出漏洞。

什么是正则匹配扫描呢?这种方式比较简单,就是匹配程序中是否出现了哪些敏感字符。

静态代码扫描一般作为插件存在于 DevOps 研发体系中,是 DevOps 中质量左移的重要实现方式。因为扫描的节点左移能够大幅度的降低开发以及修复的成本,能够帮助开发人减轻开发和修复的负担,在推行静态代码扫描阻力主要来自于开发人员,由于工具能力的有限性,会产生大量的误报,这就导致了开发人员很可能在做 Bug 确认的工作时花费了大量的无用时间。因此选择一款合适的静态代码分析工具变得尤为重要,合适的工具能够真正达到降低开发成本的效果。

静态代码扫描 Scan

国内领先的研发协作平台 Gitee 企业版,已经为超过 18 万家企业提供了高效的静态代码扫描服务,帮助他们提升代码质量,降低开发成本,而其中的奥秘便是静态代码扫描引擎 Scan。

Scan 静态代码扫描在三个方面帮助开发者在研发环节,准入环节,测试环节能够快速准确的查找、定位和修复代码中存在的风险。 image.png

Scan产品功能简介:

1.Scan现在支持C/C++、Java、PHP、Python、Go、JavaScript、Objective-C、COBOL等13门主流编程语言。

2.在七个扫描维度上提供支持,截至到 2020 年底 Scan 总计 4600 余条规则,在缺陷、规范等维度基本覆盖了国际标准规则,在安全维度覆盖了CWE Top 25、OWASP Top 10。具备丰富的扫描语言和扫描维度,满足用户对代码质量进行全方位的分析和度量,同时 Scan 拥有自主核心技术的自研扫描引擎BCA系列,该扫描具备检出高,误报低,速度快的优点image.png

  1. 基于缺陷的唯一标识技术,实现代码缺陷的增量管理,多工具并行扫描,实现缺陷检出更全面。
  2. 基于缺陷修复记录的特征相似性计算的智能修复案例推荐,帮助工程师快速修复代码。
  3. 更有灵活的规则集、扫描配置等个性化配置,满足不同类型的项目需求。 image.png

平台能力对比

image.png

Scan 的独创特色

1.代码增量计算 基于Scan缺陷特征提取算法(已申请专利)准确识别出每个缺陷的唯一标识,通过唯一标识对比某个项目前后两次扫描结果,分析出后一次扫描比前一次扫描新增了多少问题、修复了多少问题。

2.采用自研扫描引擎 独创的代码执行链分析技术,结合平台海量代码缺陷数据,融合个开源工具,开发系列自研代码分析引擎 BCA,特色是具备检出高,误报低,速度快,持续优化的特点,当前已有1个软件著作权和7个发明专利image.pngimage.png 3.代码误报过滤 对于误报的 Bug,可以在报告页面标记为误报,这样下次扫描会将这个 Bug 过滤掉不再显示(只过滤掉这个误报 Bug,不会把这类 Bug 都过滤掉)。误报率高,会影响代码的修复速度,对代码质量管理提出严峻挑战。

4.可分析 .git 文件 提取每个 Bug 的提交人,即写这个 Bug 的人,便于开发者认领自己的 Bug。

5.智能修复样例推荐 根据智能修复样例可以根据实际问题情况给出针对性的修复建议,拥有更高的参考价值,快速正确的修复 Bug。对整个代码的质量提升有一个非常好的支持。 image.png

Scan 技术指标

  1. 支持多并发的代码静态扫描,系统响应速度不超过 120ms,代码量在 1W 行以内的代码完整扫描周期不超过 5 分钟。并发扫描是 Scan 的一大亮点,相较于其他行内竞品,速度提升50%

  2. 支持生成包含多个角度数据统计以及全面而丰富的统计分析代码静态报告,无须人工干预,包含的主要功能有: image.png

  3. Scan 服务单节点时,任务并发量为10,平台主要接口 QPS>100 A. 主要页面(模块页,任务列表页,扫描报告页等)响应时间<2s。 B. 扫描任务成功率大于 99.8%。 C. 扫描时长,每10万行代码耗时1~3分钟。

  4. 代码扫描的平均误报率低于为4%。 对10000+代码仓库做误报分析,最终平均误报率为3.87%。(行内的平均误报率是5-9%) 对10000+代码仓库做误报分析,最终平均误报率为3.87%。(行内的平均误报率是5-9%)

Scan 产品的成绩

Scan 在 Gitee 上已经累计为102000个代码库进行了代码扫描,开源社区的代码累计发现数以亿计的安全问题包括远程代码执行(RCE)、SQL 注入和跨站脚本(XSS)的漏洞,根据数据对比我们发现开源社区的代码质量距离一线大厂还是有不小的距离。通过 Scan 的智能修复样例推荐的功能,开发者和维护人员在一个月内修复了 72% 的已报告安全问题,比例远高于业内统计的 32% 的 30 天内修复率。 image.png

截止 2021 年 4 月,除了众多开源项目外,Scan 已经为山东城商银行、海关总署、宁波银行、光大银行、太极药业、山东科技大学等企事业单位和机构提供了服务。

如果你也想和他们一起享受功能强大且高效的静态代码扫描服务,可以点击链接或拨打专属客服电话:400-606-0201,前往 Gitee 企业版免费体验,同时也可以将 Scan 部署于企业的私有服务器上,助力企业有效提升研发效能。

image.png