通过删除不需要的库来沙盒化Guile?

时间:2019-02-11 22:47:14

标签: lisp sandbox guile

我有一个open-source GUI,我刚刚为其实现了一个非常基本的扩展机制,该机制允许用户在文档中嵌入一段Lisp(Guile)代码,以允许自定义某些功能。当前(我自己)的用例是,在某种情况下,我只想将某个数字自动除以10。

原则上,这意味着如果某人使用我的GUI,则其他人可以向他们发送包含恶意Guile代码形式的特洛伊木马攻击的文档。由于我的用户群很小,并且存在相关的社会因素,这在现实中似乎不太可能实现,但是无论如何,我都希望通过对代码进行沙盒保护来避免这种情况。

Guile 2.2.1具有沙箱机制:https://www.gnu.org/software/guile/manual/html_node/Sandboxed-Evaluation.html但是,这似乎完全集中在防止过度使用资源上(许多用户将没有使用当前版本的Guile,例如,我不正确现在)。

在解释器启动后,是否可以在Guile程序中删除诸如POSIX之类的库,以便以后的任何代码都无法执行读取文件之类的操作?如果是这样,那么我只需要让我的GUI在沙盒代码之前添加到文档提供的可能不受信任的代码即可。我的目标基本上是确保不受信任的代码必须100%无副作用。

由于Guile已被提升为Linux的标准扩展语言,因此似乎其他人以前也曾遇到过此问题。

编辑:遇到How to undefine a variable in Scheme?之后,在我看来,我可能可以创建一个新范围,通过在该范围内执行set!来覆盖任何危险函数的定义,然后执行该范围内的不受信任的代码。我想,如果我能以某种方式读取整个符号表,则可以对不在白名单上的每个函数进行这种覆盖。这似乎笨拙且效率低下,并且可能取决于使用某些实现特定的机制来读取符号表。它还可能容易受到语法技巧的攻击,例如,如果不受信任的代码使用)将自身弹出沙盒范围之外。

0 个答案:

没有答案