cc682/NetRoc
http://netroc682.spaces.live.com/
安全性
本节包含:
安全弱点
安全模式
安全弱点
本节包含:
内核模式调试时的安全
用户模式调试时的安全
即时调试的安全
远程调试时的安全
内核调试时的安全
内核模式时的安全性不是用来保护目标机的。目标机对于调试器来说是完全开放的——这正是调试的正常情况。
如果一个调试连接在引导时就被启用(查看配置目标机的软件),再下一次启动前,它的调试端口总是易受攻击的。
但是,应该要关心主控机的安全性。在理想情况下,调试器是作为一个应用程序在主控机上运行的,但是它不会和计算机上其他程序相互影响。有三种可能出现安全性问题的情况:
- 如果使用恶意的具有破坏性的扩展DLL,他们可以让调试器产生不希望的行为并作用于主控机。
- 使用恶意的带破坏性的符号文件,也可能让调试器产生不期望的行为并作用于主控机。
- 如果运行一个远程调试会话,非预期的客户端可能尝试连接到服务器上。或者预期的客户端会尝试进行不期望的行为。
如果想避免远程用户对主控机进行操作,使用安全模式。
关于如何防止非预期的远程连接的建议,查看远程调试的安全性。
如果不是进行远程调试,仍然要小心恶意的符号文件和扩展DLL。不要加载不可信任的符号或扩展!
本地内核调试
只有具有调试权限的用户可以开始本地调试会话。如果你是某台机器的管理员,并且存在多个用户帐户,需要意识到任何具有这些权限的用户都可以开始本地调试会话以控制计算机上的所有进程——同时也给予他们访问所有外设的权限。
用户模式调试时的安全
当用户模式调试器激活后,它可以有效的控制计算机中的任何一个进程。
在用户模式调试时可能遇到三种安全问题:
- 如果使用恶意的具有破坏性的扩展DLL,他们可以让调试器产生不希望的行为并作用于主控机。
- 使用恶意的带破坏性的符号文件,也可能让调试器产生不期望的行为并作用于主控机。
- 如果运行一个远程调试会话,非预期的客户端可能尝试连接到服务器上。或者预期的客户端会尝试进行不期望的行为。
关于如何防止非预期的远程连接的建议,查看远程调试的安全性。当远程客户端加入到用户模式调试会话中后,就没有办法约束它对计算机中进程的访问了。
如果不是进行远程调试,仍然要小心恶意的符号文件和扩展DLL。不要加载不可信任的符号或扩展!
即时调试的安全性
只有管理员可以启用即时调试。
但是,即时调试是针对整个系统启用的,而不是某个用户。因此,当它被启用后,任何应用程序的崩溃都会激活选定的调试器——即使当前用户没有管理员权限。
同样,即时调试器继承了和崩溃的程序一样的权限。因此,如果类似CSRSS和LSASS这样的Windows服务崩溃了,调试器也会获得非常高的权限。
当准备启用即时调试时,需要意识到这一点。
远程调试时的安全
有两种方式可以增加远程调试时的安全性:限制谁可以连接到会话中和限制已连接上来的人的权限。
控制对调试会话的访问
如果进行通过调试器进行的远程调试或使用 进程服务器或KD连接服务器,本地网络上的任何计算机都可以尝试附加到调试会话上。
如果使用TCP、1394、COM或 命名管道,可以要求调试客户端提供密码。但是,密码在传输时是不会加密的,因此这些协议都不安全。
如果想调试服务器变得安全一些,必须使用安全套接字层(SSL)或安全管道(SPIPE)协议。
如果进行通过remote.exe进行的远程调试, 可以通过/u参数来防止未认证用户的连接。
限制客户端的权限
如果设置了一个内核调试会话,可以使用安全模式来限制调试器对主控机的干涉。
在用户模式下是不能使用安全模式的。可以通过使用.noshell (Prohibit Shell Commands) 命令来阻止调试器执行MS-DOS命令或运行外部程序。但是,客户端还是有很多其他方式可以用来干预计算机。
注意安全模式和.noshell都会同时阻止调试客户端和调试服务器的一些特定行为。没有办法只限制客户端而不限制服务器。
遗忘的进程服务器
在远程机器上开启进程服务器时,它是在后台运行的。
如果通过该进程服务器进行了远程调试然后关闭会话,进程服务器会继续运行。
忘记关闭的进程服务器会成为潜在的攻击目标。不再需要的进程服务器都应该关闭。使用Kill.exe实用程序或任务管理器来结束进程服务器。
安全模式
进行内核模式调试时,可以让调试器在安全模式下运行。这样可以避免调试器对主控机的影响,同时也不会显著的降低对目标机调试的自由度。
当允许远程客户端加入到调试会话时,推荐使用安全模式。
本节包含:
安全模式的功能
激活安全模式
安全模式的功能
当安全模式激活时,所有可以作用于主控机的命令都会无效,并且对符号服务器和调试器扩展有一些限制。
安全模式的效果如下:
一旦激活,安全模式不能再被关闭。
激活安全模式
安全模式仅适用于内核模式调试。它必须在调试会话开始之前激活——通过调试器命令行或调试器完全静止并且还没有被作为服务器使用。
要激活安全模式,使用下面的方法之一:
如果已经存在一个内核调试会话,并且需要知道是否处于安全模式下,可以使用不带参数的.secure命令。这可以显示出当前安全模式的状态。
安全模式被激活之后,即使结束调试会话也不能关闭它。只要调试器本身还在运行,安全模式就还存在。