实验性的 Windows x64 内核 Rootkit。

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/eversinc33/Banshee

Banshee项目简介

Banshee是一个Windows Rootkit的实现,用于学习内核驱动程序的开发。Banshee主要实现以下技术:

技术点

  • Windows Rootkit技术
  • 内核驱动程序开发
  • Direct Kernel Object Modification(DKOM)

项目用途

  • 通过调用ZwTerminateProcess函数在内核模式下终止任何进程
  • 通过设置内核回调到进程创建来“屏蔽”进程,如果目标进程被创建,Banshee会将目标进程的CreationStatus设置为STATUS_ACCESS_DENIED。
  • 通过修改EPROCESS结构体来更改任何进程的保护级别
  • 将任何进程令牌提升到SYSTEM
  • 隐藏任何进程

由于该项目的代码质量较差,该项目主要用于教育目的。可以将Banshee集成到您的工具中,在您的项目中包含Banshee.hpp文件,调用相应函数即可。Banshee的功能可以通过BansheeClient.exe来测试,但需要注意的是,该项目可能会导致蓝屏,建议在虚拟机中运行。

猫头鹰

ad1a1b7183232429

 

 

最近学习了一些关于Windows rootkit的知识,这里是我自己实现的一些技术。有关概述,请参见下面的特性

由于代码质量不好,我只是在学习内核驱动程序开发,因此主要是为了教育目的,不适用于实际使用。

什么是Rootkit?

http://phrack.org/issues/55/5.html

用法

您可以将猫头鹰集成到您的工具中,方法是在您的项目中包含Banshee.hpp文件,例如:

Banshee banshee = Banshee();
banshee.Install(driverPath);
banshee.Initialize();

int targetPid = GetDefenderPID();    // 这将是您的实现
banshee.IoCtlKillProcess(targetPid); // 指示猫头鹰杀死目标进程

所有特性的示例实现在./BansheeClient/BansheeClient.cpp的命令行客户端中找到。

ad1a1b7183232448

 

 

测试和调试驱动程序

您需要启用测试签名才能加载驱动程序。我还建议为内核启用调试。

从管理员提示符运行以下命令,然后重新启动:

bcdedit /set testsigning on
bcdedit /debug on

之后,您可以在编译解决方案后使用以下命令运行客户端:

.\x64\Debug\BansheeClient.exe C:\Users\eversinc33\source\repos\Banshee\x64\Debug\Banshee.sys

在虚拟机中运行此命令并创建快照。在开发时可能会经常出现蓝屏并可能会损坏系统。请注意。

特性

让我们所有人都进入内核空间!

通过PID杀死任何进程

从内核空间简单地调用ZwTerminateProcess来终止任何进程。

“埋葬”进程

终止进程,但它们会复活?通过设置内核回调来避免它重启以埋葬进程创建。

如果创建目标进程,则Banshee将将目标进程的CreationStatus设置为STATUS_ACCESS_DENIED

匹配不区分大小写的子字符串 - 例如,要阻止defender,请使用defender运行bury,然后kill <defender pid>,它将不再返回,因为所有具有defender的映像完整路径的进程创建事件都将被阻止。

对于此功能,必须在链接时指定INTEGRITYCHECKhttps://learn.microsoft.com/en-us/cpp/build/reference/integritycheck-require-signature-check?view=msvc-170)。

通过PID更改任何进程的保护级别

这是通过修改描述进程属性的内核对象EPROCESS结构完成的。它还保存一个指定进程保护级别的值。

在我的机器上,该值可以在偏移量0x87a找到。由于该偏移量是动态的,因此我们可以从PspIsProtectedProcessLight中动态解析它,而不是硬编码它(感谢@never_unsealed的技巧):

ad1a1b7183232502

 

由于我们在Ring 0中操作,因此可以直接修改此值(即直接内核对象修改或DKOM)。

不同保护级别的值可以在Windows Internals Part 1(第7版(英文)第115页)中找到。

将任何进程令牌提升为SYSTEM

EPROCESS还保存了当前访问令牌的指针,因此我们只需将其指向例如进程4(SYSTEM)的令牌即可将任何进程提升为SYSTEM

隐藏PID进程

同样,EPROCESS对此有所帮助-它包含一个名为ActiveProcessLink的双向链接列表的LIST_ENTRY,Windows通过查询此列表来枚举正在运行的进程。如果我们简单地取消链接一个条目,我们就可以将我们的进程从Process Monitor或任务管理器等工具中隐藏。

*这可能会导致蓝屏,例如当隐藏的进程关闭或由于Patchguard扫描内核内存而关闭时。

待办事项* 从内核空间进行Shellcode注入

鸣谢

标签:工具分享, 主机安全, 本地提权, 进程隐藏