网安加·百家讲坛 | 潘继平:AI赋能DevOps平台:全面提升代码安全性

news2024/10/9 11:50:20

作者简介:潘继平,中国软协项目管理专委会专家,深圳市软件行业协会特聘专家。华为土耳其研究所外聘高级项目顾问,负责华为云应用生态圈产品线研发管理。曾为华为全球技术服务中心、华为制造IT以及华为流程IT解决方案提供等多个部门提供长达8年的顾问服务。也曾任职环信科技华南区项目总监,金蝶国际软件研发工程师。获得斯坦福大学设计思维认证教练、PMI-PMP、PMI-ACP、PRINCE2、NPDP、MSP、P3O等认证。拥有1项国家专利,4项软件著作,具有丰富的项目管理实战经验。

随着DevOps的普及,开发和运维的融合极大地提升了软件交付速度。然而,现在的DevOps一般只是简单使用插件扫描代码,对开发者解决安全问题的帮助还是比较薄弱。AI的引入使得DevOps中的安全能力得到了显著的提升,尤其是在静态代码分析、第三方组件管理、代码结构优化和测试跟踪等领域。以下将详细介绍AI如何增强DevOps在以下方面的代码安全能力

1. 扫描代码漏洞:AI通过识别潜在的安全漏洞并提供修复建议,显著提高代码质量和安全性。

2. 第三方软件安全:AI自动检测第三方库的安全性、合法性和版本,确保使用的外部依赖是安全和合规的。

3. 代码安全:通过分析代码中的潜在问题和漏洞,AI提供了有效的优化建议。

4. 分析代码结构:AI对代码结构进行全面分析,生成模块树并对代码健壮性进行评分。

5. 测试跟踪:AI联动内部测试流程,追踪测试单的关闭情况,提供风险预判和修复建议。

1.扫描代码漏洞

1.1识别漏洞

AI在代码扫描中的应用可以快速识别安全漏洞,这包括常见的安全问题如SQL注入、跨站脚本(XSS)、缓冲区溢出等。传统的静态分析工具依赖规则集,而AI能通过学习大量历史漏洞数据,更智能地识别复杂或隐藏的漏洞。

示例开发团队在其CI/CD管道中集成了AI驱动的静态代码分析工具。某次代码提交时,AI工具检测到开发者使用了不安全的SQL查询拼接,可能导致SQL注入漏洞。

python

# 存在SQL注入漏洞的代码片段

query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "';"

1.2给出解决方案建议

AI不仅能够识别漏洞,还可以提供自动化的修复建议。AI会基于上下文分析代码的意图,提出最合适的修复方式。例如,对于SQL注入,AI工具会建议使用参数化查询来防止漏洞。

修复示例:

python

# 使用参数化查询修复后的代码

cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))

2. 第三方软件安全

2.1检查代码安全

开发团队通常会依赖大量的第三方库,AI可以扫描项目中的所有第三方库,并查找这些库是否存在已知的安全漏洞。通过持续更新的漏洞数据库,AI工具能够迅速识别潜在风险。

示例:项目中引入的旧版本requests库存在已知的安全漏洞,AI工具自动识别并标注出相关漏洞的CVE编号,提醒开发者进行更新。

2.2检查是否合法

AI工具不仅能检测安全问题,还能检查第三方库的许可证是否符合项目或企业的法律合规要求。对于不符合要求的库,AI工具会发出警告。

示例:AI工具扫描代码时发现某个库是GPL许可证的,但企业规定只能使用MIT或Apache许可证的库。AI工具发出警告,提示开发者更换库或重新评估许可证。

2.3检查是否过期

AI工具可以自动跟踪项目中使用的第三方库版本,检查是否存在已过期的库版本。如果库版本过旧,工具会提醒开发者及时升级到最新的安全版本。

示例:AI工具检测到项目使用的Django框架已经有了新的版本,并且该框架的旧版本存在安全风险,工具会提示开发者进行更新。

2.4给出替代方案

当发现某个第三方库存在安全问题或不符合合规性要求时,AI工具会推荐替代方案。例如,推荐更加安全、合规且被广泛使用的库。

示例:如果pycrypto库被检测到存在严重漏洞,AI工具会推荐开发者使用cryptography库作为替代,并提供相关的集成文档和步骤。

2.5检视使用的第三方组件是否符合使用策略

假设公司安全部门要求所使用的第三方组件必须关注量达到1k以上,星级量达到2k以上,并且最近1年内有更新。

AI可以从该第三方组件的官网分析数据,并判断是否符合公司安全部门要求,如果不符合要求则预警,并给出解决方案。

如下图,vosk-api插件由于1年内没有更新发布,所以不满足安全要求,不能使用该插件。

图片

图片

3. 代码安全

3.1识别代码问题

除了检测明显的安全漏洞,AI还可以识别出代码中的性能问题、逻辑错误和不良编码实践。这种智能分析可以帮助开发者发现潜在的问题并在早期进行修复,避免问题进入生产环境。

示例:AI工具检测到某个循环中重复创建对象,虽然不会导致明显的错误,但会对程序性能产生负面影响。

python

# 存在性能问题的代码

for i in range(1000):

    obj = MyClass()

    obj.process()

3.2给出解决方案建议

AI会自动分析性能问题,并提供优化建议。例如,将对象的创建移出循环以提高性能。

优化示例:

python

Copy code

# 优化后的代码

obj = MyClass()

for i in range(1000):

    obj.process()

4. 分析代码结构

4.1生成模块树

AI工具可以分析整个代码库,自动生成模块依赖树。通过这种可视化,开发者能够更好地理解代码的模块化情况及其依赖关系。

示例:开发团队通过AI工具生成的模块树,发现某些模块依赖关系过于复杂,可能影响后续的维护和扩展。

4.2识别代码结构的安全性与健壮性

AI可以通过分析模块耦合度、代码复杂度、依赖性等指标,识别出结构不合理的部分,提示开发者进行重构。这些结构上的问题可能会引发安全隐患或影响系统的健壮性。

示例:原始代码中,系统直接调用外部API,缺乏容错机制。如果外部API发生故障(如超时、服务不可用等),系统会立即失败,可能会影响整体运行。解决方案是通过重构代码,添加接口层、重试机制和熔断策略来增强系统的健壮性。

图片

问题点:

该类直接与外部API耦合,且没有任何容错处理。如果API不可用,程序会立即抛出异常,导致系统崩溃。

改进后的代码(解耦与容错处理)

通过引入接口层、重试机制、熔断机制来增强代码的容错能力。

图片

图片

图片

改进点:

(1)接口层引入:ExternalAPI类负责与外部API的交互,提供了一个统一的接口来处理API请求,降低了业务逻辑与API的耦合度。

(2)重试机制:OrderService类中增加了重试逻辑,如果第一次调用失败,将会在设定的时间间隔后重新尝试,最大重试次数为3次。

(3)熔断与降级策略:如果重试次数耗尽,系统会启用降级处理,例如缓存请求或返回默认的待处理响应,确保系统可以继续工作而不会崩溃。

(4)异常处理:通过自定义ExternalAPIException捕获所有API调用中的异常,更好地管理错误处理。

通过代码的重构,我们减少了系统与外部API的紧耦合,增强了系统的容错性和健壮性。即使外部API出现问题,系统依然可以通过重试和降级策略继续运行,而不会影响用户体验。这种架构模式对于提升分布式系统的可靠性至关重要。

4.3给代码结构评分

AI工具会根据代码的复杂性、可维护性和安全性为代码结构打分,并提供改进建议。这种评分机制能够帮助团队识别哪些模块需要优先优化。

5. 测试跟踪

5.1联动内部测试单关闭情况

AI可以与项目管理工具集成,自动追踪代码提交与测试单的对应情况。如果某个代码提交没有关联对应的测试单,AI工具会提醒测试团队跟进。

示例:开发者提交了一段新的代码,但未关联对应的测试单,AI工具发出警告,提示测试团队检查漏测的部分。

5.2给出风险预判

基于代码的修改范围和历史数据,AI可以预测此次代码修改的风险,并为测试团队提供风险预判,建议对高风险区域进行更多的测试。

示例:AI工具分析发现某个模块的改动可能会影响多个系统组件,因此建议对该模块进行更加深入的回归测试。

5.3给出解决方案建议

如果AI工具检测到特定代码修改存在潜在风险,会提供具体的修复或优化建议。例如,提示开发者增强单元测试覆盖率,或针对特定功能增加更多的自动化测试。

示例:由于对Calculator模块添加了新的除法功能,这一修改可能会引入潜在的风险,例如除以零的错误。为了确保修改的正确性,建议为该模块增加单元测试,覆盖所有可能的用例。

假设Calculator类的代码如下:

图片

使用JUnit编写单元测试代码:

图片

改进建议:

异常处理:考虑在divide方法中添加对除数为零的检查,提供更友好的错误信息。

图片

完善测试覆盖率:通过增加上述改进的测试用例,确保新功能在各种输入情况下都能正常工作,提高代码的可靠性。

图片

通过添加新的测试用例,我们确保了在修改divide方法后,所有可能的情况都得到了充分的测试。这样可以提高代码的健壮性,防止潜在的运行时错误,并提供更清晰的错误信息给调用者。

最后

AI的引入显著增强了DevOps在代码安全方面的能力,从代码漏洞检测到第三方库管理、代码结构分析再到测试流程的智能跟踪,AI工具在每个环节都提供了自动化、安全性和效率的提升。

通过AI驱动的自动化分析和优化建议,开发团队能够快速识别和修复安全隐患,同时提升整体开发效率,尤其最近GPT o1 Preview版本的发布,在逻辑和推理上有了明显的提升。

未来,随着AI技术的进一步发展,其在代码安全中的应用前景将更加广阔,为软件开发和交付提供更强有力的保障。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图书商城|基于springBoot的图书商城管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数…

pgadmin4敏感信息泄露 CVE-2024-9014

0x01 产品描述: pgAdmin是全球最先进的开源数据库Postgres的领先开源管理工具。 pgAdmin 4旨在满足新手和经验丰富的Postgres用户的需求,提供了强大的图形界面,可简化数据库对象的创建,维护和使用。其可以在Linux,Unix…

Python绘制--绘制心形曲线

今天,我们将通过Python代码来绘制一个心形曲线,这是一个经典的数学表达。 一、心形曲线的数学原理 心形曲线,也被称为心脏曲线,是一个代数曲线,可以通过参数方程定义。其数学表达式如下: x16sin⁡3(t)x16…

【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段

文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计…

flatten-maven-plugin统一版本打包失败问题记录

问题: dependencies.dependency.version for xxx:jar is missing. xxx:${revision} 子模块打包不会自动打包依赖的其他包 排查过程: 1:查看flatten-maven-plugin版本是否有冲突,与maven.compiler版本是否有冲突 目前版本&…

成都睿明智科技有限公司怎么样靠谱吗?

随着短视频与直播的深度融合,抖音电商凭借其强大的流量入口、精准的算法推荐以及便捷的购物体验,迅速崛起。对于传统企业和新兴品牌而言,这无疑是一个不可多得的机遇。然而,如何在这片红海中脱颖而出,就需要借助专业的…

u盘部分文件无故消失是怎么回事?5个妙招让其重新出现!

在使用U盘的过程中,我们也会遇上U盘部分文件无故消失的烦恼。防不胜防的数据丢失让我们的生活节奏被扰乱,不免得会心生烦躁与焦虑。但现在已经有很多方法去应对U盘的文件丢失,能够帮助我们找回丢失的重要资料!U盘文件无故消失了怎…

Spring Boot 之 Lombok 使用详解

Lombok 是一个 Java 库,它通过注解自动生成样板代码,例如 getter、setter、构造函数、equals()、hashCode() 等,从而减少代码冗余,提高开发效率。在 Spring Boot 项目中使用 Lombok 可以使代码更加简洁易读。 本文将详细介绍 Lom…

YOLO11改进|注意力机制篇|引入线性注意力机制FLAttention

目录 一、【FLA】注意力机制1.1【FLA】注意力介绍1.2【FLA】核心代码 二、添加【FLA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【FLA】注意力机制 1.1【FLA】注意力介绍 下图是【FLA】的结构图,让我们简单分…

Java并发:同步工具类(信号量,等待完成,阶段同步,Exchanger,Phaser)

1,信号量(Stemaphore) Semaphore也就是信号量,提供了资源数量的并发访问控制,其使用代码很简单,如下所示: // 一开始有5份共享资源。第二个参数表示是否是公平 // 公平锁排队,非公…

人脸识别face-api.js应用简介

前阵子学习了一下face-api.js ,偶有心得,跟大家分享一下。 face-api.js的原始项目是https://github.com/justadudewhohacks/face-api.js ,最后一个release是2020年3月22日的0.22.2版,组件较老,API文档很全,…

AI产品经理面试,背烂这100个问题就稳了

❎传统的产品经理,侧重于用户体验与业务流程的优化,强调“以人为本” ✅而AI产品经理更加注重的,视如何将技术应用在业务问题上 ➡虽然不需要会写代码,但也要深入理解AI模型的运作原理,包括大模型技术(如…

【Linux系统编程】第二十九弹---深入探索Linux文件系统:从磁盘存储到inode结构与文件操作

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、文件系统相关知识 2、磁盘 2.1、理论补充 2.2、看看物理磁盘 2.3、磁盘的存储结构 2.3、对磁盘的存储进行逻辑抽象 3、…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十章 makefile 基本语法(上)

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

头疼来袭?别急,这份自救指南让你秒变“不痛达人”!

在这个快节奏的时代,头疼仿佛成了我们生活中的“不速之客”,时不时就来敲敲门,让人措手不及。无论是工作压力山大、熬夜追剧后的疲惫,还是突如其来的偏头痛,都让人苦不堪言。但别怕,今天就来给大家送上一份…

基于SpringBoot 助农农产品销售平台小程序 【附源码】

基于SpringBoot 助农农产品销售平台小程序 效果如下: 管理员主界面 用户管理界面 农户管理界面 农户主界面 小程序首页界面 农产品详情界面 详情界面 研究背景 随着互联网技术的快速发展和智能手机的普及,传统的农产品销售模式面临着诸多挑战。信息不…

《RabbitMQ篇》交换机基本概览

生产者都是把消息给交换机,由交换机分发给消息队列。 routingKey:路由键,也可称为绑定,是交换机和队列之间的桥梁,交换机会根据routingKey来把消息转发到对应的队列。 Fanout 不处理路由键。你只需要简单的将队列绑定…

【业务场景】最全的购物车设计与实现

前言 博主最近在做一个购物商城,正好设计到购物车模块,于是乎全面的来聊一聊购物车模块实现的一些核心要点吧,很值得反复品味的设计,当需要实现购物车的时候,本文应该拿来就能用。 目录 1.需要解决的核心问题清单 2…

下一代电源管理:Modern Standby与S3睡眠的对比

Modern Standby与S3睡眠的对比 一、引言二、Modern Standby概述三、S3睡眠模式概述四、Modern Standby与S3睡眠的差异五、实际应用和适用场景六、测试Modern Standby的性能6.1、PowerCfg命令行工具6.2、Windows Performance Toolkit 七、总结 一、引言 电源管理在现代计算设备…

Midjourney中文版:解锁你的创意之旅

在创意与技术的交汇点,Midjourney中文版正等待着每一位热爱艺术、渴望表达的灵魂。这不仅仅是一款AI绘画工具,更是一个激发无限灵感、让创意自由翱翔的奇妙平台。 Midjourney AI超强绘画 (原生态系统)用户端:Ai Loadinghttps://w…