Povinné řízení přístupu

Obsah

1 Discretionary Access Control1

  • tradiční řízení přístupu tak jak ho známe
  • vlastník souboru rozhoduje o tom kdo k souboru může přistupovat
  • základná práva: read(r), write(w), execute(x)
  • setuid(s)/setgid(s)/sticky(t) bit
  • příkazy chmod, chown, chgrp

2 Rozšířené atributy souboru2

  • dodateční informace o soubory ve style jméno:hodnota
  • čtyři třídy atributů: security, system, trusted a user
  • umožnili implementovat ACL a Capabilities v Linuxu
  • jsou používány i v SELinuxu
  • příkazy setfattr, getfattr

2.1 Access Control Lists3

  • více flexibilní nastavování práv
    • možnost nastavení zvlášť pro libovolného uživatele či skupinu
  • souborový systém musí být připojen pomocí mount -o acl
    • lze nastavit permanentně v /etc/fstab
    • výchozí parametr pro Btrfs, Ext2/3/4
  • příkazy setfacl, getfacl

2.2 Capabilities4

  • náhrada za setuid bit
  • většina programů nepotřebuje plná root práva
  • umožňuje podrobněji nastavit práva programů
  • příkazy setcap, getcap
  • pomocí capsh lze spustit program s určitými capabilities

3 Linux Auditing System5

  • umožňuje sbírat informace o systému týkající se bezpečnosti
  • součástí jádra (parametr CONFIG_AUDIT)
  • aby běžel i při spuštění systému je třeba nastavit audit=1
  • démon se spouští jako auditd.service
  • zapisuje do souboru /var/log/audit/audit.log
  • možná integrace s AppArmorem a SELinuxem
  • nástroje auditctl, aureport, ausearch, autrace

4 Mandatory Access Control6

  • přístup k objektům (souborům, složkám, portům apod.) neurčuje vlastník, ale administrátor
  • zda je přístup subjektu (procesu či vlákna) k objektu povolen určují autorizační pravidla
    • subjekty a objekty mají sadu bezpečnostních atributů
  • v Linuxu implementováno pomocí knihovny Linux Security Modules7 (součástí jádra)
    • LSM používá hákování (hooks) funkcí jádra
    • spouští se v případech kdy je třeba rozhodnout zda se povolí/zamítne přístup
    • nenahrazuje, ale doplňuje DAC

4.1 Labels MAC

  • používá rozšířené atributy souborů
  • objekty i subjekty mají nastaveny značky týkající se bezpečnosti

4.1.1 SELinux8

  • podpora ve Fedoře, RHELu, CentOS, Debianu, Ubuntu, Androidu
  • při kompilaci kernelu potřeba nastavit CONFIG_SECURITY_SELINUX=y a CONFIG_AUDIT=y
  • dále také je třeba nastavit následující parametr kernelu lsm=landlock,lockdown,yama,selinux,bpf
  • lze se jej naučit pomocí omalovánek
    • značky jsou ve tvaru user:role:type:level
      • složka .ssh má značku system_u:object_r:ssh_home_t:s0
      • proces sshd má značku system_u:system_r:sshd_t:s0
      • soubor /usr/sbin/sshd má značku system_u:object_r:sshd_exec_t:s0
      • port 22 má značku system_u:system_r:sshd_t:s0
    • politiky říkají co je v systému možné na základě značek
    • co není povoleno je zakázáno (výjimkou je unconfined)
    • objekty mohou patřit do kategorií9
      • k nim pak může přistupovat pouze SELinux uživatelé patřící do stejné kategorie
      • tomuto se říká Multi-Category Security
    • podporuje i Multi-Level Security
  1. Nastavení
    • nastavuje se v /etc/selinux/config
    • tři různé stavy: enforcing, permissive, disabled
      • příkazy setenforce, getenforce, sestatus
      • pokud se přechází z disabled do permissive, tak je třeba udělat touch /.autorelabel
    • tři různé typy ochrany: targeted, minimum, mls
  2. Přepínač -Z
    • mnohé programy přidávají podporu SELinuxu pomocí přepínače -Z
    • nastavení defaultního kontextu při přesunu: mv -Z
    • nastavení defaultního kontextu při kopírování: cp -Z
    • vypsání bezpečnostního kontextu uživatele: id -Z
    • vypsání značek portů: netstat -Z
    • vypsání značek u souborů: ls -Z
    • vypsání značek procesů: ps Z
    • přidání značky container_file_t k volume: docker run -v /dir:/dir:Z
  3. Booleans
    • politiky mohou definovat tzv. booleans
      • umožňují nastavit funkcionalitu bez nutnosti tvorby zcela nové politiky
      • nejsou to čistě jen hodnoty typu boolean
    • nastavení na určitou hodnotu: setsebool
    • získání hodnoty: getsebool či semanage boolean -l
  4. Vytváření politik
    • nová politika pro daný spustitelný soubor se vytvoří pomocí sepolicy generate10
      • vznikne soubor NAME.te s definicí politiky
      • soubor NAME.if definuje jak mohou přistupovat k vygenerovaným typům ostatní moduly
      • soubor NAME.fc definuje defaultní kontext pro dané cesty
      • vygeneruje se skript NAME.sh jenž slouží ke kompilaci a instalaci politiky
        • dokáže i opravit značky
    • soubor s politikou může vypadat následovně:11

      policy_module(myapp,1.0)
      
      type myapp_t;
      type myapp_exec_t;
      init_daemon_domain(myapp_t, myapp_exec_t)
      
      # Grant myapp_t the signal privilege
      allow myapp_t self:process { signal };
      
      • příslušný myapp.fc může obsahovat toto: /sbin/myapp -- gen_context(system_u:object_r:myapp_exec_t,s0)
    • můžeme definovat i vlastní značky uvnitř politiky12
      • vytvoříme značku: type app_var_t;
      • deklarujeme že značka je typ souborů: files_type(app_var_t)
      • následně můžeme definovat pravidla s novou značkou:
        • allow app_t app_var_t:dir { add_name remove_name write search};
        • allow app_t app_var_t:file { unlink create open rename write read };
    • nástroj audit2allow vytváří politiky z logů
      • např. ausearch -i -m AVC -sc no -ts recent -se myapp_t | audit2allow -m new_module > new_module.te
    • politiku můžeme zkompilovat manuálně:13
      • vytvoříme politiky v souboru myapp.te
      • zkompilujeme modul: checkmodule -M -m -o myapp.mod myapp.te
      • následně vytvoříme z modulu balíček: semodule_package -o myapp.pp -m myapp.mod
      • načteme balíček do kernelu: semodule -i myapp.pp
    • pro kontejnery existuje nástroj udica14
  5. Změna kontextu
    • automatické nastavení bezpečnostního kontextu dle umístění: restorecon
    • změna bezpečnostního kontextu souboru: chcon
      • změní label ale ne defaultní kontext
    • pythonový nástroj na konfiguraci SELinuxu: semanage
      • nastavení kontextu permanentně: semanage fcontext -a -t myfile_t /path/to/myfile
        • využívá setfiles
  6. Řešení problémů15
    • špatně nastavené labely (viz změna kontextu)
    • atypicky nastavená aplikace (např. httpd používá složku v domovském adresáři)
      • ve většině případu stačí nastavit příslušný boolean
      • někdy nutnost vytvořit novou politiku
    • chyba v politice
      • lze vyřešit přidáním nové politiky (audit2allow)
    • problém může také signalizovat útočníka
  7. Nevýhody
    • aby byl systém chráněn, je třeba velké množství pravidel
    • velmi komplexní systém
      • poměrně složitá konfigurace
      • je třeba aby si některé nástroje byli vědomi SELinuxu
      • může zbrzdit výkon systému až o asi 7 %16

4.1.2 Smack17

  • používán v systému Tizen (pro mobilní telefony), v systémech pro televize a embedded zařízení
  • klade si za cíl jednoduchost
  • podobný SELinuxu
  • v běžných systémech příliš nepoužíván

4.2 Pathname MAC

  • řízení přístupu funguje na základě cesty k souboru
  • jednodušší systém než značkování (na implementaci i používání)
  • nevýhodou je, že se oprávnění nezachovají při přesunu souboru

4.2.1 AppArmor18

  • podpora v Ubuntu, Debianu, openSUSE, Arch Linuxu
  • při kompilaci kernelu potřeba nastavit CONFIG_SECURITY_APPARMOR=y a CONFIG_AUDIT=y
  • dále také je třeba nastavit následující parametr kernelu lsm=landlock,lockdown,yama,apparmor,bpf
  • pro různé aplikace (binárky) jsou definované tzv. profily
    • profil definuje bezpečnostní politiky týkající se daného programu
    • profily jsou uloženy v /etc/apparmor.d/
      • jména souborů jsou většinou pojmenovány podle cesty ke spustitelnému souboru
    • pro načtení všech profilů při startu je třeba povolit apparmor.service
  • typický profil vypadá následovně:18

    #include <tunables/global>
    profile test /usr/lib/test/test_binary {
        #include <abstractions/base>
    
        # Main libraries and plugins
        /usr/share/TEST/** r,
        /usr/lib/TEST/** rm,
    
        # Configuration files and logs
        @{HOME}/.config/ r,
        @{HOME}/.config/TEST/** rw,
    }
    
    • pomocí #include se importuje jiný soubor
    • v profilu se definují práva k jednotlivým souborům
      r
      čtení
      w
      zápis, vytvoření/smazání souboru
      m
      namapování souboru do paměti
      x
      spuštění souboru
      • musí ho předcházet kvalifikátor
      • spuštění s aplikováním příslušného profilu
      • spuštění s aplikováním lokálního profilu
      • spuštění bez aplikace profilu
      • velké písmeno způsobí odstranění nebezpečných proměnných prostředí (Px, Cx, Ux)
    • možnost nastavit capabilities (např. capability dac_override sys_admin,)
    • možnost nastavit přístup k síti (např. network inet tcp,)
    • možnost auditu (např. audit /etc/foo/* w,)
    • mnoho dalších možností (mount, ptrace, signal či rlimit)
  • možnost natavit cachování profilů (v /etc/apparmor/parser.conf)
  1. Užitečné programy
    • zjištění zda AppArmor běží: aa-enabled
    • zjištění informací o AppArmoru: aa-status
    • odnačtení veškerých profilů: aa-teardown
    • spuštění profilu v enforce módu: aa-enforce
    • spuštění profilu v complain módu: aa-complain
  2. Vytváření profilu
    • pomocí manuálního vytvoření souboru s profilem
      • následné použití aa-complain a aa-enforce
    • pomocí aa-genprof
      • v jednom okně se spustí aa-genprof
      • v druhém zkoumaná aplikace
      • aa-genprof (za pomoci aa-logprof) se doptá uživatele jaké akce chce povolit/zakázat
  3. Řešení problémů
    • prozkoumání logů (auditd, systemd journal)
      • aa-notify zobrazí přehled sestavený z logů
    • zjištění zda je problém v natavení profilu pomocí aa-complain
      • následné povolení za pomocí aa-logprof
    • systemd je váš přítel (např. ohlásí syntaktickou chybu v profilu)
  4. Nevýhody
    • pathname MAC
    • nepodporuje MLS
    • nepodporuje MCS
    • špatná podpora kontejnerů
  5. Firejail19
    • AppArmor může běžet společně s Firejail
    • speciální profil pro Firejail
    • je doporučeno nekombinovat AppArmor profil a Firejail profil u jedné aplikace

4.2.2 TOMOYO Linux20

  • lze spustit na Ubuntu, CentOS či Arch Linuxu
    • nemá však podporu v základním distribučním kernelu
  • na rozdíl od AppArmoru se snaží chránit celý systém
  • nejprve se systém spustí v učícím módu
    • defaultní pravidla jsou doplněna o pravidla naučená
    • tyto pravidla jsou následně vynucována v produkčním prostředí

5 Zajímavé zdroje

Poznámky pod čarou:

Autor: Ondřej Kuhejda

Vytvořeno: 2021-11-21 Sun 21:25

Validate