Frage:
Wie funktioniert der Windows-Modus "Secure Desktop"?
snth
2011-05-12 17:08:06 UTC
view on stackexchange narkive permalink

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 - Geben Sie den Hauptschlüssel auf einem sicheren Desktop ein) und möchten Sie ihn besser verstehen.

Im Allgemeinen werden Kopf- und Fußzeilen im Letter-Stil auf SE-Websites als unnötig angesehen. Ich habe sie für dich herausgezogen.
Der sichere Desktop-Link wurde unterbrochen. FTFY. FTR: Auch wenn ein "Secure Desktop" ähnlich der Benutzerkontensteuerung * möglicherweise * Sie vor Software-Keyloggern schützen kann, sind sie gegen Hardware-Keylogger unwirksam. Sie sollten weiterhin keine Kennwörter (oder andere Daten) eingeben, die Sie auf einem System schätzen, dem Sie nicht vertrauen.
@Iszi bedankt sich für den Hinweis. Was sind Hardware-Keylogger? Wäre das wie eine speziell entwickelte Tastatur in einem Internetcafé? Ich mache mir hauptsächlich Sorgen um meinen Windows-PC, daher bin ich bereit zu vertrauen, dass die Hardware in Ordnung ist, aber ich mache mir Sorgen, dass sich Malware selbst installiert.
Hardware-Keylogger gibt es in vielen Formen. Es könnte sich um einen Dongle handeln, der zwischen der Tastatur und dem USB / PS2-Anschluss eingesteckt ist (jemand, der noch PS2 verwendet?), Oder um eine ganze Tastatur. Es wurde schon so manches über Menschen auf Sicherheitskonventionen erzählt, deren Passwörter von der Putzfrau abgeholt wurden.
Ich stimme den Sicherheitskommentaren von @iszi zu.Die Sicherheit der Tastatur im UAC-Modus gegenüber Keyloggern ist nicht gut dokumentiert.Wenn Sie nicht Phishing oder einem Trojaner-Programm zum Opfer gefallen sind, das Nebenwirkungen hat, kann ein LIMITED USER / Base-Benutzerprozess die UAC Secure Desktop-Tastatureingabe nicht lesen.ABER.in acht nehmen.Wenn ein Programm festlegt, dass der Registrierungsschlüssel SecureDesktop beim Ausführen der Installation deaktiviert (mit Install Sheild hoffentlich nicht möglich), wird die Benutzerkontensteuerung im Benutzerkontext ausgeführt, und jeder Nicht-Administrator-Schlüsselprotokollierer erfasst den Benutzerkontensteuerungsinhalt.(GUTE Verhaltenserkennung AV fängt jedoch Keylogger ab)
Drei antworten:
#1
+64
user2213
2011-05-12 20:48:30 UTC
view on stackexchange narkive permalink

Kurze Antwort

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

  • In Windows integrierte Funktionen wie GINA und das Modell des Anbieters von Anmeldeinformationen.
  • Trennung von privilegierten und nicht privilegierten Anwendungen, die als derselbe Benutzer ausgeführt werden (nominell die Eskalation von Berechtigungen verhindern)
  • SwitchDesktop () , das von KeePass verwendet wird und möglicherweise (ich bin mir nicht sicher) resistent gegen DLL-Injection ist.

Detaillierte Antwort

Als kurze Einführung in die Erstellung von Windows-GUIs wird im Grunde alles über eine Funktion namens CreateWindow () ausgeführt (ich meine alles, jede Schaltfläche , jedes Menü, alles) und erhält einen hWnd oder Fenstergriff. 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, eine DLL-Injection durchzuführen und die Nachrichtenschleife zu verknüpfen, die Nachrichten empfängt (das Betriebssystem sendet Windows-Nachrichten, wenn ihnen etwas passiert), aber nicht viel schwieriger. Wenn ich diese Ereignisse einbinden kann, kann ich 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 eine Sekunde zu erstellen Desktop, 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 wurde.

In diesem Fall zeichnet KeePass die Benutzeroberfläche. Die Ausführung ist also nicht , 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. Weitere Informationen finden Sie jedoch im 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. Prozesse, die einem gesicherten Desktop zugeordnet sind, umfassen benutzerdefinierte UserInit-Prozesse. Solche Aufrufe schlagen normalerweise mit dem Fehler "Zugriff verweigert" fehl.

Ich glaube, dies bedeutet, dass diese Dialogfelder (Bildschirmschoner, Windows-Anmeldung) tiefer in Windows integriert sind, sodass sie immer als NT AUTHORITY \ SYSTEM und der Prozess UserInit erstellen die Unterprozesse bei gültiger Authentifizierung auf der erforderlichen Berechtigungsstufe.

Der Grund, warum ich dies anspreche, ist, dass ich glaube Es gibt zwei Probleme: verschiedene Desktops und die Trennung von Berechtigungen. 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 der ursprünglichen Ziele bestand darin, Softwareentwickler daran zu hindern, Verknüpfungen zu verwenden und bereits erhöhte Anwendungen für Verwaltungsaufgaben zu nutzen. 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 , UAC führt einen separaten Desktop-Prozess als NT AUTHORITY / SYSTEM aus. Wenn Sie die Benutzerkontensteuerung über den Prozess-Explorer in Aktion ( Zustimmung.exe ) abfangen können, sieht dies folgendermaßen aus:

UAC under process explorer

Eskalieren von Berechtigungen als Prozess Ich habe nicht die Einzelheiten von, aber hier ist, was ich zu verstehen glaube: 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 Zustimmung.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 vorhanden sind passiert:

  • Ihr Standard-Administrator-Desktop wird im Gegensatz zu Windows XP und früheren Versionen und
  • nicht privilegiert ausgeführt
  • Unprivilegierte 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.

Keine dieser Methoden schützt Sie eindeutig vor Rootkits im Kernelmodus, verhindert jedoch die Eskalation von Berechtigungen Kompromisse bei der Integrität der Benutzeroberfläche durch Isolieren privilegierter Anwendungen oder im Fall von KeePass im vertraulichen Dialogfeld.

Bearbeiten

Nachdem Sie sich den KeePass-Code genauer angesehen haben, Ich habe dieses praktische Stück C # gesehen:

  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 einen Screenshot von Der Hintergrund wird abgeblendet und der neue Desktop mit dem Hintergrund des alten Desktops erstellt. Ich vermute daher, dass der alte Desktop weiterhin ausgeführt wird, auch wenn er nicht gerendert wird. Dies bestätigt meiner Meinung nach, dass keine magische Aktion NT AUTHORITY \ SYSTEM sowohl mit KeePass als auch mit Zustimmung.exe ausgeführt wird (ich vermute, dass Zustimmung.exe in Bezug auf die Benutzeroberfläche dasselbe tut). Es wird zufällig im Kontext von NT AUTHORITY \ SYSTEM ) gestartet.

Edit 2

Wenn ich DLL sage Injection, ich denke speziell an DLL-Injection, um die Benutzeroberfläche zu beschädigen. DLL-Injection bleibt auf KeePass als Prozess möglich. Ich bin mir nur nicht sicher, ob es verwendet werden kann, um diese sichere Benutzeroberfläche zu beeinflussen. Es könnte 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ß.

Ich weiß nicht, ob dies eine "einfache Erklärung" ist, aber dies ist eine der besseren Erklärungen, die ich gelesen habe. :) Ich werde meinen Beitrag bearbeiten, da er nicht ganz korrekt ist und nur SYSTEM sichere Desktops erstellen kann.
@SteveS Ich denke, wenn mein Verständnis stimmt, gibt es zwei verschiedene Arten von Desktops: "Sicher" wie in "Teil von Windows" und nur über GINA anpassbar, sagen wir "und" Sicher "wie in" isoliert ". Ich bin nicht zu 100% davon überzeugt, dass separate Desktops für nicht privilegierte und privilegierte Anwendungen erstellt werden, die von demselben Benutzer ausgeführt werden, aber ich denke, darauf spielt Mark R an. Leider wird das Trennen dieser Konzepte ziemlich schnell nicht trivial ...! Ihre Antwort ist in Ordnung, denke ich, da in jeder Hinsicht dieselben Ideen (auf hohem Niveau) verwendet werden.
@Ninefingers - Dies ist eine großartige Antwort. Könnten Sie vielleicht oben eine einteilige "TL; DR" -Zusammenfassung angeben?
@Iszi Ich habe in einem `tl; dr` bearbeitet, habe es aber jetzt an die Spitze gesetzt.
Ich wünschte wirklich, ich könnte dies noch einmal +1 geben, für das zusätzliche Detail in den Änderungen. @Ninefingers - Ich hoffe, es macht Ihnen nichts aus, ich habe die dritte Kugel mit der kurzen Antwort bearbeitet, um sie hoffentlich klarer zu machen - sie erschien mir etwas verwirrend.
@Iszi Es macht mir überhaupt nichts aus - ich stimme zu, das Verschieben des Wortlauts ist eine Verbesserung.
Gute Antwort!! Eine winzige Verwirrung: Was ist eine "Nachrichtenschleife"? Ich vermute, es ist ein typischer Windows-Begriff für das, was ich als Ereignisschleife bezeichnen würde.
@nealmcb ja, im Grunde. Jedes Fenster (normalerweise aktuelles Windows der obersten Ebene) verfügt über eine Rückruffunktion, die im Wesentlichen kontinuierlich mit allen Ereignissen aufgerufen wird, die in diesem Fenster auftreten, z. B. "WM_CLOSE", wenn der Benutzer beispielsweise auf "x" klickt. Mit Dll Injection können Sie Ihre eigenen Listener einbinden, sodass Sie "WM_KEYDOWN" einbinden und jeden Schlüssel abrufen können, den der Benutzer im Kontext einer Anwendung eingibt ...
Wow, ich habe mehr über die Windows-Benutzeroberfläche gelernt, als ich erwartet hatte. Gute Antwort! Vielen Dank!
@snth kein Problem. Wenn Sie an Windows-Interna interessiert sind, ist Mark Russinovich der Autor des Tools im Screenshot (Process Explorer) und sein Blog ist eine Lektüre wert. Er ist so gut, dass Microsoft ihn vor ein paar Jahren eingestellt hat.
2.0 verwendet tatsächlich SecureDesktop, aber ist das etwas, das auch als sterblicher Benutzer ausgeführt werden kann und nur das Umschalten des Fensters auf normale Programme verhindert?Es würde eine Systemroutine erfordern, die ein tatsächliches SecureDesktop im Systembenutzerkontext starten könnte, was passieren könnte, aber es würde einige Nachforschungen erfordern, um festzustellen, was KeePass 2.0 dort tut ...
#2
+16
Steve
2011-05-12 19:36:25 UTC
view on stackexchange narkive permalink

Ein "sicherer Desktop" ist ein Desktop, der nur vom System selbst ausgeführt werden kann. Das klingt etwas seltsam 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 Anmeldeaufforderung), 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. In Windows gibt es eine ganze Reihe verschiedener Desktops.

Ein sicherer Desktop ist ein Desktop, auf den andere Anwendungen keinen Zugriff haben. 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 Kennwort abhören.

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

Der Link ist tot. Hier ist die aktualisierte URL: https://docs.microsoft.com/en-us/archive/blogs/uac/user-account-control-prompts-on-the-secure-desktop
#3
+1
Mudasir
2014-07-30 16:19:58 UTC
view on stackexchange narkive permalink

sicherer 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 \ deaktiviert werden Wenn Sie den Wert von PromptOnSecureDesktop von 1 auf 0 ändern, wenn Sie cmd.exe unter dem Systemkonto ausführen, wird das System immer noch nicht mit dem sicheren Desktop interagiert Drücken Sie Strg + Alt + Entf und der Skyblue-Bildschirm, den Sie mit wenigen Optionen wie Sperren dieses Compters usw. sehen, ist ebenfalls ein sicherer Desktop. Windows verfügt standardmäßig über drei Desktops 1 Winlogon 2 Bildschirmschoner 3 Benutzerdesktop



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...