调试器安全性

调试另一个进程的能力为你提供了极其广泛的权限,这是你在其他情况下无法拥有的,尤其是在远程调试时。 恶意调试器可能会对正在调试的计算机上造成广泛的损害。

但是,许多开发人员没有意识到安全威胁也可以向相反的方向流动。 调试过程中的恶意代码可能会危及调试计算机的安全性:必须防范许多安全攻击。

安全最佳做法

正在调试的代码和调试器之间存在隐式信任关系。 如果你愿意调试某个程序,就也应该愿意运行它。 关键是您必须能够信任您正在调试的内容。 如果不能信任它,则不应对其进行调试;或者,应该在您能够承受损害的计算机上,并在一个隔离的环境中进行调试。

为了减少潜在的攻击面,应在生产计算机上禁用调试。 出于同样的原因,不应无限期地启用调试功能。

托管式调试安全性

下面是一些适用于所有托管调试的通用建议。

  • 附加到不受信任的用户进程时要小心:因为这样做意味着你认为它是可信的,而实际上它可能不是。 尝试连接到不受信任的用户进程时,会出现一个安全警告对话框,询问是否要确认连接到该进程。 “受信任的用户”包括你,以及在安装了 .NET Framework 的计算机上通常定义的一组标准用户,例如 aspnetlocalsystemnetworkservicelocalservice。 有关详细信息,请参阅 安全警告:附加到不受信任的用户拥有的进程可能很危险。如果以下信息看起来可疑或不确定,请不要附加到此过程

  • 从 Internet 下载项目并将其加载到 Visual Studio 时请小心。 即使没有调试,这也是非常有风险的。 执行此作时,假设项目及其包含的代码是可信的。

    有关详细信息,请参阅 调试托管代码

远程调试安全性

本地调试通常比远程调试更安全。 远程调试会增加可以探测的总表面积。

Visual Studio 远程调试监视器(msvsmon.exe)用于远程调试,并且有几个安全建议用于配置它。 配置身份验证模式的首选方法是 Windows 身份验证,因为无身份验证模式不安全。

错误对话框

使用 Windows 身份验证模式时,请注意,授予不受信任的用户连接到 msvsmon 的权限是危险的,因为用户被授予托管 msvsmon 的计算机的所有权限。

不要在远程计算机上调试未知进程:可能存在可能影响运行调试器的计算机或可能危及 msvsmon 的漏洞。 如果绝对必须调试未知进程,请尝试在本地调试,并使用防火墙来保留本地化的任何潜在威胁。

有关配置 msvsmon 的信息,请参阅 设置远程调试器

Web 服务调试安全性

在本地调试更安全,但由于你可能未在 Web 服务器上安装 Visual Studio,因此本地调试可能并不实用。 通常,调试 Web 服务是远程完成的,但在开发期间除外,因此有关远程调试安全性的建议也适用于 Web 服务调试。 下面是一些其他最佳做法。 有关详细信息,请参阅 调试 XML Web 服务

  • 不要在已入侵的 Web 服务器上启用调试。

  • 在调试 Web 服务器之前,请确保 Web 服务器是安全的。 如果不确定它是安全的,请不要对其进行调试。

  • 如果要调试在 Internet 上公开的 Web 服务,请特别小心。

外部组件

请注意程序与之交互的外部组件的信任状态,尤其是在未编写代码时。 另请注意 Visual Studio 或调试器可能使用的组件。

符号和源代码

需要考虑安全性的两个 Visual Studio 工具如下: