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 (
root
auf 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:
- Was würde passieren, wenn ein Fehler in einem Dienst
root
gefunden 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.
- 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:
- 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.
- 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 ( dmesg
zumindest, 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;).
setenforce 1
vom Terminal-Emulator aus (als root) auszugeben ?