目录
1.梗概
2.使用gem
3.构建gem
4.报告安全漏洞
一、梗概
安装一个gem后,允许你在你的app作用域中运行gem代码。同时他也暗指,如果你在gem server上安装了一个恶意的gem,那么你的server将被渗透。因此,gem的安全也是ruby社区经常讨论的一个主题。
rubygems已经有能力 cryptographically sign gems (加密签名gem)自从 version 0.8.11,这个签名使用gem cert产生一对秘钥,然后打包签名信息到gem中。gem install命令提供了一个可选的安全策略选项,使你可以在安装gem之前验证gem的签名。
然而,安全加密gem的方式并没有广泛使用。他需要许多 manual steps on the part of the developer,而且目前还没有一个完善的方式来验证gem的签名。新的签名模型例如X509 and OpenPGP可以去 rubygems-trust wiki, the RubyGems-Developers list and in IRC.
他的目标是改善签名系统,使之更加简单、透明。
二、使用gem
使用信任策略安装gem
-
gem install gemname -P HighSecurity
: All dependent gems must be signed and verified.
-
gem install gemname -P MediumSecurity
: All signed dependent gems must be verified.
-
bundle --trust-policy MediumSecurity
: Same as above, except Bundler only recognizes the long --trust-policy
flag, not the short -P
.
-
Caveat: Gem certificates are trusted globally, such that adding a cert.pem for one gem automatically trusts all gems signed by that cert.
验证checksum
gem fetch gemname -v version
ruby -rdigest/sha2 -e "puts Digest::SHA512.new.hexdigest(File.read('gemname-version.gem'))
Know the risks of being pwned, as described by Benjamin Smith’s Hacking with Gems talk
三、构建gem
使用gem cert命令签名
1.创建自己的签名证书
cd ~/.ssh
gem cert --build your@email.com
chmod 600 gem-p*
使用你gemspecs中的邮箱
2.配置gemspec with cert
添加证书公钥到你的仓库
cd /path/to/your/gem
mkdir certs
cp ~/.ssh/gem-public_cert.pem certs/yourhandle.pem
git add certs/yourhandle.pem
添加证书路径到gemspec
s.cert_chain = ['certs/yourhandle.pem']
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
3.Add your own cert to your approved list, 如下
gem cert --add certs/yourhandle.pem
4.编译、测试gem以便安装它
gem build gemname.gemspec
gem install gemname-version.gem -P HighSecurity
# or -P MediumSecurity if your gem depends on unsigned gems
5.Example text for installation documentation
MetricFu is cryptographically signed(加密签名方式)。 确定你安装的gem没有被 tampered(篡改) with:
添加公钥作为可信任的证书
gem cert --add <(curl -Ls https://raw.github.com/metricfu/metric_fu/master/certs/bf4.pem)
gem install metric_fu -P MediumSecurity
The MediumSecurity trust profile 会验证签名的gems, 但是允许安装未签名的依赖.
这是必须的,因为不是所有的 MetricFu’s 依赖都签名了,所以不能使用 HighSecurity。
引入release gem的checksum到你的仓库中
require 'digest/sha2'
built_gem_path = 'pkg/gemname-version.gem'
checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
checksum_path = 'checksum/gemname-version.gem.sha512'
File.open(checksum_path, 'w' ) {|f| f.write(checksum) }
# add and commit 'checksum_path'
OpenPGP不建议使用,因为没有被支持。
四、报告安全漏洞
1.报告他人gem的安全漏洞
如果了发现了某人的gem存在安全漏洞,第一步就是检查他是否一个已知的漏洞。
如果是一个未被发现的漏洞,你可以私下联系作者,尽量不要pull request或者issue在开源的项目中,解释这个漏洞,并提供解决方案。
2.报告自己gem的安全漏洞
首先request a CVE identifier by mailing cve-assign@mitre.org。这个identifier指明这个漏洞在讨论中具有唯一性。
然后找出哪些人使用了你的gem,需要解决这个漏洞。这样牵涉到更新一补丁,并建议他们更新。
最后,你需要告知人们这个漏洞,目前没有很好的地方来发布这些漏洞信息,但是你可以使用以下这些方案:
-
发送一封邮件到 Ruby Talk mailing list (ruby-talk@ruby-lang.org) ,主题 prefix [ANN][Security] outlining the vulnerabilty, which versions of your gem it affects and what actions those depending on the gem should take.
-
把他添加到开源漏洞数据库,例如 OSVDB。You can do this by emailing moderators@osvdb.org and/or messaging @osvdb on GitHub or Twitter.
五、扩展阅读
Several sources were used for content for this guide:
分享到:
相关推荐
gemstash, 一个 RubyGems.org 缓存和 private gem 服务器 什么是 Gemstash?Gemstash是远程服务器( 如 https://rubygems.org ) 和 private gem 源的缓存。在你的控制范围内,如果你使用的是多个可以访问服务器的...
A package (also known as a library) contains a set of functionality that can be invoked by a Ruby program, such as reading and parsing an XML ... See our guide on publishing a Gem at guides.rubygems.org
帮助管理和支持 RubyGems.org 的快速命令。 目前帮助通过 SSH 连接到 RubyGems.org 基础设施和运行命令。 安装 $ cd $ git clone git://github.com/rubygems/meg.git .meg 对于 bash 用户: $ echo 'eval "$($...
在Rubygems.org上查看Ruby Toolbox数据 此Chrome扩展程序从Ruby工具箱(https://www.ruby-toolbox.com/)中提取信息,以显示在rubygems.org上。 例如,如果您正在https://rubygems.org/gems/simplecov上查看诸如...
option.rubygems.org 项目导师的姓名: Nick Quaranto,Benjamin Fleischer 项目团队的名称:丽娜·托雷斯(Lina Torres)的安吉拉(Angela Guette) 项目名称: RubyGems.org采用中心 网址: : 关于该项目: ...
RubyGems.org(néeGemcutter) Ruby社区的gem主机。 目的 提供更好的API处理宝石 创建更透明,更易于访问的项目页面 使社区能够改善和增强网站 支持 由管理, 是一个社区资助的组织,通过门票和赞助为和的会议...
标题“2.4-3.0.rubygems.rar”暗示了这个压缩包可能包含了Ruby Gems从版本2.4到3.0之间的升级或集合,这对于Ruby开发者来说是一个重要的资源,因为版本升级通常会带来性能优化、新功能以及对旧问题的修复。...
RubyGems.org(姓氏 Gemcutter) Ruby 社区的 Gem 托管。目的提供更好的 API 来处理 gems 创建更透明和可访问的项目页面使社区能够改进和增强站点链接 :#rubygems 在 Freenode 上: : :贡献请遵循我们的。 要进行...
- **安全更新**:可能修复了已知的安全漏洞,保障了使用RubyGems时的数据安全。 - **文档更新**:更新的文档将帮助开发者更好地理解和利用RubyGems的新功能。 解压并安装"rubygems-3.2.27.zip"后,用户可以通过运行...
##概括此处提供的工具使您能够将 gem 的本地副本与 Rubygems.org 上的副本进行检查。 这些工具旨在让 gem 开发人员根据 Rubygems.org 服务器检查他们的本地开发副本(为什么?请参阅文档末尾的注释)。 目前正在...
在Ruby社区,保持RubyGems的更新是很重要的,因为最新的版本通常会提供更好的兼容性和安全性。 gz后缀表明这个文件是经过gzip压缩的,这是一种广泛使用的文件压缩格式,可以减小文件大小以便于传输和存储。在Linux...
★导航至ruby gem的GitHub或Rubygems.org页面。 在GitHub上打开'Gemfile'或'.gemspec'文件,然后单击任何gem名称。 您将被重定向到gem项目页面。 ★从上下文菜单中打开RubyGems.org中的ruby gem页面。 用鼠标突出...
Download from: rubygems.org/pages/download Unpack into a directory and cd there Install with: ruby setup.rb # you may need admin/root privilege For more details and other options, see: ruby setup....
RubyGems是Ruby编程语言的一个核心组件,它提供了一个便捷的包管理机制,使得开发者能够轻松地安装、管理和使用各种库和工具。在本案例中,“rubygems-2.7.4.tgz”是一个压缩包,包含了RubyGems的特定版本——2.7.4...
RubyGems
RubyGems 3.2.12可能包括了对安全性的增强,例如验证下载的gem的签名,以防止恶意软件。用户应确保从官方源或可信的仓库安装gem。 8. **社区贡献**: RubyGems项目是开源的,由全球的开发者共同维护和改进。`...
1. **安装**:使用`gem install <gem_name>`命令,RubyGems会从官方的Gem仓库(rubygems.org)下载指定gem的最新版本,并将其安装到本地系统。同时,RubyGems还会处理gem的依赖关系,确保所有必需的依赖项都被正确...
从rubygems.org/pages/docs移植内容 从help.rubygems.org知识库移植内容 在这里找到许多StackOverflow / ruby-talk问题并获得其常见答案 填写更多指南! 设置 确保已gem install jekyll ( gem install jekyll ...