Muss ich die Token-Berechtigungen anpassen, um CreateRemoteThread erfolgreich aufzurufen?
Ich entwickle eine Debugging-Funktion für meine Anwendung, mit der ich Deadlocks diagnostizieren kann. Die Anwendung läuft auf den Rechnern meines Kunden und daher erwarte ich eine breite Palette von Betriebssystemen, Sicherheitsrichtlinien usw.
Die von mir verwendete Technik besteht darin, eine Funktion in der Zielanwendung zu implementieren, die zusammen mit anderen Diagnoseinformationen Stapelverfolgungen für alle Threads generiert. Dies wird dann in eine Speicherzuordnungsdatei geschrieben. Außerdem erstelle ich eine Dienstprogrammanwendung, mit der die Erstellung des Diagnoseberichts ausgelöst und anschließend aus der Speicherzuordnungsdatei gelesen wird.
Da erwartet wird, dass die Zielanwendung tot ist, kann das Dienstprogramm keine Nachricht senden, um die Diagnosesammlung auszulösen. Stattdessen benutze ichCreateRemoteThread
damit ich sicher sein kann, einen live thread zu bekommen, der die arbeit erledigt.
Beachten Sie, dass sich dies von den üblicherweise verwendeten DLL-Injektionsmethoden unterscheidetLoadLibrary
als thread proc fürCreateRemoteThread
. Mein Thread proc ist ein Einstiegspunkt in die Zielanwendung. Also muss ich nicht anrufenWriteProcessMemory
.
Ich habe dies implementiert und in meinen Testumgebungen funktioniert es gut. Nach der Dokumentation vonCreateRemoteThread
Ich benötige ein Prozesshandle mit folgenden Zugriffsrechten:
PROCESS_CREATE_THREAD
, PROCESS_QUERY_INFORMATION
, PROCESS_VM_OPERATION
, PROCESS_VM_WRITE
, undPROCESS_VM_READ
Also habe ich diese Flaggen beim Anrufen übergebenOpenProcess
.
Nun endlich zu meiner Frage: Welche Privilegien muss mein Token haben, um angerufen werden zu können?OpenProcess
erfolgreich sein?
In meiner Testumgebung (Windows 7, UAC aktiviert, Administratorbenutzer) habe ich keine Probleme mit nur einem Standardtoken festgestellt. Ich habe verschiedene Beispielcodes gesehen, die das erwerbenSE_DEBUG_NAME
Privileg vor dem AnrufOpenProcess
. Ich vermute, das ist nötig fürWriteProcessMemory
Wenn ich DLL-Injection mache und dieses Privileg nicht brauche. Gibt es Szenarien, in denen ich die Berechtigungen meines Tokens anpassen müsste?
Ich weiß genau nichts über Windows-Sicherheit, daher würde ich mich über weise Worte von jedem freuen, der dies tut!