在沙箱中的Linux上运行不受信任的应用程序

时间:2013-03-15 16:35:18

标签: embedded-linux selinux sandbox

我们有一台运行Linux的设备,我们需要在此上运行不受信任的应用程序。我们正在努力减轻以下安全问题 -

  1. 不受信任的应用程序不应该对核心操作系统数据和二进制文件产生负面影响
  2. 不受信任的应用程序不应该对另一个应用程序的数据和二进制文件产生负面影响
  3. 不受信任的应用程序不应该消耗过多的CPU,内存或磁盘,并导致像核心操作系统或其他应用程序那样的DoS /资源不足
  4. 从不受信任的应用程序角度来看,它只需要能够读取和写入自己的目录以及可能已安装的USB驱动器

    我们正在考虑使用以下方法之一 -

    方法1 - 使用SELinux作为沙箱

    • 这可能吗?我已经阅读了一些SELinux,它在设置策略文件和在运行时强制执行等方面看起来有点复杂.SELinux可以执行此操作并将不受信任的应用程序限制为只读/写自己的目录,并且能够设定配额限制?

    方法2 - 在我们自己的

    上创建一个新的沙箱
    • 在安装期间

      • 为每个不受信任的应用程序创建新的应用程序用户
      • 使用权限标记整个应用程序目录和文件,以便只有应用程序用户才能读写
      • 使用ulimit / quota
      • 为应用程序用户设置配额
    • 在运行时,使用

      启动不受信任的应用程序
      • 关闭所有打开的文件描述符/句柄
      • 使用chroot将根目录设置为应用程序目录
      • 在应用程序用户
      • 的上下文中启动应用程序

    关于上述的想法?哪种方法比另一种更安全?还有其他方法可能更好吗?由于某些原因,我们无法选择移动Android,因此我们无法使用Android本身提供的沙盒功能...

    让我知道

    谢谢,

2 个答案:

答案 0 :(得分:1)

SELinux是一组规则,应用程序与用户权限相似,甚至更复杂。您可以在每个进程中使用它来设置该进程的域,并允许或拒绝几乎任何访问。它意味着访问文件,网络或进程/线程。这样它就可以用作一种沙箱。但是,您必须为每个进程准备一个规则集,或者您可以创建一个必须在沙盒应用程序之前运行的脚本来自行准备规则。

如果要控制CPU消耗,SELinux没有CPU规划器,因为任何规则只有两个逻辑结果中的一个“允许”或“拒绝”访问。我建议你'cgroups'来控制CPU消耗。

答案 1 :(得分:1)

legato project使用更高级别的沙盒。它使用chroot和bind mount来包含应用程序。它的一个关键特性是正式的声明性api,因此应用程序组件可以在托管安全性配置下与系统服务组件进行通信。并且可以根据需要添加和删除服务和应用程序,以及通过无线方式进行更新。应用程序内存使用情况,处理器份额,存储等也受到严密管理。它声称使应用程序开发更容易。