采取哪些预防措施足以为脚本语言创建沙盒?

采取哪些预防措施足以为脚本语言创建沙盒?

我们有一个正在进行的讨论通过添加脚本支持来为项目添加一些功能,但却因安全问题而陷入困境。

假设一种语言将用于配置目的,那么.ini从最终用户的角度来看,它作为文件必须足够安全。操作不会依赖于任何外部二进制文件,只允许使用该语言的本机工具。

以下限制是否足以保证运行不受信任的代码的安全:

  • 限制网络访问
  • 完全禁用写访问
  • 提供当前目录的读访问权限
  • 仅为包含全局库提供读取访问权限

要使脚本语言用作“配置工具”,还需要什么?

答案1

不。

除此之外,您无法防御缓存操纵、分支预测中毒和 Rowhammer 式攻击,而所有这些都可能通过链接讨论似乎暗示使用的语言(Python)来实现。

假设您确实在谈论使用 Python,您还需要考虑这样一个事实:Python 代码可以通过多种机制加载任意库和可执行文件,其中一些机制不依赖于读取访问。所有这些都需要限制,而且您实际上也应该限制对许多标准库模块的访问(例如,文档宏与 syslog 守护程序对话或获取帐户信息无关)。

除此之外,您还需要:让用户明确禁用自动运行此代码,理想情况是他们必须明确选择运行它(如果这是 MS Office 中宏的默认行为,那么相当多的大型病毒都不会感染几十个系统)。此外,绝对地确保写保护包括与宏关联的文档,否则您仍然有一个数据泄露机制。

老实说,Python 实际上并不是那么适合这种事情。如果这不是讨论的重点,我实际上会建议使用 Lua,它的设计更适合这种用途,而且更容易保证安全(尽管我的回答开头提到的东西对 Lua 来说仍然是一个问题)。

相关内容