0x00 概述
本文主要介绍Windows NT的内核模式Payload,称为“SassyKitdi”(LSASS+Rootkit+TDI)。这种Payload可以通过远程内核漏洞利用(例如:EternalBlue、BlueKeep、SMBGhost)以及本地内核漏洞利用(例如:恶意驱动程序)进行部署。从Windows 2000到Windows 10,这个漏洞的Payload是通用的,在Payload中不再需要携带DKOM偏移量。 Payload与用户模式不会进行任何交互,并使用传输驱动程序接口(TDI)创建反向TCP套接字,该接口是更现代的Winsock内核(WSK)的前身。LSASS.exe进程内存和模块随后通过网络发送,这些信息将转换为minidump文件发送到攻击者一侧,并通过使用Mimikatz等工具提取用户凭据。 PoC位于: https://github.com/zerosum0x0/SassyKitdi 其中,位置无关的Shellcode大小约为3300字节,完全使用Rust编程语言编写,其中使用了许多高级抽象。在这里,我将描述使用Rust语言来实现Shellcode需求的一些优势,并说明需要采取的防范措施。 SassyKitdi方法的简化示意图:![7f0cad752d1a83cd49d07657614cb16e.png](https://img-blog.csdnimg.cn/img_convert/7f0cad752d1a83cd49d07657614cb16e.png)
0x01 传输驱动程序接口
TDI是与所有类型的网络传输进行通信的传统方式。使用这种方式,可以建立与攻击者的反向TCP连接。其他Payload(例如绑定套接字、UDP)将遵循类似的方法。 在Rootkit中,TDI的使用并不普遍,但在一些书中已经进行了详细的说明,这些书可以作为参考: Vieler, R. (2007). Professional Rootkits. Indianapolis, IN: Wiley Technology Pub.Hoglund, G., & Butler, J. (2009). Rootkits: Subverting the Windows Kernel. Upper Saddle River, NJ: Addison-Wesley.
1.1 打开TCP设备对象
根据设备名称(在示例中为\Device\Tcp)可以找到TDI设备对象。本质上,我们将ZwCreateFile()内核API与设备名称一起使用,并通过文件扩展属性来传递选项。
pub type ZwCreateFile = extern "stdcall" fn(
FileHandle: PHANDLE,
AccessMask: ACCESS_MASK,
ObjectAttributes: POBJECT_ATTRIBUTES,
IoStatusBlock: PIO_STATUS_BLOCK,
AllocationSize: PLARGE_INTEGER,
FileAttributes: ULONG,
ShareAccess: ULONG,
CreateDisposition: ULONG,
CreateOptions: ULONG,
EaBuffer: PVOID,
EaLength: ULONG,
) -> NTSTATUS;