Obsah

AppArmor

AppArmor je bezpečnostní software, který vytváří ochrannou vrstvu mezi aplikací a systémem. Tím, že aplikaci přesně v profilu vymezíme, co smí a nesmí dělat, chráníme systém před případným využitím bezpečnostních nebo jiných chyb ještě před tím, než mohou být zjištěny a opraveny v aktualizacích.

Instalace

AppArmor je již nainstalován a připraven k použití ve výchozí instalaci Ubuntu. Pokud jej náhodou nemáte, nainstalujte balíky apparmor a apparmor-utils.

Spuštění

AppArmor se spouští automaticky při startu systému. Jestli běží a které profily jsou aktivní zjistíte např. v Terminálu pomocí

sudo aa-status

Ve výchozím nastavení je aktivních jen pár profilů, např. pro Evince nebo cups. Do budoucna by jich mělo postupně přibývat.

Jak to funguje

AppArmor při startu načte profily (textové soubory s nastavením pro jednotlivé aplikace), které jsou uloženy v adresáři /etc/apparmor.d. Pokud při své činnosti daná aplikace překročí limity dané profilem, nebude jí umožněno danou akci provést, a AppArmor to zaznamená do logu (ve výchozím nastavení /var/log/kern.log).

Příklad profilu

Toto je (krácený a zjednodušený) příklad profilu uloženého jako /etc/apparmor.d/usr.lib.thunderbird.thunderbird-bin

/usr/lib/thunderbird-3.0.5/thunderbird-*bin {
  # [...]
  @{PROC}/filesystems r,
  /etc/mtab r,
  /etc/mime.types r,
  /etc/mailcap r,

  # browsing directories allowed
  / r,
  /**/ r,

  owner @{HOME}/.thunderbird/** rw,
  owner @{HOME}/.thunderbird/*/.parentlock k,
  owner @{HOME}/.thunderbird/**/*.sqlite* k,
  owner @{HOME}/Desktop/** rw,

  # [...]
  /usr/lib/thunderbird-3.0.5/** rw,
  /etc/thunderbird/** r,
  /usr/lib/thunderbird-3.0.5/components/** w,

  /usr/lib/gamin/** rix,
  /usr/share/applications/** r,
  /usr/share/mozilla/extensions/** r,
  /usr/lib/mozilla/extensions/** r,
  /usr/share/myspell/** rw,
  /usr/share/hunspell/** rw,

  # for PDFs
  /usr/bin/evince PUxr,

  # Openoffice.org
  /usr/bin/ooffice Uxr,

  # [...]
}

Pokud je tento profil aktivní, Thunderbird může pouze

Vše ostatní je zakázáno. Pokud je útok na systém veden přes kompromitaci Thunderbirdu, jsou tímto možnosti útočníka velmi omezeny. Ostatní aplikace, jako např. Firefox, který je častějším terčem útoků, je možné nastavit podobným způsobem.

Na druhou stranu je patrné, že každá zvýšená bezpečnost s sebou může přinést nižší komfort pro uživatele. Např. v případě instalace nestandardního doplňku může být potřeba ručně doplnit profil. Z tohoto důvodu jsou nové profily zaváděny velmi pomalu a s relativně volnými omezeními, což je ovšem vždy bezpečnější než aplikace bez profilu.

Příklad záznamu do logu

Výňatek z /var/log/kern.log.

Ukazuje neúspěšný (denied_mask=„r::“) pokus Thunderbirdu (profile=„/usr/lib/thunderbird-3.0.5/thunderbird-*bin“) o přečtení (requested_mask=„r::“) uložených hesel v klíčence (name=„/home/arrange/.gnome2/keyrings/default.keyring“).

Jul 27 13:25:20 lucid-lean kernel: [ 8142.886121] type=1503 audit(1280229920.037:145):  operation="open" pid=25252 parent=25209 profile="/usr/lib/thunderbird-3.0.5/thunderbird-*bin" requested_mask="r::" denied_mask="r::" fsuid=1000 ouid=1000 name="/home/arrange/.gnome2/keyrings/default.keyring"

Tip: výpisy je možné sledovat pomocí grafického prohlížeče logů, nebo si nainstalujte balík apparmor-notify. Po restartu budete o hláškách AppArmoru automaticky informováni systémovou notifikací vpravo nahoře.

Doplňkové informace

Výhody

Nevýhody

Alternativy

Odstranění

Odeberte balík apparmor.

Odkazy

Technické detaily

Dostupné příkazy

aa-status

arrange@lucid-lean:~$ sudo aa-status
[sudo] password for arrange:
apparmor module is loaded.
14 profiles are loaded.
12 profiles are in enforce mode.
   /etc/cron.daily/logrotate
   /sbin/dhclient3
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-thumbnailer
   /usr/bin/passwd
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/firefox-3.6.7/firefox-*bin
   /usr/lib/thunderbird-3.0.5/thunderbird-*bin
   /usr/sbin/cupsd
2 profiles are in complain mode.
   /usr/bin/skype
   /usr/bin/transmission
4 processes have profiles defined.
4 processes are in enforce mode :
   /sbin/dhclient3 (701)
   /usr/lib/firefox-3.6.7/firefox-*bin (1504)
   /usr/lib/firefox-3.6.7/firefox-*bin (1902)
   /usr/sbin/cupsd (1041)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

apparmor_parser

sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.firefox

Přehraje původní nastavení profilu novým (-r - reload) bez toho, že bychom museli restartovat celý AppArmor. Užitečné při tvorbě profilu a jeho úpravách.

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.skype

Vymaže profil z modulu v kernelu, takže již není aktivní. Pokud se chcete profilu zbavit úplně, vymažte jej pak i z adresáře /etc/apparmor.d.

Syntax profilového souboru

Prázdné řádky a řádky začínající na # jsou ignorovány (kromě #include* - viz níže).

Include

Do profilu je možné přidat pomocí include již hotové profily, které najdete v /etc/apparmor.d.

#include <tunables/global>
#include <abstractions/base>

V prvním případě do profilu zahrnete základní proměnné (např. @{HOME} a @{PROC}), v druhém základní profil, který využije téměř každý program (přístup k /etc/ld.so.cache, /dev/null apod).

Nastavení cest a zástupných znaků

AppArmor rozlišuje soubory a adresáře: adresář končí vždy na /, tzn., že /etc/apparmor != /etc/apparmor/.

- zástupný znak pro libovolný počet jakýchkoliv znaků kromě ⁄

∗∗ - zástupný znak pro libovolný počet jakýchkoliv znaků včetně

? - zástupný znak pro libovolný jeden znak kromě ⁄

Příklady

/tmp/*

soubory přímo v adresáři /tmp

/tmp/*/

adresáře přímo v adresáři /tmp

/tmp/**

vše (=adresáře i soubory) v libovolné hloubce pod /tmp

/tmp/**/

adresáře (pouze) v libovolné hloubce pod /tmp

Nastavení přístupových práv

r

čtení

w

zápis (nelze použít zároveň s a)

a

připojení (append) dat (nelze použít zároveň s w)

k

zamknutí (lock) souboru

px

spuštění programu, ale jen v případě, že má aktivní profil (v opačném případě je spuštění zakázáno). Předává systémové proměnné.

Px

stejně jako px, ale nepředává systémové proměnné

ux

bezpodmínečné spuštění programu, předává proměnné

Ux

bezpodmínečné spuštění programu, nepředává proměnné

ix

spuštění programu ve stejném prostředí a se stejnými omezeními jaké má původní program

m

umožňuje mapovat spustitelná data do paměti (mmap(2), PROT_EXEC flag)

l

vytváření pevných odkazů (hardlink)

Sítě

network <domain>][<type>][<protocol>

domain může být typu: inet, ax25, ipx, appletalk, netrom, bridge, x25, inet6, rose, netbeui, security, key, packet, ash, econet, atmsvc, sna, irda, pppox, wanpipe, bluetooth

type: stream, dgram, seqpacket, rdm, raw, packet

protocol: tcp, udp, icmp

Příklady použití

network,
network inet,
network inet stream,
network inet tcp,
network tcp,

Další příkazy

owner

povolí přístup jen tehdy, pokud je uživatel zároveň vlastníkem souboru

owner /home/*/** rw,
/home/*/foo rw,

V prvém případě je přístup povolen jen pro vlastní soubory, v druhém i pro soubor, který vlastní někdo jiný.

audit

zapíše zprávu do logu v každém případě, ne jen tehdy, pokud došlo k zákazu přístupu

audit /etc/shadow w,
/etc/shadow r,

Můžeme vždy v logu zkontrolovat otevření souboru /etc/shadow pro zápis.

deny

zakáže určitou činnost. To je užitečné v případě, že potřebujete

@{HOME}/** rw,
deny @{HOME}/.ssh/** rw,

Povolí čtení a zápis v celém domovském adresáři kromě ~/.ssh.

capability

viz man capabilities

capability chown

Může měnit UID a GID.

Záznamy v logu

type

Proměnná type může nabývat hodnot 1501-1506. Nejběžnější je type=1503 - DENIED (přístup odepřen).