🔍 Contexte

Publié le 2 juillet 2023 sur le blog personnel de memn0ps (mis à jour en 2025), cet article présente RedLotus, un bootkit UEFI Windows expérimental écrit en Rust, développé à des fins de recherche et d’éducation en sécurité offensive.

🛠️ Description technique

RedLotus (codename) est implémenté comme un UEFI_RUNTIME_DRIVER (redlotus.efi) qui s’exécute avant ntoskrnl.exe. Il contourne le Driver Signature Enforcement (DSE) via un hook de pointeur .data, et installe un mapper de drivers en mode noyau (redlotus.sys) contrôlé depuis l’espace utilisateur via un client Rust (client.exe).

⚙️ Flux d’exécution (13 étapes)

  1. Chargement de redlotus.efi depuis un shell UEFI (USB FAT32)
  2. Hook de ImgArchStartBootApplication dans bootmgfw.efi
  3. Hook de OslFwpKernelSetupPhase1 et BlImgAllocateImageBuffer dans winload.efi
  4. Mapping manuel du driver noyau redlotus.sys
  5. Copie des headers PE, sections, relocations, résolution des imports depuis ntoskrnl.exe
  6. Hook du DriverEntry de disk.sys pour rediriger vers redlotus.sys
  7. Restauration des octets originaux de OslFwpKernelSetupPhase1
  8. Transfert de contrôle vers ntoskrnl.exe via OslArchTransferToKernel
  9. Exécution de redlotus.sys via le hook DriverEntry
  10. Restauration des octets volés de disk.sys
  11. Hook .data ptr sur xKdEnumerateDebuggingDevices dans ntoskrnl.exeHalDispatchHook
  12. Communication user-mode → kernel via NtConvertBetweenAuxiliaryCounterAndPerformanceCounter avec magic value 0xdeadbeef
  13. Second-stage manual mapping d’un driver non signé supplémentaire

🎯 Techniques clés

  • Hook de pointeur .data pour la communication user-mode/kernel
  • Trampoline hooks 64-bit sur des fonctions de boot Windows
  • Manual mapping de drivers non signés sans patcher le kernel
  • Pattern scanning pour localiser les fonctions cibles (indépendant des offsets hardcodés)
  • Inspiré de BlackLotus (CVE-2022-21894), ESPecter, umap, Bootlicker

🖥️ Compatibilité

  • Windows 10 Home 10.0.19045 (Build 19045)
  • Windows 11 Home 10.0.22621 (Build 22621)
  • Nécessite Secure Boot désactivé (ou BYOVB)

📄 Nature de l’article

Il s’agit d’une publication de recherche technique à visée éducative, documentant l’implémentation complète d’un bootkit UEFI en Rust. Le projet est explicitement présenté comme un PoC sans mécanisme de furtivité ni persistance.

🧠 TTPs et IOCs détectés

TTP

  • T1542.003 — Pre-OS Boot: Bootkit (Defense Evasion)
  • T1014 — Rootkit (Defense Evasion)
  • T1055 — Process Injection (Defense Evasion)
  • T1562.001 — Impair Defenses: Disable or Modify Tools (Defense Evasion)
  • T1106 — Native API (Execution)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1547.001 — Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder (Persistence)

IOC

  • CVEs : CVE-2022-21894NVD · CIRCL
  • Fichiers : redlotus.efi
  • Fichiers : redlotus.sys
  • Fichiers : client.exe
  • Fichiers : bootmgfw.efi
  • Fichiers : winload.efi
  • Fichiers : disk.sys
  • Fichiers : testing123.sys
  • Fichiers : bootx64.efi

Malware / Outils

  • RedLotus (other)
  • BlackLotus (other)
  • ESPecter (other)
  • umap (tool)
  • Bootlicker (other)
  • EfiGuard (tool)

🟡 Indice de vérification factuelle : 50/100 (moyenne)

  • ⬜ memn0ps.github.io — source non référencée (0pts)
  • ✅ 23617 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 9 IOCs (IPs/domaines/CVEs) (10pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 7 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ 0/1 CVE(s) confirmée(s) (0pts)

🔗 Source originale : https://memn0ps.github.io/rusty-windows-uefi-bootkit/