Povinné řízení přístupu (SELinux)
Jiří Koten, xkoten1(at)fi.muni.cz
Povinné a volitelné řízení přístupu
Discretionary Access Control (DAC)
- subjekt (vlastník objektu) rozhoduje o tom, kdo má k objektu přístup -> volitelná
-
jednoduchost, flexibilita
-
nedostatečná bezpečnost, systém se nestará o využití jednou získaných dat (kopii souboru můžu nastavit jiná přístupová práva)
-
povolení práv pro určité programy je třeba řešit pomocí SUID/SGID bit (programy musí být napsány bezpečně, je jich vstupy nejsou důvěryhodné)
-
administrátor (ale i hacker) má neomezený přístup ke všem objektům
Mandatory Access Control (MAC)
-
systémová politika nezávislá na vůli subjektů rozhoduje o tom, kdo má k objektu přístup
-
zavádíme - kategorie subjektů (proces, uživatel) kategorie objektů (data)
-
při každém přístupu subjektu k objektu kontrolujeme, zda tento přístup odpovídá zásadám bezpečnostní politiky (pravidla toku dat mezi objekty a subjekty)
Security-Enhanced Linux (SELinux)
Instalace
- zvolit vhodnou distribuci podporující SELinux (Fedora, Debian, SUSE Linux od verze 11.1)
-
kompilace jadra s podporou pro SELinux (NSA SELinux Support)
-
podpora pouze pro ext2, ext3, JFS a XFS (Security Labels)
-
připojit SELinuxfs
-
speciální verze systémových balíčků (coreutils, pam, ...). Poskytují SELinux funkcionalitu (zobrazení bezpečnostního kontextu)
-
politiky pro aplikace
-
label filesystems (security label pro soubory)
Bezpečnostní kontext
-
rozhoduje se na základě trojice identita:role:typ a klasifikace v MLS (volitelně)
-
má každý subjekt (proces, uživatel) a objekt (soubor, adresář, socket, ...)
-
identita (user_u,system_u), odlišná od UID
-
role (sysadmin_r,system_r,user_r)
-
typ - typ objektu (file_t,default_t,user_home_dir_t)
Type Enforcement
Každému subjektu i objektu je přiřazen typ. U subjektů se typ označuje jako doména.
TE funguje na základě přechodových a přístupových pravidel.
Rozdělíme systém na menší části oprávněné provádět jen specifické operace - Doménu autorizujeme pro přístup k některým typům souborů a definujeme, co s nimi může provádět.
Pokud potřebujeme aby proces přistupoval k velkému počtu typů, umožníme mu přechod mezi doménami
Deklaraci typů provádíme pomocí atributů - určuje co typ znamená, k čemu slouží
Přechodová pravidla
-
pro soubory - nastavíme výsledné typy souborů, pokud je vytvoří nějaká doména. Tato pravidla si můžeme představit jako dědění. Když vytvoříme v adresáři nový soubor, zdědí svůj typ od nadřazeného adresáře.
-
pro procesy - definují novou doménu pro proces, zvolím přístupový bod (většinou spustitelný soubor) do nové domény
Přístupová pravidla
-
definujeme kdo, resp. jaký typ (s příslušnými atributy) smí přistupovat k jinému typu, který představuje nějakou třídu (soubor, adresář a další), a které operace má povoleno provádět.
-
Jestliže se subjekt bude snažit provádět operace s nějakým typem a třídou, zkontroluje se, jestli k dané operaci existuje pravidlo. Neexistuje-li, operace je zamítnuta a auditována (AVC). Platí co není explicitně povoleno, je zamítnuto.
Konfigurace
Příklad /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use.
# Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0
/usr/share/selinux/ - nástroje pro kompilaci vlastních politik,příklad pravidel.
/selinux - nastavení SELinuxu, která lze měnit za chodu.
Tvorba pravidel
TE soubor
policy_module(local,1.0)
require {
type sysadm_su_t, newrole_t;
}
allow sysadm_su_t newrole_t:process sigchld;
FC soubor
/opt/myprogs/mybin -- system_u:object_r:bin_t
Pak následuje kompilace modulů make a zavedení modulů semodule -i local.pp
Literatura