Yaxser/Backstab

杀死受 EDR 保护的进程

有这些本地管理员凭据,但 EDR 挡在路上了吗?取消挂钩或直接系统调用对 EDR 不起作用?好吧,为什么不直接杀了它?
Backstab 是一种工具,能够通过利用 Microsoft 签名的 sysinternals 的 Process Explorer (ProcExp) 驱动程序来杀死受反恶意软件保护的进程。

它能做什么?

  1. Usage: backstab.exe <-n name || -p PID> [options]
  2. -n, Choose process by name, including the .exe suffix
  3. -p, Choose process by PID
  4. -l, List handles of protected process
  5. -k, Kill the protected process by closing its handles
  6. -x, Close a specific handle
  7. -d, Specify path to where ProcExp will be extracted
  8. -s, Specify service name registry key
  9. -u, Unload ProcExp driver
  10. -a, adds SeDebugPrivilege
  11. -h, Print this menu
  12. Examples:
  13. backstab.exe -n cyserver.exe -k [kill cyserver]
  14. backstab.exe -n cyserver.exe -x E4C [Close handle E4C of cyserver]
  15. backstab.exe -n cyserver.exe -l [list all handles of cyserver]
  16. backstab.exe -p 4326 -k -d c:\\driver.sys [kill protected process with PID 4326, extract ProcExp driver to C:\ drive]

这怎么可能?

ProcExp 有一个签名的内核驱动程序,它在启动时加载,它允许它杀死即使作为管理员也无法杀死的句柄。当您使用 UI 时,您无法终止受保护的进程,但您可以终止它的句柄,因为 ProcExp UI 指示内核驱动程序终止这些句柄。Backstab 做同样的事情,但没有 UI 元素。

操作安全

这是发生的事情的简要说明

  1. 嵌入式驱动程序被删除到磁盘
  2. 创建 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下的注册表项
  3. 获取权限 SE_PRIVILEGE_ENABLED 是因为需要加载驱动
  4. 使用 NtLoadDriver 加载驱动程序以避免创建服务
  5. 创建的注册表项被删除(执行期间服务不可见)
  6. 与驱动程序的通信是通过使用 DeviceIoControl
  7. 对于句柄枚举,调用 NtQuerySystemInformation

    你还应该知道的

  8. 该工具的行为模仿 ProcExp 的行为。ProcExp 将驱动程序拖放到磁盘,在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下创建注册表项,调用 NtLoadDriver,然后删除注册表项

  9. 您可以指定将驱动程序拖放到的位置和服务名称
  10. 完成后,应用程序将卸载驱动程序。通过首先重新创建注册表项然后调用 NtUnloadDriver 来卸载驱动程序
  11. 加载的驱动程序由 MS 签名
  12. 该进程不会尝试直接杀死受保护的进程句柄,它会指示 ProcExp 驱动程序杀死它们。您不会被指控试图篡改任何流程

    进一步的研究

    虽然工具的目的是列出和杀死句柄,但机会是巨大的。可以将句柄复制到您自己的进程而不是杀死它们。
    这可能允许在您写入文件、触发事件、保持互斥锁的位置进行更深入的篡改。
    为了支持进一步的研究,我尝试使代码可读并将其拆分为许多方法以方便重用,我还对所有与 ProcExp 相关的方法进行了描述。请随时通过Twitter电子邮件与我联系

    Credits

  • 作者:Yasser Alhazmi (@Yas_o_h)
  • Pavel Yosifovich:(@Zodiacon)在他很棒的Windows 内部课程中向我们提到,像 ProcExp 这样的内核驱动程序可能会造成太多的意外损坏
  • Cornelis de Plaa @Cn33liz和 Outflank Team @OutflankNL:对于Ps-Tools和他们出色的 Github 存储库,总是提供丰富的信息
  • Mark Russinovich:ProcExp 和所有 Sysinternals 工具!