阿里巴巴|5 款阿里常用代码检测工具,免费用( 二 )


代码智能补丁推荐 缺陷检测和补丁推荐几十年来一直是软件工程领域的难题 , 又是研究者和一线开发者最为关心的问题之一 , 这里讲的缺陷不是网络漏洞、系统缺陷 , 而是隐藏在代码中的缺陷 。 帮助开发者识别这些缺陷 , 并进行修复 , 能够大幅提升软件质量 。
基于业界和学术界较为流行的缺陷检测手段 , 并分析和规避其局限性 , 阿里巴巴 Codeup 的算法工程师们提出了一种新的算法 , 实现更加精准和高效的分析代码缺陷并推荐优化方案 , 该算法已被国际软件工程大会(ICSE)收录 。

1、根据 commit message 中的关键词找出修复型的 commit , 只取涉及文件小于 5 个的 commit(涉及文件过多的 commit 可能会稀释修复行为) 。 这个步骤十分依赖开发者良好的 commit习惯 , 希望开发者能用好 commit , 写好 message 。
2、从这些修复型 commit 中以文件级别提取删除内容和新增内容 , 即 Defect and Patch pairs(DP Pair) , 这一步难免会有很大的噪声 。
3、利用改进的 DBSCAN 方法对 buggy 和 patch 对同时聚类 , 将相似的缺陷和补丁代码聚在一起 。 (也可以做片段级的聚类)通过将相似的缺陷和修复做聚类 , 减少了上一步留下的大量噪声 , 同时历史代码提交中大家共同犯过的错具有很强的借鉴意义 。
4、利用自研的模板提取方法总结缺陷代码和补丁代码 , 并根据不同的变量来适配上下文 。
代码补丁推荐服务目前应用于合并请求的代码自动扫描场景 , 在代码评审过程中检测可优化代码片段并给出优化建议 , 将历史评审中的人工经验沉淀下来持续提升企业代码质量 。
2、代码安全检测
敏感信息检测 近年来 , 业内发生多起敏感信息(API Key、Database credential、OAuth token 等)通过某些站点被无意识地泄露出去的事件 , 给企业带来了安全风险 , 甚至直接的经济损失 。
在我们的实践过程中 , 我们也面临了类似的问题 , 硬编码问题出现非常高频 , 而又缺乏有效的识别机制 。 因此开发者和企业管理者亟需一款稳定健全的敏感信息检测方法和系统 。 通过调研我们了解到 , 目前已有的敏感信息检测工具大多单纯使用规则匹配或信息熵技术 , 导致其召回率或准确率难以满足预期 。 因此我们在规则匹配和信息熵技术的基础上 , 结合上下文语义 , 提出了一款采用多层检测模型的敏感信息检测工具——SecretRadar 。

SecretRadar 的技术实现思路主要分为三层 , 第一层采用规则匹配这种传统敏感信息识别技术 , 规则匹配具有良好的准确度和扩展性 , 但是非常依赖比较固化的长度、前缀、变量名 , 难以应对不同开发者的不同编码风格 , 容易造成漏报 。 针对难以固定规则捕捉的场景 , 在第二层我们采用了信息熵算法 。 信息熵算法用于衡量代码行混乱程度 , 对随机生成型密钥和随机身份信息识别效果良好 。 但信息熵算法也有其局限性 , 召回率提升的同时误报也增多了 。 因此在第三层我们采用了模板聚类和上下文语义分析等方法进行过滤优化 , 针对信息熵结果聚合提取常见关键字 , 结合上下文语义和当前语法结构提升模型准确率 。
敏感信息检测工具不止服务我们内部开发同学 , 在云效平台上也支持了超过 2 万代码库、3 千家企业 , 帮助开发者解决了超过 9 万硬编码问题 。
源码漏洞检测 阿里巴巴采用 Sourcebrella Pinpoint 源伞检测引擎 , 进行源码漏洞检测 , 主要涉及到注入类风险和安全策略类风险检测 。
源伞检测引擎是香港科技大学 Prism 研究组在过去十年的时间内的技术研究成果 。 该引擎吸收了国际上近十年的软件验证技术研究成果 , 并且加以改进和创新 , 独立设计和实现了一套技术领先的软件验证系统 。 其主要验证方式是将编程语言翻译成一阶逻辑和线性代数等数学表达 , 通过形式化验证技术推理缺陷成因 。 迄今为止 , 一共发表了四篇核心技术相关的论文 , 一篇 PLDI 和三篇 ICSE , 研究型的同学可以点击文末链接阅读 。