Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecuteEx + Vererbung von Handles möglich? (https://www.delphipraxis.net/138703-shellexecuteex-vererbung-von-handles-moeglich.html)

jaenicke 15. Aug 2009 19:08


ShellExecuteEx + Vererbung von Handles möglich?
 
Hallo!

Ich benutze zur Elevation unter Vista ShellExecuteEx mit runas als Verb.

Gleichzeitig würde ich aber gerne die Handles (von temporären automatisch zu löschenden Dateien) in der gestarteten Anwendung benutzen. Diese Option gibt es jedoch nur bei CreateProcess.

Gibt es da eine Möglichkeit beides zu kombinieren? Also einerseits explizit mit Adminrechten zu starten und andererseits die Handles zu vererben?

// EDIT:
Crosspost: http://www.delphi-forum.de/viewtopic.php?p=574563
// EDIT2:
http://forum.delphi-treff.de/showthread.php?p=197984

Vielen Dank,
Schönen Gruß,
Sebastian

jaenicke 18. Aug 2009 04:15

Re: ShellExecuteEx + Vererbung von Handles möglich?
 
Hat niemand eine Idee? Es muss ja wie gesagt nicht unbedingt ShellExecuteEx sein, es geht wirklich um die Kombination expliziter Adminrechte mit vererbten Handles.

Ansonsten müsste ich die Daten via Pipes oder MMFs der neuen Instanz zur Verfügung stellen. Das wäre eine Lösung, auch wenn mir der zusätzliche Aufwand nicht gefällt, da das potentielle zusätzliche Fehlerquellen wären.

jaenicke 22. Aug 2009 21:28

Re: ShellExecuteEx + Vererbung von Handles möglich?
 
Für alle, die das selbe Problem haben:
Im Delphi-Treff-Thread (siehe oben) habe ich den Hinweis auf DuplicateHandles bekommen. Damit kann man die Handles aus dem ersten Prozess in den zweiten duplizieren, so dass man die Vererbung gar nicht braucht.

Apollonius 23. Aug 2009 10:29

Re: ShellExecuteEx + Vererbung von Handles möglich?
 
Das Problem an DuplicateHandle ist aber, dass man sich damit eine Sicherheitslücke einfängt. Ich musste mal aus einem Service ein Programm starten und konnte auch keine Handle-Vererbung nutzen (diese streikt nämlich über Session-Grenzen hinweg). Damit der Kindprozess DuplicateHandle nutzen kann, muss die eigene Prozess-DACL das Recht PROCESS_DUP_HANDLE gewähren. Ein böser Prozess kann jetzt aber DuplicateHandle nutzen, um volle Rechte auf den Service zu erhalten: Dazu dupliziert er einfach GetCurrentProcess. Bei dir dürfte dieser Fall kein Problem darstellen, da dein startender Prozess keine besonderen Rechte hat, aber er sollte vor Augen führen, dass Handle-Vererbung nicht immer so leicht zu ersetzen ist.

himitsu 23. Aug 2009 10:43

Re: ShellExecuteEx + Vererbung von Handles möglich?
 
PROCESS_DUP_HANDLE ... das könnte man sich doch bestimmt auch erst kurz vor dem Klonen holen und gleich danach wieder abwerfen, obwohl ein böser Prozeß sich wohl auch genau diesen Zeitpunkt abwarten könnte :?

'ne Lösung wäre dann, einen weiteren Proßess zu nutzen, welcher die gemeinsamen bzw. zu sharenden Handles erstellt und dann den beiden anderen Prozessen zur Verfügung stellt, dann bräuchte doch keiner der beiden anderen Prozessen seine Sicherheit aufgeben?

jaenicke 23. Aug 2009 10:52

Re: ShellExecuteEx + Vererbung von Handles möglich?
 
Ein Prozess ohne Adminrechte kann doch ohnehin nicht auf einen Adminprozess voll zugreifen. Hier geht es ja gerade darum von einem Adminprozess aus zuzugreifen und der hat dann ja ohnehin volle Rechte. Aber umgekehrt sollte ein Duplizieren von Handles eines Adminprozesses in einen Nichtadminprozess doch wohl ohnehin nicht gehen, oder? (Getestet habe ich das jetzt nicht.)

Apollonius 23. Aug 2009 11:01

Re: ShellExecuteEx + Vererbung von Handles möglich?
 
Ich habe bereits erwähnt, dass das Problem in deinem Fall nicht besteht. Wenn du aber von einem Admin-Prozess einen nicht-Admin-Prozess auf deine Weise starten wolltest, müsstest du die DACL des Admin-Prozesses entsprechend lockern, um PROCESS_DUP_HANDLE zu gewähren. Und dann hast du die Sicherheitslücke. Deshalb würde man eher den Admin-Prozess DuplicateHandle aufrufen lassen und das Handle dann über eine Named Pipe mit zufälligem Namen übertragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz