Kernel Karnage – 第 6 部分(最后一次呼叫)

随着这篇博文的发布,我的实习已经过去了一半;玩得开心的时候时间过得真快。 1. 介绍 - 状态报告 在这 6 周的时间里,我介绍了内核驱动程序和 EDR/AV 内核机制的几个方面。我一开始就研究了内核回调,以及为什么 EDR/AV 产品……继续阅读 Kernel Karnage – 第 6 部分(最后一次调用)→

来源:NVISO Labs _恶意软件

随着这篇博文的发布,我的实习已经过了一半;玩得开心的时候时间过得真快。

1. 介绍 - 状态报告

在这 6 周的时间里,我介绍了内核驱动程序和 EDR/AV 内核机制的几个方面。我首先研究了内核回调以及 EDR/AV 产品广泛使用它们的原因,以了解系统上发生的事情。我通过利用现有的针对 $vendor1 的工作并成功在受感染的系统上执行 Mimikatz 来确认这些概念。

然后我退后一步,深入研究了内核驱动程序的内部结构和工作原理,它如何与其他驱动程序和应用程序通信,以及如何使用 IRP MajorFunction 钩子拦截这些通信。

在我掌握了基础知识并熟悉了内核和内核调试器之后,我开始开发自己的驱动程序 Interceptor,它具有内核回调修补和 IRP MajorFunction 挂钩功能。我针对 $vendor2 对该驱动程序进行了测试,并得出结论,仅从内核空间攻击 EDR/AV 产品是不够的,还应考虑用户空间检测技术。

拦截器

为了解决这个问题,我使用 EarlyBird 技术开发了一个自定义 shellcode 注入器,它与 Interceptor 驱动程序相结合,能够部分绕过 $vendor2 并在受感染的系统上启动 meterpreter 会话。

拦截器

在取得这一小成功之后,我花了大量时间进行代码维护、重构、错误修复和研究,这才有了今天的博文。在这篇博文中,我想总结一下内核回调,解决了注册表和对象回调的问题,更详细地重新审视 shellcode 注入器,并再次与 $vendor2 展开战斗。让我们开始吧,好吗?

2. 最后一次调用

2.1 这个对象回调黑魔法是什么?

HANDLE POB_PRE_OPERATION_CALLBACK POB_POST_OPERATION_CALLBACK