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ísticas

Process

  • 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

  • Thread (Hide / Unhide) ✅
  • Thread Protection (Anti-Kill) ✅
  • Lists protected and hidden threads currently on the system ✅

Driver

  • Driver (Hide / Unhide) ✅
  • Enumerate Driver ✅
  • Support for mapping the driver in memory ✅

Driver Signature Enforcement (DSE)

  • DSE (Enable / Disable) ✅

Keylogger

  • Keylogger (Start / Stop) ✅

Callbacks

  • List / Remove / Restore Callbacks
    • PsSetCreateProcessNotifyRoutine ✅
    • PsSetCreateThreadNotifyRoutine ✅
    • PsSetLoadImageNotifyRoutine ✅
    • CmRegisterCallbackEx ✅
    • ObRegisterCallbacks (PsProcessType / PsThreadType) ✅
  • Listing currently removed callbacks ✅

Module

  • Enumerate Module ✅

Registry

  • Registry Protection (Anti-Deletion e Overwriting) ✅

Injection

  • 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

Este driver se puede mapear usando kdmapper entre otras herramientas, por ejemplo, para poner soporte de mapeo, usa el comando:
cargo make default --release --features mapper
Cliente
Para 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 mapper

Intrucciones de instalación

Habilitar el modo de prueba o el modo de firma de prueba
bcdedit /set testsigning on
[Opcional] Depuración mediante Windbg
bcdedit /debug on
bcdedit /dbgsettings net hostip:<IP> port:<PORT>
Crear/iniciar servicio
Puede 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

Comentarios