很多人(包括安全 Debian 手册) 建议/tmp
使用noexec,nodev,nosuid
一组选项进行安装。这通常作为“纵深防御”策略的一个要素呈现,通过防止允许某人写入文件的攻击升级,或由具有合法帐户但没有其他可写空间的用户发起的攻击。
然而,随着时间的推移,我遇到了一些争论(最突出的争论来自 Debian/Ubuntu 开发人员 Colin Watson),他们认为这noexec
是一个无用的措施,可能出于以下几个原因:
- 用户可以运行
/lib/ld-linux.so <binary>
以尝试获得相同的效果。 - 用户仍然可以对无法直接运行的脚本运行系统提供的解释器
考虑到这些论点、可能需要更多配置(例如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
因为明年更新软件时我需要多花几分钟时间”。当然,这不会是唯一一个阻碍被勒索和安然无恙的原因。一个很好的理由?我不这么认为。
这个怎么样:
“我们知道敌人可以不经通知就发动攻击。他们还可以使用数百名间谍在食物中下毒。所以我们不再向士兵发放枪支。”
等等,什么?
还有其他措施需要更多的努力、经验和运气才能确保系统的安全,并且要知道人们的金钱和寿命有限,也希望花时间与家人在一起:不要跳过简单的事情。