AppArmor je rozšíření linuxového jádra o mandatorní řízení přístupu (MAC), které zvyšuje počítačovou bezpečnost tím, že jednotlivým aplikacím povoluje jen to, co skutečně potřebují.
Co je AppArmor
AppArmor umožňuje definovat oprávnění k provedení určité operace na úrovni jednotlivých procesů v závislosti na umístění spustitelného souboru – na kritická místa jádra umísťuje volání svých kontrolních rutin. Tím se zvyšuje režie systému, ale je možné zabránit programu, aby provedl potenciálně nebezpečnou akci, která by mohla vést k narušení bezpečnosti (včetně eskalace oprávnění).
- je open source;
- jako Linux Security Module (LSM) je součástí jádra od verze 2.6.36 (říjen 2010);
- poskytuje proaktivní ochranu systému a aplikací – interní, externí i zero-day útoky;
- politiky se uplatňují přes profily, které definují, jaká má aplikace oprávnění (přístupy k adresářům, socketům či síti);
- nejpoužívanější profily jsou obsažené přímo v distribučních kanálech.
K čemu slouží a proč ho používat
- přidává další vrstvu zabezpečení, snižuje riziko kompromitace systému a tlumí dopady úspěšného průniku;
- chrání systém před „zdivočelými“ aplikacemi;
- profily lze měnit za běhu systému;
- v „bezpečném módu“ lze zjistit, co neznámé aplikace skutečně dělají, než se jim omezení nasadí naostro.
Kde AppArmor najdeme
AppArmor je součástí řady distribucí – Debian, Gentoo, (open)SUSE, Ubuntu. Profily nejsou jen RPM balíčky pro (open)SUSE; lze je najít nebo vytvořit i na openSUSE Build Service nebo na Launchpad.net.
Rozdíly mezi AppArmor a SELinux
- práce se SELinux politikami může být pro někoho obtížnější kvůli větší komplexitě;
- AppArmor je součástí výchozí instalace například v (open)SUSE nebo Ubuntu, SELinux zase v RHEL či CentOS;
- AppArmor pracuje s cestami k souborům, SELinux se štítky (labels) a inodami;
- AppArmor se dívá na jednotlivé aplikace, SELinux na systém jako celek.
Komponenty AppArmor
- kernelový modul;
- parser;
- ovládací utilitky.
Jak to funguje
AppArmor při startu načte kernelový modul a dostupné profily z /etc/apparmor.d. Profily se roztřídí podle módu, do kterého patří:
-
disabled– profil se neuplatňuje; -
complain(learning) – porušení pravidel se jen loguje; -
enforce(confined) – pravidla se skutečně vynucují.
Mód profilu se pozná buď z jeho hlavičky, například:
/usr/lib/colord flags=(attach_disconnected,complain)
nebo podle toho, že je profil symlinkovaný v adresáři /etc/apparmor.d/disable.
Instalace na (open)SUSE
Při standardní instalaci jsou AppArmor balíčky nainstalované automaticky. Pro ruční instalaci slouží balíčky:
libapparmor apparmor-profiles apparmor-utils apparmor-parser yast2-apparmor apparmor-docs
Kontrola, zda AppArmor běží
systemctl status apparmor.service aa-status ps axuwZ | head
Ovládací nástroje
-
aa-status– přehled načtených profilů a jejich módů; -
aa-complain– přepnutí profilu do módu complain; -
aa-enforce– přepnutí profilu do módu enforce; -
aa-disable– vypnutí profilu; -
apparmor_parser– načtení a validace profilu; -
aa-autodep– vygenerování základního profilu pro aplikaci; -
aa-logprof– interaktivní doplňování profilu podle logu.
Logování
Log operací se nachází ve /var/log/audit/audit.log. Výchozí nastavení loguje operace typu DENIED. Loguje se podle typu (DENIED, ALLOWED, STATUS) i podle operace (mkdir, profile_load, profile_remove, profile_replace).
Bonus: soubor profilu AppArmor
Konvence pojmenování profilu se nemusí vždy dodržovat, ale běžně se cesta k binárce zapíše s tečkami místo lomítek – usr.bin.firefox odpovídá profilu pro /usr/bin/firefox. Příklad souboru politiky:
/tmp/ls flags=(complain) {
# executable needs 'r' and mmap PROT_EXEC 'm'
/tmp/ls rm,
/lib/ld-2.5.so rmix,
/etc/ld.so.cache rm,
/lib/lib*.so* rm,
/dev/pts/* w,
/proc/meminfo r,
/var/run/nscd/socket w,
/var/run/nscd/passwd r,
/var/run/nscd/group r,
/tmp/ r,
}Bonus: práce s politikami
- přepnutí profilu (procesu) do módu
complain; - přepnutí profilu (procesu) do módu
enforce; - zakázání profilu (procesu) – aplikace pak běží nespoutaná.
Bonus: snadné vytvoření profilu
Postup na jednoduchém testovacím skriptu test_bash.sh:
- vytvořit skript, který se má profilovat;
- spustit
aa-autodep /root/test_bash.sh; - zkontrolovat vygenerovaný profil, např.
vim /etc/apparmor.d/root.test_bash.sh; - spustit aplikaci s profilem v módu
complain; - zkontrolovat log, zda v něm není nic podezřelého, a případně profil doplnit;
- přepnout profil do módu
enforcepříkazemaa-enforce root.test_bash.sh.
Co AppArmor nedělá a jaké jsou nevýhody
- nejde o stoprocentní ochranu proti všem útokům;
- nelze naráz používat AppArmor a SELinux nebo jinou alternativu;
- konverze mezi profily AppArmor a politikami SELinux aktuálně není možná;
- chybí kvalitní grafické rozhraní;
- úprava profilů probíhá ex-post, podle logu;
- na začátku může být tvorba a správa profilů obtížnější.
Vychází z přednášky „AppArmor – co to je, k čemu slouží a jak jej používat“ (InstallFest 2017), slidy, video.