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

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

本文来自 企业网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说。

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

相关文章
|
2月前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
2月前
自动检查以确保依赖项始终与使用的electron版本相匹配的小技巧
自动检查以确保依赖项始终与使用的electron版本相匹配的小技巧
31 0
|
9天前
artts升级版本后常见的编译错误(定期更新......)
artts升级版本后常见的编译错误(定期更新......)
5 0
|
8月前
|
SQL 关系型数据库 数据库
记一次程序 Bug 导致数据删除的恢复过程
使用RDS、DMS进行数据恢复实践
964 0
|
缓存 小程序 API
小程序:浅谈小程序更新机制,发版后多久能全覆盖
小程序:浅谈小程序更新机制,发版后多久能全覆盖
305 0
|
NoSQL 关系型数据库 MySQL
一日一技:如何正确为历史遗留代码补充单元测试?
一日一技:如何正确为历史遗留代码补充单元测试?
82 0
|
C# 容器
旧项目集成
旧项目集成
117 0
旧项目集成
|
API C# 图形学
Unity 关于低版本是否可以引用高版本构建内容的可行性验证
本篇内容以Unity的一个相对较低的版本(2017.4.40)和一个相对较高的版本(2020.3.33),来验证在低版本中是否可以使用高版本中构建的内容。
241 1
Unity 关于低版本是否可以引用高版本构建内容的可行性验证
|
存储 安全
这个工具可以清除软件代码项目中的硬编码密钥
本文讲的是这个工具可以清除软件代码项目中的硬编码密钥,Truffle Hog可以在源代码存储库内找到20个字符或以上的访问令牌和密钥
1632 0
|
关系型数据库 数据库
重构老系统遗留代码的一些方法学习笔记
重构老系统遗留代码的一些方法学习笔记
119 0
重构老系统遗留代码的一些方法学习笔记

热门文章

最新文章