2011-04-29 46 views
8

AppArmor文档提到应用程序可以执行其他程序,无论是否使用环境清理。显然,清理后的环境更加安全,但文档似乎没有详细说明环境清理是如何发生的。AppArmor如何执行“环境清理”?

什么是环境清理?AppArmor如何清理环境?

回答

4

“环境清理”是去除可能用于影响二进制行为的各种“危险”环境变量 - 例如,LD_PRELOAD可用于使动态链接程序拉入代码中,这可以使本质上任意改变程序的运行;一些变量可以设置为导致跟踪输出到已知名称的文件;等等。

这种清理通常是作为安全措施为setuid/setgid二进制文件执行的,但内核提供了一个挂钩,以允许安全模块为任意其他二进制文件启用它。

内核的ELF加载器代码uses this hook设置AT_SECURE条目在传递给二进制文件的信息的“辅助矢量”中。 (对于该钩在AppArmor的代码的执行见herehere

作为执行在用户空间启动时,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被移除。