您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

修复来自开源和遗留程序的旧的、不安全的代码的三种方法

时间:2023-11-30 13:16:27  来源:微信公众号  作者:企业网D1Net

发现自己的环境中存在旧的、易受攻击的代码的公司很可能缺乏修复这些代码的资源。大多数公司都会在某一时刻发现自己处于这种情况,无论是因为他们使用的是开源程序还是过时的程序,但公司有一些方法可以应对问题,包括确定优先顺序、自动化和缓解。

旧的、糟糕的代码中存在的问题在企业中随处可见。易受攻击的代码通常是一个问题,根据Veracode今年发布的一份报告,在去年扫描的应用程序中,74%至少有一个安全漏洞,19%有高度严重的漏洞。Veracode的首席研究官Chris Eng说,应用程序越旧,出现问题的可能性就越大。首次扫描新应用程序时,32%的应用程序存在安全漏洞。在五年的时间节点上,这一比例跃升至70%,到一个应用程序使用10年的时候,它有90%的可能性至少有一个安全漏洞。

问题增加的一个原因是应用程序中添加了新的代码,根据Veracode的数据,在前五年,应用程序平均每年增长40%,每一行新代码都增加了出错的可能性,更复杂的代码使发现和修复问题变得更加困难。

组件也是问题的一大部分,Eng告诉记者:“大多数开发人员,当他们下载一个开源组件并将其整合到他们的应用程序中时,永远不会回去更新它。”更准确地说,79%的时间里,旧的开源组件不会更新。随着时间的推移,即使从来没有添加新的代码行,也会不断发现新的漏洞,Eng说,“该应用程序的安全状况变得越来越糟糕。”

根据Synopsys在2月份发布的开源安全和风险分析,所有商业代码库中96%包含开源组件,89%包含过时四年以上的开源代码,这个问题对应用程序安全是很重要,以至于易受攻击的第三方库被OWASP列为Web应用程序安全风险前十名。

表面上看,解决方案似乎很简单:只需用最新版本替换组件即可。当代码库相对较新时,这很容易。Eng说:“如果明天发布补丁,那么做补丁就相当容易了。但如果我徘徊数年,得到多个版本,那么获取最新版本所需的工作量是巨大的。”

随着每一个新的更新,特别是主要的版本,有更多的可能性来改变行为,关键功能可能已弃用,这意味着如果组件更新到最新版本,应用程序作为一个整体可能会停止工作。“当你有几个主要版本之后,肯定会发生崩溃。”Eng说。

当公司发现自己处于这种情况时,最好的做法是首先专注于最关键的问题。

识别并确定构成最高风险的糟糕代码的优先顺序

不同的漏洞可能会对公司产生不同的影响。在某些情况下,特定函数中可能存在安全漏洞,但应用程序不使用该函数,因此使系统不太容易受到该特定漏洞的攻击。还有一个问题是,是否看到了攻击行为,以及正在观察到的攻击活动的类型。

背景也很重要。Synopsys Software Integrity Group的管理顾问亚当·布朗告诉记者:“如果你有一个过时的、非常旧的应用程序,但它部署在一个没有人能访问的安全网络上,那么它的影响就不会那么高了。即使它被归类为超高风险的关键漏洞,如果你花了很多钱来修复它,谁会受益?”

在受监管的行业中,也可能存在与修复代码相关的合规问题,因为任何更改都必须经过审查,这种情况往往发生在金融和卫生领域。对于一些旧的应用程序,更换可能比修复更有意义。布朗说:“有时候,建立一个新的模型,然后慢慢迁移到它上面,比试图修复旧的模型要容易得多。你可能会花时间修复一个严重的漏洞,但最终你应该做的是找出如何重新开发平台。”

Synopsys本月初发布了自己的软件漏洞报告,该报告基于过去三年运行的1.2万项测试,重点是网络和移动应用程序。根据这份报告,92%的应用程序存在漏洞,其中33%属于严重类别。

在确定优先顺序时,公司还需要注意不要被新闻头条所动摇。网络安全供应商Cymulate的董事兼网络安全架构师迈克·德纳波利表示:“公司之间有一种趋势,即根据当前媒体的关注水平来评估迫在眉睫的威胁,而不是实际的风险水平。”Cymulate在今年3月发布了一份跟踪网络安全有效性状况的报告,该报告还强调了公司中存在不安全代码。根据这份报告,与前一年相比,平均风险得分有所恶化。

安全和风险公司HyperProof的IEEE高级成员兼现场CISO Kayne McGladrey表示,确定软件修复的优先顺序的最大问题是,安全控制和业务风险结果之间往往存在脱节,他表示,这加大了获得高管支持的难度,代码维护和依赖项管理不是什么吸引人的话题。McGladrey告诉记者,相反,高管的兴趣往往集中在“停工带来的财务或声誉影响”上。

“为了解决这个问题,公司应该记录并商定与第一方代码和第三方代码相关的业务风险,然后,他们需要确定他们愿意在声誉损害、财务损害或法律审查等领域承担多大风险。在管理层达成共识后,关键系统的企业主应该努力识别和实施控制措施,以降低这些风险。”

一旦一家公司确定了其最优先的问题,下一步就是解决这些问题。不幸的是,这并不总是可行的,公司需要寻找其他措施。

当唯一的答案是缓解

当涉及到旧系统时,可能没有任何人拥有修复代码所需的知识。根据技术服务公司Advanced去年11月发布的一项调查,在使用大型机的公司中,42%的公司表示他们最著名的遗留语言是COBOL,另有37%的公司仍在使用汇编语言。

“别管就业市场了,很难找到像COBOL这样拥有过时编程语言技能的人。”WithSecure的网络安全顾问Paul Brucciani说。

另一个问题是源代码何时丢失。Brucciani告诉记者:“你会惊讶于运行在古老软件上的[许多]公司因为丢失了源代码而无法更新。”

在某些情况下,这些应用程序太重要了,不能碰,因为破坏它们的风险太高,更换它们会造成太大的中断。“并不是所有的遗留代码和应用程序在被发现时都可以删除。在许多情况下,关键业务流程依赖于由遗留系统执行的功能和工作流,“Cymulate的DeNapoli说。

软件漏洞也可能因为时间或资源不足或合规性考虑而无法修复,但如果被利用仍会构成风险。在这些情况下,公司应该在易受攻击的系统周围采取缓解措施,公司将需要使用其他策略,如实施或加强薪酬控制。

零信任架构、网络分段和对身份验证的更多关注有助于降低易受攻击的应用程序被利用的风险。Veracode的Eng说:“把所有东西都放在认证层后面是一种广泛的趋势。不管代码有多旧,这种情况都会发生。”

其他缓解策略包括加密、防火墙、安全自动化和动态数据备份。

自动查找旧代码并创建更安全的代码

针对易受攻击的旧代码问题的最新解决方案涉及人工智能领域的新进展,我们已经有了可以编写新代码的生成性人工智能工具,但供应商也在致力于专门的人工智能,这些人工智能经过专门培训,专门修复漏洞。Eng说:“人工智能可以提出修复建议,然后开发人员可以对其进行一些调整。”

问题是,当公司使用大型、公开的大型语言模型时,这些模型会接受各种培训,包括不好的东西。“正如他们过去常说的,垃圾进了,垃圾出了。不可避免的是,由这些模型生成的代码也将包含漏洞。因此,代码的生成速度会更快,但仍会有错误。“Eng补充道。

Veracode正在基于自己经过审查的代码构建自己的人工智能。“我们生成易受攻击的代码和良好的代码,并针对每一个类别训练模型,”Eng说。“这样我们就可以肯定地知道,发布出来的东西不是随机从某个开发者的Github库中提取出来的。”

Veracode Fix于今年4月发布,据该公司称,该产品可以为JAVA代码中发现的72%的缺陷生成修复程序,这可以极大地加快公司的补救工作。

在某个时候,较大的企业可能会想要构建自己的、定制的人工智能工具。“他们想以他们使用的代码风格生成修复程序。”Eng说。

但这并不意味着企业应该坐等人工智能机构来解决所有问题,他说:“有了大多数公司的大量安全债务,即使你现在只应对最严重的事情,你也不会没有事情可做。”



Tags:代码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  Search: 代码  点击:(12)  评论:(0)  加入收藏
为何大语言模型不会取代码农?
译者 | 布加迪审校 | 重楼生成式人工智能(GenAI)会取代人类程序员吗?恐怕不会。不过,使用GenAI的人类可能会取代程序员。但是如今有这么多的大语言模型(LLM),实际效果不一而足。如...【详细内容】
2024-03-21  Search: 代码  点击:(19)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  Search: 代码  点击:(12)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20  Search: 代码  点击:(19)  评论:(0)  加入收藏
微软AI程序员登场,10倍AI工程师真来了?996自主生成代码,性能超GPT-4 30%
新智元报道编辑:桃子 润【新智元导读】全球首个AI程序员Devin诞生之后,让码农纷纷恐慌。没想到,微软同时也整出了一个AI程序员——AutoDev,能够自主生成、执行代码等...【详细内容】
2024-03-18  Search: 代码  点击:(15)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  Search: 代码  点击:(2)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  Search: 代码  点击:(32)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  Search: 代码  点击:(65)  评论:(0)  加入收藏
C++代码优化攻略
今天我们将深入探讨C++性能优化的世界。在当今软件开发的浪潮中,高性能的代码是必不可少的。无论是开发桌面应用、移动应用,还是嵌入式系统,性能都是关键。1. 选择合适的数据结...【详细内容】
2024-01-26  Search: 代码  点击:(113)  评论:(0)  加入收藏
手把手教你为开源项目贡献代码
背景前段时间无意间看到一篇公众号 招贤令:一起来搞一个新开源项目,作者介绍他想要做一个开源项目:cprobe 用于整合目前市面上散落在各地的 Exporter,统一进行管理。比如我们常...【详细内容】
2024-01-26  Search: 代码  点击:(70)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(5)  评论:(0)  加入收藏
站内最新
站内热门
站内头条