在Windows中,默认情况下禁用本地内核调试。为什么?

时间:2017-03-20 03:57:45

标签: windows debugging kernel windows-10

我正在使用Windows 10。

首次安装Windows时,默认情况下禁用本地内核调试(windbg -kl)。要启用它,您必须运行bcdedit -debug on并重新启动。 (尽管据我所知,即使禁用本地内核调试,Sysinternals LiveKd似乎也能正常工作。)

为什么默认情况下禁用本地内核调试?让它始终启用是否有任何不利之处?

1 个答案:

答案 0 :(得分:4)

如评论中所述,默认情况下禁用内核调试,因为它允许(甚至在64位Windows上)加载未真正签名(自签名)的内核驱动程序。 (并禁用PatchGuard等)

关于"管理员的评论仍然存在于用户空间"当然是胡说八道。评论者应该继续阅读Raymond Chen关于" being on the other side of {{的帖子3}} this airtight"。请允许我用他的话:

  

我想你知道这个故事是如何结束的。如果您具有管理员权限,那么您已经位于密闭舱口的另一侧。您可以使用管理员权限来设置机器并不是很有趣,因为作为管理员,您已经在机器上进行了操作。

     

管理员和系统之间存在正式的区别,因为它们是ACL的一部分,因此SYSTEM可以执行它们而不是任意的管理员,但这种区别是正式的,不实用。想要获得一些以SYSTEM身份运行的代码的管理员可以安装以SYSTEM身份运行的服务。或者使用Debug Privilege接管以SYSTEM身份运行的进程(比如服务)。或者只需打开一个命令提示符作为SYSTEM并转到城镇。无需通过复杂的操作Q来获得SYSTEM访问权。

如果用内核模式驱动程序替换SYSTEM,则第一句成立。

您在删除的评论中是正确的,管理员可以加载驱动程序,但在x64上,必须对其进行签名。

什么能够加载未签名的驱动程序可以节省您75美元或填写在线表格,而是提供可证明的身份。内核模式代码签名证书与域验证的SSL证书不同。

请注意,Microsoft 打算要求内核模式驱动程序经过WHQL认证(或使用"证明签名",据说仅在非服务器SKU上),这需要提交驱动程序到Microsoft,并使用EV证书打开Windows硬件开发人员帐户。嘿!那是什么?这是与CA合谋的阴谋,使我们为证书支付更多费用吗?也许。也许他们希望确定您的身份并将验证委托给CA(假设EV执行它应该做的事情)。

安全方面,这不会建立真正的安全边界,而是一种温和的缓解。但还有其他一些考虑因素:微软并不希望软件发行商安装糟糕的驱动程序,这些驱动程序会将Windows关闭;而且,如果碰巧这样做,微软想知道是谁编写了这些驱动程序。这就是证明签署背后的理由。

如果您可以轻松启用内核调试,您可以打赌,一些二流ISV会编写糟糕的驱动程序,而无需测试或签名,并将使用该hack安装它。 (实际上,我知道今天那些不那么糟糕的ISV签署了他们的司机,但没有WHQL认证他们,并且使用黑客来安装它们而没有任何提示。这是真的。)

当然,同样糟糕的ISV可以在其安装程序(运行升级)中启用内核调试,并且可以在下次重新启动后加载其驱动程序。但桌面上有这个令人讨厌的消息,说你正在测试签名模式下运行以保护你免受此攻击。当然,同样糟糕的ISV可以破解并隐藏消息,但此时可能更容易获得证书。这并没有阻止任何事情,但它通过让它变得烦人而提供缓解,因此他们不会打扰。

如果您想知道为什么启用内核调试会让您进入测试签名模式,答案是:因为这是通常的预期方案。您可以更改注册表值,即使在内核调试时也需要生产签名,但这是例外情况。对于常见方案,默认值是正确的。你有LiveKD。微软没有理由倒退以应对一个并非真实发生的情景。他们已经遇到了足够多的问题。就像修复Microsoft Edge中的所有崩溃一样。