bezpečnost:apparmor

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

bezpečnost:apparmor [2019/02/25 18:21] (aktuální)
Řádek 1: Řádek 1:
 +====== AppArmor ======
  
 +{{.:​IconApparmor.png}} **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 ======
 +
 +{{:​apt.png}} //​AppArmor//​ je již nainstalován a připraven k použití ve výchozí instalaci Ubuntu. Pokud jej náhodou nemáte, [[:​Instalace programů|nainstalujte]] balíky [[apt://​apparmor|apparmor]] a [[apt://​apparmor-utils|apparmor-utils]].
 +
 +====== Spuštění ======
 +
 +{{:​navigate.png}} //​AppArmor//​ se spouští automaticky při startu systému. Jestli běží a které profily jsou aktivní zjistíte např. v [[:​Terminál]]u pomocí
 +<​code>​
 +sudo aa-status
 +</​code>​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 =====
 +{{.:​example.png}} Toto je (krácený a zjednodušený) příklad profilu uloženého jako ///​etc/​apparmor.d/​usr.lib.thunderbird.thunderbird-bin//​
 +<​code>​
 +/​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,
 +
 +  # [...]
 +}
 +</​code>​
 +Pokud je tento profil aktivní, Thunderbird může pouze
 +  * číst (**r**) základní systémové soubory v ///etc// a ///proc// a procházet adresáře,
 +  * zapisovat a číst (**rw**) do vlastních adresářů a na plochu,
 +  * spouštět (**x**) pouze aplikace nutné k chodu nebo otevření přílohy.
 +
 +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 =====
 +{{:​example.png}} 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íčenka|klíčence]] (//​name="/​home/​arrange/​.gnome2/​keyrings/​default.keyring"//​).
 +<​code>​
 +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"​
 +</​code>​
 +{{:​tip.png}} Tip: výpisy je možné sledovat pomocí [[:​Sledování systému#​Zobrazení systémových protokolů|grafického prohlížeče logů]], nebo si [[:​Instalace programů|nainstalujte]] balík [[apt://​apparmor-notify|apparmor-notify]]. Po restartu budete o hláškách //​AppArmoru// ​ automaticky informováni systémovou notifikací vpravo nahoře.
 +
 +{{ .:​apparmor-notify.png }}
 +
 +====== Doplňkové informace ======
 +
 +===== Výhody =====
 +
 +  * vynikající způsob aktivní ochrany před napadením
 +  * relativně jednoduchá administrace (pro mírně pokročilého uživatele)
 +  * možnost měnit profil za běhu systému i programu (ručně)
 +  * možnost spouštět neznámé programy v "​bezpečném módu" a sledovat, co dělají (viz třeba Odkazy - "​restrikce viru")
 +
 +===== Nevýhody =====
 +
 +  * obtížný pro začátečníka - pokud něco nefunguje, může být těžké nalézt příčinu
 +  * menší uživatelská přívětivost - občas může být potřeba aktualizovat profil
 +  * v Ubuntu neexistuje grafická nadstavba (aplikace, kde by se dalo nastavení "​naklikat"​)
 +  * nenabízí samo možnosti při běhu programu - vždy je potřeba se podívat do logů a upravit profil //ex post//
 +
 +===== Alternativy =====
 +
 +  * [[SELinux]]
 +
 +
 +====== Odstranění ======
 +
 +{{:​clear.png}} [[:​Instalace programů|Odeberte]] balík ''​apparmor''​.
 +
 +====== Odkazy ======
 +  * [[https://​wiki.ubuntu.com/​AppArmor|Ubuntu stránky o programu]] {{:en.png}}
 +  * [[http://​www.zive.cz/​clanky/​novell-uvolnuje-bezpecnostni-reseni-apparmor-pro-linux-jako-open-source/​sc-3-a-128537/​default.aspx|článek,​ který obsahuje i stručný popis aplikace v češtině]] {{:cz.png}}
 +  * [[http://​ubuntuforums.org/​showthread.php?​t=1008906|hrátky s AppArmor na ubuntuforums.org od bodhi.zazen]] {{:en.png}}
 +  * [[http://​www.linuxtopia.org/​online_books/​opensuse_guides/​apparmor_guide/​index.html|zevrubná dokumentace z dílny OpenSUSE]] {{:en.png}}
 +  * [[http://​www.youtube.com/​watch?​v=kn3T7slnsH0|ukázka využití AppArmoru při restrikci viru - video]] {{:cz.png}}
 +
 +====== Technické detaily ======
 +
 +===== Dostupné příkazy =====
 +
 +==== aa-status ====
 +<​code>​
 +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.
 +</​code>​
 +
 +  * //​AppArmor//​ je aktivní
 +  * existuje 14 profilů, 2 z nich jsou v módu //​complain//​ (tréninkový mód - AA zapisuje do logů, ale aplikaci neomezuje - užitečné při tvorbě profilů)
 +  * 4 profily mají odpovídající běžící proces
 +
 +==== apparmor_parser ====
 +<​code>​
 +sudo apparmor_parser -r -T -W /​etc/​apparmor.d/​usr.bin.firefox
 +</​code>​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.
 +
 +<​code>​
 +sudo apparmor_parser -R /​etc/​apparmor.d/​usr.bin.skype
 +</​code>​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//​.
 +<​code>​
 +#include <​tunables/​global>​
 +#include <​abstractions/​base>​
 +</​code>​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í ===
 +<​code>​
 +network,
 +network inet,
 +network inet stream,
 +network inet tcp,
 +network tcp,
 +</​code>​
 +
 +  * povolí veškerou síťovou komunikaci
 +  * povolí veškerou síťovou komunikaci protokolu IPv4
 +  * povolí síťovou komunikaci IPv4 přes TCP
 +  * totéž co v předchozím
 +  * povolí TCP komunikaci přes IPv4 i IPv6.
 +
 +==== Další příkazy ====
 +=== owner ===
 +
 +povolí přístup jen tehdy, pokud je uživatel zároveň vlastníkem souboru
 +<​code>​
 +owner /home/*/** rw,
 +/home/*/foo rw,
 +</​code>​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
 +<​code>​
 +audit /etc/shadow w,
 +/etc/shadow r,
 +</​code>​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
 +  * něco zakázat, a přitom nechcete, aby se zpráva o tom pořád vyskytovala v logu (zakáže, ale potlačí zprávu)
 +  * vymezit konkrétní zakázanou oblast v širším pravidle
 +
 +<​code>​
 +@{HOME}/** rw,
 +deny @{HOME}/​.ssh/​** rw,
 +</​code>​
 +Povolí čtení a zápis v celém domovském adresáři kromě //~/.ssh//.
 +=== capability ===
 +viz ''​man capabilities''​
 +<​code>​
 +capability chown
 +</​code>​
 +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).
 +  * 1501 - AUDIT - záznamy související s příkazem ''​audit''​
 +  * 1502 - ALLOWED - povoleno
 +  * 1503 - DENIED - zakázáno
 +  * 1504 - HINT - informace k procesu
 +  * 1505 - STATUS - změny v konfiguraci
 +  * 1506 - ERROR - vnitřní chyba //​AppArmor//​
  • Poslední úprava: 2019/02/25 18:21
  • (upraveno mimo DokuWiki)