带你读《代码管理实践10讲》——七、3类代码安全风险如何避免?

简介: 带你读《代码管理实践10讲》——七、3类代码安全风险如何避免?

随着计算机技术在各行各业广泛而深入的应用,软件规模和调用链路逐渐复杂,潜在的代码安全问题和风险也日益增多。近几年安全漏洞频发,诸多知名软件被发现存在远程代码执行、隐私数据泄露、SQL注入等安全漏洞问题,造成企业资产损失。

 

面对越来越复杂的安全场景和安全漏洞可能会带来的巨大损失,如何识别和管理潜在安全风险成了企业管理者和产研人员的一个不可忽视的问题。

 

在日常研发过程中,安全类问题往往隐藏在缺乏安全意识的编码逻辑和未检查的开源依赖组件中,难以在功能性测试和代码评审中被及时察觉。

 

云效Codeup为开发者提供了丰富的代码安全检测服务:

 

image.png  

企业管理者可以通过「源码漏洞检测」和「敏感信息检测」识别源码编程中的策略漏洞和隐私泄露问题,通过「依赖包漏洞检测」为每次代码变更引入的三方依赖软件包进行充分的安全检查,并在企业级安全中心和代码库安全页面进行风险数字化管理。除了云效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%左右。对于复杂且体量庞大的分析项目来说,源伞检测引擎所表现的扫描效率和误报率在业内也处于领先水平。

image.png  

云效Codeup源码漏洞检测集成了源伞检测引擎的安全分析能力,能够在分析精度、速度、深度等方面均衡得到较好的分析结果,开发者可在云效Codeup代码库安全页面直接创建源码漏洞检测流水线,无需人工干预,自动寻找软件的编码安全漏洞。

 

综合来说,Codeup源码漏洞检测具备的核心优势:

 

∙        支持分析字节码,二三方包的代码逻辑都不会遗漏;

∙        擅长跨函数长调用链路的逻辑分析,即将推出跨微服务的代码分析技术;

∙        可以处理引用、指针等带来的间接数据修改;

∙        精度高,相比于同类工具,如ClangInfer,在精度和有效问题识别上表现更佳;

∙        性能好,目前单应用平均5分钟左右分析完毕;

image.png  

源伞检测引擎可以精确的追踪代码中的数据流向,拥有高深度高精度的函数调用链分析能力,可以找到跨越多层函数的深度问题。在发现缺陷的同时还能给出问题触发的过程,完整展示相关的控制流以及数据流,这样可以辅助开发者快速理解和修复问题,在软件开发早期更低成本地提高软件质量,大幅减少生产成本,提高研发效能。

 

2. 敏感信息检测

近年来,业内发生多起敏感信息(API KeyDatabase credentialOAuth token 等)通过某些站点被无意识地泄露出去的事件,给企业带来了安全风险,甚至直接的经济损失。开发者和企业管理者亟需一款稳定健全的敏感信息检测方法和系统。

 

通过调研我们了解到,目前已有的敏感信息检测工具大多单纯使用规则匹配或信息熵技术,导致其召回率或准确率难以满足预期。因此我们在规则匹配和信息熵技术的基础上,结合上下文语义,提出了一款采用多层检测模型的敏感信息检测工具——SecretRadar

 

image.png  

SecretRadar的技术实现思路主要分为三层,第一层采用规则匹配这种传统敏感信息识别技术,规则匹配具有良好的准确度和扩展性,但是非常依赖比较固化的长度、前缀、变量名,难以应对不同开发者的不同编码风格,容易造成漏报。针对难以固定规则捕捉的场景,在第二层我们采用了信息熵算法。

 

信息熵算法用于衡量代码行混乱程度,对随机生成型密钥和随机身份信息识别效果良好。但信息熵算法也有其局限性,召回率提升的同时误报也增多了。因此在第三层我们采用了模板聚类和上下文语义分析等方法进行过滤优化,针对信息熵结果聚合提取常见关键字,结合上下文语义和当前语法结构提升模型准确率。

3. 依赖包漏洞检测

在编码问题以外,根据Synopsys 2020开源安全报告显示,99%以上的组织使用了开源技术。使用开源组件本身带来的技术交流和站在巨人肩膀上协作、降低开发成本、加快迭代周期、提高软件质量等优势已经是业内共识了。但是,开源软件带来一系列便利的同时,也暗藏大量安全风险。

 

据审计,75%的代码库存在安全漏洞,其中49%包含高危漏洞;另外,82%的代码库仍在使用超过4年以上的outdated组件。据Github Octoverse年度报告显示平均每个代码库依赖203个依赖包,而这个数量正在呈现逐年上升的趋势,因此单纯的漏洞检测工具不足以支撑企业和开发者的快速迭代和项目演进。云效Codeup支撑了阿里云上数千家企业,我们期望对于开源组件的安全可信程度,为开发者建立一种有效的检测和管理机制,因此我们提供了依赖包漏洞检测服务和依赖包安全问题报表。

 

image.png  

在调研中,开发者普遍反映依赖包漏洞修复成本大多高于修复自身编码漏洞,从而不愿意或难于处理此类问题。究其原因,一方面是大部分漏洞并非直接引入,而是依赖的第三方组件又间接依赖了其它组件,另一方面是不确定具体哪个版本是干净可用且兼容的。

 

为了降低开发者的修复难度,我们对依赖项的引用关系进行了进一步识别分析,清晰的标注出直接依赖和间接依赖,并定位到具体的依赖包引入文件,方便开发者快速找到关键问题位置。同时,Codeup通过对漏洞数据的聚合,智能推荐了修复漏洞的版本升级建议,因为一个依赖可能对应多个漏洞问题,开发者可以针对建议评估是否接受采用。

 

 

 

4. 更多检测

因为云效Codeup支持便捷的对接内置流水线产品 Flow,因此可以基于流水线快速自由的扩展出更多的检测能力,并且可以作为提交代码或合并请求的自动化卡点,将即时检测真实的左移,落地到研发场景中。

 

image.png  

参考链接

[1] http://t.tb.cn/0qxIpFV5sRD5uxOcgED7o

[2] http://t.tb.cn/2l96Jh2yqOGowsfs4oVk2m

[3] https://qingkaishi.github.io/public_pdfs/ICSE2020a.pdf

[4] https://qingkaishi.github.io/public_pdfs/ICSE2020b.pdf

[5] http://t.tb.cn/58wnVUjCi6Lq0UeMHnzn4T

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
1月前
|
安全 开发工具 数据安全/隐私保护
代码管理记录(一): 码云Gitee代码提交和维护
本文介绍了Gitee平台,提供了代码托管服务,并详细说明了从新建仓库到代码提交的步骤。
59 1
代码管理记录(一): 码云Gitee代码提交和维护
|
1月前
|
开发工具 git Python
代码管理记录(二):Github代码上传实操
本文是关于如何使用Git将本地代码上传到GitHub的实操指南。介绍了Git的基本概念、安装方法,并通过详细的步骤指导用户从GitHub创建仓库到使用Git命令初始化、添加、提交代码,最终将代码推送到远程仓库。同时,还汇总了一些常见的错误及其解决方法。
36 2
代码管理记录(二):Github代码上传实操
|
6月前
|
Kubernetes 开发工具 git
带你读《代码管理实践10讲》——一、量体裁衣,寻找适合你团队的代码协同模式(1)
带你读《代码管理实践10讲》——一、量体裁衣,寻找适合你团队的代码协同模式(1)
131 2
|
6月前
|
Linux 网络安全 开发工具
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
143 0
|
6月前
|
持续交付 开发工具 Android开发
带你读《代码管理实践10讲》——一、量体裁衣,寻找适合你团队的代码协同模式(2)
带你读《代码管理实践10讲》——一、量体裁衣,寻找适合你团队的代码协同模式(2)
117 0
|
6月前
|
存储 运维 监控
带你读《代码管理实践10讲》——九、打通源码!高效定位代码问题
带你读《代码管理实践10讲》——九、打通源码!高效定位代码问题
83 0
|
6月前
|
Java Serverless Maven
云效代码管理问题之代码仓库配置需要评审如何解决
云效仓库是阿里云提供的代码托管和版本控制服务,支持Git等多种版本管理工具;本合集聚焦于云效仓库的使用技巧、团队协作流程以及常见问题解答,旨在帮助开发者更高效地进行代码管理和协作开发。
1842 0
STM32框架式代码管理LED代码的讲解
STM32框架式代码管理LED代码的讲解
157 0
代码管理学:代码分堆
代码管理学:代码分堆
1851 0
|
程序员
开发新概念:代码管理(代码框架)
开发新概念:代码管理(代码框架)
153 0