在 Windows 引入用户界面特权隔离之前,任何应用程序都可以向同一桌面上的任何窗口发送各种窗口消息(粉碎攻击),从而允许提升特权。
现在,UIPI 阻止低权限应用程序将大多数窗口消息发送到高权限应用程序。维基百科说:
用户界面特权隔离 (UIPI) 是 Windows Vista/2008 Server 中引入的一项技术,用于对抗粉碎攻击。通过使用强制完整性控制,它可以防止具有较低“完整性级别”(IL) 的进程将消息发送到较高 IL 进程(一组非常特定的 UI 消息除外)。
像它的声音应该处理的问题-根据这个PDF该条链接,只有WM_NULL
,WM_MOVE
,WM_SIZE
,WM_GETTEXT
,WM_GETTEXTLENGTH
,WM_GETHOTKEY
,WM_GETICON
,WM_RENDERFORMAT
,WM_DRAWCLIPBOARD
,WM_CHANGECBCHAIN
,WM_THEMECHANGED
,和无证0x313
和0x31B
允许。(PDF 确实提到了可能的拒绝服务攻击,从第 57 页开始,但虽然有问题,但这不是特权提升。我还粗略检查了负责的 DLL,似乎在 Windows 8 上它没有'实际上并没有注册导致问题的消息。)
看起来它们中的任何一个都没有由 引起的问题WM_TIMER
,这导致目标进程跳转到任意地址。然而,微软博主(Raymond Chen)的这篇文章强烈暗示粉碎攻击仍然是一个问题:
您可以做的是让服务将程序注入会话,并让它以登录用户身份运行。(你必须让它以登录用户的身份运行以避免粉碎攻击。)
这个关于 UAC 的 Microsoft 文档指出,一些资源“仍然在不同特权级别的进程之间共享”:
- 桌面窗口,实际上拥有屏幕表面。
- 桌面堆只读共享内存。
- 全局原子表。
- 剪贴板
尽管如此,只是让这些东西可以从不同特权级别的进程中访问,似乎并不允许导致特权提升的实际跳转。即使进行了跳转,我认为数据执行保护也会阻止注入的代码实际运行。
那么,SYSTEM
在低权限用户的桌面上运行进程的窗口是否仍然让该用户有机会提升权限?