AppArmor: úvod do MAC pro linuxové aplikace

výklad · linux

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í.

01

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.
02

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.
03

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.

04

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.
05

Komponenty AppArmor

  • kernelový modul;
  • parser;
  • ovládací utilitky.
06

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.

07

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
08

Kontrola, zda AppArmor běží

systemctl status apparmor.service
aa-status
ps axuwZ | head
09

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.
10

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).

11

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,
}
12

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á.
13

Bonus: snadné vytvoření profilu

Postup na jednoduchém testovacím skriptu test_bash.sh:

  1. vytvořit skript, který se má profilovat;
  2. spustit aa-autodep /root/test_bash.sh;
  3. zkontrolovat vygenerovaný profil, např. vim /etc/apparmor.d/root.test_bash.sh;
  4. spustit aplikaci s profilem v módu complain;
  5. zkontrolovat log, zda v něm není nic podezřelého, a případně profil doplnit;
  6. přepnout profil do módu enforce příkazem aa-enforce root.test_bash.sh.
14

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.

← zpět na Objevuj