Direct Syscalls
hackingDéfinition
Les direct syscalls (ou syscalls directs) sont une technique d'évasion qui exécute les appels système Windows directement via des instructions assembleur (syscall/sysenter) sans passer par les fonctions de ntdll.dll ou kernel32.dll. Cette approche contourne les hooks userland installés par les EDR dans ces bibliothèques pour surveiller les activités des processus.
Les EDR modernes fonctionnent partiellement en injectant des hooks dans les fonctions d'API Windows (NtCreateFile, NtReadVirtualMemory, NtAllocateVirtualMemory, etc.) dans l'espace d'adressage de chaque processus. Ces hooks redirigent l'exécution vers le code de l'EDR avant d'appeler la vraie fonction, permettant une inspection des arguments et un blocage si nécessaire.
Les direct syscalls court-circuitent ces hooks en utilisant directement les numéros de syscall (System Service Numbers - SSN) pour déclencher la transition kernel sans passer par ntdll. Le code assembleur typique est : mov r10, rcx; mov eax, SSN; syscall; ret. Pour NtAllocateVirtualMemory, l'attaquant inclut directement ce stub dans son code plutôt que d'appeler la fonction ntdll.
Les défis incluent : les SSN varient selon les versions de Windows (NtAllocateVirtualMemory est 0x0018 sur Windows 10 1909 mais différent sur d'autres versions), nécessitant une résolution dynamique des SSN. Des techniques comme Hell's Gate et Halo's Gate extraient les SSN depuis le code des fonctions ntdll en mémoire, même si elles sont hookées (les hooks modifient les premiers octets mais les instructions mov eax, SSN sont généralement à un offset fixe).
Des variantes avancées incluent : indirect syscalls (exécuter le syscall depuis l'intérieur de ntdll.dll pour que le kernel voie une adresse de retour dans ntdll et non dans du code malveillant), et le Kernel Callback Table hijacking pour des opérations encore plus discrètes.
Fonctionnement
Exemple de direct syscall pour NtAllocateVirtualMemory : inclure le stub assembleur dans le binaire, récupérer le SSN dynamiquement depuis ntdll (parsing PE pour trouver la fonction, lire les octets d'instruction mov eax, [SSN]), puis appeler le stub directement. Des frameworks comme SysWhispers3 et HellsGate automatisent cette résolution dynamique des SSN et la génération de stubs pour des dizaines de fonctions NT.
Exploitation offensive
Les payloads utilisant des direct syscalls peuvent effectuer des allocations mémoire, des injections de processus, et des accès à LSASS sans que les hooks des EDR ne capturent ces opérations. Des outils comme Havoc C2 et Brute Ratel C4 utilisent des direct syscalls par défaut pour minimiser les détections EDR.
Détection et mitigation
Les EDR basés sur kernel (ETW Threat Intelligence, kernel callbacks) détectent les syscalls directs car ils s'exécutent au niveau kernel où les hooks userland n'ont pas d'effet. La surveillance des KiSystemCall64 (le point d'entrée kernel des syscalls) via PatchGuard et les kernel callbacks permet de détecter les patterns de syscalls anormaux (fréquence, séquences, processus source).
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés. 2.1.7
Un projet cybersécurité ?
Expert dispo · Réponse 24h