Wie gefährlich ist die Tatsache, dass sich SELinux im "Permissive" -Modus befindet? Worauf sollte ich achten?


14

Ich habe ein bestimmtes ROM installiert, das mit SELinux im "Permissive" -Modus geliefert wird. Dies ist das einzige (gute) ROM, das zu meinem Gerät passt, und es gibt keine Möglichkeit, den Status von SELinux zu ändern.

Jetzt bin ich mir nicht wirklich sicher, was die Konsequenzen einer solchen Entscheidung sind und würde mich freuen, wenn mir jemand erklären könnte (ich habe gegoogelt und weiß, was es theoretisch ist ... nur nicht in der Praxis). Das besagte ROM hat seine Wurzel auf "disabled", also ist das Gerät angeblich nicht gerootet, aber wie das mit dem SELinux zusammenpasst, weiß ich nicht.


Sind Sie überzeugt, dass "es keine Möglichkeit gibt, den Status von SELinux zu ändern"? Haben Sie versucht, setenforce 1vom Terminal-Emulator aus (als root) auszugeben ?
Marc.2377

Nun, ich werde ein bisschen mehr darüber recherchieren, aber ich bin mir aufgrund der Anweisungen des ROM-Erstellers ziemlich sicher. Ich bin ein bisschen ein Neuling, also bin ich mir nicht 100% sicher, warum (ich muss noch nachforschen
J. Oh

Antworten:


12

TL; DR: Fühlen Sie sich frei, direkt zu der Schlussfolgerung unten zu springen, wenn Sie möchten :)!

Ziel von SELinux ist es, die Eskalation von Berechtigungen zu verhindern, indem eine verbindliche Richtlinie durchgesetzt wird, die mögliche Aktionen von nicht privilegierten und privilegierten Benutzern einschränkt.

Der Begriff "Benutzer" umfasst hier auch alle Prozesse, die auf dem Gerät ausgeführt werden, unabhängig davon, ob sie in direktem Zusammenhang mit den physischen Benutzeraktionen stehen (der Mensch, Sie;)), da jeder Prozess mit einem Systemkonto "Benutzer" ausgeführt wird.

In der Vergangenheit werden Berechtigungen auf Unix-basierten Systemen mit einem sogenannten DAC-System (Discretionary Access Control) verarbeitet. In diesem Modell:

  • Ressourcen wie Dateien haben Eigentümer, die Zugriffsrechte für die Ressourcen definieren können, deren Eigentümer sie sind. Auf diese Weise können sie entscheiden, ob eine bestimmte Ressource privat sein soll (nur der Eigentümer kann darauf zugreifen) oder ob sie für andere Benutzer freigegeben werden soll.
  • Darüber hinaus haben Sie den Superuser ( rootauf Unix-basierten Systemen genannt), der der administrative Benutzer ist und Zugriff auf alles auf dem System hat. Dieses Konto kann interaktiv von einem Benutzer (normalerweise einem Systemadministrator) für die Wartung oder Reparatur des Geräts verwendet werden. In der Regel wird dieses Konto jedoch hauptsächlich von Hintergrunddiensten oder Diensten auf niedriger Ebene verwendet, für die eine solche Berechtigungsstufe erforderlich ist: Gerätetreiber, Netzwerkkonfigurationsdienste, Dienste Zugriff auf Dateien von jedem Benutzer oder Abwicklung der internen Kommunikation zwischen Benutzern.

Das ist sehr schön und bietet schon eine gute Sicherheit. Was ist jedoch mit solchen Umständen:

  1. Was würde passieren, wenn ein Fehler in einem Dienst rootgefunden wird, der so läuft, wie er es einem Angreifer ermöglicht, diesen Dienst dazu zu bringen, beliebigen Code auszuführen? Ein solcher Angreifer würde einen vollständigen Zugriff auf das Gerät erhalten. Um einige konkrete Beispiele zu nennen, könnte ein solcher Fehler ausgelöst werden, indem speziell gestaltete Netzwerkkonfigurationsinformationen ( DHCP ) oder eine MMS an das Telefon gesendet werden.
  2. Was würde passieren, wenn ein Benutzer private Ressourcen nicht richtig schützt? Auf diese Ressourcen können dann andere nichtprivilegierte Benutzer in böswilliger Absicht zugreifen (sie können gelesen, möglicherweise sogar geändert oder gelöscht werden). Dies ist in der Regel der Fall, wenn auf Ihrem Telefon eine bösartige Anwendung ausgeführt wird (unabhängig davon, ob Sie dazu verleitet wurden, sie zu installieren, oder ob sie von sich aus durch die Verwendung eines Fehlers in einer anderen nicht privilegierten Anwendung, einem Browser oder einem E-Mail-Client für das Telefon hierher gekommen ist) Diese böswillige Anwendung versucht, direkt auf andere Anwendungsdaten oder Speicherorte zuzugreifen (sie kann auf normalerweise nicht erreichbare Daten zugreifen oder sich an mehreren Stellen selbst installieren, um die Entfernung zu erschweren).

Hier kommt SELinux.

SELinux ist ein MAC-System (Mandatory Access Control). Während in dem zuvor beschriebenen DAC-System Benutzer dafür verantwortlich waren, angemessene Rechte für ihre eigenen Ressourcen festzulegen, wird bei einem MAC-System eine systemweite Richtlinie (die mit dem Betriebssystem bereitgestellt wird) sowohl für privilegierte als auch für nichtprivilegierte Benutzer durchgesetzt.

Dies löst die beiden oben genannten Probleme auf folgende Weise:

  1. Wie gesagt, diese Richtlinie gilt auch für privilegierte Benutzer. Dies bedeutet, dass ein Dienst, der für die Netzwerkkonfiguration des Geräts entwickelt wurde, mit einer ordnungsgemäß gestalteten Richtlinie keine weiteren Funktionen ausführen kann: Beispielsweise hat er keinen Zugriff auf SMS, und ein Dienst, der SMS verarbeitet, hat keinen Zugriff auf die Netzwerkkonfiguration , und keiner von beiden hat Zugriff auf die Daten des Benutzers, obwohl beide über das Superuser-Konto ausgeführt werden.
  2. Android hat kürzlich eine Mehrbenutzerfunktion hinzugefügt, die von SELinux erzwungen wird und verhindert, dass Benutzer auf die Daten anderer Benutzer zugreifen können. Darüber hinaus ist die SELinux-Richtlinie auch für die Beschreibung des Verhaltens zulässiger Anwendungen verantwortlich. Selbst wenn einige Ressourcen mit dem DAC-System nicht ordnungsgemäß geschützt werden, wird SELinux die Rettung übernehmen und den direkten Zugriff der böswilligen Anwendung auf sie verhindern.

Die DAC- und MAC-Systeme schließen sich nicht gegenseitig aus, im Gegenteil, das MAC-System (SELinux) fungiert als zweite Verteidigungsschicht hinter dem DAC-System (die traditionellen Unix-ähnlichen Berechtigungen). Die Aufgabe von SELinux ist es, alle Aktivitäten zu blockieren, die gegen die Richtlinie verstoßen, die ansonsten nur im DAC-System akzeptiert würden.

Das Schwierige ist, dass das Schreiben einer solchen Richtlinie sehr komplex sein kann: Sie muss in der Tat die Komponenten jedes Geräts für jede mögliche Verwendung in jeder Situation abdecken. Tatsächlich ist es egal, ob eine Handlung in Ihrer Situation legitim ist: Wenn sie nicht in der Police enthalten ist, ist sie verboten . Schlecht gestaltete Richtlinien können daher zufällige Konsequenzen haben, z. B. Anwendungsabstürze, unbrauchbare Funktionen usw.

Aus diesem Grund war SELinux in den ersten Versionen von Android standardmäßig im "Permissive" -Modus enthalten. In diesem Modus protokolliert SELinux Richtlinienverletzungen, versucht jedoch nicht, die zugehörige Aktivität zu blockieren. Durch die Analyse der resultierenden Protokolldateien wird es möglich, die Richtlinie so weit zu korrigieren und zu verbessern, dass nur noch böswillige oder unerwünschte Verhaltensweisen gegen die Richtlinie verstoßen. Zu diesem Zeitpunkt kann SELinux in den "Enforcing" -Modus versetzt werden: Es wird nun nicht nur protokolliert, sondern auch jede störende Aktion blockiert.

Fazit

SELinux ist eine Abhilfemaßnahme. Es verhindert nicht, dass Angreifer in Ihr Telefon eindringen, stellt jedoch sicher, dass sie dort so wenig wie möglich Dinge tun können, die im Idealfall nicht sinnvoll sind, und beseitigt so das Interesse, das Telefon überhaupt anzugreifen.

Je älter das ROM ist, desto größer ist die Anzahl der Sicherheitslücken, die einen solchen Zugriff ermöglichen. SELinux wäre eine effiziente Methode, um trotz dieser bekannten Sicherheitslücken ein Minimum an Sicherheit zu gewährleisten. Um jedoch ordnungsgemäß zu funktionieren, ist SELinux auf eine komplexe Richtlinie angewiesen.

Wenn Ihr ROM standardmäßig mit SELinux im "Permissive" -Modus ausgestattet ist, bedeutet dies wahrscheinlich, dass die darin enthaltene Richtlinie nicht zuverlässig genug ist, um sicher in den "Enforcing" -Modus zu wechseln.

Wenn Sie technisch versiert genug sind und Zugriff auf das Telefonprotokoll haben ( dmesgzumindest, aber normalerweise werden sie auch kopiert logcat: Es gibt Anwendungen, die das letztere sehen können, aber abhängig von Ihrer Android-Version benötigen sie möglicherweise Root-Zugriff), können Sie überprüfen, ob Sie finden "avc" -Einträge: Dies sind Meldungen, die Ihnen mitteilen, dass SELinux gerade eine gegen die Richtlinie verstoßende Aktion erkannt hat.

Hier ist ein Beispiel für einen solchen Eintrag von der CyanogenMod-Website :

type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace" 
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t 
tcontext=system_u:object_r:sysfs_t tclass=file

Wenn es keine gibt, nur ein paar von ihnen oder aus irgendeinem Grund, von dem Sie glauben, dass sie Sie nicht davon abhalten, das Telefon zu benutzen, können Sie versuchen, SELinux in den "Enforcing" -Modus zu versetzen. In älteren CyanogenMod-ROMs war dies einfach und möglich, indem einfach eine versteckte Option in der GUI verwendet wurde (es ist nicht erforderlich, das Telefon zu rooten oder eine bestimmte Anwendung zu installieren). Ich weiß nicht, ob andere ROMs die gleiche Funktion bieten, aber Sie haben das CyanogenMod verwendet tag Ich nehme an, du hast Glück;).


@ j.d'oh: Kommentare sind nicht für eine längere Diskussion gedacht. Ich habe einen neuen Chatroom erstellt , um Ihre Fragen zu beantworten.
WhiteWinterWolf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.