Povinné řízení přístupu
Aleš Horna, xhorna@fi.muni.cz
Obsah
Discretionary Access Control
- Obvyklé Unixové řízení přístupu
- Vlastník souboru nastavuje přístupová práva (případně root)
- Práva rwx - read, write, execute
- Sticky bit
- Programy a volání: chmod, chown, chgrp, ls, stat
Access Control Lists
- Je designován aby pracoval spolu s UNIXovými přístupovými právy
- Je dependence systemd
- Umožňuje nastavit přístupová práva pro neomezené množství uživatelů a skupin
- Vyžaduje mount disku s parametrem ACL (lze nastavit permanentně v fstab)
Mandatory Access Control
- Omezuje DAC
- Root nastavuje přístupová práva
- Vlastník souboru nemůže měnit přístupová práva svých souborů, pokud mu to root neumožní
- subjekt - uživatel, proces
- objekt - soubor, port, adresář
- Přístupová práva subjektů k objektům jsou určena dle autorizačních pravidel
- V linuxu implementováno SELinuxem či AppArmor
SELinux
- Security Enhanced Linux
- Linuxový bezpečnostní kernelový modul
- Původně vyvinut NSA, v roce 2000 zveřejněn jako open source
- Least privilige principle
- Musí být podporovován jádrem
- Je třeba nastavit tyto parametry: lsm=landlock,lockdown,yama,integrity,selinux,bpf 1
- Při kompilaci vlastního kernelu jsou potřeba tyto přepínače: CONFIG_SECURITY_SELINUX=y; CONFIG_AUDIT=y 2
SELinux instalace Arch
Přes build script:
$ git clone https://github.com/archlinuxhardened/selinux.git
$ cd selinux
$ ./recv_gpg_keys.sh
$ ./build_and_install_all.sh
Také je možno instalovat přes pacman s přidáním repozitáře nebo přes AUR. Více zde: https://wiki.archlinux.org/title/SELinux#Installation
Nastavení
Módy
SELinux může operovat ve třech módech
- Enforcing
- Permissive
- Disabled
Pro zjištění současného módu a dalších informací lze využít příkaz sestatus případně getenforce. Příklad výstupu z aisy:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Pro nastavení lze využít příkaz setenforce s argumenty 0 (Permissive) či 1 (Enforcing).
Labels
Všechny soubory a procesy mají nastaveny label, který popisuje jejich zabezpečení. Lze jej zobrazit pomocí ls -Z.
Label je ve formátu user:role:type:level.
Na systémech s DAC se nejdříve zkontrolují DAC pravidla a až eventuelně poté SELinux politiky. Výchozí hodnoty jsou nastaveny
dle rodičovského adresáře.
Příklad z aisy:
-rw-r--r--. xhorna student system_u:object_r:nfs_t:s0 file.txt
Programy pro správu labelů: chcon, semanage fcontext, restorecon.
Booleans
- Umožňují měnit policy za běhu
- Lze vypsat pomocí semanage boolean --list
- Lze nastavit pomocí setsebool bool1 value
Policies
- Politiky v SELinuxu jsou soubory SELinuxových pravidel.
- Jsou z user-space načtené do kernelu
Každá pravidlo politiky popisuje interakci mezi subjektem a objektem:
ALLOW apache_process apache_log:FILE READ;
Vytváření vlastní politiky
Vygenerování vlastní politiky pro démona /usr/local/bin/mydaemon
Přejato z: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/writing-a-custom-selinux-policy_using-selinux
$ sepolicy generate --init /usr/local/bin/mydaemon
Created the following files:
/home/example.user/mysepol/mydaemon.te # Type Enforcement file
/home/example.user/mysepol/mydaemon.if # Interface file
/home/example.user/mysepol/mydaemon.fc # File Contexts file
/home/example.user/mysepol/mydaemon_selinux.spec # Spec file
/home/example.user/mysepol/mydaemon.sh # Setup Script
Pro vytváření politik a pravidel z logů lze použít audit2allow
Přidat pravidlo do politiky:
echo "allow mydaemon_t var_log_t:file { open write getattr };" >> mydaemon.te
Znovu sestavit politiku pomocí vytvořeného skriptu:
./mydaemon.sh
Politiku lze aplikovat i na kontejnery.
AppArmor
- Oficiální podpora v Arch Linuxu narozdíl od SELinux
- Omezuje jen procesy, pro které je AA nastaven
- Least privilige principle
Instalace Arch Linux
pacman -S apparmor
systemctl enable --now apparmor.service
Pro povolení AppArmoru je třeba nastavit parametry kernelu:
lsm=landlock,lockdown,yama,integrity,apparmor,bpf
Při použití vlastního kernelu je třeba využít volby:
CONFIG_SECURITY_APPARMOR=y
CONFIG_AUDIT=y
Konfigurace
Profily
- Jsou textové soubory uložené v /etc/apparmor.d
- Profily jsou typicky vytvořeny pro jednotlivé aplikace
- Práva se kontrolují vůči jednotlivým pravidlům, pokud pravidlo není nalozeno, přístup není umožněn
- Profily jsou obvykle pojmenovávány cestou k souboru oddělené tečkami
- Nové AA profily mohou být vytvořeny pomocí nástrojů aa-genprof(8) nebo aa-autodep(8) či manuálně
- AA profily jsou vytvořeny v complain mode
Příklad profilu z dokumentace
#include
profile test /usr/lib/test/test_binary {
#include
# Main libraries and plugins
/usr/share/TEST/** r,
/usr/lib/TEST/** rm,
# Configuration files and logs
@{HOME}/.config/ r,
@{HOME}/.config/TEST/** rw,
}
Profily obsahují nastavení přístupových práv:
- r -- read
- w -- write
- m -- memory map executable
- x -- execute
Použití
Následující pasáž je parafráze manuálu.
Na otestování, zdali je AA zapnutý:
$ aa-enabled
Vypsání statusu:
# aa-status
apparmor module is loaded.
44 profiles are loaded.
44 profiles are in enforce mode.
...
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Vypnutí:
$ aa-teardown
Přepnutí módů:
# enforce mode
$ aa-enforce
# complain mode
$ aa-complain
Tomoyo Linux
- Narozdíl od AA se snaží chránit celý systém
- Z chování systému se naučí pravidla, která pak v produkci vynucuje
- Není vhodný pro uživatele, kteří chtěji předpřipravený systém
Literatura