博客
2013 年 1 月 31 日
数据验证
by Evan
总结: 我们能够验证 rubygems.org 提供的所有宝石都没有被篡改。
事件
正如大多数人所知道的那样,1 月 30 日,rubygems.org 遭到了流氓代码执行漏洞的攻击。很多文章(以及未来即将撰写的文章)都讲述了该漏洞存在的原因以及我们如何确保这种事情不再发生。
数据验证
现在,我想让所有人了解所有宝石文件的当前状态。对于此类攻击,最大的担忧是攻击者可以篡改宝石文件并感染任何安装宝石的人。这是我们最大的担忧,在过去的 36 个小时里,我们花了大部分时间用于检查是否检测到任何已被篡改的宝石。
利用和校验和
首先,Mark Imbriaco (@markimbriaco) 从亚马逊 S2 上拉取了 100% 的宝石,我们存储所有宝石的位置。然后,他针对所有宝石执行了 2 个操作
- 审核宝石元数据以检测使用该漏洞的任何其他宝石。
- 生成宝石文件的 SHA512 校验和。
Mark 没有检测到任何其他使用该漏洞的宝石,这是我们听到的第一个好消息。
然后,他发布了所有校验和,这些校验和构成了我们的校验和集 1 (CS1)。
镜像
镜像为我们提供了最佳的验证机制。由于各种原因,多位用户运行rubygems.org 的镜像,他们提供数据以帮助我们验证宝石数据。
Eric Hodel (@drbrain) 和其他用户也统计了他们的数据,并根据 CB1 检查了数据。完成此步骤后,我们根据多个来源验证了 95% 的宝石。然后,我们减去了已被下架但仍可打 CS1 中获得的宝石 (但由于被下架,因此这些宝石不会出现在镜像中)。最后,我们减去了根据 S3 日志文件验证的过去 20 天添加到 S3 中的宝石。
结果
经过上述的所有检查和仔细核对,我们最终得到的结果是,只有 80 个预发行版宝石无法根据辅助来源验证。然后,我们选择下架这些宝石并正在联系作者,以便他们推送新的版本。
通过所有志愿者的辛勤工作,我们能够自信地报告说,rubygems.org 上的宝石并未被篡改。
数据与工具
我们会在 rubygems-verification github 存储库 中发布用来校验数据的校验和与工具,使您能够对我们的工作进行双重校验。
感谢
irc.freenode.net 上的 #rubygems-verification 频道的各位对此付出了巨大的努力。我感谢所有人的配合,感谢你们的帮助确保了 rubygems.org 能够持续运营。