调试 API 中的安全注意事项

使用公共语言运行时 (CLR) 调试 API 的安全注意事项如下:

  • 附加到进程。 在 Windows NT 和 Windows 2000 上,必须用一个授予调试器完全访问权限的安全描述符来创建调试对象进程。 必须授予并启用调试进程的 SE_DEBUG_NAME 权限以调试任何进程。 默认情况下,将此权限授予 Windows NT 或 Windows 2000 的管理员。 Windows 95、Windows 98 和 Windows CE 不提供此安全级别,因为它们不会针对附加到进程强加一些特殊的要求。

  • 动态代码注入。 在加载程序集时将会验证程序集。 在动态代码注入过程中,调试器会修改某些代码,并将增量可迁移可执行 (PE) 文件发送到调试对象进程中。 不验证增量 PE。 在用实时 (JIT) 编译器编译了方法后将对这些更新的方法进行验证。 有关动态代码注入的更多信息,请参见使用调试 API 动态注入代码

  • 签名的程序集元数据的修改。 检查程序集的完整性,并且只在加载签名的程序集时才授予正确的权限。 如果调试器通过更改与调试对象关联的元数据来修改运行代码,则此操作将更改用于计算程序集签名的哈希。 此操作不会导致进行其他安全检查。 运行时分配的权限仍然有效。

  • 调试恶意进程。 请不要使用调试 API 来调试潜在的恶意进程,主要有以下两方面的原因。 首先,经过巧妙设计的进程可能会利用一些漏洞来影响调试的基础结构。 其次,在仅进行托管调试的期间停止进程可能会在实际停止之前导致一些滞后。 因此,无法保证将不会执行给定的一行代码。

请参见

概念

CLR 调试概述

其他资源

调试(非托管 API 参考)