AppArmor如何做"环境清洗"?

joe*_*ker 8 linux security apparmor

AppArmor文档提到了应用程序能够在有或没有环境清理的情况下执行其他程序.显然,擦除环境更安全,但文档似乎没有详细说明环境清理的发生方式.

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

Mat*_*ery 4

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

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

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

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

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