Windows Kernel Rootkit en Rust (shadow-rs)
Hoy os traemos un interesante proyecto llamado shadow-rs, diseñado para crear un rootkit en el kernel de Windows utilizando el lenguaje Rust. El objetivo es demostrar técnicas avanzadas para el desarrollo de rootkits, aprovechando las características de seguridad y rendimiento del lenguaje Rust. CaracterísticasProcessProcess (Hide / Unhide) ✅Process Signature (PP / PPL) ✅Process Protection (Anti-Kill / Dumping) ✅Elevate Process to System ✅Terminate Process ✅Lists protected and hidden processes currently on the system ✅ThreadThread (Hide / Unhide) ✅Thread Protection (Anti-Kill) ✅Lists protected and hidden threads currently on the system ✅DriverDriver (Hide / Unhide) ✅Enumerate Driver ✅Support for mapping the driver in memory ✅Driver Signature Enforcement (DSE)DSE (Enable / Disable) ✅KeyloggerKeylogger (Start / Stop) ✅CallbacksList / Remove / Restore CallbacksPsSetCreateProcessNotifyRoutine ✅PsSetCreateThreadNotifyRoutine ✅PsSetLoadImageNotifyRoutine ✅CmRegisterCallbackEx ✅ObRegisterCallbacks (PsProcessType / PsThreadType) ✅Listing currently removed callbacks ✅ModuleEnumerate Module ✅RegistryRegistry Protection (Anti-Deletion e Overwriting) ✅InjectionProcess Injection - Shellcode (ZwCreateThreadEx) ✅APC Injection - Shellcode ✅DLL Injection (ZwCreateThreadEx) ✅Intrucciones de compilaciónPara compilar el proyecto, asegúrate de tener instalada la toolchain de Rust.DriverPara compilar el driver, primero ve a la carpeta driver y luego ejecuta el siguiente comando (cuando realices la primera compilación, debes ser administrador, pero después no será necesario):cargo make default --releaseEste driver se puede mapear usando kdmapper entre otras herramientas, por ejemplo, para poner soporte de mapeo, usa el comando:cargo make default --release --features mapperClientePara crear el cliente, primero ve a la carpeta client y luego ejecuta el siguiente comando:cargo build --release Dado que algunas características del rootkit no son compatibles debido al mapeo del controlador, utiliza el siguiente comando para crear el cliente solo con los comandos que se pueden ejecutar con el mapping:cargo build --release --features mapperIntrucciones de instalaciónHabilitar el modo de prueba o el modo de firma de pruebabcdedit /set testsigning on [Opcional] Depuración mediante Windbgbcdedit /debug on bcdedit /dbgsettings net hostip:<IP> port:<PORT>Crear/iniciar servicioPuede utilizar el Service Control Manager o el OSR Driver Loader para cargar el controlador.Más info y desarrollo de proyecto en https://github.com/joaoviictorti/shadow-rs
Características
- Process (Hide / Unhide) ✅
- Process Signature (PP / PPL) ✅
- Process Protection (Anti-Kill / Dumping) ✅
- Elevate Process to System ✅
- Terminate Process ✅
- Lists protected and hidden processes currently on the system ✅
- Thread (Hide / Unhide) ✅
- Thread Protection (Anti-Kill) ✅
- Lists protected and hidden threads currently on the system ✅
- Driver (Hide / Unhide) ✅
- Enumerate Driver ✅
- Support for mapping the driver in memory ✅
- DSE (Enable / Disable) ✅
- Keylogger (Start / Stop) ✅
- List / Remove / Restore Callbacks
- PsSetCreateProcessNotifyRoutine ✅
- PsSetCreateThreadNotifyRoutine ✅
- PsSetLoadImageNotifyRoutine ✅
- CmRegisterCallbackEx ✅
- ObRegisterCallbacks (PsProcessType / PsThreadType) ✅
- Listing currently removed callbacks ✅
- Enumerate Module ✅
- Registry Protection (Anti-Deletion e Overwriting) ✅
- Process Injection - Shellcode (ZwCreateThreadEx) ✅
- APC Injection - Shellcode ✅
- DLL Injection (ZwCreateThreadEx) ✅
Intrucciones de compilación
Para compilar el proyecto, asegúrate de tener instalada la toolchain de Rust.
Driver
Para compilar el driver, primero ve a la carpeta driver y luego ejecuta el siguiente comando (cuando realices la primera compilación, debes ser administrador, pero después no será necesario):
cargo make default --release
cargo make default --release --features mapper
cargo build --release
cargo build --release --features mapper
Intrucciones de instalación
bcdedit /set testsigning on
bcdedit /debug on
bcdedit /dbgsettings net hostip:<IP> port:<PORT>