挂载 /tmp noexec 有多有用?

挂载 /tmp noexec 有多有用?

很多人(包括安全 Debian 手册) 建议/tmp使用noexec,nodev,nosuid一组选项进行安装。这通常作为“纵深防御”策略的一个要素呈现,通过防止允许某人写入文件的攻击升级,或由具有合法帐户但没有其他可写空间的用户发起的攻击。

然而,随着时间的推移,我遇到了一些争论(最突出的争论来自 Debian/Ubuntu 开发人员 Colin Watson),他们认为这noexec是一个无用的措施,可能出于以下几个原因:

  1. 用户可以运行/lib/ld-linux.so <binary>以尝试获得相同的效果。
  2. 用户仍然可以对无法直接运行的脚本运行系统提供的解释器

考虑到这些论点、可能需要更多配置(例如debconf可执行临时目录)以及可能失去便利性,这是值得采取的安全措施吗?您还知道哪些可以规避的漏洞?

答案1

以下是我目前提出的关于实用性的论据:

现代内核修复了这个/lib/ld-linux.so漏洞,因此它将无法从noexec文件系统映射可执行页面。

解释器的问题当然仍是一个值得关注的问题,尽管我认为它的重要性不如人们声称的那样。我能想到的理由是,存在许多依赖于进行特定格式错误的系统调用的特权提升漏洞。如果攻击者不提供二进制文件,那么进行恶意系统调用就会困难得多。此外,脚本解释器应该是无特权的(我知道历史上有时并非如此,例如 suid perl),因此需要它们自己的漏洞才能在攻击中发挥作用。显然,它是可能的至少使用 Python 来运行一些漏洞。

许多“预制”漏洞可能会尝试编写和运行可执行文件/tmp,从而noexec降低遭受脚本攻击的可能性(比如在漏洞披露和补丁安装之间的时间段内)。

/tmp因此,使用安装 仍然具有安全优势noexec

正如所述Debian 的错误追踪器,设置APT::ExtractTemplates::TempDir到rootapt.conf无法访问的目录noexec将消除 debconf 问题。

答案2

将以下内容添加到 /etc/apt.conf,或者 /etc/apt/apt.conf.d/50remount

DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};

答案3

许多 Debian 软件包需要 /tmp 可执行才能安装。这些通常被标记为错误(严重程度为“正常”/“愿望清单”):

https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp

就在今天,我在将更新的内核安装到稳定分支时收到了这个错误。

因此看起来 Debian(及其衍生产品?)还没有准备好以 noexec 方式挂载 /tmp...

答案4

第一的: 它涵盖了许多不同的攻击案例。因为有几种已知的解决方法(其中一些甚至已经修复)而将其关闭是很奇怪的做法。攻击者下载代码/dev/shm/tmp将其作为常见做法。

纵深防御是保护最常见的航路点,每个阻止它们的航路点都会使您的系统更具生存能力。不安全。但它也会有一个机会。如果他们无法获取其次要有效载荷,那么你就有很大机会获胜。

  • 它也可能因 iptables 用户限制而被阻止。
  • 它也可能被 SELinux 停止。
  • 也可能不是由于容易访问的其他漏洞而被停止。

关键是让它尽可能困难容易地可以,并阻止99%的攻击。

第二:/tmp它可以阻止不良做法(从临时目录运行程序、通过而不是用户 tmpdir 安装主要应用程序)、将数据留在 中/tmp。自定义安装程序通常了解 TMPDIR 另外:即使不是:安装时间作为时间点操作,也不是关闭安全问题的正当理由永久

第三: 考虑到匿名命名空间/tmp(“功能”),您确实想要限制放置在那里的内容并从那里运行。

第四: 便利性并不是一个重要因素。假设我们运行服务器是为了赚钱,并且有一个目的:我们要对这些东西负责。“哦,我没有锁定,/tmp因为明年更新软件时我需要多花几分钟时间”。当然,这不会是唯一一个阻碍被勒索和安然无恙的原因。一个很好的理由?我不这么认为。

这个怎么样:

“我们知道敌人可以不经通知就发动攻击。他们还可以使用数百名间谍在食物中下毒。所以我们不再向士兵发放枪支。”

等等,什么?

还有其他措施需要更多的努力、经验和运气才能确保系统的安全,并且要知道人们的金钱和寿命有限,也希望花时间与家人在一起:不要跳过简单的事情。

相关内容