it-swarm-eu.dev

Wie funktioniert der Windows-Modus "Secure Desktop"?

Kann jemand erklären (oder einen Link zu einer einfachen Erklärung bereitstellen), was der Windows-Modus "Secure Desktop" ist und wie er funktioniert?

Ich habe gerade in der KeePass-Dokumentation davon gehört ( KeePass - Hauptschlüssel auf einem sicheren Desktop eingeben ) und möchte es besser verstehen.

59
snth

Kurze Antwort

Es gibt drei separate Probleme, die den Namen "Secure Desktop" beanspruchen:

  • In Windows integrierte Funktionen wie GINA und das Credential Provider Model .
  • Trennung von privilegierten und nicht privilegierten Anwendungen, die als derselbe Benutzer ausgeführt werden (nominell die Eskalation von Privilegien verhindern), die sich möglicherweise auf Folgendes beziehen oder nicht:
  • SwitchDesktop(), das von KeePass verwendet wird und möglicherweise (ich bin mir nicht sicher) resistent gegen DLL Injection) ist.

Detaillierte Antwort

Als schnelle Einführung in die Erstellung von Windows-GUIs wird im Grunde alles über eine Funktion namens CreateWindow() (ich meine alles, jede Schaltfläche, jedes Menü, alles) ausgeführt und erhält ein hWnd oder Fenster Griff. Das Ändern dieser Fenster erfolgt über eine andere Funktion, SendMessage().

Hier ist der Haken. Als Anwendung im Benutzermodus kann ich mit den richtigen API-Aufrufen ziemlich einfach Nachrichten an andere Windows senden. Es ist ziemlich trivial, Knöpfe aus den Formen anderer Leute verschwinden zu lassen. Es ist etwas schwieriger durchzuführen DLL Injection und Hook der Nachrichtenschleife, die Nachrichten empfängt (das Betriebssystem sendet Windows-Nachrichten, wenn ihnen etwas passiert), aber nicht so viel schwieriger. Wenn ich diese Ereignisse einbinden kann Ich könnte automatisch Ihr "Ja/Nein" -Formular senden. Oder ich könnte die Bezeichnung von ReallyDodgyVirus.exe In Explorer.exe Ändern, und Sie wären nicht klüger.

Einfügen: Ein wirklich guter Artikel über die verschiedenen Techniken, um Ihren Code in den Adressraum eines laufenden Prozesses zu bringen.

Was macht KeePass nun?

Eine sehr kurze Durchsicht der Quelle zeigt, dass sie CreateDesktop(), SwitchDesktop() und CloseDesktop() verwenden, um einen zweiten Desktop zu erstellen, der mit dem physischen Anzeigegerät verbunden ist, auf dem Sie sich befinden. Auf Englisch bitten sie den Kernel, für sie einen isolierten Desktop zu erstellen, dessen hWnd -Objekte außerhalb des auffindbaren Bereichs der SendMessage() einer anderen Anwendung liegen.

Ich sollte darauf hinweisen, dass SwitchDesktop die Aktualisierung der Benutzeroberfläche des Standarddesktops unterbricht. Ich bin nicht sicher, ob die Nachrichtenschleifen auch eingefroren sind - ich vermute nicht, da der Desktop als neuer Thread erstellt wird.

In diesem Fall zeichnet KeePass is die Benutzeroberfläche, daher ist die Ausführung nicht, so wie ich es verstehe, als NT AUTHORITY/SYSTEM. Stattdessen wird der neue Desktop isoliert vom Rest des aktuellen Desktops erstellt, wodurch er geschützt wird. Ich werde gerne korrigiert werden. Siehe jedoch MSDN für SwitchDesktop :

Die SwitchDesktop-Funktion schlägt fehl, wenn der Desktop zu einer unsichtbaren Fensterstation gehört. SwitchDesktop schlägt auch fehl, wenn es von einem Prozess aufgerufen wird, der einem gesicherten Desktop wie den Desktops WinLogon und ScreenSaver zugeordnet ist. Zu den Prozessen, die einem gesicherten Desktop zugeordnet sind, gehören benutzerdefinierte UserInit-Prozesse. Solche Aufrufe schlagen normalerweise mit dem Fehler "Zugriff verweigert" fehl.

Ich glaube, dies bedeutet, dass diese Dialoge (Bildschirmschoner, Windows-Anmeldung) tiefer in Windows integriert sind, sodass sie immer als NT AUTHORITY\SYSTEM Ausgeführt werden und der Prozess UserInit die Unterprozesse bei gültiger Authentifizierung zum erforderlichen Zeitpunkt erstellt Berechtigungsstufe.

Der Grund, warum ich dies anspreche, ist, dass ich glaube, dass es zwei Probleme gibt: verschiedene Desktops und Privilegientrennung. Aus Mark Russinovichs Diskussion zum Thema Secure Desktop :

Der Windows-Integritätsmechanismus und UIPI wurden entwickelt, um eine Schutzbarriere für erhöhte Anwendungen zu schaffen. Eines seiner ursprünglichen Ziele war es, Softwareentwickler daran zu hindern, Verknüpfungen zu verwenden und bereits erhöhte Anwendungen zu nutzen, um administrative Aufgaben zu erledigen. Eine Anwendung, die mit Standardbenutzerrechten ausgeführt wird, kann keine synthetischen Maus- oder Tastatureingaben an eine erhöhte Anwendung senden, damit diese ihre Gebote ausführt oder Code in eine erhöhte Anwendung einfügt, um Verwaltungsvorgänge auszuführen.

Wie SteveS sagt, führt UAC einen separaten Desktop-Prozess als NT AUTHORITY/SYSTEM Aus. Wenn Sie die Benutzerkontensteuerung über den Prozess-Explorer in Aktion (consent.exe) Abfangen können, sieht dies folgendermaßen aus:

UAC under process Explorer

Eskalieren von Berechtigungen als Prozess, dessen Einzelheiten ich nicht kenne, aber ich glaube, ich verstehe Folgendes: Ich glaube, dass der Prozess der Eskalation von Berechtigungen in der Windows-API einen Prozess verursacht, der als NT AUTHORITY/SYSTEM Ausgeführt wird (daher ausgeführt werden kann) den neuen Prozess unter den gewünschten Berechtigungen, in diesem Fall einem Administrator). Wenn eine Anwendung nach höheren Berechtigungen fragt, wird Ihnen diese Frage auf einem neuen Desktop lokal gestellt, für den keine Ihrer Anwendungen entweder das Desktop-Handle oder eines der GUI-Element-Handles erhalten kann. Wenn Sie zustimmen, erstellt consent.exe Den Prozess als privilegierter Benutzer. Daher ist der Prozess, der als NT AUTHORITY\SYSTEM Ausgeführt wird, eine Folge der Notwendigkeit, einen neuen privilegierten Prozess zu erstellen, und nicht als Methode zum Erstellen eines sicheren Desktops. Die Tatsache, dass sich der Desktop vom Standard unterscheidet, erhöht in beiden Fällen die Sicherheit.

Ich glaube, was Mark oben bedeutet, ist, dass zusätzlich zu diesen sicheren Desktops zwei Dinge passieren:

  • Ihr Standard-Administrator-Desktop wird im Gegensatz zu Windows XP und früher und) nicht privilegiert ausgeführt
  • Nicht privilegierte und privilegierte Anwendungen sind jetzt auf separaten Desktops vorhanden (Haftungsausschluss: Ich bin mir nicht sicher, ob es sich nur um ACLs für die Objekte im Speicher handeln kann), um sicherzustellen, dass nicht privilegierter Code nicht auf privilegierte Objekte zugreifen kann.

Die Windows-Anmeldeoberfläche ist in Vista/7 wieder anders.

Natürlich schützt Sie keine dieser Methoden vor Rootkits im Kernelmodus, verhindert jedoch die Eskalation von Berechtigungen und die Integrität der Benutzeroberfläche, indem privilegierte Anwendungen oder im Fall von KeePass das vertrauliche Dialogfeld isoliert werden.

Bearbeiten

Nachdem ich mir den KeePass-Code genauer angesehen hatte, sah ich dieses handliche Stück C #:

Bitmap bmpBack = UIUtil.CreateScreenshot();
if(bmpBack != null) UIUtil.DimImage(bmpBack);
/* ... */

SecureThreadParams stp = new SecureThreadParams();
stp.BackgroundBitmap = bmpBack;
stp.ThreadDesktop = pNewDesktop;

Daraus können Sie ersehen, dass KeePass tatsächlich einen Screenshot des Hintergrunds erstellt, ihn dimmt und seinen neuen Desktop mit dem Hintergrund des alten Desktops erstellt, um die Einwilligung.exe nachzuahmen. Ich vermute daher, dass der alte Desktop weiterhin ausgeführt wird, auch wenn er nicht gerendert wird. Dies bestätigt meiner Meinung nach, dass sowohl mit KeePass als auch mit NT AUTHORITY\SYSTEM Keine magische consent.exe Aktion ausgeführt wird (ich vermute, dass Zustimmung.exe das Gleiche in Bezug auf die Benutzeroberfläche tut, es wird nur zufällig im Kontext gestartet von NT AUTHORITY\SYSTEM).

Bearbeiten 2

Wenn ich DLL Injection) sage, denke ich speziell an DLL Injection, um die Benutzeroberfläche zu beschädigen. DLL Injection bleibt möglich Bei KeePass als Prozess bin ich mir nur nicht sicher, ob es verwendet werden kann, um diese sichere Benutzeroberfläche zu beeinflussen. Es kann jedoch verwendet werden, um auf den Speicher des Prozesses und seiner Threads zuzugreifen und dabei die eingegebene Kennwortvorverschlüsselung abzurufen. Schwer, aber ich denke möglich. Ich würde es begrüßen, wenn jemand diesbezüglich berät, wenn er es weiß.

63
user2213

Ein "sicherer Desktop" ist ein Desktop, der nur vom System selbst ausgeführt werden kann. Das klingt ein bisschen komisch und erklärt wahrscheinlich nicht viel.

In Windows ist ein Desktop eine Ansicht, mit der Sie mit Prozessen interagieren können. Wenn Sie sich bei Windows anmelden (die Eingabeaufforderung), befinden Sie sich auf einem Desktop. Wenn Sie angemeldet sind und das Startmenü sehen, befinden Sie sich auf einem separaten Desktop. Wenn Sie Ihren PC sperren, befinden Sie sich auf einem weiteren Desktop. Wenn die Benutzerkontensteuerung angezeigt wird, befinden Sie sich auf einem anderen Desktop. Es gibt einige verschiedene Desktops in Windows.

Ein sicherer Desktop ist ein Desktop, auf den andere Anwendungen nicht zugreifen können. Der Anmeldedesktop ist ein sicherer Desktop (erstellt von winlogon.exe), ebenso wie der UAC-Desktop. Kein anderer Prozess kann mit dem Desktop interagieren, daher kann kein anderer Prozess beispielsweise eine Schaltfläche aktivieren oder den Inhalt eines Textfelds lesen. Aus diesem Grund ist die Benutzerkontensteuerung (theoretisch) nützlich.

Anwendungen von Drittanbietern können einen sicheren Desktop erstellen, um Informationen (z. B. ein Hauptkennwort) anzufordern und diese dann an die betreffende Anwendung weiterzuleiten. Auf diese Weise kann theoretisch kein anderer Prozess das Passwort abhören.

Ein guter Einstieg in sichere Desktops ist die erste Hälfte dieses Artikels über die Funktionsweise der Benutzerkontensteuerung auf dem sicheren Desktop: http://blogs.msdn.com/b/uac/archive/2006/05/03/589561 .aspx .

16
Steve

der sichere Desktop wird unter einem lokalen Systemkonto ausgeführt und kein anderer Prozess kann mit ihm interagieren, außer OSK, Narrator usw. Er wird von winlogon.exe gestartet und kann in der Registrierung HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System durch Ändern deaktiviert werden Der Wert von PromptOnSecureDesktop von 1 bis 0, wenn Sie cmd.exe unter dem Systemkonto ausführen, interagiert immer noch nicht mit dem sicheren Desktop. Der dunkle Desktop, den Sie sehen, wenn Sie unter UAC Prompt auf Als Administrator ausführen klicken, ist sicherer Desktop und wenn Sie Strg + drücken Alt + Entf und der Skyblue-Bildschirm, den Sie mit wenigen Optionen wie Sperren dieses Compters usw. sehen, sind ebenfalls sichere Desktops. Windows verfügt standardmäßig über drei Desktops 1 Winlogon 2 Bildschirmschoner 3 Benutzerdesktop

1
Mudasir