我们该怎么和那些不安全的遗留代码打交道?

admin 2023年12月26日21:40:03评论43 views字数 5325阅读17分45秒阅读模式

我们该怎么和那些不安全的遗留代码打交道?

在当下的互联网环境中,网络不法者的恶意侵入已经变得越来越频繁,各行各业的组织都该对此提高警惕,稍一不慎,就有可能让自己处在危险的境地。国外安全专家为此总结,企业可能存在各种疏忽,以至于黑客们能有机可乘,比如弱密码、未及时更新软件和补丁、安全意识缺乏、不安全的远程访问、不合理的权限分配,以及日志记录缺乏监控等,这些都有可能进一步扩大了企业的安全风险。

其中,组织系统环境里所存在旧的、易受攻击的代码也是祸患之一,许多组织甚至缺乏修复这些代码的资源。Veracode的首席研究官Chris Eng对此表示,大多数组织都会在某个时刻突然发现这种情况,比如他们为了某个业务目标,而不得不使用老旧的开源程序时。但还是有部分公司会用一些策略控制问题,像优先级、自动化之类的缓解措施。

由此可见,组织的安全战略规划里,修复遗留程序中不安全的代码应该被更多的关注,国内外安全专家都认为这是必要的措施。

我们该怎么和那些不安全的遗留代码打交道?

我们该怎么和那些不安全的遗留代码打交道?
01
国外相关报告

根据Veracode今年早些时候发布的一份报告显示,旧的、坏的代码问题在企业中无处不在。Eng说:“漏洞代码通常是一个严重的问题。2022年,74%的应用扫描程序至少有一个安全漏洞,19%的应用程序存在高严重性漏洞。显然,应用程序越旧,就越有可能出现问题。比如,第一次扫描某个新的应用程序时,其存在安全缺陷的概率为32%,五年后再次扫描,这一比例会跃升至70%,到此应用程序使用至10年后,它至少会有一个安全漏洞的可能性为90%。”

根据Veracode的分析,漏洞概率会不断上升的原因是,许多开发人员会向应用程序添加新代码。比如这五年来,应用程序内新代码平均每年的增长率为40%,而这每一行新代码都会增加漏洞的可能性,更不要说其中一些复杂的代码,还会使得发现和修复问题变得越发困难。

Eng表示:“另一方面,组件也是问题之一。大多数开发人员在下载一个开源组件并将其纳入应用程序后,他们就不管不顾了,这也就意味着开发人员永远不会去更新这些组件。因此从数据来看,市场上大概79%的旧开源组件不曾被更新过。所以,随着时间的推移,新的漏洞会不断被发现,即使从未添加新的代码行,该应用程序的安全状况也会变得越来越差。”

根据Synopsys在2月份发布的开源安全和风险分析,96%的商业代码库包含开源组件,89%的代码库包含过期四年以上的开源代码。该问题大大影响了应用程序的安全性,因此在OWASP的十大web应用程序安全风险列表中,易受攻击的第三方库始终名列前茅。

Eng表示,针对此类问题的解决方案,从表面上来看确实很简单,只需将组件更换为最新版本即可。“但这是在代码库相对较新的情况下,确实不难,比如明天就发布一个补丁,我们到时照做就行。而如果我们好几年没做过更新,已经落后了好几个版本了,那要怎么办?显然,获得最新版本所需的工作量将是巨大的。”

随着每一次更新,尤其是主要版本的更新,内核发生变化的可能性就会增加,很多关键功能可能都已弃用,这也就意味着,如果组件更新到了最新版本,整个应用程序还可能面临“罢工”的情况。Eng说:“当组织的关键组件落后几个版本时,肯定会出现各种破损问题。所以,组织如果发现自己正处于这种情况,最好的做法是先关注其中最关键的那些问题。”

我们该怎么和那些不安全的遗留代码打交道?
02
识别风险最高的代码并确定其优先级

Synopsys Software Integrity Group的管理顾问Adam Brown对此表示,不同的漏洞可能会对组织产生不同的影响。在某些情况下,某个特定函数可能存在安全漏洞,但应用程序并没有使用该函数,因此系统就不太容易受到该特定漏洞的攻击。

“还有一个问题是,组织是否在其他地方看到过类似的攻击行为,也就是所谓的实时攻防背景很重要。举个例子,如果组织有一个过时的、非常旧的应用程序,但它被部署在一个没有人可以访问的安全网络上,那么它的影响就没有那么大,即使它被归类为超高风险的关键漏洞,只要没人能够触碰到,又有什么威胁可言?组织当然就没必要花钱去修复它了。”

此外,Brown还指出,在受监管的行业中,由于任何更改都必须经过审查,因此也可能存在与修改代码相关的合规问题,比如在金融和卫生部门就常会遇到这样的情况。“所以对于一些旧的应用程序来说,更换可能更有意义。组织可以建立一个新模型,然后慢慢迁移、更换,这比修复旧模型要容易得多。也就是说,组织可以花时间去修复一个关键漏洞,但最终组织应该做的是‘弄清楚如何重新搭建平台’。”

Synopsys在本月早些时候发布了自己的软件漏洞报告,该报告基于过去三年中所进行的12000次测试,其重点关注了网络和移动应用程序。根据该报告,92%的应用程序存在漏洞,其中33%属于严重漏洞。

网络安全供应商Cymulate的网络安全架构师Mike DeNapoli表示,在进行优先级排序时,公司也需要小心,不要被新闻标题所迷惑。“各组织倾向于将媒体对事件的关注度作为衡量威胁的标准,而不是用实际风险水平来评估。”Cymulate在今年3月发布了一份关于网络安全有效性状况的报告,该报告同样强调了组织中存在各种不安全的代码。根据该报告,平均风险评分与前一年相比有所恶化。

安全与风险公司Hyperproof的IEEE高级成员 Kayne McGladrey表示,对软件修复来说,其最大的问题在于,安全控制和业务风险结果之间往往存在脱节,这也就使得获得高管的支持变得更加困难。“因为代码维护和组件依赖关系管理并不是什么热门话题,高管往往对‘停机可能会给财务或声誉带来多大损失’更感兴趣。”

我们该怎么和那些不安全的遗留代码打交道?

为了解决这个问题,McGladrey认为,组织应该关注与客户或与第三方代码相关的业务风险,同时确定组织在声誉损害、财务损害或法律审查等多个领域,愿意接受多大的风险。以这些为基础,在高管层达成共识后,关键系统的实际控制人应该努力识别并减少相关风险的可能性。

McGladrey说:“一旦一家公司确定了优先级的问题,下一步就是解决这些问题。然而,不幸的是,这并不像说的那样简单,组织需要考虑其他相关措施。”

我们该怎么和那些不安全的遗留代码打交道?
03
唯一的答案是缓解

当涉及到旧系统时,可能没有人具备修复代码所需的知识。根据技术服务公司Advanced去年11月发布的一项调查,42%使用大型机的公司表示,他们之中最突出的问题是“遗留语言为COBOL”,另有37%的公司仍在使用Assembler。

WithSecure的网络安全顾问Paul Brucciani对此表示:“在就业市场,很难找到会用COBOL这样过时编程语言的人才。当然,还有一个问题是,很多组织都不知道源代码是何时丢失的。你会惊奇的发现,很多组织将系统运行在古老的软件上,就因为它们丢失了源代码而无法更新。”

在某些情况下,应用程序是即贵重又脆弱的,很多组织根本不敢触碰,因为损坏它们的风险太高,更换它们会造成太多的干扰。DeNapoli表示:“并非所有遗留代码都可以被删除,很多时候,关键业务流程会依赖于遗留系统的功能和工作流。因此,时间或资源不足也好,出于合规考虑也罢,很多软件漏洞可能永远也无法修复,但一旦被利用,仍然会带来风险。在这种情况下,组织应围绕易受攻击的系统采取缓解措施,同时也需要使用其他策略,比如实施或加强补偿控制等。”

Eng指出,零信任体系、网络分段以及对身份验证的许多措施,可以帮助降低应用程序被利用的风险。“当下有一种趋势,就是把所有东西都放在身份验证层后面,这样不管代码有多旧,都能起到一定的防护作用。其他还有一些缓解策略,比如加密、防火墙、安全自动化和动态数据备份等。”

我们该怎么和那些不安全的遗留代码打交道?
04
自动查找旧代码并创建更安全的代码

除此之外,Eng还提出了,针对旧代码问题,目前最新的解决方案还涉及到了人工智能。“我们已经有了可以编写新代码的生成式人工智能,供应商也在开发能修复漏洞的人工智能工具。从实际操作来看,人工智能可以提出解决方案,然后开发者可以对其进行调整。”

而其中比较严重的问题是,当公司使用大型公共语言模型时,这些模型会被灌输各方面的内容,包括漏洞和错误代码。如此一来,代码虽然能够更快地生成,但漏洞一样会水涨船高,这就好像恶性循环,人类永远会在道高一尺的地方魔高一丈。

Eng说:“Veracode正在构建自己的人工智能,其基于已经经过审查的代码,这样就能分辨清易受攻击的代码和良好的代码,并能在其每一个类别上训练模型。可以肯定的是,发布的内容并不是从某个随机开发人员的Github存储库中提取的。”

Veracode Fix于今年4月推出,据该公司称,该产品可以修复Java代码中72%的缺陷,这可以大大加快了公司在应用程序上的修复工作。Eng表示,大型企业确实需要构建自己的人工智能工具,他们应该按照自己使用代码的风格生成修复程序。“但这并不意味人工智能可以解决所有问题。和一直以来的安全观念保持一致,没有绝对的安全,因此就没有绝对安全的方案和工具。”

我们该怎么和那些不安全的遗留代码打交道?

我们该怎么和那些不安全的遗留代码打交道?
05
国内安全专家的建议

对于遗留程序中不安全的代码会带来哪些影响, 以及企业该如何应对,国内安全专家如此建议。

知乎相关专家“蜗牛”表示,企业遗留程序中不安全的代码可能会带来多方面的影响。首先,不安全的代码可能会导致程序容易受到攻击,如被黑客利用来获取不当利益、破坏数据或者干扰程序的正常运行。其次,不安全的代码可能会引发各种安全问题,如身份验证和授权问题、数据完整性和机密性、访问控制等。这些问题可能导致未经授权的用户访问敏感数据或执行恶意操作,从而给企业带来损失。

“蜗牛”指出,处理企业遗留程序中不安全的代码需要采取一系列措施,包括以下几个方面:

1、代码审计和安全性评估:首先,企业需要对现有的遗留代码进行全面的代码审计和安全性评估。这可以通过专业的安全团队或第三方安全公司来完成,对代码进行深入的分析和评估,找出潜在的安全漏洞和问题。

2、风险评估和优先级排序:根据代码审计和安全性评估的结果,企业需要评估每个安全漏洞的风险程度,并根据严重性和影响范围进行优先级排序。这有助于企业确定哪些漏洞需要优先修复,以及修复的先后顺序。

3、制定修复计划和实施方案:根据风险评估的结果,企业需要制定一份详细的修复计划和实施方案。这包括确定修复的目标、时间表、人员和所需资源,以及具体的实施步骤和测试计划。

4、修复和更新代码:根据修复计划和实施方案,企业需要着手修复不安全的代码。这可能涉及到修改程序逻辑、更新库和组件、添加安全措施等。在修复过程中,企业需要确保新的代码能够与现有系统兼容,并且不会引入新的安全漏洞。

5、安全测试和验证:在修复不安全的代码后,企业需要进行全面的安全测试和验证。这包括单元测试、集成测试、系统测试等,以确保新代码的正确性和安全性。同时,企业还需要进行漏洞扫描和渗透测试,以发现并解决可能存在的其他安全问题。

6、持续监控和维护:在完成代码修复后,企业需要持续监控和维护系统的安全性。这包括定期进行安全巡检、更新系统和软件、实施安全补丁等。此外,企业还需要定期进行安全培训和技术交流,提高开发人员和管理员的安全意识和技能。

西卡(上海)安全负责人童元表示,从运维角度来看,企业遗留程序中不安全的代码会带来很大的不确定性,如果程序出现了异常,或者由于打补丁、演练、迁移等原因,可能会使系统恢复不起来。而从信息安全的角度来看,不安全的代码会带来更大的安全隐患,比如后门和0day等,可能会被攻击者利用,甚至已经被利用了组织也无法知晓。此外,对于系统加固或迭代来说也是很大的问题,这是由于不安全的代码也存在不规范的问题,所以会让后续接手的程序员无从下手。

童元认为,对于这样不安全的代码,组织可以从三方面入手:

1、开发流程增加安全岗位,把控各环节代码质量,推行安全标准;

2、做好代码安全审计,使用代码审计工具,剔除具有普遍性的代码安全问题;

3、做好安全开发培训。一是能力,二是意识,培训从这两方面入手,并配合一定的绩效激励制度。

某证券公司信息安全负责人丁安安表示,不安全的代码会给系统带来入侵风险和稳定问题。一方面,不安全的代码可能包含易受攻击的漏洞,攻击者可以利用这些漏洞获取未授权的数据访问权,甚至控制系统;另一方面,不安全的代码可能导致程序在执行过程中产生异常行为,影响系统的稳定性,甚至造成服务中断。

丁安安指出,组织首先需要认识到的一点是,代码或者程序是人写的,人写的就没有办法100%保证安全,今天认为安全的程序可能明天就会发现新的问题。因此安全部门应该持续跟进应用程序的安全问题,从开发的左移到上线后的右移,需要在其整个生命周期中持续跟进安全机制。“左移从应用的需求设计、架构规划、到上线,安全应该持续参与,包括且不限于经验评审、扫描和白盒/灰盒/黑盒测试等活动,上线后也需要持续进行攻击面管理,如常态化的渗透测试、攻击面的扫描和验证和定期的攻防演练等,持续发现问题,解决问题。”

原文地址:
https://www.csoonline.com/article/1249162/3-ways-to-fix-old-unsafe-code.html

作者:

我们该怎么和那些不安全的遗留代码打交道?

Maria Korolov

科技记者

END

原文始发于微信公众号(安在):我们该怎么和那些不安全的遗留代码打交道?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月26日21:40:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   我们该怎么和那些不安全的遗留代码打交道?http://cn-sec.com/archives/2338059.html

发表评论

匿名网友 填写信息