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

时间:2010-11-24 12:31:17

标签: c# windows-services crash protection parental-control

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

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

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


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

3 个答案:

答案 0 :(得分:3)

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

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

在这里仔细考虑你的答案。 任何故意阻止管理员卸载的程序都是malware的定义。

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

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

答案 1 :(得分:2)

答案 2 :(得分:1)

你的threat model是什么?如果没有威胁模型,就无法找到正确的方法来花费你的精力。

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

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

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

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