AppArmor文档提到了使应用程序可以执行其他程序(带有或不带有环境清理)的能力。显然,清理后的环境更安全,但是文档似乎并未明确指定清理环境的方式。
什么是环境清理?AppArmor如何清理环境?
最佳答案
“环境清理”是指删除各种可能会影响二进制文件行为的“危险”环境变量-例如,LD_PRELOAD
可用于使动态链接程序引入代码,从而对运行的代码进行本质上的任意更改节目;可以设置一些变量以将跟踪输出输出到具有众所周知名称的文件;等等。
作为安全措施,通常对setuid/setgid二进制文件执行此清理操作,但是内核提供了一个 Hook ,以允许安全模块也对任意其他二进制文件启用它。
内核的ELF加载程序代码uses this hook,用于在传递给二进制文件的信息的“辅助矢量”中设置AT_SECURE
条目。 (有关AppArmor代码中此钩子(Hook)的实现,请参见here和here。)
当执行在用户空间中开始时,dynamic linker picks up this value并使用它来设置__libc_enable_secure
标志;您会看到同一例程还包含为setuid/setgid二进制文件设置此标志的代码。 (静态链接的二进制文件有equivalent code elsewhere。)__libc_enable_secure
影响main body of the dynamic linker code中的许多位置,并导致list of specific environment variables被删除。
关于linux - AppArmor如何做 "Environment Scrubbing"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5835664/