我试图找出差异服务帐户类型之间的区别。我摔倒了这个问题。
答案是因为它具有对本地资源的强大访问权限,并且应尽可能使用网络服务。
但是我仍然无法理解,如果它具有强大的本地资源访问权限,攻击者如何访问该帐户?有什么方法可以破坏帐户?我明白这一切都与安全有关,但我不知道如何。这可能是黑暗黑客的世界,但是,任何人都可以简单地解释为什么网络服务帐户比本地帐户更好?
提前致谢。
答案 0 :(得分:12)
您运行的每个程序都会增加服务器的攻击面。
你必须假设一个坚定的恶意行为者可以利用程序中的漏洞或漏洞来使它做任何事情。您可以通过执行具有完成其工作所需的最少权限的程序来缓解这种情况。
其中一些漏洞包括:
Luring attacks,攻击者根据程序的提升权限欺骗您的程序执行代码。
Buffer Overrun Attacks,其中发送给方法的额外数据被写入相邻内存,这可能是控制流逻辑的目标。
Man in the Middle attacks,攻击者伪造邮件给您的程序。
通常情况下,给定服务显然易受其中任何一项攻击。在网络服务(或权限降低的其他帐户)下运行是一种“更安全而不是抱歉”的策略,它承认软件开发的两个重要事实:程序员容易犯错,攻击者也很有创造力。
答案 1 :(得分:8)
本地帐户在本地计算机上实际上具有完全管理权限。因此,任何可能逃脱缓冲区溢出并自行执行的代码都有很大的破坏范围。
另一方面,网络服务帐户默认只对本地系统具有访客级别访问权限。因此,即使攻击者设法在服务中找到发送和执行代码的方式,代码也会限制访问。
答案 2 :(得分:8)
LocalSystem帐户是* nix root帐户的Windows等效项。它比管理员帐户更具特权。当您作为LocalSystem运行时,您可以完全访问计算机上的每个资源。
正如其他人所写,您应该编写代码以尽可能少的权限运行。
LocalService和NetworkService之间的主要区别在于,作为NetworkService运行的服务能够对域中的其他计算机进行身份验证(我认为是机器帐户)。
请注意,LocalService和NetworkService帐户都具有“Impersonate”权限,这是一种具有潜在危险的权限 - 它允许服务模拟调用该服务的用户。如果该用户是管理员,那么即使您的代码在低权限服务中运行,它也可以执行管理员执行的任何操作。如果攻击者可以利用您的最小权限服务中的缓冲区溢出,他们可以挂出您用来模拟调用者的API,并等待高权限调用者调用您的服务。此技术称为“令牌绑架”和描述问题的MSRC has a great blog post(并包含描述如何减轻与使用LocalService和NetworkService帐户相关的许多其他风险的链接)。
答案 3 :(得分:0)
如果您的服务有错误,可能允许攻击者执行任意代码(如缓冲区溢出),如果服务在本地系统帐户下运行,则可以使用您的计算机执行所有操作,这相当于管理员帐户。因此,运行较少的priveleged帐户,攻击者获得的权限较小。
答案 4 :(得分:0)
最简单的方案是服务允许服务的用户在命令行上执行某些代码。例如,MS SQL Server有一个存储过程,允许您运行“命令行”命令(即运行程序)。