| |
|
|
| Vor etwa una Jahr Yo en un Delphiforum veces una Interessante Fage gelesen, el mich seitdem no mehr losgelassen ha: Ist el Access Token, el Personalausweis uno Users el cada Prozess zugeordnet se, direkt änderbar? Normalerweise es el Token sólo encima el con OpenPocessToken a erlangende Handle y el API zugänglich, d.h. uno kann auch sólo el Bereiche des Tokens ändern, en el Winows encima el Handle Zugriff erlaubt. Como aber, si uno herausfinden podría como y wo el el eigenen Prozess zugeordnete Token se en el Speicher aufhält - wäre una direkter Zugriff posible, wären el Möglichkeiten y Auswirkungen unvorstellbar! Vor uno Tiempo Yo esta Búsqueda en marcha y en diesem Hilo se lo en el nächsten Tiempo en esta Búsqueda ir. Leider Yo heute a wenig Tiempo, en hier mehr a Carta (Geld es todos ), pero yo kann achon veces sagen, el Yo ya unos pocos interessante Sachen gefunden habe. |
|
|
| |
|
|
|
| Antes uno algo sucht es sinnvoll se a überlegen, como el qué sucht en etwa aussehen podría. Ein wichtiger Bestandteil uno Tokens Es el Userkennung (also el SID) des Users, dessen Ausweis el Token verkörpert. Wenn Yo mich como Andreas con mi Kennwort en el Rechner einlogge, dürfte en cada Token cada Programms el Yo starte Así que el Bytefolge des SIDs de Andreas posición - eigentlich logisch.
Als Prozess, el Yo untersuchen quería, Yo Notepad ausgewählt. Notepad es una einfacher Texteditor sin viel Beiwerk - el Umfang des zugewiesenen Prozessspeichers dürfte also no muy groß ser - una Untersuchung des Prozessspeichers also no besonders largo dauern y no allzuviele Fundstellen liefern, el no para Token gehören. TNT bietet una todo Menge Möglichkeiten, una Accountnamen en un hexadezimale SID-Bytefolge umzuwandeln - una su Yo genützt y así el SID en el Zwischenablage y später en el Función Speicher durchsuchen übertragen. El Startadresse el Búsqueda Yo en el Adresse 0. Gefunden Yo entonces genau que aquí...
[...]
...nämlich nada. Ein Token scheint se also no en el Userspeicher des jeweiligen Prozesses a befinden - aber wo sucht una continuación? In el Artikeln, el Yo encima el Token gelesen habe, war de uno Zuordnung a individual Prozessen gesprochen worden - así una Zuordnung muß sí no zwingendermaßen sólo en el Speicher des zugeordneten Prozesses stattfinden. Yo habe mich also entonces dazu entschlossen, me el Speicher otro Prozesse veces algo näher anzusehen. Als erstes Yo el Service LSASS.EXE ausgewählt. ¿Por qué gerade esta Prozess? Das ha algo con el Namensgebung a tun... Como LSASS.EXE una Service en el Sytem-Account es, mußte Yo TNT zuerst una vez como Service starten, qué encima el Menü de TNT bastante simplemente posible es. Danach Yo me el Heaps des Prozesses listen dejar. Auch hier Yo el Startadresse el Búsqueda otra vez en 0 gesetzt - entonces ging’s los. Bingo! Como haben wir sí ya algo...
[...]
Weitere wichtige Bestandteile uno Tokens son el LUIDs (64-Bit Kennzahlen) el Privilegien y deren jetziger Status (Atributos). Ein LUID läßt se relativ simplemente como hexadezimale Bytefolge de el Token-Infos-Registrierkarte herauskopieren - also hacer wir el veces. Das Privileg SeChangeNotifyPrivilege es en cada Account disponible, lo bietet se para una Búsqueda also a.
[...]
LUIDs de Privilegien posición en el Token siempre en Verbindung con ihren Attributen, also ihrem derzeitigen Status - wir brauchen also todavía el Status des Privilegs SeChangeNotifyPrivilege => Standardmäßig aktiviert = SE_PRIVILEGE_ENABLED_BY_DEFAULT = $1 Aktiviert = SE_PRIVILEGE_ENABLED = $2 Zusammen wäre el entonces $3, qué uno hexadezimalen Bytefolge de 03000000 entspricht. Das, Yo en me a suchen hätte, wäre also que aquí:
[...]
Und que aquí Yo gefunden:
[...]
Jetzt schauen wir veces, si en el Prozess LSASS.EXE una Heapblock son, el beides enthält - el SID y el Privileg. En me es el el 592 Bytes große Heapblock con el Adresse 750992, dessen Inhalt Yo entonces como hexadezimale Bytefolge darstellen dejar habe.
[...]
Um me todo algo näher ansehen a puede, Yo entonces el ganzen Block como hexadezimale Bytefolge en el Zwischenablage y danach en una Wordpad-Dokument kopiert. Tiempo schauen, Yo como habe... [box:bc6ba1a7d2] 00000000FFFFFF7FFC750B0000000000B8750B0018760B00D8760B0040760B0098760B00000000000800000018760B000700000034760B000700000040760B000F00000050760B000700000060760B00070000C074760B000700000080760B00070000008C760B00070000000105000000000005150000000D7A5A338AA7323FF89FB474E80300000105000000000005150000000D7A5A338AA7323FF89FB474010200000101000000000001000000000102000000000005200000002002000001020000000000052000000021020000010300000000000505000000000000006B62000001010000000000020000000001010000000000050400000001010000000000050B00000002003400020000000000180000000010010200000000000520000000200200000000140000000010010100000000000512000000000000000000000000000000110000001700000000000000030000000800000000000000000000001100000000000000000000001200000000000000000000000C00000000000000000000001300000000000000000000001800000000000000000000001400000000000000000000001600000000000000000000000B00000000000000000000000D00000000000000000000000E00000000000000000000000A00000000000000000000000F0000000000000000000000050000000000000000000000190000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500490000010C00 [/box:bc6ba1a7d2] Danach Yo el Schrott algo Strukturiert... [box:bc6ba1a7d2] 00000000FFFFFF7FFC750B0000000000B8750B0018760B00D8760B0040760B0098760B00000000000800000018760B000700000034760B000700000040760B000F00000050760B000700000060760B00070000C074760B000700000080760B00070000008C760B0007000000
0105000000000005150000000D7A5A338AA7323FF89FB474E8030000 => SID des ausführenden Users (Andreas)
Gruppen en el Token 0105000000000005150000000D7A5A338AA7323FF89FB47401020000 => SID el Gruppe Kein 010100000000000100000000 => SID el Gruppe Jeder 01020000000000052000000020020000 => SID el Gruppe Administratoren 01020000000000052000000021020000 => SID el Gruppe Benutzer 010300000000000505000000000000006B620000 010100000000000200000000 => SID el Gruppe LOKAL 010100000000000504000000 => SID el Gruppe Interaktiv 01010000000000050B000000 => SID el Gruppe Authentifizierte Benutzer
Standard DACL 02 => Typ el Zugriffskontrollliste (ACL_REVISION) 00 => Zwei Nullbytes a Anpassung 3400 => Größe des ACLs (= 52 Bytes) 0200 => Anzahl el ACEs en el Zugriffskontrollliste (= 2) 0000 => Zwei Nullbytes a Anpassung 00 => Typ des 1.ACEs, ACE = Zugriffskontrolleintrag (= ACCESS_ALLOWED_ACE_TYPE) 00 => Flags (u.a.Vererbung) des 1.Zugriffskontrolleintrags 1800 => Größe des 1.Zugriffskontrolleintrags (=24 Bytes) 00000010 => Zugriffsmaske des 1.ACEs (GENERIC_ALL) 01020000000000052000000020020000 => SID el Gruppe Administratoren 00 => Typ des 2.Zugriffskontrolleintrags (= ACCESS_ALLOWED_ACE_TYPE) 00 => Flags (u.a.Vererbung) des 2.Zugriffskontrolleintrags 1400 => Größe des 2.Zugriffskontrolleintrags (=20 Bytes) 00000010 => Zugriffsmaske des 1.ACEs (GENERIC_ALL) 010100000000000512000000 => SID el Gruppe Sistema
00000000000000000000000011000000
Privilegien en el Token 1700000000000000 => En me LUID des Privilegs SeChangeNotifyPrivilege 03000000 => Aktiviert y standardmäßig aktiviert 0800000000000000 => En me LUID des Privilegs SeSecurityPrivilege 00000000 => deaktiviert 1100000000000000 => En me LUID des Privilegs SeBackupPrivilege 00000000 => deaktiviert 1200000000000000 => En me LUID des Privilegs SeRestorePrivilege 00000000 => deaktiviert 0C00000000000000 => En me LUID des Privilegs SeSystemtimePrivilege 00000000 => deaktiviert 1300000000000000 => En me LUID des Privilegs SeShutdownPrivilege 00000000 => deaktiviert 1800000000000000 => En me LUID des Privilegs SeRemoteShutdownPrivilege 00000000 => deaktiviert 1400000000000000 => En me LUID des Privilegs SeDebugPrivilege 00000000 => deaktiviert 1600000000000000 => En me LUID des Privilegs SeSystemEnvironmentPrivilege 00000000 => deaktiviert 0B00000000000000 => En me LUID des Privilegs SeSystemProfilePrivilege 00000000 => deaktiviert 0D00000000000000 => En me LUID des Privilegs SeProfileSingleProcessPrivilege 00000000 => deaktiviert 0E00000000000000 => En me LUID des Privilegs SeIncreaseBasePriorityPrivilege 00000000 => deaktiviert 0A00000000000000 => En me LUID des Privilegs SeLoadDriverPrivilege 00000000 => deaktiviert 0F00000000000000 => En me LUID des Privilegs SeCreatePagefilePrivilege 00000000 => deaktiviert 0500000000000000 => En me LUID des Privilegs SeIncreaseQuotaPrivilege 00000000 => deaktiviert 1900000000000000 => En me LUID des Privilegs SeUndockPrivilege 00000000 => deaktiviert 0900000000000000 => En me LUID des Privilegs SeTakeOwnershipPrivilege 00000000 => deaktiviert
000000000000000000000000000000000000000000000000000000000000000000000000000000000500490000010C00 [/box:bc6ba1a7d2] Und que aquí zeigt TNT en el dazugehörigen Registrierkarte en me a:
[...]
[...]
[...]
Was como es son also zweifelsfrei Tokenstrukturen uno fremden Prozesses (also no de LSASS.EXE incluso, el sí en el Sistema-Account se ejecuta)! Aber es auch el, qué una Prozess wirklich aktuell en el Augenblick zugeordnet es? Tiempo schauen... Zum Testen Yo cada laufenden Prozess el Privileg SeSystemtimePrivilege aktiviert y me entonces angesehen, si a el hier gefundenen Estructuras algo verändert - lo tat se nichts. Was hay es, es also no una en el Augenblick una Prozess zugeordneter Token - aber qué entonces? Mit PrivAktivate kann Yo bastante simplemente en uno laufenden Session una Prozess con el Token uno no eingeloggten Users starten. Auch esta Token Yo entonces en el Service LSASS.EXE gefunden. In el gefundenen Struktur Yo entonces el Status uno Privilegs en valor 02000000 gesetzt (= aktiviert). Danach Yo me el Token con TNT angesehen - auch hier hatte se nichts geändert, el Privileg war weiterhin deaktiviert. Nachdem Yo, el Login encima PrivAktivate aber wiederholt hatte, war el en el Heapblock vorher de me en 02000000 gesetzte Valor otra vez en 00000000 (= deaktiviert) zurückgesetzt worden! Der Service LSASS.EXE producido also definitiv beim Login el Token y weist ihn el gestarteten Prozess a!
Aber wo befindet se el Token después de el Zuweisung? Folgender Abschnitt el WIN32.HLP son como evtl. algo nähere Auskunft: [box:bc6ba1a7d2] In the Microsoft® Win32® application programming interface (API), each process has its own 32-bit virtual address space that enables addressing up to 4 gigabytes (GB) of memory. The 2 GB en low memory (0x00 to 0x7FFFFFFF) are available to the user, and the 2 GB en high memory (0x80000000 to 0xFFFFFFFF) are reserved for the kernel. [/box:bc6ba1a7d2]. Lo son also scheinbar oberhalb de 2GB (oberhalb el Adresse $7FFFFFFF) una más Adressbereich, el no para el User determinado es y demnach auch no sin weiteres ausgelesen voluntad kann. Im Augenblick vermute Yo, daß se el Token hay befinden - zusammen con el Sicherheitsbeschreibungen des aktuellen Prozesses y dessen Hilos (sowie más Objetos des Kernels). Wenn Yo bastante habe, dürfte uno no sin weiteres a esta Speicherbereich herankommen - tal vez hay aber auch hier una Möglichkeit, con muy, muy viel Trickserei................................. |
|
|
| |
|
|