8

AppArmor 文档提到让应用程序能够在有或没有环境清理的情况下执行其他程序。显然,经过清理的环境更安全,但文档似乎并没有具体说明环境清理是如何发生的。

什么是环境清理,AppArmor 做了什么来清理环境?

4

1 回答 1

4

“环境清理”是删除可能用于影响二进制文件行为的各种“危险”环境变量 - 例如,LD_PRELOAD可用于使动态链接器拉入代码,该代码可以对运行的基本任意更改一个程序;可以设置一些变量以使跟踪输出到具有知名名称的文件;等等

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

内核的 ELF 加载器代码使用这个钩子来设置AT_SECURE传递给二进制信息的“辅助向量”中的条目。(有关 AppArmor 代码中此挂钩的实现,请参见此处此处。)

当在用户空间开始执行时,动态链接器获取该值并使用它来设置__libc_enable_secure标志;您会看到相同的例程还包含为 setuid/setgid 二进制文件设置此标志的代码。(对于静态链接的二进制文件,其他地方有等效代码。)

__libc_enable_secure影响动态链接器代码主体中的许多地方,并导致删除特定环境变量的列表。

于 2011-05-24T20:07:34.060 回答