Lesen Sie diese Seite, um sich mit den Konzepten von SELinux vertraut zu machen.
Obligatorische Zugriffssteuerung
Security Enhanced Linux (SELinux) ist ein obligatorisches MAC-System (Access Control) für das Betriebssystem Linux. Als MAC-System unterscheidet es sich von der ein vertrautes DAC-System (Discretionary Access Control). In einem DAC-System wird der Inhaberschaft existiert, wobei ein Inhaber einer bestimmten Ressource den Zugriff kontrolliert Berechtigungen, die damit verknüpft sind. Diese sind normalerweise grob und subjektiv unbeabsichtigte Rechteausweitung. Ein MAC-System konsultiert jedoch ein zentrales Entscheidungsbefugnis über Zugriffsversuche.
SELinux wurde als Teil des Linux Security Module (LSM) implementiert. Framework, das verschiedene Kernel-Objekte und vertrauliche Aktionen erkennt die bei ihnen ausgeführt wurden. Zu dem Zeitpunkt, an dem jede dieser Aktionen wird eine LSM-Hook-Funktion aufgerufen, um zu ermitteln, sollte basierend auf den in einer opaken Security Objects. SELinux bietet eine Implementierung für diese Hooks und Sicherheitsobjekte, die in Kombination mit einer eigenen Richtlinie verwaltet werden, Entscheidungen über den Zugriff treffen.
Neben anderen Sicherheitsmaßnahmen von Android bietet die die potenziellen Schäden durch infizierte Computer und Konten. Verwendung von Tools wie den frei zugänglichen und obligatorischen Zugriffsrechten von Android Kontrollmöglichkeiten gibt Ihnen eine Struktur, mit der Sie sicherstellen, dass Ihre Software nur auf Minimum ausgeführt wird. Berechtigungsstufe. Dadurch werden die Auswirkungen von Angriffen abgeschwächt Wahrscheinlichkeit, dass fehlerhafte Prozesse Daten überschreiben oder sogar übertragen.
In Android 4.3 und höher bietet SELinux eine obligatorische Zugriffssteuerung (MAC) eine höhere Priorität als herkömmliche DAC-Umgebungen. Für Instanz muss die Software in der Regel als Root-Nutzerkonto ausgeführt werden, um in die Rohdaten schreiben zu können. Geräte zu blockieren. Wenn der Root-Nutzer in einer herkömmlichen DAC-basierten Linux-Umgebung gefährdet ist, dass der Nutzer auf jedem Rohblockgerät schreiben kann. Sie können jedoch Diese Geräte können mit SELinux gekennzeichnet werden, sodass der Prozess kann nur in die in der verknüpften Richtlinie angegebenen Daten geschrieben werden. In dieser kann der Prozess keine Daten und Systemeinstellungen außerhalb des bestimmte RAW-Block-Geräte.
Siehe Anwendungsfälle finden Sie weitere Beispiele für Bedrohungen und Möglichkeiten, ihnen mit SELinux zu begegnen.
Durchsetzungsstufen
SELinux kann in verschiedenen Modi implementiert werden:
- Moderat: Die SELinux-Sicherheitsrichtlinie wird nicht erzwungen, sondern nur protokolliert.
- Erzwingung: Die Sicherheitsrichtlinie wird erzwungen und protokolliert. Fehler werden als EPERM-Fehler angezeigt.
Diese Auswahl ist binär und bestimmt, ob Ihre Richtlinie Maßnahmen ergreift oder nur um potenzielle Fehler zu sammeln. „Moderat“ ist besonders nützlich bei Implementierung.
Typen, Attribute und Regeln
Android nutzt die TE-Komponente (Type Enforcement) von SELinux für seine
. Das bedeutet, dass alle Objekte (wie Datei, Prozess oder Socket) eine
type, der ihnen zugeordnet ist. Standardmäßig wird eine App
hat den Typ untrusted_app
. Bei einem Prozess ist sein Typ ebenfalls
auch als Domain bezeichnet. Es ist möglich, einen Typ mit einem oder
viele attributes. Attribute sind nützlich, um auf mehrere Typen zu verweisen.
aus.
Objekte werden Klassen zugeordnet.
(z.B. eine Datei, ein Verzeichnis, ein symbolischer Link, ein Socket) und die verschiedenen Zugriffsarten
für jede Klasse werden durch Berechtigungen repräsentiert.
Für die Klasse ist beispielsweise die Berechtigung open
vorhanden.
file
. Typen und Attribute werden zwar regelmäßig im Rahmen
die Android SELinux-Richtlinie, Berechtigungen und Klassen statisch definiert und
wird selten im Rahmen einer neuen Linux-Version aktualisiert.
Eine Richtlinienregel hat das folgende Format:
allow source target:class permissions;
Dabei gilt:
- Quelle: Typ (oder Attribut) des Subjekts der Regel. Wer fordert den Zugriff an?
- Ziel: Der Typ (oder das Attribut) des Objekts. Welchen Zugriff wird angefordert?
- Klasse: Die Art des Objekts (z.B. Datei, Socket), auf das zugegriffen wird.
- Berechtigungen: Der durchgeführte Vorgang oder die Gruppe von Vorgängen (z.B. Lese- oder Schreibvorgänge).
Hier ist ein Beispiel für eine Regel:
allow untrusted_app app_data_file:file { read write };
Dies besagt, dass Apps Dateien mit dem Label
app_data_file
Es gibt noch andere Typen von Apps. Für
Instanzen haben, wird isolated_app
für Anwendungsdienste mit
isolatedProcess=true
. Anstatt die
für beide Typen gilt, verwendet Android ein Attribut namens appdomain
für alle App-Typen:
# Associate the attribute appdomain with the type untrusted_app. typeattribute untrusted_app, appdomain; # Associate the attribute appdomain with the type isolated_app. typeattribute isolated_app, appdomain; allow appdomain app_data_file:file { read write };
Wenn eine Regel geschrieben wird, die einen Attributnamen angibt, ist dieser Name automatisch auf die Liste der Domains oder Typen erweitert, die mit der . Einige wichtige Attribute sind:
domain
– Attribut, das mit allen Prozesstypen verknüpft istfile_type
– Attribut, das allen Dateitypen zugeordnet ist.
Makros
Insbesondere für den Dateizugriff gibt es viele Arten von Berechtigungen,
zu berücksichtigen. Beispielsweise reicht die Berechtigung read
nicht aus, um die Datei
oder stat
dazu aufrufen. Zur Vereinfachung der Regeldefinition
stellt eine Reihe von Makros für die häufigsten Fälle bereit. Um beispielsweise
um die fehlenden Berechtigungen wie z. B. open
aufzunehmen, die Regel oben
wie folgt umformuliert werden:
allow appdomain app_data_file:file rw_file_perms;
Weitere Informationen finden Sie in der global_macros
.
und te_macros
-Dateien finden Sie weitere Beispiele für nützliche Makros. Nach Möglichkeit sollten Makros verwendet werden
um die Wahrscheinlichkeit von Fehlern aufgrund von Ablehnungen
Berechtigungen.
Nachdem ein Typ definiert wurde, muss er der Datei oder dem Prozess zugeordnet werden. die sie repräsentiert. Siehe SELinux implementieren . Weitere Informationen zur finden Sie in der SELinux-Notebook.
Sicherheitskontext und ‐kategorien
Beim Debuggen von SELinux-Richtlinien oder Labeling-Dateien (über
file_contexts
oder ls -Z
)
in einem Sicherheitskontext (auch als Label bezeichnet). Für
Beispiel:
u:r:untrusted_app:s0:c15,c256,c513,c768
Ein Sicherheitskontext hat folgendes Format:
user:role:type:sensitivity[:categories]
In der Regel können Sie die
user
-, role
- und sensitivity
-Felder einer
Kontext (siehe Spezifität). Das type
wird im vorherigen Abschnitt erläutert. categories
gehören zu
das Multi-Level Security (MLS)
in SELinux unterstützt. Seit Android S werden Kategorien verwendet, um:
- die App-Daten für den Zugriff durch andere Apps zu isolieren,
- Die App-Daten von einem physischen Nutzer zum anderen isolieren.
Spezifität
Android verwendet nicht alle von SELinux bereitgestellten Funktionen. Beim Lesen externe Dokumentation erhalten Sie diese Punkte:
- Die meisten Richtlinien in AOSP werden mithilfe der Kernel Policy Language definiert. Es gibt einige Ausnahmen für die Verwendung der Common Intermediate Language (CIL).
- SELinux-Nutzer werden nicht verwendet. Die einzige benutzerdefinierte
u
Bei Bedarf werden physische Nutzer mithilfe des Felds „Kategorien“ eines Sicherheitskontexts dargestellt. - SELinux-Rollen und rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) werden nicht verwendet. Es werden zwei Standardrollen definiert und verwendet:
r
für Subjekte undobject_r
für Objekte. - SELinux-Vertraulichkeiten werden nicht verwendet. Die standardmäßige Empfindlichkeit für
s0
ist immer festgelegt. - Die booleschen Werte für SELinux werden nicht verwendet. Sobald die Richtlinie für ein Gerät erstellt wurde, hängt nicht vom Status des Geräts ab. Dies vereinfacht die Richtlinien prüfen und Fehler beheben.