AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ShellExecuteEx + Vererbung von Handles möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecuteEx + Vererbung von Handles möglich?

Ein Thema von jaenicke · begonnen am 15. Aug 2009 · letzter Beitrag vom 23. Aug 2009
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#1

ShellExecuteEx + Vererbung von Handles möglich?

  Alt 15. Aug 2009, 19:08
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ShellExecuteEx + Vererbung von Handles möglich?

  Alt 18. Aug 2009, 04:15
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: ShellExecuteEx + Vererbung von Handles möglich?

  Alt 22. Aug 2009, 21:28
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: ShellExecuteEx + Vererbung von Handles möglich?

  Alt 23. Aug 2009, 10:29
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: ShellExecuteEx + Vererbung von Handles möglich?

  Alt 23. Aug 2009, 10:43
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: ShellExecuteEx + Vererbung von Handles möglich?

  Alt 23. Aug 2009, 10:52
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.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: ShellExecuteEx + Vererbung von Handles möglich?

  Alt 23. Aug 2009, 11:01
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:25 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