如何使用ptrace来沙盒运行Rails中不受信任的代码?

16

假设我有这个糟糕的控制器代码:

class MovesController < ApplicationController
  def create
    eval(params[:input])
  end
end

我一直在寻找一种最佳方法来对不受信任的代码进行沙箱运行,最近在 ruby-lang 的特性讨论中发现了这个问题:https://bugs.ruby-lang.org/issues/8468

这个问题的真正解决方案是在 Ruby 上面的层次上运行沙箱。我在 http://eval.in 上运行不受信任的代码,使用基于 ptrace 的沙箱。Charlie Somerville

进一步研究这个主题并没有更多关于纯 ptrace 文档以外的信息。是否有已知的实践 / 库用于在 Ruby 和 Rails 中使用 ptrace,或者需要自己设置自己的解决方案?


1
很抱歉,我无法简要概括这个过程的完整描述以供StackOverflow使用。核心思想是使用ptrace(2)来通知所有系统调用,并明确列出您认为“安全”的那些系统调用,对于任何可能使它们不安全的系统调用参数,您需要验证这些参数。有一篇有用的论文介绍了使用跟踪机制监禁进程的方法。您可以查找sandbox和s4g作为示例实现。 - Cyberfox
1个回答

3

有一个名叫trusted-sandbox的宝石可以做到这一点。但是要小心,因为Docker并不是完全防黑客攻击的。

还有GeordiCodePad使用。

以前有一个(有缺陷的?) Ruby 1.8 沙盒实现,但已不再得到支持。

但事实上,你的问题就像一个老笑话,病人说"医生,我这么做会疼。"医生回答说"那就不要那么做。"

实际上,你可以做成千上万件其他事情:

  • 使用具有一流沙盒功能的语言(如Lua)。
  • 使用模板语言(如Liquid或Mustache)。编写自己的解析器来处理实际需要完成的事情。
  • 在客户端(JavaScript或hotruby)上运行“程序”,仅将处理后的数据发送回您的服务器。

谢谢,我提供的赏金是为了如何实现一个服务器端解决方案,该方案使用ptrace和Ruby(而不是Docker、Lua、Liquid、javascript——这些都是我目前使用的好方案)。 - joelparkerhenderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接