2

每当想要从 Visual Studio 附加到进程时,都会收到以下讨厌的消息:

附加安全警告

这个问题及其答案显示了摆脱它的斗争。这篇Microsoft 文章告诉我们附加调试进程/机器的潜在危险:

但是,许多开发人员没有意识到安全威胁也可能朝相反的方向发展。被调试进程中的恶意代码可能会危及调试机器的安全性:有许多安全漏洞需要防范。

问题:被调试的进程如何能够利用调试进程?(我只对几个亮点感兴趣,因为我想人们可以写一本关于它的书)。

而且,在本地机器的w3wp.exe进程上调试时出现这个警告的目的是什么(我想绝大多数调试会话都发生在开发机器内)。如果本地机器的 w3wp 进程受到威胁,那么无论如何你都会遇到大麻烦。

4

2 回答 2

2

当您在调试对象中执行 eval 某些操作时,您实际上是在调试器上运行代码。这就是潜在的安全问题所在。

例如,假设调试器有一些类型会将 natvis 加载到调试器中。并假设 C++ 表达式评估器中有一个安全漏洞,允许通过 natvis 进行缓冲区溢出攻击。只需调试某个进程,远程进程就可以控制您的本地计算机。当然这不太可能,但调试器并没有针对这种攻击进行强化。调试的本质意味着您必须让任何代码运行。

另一方面,一旦一个进程被调试,调试器就拥有和它一样的权限。你可以做任何你想做的事。

附加到未知用户的进程时会弹出以下警告。请参阅这篇文章: https ://msdn.microsoft.com/ro-ro/library/ms241736.aspx

于 2017-04-20T05:34:21.290 回答
2

当您附加到使用受限用户帐户运行的进程时,您会收到此警告。与 w3wp.exe 一样,Web 服务器通常配置有这样的帐户,以便攻击者在弄清楚如何入侵 Web 服务器后不会造成太大的破坏。请注意您通常如何使用具有管理员权限的帐户来调试 Web 服务器。

这会打开一个通用安全漏洞,该漏洞与“粉碎攻击”所利用的漏洞非常相似。特权升级,非特权进程利用另一个进程的特权。管道是调试器传输,让调试器控制被调试对象的通道。如果进程在另一台机器上运行,我认为是套接字,如果它在同一台机器上运行,则认为是命名管道。受感染的进程可能会伪造调试器解释为正常响应的消息。一切皆有可能,没有什么是简单的,这些都没有记录。故意地。

请注意,当 w3wp.exe 在本地运行时,您仍然如何使用远程调试器。它通常是 64 位进程,VS 是 32 位,需要远程调试器 (msvsmon.exe) 来弥补位数差异。

这是一种攻击场景,Microsoft 不得不举手,并且不能再保证这种攻击不会成功并对您的机器造成真正的损害。攻击面太大。因此他们显示对话框,您必须将其解释为“我们不再对接下来发生的事情负责”。提起诉讼时的合理否认。它显示的信息实际上并不能用于判断进程是否受到损害,但这是他们得到的全部信息。生命太短暂了,每次单击“附加”时都不必担心,律师从来没有让程序员的工作变得更轻松:)

于 2017-04-20T07:34:20.440 回答