随着计算机技术在各行各业广泛而深入的应用,软件规模和调用链路逐渐复杂,潜在的代码安全问题和风险也日益增多。近几年安全漏洞频发,诸多知名软件被发现存在远程代码执行、隐私数据泄露、SQL注入等安全漏洞问题,造成企业资产损失。
面对越来越复杂的安全场景和安全漏洞可能会带来的巨大损失,如何识别和管理潜在安全风险成了企业管理者和产研人员的一个不可忽视的问题。
在日常研发过程中,安全类问题往往隐藏在缺乏安全意识的编码逻辑和未检查的开源依赖组件中,难以在功能性测试和代码评审中被及时察觉。
云效Codeup为开发者提供了丰富的代码安全检测服务:
企业管理者可以通过「源码漏洞检测」和「敏感信息检测」识别源码编程中的策略漏洞和隐私泄露问题,通过「依赖包漏洞检测」为每次代码变更引入的三方依赖软件包进行充分的安全检查,并在企业级安全中心和代码库安全页面进行风险数字化管理。除了云效Codeup开箱即用的内置检测服务,开发者也可以简单快捷地在云效Flow流水线平台上解锁更多的自定义检测场景。
1. 源码漏洞检测
Codeup集成了Sourcebrella Pinpoint源伞检测引擎,为开发者提供源码漏洞检测服务。主要涉及到注入类风险和安全策略类风险检测。
源伞检测引擎是香港科技大学Prism研究组在过去十年的时间内的技术研究成果。该引擎吸收了国际上近十年的软件验证技术研究成果,并且加以改进和创新,独立设计和实现了一套技术领先的软件验证系统。其主要验证方式是将编程语言翻译成一阶逻辑和线性代数等数学表达,通过形式化验证技术推理缺陷成因。
迄今为止,一共发表了四篇核心技术相关的论文,一篇PLDI和三篇ICSE,研究型的同学可以搜索下方链接阅读:
∙ Pinpoint: Fast and Precise Sparse Value Flow Analysis for Million Lines of Code [1]
∙ SMOKE: Scalable Path-Sensitive Memory Leak Detection for Millions of Lines of Code [2]
∙ Pipelining Bottom-up Data Flow Analysis [3]
∙ Conquering the Extensional Scalability Problem for Value-Flow Analysis Frameworks [4]
源伞检测引擎能够在活跃度比较高的大型开源项目中发现隐藏超过10年的缺陷,以MySQL检测 [5] 为例,这些缺陷都是市面上其他检查工具无法扫描出来的,并且能够在1.5小时完成200万行大型开源项目的检测。在保持扫描的高效率同时,还能够将误报率控制在15%左右。对于复杂且体量庞大的分析项目来说,源伞检测引擎所表现的扫描效率和误报率在业内也处于领先水平。
云效Codeup源码漏洞检测集成了源伞检测引擎的安全分析能力,能够在分析精度、速度、深度等方面均衡得到较好的分析结果,开发者可在云效Codeup代码库安全页面直接创建源码漏洞检测流水线,无需人工干预,自动寻找软件的编码安全漏洞。
综合来说,Codeup源码漏洞检测具备的核心优势:
∙ 支持分析字节码,二三方包的代码逻辑都不会遗漏;
∙ 擅长跨函数长调用链路的逻辑分析,即将推出跨微服务的代码分析技术;
∙ 可以处理引用、指针等带来的间接数据修改;
∙ 精度高,相比于同类工具,如Clang、Infer,在精度和有效问题识别上表现更佳;
∙ 性能好,目前单应用平均5分钟左右分析完毕;
源伞检测引擎可以精确的追踪代码中的数据流向,拥有高深度高精度的函数调用链分析能力,可以找到跨越多层函数的深度问题。在发现缺陷的同时还能给出问题触发的过程,完整展示相关的控制流以及数据流,这样可以辅助开发者快速理解和修复问题,在软件开发早期更低成本地提高软件质量,大幅减少生产成本,提高研发效能。
2. 敏感信息检测
近年来,业内发生多起敏感信息(API Key、Database credential、OAuth token 等)通过某些站点被无意识地泄露出去的事件,给企业带来了安全风险,甚至直接的经济损失。开发者和企业管理者亟需一款稳定健全的敏感信息检测方法和系统。
通过调研我们了解到,目前已有的敏感信息检测工具大多单纯使用规则匹配或信息熵技术,导致其召回率或准确率难以满足预期。因此我们在规则匹配和信息熵技术的基础上,结合上下文语义,提出了一款采用多层检测模型的敏感信息检测工具——SecretRadar。
SecretRadar的技术实现思路主要分为三层,第一层采用规则匹配这种传统敏感信息识别技术,规则匹配具有良好的准确度和扩展性,但是非常依赖比较固化的长度、前缀、变量名,难以应对不同开发者的不同编码风格,容易造成漏报。针对难以固定规则捕捉的场景,在第二层我们采用了信息熵算法。
信息熵算法用于衡量代码行混乱程度,对随机生成型密钥和随机身份信息识别效果良好。但信息熵算法也有其局限性,召回率提升的同时误报也增多了。因此在第三层我们采用了模板聚类和上下文语义分析等方法进行过滤优化,针对信息熵结果聚合提取常见关键字,结合上下文语义和当前语法结构提升模型准确率。
3. 依赖包漏洞检测
在编码问题以外,根据Synopsys 2020开源安全报告显示,99%以上的组织使用了开源技术。使用开源组件本身带来的技术交流和站在巨人肩膀上协作、降低开发成本、加快迭代周期、提高软件质量等优势已经是业内共识了。但是,开源软件带来一系列便利的同时,也暗藏大量安全风险。
据审计,75%的代码库存在安全漏洞,其中49%包含高危漏洞;另外,82%的代码库仍在使用超过4年以上的outdated组件。据Github Octoverse年度报告显示平均每个代码库依赖203个依赖包,而这个数量正在呈现逐年上升的趋势,因此单纯的漏洞检测工具不足以支撑企业和开发者的快速迭代和项目演进。云效Codeup支撑了阿里云上数千家企业,我们期望对于开源组件的安全可信程度,为开发者建立一种有效的检测和管理机制,因此我们提供了依赖包漏洞检测服务和依赖包安全问题报表。
在调研中,开发者普遍反映依赖包漏洞修复成本大多高于修复自身编码漏洞,从而不愿意或难于处理此类问题。究其原因,一方面是大部分漏洞并非直接引入,而是依赖的第三方组件又间接依赖了其它组件,另一方面是不确定具体哪个版本是干净可用且兼容的。
为了降低开发者的修复难度,我们对依赖项的引用关系进行了进一步识别分析,清晰的标注出直接依赖和间接依赖,并定位到具体的依赖包引入文件,方便开发者快速找到关键问题位置。同时,Codeup通过对漏洞数据的聚合,智能推荐了修复漏洞的版本升级建议,因为一个依赖可能对应多个漏洞问题,开发者可以针对建议评估是否接受采用。
4. 更多检测
因为云效Codeup支持便捷的对接内置流水线产品 Flow,因此可以基于流水线快速自由的扩展出更多的检测能力,并且可以作为提交代码或合并请求的自动化卡点,将即时检测真实的左移,落地到研发场景中。
参考链接
[1] http://t.tb.cn/0qxIpFV5sRD5uxOcgED7o
[2] http://t.tb.cn/2l96Jh2yqOGowsfs4oVk2m
[3] https://qingkaishi.github.io/public_pdfs/ICSE2020a.pdf