一个被调试的进程到底是如何危及调试进程(机器)的?
How exactly a debugged process can compromise the debugging process (machine)?
每当有人想附加到来自 Visual Studio 的进程时,都会收到这条令人讨厌的消息:
这个question and its answers show the struggle to get rid of it. This Microsoft article告诉我们附加调试的潜在危险process/machine:
However, many developers do not realize that the security threat can
also flow in the opposite direction. It is possible for malicious code
in the debuggee process to jeopardize the security of the debugging
machine: there are a number of security exploits that must be guarded
against.
问题:被调试进程如何利用调试进程? (我只对几个亮点感兴趣,因为我想人们可以写一本书)。
此外,在本地机器的 w3wp.exe
进程上调试时出现此警告的目的是什么(我想绝大多数调试会话都发生在开发机器中)。如果本地机器的 w3wp 进程被攻破,你就有大麻烦了。
当您在被调试程序中运行 eval 时,您实际上是在调试器上 运行ning 代码。这就是潜在的安全问题所在。
例如,假设被调试者有一些类型可以将 natvis 加载到调试器中。并假设 C++ 表达式计算器中有一个安全漏洞,允许通过 natvis 进行缓冲区溢出 运行 攻击。只需调试某个进程,远程进程就可以控制您的本地机器。当然这不太可能,但调试器并未针对此类攻击进行强化。调试的本质意味着你必须让任何代码 运行.
反过来说,一旦一个进程被调试,调试器就拥有和它一样的权限。你可以做任何你想做的事。
附加到未知用户的进程时会弹出下面的警告。见这篇文章:
https://msdn.microsoft.com/ro-ro/library/ms241736.aspx
当您附加到使用受限用户帐户运行的进程时,您会收到此警告。像 w3wp.exe 一样,Web 服务器通常配置有这样的帐户,以便攻击者在弄清楚如何破坏 Web 服务器后无法造成太大的破坏。请注意您通常如何使用具有管理员权限的帐户来调试 Web 服务器。
这会打开一个通用的安全漏洞,该漏洞与 "shatter attack" 所利用的漏洞非常相似。特权升级,非特权进程利用另一个进程的特权。管道是调试器传输,是让调试器控制被调试器的通道。如果进程在另一台机器上运行,我认为是一个套接字,如果它在同一台机器上运行,我认为是一个命名管道。受损进程可能会伪造调试器将其解释为正常响应的消息。一切皆有可能,没有什么是简单的,none 已记录在案。故意的。
请注意当 w3wp.exe 在本地运行时您仍然如何使用远程调试器。通常是64位进程,而VS是32位的,需要远程调试器(msvsmon.exe)来弥合位数差异。
这是一种微软不得不举手投降的攻击场景,不能再保证这样的攻击不会成功并对你的机器造成真正的损害。攻击面太大。因此他们显示对话框,您必须将其解释为 "we are no longer liable for what happens next"。当涉及到诉讼时,似是而非的否认。它显示的信息实际上并不能用来判断进程是否受到损害,但这是他们得到的全部信息。人生苦短,不必担心每次单击“附加”时,律师从来没有让程序员的工作变得更轻松 :)
每当有人想附加到来自 Visual Studio 的进程时,都会收到这条令人讨厌的消息:
这个question and its answers show the struggle to get rid of it. This Microsoft article告诉我们附加调试的潜在危险process/machine:
However, many developers do not realize that the security threat can also flow in the opposite direction. It is possible for malicious code in the debuggee process to jeopardize the security of the debugging machine: there are a number of security exploits that must be guarded against.
问题:被调试进程如何利用调试进程? (我只对几个亮点感兴趣,因为我想人们可以写一本书)。
此外,在本地机器的 w3wp.exe
进程上调试时出现此警告的目的是什么(我想绝大多数调试会话都发生在开发机器中)。如果本地机器的 w3wp 进程被攻破,你就有大麻烦了。
当您在被调试程序中运行 eval 时,您实际上是在调试器上 运行ning 代码。这就是潜在的安全问题所在。
例如,假设被调试者有一些类型可以将 natvis 加载到调试器中。并假设 C++ 表达式计算器中有一个安全漏洞,允许通过 natvis 进行缓冲区溢出 运行 攻击。只需调试某个进程,远程进程就可以控制您的本地机器。当然这不太可能,但调试器并未针对此类攻击进行强化。调试的本质意味着你必须让任何代码 运行.
反过来说,一旦一个进程被调试,调试器就拥有和它一样的权限。你可以做任何你想做的事。
附加到未知用户的进程时会弹出下面的警告。见这篇文章: https://msdn.microsoft.com/ro-ro/library/ms241736.aspx
当您附加到使用受限用户帐户运行的进程时,您会收到此警告。像 w3wp.exe 一样,Web 服务器通常配置有这样的帐户,以便攻击者在弄清楚如何破坏 Web 服务器后无法造成太大的破坏。请注意您通常如何使用具有管理员权限的帐户来调试 Web 服务器。
这会打开一个通用的安全漏洞,该漏洞与 "shatter attack" 所利用的漏洞非常相似。特权升级,非特权进程利用另一个进程的特权。管道是调试器传输,是让调试器控制被调试器的通道。如果进程在另一台机器上运行,我认为是一个套接字,如果它在同一台机器上运行,我认为是一个命名管道。受损进程可能会伪造调试器将其解释为正常响应的消息。一切皆有可能,没有什么是简单的,none 已记录在案。故意的。
请注意当 w3wp.exe 在本地运行时您仍然如何使用远程调试器。通常是64位进程,而VS是32位的,需要远程调试器(msvsmon.exe)来弥合位数差异。
这是一种微软不得不举手投降的攻击场景,不能再保证这样的攻击不会成功并对你的机器造成真正的损害。攻击面太大。因此他们显示对话框,您必须将其解释为 "we are no longer liable for what happens next"。当涉及到诉讼时,似是而非的否认。它显示的信息实际上并不能用来判断进程是否受到损害,但这是他们得到的全部信息。人生苦短,不必担心每次单击“附加”时,律师从来没有让程序员的工作变得更轻松 :)