Linux/SELinux/04/13 Multi-Level Security
Linux/SELinux/04/13 Multi-Level Security - MLS
Beschreibung
- Multi-Level Security (MLS)
Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt
- Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
- Sowohl Subjekte als auch Objekte sind mit einer Sicherheitsstufe gekennzeichnet, die die Sicherheitsfreigabe eines Subjekts oder die Klassifizierung eines Objekts angibt
- Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt
Abbildung „Sicherheitsfreigabestufen“
- zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen
Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen
- Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen
- Abbildung Sicherheitsfreigabestufen
Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“
- zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft
- verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen
Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften „no read up“ und „no write down“
- Abbildung zulässige Datenflüsse unter Verwendung von MLS
MLS und Systemberechtigungen
MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert
- Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
- Es ist wichtig zu beachten, dass die MLS-Richtlinien von SELinux „nach“ den DAC-Regeln überprüft werden
- Eine höhere Sicherheitsfreigabe gewährt nicht automatisch die Berechtigung, willkürlich im Dateisystem zu stöbern
Benutzer mit Freigaben der höchsten Stufe erhalten in mehrstufigen Systemen nicht automatisch Administratorrechte
- Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen
Aktivieren von MLS in SELinux
- Hinweis
- Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft
Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren
- Aktivieren der SELinux-MLS-Richtlinie
- Installieren Sie das Paket selinux-policy-mls
sudo yum install selinux-policy-mls
- Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
- Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
- Um dies zu verhindern, konfigurieren Sie SELINUX=permissive in der Datei /etc/selinux/config
- Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie SELINUXTYPE=mls konfigurieren
- Ihre Konfigurationsdatei sollte wie folgt aussehen
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=permissive
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=mls
- Stellen Sie sicher, dass SELinux im permissiven Modus läuft
sudo setenforce 0
getenforce
Permissive
- Verwenden Sie das Skript fixfiles, um die Datei /.autorelabel mit der Option -F zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
sudo fixfiles -F onboot
- Starten Sie Ihr System neu
- Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
- Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
*** Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
*** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
*** Größe des Dateisystems und der Geschwindigkeit der Festplatten
***********
Jedes * (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden
- Im obigen Beispiel stehen elf *-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
- Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
- Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
- Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
- Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
- Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
- Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
- Siehe Kapitel Fehlerbehebung für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat
sudo grep "SELinux is preventing" /var/log/messages
- Wenn die Datei /var/log/messages keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie SELINUX=enforcing in der Datei /etc/selinux/config
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing - Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive - SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled - Es wird keine SELinux-Richtlinie geladen
SELINUX=enforcing
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted - Zielgerichtete Prozesse werden geschützt,
# mls - Multi-Level-Security-Schutz
SELINUXTYPE=mls
- Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
getenforce
Enforcing
und die MLS-Richtlinie ist aktiviert
sudo sestatus | grep mls
Policy from config file: mls
Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen
- Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
1. Fügen Sie einen neuen Linux-Benutzer mit dem Befehl useradd hinzu und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall staff_u)
sudo useradd -Z staff_u john
2. Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu
sudo passwd john
3. Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen
- Die Ausgabe sollte wie folgt aussehen
sudo semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ user_u s0-s0 *
john staff_u s0-s15:c0.c1023 *
root root s0-s15:c0.c1023 *
staff staff_u s0-s15:c0.c1023 *
sysadm staff_u s0-s15:c0.c1023 *
system_u system_u s0-s15:c0.c1023 *
4. Definieren Sie einen spezifischen Bereich für den Benutzer john
sudo semanage login --modify --range s2:c100 john
5. Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an
- Beachten Sie, dass für den Benutzer john nun ein spezifischer MLS-Bereich definiert ist
sudo semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ user_u s0-s0 *
john staff_u s2:c100 *
root root s0-s15:c0.c1023 *
staff staff_u s0-s15:c0.c1023 *
sysadm staff_u s0-s15:c0.c1023 *
system_u system_u s0-s15:c0.c1023 *
6. Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein
sudo chcon -R -l s2:c100 /home/john
Einrichten von polyinstanziierten Verzeichnissen
Die Verzeichnisse /tmp und /var/tmp/ werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt
- Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
- SELinux bietet eine Lösung in Form von polyinstanziierten Verzeichnissen
- Dies bedeutet im Effekt, dass sowohl /tmp als auch /var/tmp/ instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
- Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse /tmp und /var/tmp/ jedes Benutzers automatisch unter /tmp-inst und /var/tmp/tmp-inst eingebunden
Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren
- Aktivieren der Polyinstanziierung von Verzeichnissen
1. Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei /etc/security/namespace.conf, um die Instanziierung von /tmp, /var/tmp/ und den Home-Verzeichnissen der Benutzer zu aktivieren
tail -n 3 /etc/security/namespace.conf
/tmp /tmp-inst/ level root,adm
/var/tmp /var/tmp/tmp-inst/ level root,adm
$HOME $HOME/$USER.inst/ level
2. Stellen Sie sicher, dass in der Datei /etc/pam.d/login das Modul pam_namespace.so für die Sitzung konfiguriert ist
grep namespace /etc/pam.d/login
session required pam_namespace.so
3. Starten Sie Ihr System neu