调试另一个进程的能力为你提供了极其广泛的权限,这是你在其他情况下无法拥有的,尤其是在远程调试时。 恶意调试器可能会对正在调试的计算机上造成广泛的损害。
但是,许多开发人员没有意识到安全威胁也可以向相反的方向流动。 调试过程中的恶意代码可能会危及调试计算机的安全性:必须防范许多安全攻击。
安全最佳做法
正在调试的代码和调试器之间存在隐式信任关系。 如果你愿意调试某个程序,就也应该愿意运行它。 关键是您必须能够信任您正在调试的内容。 如果不能信任它,则不应对其进行调试;或者,应该在您能够承受损害的计算机上,并在一个隔离的环境中进行调试。
为了减少潜在的攻击面,应在生产计算机上禁用调试。 出于同样的原因,不应无限期地启用调试功能。
托管式调试安全性
下面是一些适用于所有托管调试的通用建议。
附加到不受信任的用户进程时要小心:因为这样做意味着你认为它是可信的,而实际上它可能不是。 尝试连接到不受信任的用户进程时,会出现一个安全警告对话框,询问是否要确认连接到该进程。 “受信任的用户”包括你,以及在安装了 .NET Framework 的计算机上通常定义的一组标准用户,例如 aspnet、 localsystem、 networkservice 和 localservice。 有关详细信息,请参阅 安全警告:附加到不受信任的用户拥有的进程可能很危险。如果以下信息看起来可疑或不确定,请不要附加到此过程。
从 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 工具如下:
源服务器,它提供源代码存储库中的源代码版本。 如果没有程序的源代码的当前版本,此功能非常有用。 安全警告:调试器必须执行不受信任的命令。
符号服务器,用于提供在系统调用期间调试崩溃所需的符号。
请参阅 “指定符号”(.pdb)和源文件