假设您有一台运行各种敏感服务的 Windows Server 计算机。假设其中一项服务非常简单,在文本文件中维护少量信息,但由于编码不当,存在(未知的)任意代码执行漏洞。
是否可以为该服务设置一个用户帐户,以便如果黑客成功利用此漏洞,他们所能造成的最大损害就是读取/写入此文本文件,弄乱此特定服务,并可能列出 C:\Windows 中的文件,但没有其他?
幼稚地尝试这样做会立即遇到一个问题:“用户”中的任何人都可以写入 C:\Program Files,而从该目录的 ACL 中删除“用户”会导致权限错误,这让我怀疑这是否是一个非常糟糕的主意。
或者说,如果攻击者可以执行任意代码,无论使用哪个用户帐户,游戏是否已经失败?我一直认为 Windows NT 的后代可以遏制这种情况,但现在我尝试过了,我不再那么肯定了。
答案1
默认情况下,用户可以不是写入C:\Program Files
。他们有读取、列出文件夹内容和读取和执行权限。如果您的情况并非如此,那么有人或某事修改了这些权限。
受限用户可以读取文件系统的大部分内容,但只能写入明确被授予访问权限的位置,例如其用户配置文件。
如果您授予修改仅有的对于该文本文件,该帐户在文件系统上唯一能够写入的内容就是该文件,以及其配置文件目录(我的文档等)中的内容,这些内容应该无关紧要。
如果您的内置用户组对整个文件系统都有修改权限,那么这是不标准的。开箱即用的受限用户帐户几乎不会造成任何损害。
如果运行其进程的服务帐户权限受限,则任意代码执行漏洞本身并不是特别无害。问题是很多特权升级漏洞利用程序存在,一旦您可以任意执行代码,您就可以执行一些允许您突破特权级别的操作。就其本身而言,任意代码执行并不是什么大问题,但在现实世界中,它几乎总是与特权升级漏洞捆绑在一起。所以,是的,我会担心。
答案2
这里有一些非常有趣的答案。
从经验的角度看,凭借我积累的大量渗透测试后“待修复事项列表”,我实际上会说微软近年来在提供工具和选项以很好地强化服务器方面做得非常出色。
当然,MS 仍然对他们的代码进行模糊测试,并且他们和社区继续寻找远程执行/权限提升漏洞,但我不得不说,与其他一些供应商(首先想到的是 SonicWall、Tivoli 和 Oracle)相比,他们的修补是准确的。
我的建议是:
- 确保已启用用户帐户控制 (UAC)
- 确保已启用数据执行保护 (DEP)
- 使用托管服务帐户(Windows 7 或 Windows Server 2008 R2 及更高版本)
- 从绝对最小权限开始,只有在绝对需要时才添加更多权限。我指的是文件系统权限和用户权限分配(本地安全策略或组策略)
- 使用 Microsoft 的进程监视器来诊断权限问题(实验时 ^^^)
- 确保服务器已修补(至少通过 WSUS 安装安全补丁)
- 如果您安装了第三方软件,也请对其进行修补。
- 卸载 Java。除非您真的需要它。修补它。然后再次修补它,因为你应用的补丁没有修复 Oracle 所说的错误。对不起,Oracle 毁了 Sun Java!
- 保持硬件供应商的系统软件为最新版本(BIOS、设备驱动程序等)
- 使用 Windows 审核来监控您的新帐户的活动。
- 将事件转发到中心位置。
- 每天检查转发的事件或至少配置触发器以在必要时发出警报。
- 启用 Windows 防火墙(很遗憾,但很多人都将其关闭)
- 确保您的服务器已备份,这样如果发生最坏的情况,您仍能保住您的数据。
- 制定一个计划,以应对最坏的情况。
- 不要让你的服务器访问互联网。再说一次,我不敢相信我去过的数据中心有这么多,所有服务器都开放 HTTP(S) 访问互联网。有些人需要被拉到一边聊聊。
重要的是要记住,没有绝对安全的操作系统、应用程序或网络。一切都取决于层层预防,以及在情况出现异常时进行识别。也不要对入侵检测产生好感,除非你 a) 容易被夸大的宣传所吸引,b) 有大量空闲时间,c) 有大量闲钱。
最后,如今最狡猾的“攻击”并非为了破坏,恰恰相反。攻击的重点(和资金!)已转向数据泄露。
答案3
在 Linux 世界中,我们将使用 SELinux或其他强制访问控制机制来减轻这种威胁。
Windows 没有如此强大的功能,但自 Vista/2008 以来,它确实有一个基本的诚信机制您可以使用它。(不过,这有一个学习曲线相当高并且完整解释它需要比这里允许的更长的篇幅。
我认为最好的短期缓解措施是在虚拟机中隔离该服务。
答案4
对所有进程使用 DEP。它可以阻止大多数进程,但仍然有很多漏洞可以击败 DEP。