
Kernel-Modus-Treiber zur Erhöhung von Prozessberechtigungen
EPROCESS durch ein System-Token ermöglicht, wodurch die Berechtigungen des Prozesses effektiv erhöht werden. Der Treiber ist für die Verwendung mit einer Benutzermodus-Anwendung konzipiert, die dem Treiber eine Prozess-ID über einen IOCTL sendet.Wenn ein Prozess erstellt wird, erbt er das Token des Benutzers, der ihn erstellt hat. Das Token wird vom System verwendet, um zu bestimmen, welche Aktionen der Prozess ausführen kann. Das Token enthält Informationen über die Sicherheitskennung (SID) des Benutzers, Gruppenmitgliedschaften und Berechtigungen.

Das Token-Mitglied befindet sich am Offset 0x4b8 in der _EPROCESS-Struktur, einer Datenstruktur, die ein Prozessobjekt darstellt. Das Token-Mitglied ist in der _EX_FAST_REF-Struktur definiert, einem Union-Typ, der entweder einen Zeiger auf ein Kernel-Objekt oder einen Referenzzähler speichern kann, abhängig von der Größe des Zeigers. Der Offset der _EX_FAST_REF-Struktur innerhalb von _EPROCESS hängt von der spezifischen Windows-Version ab, liegt aber in neueren Windows-Versionen typischerweise bei 0x4b8.
Windows-Build-Nummer-Token-Offsets für x64- und x86-Architekturen
Die _EX_FAST_REF-Struktur in Windows enthält drei Member: Object, RefCount und Value.

Um das Prozess-Token in _EX_FAST_REF anzuzeigen, übergeben wir die Adresse der _EX_FAST_REF-Struktur, die das Token enthält, die sich typischerweise am Offset 0x4b8 in der _EPROCESS-Struktur befindet.

Sie können entweder einen privilegierten Prozess starten oder eine bereits vorhandene Prozess-ID erhöhen.

Für diese Erklärung konzentrieren wir uns auf die zweite Option und verwenden CMD als Beispiel.

Geerbtes Token

Senden Sie die Prozess-ID über einen IOCTL an den Treiber.

Nach Erhalt der PID von der Benutzermodus-Anwendung verwendet der Treiber diese, um einen Zeiger auf die _EPROCESS-Struktur für den Zielprozess zu erhalten. Der Treiber greift dann auf das Token-Mitglied der _EPROCESS-Struktur zu, um einen Zeiger auf das Prozess-Token zu erhalten, das er durch das System-Token ersetzt, wodurch der Sicherheitskontext des Prozesses effektiv auf den des Systems geändert wird. Wenn der Treiber das Token-Mitglied jedoch nicht korrekt in der _EPROCESS-Struktur findet oder der Offset des Tokens nicht 0x4b8 ist, kann der Treiber das System oder den Zielprozess zum Absturz bringen. Dieses Problem wird in den nächsten Updates behoben.

Cmd-Token nachher
| x64 Offsets | x86 Offsets |
|---|
| 0x0160 (late 5.2) | 0x0150 (3.10) |
| 0x0168 (6.0) | 0x0108 (3.50 to 4.0) |
| 0x0208 (6.1) | 0x012C (5.0) |
| 0x0348 (6.2 to 6.3) | 0xC8 (5.1 to early 5.2) |
| 0x0358 (10.0 to 1809) | 0xD8 (late 5.2) |
| 0x0360 (1903) | 0xE0 (6.0) |
| 0x04B8 | 0xF8 (6.1) |
| 0xEC (6.2 to 6.3) | |
| 0xF4 (10.0 to 1607) | |
| 0xFC (1703 to 1903) | |
| 0x012C |


Die Prozessberechtigungen, Gruppen und Rechte
