为什么在Windows上运行本地系统服务不好?

poi*_*ics 6 windows security

我试图找出差异服务帐户类型之间的区别.我摔倒了这个问题.

答案是因为它具有对本地资源的强大访问权限,并且应尽可能使用网络服务.

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

提前致谢.

Jef*_*nal 12

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

你必须假设一个坚定的恶意行为者可以利用程序中的漏洞或漏洞来使它做任何事情.您可以通过执行具有完成其工作所需的最少权限的程序来缓解这种情况.

其中一些漏洞包括:

  • 引诱攻击,攻击者根据程序提升的权限欺骗您的程序执行其代码.

  • 缓冲区溢出攻击,其中发送到方法的额外数据被写入相邻的存储器,这可能是控制流逻辑的目标.

  • 中间人攻击,攻击者伪造消息到您的程序.

通常,给定的服务显然不容易受到这些中的任何一种的影响.在网络服务(或权限降低的其他帐户)下运行是一种"更安全而不是抱歉"的策略,它承认软件开发的两个重要事实:程序员容易犯错,攻击者也很有创造力.


Ant*_*nes 8

本地帐户在本地计算机上实际上具有完全管理权限.因此,任何可能逃脱缓冲区溢出并自行执行的代码都有很大的损害范围.

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


Rei*_*man 8

LocalSystem帐户是*nix root帐户的Windows等效项.它比管理员帐户更具特权.当您作为LocalSystem运行时,您可以完全访问计算机上的每个资源.

正如其他人所写,您应该编写代码以尽可能少的权限运行.

LocalService和NetworkService之间的主要区别在于,作为NetworkService运行的服务能够对域中的其他计算机进行身份验证(我认为是机器帐户).

请注意,LocalService和NetworkService帐户都具有"Impersonate"权限,这是一种具有潜在危险的权限 - 它允许服务模拟调用该服务的用户.如果该用户是管理员,那么即使您的代码在低权限服务中运行,它也可以执行管理员执行的任何操作.如果攻击者可以利用您的最小权限服务中的缓冲区溢出,他们可以挂出您用来模拟调用者的API,并等待高权限调用者调用您的服务.这种技术被称为"令牌绑架",MSRC有一篇很好的博客文章描述了该问题(并包含描述如何减轻与使用LocalService和NetworkService帐户相关的许多其他风险的链接).