bs-6.4 1
6.4 Zugriffsschutz
Betriebssystem muss Betriebssicherheit garantieren:
unerwünschte Auswirkungen
von Hardware/Software-Fehlern ( „safety“)
von absichtlichen Manipulationen ( „security“)
sollen verhindert, begrenzt, oder zumindest erkannt werden.
bs-6.4 2
Beispiele für Folgen von Sicherheitslücken im Betriebssystem:
Systemabsturz, verursacht durch Hardware-Fehler,
Betriebssystem-Fehler,
Programmfehler,
Sabotage
Monopolisierung von Ressourcen
Ausspionieren vertraulicher Daten
Verfälschen oder Löschen fremder Daten
bs-6.4 3
Beispiele für Sicherheitsmaßnahmen des Betriebssystems:
Wiederholung von Lese/Schreibversuchen nach Fehler
Geordnetes Abschalten bei Stromausfall
Zugangskontrolle mit Passwortsystem
Virtualisierung von Ressourcen !
bs-6.4 4
Wichtigste Kategorie von Sicherheitsmaßnahmen
gegen geplante Angriffe ( „security“) ist
Zugriffsschutz (access protection, access control):
Objekte (z.B. Geräte, Segmente, Dateien!, ...)
werden vor unerwünschten Zugriffen geschützt;
Subjekte (z.B. Prozesse, Programme) sind die Auslöser
der Zugriffsversuche.
Zugriffsschutzsystem (protection system, reference monitor)
• weiß, was erlaubt bzw. verboten ist,• überwacht alle Zugriffsversuche und• verhindert sie gegebenenfalls.
bs-6.4 5
6.4.1 Autorisierung eines Prozesses
= Menge von Attributen eines Prozesses, die für die
Überwachung des Zugriffs auf Dateien (manchmal
auch für andere Systemaufrufe) relevant sind, z.B.
Benutzerkennung (user identity),
Ermächtigungsstufe (clearance),
Rolle des Benutzers (role),
. . . . .
bs-6.4 6
Beispiel Unix:
Jeder Benutzer hat einen Login-Namen und ist einer
oder mehreren benannten Benutzergruppen zugeordnet.
Systemintern werden Benutzer und Gruppen durch
Nummern identifiziert,
UID - user identifier ( 0 für Systemverwalter root)
GID - group identifier ( 0 für Systemgruppe wheel)
die man in den Einträgen von
/etc/passwd und /etc/group finden kann:
bs-6.4 7
Eintrag von /etc/passwd :
lohr:X4sCwh/Da%pT2:123:97:Peter Löhr:/usr/lohr:/bin/csh
UID GID (Primärgruppe)
Eintrag von /etc/group :
prof:5p%swAxb72WzG :97 :alt,fehr,graf,.....
Jeder Benutzer gehört zu einer Primärgruppe, die in der
Passwortdatei für ihn vermerkt ist, kann aber weiteren
Gruppen angehören.
bs-6.4 8
Autorisierung eines Prozesses besteht aus
RUID – real userid,EUID – effective userid,
RGID – real groupid,EGID – effective groupid,
Initialisierung: bei fork werden diese Attribute vomErzeuger kopiert.
Abfragen: getuid() liefert RUID geteuid() liefert EUIDgetgid() liefert RGIDgetegid() liefert EGID
bs-6.4 9
Ändern der Autorisierung ist stark eingeschränkt:
setuid(uid)
Vor.: uid == RUID oder
EUID == 0 (d.h. Super-User root)
Eff.: RUID == EUID == uid
setgid(gid) ( = dasselbe für groupid)
Vor.: gid == RGID oder
EUID == 0 (d.h. Super-User root)
Eff.: RGID == EGID == uid
bs-6.4 10
exec(prog,...) berücksichtigt Dateiattribute von prog:
UID (Eigner)
GID (Eignergruppe)
SUID („setuid bit“)
SGID („setgid bit“)
Eff.: RUID und RGID bleiben unverändert, aber:
wenn SUID, dann EUID == UID ;
wenn SGID, dann EGID == GID .
? Wozu ist das gut ?
Datenabstraktion
mit Programmiersprache:
prozedurale Schnittstelle
verborgene Datenrepräsentation
Datenabstraktion
mit Programmiersprache: bei Dateien:
prozedurale Schnittstelle Programme mit SUID und UID = y
verborgene Datenrepräsentation Dateien mit UID = y
Kapselung
syntaktisch über gleiche UID
bs-6.4 13
RUID = xEUID = x
RUID = xEUID = y
exec mit SUID und UID = y
setuid(x) „x führt y-Programmmit y-Autorisierung aus“
bs-6.4 14
Beispiele: „Systemprogramme“ mit y = 0 (Super-User)
passwd ändert nach Eingabe eines neuen Passwortsdas Passwort des Benutzers in der Passwortdatei
login usr ändert nach korrekter Passworteingabe für usr die Autorisierung der Shell in diejenige für usr (!)
su usr startet nach korrekter Passworteingabe für usr eine neue Shell mit der Autorisierung für usr (!)
newgrp gr (Solaris) startet neue Shell mit neuerAutorisierung RGID/EGID gemäß Gruppe gr(RUID/EUID bleiben unverändert)Vor.: Benutzer muß der Gruppe angehören
und ggfls. Gruppenpasswort kennen)
bs-6.4 15
POSIX-Standard erweitert Autorisierung um
sEUID , d.i. „saved EUID“
sEGID , d.i. „saved EGID“
Entsprechend geänderte setuid/setgid, z.B.
setuid(uid)
Vor.: (1) EUID == 0 (Super-User) oder(2) uid == RUID oder uid == sEUID
Eff.: EUID == RUID == sEUID == uid im Fall (1), sonst lediglich
EUID == uid
bs-6.4 16
RUID = xEUID = x
sEUID = ....
RUID = xEUID = x
sEUID = y
RUID = xEUID = y
sEUID = y
execmit SUID und UID = y
setuid(x)
setuid(y)
beliebiges Hin- und Herschalten der EUID !
bs-6.4 17
6.4.2 Schutzstatus von Dateien
Jede Datei (Daten, Programm, Verzeichnis, ...) hat
Schutzstatus (protection mode, access control list),
gespeichert als Attribut(e) im Dateideskriptor.
Zugriffsschutzsystem (protection system) realisiert Abbildung
accessOK : Autorisierung Schutzstatus Operation Boolean
bs-6.4 18
Beispiel: Schutzstatus in Unix (vgl. 6.2.2):
UID des EignersGID der Eignergruppe
SUID bit SGID bit
RuWuXuRgWgXgRoWoXo
(Zugriffs–) Rechte (access rights,permissions),
(je 1 Bit)
Read, Write, eXecute füruser, d.h. Eigner,group, d.h. Eignergruppe,others, d.h. alle anderen
bs-6.4 19
Initialisierung bei Dateierzeugung, z.B. mit creat,mkdir:
UID = EUIDGID = EGID
Bits SUID, SGID, Ru, Wu, Xu, Rg, Wg, Xg, Ro, Wo, Xo
gemäß den niederwertigen Bits des 2. Arguments mode von creat,mkdirmodifiziert durch die aktuelle mode mask mask : wo mask-Bit gesetzt ist wird mode-Bit ignoriert.
Die mode mask ist ein Prozessattribut (!), anfangs 022 (oktal),
vererbt an Kindprozesse, änderbar durch Systemaufruf
umask(mask) und Befehl umask mask
bs-6.4 20
Abfragen des Schutzstatus durch stat, fstat
und Befehl ls –l , z.B. -rws--x--x 1 lohr institut 9 Feb 10 15:38 tst
s statt x bedeutet „Xu-Recht und SUID-Bit“
Ändern des Schutzstatus durch chmod, chown (6.1.1.2):
chmod darf nur der Datei-Eigner oder Super-User ausführen!
chown darf nur der Super-User ausführen !
(Schutz des Schutzstatus !)
bs-6.4 21
6.4.3 Überwachung der Dateioperationen
durch einen Reference Monitor
im Zugriffsschutzsystem, der diese Abbildung umsetzt:
accessOK : Autorisierung Schutzstatus Operation Boolean
Falls der Zugriff verwehrt wird, Fehlermeldung
(z.B. Fehler EACCES in Unix)
bs-6.4 22
Zugriffsrecht im Schutzstatus bezieht sich i.a. – abhängig vom jeweiligen Dateityp! – auf verschiedene Operationen
und: eine Operationen kann mehrere Rechte erfordern
Hypothetische Beispiele (nicht Unix!):
Rechte Dateityp
sequentiell indexsequentiell Verzeichnis
eXecute exec - -Read read lookup,update lookup,listWrite write update,delete unlinkAppend append enter link,create*Protect chmod chmod chmod
bs-6.4 23
Unix:
Rechte Dateityp
sequentiell Verzeichnis
R read read,link,unlink
W write creat,mkdir, link,unlink
X exec ( lookup *)
bs-6.4 24
Kriterium für erlaubten Zugriff mit einer Operation,
die das Recht R (und/oder W oder X) erfordert:
Ru und EUID = UID
oder Rg und EUID UID und EGID = GID
oder Ro und EUID UID und EGID GID
Bemerkung: Rechte wie z.B. ---R--RW-
sind möglich, aber selten sinnvoll