U13.04 + AppArmor

Ubuntu 13.04-en tesztelem AppArmor-t és játszadozok vele (Ubuntu howto itt). A CLI tool-ok tetszenek és gyorsan tudtam nekem megfelelő szabályt csinálni több programhoz.

A gyárilag szállított Firefox profilt használja valaki huzamosabb ideje? Mi a tapasztalat vele? A profilját átnézve elég engedékeny, valszeg majd csinálok a jövőben egy szigorúbb verziót és talán megosztom itt.

Ha valaki nem használta volna még AppArmor-t, röviden összefoglalom hogy mire jó és hogyan tudjuk használni a gyárilag szállított profilokat vagy generálni sajátot.

Fontos megjegyzés: egy AppArmor-os bug miatt töröljük az /etc/apparmor.d mappából az összes lxc nevű fájlt és mappát, majd "sudo service apparmor restart".

AppArmor egy MAC megoldás, mellyel a saját felhasználónk nevében futtatott programjaink jogosultságait szigorúbb keretek közé szoríthatjuk. Ugye mivel dokumentumaink hozzáféréséhez is ugyanolyan jogok kellenek, mint amilyennel a hálózaton kommunikáló szoftvereink futnak, ezért a program kompromittálódása során alapból teljes hozzáférése van a támadónak a fájljainkhoz - és még root jogot sem kell szereznie. Illetve a többi fájlhoz se férjen hozzá, amihez nincs köze, mert ez mind biztonsági kockázatot jelent. Egy kifinomultabb jogosultság kezelés ezt a problémát hivatott megoldani.

Az alapértelmezett desktop rendszeren futó hálózaton kommunikáló programok és szolgáltatások közül Ubuntu gyárilag szállít profilt a következőkhöz: cups, dhclient, evince, firefox, mysqld, rsyslogd, tcpdump, telepathy. Ezek közül dhclient kér IP-t DHCP-n keresztül, tehát fontos. Cups nyomtatáshoz kell. Desktop felhasználáshoz telepathy-t használhatjuk chat-eléshez Empaty-val, Evince-et dokumentum (PDF) megejelnítéshez és Firefox-ot böngészéshez. Ha nem külön offline levelező klienst futtatunk, akkor szerintem ez nagyjából le is fedi az átlag felhasználási módot.

Megj.: A Firefox profil alapból nem engedélyezett, ezt az alábbi paranccsal aktiválhatjuk:

sudo aa-enforce /etc/apparmor.d/*firefox*

Ha viszont további szoftvereket szeretnénk keményíteni AppArmor profillal, akkor bizony generálnunk kell "kézzel". Ez úgy működik, hogy aa-genprof eszközzel megmondjuk a rendszernek, hogy melyik futtatható binárisnak akarunk generálni profilt. Ekkor a rendszer gyűjteni fogja a szoftver használata során jegyzett műveleteket, amelyek később a szabályt fogják alkotni. Sok helyen csillagozott path-okkal lehet operálni a szabályok általánosításához, hogy minél rugalmasabb legyen a profil (tehát ne egy adott verziójú fájlra hivatkozzon olvasási joggal például, mert akkor a fájl nevének módosulásakor a szabály nem fog illeszkedni a valós igényre).

aa-genprof futtatása után a progit is el kell indítanunk (jobb ha még nem fut és úgy indítjuk, hogy mégtöbb usecase-t lefedjünk) és a lehető legtöbb módon használnunk kell. Nyilván az ekkor észlelt műveletekhez kapcsolódó jogokat fogja csak megkapni a program a későbbiekben, tehát ez is egy fontos lépés. A végén befejezhetjük, melykor a szabály létrejön (letárolódik egy fájlban az /etc/apparmor.d mappában) és a programot enforce (kikényszerítő) módba kapcsolja.

Ha a későbbiekben hozzáférés megtagadásba futnánk a programmal, akkor az aa-logprof paranccsal a naplófájlba bejegyzésre került megtagadásokat bírálhatjuk felül egyesével így módosítva a profilt, hogy a szabályokat hozzáillesszük az új felhasználási módhoz is.

Az egyszerű példa kedvéért a ping parancshoz az alábbi módon tudunk szabályt generálni és megkeményíteni azt kikényszerítő módba kapcsolva:


sudo -i
aa-genprof ping
Writing updated profile for /bin/ping.
Setting /bin/ping to complain mode.

Before you begin, you may wish to check if a
profile already exists for the application you
wish to confine. See the following wiki page for
more information:
http://wiki.apparmor.net/index.php/Profiles

Please start the application to be profiled in 
another window and exercise its functionality now.

Once completed, select the "Scan" button below in 
order to scan the system logs for AppArmor events.  

For each AppArmor event, you will be given the  
opportunity to choose whether the access should be  
allowed or denied.

Profiling: /bin/ping

[(S)can system log for AppArmor events] / (F)inish

# másik terminálban

ping -c 3 google.com

# előzőbe sessionben "S" bill. lenyomása után hasonló bejegyzésekre kell válaszolnunk,
# ahol az "A" bill. lenyomásával fogadhatjuk el a hozzáférési módot,
# majd végül szintán az "S" billenytűre elmenthetjük a profilt

Reading log entries from /var/log/syslog.
Updating AppArmor profiles in /etc/apparmor.d.
Complain-mode changes:

Profile:    /bin/ping
Capability: net_raw
Severity:   8

[(A)llow] / (D)eny / Audi(t) / Abo(r)t / (F)inish
Adding capability net_raw to profile.

Profile:  /bin/ping
Path:     /etc/host.conf
Mode:     r
Severity: unknown


  1 - #include <abstractions/apache2-common> 
  2 - #include <abstractions/lightdm> 
  3 - #include <abstractions/nameservice> 
 [4 - /etc/host.conf]

[(A)llow] / (D)eny / (G)lob / Glob w/(E)xt / (N)ew / Abo(r)t / (F)inish / (O)pts

Profile:        /bin/ping
Network Family: inet
Socket Type:    dgram

 [1 - #include <abstractions/nameservice>]
  2 - network inet dgram 

[(A)llow] / (D)eny / Audi(t) / Abo(r)t / (F)inish

= Changed Local Profiles =

The following local profiles were changed.  Would you like to save them?

 [1 - /bin/ping]

(S)ave Changes / [(V)iew Changes] / Abo(r)t

A keletkezett szabály így néz ki:

cat /etc/apparmor.d/*ping*
# Last Modified: Sat Jul 20 23:17:30 2013
#include <tunables/global>

/bin/ping {
  #include <abstractions/base>
  #include <abstractions/nameservice>


  capability net_raw,

  network inet raw,


  /bin/ping mr,

}

Ekkor már ping kikényszerítő módban van és a profilja aktív. Kb. ennyi a tömör lényege a szabály létrehozásnak.

Szemléltetéshez még például a tcpdump profilja pedig így néz ki.

További néhány tippem:
- a "G" billentyűvel lehet az elérési út végére csillagot tenni és ezzel kimaszkolni a szabályban a path-t, hogy a teljes mappára illeszkedjen, ezzel érdemes élni de azért óvatosan, mert a maszkolás során a biztonság mértékét ezzel egyre csökkentjük
- másodszori megnyomására a "G" bill. 2 db csillagot tesz, mely rekurzív hozzáférést fog jelenteni az adott mappára, ez is hasznos sok esetben, ahol előre megjósolhatatlan, hogy milyen mélységig kellhet egy fájl a programnak és azokból is melyik
- ha "r" (csak olvasás) jogról van szó egy mappa vagy fájl esetében, akkor szerintem nyugodtan adjunk bizonyos mappáknál rekurzív jogot, pl. a /usr/share meg hasonló mappák esetében
- ha a program furcsán és hibásan működik, akkor az éles MAC rendszer esetében valószínűleg azt jelenti, hogy nem teljes a profilja és a szabályainál még több jogot meg kell adni, ehhez futtassuk root-ként az aa-logprof progit, mellyel egyszerűen elvégezhetjük a kiegészítést
- a profil létrehozása után szerintem érdemes egy text editorral azért ránézni szemmel is az /etc/apparmor.d/*progim* fájlban, mert sokszor triviális egyszerűsítések is lehetnek, melyet nyugodtan végezzünk el beleszerkesztéssel
- aa-logprof használata során sok "deny" szabályunk keletkezhet, ezekt javaslom mindet törölni, mivel ami nem lesz külön megengedve, az alapból tagadva lesz - tehát ha nem az a cél hogy mindent engedjünk és csak bizonyos dolgokat tiltsunk hanem a fordítottja, akkor nincs szükség tagadó szabályokra
- érdemes kiemelni, hogy ha egy elérési út /-re végződik, akkor ott csak a mappa olvasásához van hozzáférés, a tartalmához nem, ezért bizonyos alkalmazásoknál ahol szükség van fájl tallózásra, az alábbi 2 szabállyal engedélyt adhatunk a tallózásra a fájlok tartalmához való hozzáférés nélkül:


/ r,
/**/ r,

Végül az élő állapot lekérdezhető aa-status paranccsal.

Kb. ennyi jutott eszembe. Jól megcsinálták szerintem AppArmort és látszik hogy már eléggé használható. Pár évvel ezelőtt még nem ez volt tapasztalható.

Ui.: Szerintem azért ennél egy biztonságilag nyilván lazább, viszont sokkal egyszerűbb (1 klikk) megoldást hozott volna tomld progim Tomoyo-val, és a sima felhasználóknak is használható eszköz lett volna. Na mindegy.. ;)

Hozzászólások

Szia, bocsánat nem olvastam végig az egész postot.
Én 12.04-en használom az AppArmort és a következőt találtam problémásnak:
(cd /etc/apparmor.d)
Tehát van a következő imclude lánc:
./usr.bin.firefox: #include <abstractions/ubuntu-browsers.d/firefox>
./abstractions/ubuntu-browsers.d/firefox:#include <abstractions/ubuntu-browsers.d/user-files>

És a ./abstractions/ubuntu-browsers.d/user-files fájlban van egy ilyen sor:
owner @{HOME}/** w,

Na ezt teljesen idokolatlannak tartom és ki is kommenteztem, mert enélkül nem sok értelme van az egésznek.
Így persze sok minden eltört és sok mindent külön meg kellett adnom a ./usr.bin.firefox fájlban.

♲♻♲

Volt már olyan, hogy bármit megfogott volna az AppArmor (vagy előtte fedorán a selinux)?

Lefordítva azt kérdezed, hogy van-e értelme biztonsággal foglalkozni.

Nekem pl. Fedorán naponta többször is dobta access deny-okról a figyelmeztetőket a sandbox-olt Firefox-om. Persze ez nem egy betörési kísérlet miatt volt, hanem egy plugin akart oda nyúlni ahova nem volt engedélye meg egyéb apróságok. De amikor hírekben is olvashatóan (pl. Canada, Pwn2own) demonstrálnak tetszőleges kódfuttatást mindössze egyetlen preparált weboldal megtekintésével, úgy gondolom elég szarul állunk általánosságban security terén. Ehhez nem kell expert-nek lenni hogy lássuk. És mindjárt jobb érzés egy megfelelően túlbiztosítottnak tűnő módon beállított eszközt használni. És Fedorán a sandbox-nál biztos lehetsz, hogy maximális módon el van szeparálva a program (X is leválasztva Xephyr-rel stb.).

Lefordítva azt kérdezed, hogy van-e értelme biztonsággal foglalkozni.
Nem, mert tudom hogy igen.
Csak mostanában foglalkoztat a kérdés, hogy miképp lehetne egy megfelelően biztonságos otthoni rendszert összerakni úgy, hogy az ne menjen nagyon a kényelem rovására. Hogy a témánál maradjak: milyen támadásokat lehet így megfogni, azok milyen gyakoriak, és mennyi kellemetlenség jár a módszerrel.

De más is érdekel.

Példa: -hogyan lehet megoldani, hogy bizonyos {fotóimhoz, dokumentumaimhoz, videóimhoz}csak bizonyos programok férjenek hozzá.
-hogyan lehet egy elkülönített böngészőpéldányt létrehozni, ami csak egy célra,pl netbank jó, máshoz nem is tud kapcsolatot létesíteni
- jelszavak kezelése valamilyen kulcstartó alkalmazással
-stb

Nem írtad hogy milyen rendszeren. RHEL vagy Fedora vonalon nagyon egyszerű a sandbox alkalmazás használatával. Tehát egy teljesen elkülönített böngésző példányt futtatni (virtualizáció nélkül) ennyi:

http://hup.hu/node/119915

SELinux-al saját szabályt gyúrni véleményem szerint nagyon bonyolult és macerás. AppArmor sokkal egyszerűbb ilyen szempontból. Ott simán megadhatod, hogy pl. adott mappákhoz tiltod a hozzáférést, vagy pedig eleve csak néhányhoz engeded.

Jelszó kezelés nagyobb külön téma szerintem.

Szerintem egy elfogadható mértékű biztonság elérése otthoni desktop rendszeren az alábbiak alapján megtehető (esetleg mások majd kiegészítik):
- alkalmazást csak megbízható forrásból telepítsünk megbízható módon (pl. integritás ellenőrzéssel, ezt megoldja a csomag kezelő, Windows-on pedig nézzünk digitális aláírást)
- megbízhatatlan dokumentumokat csak sandbox-olt alkalmazással nyissunk meg
- a hálón kommunikáló alkalmazásokat zárjuk be, legalább akkor ha megbízhatatlan forrással kommunikálnak

Még nagyobb általánosságban szerintem egy sandbox-olt böngésző már alapból nagy előrelépés.

Tudom, hogy csak kevés védelmet ad, de én netbankolásra olyan böngészőprofilt használok, ami automatikusan privát módban indul (nem jegyez meg semmit), nincsenek engedélyezve benne a pluginek és nem használom más oldalakhoz.

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

A plugin-ek tiltása ok, de ha a bank oldalát megbízhatónak tartjuk, akkor szerintem pont az a mindegy, hogy azt mivel látogatod meg. Ha viszont más oldalak böngészése alatt kapna malware-t a gép, akkor ugyanúgy veszélyeztetve van a bankolás művelete is.

Szerintem nem a bankolás módszerére kellene a figyelmet fordítani, hanem a többire.

A Tomoyo-val mi a gond, hogy nem terjedt el?

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

Egy gondolat még: Nem tudom, hogy mennyire van időd és kedved, de ezeket az írásokat beszórnád a hupwikibe? Én pl. tervezem, hogy aktívan használni fogom az apparmort 14.04-től (arra frissítek 12.04-ről) és jó lenne ezeket egy helyen megtalálni, mert itt ellapozódik. Neked már voltak korábban is hasznos írásaid a témában, összegyűjtve ezeket jól használható doksit kapnánk. Megpróbálok segíteni a wikisítésben, de max. a formázásban tudok és azt is csak kicsit később.

Persze azt is megértem, ha nincs kedved és időd hozzá.

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

Energiám nem lesz :) Kedvem és időm volna. Amúgy meg olyan szempontból azért nem tűnik el, hogy neten keresve rá lehet találni, ha kifejezetten .hu oldalra keresünk.

Meg azért a hivatalos és egyéb angol nyelvű doksik összeszedettek és elég jók, az én irományaimat inkább magamnak emlékeztetőnek, másoknak meg kedvcsinálónak szánom csak.

Próbáltad a sandbox-ot és az apparmort: Melyiket ajánlanád desktop (és esetleg szerver) környezetbe? Használhatóság és erőforrásigény szempontjai érdekelnének.
Köszi! :)

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

Nem esznek sok erőforrást. Abból amit tudok és olvastam a MAC rendszerekről, szerver oldalra egyértelműen SELinux. Ez a legkifinomultabb és legbiztonságosabb. Régebben írtam erről.

Mivel AppArmor-hoz nincs még egy gyárilag szállított (fix me) általános sandbox megoldás, ezért oda is SELinux-ot javasolnék ha már kérdezed, mivel ott a sandbox eszközzel azonnal be lehet zárni a böngészőt meg egyéb app-okat egyszerűen mindenfajta tuningolás nélkül, és saját szabálynál nagyobb a hibázás esélye.

De nyilván ezt a rendszer is meghatározza. Ubuntu AppArmort szállít, RHEL vonal meg SELinux-ot. Tehát gondolom nem lesz sok választásod.

Ja, látom elérhető csomagból az egész SELinux hóbelebanc, én mégis a gyárilag szállított dolgokat kedvelem, mert az lesz / van legjobban kitesztelve. A millió policy szabály miatt nagyon sok idegesítő bug-ra lehet számítani, főleg ha pár ember használja csak.

RHEL vonalon is folyamatos a SELinux update, annyira komplex - nemhogy egy gyárilag nem támogatott rendszeren.

Ha Ubuntu-n vagy, akkor állj rá AppArmor-ra szerintem. Egy szigorú böngésző szabályt kell összerakni. Ez majd nekem is kell, ha lesz rá időm 1-2 héten belül, akkor majd leblogolom.

Azért is kérdeztem ezt, mert én minimális utánaolvasással úgy látom, hogy a sandbox addig kényelmes, amíg van olyan gyári szabály (pl. sandbox_net_t), ami lefedi az igényedet. Viszont ha neked kell kézzel vacakolni ilyennek, akkor nehézkessé válik.
Az Apparmor meglátásom szerint kicsit nehezebb kezdésnek, viszont jól tanul és olyan szabály-rendszere, ami egy ismerkedőbbnek is jobban átláthatóbb és megérthetőbb.

Neked mi a véleményed erről?

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

Egyetértek.

AppArmor arany középút lehet. SELinux szabályt én nem csinálnék. Ha meg nincs meglévő szabály az igényre és a primitív sandbox tool sem megoldás, akkor kezelhetőbb szerintem is AppArmor.

Szerveren van SELinux szabály a szolgáltatásokra, ezért ott nem szívás.