了解NPM安全性[深入研究]

Node Package Manager(缩写为NPM)是Node.js生态系统中软件包的主要注册中心,并且已成为技术领域中最大的软件包注册中心之一。

它为JavaScript开发人员提供了很多选择,可以在软件开发过程中完成特定任务,并使开发人员可以专注于真正重要的事情,即应用程序逻辑的开发。 因此,软件团队可以轻松快速地移动并在短时间内完成更多工作

了解NPM安全性[深入研究]_第1张图片



NPM软件包可通过Web轻松获得。 因此,搜索软件包以完成特定任务变得轻而易举,因为简单的Google搜索会返回几个可以执行所需任务的软件包。

了解NPM安全性[深入研究]_第2张图片

但是,在处理NPM软件包时,出于安全意识的考虑是合宜的,因为它们已成为来自恶意实体的攻击媒介的目标。 这些攻击媒介一旦进入组织的生产系统,可能会造成重大破坏。

NPM软件包中的安全性

NPM注册表公司和CLI工具背后的公司npm Inc.拥有一个专门的安全团队,所有软件包在发布到NPM注册表之前,都要经过这些团队。 团队拥有一个 定义明确的指南 ,指导其安全实践,以确保只有安全的程序包可供公众使用。

NPM Inc.安全副总裁Adam Baldwin在他的演讲中 与采访 Daily Swig说:“在内部,我们有工具可以查看软件包的发布位置以及动态和静态分析,以试图了解软件包的意图以及是否存在异常”。

他还谈到了NPM的机器学习支持的API,该API可帮助处理与垃圾邮件相关的软件包和维护者。

NPM Inc.团队使用的这些严格实践和创新工具使Node.js开发团队和个人可以使用NPM软件包,而不必担心安全性。

但是,由于网络犯罪分子总是想出新的方法来打破安全防御措施,因此可能需要采取进一步措施来确保团队或个人生产的产品不存在来自第三方的安全漏洞。

常见的NPM安全漏洞及其修复方法

NPM安全团队会不断努力发现NPM软件包中的安全漏洞,并在检测到漏洞时通知软件包发布者。 一些常见的NPM软件漏洞包括:

原型污染

这涉及到数据污染对象原型,从而导致奇怪的代码行为。 恶意实体可能会借此绕过验证规则,以强制执行访问权限,如 5.1.2之前的@ commercial / subtext版本

正如在此所见 StackOverflow的答案 ,分发通过进程间API进行通信的已编译可执行文件以及通过服务公开库可能是完全保护代码免受原型污染的唯一方法。

拒绝服务
根据 维基百科

拒绝服务攻击(DoS攻击)是一种网络攻击,在这种攻击中,犯罪者试图通过临时或无限期地破坏连接到Internet的主机的服务,使其计算机或网络资源无法供其预期的用户使用。

当某个函数引发错误时,NPM软件包中可能会出现拒绝服务安全漏洞,如果该错误未得到处理,则可能为攻击者提供机会发起攻击,该攻击会复制未处理的错误情况以关闭软件包在代码库中提供的服务。

观察到 @ hapi / hapi在18.4.1或19.1.1之前的版本3.1.2或5.0.1之前的@ hapi / ammo版本 ,以及其他几个NPM软件包。

跨站脚本
如描述 维基百科

跨站点脚本(XSS)是一种通常在Web应用程序中发现的计算机安全漏洞。 XSS使攻击者能够将客户端脚本注入其他用户查看的网页中。 攻击者可能会使用跨站点脚本漏洞来绕过诸如同源策略之类的访问控制。


跨站点脚本在NPM软件包中非常普遍,因为它在 NPM安全咨询 。 这样的例子包括 0.3.8之前的@ hapi / boom 版本, 0.20.8之前 的node-red版本等。

NPM软件包中的XSS漏洞有多种,从未能正确逃避错误消息到对页面元素和属性的不正确处理。

通过过滤用户输入以确保仅允许有效输入,在HTTP响应的输出中对用户可控制的数据进行编码,使用适当的HTTP标头并实施内容安全策略(CSP)来减轻XSS的漏洞,可以防止XSS漏洞未来的漏洞。


命令注入
如果在发布包之前未正确清理包中函数的参数,就会发生这种情况。

如果此值是由用户控制的输入提供的,则可能允许攻击者的手工艺命令注入到系统中,这可能导致有害的代码行为。 这可以在 3.0.1之前的hot-formula-parser版本

可以通过验证不受信任的输入,中和操作系统命令行中含义的元字符以及在必要时实现权限级别来防止命令注入。
不管NPM漏洞如何,软件开发人员都可以通过引入以下内容来避免被恶意攻击者抢劫 他们的开发工作流程中的以下几点

通过将软件包的版本更新为最新版本,可以解决大多数NPM安全漏洞。

此过程可以使用Renovate实现自动化,该工具可以帮助自动化软件项目中的依赖项更新。 它易于定制,还可以运行软件项目的现有测试套件,以确保不会因依赖项更新而导致回归错误。

如何查找NPM程序包中的漏洞

在上一节中,我们研究了NPM模块中常见的各种软件漏洞以及我们可以减轻这些漏洞发生的几种方法。

在将代码推送到生产环境之前,在用作第三方来源的NPM软件包中发现漏洞将有助于避免可能的违规行为,并使恶意实体远离。

在本节中,我们研究了防范NPM软件包中的安全漏洞的可能方法。

使用装修

WhiteSource Renovate是一个免费工具,用于通过自动依赖更新来修复安全漏洞。 它可在公共和私人Git存储库上运行,扫描多种语言和文件类型的安全漏洞,并在发现安全漏洞后自动打开所有必需细节的问题。

了解NPM安全性[深入研究]_第3张图片

也可以将其部署在本地或混合云环境中,并作为本地计算机或远程服务器上的CLI工具。

了解NPM安全性[深入研究]_第4张图片

NPM审核

NPM的最新版本提供了一种工具, NPM Audit ,它会自动扫描Node.js应用程序中的第三方库是否存在安全漏洞。 在运行npm audit命令之后,将提供审计报告,该报告可洞悉应用程序由于其第三方库而可能暴露的软件漏洞的性质。

了解NPM安全性[深入研究]_第5张图片

NPM审核文档提供了许多可用于修复这些漏洞的命令。

但是,这不能解决所有漏洞。 其他几个安全漏洞将需要采取一些手动步骤,以确保已完成修复。

结论


NPM软件包极大地提高了开发人员的生产率,并减少了Node.js软件团队生产最小可行产品(MVP)的时间。

但是,使用这些开源软件包时应格外小心,因为它们包含的软件漏洞也可能成为恶意攻击者的目标。 通过采用本文中讨论的技术,公司可以领先于开源NPM软件包中可能出现的漏洞。

进一步阅读

  • https://medium.com/@liran.tal/malicious-modules-what-you-need-to-know-when-installing-npm-packages-12b2f56d3685
  • https://codeburst.io/what-is-prototype-pollution-49482fc4b638
  • https://ponyfoo.com/articles/how-to-avoid-objectprototype-pollution
  • https://portswigger.net/web-security/cross-site-scripting
  • https://affinity-it-security.com/how-to-prevent-command-injection/
  • https://www.softwaretestinghelp.com/html-injection-tutorial/
  • https://hackernoon.com/secure-npm-ca2fe0e9aeff
  • https://blog.risingstack.com/controlling-node-js-security-risk-npm-dependencies/
  • https://renovate.whitesourcesoftware.com/
  • https://portswigger.net/daily-swig/the-complete-package-everything-you-need-to-know-about-npm-security

From: https://hackernoon.com/understanding-npm-security-deep-dive-r84b323b

你可能感兴趣的:(人工智能,git,操作系统)