2009-11-13 36 views
4

我想了解差异服务帐户类型之间的差异。我对这个问题大跌眼镜。为什么在本地系统上运行服务在Windows上不好?

答案是因为它有强大的本地资源访问权限,如果可能的话应该使用网络服务。

但我仍感到无法理解,如果它具有对本地资源的强大的访问,如何攻击者可以访问该帐户?有什么方法来破坏账户?我明白这是关于安全的,但我不知道如何。这可能是黑客黑客的世界,然而任何人都可以简单地解释为什么网络服务帐户比本地帐户更好?

在此先感谢。

+0

这应该去http://serverfault.com – squillman

+4

@squilman:我不同意。如何编码服务通常决定了它需要什么级别的权限。对于这个问题的答案应该对任何编写服务的人都非常感兴趣。 – AnthonyWJones

+0

@Anthony:我不同意你的看法。 “为什么网络服务帐户比本地帐户好?” < - serverfault资料。 –

回答

11

您运行的每个程序都会增加服务器的攻击面。

你必须假定一个确定的,恶意的演员可以利用错误或漏洞在你的程序,使它做任何事情。通过以最少的特权执行他们的程序来减轻这种负担。

一些漏洞包括:

  • Luring attacks,其中攻击者诱骗你将程序并根据程序的提升权限执行自己的代码。

  • Buffer Overrun Attacks,其中发送到方法的额外数据被写入到相邻的存储器中,该存储器可能是控制流逻辑的目标。

  • Man in the Middle attacks,指攻击者伪造邮件到您的程序。

通常情况下,一个给定的服务不明显容易受到任何这些。在网络服务(或其他权限降低的帐户)下运行是一种“比抱歉更好”的策略,承认软件开发的两个重要事实:程序员是易犯错的,攻击者是有创造力的。

7

本地帐户在本地计算机上实际上具有完全的管理权限。因此,任何可能逃离缓冲区溢出并自动执行的代码都有可能造成破坏。

在另一方面,网络服务帐户在默认情况下只在本地系统客户级别的访问。因此,即使攻击者设法找到在服务中发送和执行代码的方式,代码将具有有限的访问权限。

0

如果你的服务有一个错误,它可以允许攻击者执行任意代码(如缓冲区溢出),他可以到服务的情况下,本地系统帐户,这相当于管理员帐户运行,与你的计算机的一切。因此,您的服务正在运行的权限较低,攻击者可获得的权限较小。

0

最简单的情况是服务允许服务的用户在命令行上执行一些代码。例如,MS SQL Server有一个存储过程,允许您运行“命令行”命令(即运行程序)。

6

LocalSystem帐户是* nix root帐户的Windows equivilant。它比管理员帐户更有特权。当您以LocalSystem身份运行时,您可以完全访问机器上的所有资源。

正如其他人写的,你应该写你的代码,以尽可能少的权限运行。

本地服务和网络服务之间的主要区别是运行的网络服务的服务必须在域中进行身份验证到其他机器(如计算机帐户我相信)的能力。

请注意,LocalService和NetworkService帐户都具有“模拟”特权,这是一种潜在的危险特权 - 它允许服务模拟正在调用服务的用户。如果该用户是管理员,那么即使您的代码在低权限服务中运行,它也可以执行管理员执行的任何操作。如果攻击者可以利用最小权限服务中的缓冲区溢出漏洞,他们可以将用于模拟调用者的API挂钩,并等待高权限调用者调用您的服务。这种技术被称为“令牌绑架”和MSRC has a great blog post描述了这个问题(并包含了描述如何缓解许多与使用本地服务和网络服务帐户相关的其它风险链接)。

相关问题