在用户界面特权隔离时代仍然可能进行粉碎攻击吗?

信息安全 视窗 开发 特权升级
2021-08-19 02:39:17

在 Windows 引入用户界面特权隔离之前,任何应用程序都可以向同一桌面上的任何窗口发送各种窗口消息(粉碎攻击),从而允许提升特权。

现在,UIPI 阻止低权限应用程序将大多数窗口消息发送到高权限应用程序。维基百科说

用户界面特权隔离 (UIPI) 是 Windows Vista/2008 Server 中引入的一项技术,用于对抗粉碎攻击。通过使用强制完整性控制,它可以防止具有较低“完整性级别”(IL) 的进程将消息发送到较高 IL 进程(一组非常特定的 UI 消息除外)。

像它的声音应该处理的问题-根据这个PDF该条链接,只有WM_NULLWM_MOVEWM_SIZEWM_GETTEXTWM_GETTEXTLENGTHWM_GETHOTKEYWM_GETICONWM_RENDERFORMATWM_DRAWCLIPBOARDWM_CHANGECBCHAINWM_THEMECHANGED,和无证0x3130x31B允许。(PDF 确实提到了可能的拒绝服务攻击,从第 57 页开始,但虽然有问题,但这不是特权提升。我还粗略检查了负责的 DLL,似乎在 Windows 8 上它没有'实际上并没有注册导致问题的消息。)

看起来它们中的任何一个都没有由 引起的问题WM_TIMER,这导致目标进程跳转到任意地址。然而,微软博主(Raymond Chen)的这篇文章强烈暗示粉碎攻击仍然是一个问题:

您可以做的是让服务将程序注入会话,并让它以登录用户身份运行。(你必须让它以登录用户的身份运行以避免粉碎攻击。)

这个关于 UAC 的 Microsoft 文档指出,一些资源“仍然在不同特权级别的进程之间共享”:

  • 桌面窗口,实际上拥有屏幕表面。
  • 桌面堆只读共享内存。
  • 全局原子表。
  • 剪贴板

尽管如此,只是让这些东西可以从不同特权级别的进程中访问,似乎并不允许导致特权提升的实际跳转。即使进行了跳转,我认为数据执行保护也会阻止注入的代码实际运行。

那么,SYSTEM在低权限用户的桌面上运行进程的窗口是否仍然让该用户有机会提升权限?

1个回答

UIPI 确实阻止具有较低完整性级别的进程将 aWM_TIMEREM_GETLINE消息发送到较高完整性级别的进程。这是两种可以被滥用来提升系统特权的消息类型。较低完整性级别的进程仍然可以向高级进程发送有限的消息类型,但它们不能用于控制进程的执行。DEP而言,您可以使用WM_TIMEREM_GETLINE开始执行ROP 链在这种情况下,您需要找到允许您将堆栈(这是WM_TIMER回调将执行发送到的位置)旋转到包含ROP 链中地址的新位置的操作码