主页 > 安卓怎么下载imtoken钱包 > 避免开源代码漏洞的 4 个最佳实践

避免开源代码漏洞的 4 个最佳实践

安卓怎么下载imtoken钱包 2023-03-20 07:01:23

公共存储库中的开源代码可能包含恶意软件或无意中的漏洞。 以下是如何最好地发现和缓解潜在问题。

今年对确保开源生态系统的完整性和安全性提出了更大的挑战。 开源为开发人员带来了巨大的好处,因为几乎任何人都可以免费使用、定制和为社区做贡献。 这种方法可确保更高的透明度、安全性并促进开发人员跨项目协作,也为对手从中获利铺平了道路。

作为一名安全研究员,今年我遇到并分析了 700 多个 RubyGems 软件包,这些软件包被植入并仅用于挖掘比特币。 另一个流行的例子是 Octopus Scanner,这是一种恶意软件,它已经悄悄地将触角伸入了至少 26 个 GitHub 项目。 这些事件强调了一个事实,即任何向公众开放的系统也对对手开放并且容易被滥用。

上述示例主要针对恶意组件。 带有未被注意的安全漏洞的合法开源软件包又如何呢?

易受攻击或恶意的软件包会进入流行的存储库,最终您的软件供应链会对您的客户造成严重破坏。 已在流行的开源存储库(例如 npm、PyPI、NuGet 和 Fedora)中检测到易受攻击的恶意组件。

“在过去的几年里,我们看到了整个生态系统中开源包中发现的所有漏洞,传统上,Node.js 和 Java 每年都会显示出最多的新漏洞,”Snyk 开源安全报告 2020 作者说。

该报告还表明,在软件开发过程的早期实施的安全措施是 2019 年报告的新漏洞数量少于 2018 年的原因。软件开始得到回报,”报告继续说道。

以下是提高开源代码安全性的一些最佳实践。

1. 了解你的软件

Sonatype 的 2020 年 DevSecOps 社区调查显示,大多数公司——即使是那些在其工作流程中内置了某种程度的 DevSps 实践的公司——都缺乏其软件应用程序使用的所有开源组件和应用程序。 全面了解他们的弱点。

“当在开源项目中发现漏洞时,您应该立即提出两个问题:我们是否使用过该开源组件,以及(如果使用过)它在哪里?” 该报告的作者说。

根据 Sonatype 对 5,000 多名开发人员的调查,只有 45% 的组织拥有成熟的 DevOps 实践,为其应用程序维护完整的软件物料清单 (SBOM)。 “调查结果表明,多达 74% 的‘不成熟做法’组织无法知道开源组件中新披露的漏洞是否适用于他们的软件,”报告称。 这意味着完整 SBOM 实践不成熟的组织将无法知道他们是否正在使用易受攻击的开源代码,或者在他们的环境中哪里可以找到新发布的漏洞。

鉴于每天在 NVD、GitHub 和其他托管网站上发布的大量漏洞比特币开源代码网站,如果没有一些自动化解决方案比特币开源代码网站,开发人员和安全专家将很难跟上数据。 历史表明,大多数组织会等到安全事件发生后才加强其安全措施。 然而,俗话说,一分预防胜于一分治疗。

通过在软件开发生命周期中采用“左移”方法,早期实施的安全性可以获得十倍的回报并提高开发人员的整体意识。

2.解决依赖问题

Veracode 的 2020 年软件安全状况报告强调了一个常见的软件安全问题。 与开发人员本身不同,“相互关联的依赖关系”间接地给应用程序带来了大多数开发人员可能没有注意到的潜在风险。 “我们的数据显示,大多数有缺陷的库会间接变成代码。应用程序中 47% 的有缺陷的库是可传递的——换句话说,它们不是由开发人员直接引入的,而是由库引入的(42% 直接引入,12% 两者兼有)。这意味着开发人员正在引入比他们预期更多的代码,通常是有缺陷的代码。”

然而,根据 Veracode 的说法,纠正这个问题似乎并不是一项重大任务:“修复这些库中的安全漏洞通常不是一项重大工作。应用程序中库引入的大多数缺陷(近 75%)都可以可以通过次要版本更新来解决。通常不需要主要库升级!该数据表明问题在于发现和跟踪,而不是大量代码重构。”

3. 自动扫描未知代码

八达通扫描事件和其他形式的开源生态系统滥用行为(例如域名仿冒)促使 GitHub 等库维护者强制对他们托管的开源项目进行自动扫描。 正如今年报道的那样,GitHub 现在已经集成了基于 CodeQL 的开源存储库的自动扫描。

GitHub 高级产品经理 Justin Hutchings 告诉 Register 网站,“事实证明,这种能力在安全方面非常有用。大多数安全问题只是错误的数据流或错误的数据使用。”

除了识别隐藏的漏洞和错误之外,还可以定期扫描开源项目以查找数据泄漏的迹象,例如贡献者无意中暴露的私钥和凭据。 自去年以来,一些供应商已将自动扫描集成到他们的产品中,以识别发布到合法开源存储库的恶意软件。 这些技术将行为分析与机器学习相结合,以主动寻找“假冒零件”。

还有独立开发人员小规模发布的实验性开源扫描程序 (npm-scan),可以使用启发式方法检测易受攻击的组件。

在组件进入供应链之前使用自动化工具实施如此广泛的安全审计有助于增加开源生态系统中的信任和完整性问题。

4. 提防许可风险

使用开源软件的一个主要好处是其许可证提供的自由。 如果您发现开源包中的错误尚未修复,您可以选择自己修复它,而不是等待供应商。 您可以根据项目的需要定制开源应用程序,并将定制版本交付给客户。

但是,了解使用开源组件可能引起的任何潜在许可冲突可能需要更多技巧。 Synopsys 发布的 2020 年开源安全与风险分析报告指出:

当代码库包含其许可可能与代码库的整体许可冲突的开源组件时,就会出现已声明的许可冲突。 例如,GNU General Public License v2.0 (GPLv2) 下的代码在编译成正常分发的商业软件时经常会出现冲突问题。 但对于被视为软件即服务 (SaaS) 的软件,相同的代码并不是什么大问题。 “

这些相互冲突的术语可能会让在不同上下文中使用相同开源应用程序的开发人员感到困惑。 除了漏洞和恶意组件之外,一些自动化解决方案还可以识别大量许可证及其导致的潜在冲突。

Black Duck 的一份报告发现,2019 年审计的代码库中有 67% 包含存在许可证冲突的组件。 对于某些行业,例如互联网和移动应用程序,该百分比要高得多 (93%)。 “GPL 是比较流行的开源许可证之一,它的各种版本也可能与代码库中的其他代码产生许可证冲突。事实上,前 10 个冲突许可证中有 5 个是 GPL 及其变体,”报告称说。