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.. ;)
- log69 blogja
- A hozzászóláshoz be kell jelentkezni
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.
♲♻♲
- A hozzászóláshoz be kell jelentkezni
Kösz.
- A hozzászóláshoz be kell jelentkezni
Volt már olyan, hogy bármit megfogott volna az AppArmor (vagy előtte fedorán a selinux)?
- A hozzászóláshoz be kell jelentkezni
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.).
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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:
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.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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! :)
- A hozzászóláshoz be kell jelentkezni
Szerintem 2 probléma van vele:
1) nem igazán jók a userspace eszközei és nem triviális / egyszerű szabályt csinálni egy alkalmazáshoz
2) állandóan változtatják a szabályok formátumát, amely maga az interface Tomoyo userspace eszközei és a kernel oldal között
- A hozzászóláshoz be kell jelentkezni
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! :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
log69 blogja, de ezt egy verbeli Drupalos tudhatna... :-)
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
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! :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Az általad korábban bemutatott SELinux alapú sandbox elérhető Ubuntun is.
-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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! :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Amúgy miért írtad feljebb, hogy csak 14.04-től akarod használni AppArmor-t? Ha 12.04-en vagy LTS miatt, ott is tudod használni.
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni