AppArmor如何进行"环境清理"?



AppArmor文档提到赋予应用程序执行其他程序的能力,无论是否使用环境清理。显然,经过清理的环境更安全,但文档似乎没有详细说明环境清理是如何发生的。

什么是环境擦除? AppArmor做了什么来擦除环境?

"Environment scrubbing"是指移除可能影响二进制文件行为的各种"危险"环境变量——例如,LD_PRELOAD可以用来使动态链接器拉入代码,这些代码可以对程序的运行做出本质上任意的改变;可以设置一些变量,使跟踪输出到具有知名名称的文件;等。

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

内核的ELF加载器代码使用这个钩子在传递给二进制文件的信息的"辅助向量"中设置AT_SECURE项。(在AppArmor代码中,这个钩子的实现见这里和这里。)

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

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

相关内容

  • 没有找到相关文章

最新更新