Mandatory Access Control

Michael Simacek, 410188@mail.muni.cz

Obsah

Discretionary access control

System opravneni zalozeny na identite subjektu (uzivatele), ktery muze opravneni predavat dale. V Linuxu jsou to klasicka souborova opravneni, Access Control Listy a Capabilities. Uzivatel muze explicitne predavat opravneni (chmod, setfacl) nebo jsou predavana implicitne pri spousteni programu. Neni kvuli tomu mozne mit jednotnou systemovou bezpecnostni politiku, protoze na ni maji uzivatele vliv. Navic se programum predavaji plna opravneni uzivatele, coz vytvari vetsi moznost zranitelnosti.

Mandatory Access Control

Operacni system ridi opravneni subjektu (vetsinou procesu) provadet operace s objektem. Je urcen pro omezeni opravneni programu jen na minimum, ktere opravdu potrebuji, aby se predeslo moznemu zneuziti bezpecnostnich chyb v nich. V korporacich se take vyuzva k omezovani pristupu uzivatelum k citlivym datum.

SELinux

Implementace Mandatory Access Control v Linuxu podporovana Red Hatem. Sklada se z casti v kernelu, ktera se stara o vynucovani politiky a userspace utilit, ktere se staraji o konfiguraci politik a pridelovani kontextu souborum a hlaseni problemu.

Kontexty

Kontext je atribut objektu, ktery je pouzivan pro rozhodovani o opravnenich. Kontext se sklada z:

Priklad textove reprezentace kontextu: unconfined_u:object_r:user_home_t:s0

Kontexty procesu

Kontext procesu urcuje opravneni procesu. Po forku dedi potomek kontext rodice, pri execve se muze uplatnit prechod mezi domenami. Pokud politika prechod definuje a typ spousteneho souboru je povolen jako entry point, ziskava proces novou domenu definovanou v politice. Jinak mu zustava puvodni. Kontext procesu lze vypsat pomoci `ps -Z`.

Kontexty souboru

Kontext souboru je ulozen v extended atributu "security.selinux" (programove lze ziskat pres getxattr(2)). Pro vytvareni dedi soubor kontex nadrazene slozky, pri presouvani mu zustava puvodni kontext. Pro oznacovani souboru kontexty jsou v politice nadefinovana pravidla sestavajici se z regularnich vyrazu aplikovanych na cestu souboru. Jadro ale tyto pravidla primo nepouziva, o nastaveni kontextu souboru podle pravidel se musi postarat programy v userspace. Pro nastaveni kontextu podle aktualni politiky se pouziva nastroj `restorecon`. Manualne lze nastavit konkretni kontext prikazem `chcon`. V novejsich verzich jsou podporovany file transitions, ktere umoznuji uz pri vytvareni oznacit soubor jinym typem, nez je typ nadrazene slozky.

Kontext souboru lze vypsat pres `ls -Z`

Nastaveni

Mody:

Booleans

Sady bezpecnostnich nastaveni odpovidajici castym use-cases, ktere lze podle potreby zapinat/vypinat. Prikladem je httpd_enable_homedirs, povolujici apache cist z domovskych adresaru uzivatelu. Prepinaji se prikazem `setsebool`.

Priklad:

          setsebool -P httpd_enable_homedirs 1
        
(-P uklada nastaveni, aby bylo efektivni i po rebootu) Tip: vetsina z nich ma pekne manualove stranky s nazvem neco_selinux v sekci 8, napr. httpd_selinux

Reseni problemu

Logy: /var/log/audit.log nebo /var/log/avc.log (ne vse je logovano)

setroubleshootd - daemon prevadejici zpravy do lidske podoby, lze prohlizet pres sealert

Castou pricinou je nespravny kontext souboru po presunu nebo zmene policy. Resenim je obnoveni spravneho kontextu pres restorecon.

Pokud je program soucasti distribuce, je pravdepodobne, ze pro danou akci existuje boolean.

Pokud je kontext spravny a program opravdu potrebuje dane opravneni a neexistuje pouzitelny boolean, je nutne pro nej vytvorit/vygenerovat novou politiku.

(Pripadne resenim, ktere je na puli cesty k setenforce 0 je

semanage permissive -a domena
coz vypne vynucovani politiky pouze pro danou domenu)

Vytvareni politik

Pravidla se seskupuji do modulu, ktere lze nezavisle nahravat a odebirat. K vytvoreni minimalni politiky, ktera ma za cil omezit prava urciteho programu je potreba vytvorit alespon .te soubor, popisujici typy a pravidla a .fc soubor, specifikujici kontexty souboru na zaklade cest.

Skript, ktery chceme omezit:

#!/bin/bash
# vypise svuj aktualni kontext
cat /proc/self/attr/current
echo
        

mypolicy.te:

policy_module(mypolicy, 0.1)

# deklaruje zavislosti modulu
gen_require(`
role unconfined_r;
type unconfined_t;
type proc_t;
class file { read };
')

# deklarace domeny, pod kterou pobezi nas skript
type myscript_t;
# deklarace typu souboru skriptu
type myscript_exec_t;

# povolit domenu myscript_t pro unconfined_r roli
role unconfined_r types myscript_t;

# povolit typ myscript_exec_t jako entry point aplikace
application_domain(myscript_t, myscript_exec_t);

# nastavit prechod pod nasi domenu pri spusteni
domain_auto_transition_pattern(unconfined_t, myscript_exec_t, myscript_t);

# povolit vypis na terminal
userdom_use_user_terminals(myscript_t);

# povolit precist si /proc
allow myscript_t proc_t:file read;
        

mypolicy.fc

/usr/local/bin/script\.sh -- gen_context(unconfined_u:object_r:myscript_exec_t, s0)

Sestaveni politiky:

make -f /usr/share/selinux/devel/Makefile # umisteni Makefile je zavisle na distribuci

Nacteni politiky:

semodule -i mypolicy.pp
restorecon -v /usr/local/bin/script.sh
        

Generovani politik

AppArmor

Dalsi implementace MAC pro Linux podporovana Canonicalem a Suse. Narozdil od SELinuxu primo v kernelu pracuje s cestami k souborum, cimz predchazi chybam pramenicim ze spatneho oznaceni souboru. Druhou stranou mince je jiny kontext hardlinku vedoucich na stejna data. Je povazovan za jednodussi na nastaveni.

Politiky (zde nazyvane profily) se umistuji do /etc/apparmor.d/. Jejich mod lze prepinat pomoci aa-enforce (enforcing) a aa-complain (ekvivalent permissive). Nacitaji se pres apparmor_parser.

Priklad profilu pro ping:

#include <tunables/global>
/bin/ping flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>

  capability net_raw,
  capability setuid,
  network inet raw,

  /bin/ping mixr,
  /etc/modules.conf r,
}

Zdroje