apparmor 可以限制解释型语言吗?

apparmor 可以限制解释型语言吗?

对于解释型/虚拟机语言(例如 python、java、shell 脚本),是否可以将 apparmor 设置为仅限制特定脚本或程序?如果可以,如何设置?

答案1

是的,这是可能的。它也在 Ubuntu 中使用,尤其是在手机上。

要获取基本的 apparmor 脚本,您可以使用 apparmor-utils 包中的 aa-autodep。

Python 的简单示例:

cat >> ~/myapp << EOF
#! /usr/bin/python
EOF

sudo aa-autodep ~/myapp

cat /etc/apparmor.d/home.<user-name>.myapp

这会给你类似这样的结果:

# Last Modified: Mon Feb 24 18:31:50 2014
#include <tunables/global>

/home/sam/myapp flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/python>

  /home/sam/myapp r,
  /usr/bin/python2.7 ix,

}

然后你可以进一步扩展它。

答案2

嗯,实际上使用“/usr/bin/python2.7 ix”并不是一个好主意。因为被利用的代码可能会从 shell 执行 python,例如:python -c 'some evil code'。

这绝对不是您想要的,并且完全破坏了沙盒概念(apparmor 是什么)。

ix意味着继承与父配置文件相同的限制。在这种情况下,我不确定在与 /home/sam/myap 相同的限制下执行外部命令是否是个好主意。

既然我们在谈论安全性,我们应该问:为什么调用的外部命令/python/home/sam/myapp应该能够访问、读取/写入/删除由系统创建的文件/home/sam/myapp或系统范围的敏感文件?甚至创建与外部系统的连接?(还记得 skype 读取 /etc 下不必要的文件的旧案例吗?)

因此更安全的解决方案是使用子配置文件(subprofile)来运行外部 python 程序

#include <tunables/global>

/home/sam/myapp flags=(complain) {
  #include <abstractions/base>


  /home/sam/myapp r,
  /usr/bin/python2.7 Cx -> trusted_domain,

  profile trusted_domain {

   #include <abstractions/....>

   #include <abstraction/python>
   /usr/bin/my-python-app r,
   ... your policy for data, logs, connections, python files...
  }

}

答案3

我认为 yurii 可能搞混了,认为“ix”的意思是“不受约束”,也就是“Ux”或“ux”。我在这里没有看到任何通过 shell 或子进程再次启动 python 的逃逸漏洞。

有关执行标志的更多信息,请参阅https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage

相关内容