configuration攻击者滥用时间很长的“强化”用户帐户

假设您有一台运行各种敏感服务的Windows Server计算机。 假设这些服务之一非常简单,在文本文件中保留less量的信息,但是由于被严重编码,有一个(未知的)任意代码执行漏洞。

是否有可能为该服务设置一个用户帐户,以便如果黑客成功利用此漏洞,他们可以做的最大的损害是读/写这个文本文件,搞砸这个特定的服务,并可能列出文件C:\ Windows的,但没有别的?

一个天真的尝试立即遇到一个问题:任何人在“用户”可以写入C:\ Program Files文件,并从该目录的ACL删除“用户”导致权限错误,让我怀疑,也许,是否一个非常糟糕的主意。

或者,如果攻击者可以执行任意代码,游戏已经丢失了,而不pipe使用哪个用户帐户? 我一直以为Windows NT的后代能够控制这个,但现在我已经试过了,我不再那么肯定了。

默认情况下,用户不能写入C:\Program Files 。 他们有读取,列出文件夹内容和读取和执行。 如果这不是你的情况,那么某人或某事已经修改了这些权限。

有限的用户可以读取大部分文件系统,但只能写入已明确授予访问权限的位置,就像其用户configuration文件一样。

如果你给这个文本文件授予修改权限,那么这个账户唯一能够写入文件系统的就是这个文件,加上它的configuration文件目录(我的文档等等),这应该是没有意义的。

如果您的内置用户组在整个文件系统中都具有修改权限,则这是非标准的。 开箱即用,有限的用户帐户可以做很less的损害。

如果运行其进程的服务帐户在权限上有限,那么它自身的代码执行错误并不是特别的无害。 问题是,有太多的特权升级漏洞,一旦你可以任意执行代码,你可以执行一些可以让你跳出特权级别的东西。 就其本身而言,任意代码执行并不是什么大问题,但是在现实世界中,它几乎总是与特权升级漏洞捆绑在一起。 所以,是的,我会担心的。

这里有一些相当有趣的答案

以我的经验为基础,在我的带领下进行了大量的渗透testing“修复名单”,实际上我认为微软近年来在提供强化服务器的工具和选项方面做得非常出色。

当然,MS仍然模糊他们的代码,他们和社区仍然在寻找远程执行/特权升级的漏洞,但是我必须说,与其他一些供应商(SonicWall,Tivoli和甲骨文的spring来介意)。

我的build议是:

  • 确保用户帐户控制(UAC)已启用
  • 确保数据执行保护(DEP)已启用
  • 使用托pipe服务帐户(Windows 7或Windows Server 2008 R2及更高版本)
  • 从绝对最小权限开始,只有在绝对需要时才添加更多权限。 我的意思是文件系统权限和用户权利指派(本地安全策略或组策略)
  • 使用微软的进程监视器来诊断权限问题(当试验^^^)
  • 确保服务器已修补(至less通过WSUS安全修补程序)
  • 如果您安装了第三方软件,请保持打补丁。
  • 卸载Java。 除非你真的需要它。 修补它。 然后再修补它,因为你应用的补丁不能解决Oracle所说的错误。 对不起,Oracle毁了Sun Java!
  • 让您的硬件供应商的系统软件保持最新(BIOS,设备驱动程序等)
  • 使用Windows审计来监视您新的shiny帐户的活动。
  • 转发中央的事件。
  • 每天检查转发的事件,或者至lessconfiguration触发器以在必要时进行警报。
  • 启用Windows防火墙(这是一个耻辱,但如此多的人把它closures)
  • 确保您的服务器已经备份,所以如果最糟糕的情况发生,您将获得您的数据。
  • 制定一个计划,如果最糟糕的事情发生了,你会做什么。
  • 不要让您的服务器访问Internet。 再说一次,我不能相信我曾经去过的所有服务器都有开放的HTTP(S)访问互联网的数据中心的数量。 有些人需要被搁置一边聊天。

重要的是要记住,不存在完全安全的操作系统,应用程序或networking。 这一切都是关于预防的层面,并确定事情的不同之处。 不要在入侵检测中卖出,除非你a)容易被炒作销售摊位,b)有很多空闲时间在你的手上,c)有足够的闲置$$$。

最后,这些日子最狡猾的“攻击”不是关于破坏; 恰恰相反。 重点(和资金!)已经转向数据泄露。

在Linux世界中, 我们将使用SELinux或其他强制访问控制机制来缓解这种威胁。

Windows没有那么强大的function,但是从Vista / 2008开始,它确实有一个基本的完整性机制 ,你可以使用它。 (虽然这样有一个相当高的学习曲线和解释它完全需要更多的长度比这里所允许的。)

我认为你最好的短期缓解措施是隔离虚拟机中的服务。

如果“执行任意代码”意味着进程可以创build目录,那么他们可以在当前目录,服务帐户的用户configuration文件目录,C:\根目录下创build目录,或者简单地search一个目录它可以创build目录。

上次我查了一下,Windows通常赋予在C:的根目录下创build目录的权限。 由于您需要查看高级属性页面或使用ICACLS来获取完整的权限列表,因此您可能不会在gui中看到此内容。

即使C:\根目录权限已被强化,searchC:\上的所有目录也是微不足道的,并且testing权限允许服务帐户创build目录的权限。 有可能会有一个。

如果进程利用可以在C:上创build目录,那么通过创build数百万或数十亿个空目录/子目录来禁用系统是非常简单的。

空目录是零字节,所以不受配额限制。 这些目录也直接存储在MFT中(因为它们尺寸很小),所以即使可以停止进程并删除这些目录,MFT也会被有效地删除 – 这么大和/或碎片化以至于系统可能需要恢复从备份。

对所有进程使用DEP。 它会阻止大多数,但是有很多可以击败DEP的漏洞。

防止滥用必须从头开始 – 没有意义的做到一个帐户在一个不安全的服务器上有一个大的攻击面

所以;

1)确保服务器已打补丁。

2)您可以使用SCW(安全configuration向导)来加固服务器。 它会做比大多数pipe理员会做得更快,更好的工作。

它允许您撤消所做的更改,但只能撤销一步。 所以,如果你运行它,locking下来,然后再运行它(即如果你错过了一些东西), 然后你注意到有什么坏的,如果它在第一次locking时破坏了,你不能轻易地撤消它(必须做的它手动)

所以,在运行并应用之后,请彻底testingfunction

3) 然后 ,确保你使用的账户不是pipe理员,权力用户等,并且他们只有NTFS权限来做他们需要做的事情的最低限度 – 没有别的。

4)您也可以使用本地安全策略(或域策略,如果服务器是域成员)来lockingGUI的其他方面。

您当然可以尝试创build一个类似于无法login的窗口的安全用户,只能访问机器上的某些文件。 这意味着特权升级利用可以根据情况对该用户起作用。

随着Linux我们chroot监狱进程和这样的服务,作为安全缓解策略的一部分。 我不是一个Windows的家伙,但你如何在Windows中做到这一点?

你可以做的一件事情,把服务放在沙箱中运行在一个虚拟机。 Virtualbox是我的select,因为你甚至可以将它安装在同一个盒子上,如果你想要,并且使它从服务器开始,甚至是无头的,所以它几乎就像服务一样运行。 它也是免费的。 利用漏洞很难逃脱你的虚拟机。 对这种方法的认可是,你将运行另一个完整的Windows实例,这本身就需要保持最新,并会消耗资源。

另一个可行的方法就是使用专用的沙箱程序,比如sandboxie ,它可以对任何进程进行沙箱处理,如果沙箱被攻破,就难以逃脱。