Windows x64内核Rootkit自动化工具

关于Banshee: 自动化Windows x64内核Rootkit

图片[1]-Windows x64内核Rootkit自动化工具-山海云端论坛

什么是Rootkit?

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

使用

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

<code>Banshee banshee = Banshee(); banshee.Initialize(); int targetPid = GetDefenderPID(); // this would be your implementation banshee.KillProcess(targetPid); // instruct banshee to kill the targetprocess</code>

命令行客户端中所有功能的示例实现见。/ BansheeClient/BansheeClient.cpp:

图片[2]-Windows x64内核Rootkit自动化工具-山海云端论坛

特征

大家上车,我们要去内核乐园!

  • 杀死进程:ZwTerminateProcess只是从内核区域调用来终止任何进程。
  • 更改保护级别:这是通过修改EPROCESS结构来完成的,该结构是描述进程属性的内核对象。它还包含一个指定进程保护级别的值。
  • 将任何进程令牌提升到SYSTEM:EPROCESS还保存了一个指向当前访问令牌的指针,所以我们可以让它指向进程4(SYSTEM)的令牌,以将任何进程提升到SYSTEM。
  • 枚举和擦除内核回调:目前,只有Process-和Thread-Creation内核回调被枚举,方法是解析PsSetCreateNotifyProcess/ThreadRoutine例程以到达私有Psp*例程,然后解析存储内核回调的数组的地址。使用erase,回调可以通过将函数指针指向Banshee中的空函数来删除。
  • 保护驱动程序文件:通过挂接MySQL文件系统的IRP_MJ_CREATE处理程序,我们可以阻止任何进程打开我们的驱动程序文件的句柄(这可能很快就会变成过滤器驱动程序的概念)。
  • 来自内核的键盘记录:使用未文档化的gafAsyncKeyState函数,我们可以从会话中解析Replikes,除了阅读内存外,不需要使用任何API调用。
  • 通过SharedMemory进行通信:Banshee不像大多数驱动程序那样通过IOCTL通信,而是通过共享内存通信。这样就没有DriverObject需要注册,这将指向我们的未备份内存区域,并将直接导致反rootkit软件到我们身上。我们仍然可以使用NMI回调,但希望我计划的自定义映射器应该可以解决这个问题。
  • Patchguard触发功能:这些只能与补丁保护旁路一起使用,或者在实验室环境中使用,因为它们会触发BSOD。
  • 通过PID隐藏进程:EPROCESS包含一个名为LIST_ENTRY的双向链表的ActiveProcessLink,Windows会查询该链表以枚举正在运行的进程。如果我们简单地取消链接这里的一个条目,我们就可以隐藏我们的流程,不让Process Monitor或Task Manager这样的工具看到。这可能会导致蓝屏,例如当进程被隐藏时关闭,或者由于补丁保护扫描内核内存。

测试/调试驱动程序

我建议为内核启用调试。在管理提示符下运行以下命令,然后重新启动:

<code>bcdedit /debug on</code>

然后用kdmapper加载驱动程序。

然后,您可以在编译解决方案后运行客户端,例如:

<code>.\x64\Debug\BansheeClient.exe</code>

在虚拟机中运行此程序,使用WinDbg调试此虚拟机并在此之前创建快照。你可能会蓝屏很多发展时。

项目地址:

https://github.com/eversinc33/Banshee

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容