AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lokal Adminrechte erlangen

Ein Thema von Hobbycoder · begonnen am 30. Apr 2020 · letzter Beitrag vom 1. Mai 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.555 Beiträge
 
Delphi 12 Athens
 
#1

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 11:40
Schon mit Vista fing der Spaß mit UAC und Co. an, wo die Rechte der gestarteten Programme nicht mehr direkt mit den Rechten des eingeloggten Benutzers übereinstimmen.

MSDN-Library durchsuchenRevertToSelf

Der Rest des Programms läuft ja noch mit geringeren Rechten, da sollte die Zeit mit den höheren Rechten nicht unbegrenzt andauern. (nur so lang wie nötig)
Entweder schnell wieder zurücksetzen oder den jeweiligen Thread beenden.
Damit böse Buben es nicht zu einfach ausnutzen können sich in dein Programm zu hacken und von da in den Thread zu kommen.

Wenn man z.B. auf einen anderen Desktop kommen will, dann geht das nur direkt beim Start des Threads, bevor die Messagebehandlung anläuft.
Siehe Anmeldebildschirm oder die UAC-Passwortabfrage. So Manches geht nur, wenn es noch nicht andersweitig initialisiert/benutzt wurde
und in punkto Sicherheit sollte man sicherheitshalber nichts zu lange unsicher lassen.



Zwischen Impersonate und Revert wird jeder Code in diesem Thread mit dessen Rechten ausgeführt, also eigentlich auch ein ForceDirectories.
Es gibt noch ein paar Fallstricke mit Dingen die zwar in dem Thread aufgerufen/gestartet, aber in einem anderen Thread ausgeführt werden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Apr 2020 um 11:51 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 12:22
Es gibt keinen "Rest" des Programms. Es hat auch nichts wirklich mit Rechten eines Benutzers zu tun. Entweder der Prozess hat beim Start Admin-RechteFähigkeiten mitbekommen, oder er hat sie nicht. Man durch diese "Impersonation" sich als anderer Benutzer ausgeben, auf dessen Resourcen (z.B. Registry oder Dateien) zugreifen, aber die Admin-Fähigkeiten kommen dadurch nicht nach.

Das ist auch einer der Gründe weshalb ich bei diesen klassischen alten "setup.exe" am Schluss nie das Häkchen "Anwendung direkt starten" (oder so ähnlich) anhake, denn das Setup vererbt die Admin-Fähigkeiten gleich an den zu startenden Prozess weiter. Zumindest die allermeisten.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.017 Beiträge
 
#3

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 11:36
Das stimmt so nicht ganz. Es lassen sich sogar einzelne Threads mit unterschiedlichen Rechten ausführen,
aber es ist einfacher die Rechte direkt beim Start eines Prozesses/Threads festzulegen, bzw. kurz nach dem Start umzuschalten.

Im Puff und hier Forum (Luckie) sollten es einige Beispiele und Tutorials zu finden sein.
Wenn ich mir Luckie's Beispiel auf o.g. Url anschaue ist es ja das, was ich eben so verwende. Müsste dann nicht die weiteren Routinen (ForceDirectories) unter dem entsprechenden Benutzerkontext (Also der mit dem ich mich im Impersonate angemeldet habe) ausgeführt werden?

PS: In Luckie's Bespiel ist noch ein ReversToItself enthalten. Ist das auch aus der API?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 15:05
Das Impersonate gibt dem Prozess nicht plötzlich Adminrechte. Entweder ein Prozess wird mit Adminrechten gestartet, oder ohne. Das lässt sich nicht nachträglich ändern.
Öhm ... also MSDN-Library durchsuchenImpersonateLoggedOnUser gibt in der Tat dem Thread die Rechte des Nutzers dessen Identität man annimmt. Himitsu erwähnte es bereits.

Kann es sein, daß du eher das hier meinst? Denn die von dir beschriebene Abgrenzung gibt es meines Wissens nach dort, aber nicht auf der Ebene um welche sich die Frage dreht. Ich lasse mich gern eines besseren belehren.

Selbst Anwendungen wie z.B. Visual Studio Code installieren sich standardmäßig dorthin.
Faszinierend, oder? Entgegen Microsofts eigenen Empfehlungen. Nunja. Vermutlich liegt's daran, daß VSCode Electron-basiert ist?!

Und nicht das hier ein Denkfehler geschieht "User mit Adminrechten" <> Administratoruser (unter Windows 10 zumindest).
Definiere:
  1. Adminrechte
  2. Adminstratoruser

Also redest du über RID=500 (DOMAIN_USER_RID_ADMIN)? Oder geht es um die "Privileges" (ich meine eingedeutscht hießen die Benutzerrechte)?

Es gibt keinen "Rest" des Programms. Es hat auch nichts wirklich mit Rechten eines Benutzers zu tun. Entweder der Prozess hat beim Start Admin-RechteFähigkeiten mitbekommen, oder er hat sie nicht. Man durch diese "Impersonation" sich als anderer Benutzer ausgeben, auf dessen Resourcen (z.B. Registry oder Dateien) zugreifen, aber die Admin-Fähigkeiten kommen dadurch nicht nach.
Sicher? Du bist dir da so 100%ig sicher, daß du das hier Hilfesuchenden als definitive Aussage präsentierst? Woher genau bekommst du denn das Token? Normalerweise wird das MSDN-Library durchsuchenLogonUser oder Tokenklau sein. Und wenn du dich in MSDN-Library durchsuchenLogonUser als Admin ausgewiesen hast, bekommst du selbstverfreilich die entsprechenden Rechte. Wie genau definierst du "Admin-Fähigkeiten"? Das ist ja gerade der Zweck dieser Funktionen.

Ich verweise auf Mimikatz (siehe auch GitHub).

Die Lektüre des Codes von SuRun empfiehlt sich ebenfalls.

Also entweder reden wir aufgrund mangelnder gemeinsam akzeptierter Definition von "Admin-Fähigkeiten" aneinander vorbei, oder du bist auf dem Holzweg.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 15:59
Selbst Anwendungen wie z.B. Visual Studio Code installieren sich standardmäßig dorthin.
Faszinierend, oder? Entgegen Microsofts eigenen Empfehlungen. Nunja. Vermutlich liegt's daran, daß VSCode Electron-basiert ist?!
Naja, bei VSCode gibt es zwei verschiedene Installer. Einen User Installer und einen System Installer. Der User Installer ist wohl nur verfügbar, um das Updaten und ggf. installieren von Erweiterungen zu vereinfachen. Im gewerblichen Umfeld in einer Domain bei der die User keine Admin Rechte haben sollten, sehe ich das als nützlich an.
Nachteilig sehe ich es für die Benutzer, die gerne Anwendungen auf anderen Festplatten auslagern, dazu zähle ich mich auch. Dadurch, dass der User Installer aber ins Benutzerprofil installiert wird und dieses in der Regel auf dem gleichen Laufwerk liegt wie die Windows Installation, funktioniert das nicht und der Speicher wird dort verbraucht.

Aber ich glaube, das geht jetzt langsam etwas am Thema vorbei.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 17:00
Nachteilig sehe ich es für die Benutzer, die gerne Anwendungen auf anderen Festplatten auslagern, dazu zähle ich mich auch. Dadurch, dass der User Installer aber ins Benutzerprofil installiert wird und dieses in der Regel auf dem gleichen Laufwerk liegt wie die Windows Installation, funktioniert das nicht und der Speicher wird dort verbraucht.
Klick, klick (/j) ... ja, gibt's seit Windows 2000. Und so lange benutze ich das auch schon.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 17:02
Nachteilig sehe ich es für die Benutzer, die gerne Anwendungen auf anderen Festplatten auslagern, dazu zähle ich mich auch. Dadurch, dass der User Installer aber ins Benutzerprofil installiert wird und dieses in der Regel auf dem gleichen Laufwerk liegt wie die Windows Installation, funktioniert das nicht und der Speicher wird dort verbraucht.
Klick, klick (/j) ... ja, gibt's seit Windows 2000. Und so lange benutze ich das auch schon.
Ich kenne das, klar. Aber es gibt auch Leute, die so etwas nicht kennen oder auch nicht nutzen wollen. Ich gehöre eher zu letzteren.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 17:37
Also entweder reden wir aufgrund mangelnder gemeinsam akzeptierter Definition von "Admin-Fähigkeiten" aneinander vorbei
Ich denke das ist es. Oder ich hatte zu wenig Kaffee.


Ganz konkret:
  • Zwei Benutzer, "localUser" und "localAdmin". Ersterer gehört nicht zur Gruppe "Administratoren", letzterer schon
  • Eine aktive Sitzung im Benutzer "localUser". Der Benutzer doppelklickt unseren Prozess
  • Der Prozess hat in seinem Manifest, wie wohl so ziemlich jeder,
    Delphi-Quellcode:
    requestedExecutionLevel
    level="asInvoker"
  • Der Prozess soll nun das Verzeichnis C:\Program Files\Watzn erstellen.

Kann er das? Dein Beitrag liest sich so als ginge das. Wenn ja, was ist dann hieran falsch?

Delphi-Quellcode:
uses
  System.SysUtils,
  WinApi.Windows;

const
   adminName = 'localAdmin';
   adminPwd = 'localAdmin';

function getAdminToken(): THandle;
begin
   Win32Check( LogonUser(
      adminName,
      nil,
      adminPwd,
      LOGON32_LOGON_INTERACTIVE,
      LOGON32_PROVIDER_DEFAULT,
      Result
   ) );
end;

procedure p();
var
   adminToken: THandle;
begin
   adminToken := getAdminToken();
   try
      Win32Check( ImpersonateLoggedOnUser(adminToken) );
      try
         Win32Check( CreateDirectory('C:\Program Files\Watzn', nil) );
      finally
         Win32Check( RevertToSelf() );
      end;
   finally
      CloseHandle(adminToken);
   end;
end;
Selbst bei TeamViewer kann man das beobachten: Der Benutzer führt einen TeamViewer-QuickSupport aus. Authentifiziert sich jemand von außen mit den Kontodaten eines Administrator-Accounts startet TeamViewer sich selbst noch einmal und beendet sich dann. So kannte ich es bislang.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#9

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 18:51
Ganz konkret:
  • Zwei Benutzer, "localUser" und "localAdmin". Ersterer gehört nicht zur Gruppe "Administratoren", letzterer schon
  • Eine aktive Sitzung im Benutzer "localUser". Der Benutzer doppelklickt unseren Prozess
  • Der Prozess hat in seinem Manifest, wie wohl so ziemlich jeder,
    Delphi-Quellcode:
    requestedExecutionLevel
    level="asInvoker"
  • Der Prozess soll nun das Verzeichnis C:\Program Files\Watzn erstellen.

Kann er das?
asInvoker bezieht sich auf UAC, welches bekanntlich nur wenig mit Sicherheit zu tun hat (siehe auch hier).

Bei standardmäßig gesetzten Zugriffslisten (ACLs) sollte das nicht erfolgreich sein. Aaaaber, es gibt noch die UAC File Virtualization (der entsprechende Minifilter kann per fltmc unter dem Eintrag luafv gefunden werden), welche den Zugriff transparent auf einen anderen Ordner umleitet auf den der (unprivilegierte) Anwender sehr wohl Zugriff hat (UAC muß dafür natürlich aktiviert sein).

Ich weiß also noch immer nicht, ob es dir um Admin (entsprechende Benutzerrechte und Gruppenzugehörigkeit), oder um Elevation (UAC) oder um Mandatory Integrity Control (MIC) geht.

Dein Beitrag liest sich so als ginge das.
Unter der genannten Bedingung kann das gehen, ja.

Dein Delphicode sollte auch das tun was man annimmt, da sich der Admin ja über LogonUser dem System gegenüber ausweist. Kommt natürlich auf die involvierten Integrity-Level an. Sprich: zwar kann ein einzelner Thread "Admin werden", aber er unterliegt trotzdem noch MIC.

Selbst bei TeamViewer kann man das beobachten: Der Benutzer führt einen TeamViewer-QuickSupport aus. Authentifiziert sich jemand von außen mit den Kontodaten eines Administrator-Accounts startet TeamViewer sich selbst noch einmal und beendet sich dann. So kannte ich es bislang.
Genau, das klingt jetzt wiederum stark nach MIC.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 19:39
Ich weiß also noch immer nicht, ob es dir um Admin (entsprechende Benutzerrechte und Gruppenzugehörigkeit), oder um Elevation (UAC) oder um Mandatory Integrity Control (MIC) geht.
Mir geht es eigentlich nur um die Frage des Themen-Erstellers.

Wir sind mittlerweile angekommen bei wilden Abkürzungen wie MIC, UAC, ACL, RID und was weiß ich noch, aber wenn es um das eigentliche Problem geht kommt wieder "kann gehen", "sollte" und "müsste".

Ich bekomme es nicht hin, ohne Neustarten des "normal doppelgeklickten" Prozesses ein Verzeichnis unter C:\Programme anzulegen. Vielleicht du? Dann könnten wir alle davon lernen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz