Seit Windows2000 / NT Zeiten wird geraten, auf dem Rechner neben seinem Account für Administratoren einen Benutzeraccount anzulegen und nur mit diesem Account zum Beispiel im Netz zu surfen. Wie sieht das nun aber auf aktuellen Betriebssystemen genau aus? Arbeitet man in einem Benutzeraccount wirklich sicherer, als in einem Account für Administratoren? Verfügen Programme, die auf Betriebssystemen ab Vista in einem solchen Account laufen, über mehr Rechte, als wenn sie in einem Benutzeraccount laufen würden? Können sie das System in einem Benutzeraccount weniger leicht infiltrieren - sich also zum Beispiel im Autostart verewigen, Kontakt zum Internet aufnehmen oder Dateien manipulieren? Ich werde mir das hier in diesem Beitrag mal etwas genauer ansehen und versuchen, darauf Antworten zu geben. Manche Antworten, die ich hier geben werde, werden vielleicht unerwartet und verblüffend sein - vielleicht sehr verblüffend. Schauen wir mal ...
Sachen zum Nachdenken: Rechte von Programmen im Benutzer- und Administratoraccount
-
AxT -
23. April 2016 um 13:24 -
Geschlossen
-
-
-
Was ist auf neuen Betriebssystemen denn neu?
Es soll ja hier um aktuelle Windows-Betriebssysteme gehen - das sind für mich zu diesem Zeitpunkt Betriebssysteme ab Windows Vista.
Hier gibt es vor allen Dingen eine Neuerung (seit Vista): Die UAC!
Das die UAC, auch User Account Control oder Benutzerkontensteuerung weit mehr ist, als ein dummes Fenster, das bei Ausführung eines Programms vor dem Erscheinen Adminrechte verlangt und dadurch den User laufend nervt, habe ich hier schon mal erläutert: Was passiert, wenn man (ab Vista) die UAC deaktiviert?
Um im Bezug auf das Thema hier das Ganze etwas besser zu verstehen, werfen wir zunächst einen groben Blick darauf, wie die Sache im Prinzip verhält.Rechtevergabe - wie funktioniert das eigentlich?
Wenn jemandem im normalen Leben besondere Rechte verliehen werden sollen, funktioniert das meist über einen Ausweis. Stellen wir uns jetzt eine große Firma in einem großen Gebäude vor. Jede Tür dieses Gebäudes ist durch ein elektronisches Schloss gesichert, in die erst mal als Ausweis eine Chipkarte eingesteckt werden muss und angegeben werden muss, warum man in den Raum möchte, um jede dieser Türen zu öffnen. Auf der Chipkarte ist genau vermerkt, wer die Person ist, der die Karte gehört und welche Position sie in der Firma hat (welcher "Gruppe" sie in der Firma angehört - zum Beispiel der Gruppe der "leitenden Angestellten"). Ist der Raum dann erfolgreich geöffnet worden, funktioniert in dem Zimmer auch wirklich nur das, was man draußen vor der Tür auch angemeldet hat - für alles anderen Tätigkeiten fehlt der Strom oder es bleibt unerreichbar.
In den Räumen und Gängen des Gebäudes stehen überall Maschinen herum. Manche Maschinen sind sehr wichtig und dürfen nur von bestimmten Personen bedient werden - ob eine Person privilegiert ist, so eine wichtige Maschine zu bedienen und welch eine solche die Person bedienen darf, steht natürlich ebenfalls auf diesem "Ausweis", der Chipkarte. In der Firma ist es natürlich so geregelt, dass auch höher gestellte Personen und Arbeitergruppen mehr und wichtigere Maschinen bedienen dürfen, als normale Angestellte. Leitende Angestellte besitzen also in der Regel einen genau festgelegten Zugriff auf bestimmte Maschinen - normale Arbeiter dürfen etwas weniger an Maschinen hantieren, Gäste können nur die Kopierer bedienen, die auf den Gängen stehen.
Ganz ähnlich läuft das in Windows Betriebssystemen. Die "Chipkarte", die da jedem Programm auf dem System als Ausweis mitgegeben wird, heißt Access Token. Die Maschinen, die nur von bestimmten Leuten bedient werden dürfen, sind spezielle Systemfunktionen (wie zum Beispiel das Setzen der Uhrzeit). Rechte zum Bedienen dieser Systemfunktionen heißen im Betriebssystem Privilegien.Was tut nun die UAC?
Man sollte eigentlich annehmen, dass in einem Account für Administratoren gestartete Anwendungen alles dürfen - aber genau dass ist mit eingeschalteter UAC (und standardmäßig ist diese aktiv) nicht der Fall. Nein, sie dürfen bei Weitem nicht alles! Aber sie können sich - durch den User - beim Start in einen Zustand versetzen lassen, in dem sie alles dürfen.
Aber wie tun sie das? Wie fordern Anwendungen beim Start zusätzliche Rechte? In der Regel funktioniert das über ein sogenanntes Manifest. Ein Manifest ist nicht anderes als eine Textdatei, die im XML Format codiert ist und durch ihren Inhalt Administrator-Rechte anfordert. Die Manifest-Datei kann als eigenständige Datei vorhanden sein oder in Form einer EXE als Resource an die Datei angehängt werden.
Stößt das Betriebssystem beim Ausführen einer EXE auf ein solches XML Manifest, erhält der User folgende Meldung:
[Blockierte Grafik: http://abload.de/img/uac24js64.jpg]
Der User kann dann entscheiden, ob er diese Anwendung dann wirklich ausführen möchte oder es lieber bllässt. -
Wie bereits gesagt - die UAC ist standardmäßig aktiv. Es stellt natürlich ein kleines Problem dar, wenn heimlich ein Rechner gekapert werden soll und mittendrin der Mensch, der am PC sitzt, einen Vorgang beim Kapern noch bestätigen muss. Wie kann ein Mailware-Programmierer dieses Problem umgehen und was wird in der Praxis da getan? Um diese Frage zu beantworten, stellen wir uns einmal vor, wir wären selbst ein solcher Programmierer. Unser Ziel ist dabei vor allen Dingen dies: Durch möglichst wenig Arbeit möglichst viel Geld zu verdienen - egal wie. Was wir tun, muss also effektiv sein und auf möglichst vielen Rechnern sicher funktionieren.
- Möglichkeit: Durch Nutzung eines Exploits (Sicherheitsloch) versucht man einfach, die UAC Meldung nicht anzeigen zu lassen.
- Die Nutzung solcher Sicherheitslöcher weist da manche Schwachstellen auf:
- Sicherheitslöcher können jederzeit gestopft werden.
- Sicherheitslöcher sind manchmal abhängig vom genutzten Betriebssystem.
- Sicherheitslöcher sind manchmal nicht nutzbar, wenn der User auf dem System bestimmte Einstellungen nicht gesetzt hat.
- Alle Punkte bedeuten für uns als fiktive Malware-Programmierer eine Angelegenheit, die wir möglichst nicht wollen - Mehrarbeit. Was gibt es also noch?
- Die Nutzung solcher Sicherheitslöcher weist da manche Schwachstellen auf:
- Möglichkeit: Social Hacking!
- Unter Social Hacking versteht man im Prinzip, Denk- und Verhaltensweisen der Menschen auszunutzen und sie dafür einzusetzen, sie zu Handlungen zu bewegen, die sie eigentlich nicht tun würden - also zum Beispiel zum Bestätigen jener UAC Meldung. Wir tun dann einfach so, als wäre zum Beispiel ein auszuführender Anhang einer Mail von jemandem, den die Person, die wir angreifen wollen, kennt - zum Beispiel ein Freund, ein Verwandter, ein Vorgesetzter,... Das könnte vielleicht hinhauen - die meisten würden aber wohl trotzdem ganz gewaltig ins Grübeln kommen, wenn plötzlich die UAC zu bestätigen wäre - also eher uneffektiv, diese Geschichte. Also, was würde gehen?
- Möglichkeit: Wir verzichten einfach auf Adminrechte und versuchen, den Rechner unterhalb der UAC Schwelle soweit auszuhebeln, wie das geht.
- Man sollte es kaum glauben, aber die meisten Trojaner arbeiten genau so . Aber - wie weit kommt man da als Malwareprogger mit Benutzerrechten überhaupt? Damit kommt ein normales Programm doch nicht einmal ins Internet - oder ??? Vielleicht unterliegen wir in Bezug auf die Rechte von Programmen, die mit Benutzerrechten laufen, ja einigen Irrtümern? Wie sicher denn ist man in einem Benutzeraccount ? Da schauen wir mal ...
- Möglichkeit: Durch Nutzung eines Exploits (Sicherheitsloch) versucht man einfach, die UAC Meldung nicht anzeigen zu lassen.
-
Ein Benutzeraccount dürfte seinen dort gestarteten Programmen im Ausweis Access Token eigentlich weniger Rechte vergeben, als ein in einem Adminaccount gestartetes Programm - oder?
Wir schauen uns diesen Ausweis, den jedes Programm da mitbekommt einmal etwas genauer an. Als Beispiel habe ich hier mal Firefox genommen.
Hier einmal die Gruppen und Privilegien, die ein Benutzeraccount und ein Administratorenaccount unter Vista seinen dort gestarteten Programmen in den Ausweis Access Token packt:
Gruppen im Token von BenutzerSpoiler anzeigen
Gruppenname Status None nicht abschaltbar, standardmäßig aktiviert + aktiviert Jeder nicht abschaltbar, standardmäßig aktiviert + aktiviert Benutzer nicht abschaltbar, standardmäßig aktiviert + aktiviert INTERAKTIV nicht abschaltbar, standardmäßig aktiviert + aktiviert Authentifizierte Benutzer nicht abschaltbar, standardmäßig aktiviert + aktiviert Diese Organisation nicht abschaltbar, standardmäßig aktiviert + aktiviert S-1-5-5-0-222416 nicht abschaltbar + Logon ID, standardmäßig aktiviert + aktiviert LOKAL nicht abschaltbar, standardmäßig aktiviert + aktiviert NTLM-Authentifizierung nicht abschaltbar, standardmäßig aktiviert + aktiviert Mittlere Verbindlichkeitsstufe deaktiviert + aktivierter Integritätslevel
Gruppen im Token von AdministratorSpoiler anzeigen
Gruppenname Status None nicht abschaltbar, standardmäßig aktiviert + aktiviert Jeder nicht abschaltbar, standardmäßig aktiviert + aktiviert Administratoren nur für Verbote, deaktiviert Benutzer nicht abschaltbar, standardmäßig aktiviert + aktiviert INTERAKTIV nicht abschaltbar, standardmäßig aktiviert + aktiviert Authentifizierte Benutzer nicht abschaltbar, standardmäßig aktiviert + aktiviert Diese Organisation nicht abschaltbar, standardmäßig aktiviert + aktiviert S-1-5-5-0-1626980 nicht abschaltbar + Logon ID, standardmäßig aktiviert + aktiviert LOKAL nicht abschaltbar, standardmäßig aktiviert + aktiviert NTLM-Authentifizierung nicht abschaltbar, standardmäßig aktiviert + aktiviert Mittlere Verbindlichkeitsstufe deaktiviert + aktivierter Integritätslevel
Privilegien im Token von BenutzerSpoiler anzeigen
Privileg Beschreibung Status SeShutdownPrivilege Herunterfahren des Systems deaktiviert SeChangeNotifyPrivilege Auslassen der durchsuchenden Überprüfung aktiviert + standardmäßig aktiviert SeUndockPrivilege Entfernen des Computers von der Dockingstation deaktiviert SeIncreaseWorkingSetPrivilege Arbeitssatz eines Prozesses vergrößern deaktiviert SeTimeZonePrivilege Ändern der Zeitzone deaktiviert
Privilegien im Token von AdministratorSpoiler anzeigen
Privileg Beschreibung Status SeShutdownPrivilege Herunterfahren des Systems deaktiviert SeChangeNotifyPrivilege Auslassen der durchsuchenden Überprüfung aktiviert + standardmäßig aktiviert SeUndockPrivilege Entfernen des Computers von der Dockingstation deaktiviert SeIncreaseWorkingSetPrivilege Arbeitssatz eines Prozesses vergrößern deaktiviert SeTimeZonePrivilege Ändern der Zeitzone deaktiviert
Wenn man sich das so ansieht, unterscheidet sich das nur in einer Sache:
Programme, die in einem Administratorenaccount gestartet werden, besitzen in ihrem Ausweis die Gruppenzugehörigkeit zu den Administratoren - wobei aber diese Gruppenzugehörigkeit nicht für Erlaubnisse zählt, sondern nur für Verbote! Was einem Administrator verboten worden ist, darf also ein Programm, das in einem Administratorenaccount gestartet wurde, definitiv nicht - während das gleiche Programm in einem Benutzeraccount diese Sache ausführen dürfte. Wenn man also das ganz genau nimmt, darf ein Programm, das mit nicht angehobenen Rechten läuft, in einem Benutzeraccount als nicht weniger, als es in einem Adminaccount - es darf eigentlich in einem Benutzeraccount sogar mehr, als in einem Adminaccount. -
Von unserem Adminaccount ist uns ja noch folgendes Bild bekannt, das erscheint, wenn sich dort ein Programm mittels Manifest Adminrechte verlangt:
Spoiler anzeigen
Wie sieht das aber in einem Benutzeraccount aus? Startet das Programm hier überhaupt, denn Adminrechte hat der Account ja nicht zu vergeben?Spoiler anzeigen
[Blockierte Grafik: http://abload.de/img/uac1dqs5m.jpg]
Wie man sieht, fordert auch hier das Programm Adminrechte. Da es später aber mit dem Access Token des Admins läuft, ist hier die Eingabe des Passwortes eines Admins nötig - das ist der einzige Unterschied bei dieser Angelegenheit. -
Recht bekannte Autostarteinträge sind die Werte, die sich im Schlüssel HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run befinden. Wir werfen einmal einen Blick darauf, ob ein normaler Benutzer hier in diesem Schlüssel Einträge erstellen kann. Bei mir sehen die Zugriffsrechte auf den Schlüssel so aus:
[Blockierte Grafik: http://abload.de/img/registryzugriff2vf8h.jpg]
Hier fällt ein Account mit dem Namen "Eingeschränkt" auf, der Vollzugriff auf diesen Schlüssel hat. "Eingeschränkt" ist hier der Name meines gerade gestarteten Benutzeraccounts - es ist also beim besten Willen kein Problem, sich mit Benutzerrechten in den Autostart zu schreiben. Wie man im Screenshot auch sieht, geht das wohl noch an anderen Stellen mit Autostartfunktion im Schlüssel HKEY_CURRENT_USER, denn der Vollzugriff wird dort durch den Rootschlüssel vererbt. -
Dazu wäre erst einmal zu klären, was denn eigentlich ein zentrales Systemprogramm ist, über das ein Trojaner gerne Kontrolle erlangen möchte. Ein solches zentrales Systemprogramm wäre zum Beispiel der Windows Explorer, also die laufende explorer.exe. Aber warum ist gerade der Windows Explorer?
- Bei (fast) jedem Rechner wird die explorer.exe nach dem Login automatisch ausgeführt.
- Der Windows Explorer ist Elternprogramm jedes Programms, das durch den User gestartet wird. Ist der Windows Explorer in fremder Hand, lässt sich leicht der Start jeder anderen Anwendung überwachen.
- Da der Explorer Elternprogramm jedes vom User gestarteten Programms ist, ist es damit auch in der Regel möglich, über ihn Kontrolle über jedes andere Programm zu erhalten, das der User startet - insofern es im gleichen oder in einem niedrigeren Integritätslevel läuft, wie der Explorer selbst. Das trifft im Prinzip auf alle anderen normalen Programme zu.
- Der Explorer besitzt mit Standardeinstellungen des Systems Netzwerkzugriff. Hat man Kontrolle über den Explorer, kann man in der Regel bereits ungehindert Daten ins Netz senden oder aus dem Netz empfangen.
Was bedeutet Kontrolle erlangen denn überhaupt?
Wenn man an einen Trojaner denkt, denkt man wohl in erster Linie an eine EXE, also ein Programm, das nach dem Start irgendwelchen Schadcode in seinem gestarteten Prozess ausführt. Diese Vorstellung von Malware trifft aber seit vielen Jahren in der Realität nicht mehr zu. Oft führt Malware den eigentlichen Schadcode nicht mehr vom eigenen Prozess aus, sondern schleust ihn in andere laufende vertrauenswürdige Programme ein und führt ihn von dort dann aus. Der Vorgang ist vergleichbar mit dem "Kapern" von Schiffen auf hoher See - ich werden hier nachfolgend deshalb dafür auch den Begriff "kapern" aus der Piratenwelt verwenden.Welche Rechte sind denn nötig, um den Explorer zu kapern?
Es gibt unterschiedliche Techniken, um den Explorer zu kapern. Ich gehe hier nur auf eine Technik ein. Ich nehme gerade diese Technik, weil sie wohl die meisten Rechte erfordert. Dabei verrate ich keineswegs Geheimnisse oder bringe Programmierern von Malware auf neue Gedanken, denn die Sache wird seit Jahren von solchen auch in dieser Art durchgeführt.- Man schafft innerhalb des Prozesses explorer.exe freien Speicher zum Ablegen von eines Codes, indem man zum Beispiel programmiertechnisch die API VirtualAllocEx dafür nutzt.
- Man befüllt über zum Beispiel WriteProcessMemory den Speicherplatz mit Malwarecode.
- Man führt den Code aus, indem man zum Beispiel die API CreateRemoteThread dafür nutzt.
Um das tun zu können, müssen folgende Voraussetzungen bestehen:
- Der Integritätslevel des Explorer Prozesses muss einem Programm, das mit Benutzerrechten läuft, den Schreibzugriff gestatten.
- Wir schauen ob das hier der Fall ist. In meinem Screenshot werfen wir einen Blick auf den Integritätslevel des Prozesses explorer.exe: [Blockierte Grafik: http://abload.de/img/integrittexploreryecl6.jpg]
- Wie man aus dem Screenshot ersieht, läuft der Prozess (in einem Benutzeraccount und in einem Adminaccount) im Level Mittlere Verbindlichkeitsstufe. Niedrigeren Stufen sind Lese- und Schreibzugriffe auf den Prozess verboten. Wenn wir uns hier einmal die Screenshots zu den Gruppen ansehen, denen ein Programm im Benutzer- und Adminaccount angehört, sieht man dort, dass in beiden Account Programme, die über Benutzerrechte verfügen, ebenfalls in der Stufe Mittlere Verbindlichkeitsstufe laufen. Der Integritätslevel gestattet also den nötigen Zugriff für das Kapern.
- Die Zugriffsrechte auf den Prozess explorer.exe müssen einem Programm, das mit Benutzerrechten läuft, den Zugriff auf den Prozess gestatten.
- Welche Rechte sind nötig, um das Kapern erfolgreich durchzuführen?
- Um erfolgreich Prozessspeicher im Prozess explorer.exe bereitstellen zu können, ist das Prozessrecht PROCESS_VM_OPERATION nötig.
- Um erfolgreich Code im Prozess explorer.exe ablegen zu können, sind die Prozessrechte PROCESS_VM_WRITE und PROCESS_VM_OPERATION nötig.
- Um den Code erfolgreich über CreateRemoteThread ausführen zu können, sind die Prozessrechte PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE, und PROCESS_VM_READ nötig.
- Wie man im nachfolgenden Screenshot sieht, hat der eingeloggte User (hier heißt er "Eingeschränkt") Vollzugriff auf den Prozess explorer.exe. Das Kapern funktioniert also auch auf dieser Ebene mit Benutzerrechten problemlos:
- [Blockierte Grafik: http://abload.de/img/zugriffsrechteaufexpls8ewh.jpg]
- Welche Rechte sind nötig, um das Kapern erfolgreich durchzuführen?
-
Um Daten für Onlinebanking oder Passwörter und Zugangsdaten bei Einkäufen abzugreifen, wird in der Regel der Internet Browser gekapert. Hierbei kann man als Technik dafür genau so vorgehen, wie ich das bereits bei der explorer.exe recht ausführlich erläutert habe, was aber auch nur eine Möglichkeit ist. Auch die nötigen Rechte sind hier vergleichbar - hier mal im Beispiel Firefox:
IntegritätslevelSpoiler anzeigen
Zugriffsrechte
Ein Benutzeraccount oder Benutzerrechte setzen auch hier einer Man in the Middle Attacke nichts entgegen. -
Trojaner haben sich aufgrund der UAC bereits darauf eingestellt, mit Benutzerrechten auszukommen. Viele Trojaner (unter anderem auch Locky) benötigen heutzutage keine Adminrechte mehr. Demzufolge bedeutet es einen großen Fehler, sich in einem Benutzeraccount sicherer zu fühlen, als in einem Administratoren-Account. Meist ist man dort unter keinen Umständen sicherer. Beim besten Willen nicht.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!