Ihre Punkte sind alle gut und Sie haben Recht, aber bevor wir uns darüber empören, müssen wir uns daran erinnern, wie das Linux-Sicherheitsmodell funktioniert und was es schützen soll.
Denken Sie daran, dass Linux Das Sicherheitsmodell wurde für einen Mehrbenutzer-Terminal- oder SSH-Server entwickelt. Windows wurde speziell für Endbenutzer-Workstations entwickelt (aber ich habe gehört, dass die neueste Windows-Generation terminalfreundlicher ist). Insbesondere macht die Linux-Konvention das Sandboxing von Apps für Benutzer besser, während unter Windows alles Wichtige als System ausgeführt wird, während die Linux-GUI (X Server) die Sicherheit beeinträchtigt und die Windows-GUI ausgefallene Dinge wie die integrierte Benutzerkontensteuerung enthält. Grundsätzlich ist (und war) Linux zuerst ein Server und dann eine Workstation, während Windows umgekehrt ist.
Sicherheitsmodelle
Soweit "the OS "(dh der Kernel) ist betroffen, Sie haben 7 tty-Konsolen und eine beliebige Anzahl von SSH-Verbindungen (auch als" Anmeldesitzungen "bezeichnet) - es kommt nur so vor, dass Ubuntu mit Skripten geliefert wird, um die GUI auf dem tty7 automatisch zu starten
-Sitzung, aber für den Kernel ist es nur eine andere Anwendung.
Anmeldesitzungen und Benutzerkonten sind recht gut voneinander getrennt, aber Linux geht von einer Sicherheitseinstellung aus, die Sie nicht schützen müssen Benutzer von sich selbst. Wenn in diesem Sicherheitsmodell Ihr Konto durch Malware kompromittiert wird, ist dies eine verlorene Ursache. Wir möchten es jedoch weiterhin von anderen Konten isolieren, um das gesamte System zu schützen.
Beispielsweise tendieren Linux-Apps dazu Erstellen Sie einen Benutzer mit geringen Berechtigungen wie apache
oder ftp
, den er so ausführt, als ob er keine Root-Aufgaben ausführen müsste. Wenn es einem Angreifer gelingt, die Kontrolle über einen laufenden Apache
-Prozess zu übernehmen, kann er andere Apache
-Prozesse durcheinander bringen, hat jedoch Probleme beim Springen zu ftp
-Prozessen .
Beachten Sie, dass Windows hier einen grundlegend anderen Ansatz verfolgt, hauptsächlich aufgrund der Konvention, dass alle wichtigen Dinge ständig als System ausgeführt werden. Ein bösartiger Dienst unter Linux hat weniger Möglichkeiten, schlechte Dinge zu tun als ein bösartiger Prozess, der als System ausgeführt wird. Daher muss Windows zusätzliche Anstrengungen unternehmen, um jemanden mit Administratorrechten vor "sich selbst" zu schützen.
GUI-Umgebungen und ein X-Server, der nicht für die Sicherheit ausgelegt ist, werfen einen Schraubenschlüssel in dieses Sicherheitsmodell.
Gnome gksudo gegen Windows-Benutzerkontensteuerung und Keylogger
Wenn ein Benutzerprozess unter Windows eine Eskalation von Berechtigungen anfordert, löst der Kernel eine spezielle geschützte Eingabeaufforderung aus, deren Speicher und Tastatur- / Mausbus vom Rest der restlichen Desktop-Umgebung isoliert sind. Dies ist möglich, da die GUI in das Betriebssystem integriert ist. Unter Linux ist die GUI (X-Server) nur eine andere Anwendung, und daher gehören die Kennwortabfragen zu dem Prozess, der sie aufgerufen hat. Sie werden wie Sie ausgeführt, teilen Speicherberechtigungen und einen Eingabebus mit jedem anderen Fenster und Prozess, der wie Sie ausgeführt wird.
Die Root-Eingabeaufforderung kann nicht die ausgefallenen UAC-Dinge ausführen, die die Tastatur sperren, da diese entweder bereits root sein müssen oder den X-Server komplett neu entwerfen müssen (siehe Wayland unten). Ein Catch-22, der in diesem Fall ein Nachteil beim Trennen der GUI vom Kernel ist. Aber zumindest entspricht dies dem Linux-Sicherheitsmodell.
Wenn wir das Sicherheitsmodell überarbeiten würden, um dies zu verhindern, indem wir Sandboxing zwischen Kennwortansagen und anderen Prozessen hinzufügen, die als Benutzer in derselben GUI-Sitzung ausgeführt werden Wir könnten sehr viele Dinge neu schreiben müssen. Zumindest müsste der Kernel GUI-fähig werden, damit er Eingabeaufforderungen erstellen kann (heute nicht mehr wahr). Das andere Beispiel ist, dass alle Prozesse in einer GUI-Sitzung einen Tastaturbus gemeinsam nutzen.
Beobachten Sie, wie ich einen Keylogger schreibe und dann einige Tasten in einem anderen Fenster drücke:
x ~ xinput list
⎡ ID des virtuellen Kernzeigers = 2 [Hauptzeiger (3)] X XTEST-Zeiger-ID des virtuellen Kerns = 4 [Slave-Zeiger (2)] ite Logitech K400 Plus-ID = 9 [Slave-Zeiger (2)] ⎜ ETPS / 2 Elantech Touchpad id = 13 [Slave-Zeiger (2)] x ~ xinput test 9Tastenfreigabe 36 Tastendruck 44 Tastendruck 44 Tastendruck 40 Tastendruck 40 Tastendruck 33 Tastendruck 33 Tastendruck 33 Tastendruck 39 Tastenfreigabe 33 Tastendruck 39 Taste Drücken Sie die 66-Taste. Drücken Sie die Taste 31.
Jeder Prozess, der ausgeführt wird, während Sie das Kennwort an der Eingabeaufforderung oder am Terminal eines anderen Prozesses abhören und dann sudo selbst aufrufen können (dies folgt direkt aus der Meldung "Keine Notwendigkeit, Sie zu schützen" Sie "Denkweise), daher ist es nutzlos, die Sicherheit der Kennwortabfragen zu erhöhen, es sei denn, wir ändern das Sicherheitsmodell grundlegend und schreiben alle möglichen Dinge massiv neu.
(das ist erwähnenswert Gnome scheint zumindest den Tastaturbus auf dem Sperrbildschirm und die neue Sitzung zu sandboxen s über "Benutzer wechseln", da die dort eingegebenen Dinge nicht im Tastaturbus meiner Sitzung angezeigt werden.
Wayland
Wayland ist ein neues Protokoll, das darauf abzielt X11 ersetzen. Client-Anwendungen werden gesperrt, sodass sie keine Informationen stehlen oder irgendetwas außerhalb ihres Fensters beeinflussen können. Die Clients können nur außerhalb des externen IPC miteinander kommunizieren, indem sie den Compositor durchlaufen, der sie alle steuert. Dies behebt jedoch nicht das zugrunde liegende Problem und verlagert einfach das Vertrauensbedürfnis auf den Compositor.
Virtualisierung und Container
Wenn Sie mit Cloud-Technologien arbeiten, müssen Sie Ich springe wahrscheinlich auf und ab und sage "Docker ist die Antwort !!". In der Tat, Brownie Punkte für Sie. Docker selbst soll zwar nicht wirklich die Sicherheit verbessern (danke @SvenSlootweg), weist jedoch darauf hin, Containerisierung und / oder Virtualisierung als Forward zu verwenden, das mit der aktuellen Linux-Architektur kompatibel ist.
Zwei bemerkenswerte Linux-Distributionen, die unter Berücksichtigung der Prozessisolation erstellt wurden:
Qubes OS , mit dem Apps auf Benutzerebene in mehreren VMs ausgeführt werden, die in "Sicherheitsdomänen" unterteilt sind, z B. Arbeit, Banking, Surfen im Internet.
Android , das jede App als separater Benutzer mit geringen Berechtigungen installiert und ausführt und so die Isolation auf Prozessebene und die Isolation des Dateisystems (jeweils) erreicht App ist auf ein eigenes Home-Verzeichnis beschränkt) zwischen Apps.
Fazit: Aus Sicht eines Endbenutzers ist es nicht unangemessen zu erwarten, dass sich Linux so verhält Genau wie Windows, aber dies ist einer der Fälle, in denen Sie ein wenig verstehen müssen, wie das zugrunde liegende System funktioniert und warum es so entworfen wurde. Durch einfaches Ändern der Implementierung der Kennwortansagen wird nichts erreicht, solange es sich um einen Prozess handelt, der Ihnen gehört. Damit Linux im Kontext einer Einzelbenutzer-GUI-Workstation das gleiche Sicherheitsverhalten wie Windows aufweist, muss das Betriebssystem erheblich neu gestaltet werden. Daher ist es unwahrscheinlich, dass dies geschieht. Dinge wie Docker bieten jedoch möglicherweise einen Weg nach vorne in einem Linux-System. native Methode.
In diesem Fall besteht der wichtige Unterschied darin, dass Linux auf niedriger Ebene als Mehrbenutzerserver konzipiert ist und die Entscheidung trifft, einen Benutzer während Windows nicht vor sich selbst zu schützen ist als Einzelbenutzer-Workstation konzipiert, sodass Sie innerhalb einer Anmeldesitzung über prozessübergreifende Schutzfunktionen verfügen müssen. Es ist auch wichtig, dass unter Windows die GUI Teil des Betriebssystems ist, während unter Linux die GUI nur eine andere Anwendung auf Benutzerebene ist.