Indirekte Syscalls
Zur Systemaufrufinstruktion innerhalb von ntdll springen, statt eine eigene mitzubringen, damit der Aufrufstapel normal aussieht. Ein Zug in einem Wettrüsten, das seit zehn Jahren läuft.
Der Hintergrund: Sicherheitsprodukte hooken seit Langem die User-Mode-Funktionen in ntdll, um zu sehen, was ein Prozess vorhat. Der Gegenzug waren direkte Systemaufrufe — die Instruktion im eigenen Code platzieren und die Bibliothek komplett umgehen. Das funktionierte, hinterließ aber eine neue Spur, weil die Rücksprungadresse dann auf Speicher zeigt, der zu keinem bekannten Modul gehört — eine Anomalie, die trivial zu erkennen ist, sobald man weiß, wonach man suchen muss. Indirekte Systemaufrufe lösen das, indem sie die Register selbst setzen und dann zu der Instruktion springen, wo sie ohnehin schon liegt, innerhalb der Bibliothek — was einen Stack ergibt, der sich kaum von einem gewöhnlichen unterscheiden lässt. Die Erkennung hat sich entsprechend zur vollständigeren Stack-Rekonstruktion verschoben und zu den Callbacks des Kernels selbst, die außerhalb der Reichweite des Prozesses liegen.