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.
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.
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.
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).
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.
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.
Odeberte balík apparmor
.
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.
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.
Prázdné řádky a řádky začínající na # jsou ignorovány (kromě #include*
- viz níže).
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).
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ě ⁄
/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
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)
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
network, network inet, network inet stream, network inet tcp, network tcp,
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ý.
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.
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.
viz man capabilities
capability chown
Může měnit UID a GID.
Proměnná type může nabývat hodnot 1501-1506. Nejběžnější je type=1503 - DENIED (přístup odepřen).
audit