linux - AppArmor 如何处理 "Environment Scrubbing"?

标签 linux security apparmor

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

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

最佳答案

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

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

内核的 ELF 加载程序代码 uses this hook在传递给二进制信息的“辅助向量”中设置 AT_SECURE 条目。 (有关 AppArmor 代码中此 Hook 的实现,请参阅 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将被删除。

关于linux - AppArmor 如何处理 "Environment Scrubbing"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5835664/

相关文章:

php - 如何防止 PHP 中的 SQL 注入(inject)?

kubernetes - 启用默认的secomp和apparmor配置文件,集群级别

docker - 如何在docker容器中允许ptrace

mysql 无法启动 Ubuntu 16.04.2 x64

linux - 通过 AWS 上的 EC2 启动 Ubuntu VM 并安装 icecast2

linux - eventfd 的 OS X 替代品

PHP 和 MySQL $_POST 安全和 md5() 散列函数

asp.net - SSO 的实现有哪些潜在的安全问题?

php - 我如何强制 PHP 使用 iconv 的 libiconv 版本而不是 CentOS 安装的 glibc 版本?

c - execv 等待输入输入而不是执行程序