保护Windows服务免受不受信任的用户的攻击

如何防止用户篡改,停止或崩溃在后台工作的Windows服务可能需要一段时间才能完成?

收到停止请求后,服务应等到工作完成后再停止。

有服务的CanStop标志,但我不知道如何响应OnStop消息。 如果用户确实尝试使服务崩溃,我该如何防止进一步篡改?


编辑:从家长控制到任何后台进程的广义问题。

用户必须具有管理员权限才能停止服务。 我不认为有一个万无一失的方法来保护程序免受管理员的攻击。 如果您不希望“不受信任的用户”停止服务,请不要给“不受信任的用户”admin privs。

在这一点上似乎有些绊倒,所以让我澄清一下。 假设管理员决定要卸载您的程序。 这通常只需点击几下鼠标。 你打算采取措施防止这种情况吗?

在这里仔细考虑你的答案。 任何故意试图阻止管理员卸载的程序都是恶意软件 。

我知道它已经非常标准,因为NT出来给所有家庭PC用户管理权限,以便他们可以安装和玩游戏到他们内心的内容。 然而,对于Vista和Win7来说,这不再是真正的nessecary,人们应该摆脱这种习惯。 这是非常糟糕的安全实践,即使对于“可信”用户也是如此。

告诉用户他们必须实际遵循一些安全措施并不是件坏事。 他们会发现他们必须以同样的方式清除机器上的恶意软件和病毒。

使用组策略会有所帮助

试试这个http://social.technet.microsoft.com/Forums/en-US/2758d69a-60e8-4a5b-83dd-fc7d8e15bdc1/preventing-users-from-stopping-a-particular-service-with-a-gpo

你的威胁模型是什么? 如果没有威胁模型,就无法找到合适的方式来花费你的精力。

目前,我们只考虑阻止服务停止,而不是防止或篡改或崩溃。

TED是正确的说,如果任何管理员想要停止服务,你通常不应该试图阻止这一点。 否则,管理员如何进行故障隔离,以简单模式启动Windows等等?

如您所说, ServiceBase.CanStop属性用于阻止服务停止。 此属性通常仅由必须运行的OS关键服务使用。

在主服务线程中,您可以忽略OnStop事件并永远循环。 因此SCM会认为服务已停止,即使它仍在运行。 这是相当讨厌的,但应该工作。 SCM只是发出停止请求,而不是实际强制停止。