一位安全研究人员设法破坏35家以上高科技公司的系统,这被称为一种新颖的软件供应链***(依赖关系混淆***)。通过利用这种称为依赖性混淆命名空间混淆的***方式尤其是npm Registry容易受到供应链命名空间混淆的影响。

么是依赖关系混淆

我们先来列举一个例子:

想象一下,我说过,您正在从事一个非常秘密的项目,名为Secret Almo。组件坐标为org.acme:secret-almo:1.0,并且您不希望竞争对手知道它。但是,如果您的一位同事不小心将org.acme:secret-almo:1.1或任何不存在的版本添加为该库的依赖项,并运行了构建该怎么办?这是将要发生的事情:

 

请求到达私服的组仓库(group首先检查本地资源库。如果您的同事没有犯错并且使用1.0作为版本,则解决方案将在那里停止,并且将检索到正确的工件。但是找不到1.1,因此公司的依赖私服会继续寻找。

私服会一对一地查看作为组仓库(group一部分的远程存储库proxy,将包含您的秘密项目名称的URL请求发送到外部第三方存储库!

在这种情况下,依赖性混淆指的是您的开发环境无法区分软件构建中依赖的组件是内部私有创建的程序包,还是公用软件存储库中同名的程序包

如何利用依赖关系混淆进行***呢

我们继续举个例子:

让我们回到上一个场景,有关Secret Almo的工作仍在进行中。让我们看一下项目的另一个组件, almo-common-utils,它是用Node编写的,web应用程序的所有依赖组件中一部分。私服组仓库(group),包括代理一组远程仓库(代理npm官方注册表),本地(用于内部共享模块)

考虑以下:

1. npm Registry是一个集市任何人都可以在上面发布一个未知范围NPM组件,并为所欲为的调用,即almo-common-utils

2. npm注册表中没有名为“ almo-common-utils ”的软件包(好吧,因为它是一个内部公司库),因此没有名称冲突。

3. 大多数npm依赖项都使用版本范围声明来请求最新的兼容版本

***者想要***不受保护的组织的唯一信息是almo-common-utils的存在,使用中的库的主要版本(假设他们知道版本3在组织中被广泛使用),并且知道其中的源代码。

他们可以克隆和修改源代码,将任何恶意软件嵌入其中,但仍保持与原始代码的兼容性,并将其作为secret-almo:3.99.99 上载到npm Registry,没有人能阻止它们这么做。

现在让我们看看当请求secret-almo:^ 3.0.0时私服的工作模式

1. 在本地存储库中寻找最新的兼容机密Almo。发现3.2.4

2. npm-registry代理远程存储库中查找最新的兼容secret-almo。发现3.99.99

3. 来自npm注册表的虚假secret-almo获胜,供应链被劫持

 

如何解决依赖混淆***呢

使用Artifactory,在您的远程存储库上使用排除模式!

您知道在npm Registry中永远找不到almo-common-utils的方法吗?告诉你的仓库管理员在排除模式中添加您的私有依赖项,并保护自己免受严重供应链***。如此简单,以至于几乎可以忽略不计。

 

同时也可以在本地仓库中排除掉第三方组件的坐标,避免内部私人串改第三方的可信版本

 


©著作权归作者所有:来自51CTO博客作者JFrog中国的原创作品,如需转载,请注明出处,否则将追究法律责任

好知识,才能预见未来

赞赏

0人进行了赞赏支持

更多相关文章

  1. 2021年了,还依赖PC端报表?推荐几款好用的移动报表软件给你!
  2. 大数据基础系列之提交spark应用及依赖管理
  3. Spark 如何摆脱java双亲委托机制优先从用户jar加载类?
  4. 千锋重庆Java教程之:详解依赖注入
  5. 熟悉composer常用指令,安装组件,并理解自动加载器的使用方式与更
  6. HBase1.x进阶:一文读懂HBase为何依赖Zookeeper?(必看)
  7. 实现多文件上传| MVC与依赖注入的原理
  8. 实现多文件上传案例 以及 MVC与依赖注入的原理
  9. PHP文件上传实战案例和MVC依赖注入和服务容器

随机推荐

  1. Android学习笔记之——UI组件
  2. Android(安卓)NDK开发配置NDK
  3. Android 获取wifi信号强度
  4. Android boot sequence (ANDROID-LEVEL :
  5. android > TimePicker 时间设置控件
  6. android电话拦截及短信过滤
  7. android edittext 不自动获取焦点
  8. Android警告错误搜集
  9. Android实现拍照功能实例
  10. Android Button按钮两个页面切换