So erstellen Sie einen neuen Prozess mit einem niedrigeren Integritätslevel (IL)?

Scheint es, dass beginnend mit Windows Vista, Prozesse mit einem niedrigeren Integritätslevel (IL) können nicht senden Sie Nachrichten an Prozesse mit höheren integritätsebenen. Dies macht Sinn, aus Sicht der Sicherheit, aber es bricht einige unserer prozessübergreifenden Kommunikation.

Haben wir eine legacy-Anwendung (Prozess A), dass hat leider zur Ausführung mit erhöhten "admin" - rechten (durchgeführt durch einstellen der Verknüpfung immer als administrator ausführen). Manchmal braucht es ein Exemplar einer separaten Anwendung (Prozess B). Als Ergebnis -, Prozess B erbt die gleichen erhöhten rechten (und IL) als Prozess A. Darin liegt das problem. Möglicherweise gibt es noch weitere unabhängige Instanzen von Prozess B, die nicht haben erhöhten rechten, und alle diese Verfahren B-Instanzen müssen in der Lage sein, um gegenseitig Nachrichten senden. Dies schlägt fehl, wenn eine Instanz von Prozeß B erhöht ist und eine andere nicht.

Ich weiß, wir können offene Löcher in der UIPI-message-filter mit der ChangeWindowMessageFilter API-Methode, aber das scheint nicht so die ideale Lösung. Stattdessen würde ich viel lieber Prozess-spawn Prozess B mit geringeren rechten, und zwar so, dass es die Kommunikation mit dem anderen Prozess B-Instanzen. Ich denke, dass standardmäßig der andere Prozess B-Instanzen laufen auf "Medium" IL, so deshalb würde ich gerne Prozess Ein, um zu laichen-Prozess B-Instanzen mit der gleichen IL.

Meine Suche führte mich zu der CreateProcessAsUser und CreateRestrictedToken API-Methoden, aber trotz dieser Dokumentation, die alle von den verschiedenen Facetten des tokens und Sicherheits-Deskriptoren und so ist noch sehr verwirrend für mich.

Ich habe auch schon über einige threads hier (Läuft ein Prozess mit der geringst möglichen Privilegien in winapi und Ablegen von Privilegien in C++ unter Windows), aber ich finde keine guten Beispiele mit code.

Kann jemand mir einige einfache, aber "richtigen" code, der mir helfen wird, spawn child-Prozesse mit der entsprechenden Windows-IL? Speziell möchte ich ein Beispiel dafür, wie die bestehende Prozess-token und wandeln es so hat es die reduzierten Privilegien (ich bin mir ziemlich sicher, dass ich herausfinden kann, ist der rest). Ich bin mir wirklich darüber unklar, ob ich zum duplizieren der Prozess-token, bevor Sie es ändern, wie gut.

  • Wäre es möglich einen proxy-Prozess ausgeführt, in der nicht mit erhöhten rechten Kontext? Wenn dem so ist, könntest du entweder den proxy-Prozess starten, Prozess B auf den Namen des Prozesses Ein, wie benötigt wird, oder get-process Eine zu nehmen, die token aus der proxy-Prozess, und verwenden Sie es zum starten von Prozess B.
  • Ich habe gelesen, ähnliche Lösungen an anderer Stelle, so es scheint durchaus wie das funktionieren könnte. Jedoch, es sei denn, dieser Dritte proxy-Prozess (C) bereits ausgeführt wird, (unabhängig von Prozess A), sind wir wieder auf Platz eins (wie einen separaten Prozess ausgeführt mit niedrigeren Privilegien). Und wenn der Prozess C bereits ausgeführt wird, dann vermutlich, es würde ausgeführt werden, die gesamte Zeit, die ein Benutzer angemeldet war, ein Szenario würde ich eher vermeiden. CreateRestrictedToken scheint, wie es wurde speziell für diese und ähnliche Arten von Situationen, so wie können wir drop eine token-IL?
InformationsquelleAutor Jeremy | 2012-03-28
Schreibe einen Kommentar