Security-all

audit log alairasa

Fórumok

Egy alkalmazas sql adatbazisba tol audit logokat. Ugyan crypto is vedi az egyes rekordok adatait, de mivel ez az algoritmus megismerheto, ezert egy tamado/rosszindulatu rendszergazda/whatever modosithat egy mar tarolt rekordot, es nemi kezugyesseggel ujrakeszitheti az adott rekordot vedo hash-t.

Arra gondoltam ezert, hogy kellene egy olyan feature, ami pl. orankent idobelyeggel alairja az audit logokat (TSA). Tervbe van veve, hogy a kereskedelmi timestamp szolgalatokat tamogatni fogja. De, mivel egy open source dologrol van szo, a kerdes az, hogy mennyire van ertelme egy free belyegzo szolgaltatot* tamogatni?

*: aki gyakorlatilag semmit nem garantal, de kevesse valoszinukerdeses, hogy a helyi rendszergazda meg tudja vesztegetni.

Modsecurity vs directory index

Fórumok

Adott a következő szabály:


    <FilesMatch "\.ph(p3?|tml)$">
	SetHandler application/x-httpd-php
	SecDefaultAction "phase:2,deny,log,status:302,redirect:http://www.ostraining.com/cdn/images/stories/tutuploads15._Make_your_settings_file_writable.png"
	SecRule SCRIPT_UID "^33$"
	SecRule SCRIPT_MODE "^[0-7]*[2367]$"
	SecRule SCRIPT_GID "^33$" "chain"
	SecRule SCRIPT_MODE "^[0-7]*[2367][0-7]$"
    </FilesMatch>

Az ötlet innen van: http://hup.hu/node/53442

Ez praktikus megoldásnak tűnik, hiszen mindjárt a php5.conf-ba rakom, oda ahol a Handler-t hozzárendeli a php kiterjesztéshez. Tehát elvileg minden php futtatás előtt ellenőrzi a fájl UID-ját és a többit. A tapasztalat azonban azt mutatja, hogy az index.php esetében, ha nem írom ki az url-ben hogy index.php, hanem directory index-ként hivatkozok rá, akkor nem.
Persze tudnék fabrikálni hozzá valami workaround-ot, de előbb érteni szeretném hogy ez miért van. Ez lenne a kérdésem.

Szerk:
Vagyis hogy lehet hogy a FilesMatch-on belül a SetHandler működik directory index esetén is(mivel lefut), míg a SecRule SCRIPT_UID nem?

Gép a hidegben...

Fórumok

Sziasztok!

Volt már egy hasonló téma és szeretném tovább boncolgatni.

Ugyanis az a helyzet, hogy van egy gép home szerver-ként üzemel a padláson, ahol bizony vannak mínusz fokok is.

Igazából 24 órás üzemre van fent, leállítani nem nagyon fogom/fogjuk.
Állóházas gép, a ház oldala le van véve rajta van.

Mit ajánlotok?

A, Hozzam be a gépet a padlásról a 19°C - 23°C között ingadozó szobába, ahol nem tudom mekkora a páratartalom...
B, Hagyjam a padláson, ahol akár -20°C - +10°C (télen) között ingadozik a hőmérséklet.

UI:
sensors ezt mutatja jelenleg

fan2: 3013 RPM (min = 1318 RPM, div = 8)
temp1: +12.0°C (high = +0.0°C, hyst = +0.0°C) ALARM sensor = thermistor
temp2: +19.0°C (high = +120.0°C, hyst = +120.0°C) sensor = thermistor

Kinti hőmérséklet most 0°C körül...

Hungarocellezés után, kinti hőmérséklet 1 °C

fan2: 3125 RPM (min = 1171 RPM, div = 8)
temp1: +17.0°C (high = +0.0°C, hyst = +2.0°C) ALARM sensor = thermistor
temp2: +28.5°C (high = +120.0°C, hyst = +120.0°C) sensor = thermistor

Microsoft Windows vulnerability in TCP/IP Could Allow Remote Code Execution (2588516)

Fórumok

OMG, ez valahogy eddig elkerülte a figyelmem:

"http://technet.microsoft.com/en-us/security/bulletin/ms11-083

"The vulnerability could allow remote code execution if an attacker sends a continuous flow of specially crafted UDP packets to a closed port on a target system."

Microsoft did it once again."

(forrás)

SELinux, RSBAC, Grsecurity, AppArmor körmérkőzés

Fórumok

Az egész ott kezdődött, hogy egy SLES11 SP1 szerveren olyan formán szerettem volna üzemeltetni a cron démont, hogy a közönséges felhasználók időzített feladatai erősen korlátozott jogokkal fussanak, a rendszerfeladatok viszont nagyjából korlátoktól mentesen. Arra gondoltam, hogy ezt a célt egy mandatory access control (a továbbiakban MAC) rendszer használatával érem el. Használhatnám ugyan a kiterjesztett attribútumokra épülő POSIX ACL-eket is, amelyeket ha kiegészítünk az utóbbi időben egyre inkább használhatóvá váló Linux capability-kkel, akkor egész elfogadható védelmi rendszert kaphatunk (már ha eltekintünk az ACL-k néhány eléggé idegesítő gyengeségétől), de egy MAC rendszer használata mégiscsak kézenfekvőbbnek tűnik.

Tulajdonképpen mi is egy MAC rendszer? A Wikipédia definíciója, és a hozzáférésvezérlésben elfoglalt helye szerint kizárólagosan rendszergazdai irányítás alatt álló, a többi felhasználó belátására (discretion) nem alapozó, centralizál hozzáférésvezérlési rendszer, és mint ilyen, a Discretionary Access Control (DAC), vagyis a hagyományos (pl. Windows/UNIX), elosztott felelősségvállaláson alapuló fájlrenszerjogosultsági rendszer ellentétpárja. Már a Wikipédia is felhívja azonban a figyelmet arra, hogy a MAC név történelmi okokból szorosan egybeforrt a fenti definíció szerinti rendszerek egy konkrét típusával, nevezetesen a Multilevel Security (MLS, újabban MLS/MCS) rendszerekével, mégpedig oly mértékben, hogy több - általam MAC megoldásnak tartott - rendszer (pl. RSBAC, AppArmor) dokumenteciója kizárólagosan ez utóbbi értelemben használja a MAC kifejezést. Az első definíció szerinti MAC rendszerek nem mindegyike nyújt azonban MLS/MCS szolgáltatást, sőt ez a háttérbe szorul, és inkább a Type Enforcement(TE)+Role Based Access Control(RBAC) alapú megoldások dominálnak.

A fenti szócikkek átböngészése után az már nyilvánvaló volt számomra, hogy MAC megoldás címszó alatt nagyjából olyan rendszerre számíthatok, ami a Linux kernelben azokon a pontokon, ahol az egyébként is hozzáférési döntést hoz a DAC és capability rendszer révén, további hozzáférésvezérlési döntéseket hoz valamilyen központi, csak a rendszergazda (de nem a sima root account, hanem további jogosítványokkal rendelkező adminisztrátor(ok)) által módosítható adatbázis alapján. Az ilyen rendszerek közös jellemzője egyébként, hogy amit a szabványos DAC rendszer megtilt, azt nem bírálják felül, hanem csak annak a tiltását mérlegelik, amit a DAC egyébként engedélyezne. Más szóval a DAC szabályrendszerén enyhíteni nem lehet, csak szigorítani. Az RSBAC-ban azért találtam ezzel szembemenő kivételt a CAP modul esetében. De persze lehet, hogy van más is. A MAC rendszerek ideális esetben lehetővé teszik, hogy a lehető legegyszerűbb adatbázis segítségével olyan korlátozásokat vezethessünk be a Linux kernel hozzáférésvezérlési rendszerében, amelyeket a DAC-ban csak bonyolult, átláthatatlan (rengeteg fájl jogosultságainak módosításával, sok POSIX ACL-lel, a felhasználók részére kiegészítő csoportok megadásával, filesystem capability-kkel, stb.) és megbízhatatlan módon (egy-egy frissítés után elkerülhetetlen újbóli jogosultságállítgatásokkal), vagy sehogy sem tehetnénk meg.
A MAC rendszerek alapvetően arról hoznak döntéseket, hogy mely subjectek (processzek) mely objecteken (fájlok, IPC csatornák, hálózati objeltumok, capability-k, resource-ok, más processzek, egyéb kernelszolgáltatások, stb.) milyen műveleteket végezhetnek el. A szabályrendszer átláthatóvá tétele érdekében(?), vagy más filozófiai meggondolásból (;-) néhány MAC rendszer korlátozásokat leíró adatbázisában a subjectek és és az objectek nem valamilyen természetes, a Linux kernelben egyébként is meglevő jellemzőjük alapján (pl. elérési út, UID, GID, szülőprocessz, stb.) szerepelnek, hanem absztrakt osztályokba sorolva, amely osztályokat valamilyen címke formájában külön össze kell rendelni az adott subjectekkel vagy objectekkel (mint pl. a SELinux egész fájlrendszert beterítő security.selinux nevű kiterjesztett fájlattribútumai esetében). Az RBAC rendszereknél az ilyen absztrakt osztályok neve subjectek esetében általában domain, role vagy type, objectek esetében többnyire type.

Úgy döntöttem tehát, hogy megvizsgálok néhány MAC rendszert, és kiválasztom, melyik lesz számomra a legmegfelelőbb. Első körben hármat tartottam további vizsgálatra érdemesnek, a SELinux-ot, az RSBAC-t és az AppArmort, végül azonban egy műtét miatt megszaporodott a szabadidőm, és a Grsecurity-t is beiktattam.

1.: SELinux

Először az eredetileg az NSA által fejlesztett SELinuxra kerítettem sort. A következő doksikból tájékozódtam:
- http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/SELin…
- http://selinuxproject.org/page/Main_Page(Főleg az Advanced Users rész, azon belül is a Policy Language)
- OpenSUSE SELinux doksi csomag
- http://flylib.com/books/en/2.803.1.34/1/
- http://fedoraproject.org/wiki/SELinux/Configs
- http://www.nsa.gov/research/selinux/list-archive/0609/16930.shtml
- http://www.nsa.gov/research/selinux/list-archive/0605/thread_body8.shtml
- http://selinux-mac.blogspot.com/2009/06/multi-category-security.html
Miután/miközben ezeket elolvastam, átnéztem még a CentOS 6.0-hoz csomagolt man oldalakat, kipróbáltam ezt-azt (pl. semanage, audit2allow, seaudit, stb.), kielemeztem az alapértelmezett "targeted" policy-t az apol nevű eszközzel, és úgy éreztem, nagyjából sikerült megértenem, miről szól, és hogy működik a SELinux.

A SELinux policy-ja elég sok fájlban oszlik szét. Ezek közül a tulajdonképpeni bináris policy, ami a kernelbe töltődik, a /etc/selinux/POLICYNÉV/policy/policy.VERZIÓ fájlban található, de vannak itt adatok a fájlrendszer megcímkézésére vonatkozóan (amit mindenképpen el kell végezni, hogy használatba vehessük a SELinuxot), a UNIX felhasználók SELinux tulajdonságaira vonatkozóan, stb. A bináris policyn kívüli policy-összetevők menedzselését többnyire a semanage paranccsal végezhetjük.

A SELinux policyjának felépítése rendkívül elegáns. Minden subject és object egységes módon van osztályozva, az ún. security contexttel. A context négy összetevője közül csak a type és a range értékek számítanak a szűkebb értelemben vett hozzáférésvezérlésben, de ezek közül is a range-ben szereplő level egyik összetevője, a sensitivity sohasem bírt igazán gyakorlati jelentőséggel.

A SELinux kernelbeli része nem biztosít közvetlen összefüggést a UNIX UID/GID értékek és a processzek security contextje között, de mivel nyilvánvaló, hogy az UID/GID váltásnak sok esetben contextváltással kell járnia (pl. login, SSH, felhasználói crontabok), ezt úgy oldották meg, hogy néhány userland-beli programnak jogot adnak az explicit contextváltásra, amelyet a libselinux könyvtár segítségével a /proc/PID/attr API-n keresztül tehetnek meg. Ehhez hasonló módon userland támogatásra van szükség olyan esetekben, ahol a type_transition szabályok korlátai miatt a SELinux kernel-beli komponense nem tudja biztosítani, hogy bizonyos rendszeresen újragenerált fájlok (pl. /etc/passw, /etc/shadow, /etc/group, logrotate) megfelelő security contexttel legyenek felcímkézve. Mindezek miatt elég sok userland-beli programcsomagból módosított verzióra van szükség ahhoz, hogy használatba vehessük a SELinux-ot.

A SELinux kernel-beli része az LSM technológiára épül, ezért élvezi a vanilla kernel fejlesztőinek támogatását, sőt része a mainstream kernelnek. Így, ha SELinuxot akarunk telepíteni egy azzal még nem rendelkező disztribúcióra, akkor módosított kernelre nem, de a SELinux userland eszközeire és a fent említett módosított programcsomagokra szükségünk lesz. Ezen felül kell még legalább egy policy. Kiindulási alapnak jó lehet a Tresys-féle referencia-házirend, amit ugyan nem próbáltam, de sejtéseim szerint az adott disztribúciónak az FHS-től (vagy más referenciától) való eltérésének függvényében módosításra, testreszabásra szorulhat. És itt jön a bökkenő: A SELinuxban még az ilyen "egyszerű", a sima DAC-hoz képest nem sok szigorítást tartalmazó házirendek is több százezer szabályból állnak, így a testreszabásuk nem annyira rendszergazdáknak, mint inkább disztribútoroknak való feladat.

A SELinux előnye (az alább ismertetett RSBAC-hoz hasonlóan), hogy rendkívül finomfelbontású a biztonsági modellje, és a fájlok felcímkézésével (amelynek ötletét talán nem is annyira a UNIX inode-onkénti fajljogosultságaiból, hanem több évtizedes USA kormányzati MLS/MCS hagyományokból merítették) olyan jellegű jogosultságelkülönítést tudnak megvalósítani, amit az elérési út-alapú MAC megoldások (AppArmor, Grsecurity) nem. Véleményem szerint van néhány hátránya, amelyek talán az eleganciára való túlzott törekvésből adódnak: Az egyik az, hogy rendkívül bonyolult a karbantartása, embert próbáló feladat a konkrét rendszerhez való illesztése. A Red Hat pl. kétféle policyt szállít az oprendszereivel:

-Az alapértelmezett "targeted" nevűt, amelynél a rendszer nagy része korlátozások nélkül fut, és csak néhány kiválasztott program/démon jogkörét szűkíti a SELinux, de már ez a policy is több százezer szabályból áll.

-Van egy "strict" nevű policy is, amely jóval teljesebb körű korlátozást, így nagyobb biztonságot nyújt, de ennek használata a bonyolultsága okán "unsupported", és mivel előregyártott policyról van szó, nyilván testreszabást igényel egy-egy konkrét rendszer esetében.

A másik fő hátránya szerintem az, hogy amint feljebb már említettem, a kernel szemszögéből a processzek security contextje teljesen független az UID és GID értékektől, ezért tipikus esetben a felhasználókat csak a Linux DAC tudja megkülönböztetni egymástól jogosultság tekintetében, és kiterjedt módosításra szorul a userland (amint szintén említettem már fentebb).

2.: RSBAC

A SELinux után az Amon Ott által szinte egyszemélyes projektként futtatott RSBAC rendszerrel kezdtem foglalkozni. Az RSBAC moduláris felépítésű. A kötelező AUTH és az ajánlott RC modulok együtt a SELinux TE/RBAC megoldásához rendkívül hasonló filozófiát képviselnek. A legtöbb időt ennek a két modulnak (főleg az utóbbinak) a megismerésével töltöttem, míg végül rájöttem, hogy a legjobban úgy lehet megérteni a működésüket, ha megfelelő SELinuxos ismeretek birtokában a (nem éppen részletes) RSBAC doksik és a man oldalak átolvasása után az rsbac_menu programmal böngészve turkálom a rendszert, miközben fél szememet az RSBAC kézikönyv megfelelő fejezetein tartom. Az rsbac_menu a Linux kernel ncurses alapú `make menuconfig` rendszeréhez hasonló külalakú konfiguráló program, és rendkívül szemléletes képet ad az RSBAC policy felépítéséről. Az opcionális MAC modul a SELinux MLS/MCS rendszeréhez hasonlít, de ennek nem igazán szenteltem figyelmet, mint ahogy a még elvontabb/elborultabb PM modulnak sem. A praktikusabb, rendszerközelibb ACL, CAP és RES modulok viszont egyszerűnek de hasznosnak tűnnek számomra.

Az RSBAC a SELinuxhoz hasonlóan inode-onként címkézi fel a fájlokat, de attól eltérően nem magában az inode-ban tárolja a metaadatokat kiterjeszett attribútum formájában, hanem - a fájlrendszerkvóták adatbázisához hasonló módon - minden fájlrendszer gyökérkönyvtárában létrehoz egy /rsbac.dat könyvtárat, és ezekben különféle bináris adatbázisfájlokban tárolja el a teljes policyt minden modulra vonatkozóan. A fájlokra inode-szám alapján hivatkozik, és mivel Linux (de legalábbis ext3 fájlrendszer) alatt könnyen előfordulhat, hogy egy fájl törlése után ugyanabban a könyvtárban egy frissen létrehozott fájl megkapja a törölt fájl inode-számát, megjelentek olyan aggódó hangok, miszerint az RSBAC alatt a törölt fájlok jogait megörökölhetik más, egész más célokat szolgáló később létrehozott fájlok, azonban ez a félelem alaptalan mindaddig, amíg nem mountoljuk fel a fájlrendszereinket nem RSBAC-képes kernellel, mert az RSBAC minden fájl törlésekor minden - az adott fájlra vonatkozó - adatot azonnal töröl az adatbázisából. Az RSBAC egyébként a számos biztonsági modul révén sokkal több metaadatot rendel a fájlokhoz, mint a SELinux, ezért kényelmetlen is lenne azokat xattr formájában tárolni. A SELinux esetében módosított init binárisra van szükség a policyt betöltéséhez, az RSBAC esetében azonban maga a kernel végzi el ezt a munkát, és semmilyen userland programnak nem engedi meg, hogy hozzáférjen a /rsbac.dat könyvtárakban tárolt adatbázisokhoz. Ha nem tévedek, az userland és a kernel RSBAC kódja között az API egyetlen "security" nevű rendszerhívásból áll (legalábbis bizonyos architektúrákon). A SELinux és az RSBAC esetében egyébként azért kell a policyt a bootolási folyamat rendkívül korai szakaszában és speciális módon betölteni a kernelbe, mert amint már említettem, ezek a rendszerek a subjecteket (processzek) és az objecteket (fájlok, IPC csatornák, stb.) speciális metainformációkkal (pl. security context) ruházzák fel, és ezeknek a MAC-specifikus címkéknek - egyebek mellett - a rendszer állapottároló mivoltából kifolyólag a kezdetek kezdetétől fogva jelen kell lenniük a kernel adatstruktúráiban.

Az RSBAC TE/RBAC rendszerében a SELinux sokösszetevős security contextje helyett a subjectek egy egyszerű "role" paraméter alapján vannak osztályozva, az objectek pedig "type" alapján. A processzek, mivel a subject mellett object szerepet is betöltenek, rendelkeznek külön role és type értékkel is. Ennek a TE/RBAC rendszernek a működése leginkább abban tér el a SELinuxétól, hogy itt a kernel egy rendkívül elmés ötlet, nevezetesen a fájlok rc_initial_role és rc_force_role attribútumai segítségével megoldja - mégpedig igen hatékony módon - azt, hogy a processzek UID váltása role-váltást idézzen elő. Mivel tehát a SELinux-szal ellentétben az RSBAC kernel nem csak bizonyos binárisok végrehajtásakor (a SELinuxnál ezt hívját type transition-nek), hanem (R)UID váltáskor is lehetóvé teszi a processzek role-váltását, és amint feljebb írtam, a policyt sem egy módosított init, hanem maga a kernel tölti be, így az RSBAC jóval kevesebb támogatást igényel az userlandtól, mint a SELinux. Ez azt jelenti, hogy az userland-et a pam_rsbac.so modul bevezetésén kívül egyáltalán nem kell RSBAC specifikus módon megváltoztatni. Az SELinuxéhoz hasonló filozófia miatt itt is fennáll a fent említett címkézési probléma az /etc/passw, /etc/shadow, /etc/group, és logfájl jellegű fájlok újragenerálásakor, de a felhasználói adatbázis esetében ezt megoldották egy huszárvágással, nevezetesen a szokásos shadow fájlok helyett a kernelben (illetve a gyökérfájlrendszer /rsbac.dat könyvtárának egyik adatbázisában) tárolt UNIX felhasználói adatbázissal (ennek az eléréséhez szükséges az említett pam_rsbac.so modul), a logrotate vonatkozásában viszont nincs tudomásom hasonlóan egyszerű megoldásról, itt talán a különböző típusú logfájlok elkülönített alkönyvtárakban való tárolása segítene.

Az RSBAC a Grsecurity-hoz hasonlóan (de a SELinuxszal és az AppArmorral ellentétben) nem az LSM infrastruktúrára épül. Ennek oka többek között talán az, hogy az LSM integrációhoz mind az LSM-et magát, mind a szóbanforgó MAC megoldásokat erőteljesen meg kellene reformálni, és ezek az "egyszemélyes" projektek ezt nem tudják, nem is akarják felvállalni. Linus részéről úgy érzem, jogos az az elvárás, hogy az ilyen speciális területeken működő rendszerek egy keskeny, jól körülhatárolható felületen (ilyen az LSM) keresztül érintkezzenek a kernel többi részével, ne pedig több száz különböző helyen beavatkozva, főként talán azért, hogy karbantartó híján könnyen leválaszthatóak, kikapcsolhatóak legyenek, és egy-egy hibájuk miatt ne kelljen váratlan helyeken problémáktól tartani a kernel működésében és viszont. Úgy néz ki tehát, hogy ezek a "renitens" biztonsági projektek örökké a vanilla kernelfán kívül fognak fejlődni, és ez talán jól is van így.

Az RSBAC amellett, hogy teljes értékű MAC rendszer, további - a MAC szabályrendszerével egyszerűen (vagy sehogyan) le nem írható - praktikus biztonsági megoldásokkal szolgál, mint pl. a symlinkek átirányítása (pl. saját /tmp könyvtár mindenkinek és minden démonnak), egy szigorúbb - biztonsági megoldásként is használható - chroot jellegű rendszerhívás, az rsbac_jail hozzáadása, opcionális PaX integráció (ún. enhanced RSBAC kernel használata esetén), vírusvédelmi megoldások támogatása, speciális fájl flag-ek, stb.

Mindezen előnyök ellenére, bár az RSBAC tanulmányozásának korai szakaszában egyértelmű befutónak tartottam ezt a rendszert, később elvetettem a használatát a SELinuxéval összemérhető bonyolultsága okán, valamint amiatt, hogy nem találtam hozzá sem automatikus policy generáló eszközt (a másik három rendszerhez különböző képességekkel rendelkezésre állnak), sem előre gyártott jól kidolgozott policy-kat (igaz, a kernel maga generál hozzá egy nagyon egyszerű alap policyt).

szerk 2011-10-31: Úgy látom, tényleg nem igazán lehet az RSBAC esetében policy generálásról/learning mode-ról beszélni. Az AUTH és ACL modulokhoz van ugyan ilyen, de a policy (valószínűleg) legnagyobb részét kitevő RC modul sajnos nem rendelkezik ilyennel, csak tervezik: http://www.rsbac.org/todo

3.:Grsecurity

A Grsecurity-t majdnem kihagytam a kiértékelésből, mert azt gondoltam róla, hogy túlságosan egyszerű, ezért primitív eszköz, sőt kétségeim voltak afelől, hogy futtatható-e Xen alatt, és hogy elég gyorsan követi-e a vanilla kernel fejlődését. A Grsecurity az RSBAC-hoz hasonlóan csaknem egyszemélyes projekt Brad Spengler irányítása alatt. Ugyancsak az RSBAC-cal rokon módon nem LSM alapú, valamint szintén tartalmazza a zseniális PaX patchet, az RSBAC-cal ellentétben azonban nem opcionálisan, hanem kötelező módon, tehát nincs Grsecurity PaX nélkül.

A PaX a MAC rendszerekkel ellentétben nem a kernel egyébként is meglevő hozzáférésvezérlési döntéshozatalát fejleszti tovább, hanem a futó programoknak a hackerek általi "eltérítését" próbálja megakadályozni, pontosabban a programok memóriatérképének korrupcióját nehezíti meg. Kezdetben ezen cél elérése érdekében a virtuális memória bizonyos lapjainak végrehajtási tilalmával (PAGEEXEC/SEGMEXEC) és memóriatérkép véletlenszerűsítéssel (ASLR) küzdött a PaX, mára azonban több hatékony kiegészítő védelmi módszert vezetett be, pl. a PAGEEXEC/SEGMEXEC módszereknek a felhasználói processzeken túl a kernelre történő kiterjesztését (KERNEXEC), bizonyos típusú kernel exploitok (pl. null pointer dereference) elleni ötletes védelmet (UDEREF), és más szigorításokat a memóriakezelés területén. A PaX védelmi módszerei közül mára már a vanilla kernelben is meghonosodott a PAGEEXEC jellegű végrehajtási tilalom (de csak az ezt hardveresen támogató CPU-kon), és az ASLR, de a PAX megoldásai ezeken a területeken is radikálisabbak és hatékonyabbak.

A Grsecurity Xen alatti futtathatóságára vonatkozó aggályaimat a PaX weboldala okozta, itt ugyanis csak ősöreg verziókat találtam. Észerevettem azonban, hogy a Grsecurity letöltő oldalain található Grsecurity és PaX patch verziók gyorsabban követik a kernel fejlődését, mint ahogy azt egyáltalán elvárhatónak tartanám. Kipróbáltam hát, hogy lefordítható és futtatható-e Xen domU-ban, és azt tapasztaltam, hogy rendkívül stabilan működik. A kezdetektől használom nagy terhelésű éles rendszeren is, és soha nem történt egyetlen összeomlás vagy akár kisebb rendszerhiba, még live migration közben sem. Csak az szomorított el, hogy a KERNEXEC és UDEREF védelmek nem kompatibilisek a Xen hypervisorral, ezért nem tudom őket használni :-(

A Grsecurity a SELinuxtól és az RSBAC-tól eltérően, de az AppArmorral megegyező módon egyrészt nem absztrakt címkék (pl. security context) alapján osztályozza a subjecteket és objectetek, hanem a vanilla kernel által már egyébként is biztosított metainformációk alapján (pl. (R)UID/(R)GID, elérési út/fájlnév), másrészt nem igényli a fájlok felcímkézését sem, mert a fájlokhoz való hozzáférést nem valamilyen inode-hoz köthető (vagy azokban tárolt) metainformáció, hanem egyszerűen a fájlok elérési útja/neve alapján végzi. Ennek két fő előnye van: egyrészt a Grsecurity (és az AppArmor) policy-ja összehasonlíthatatlanul egyszerűbb és átláthatóbb, mint a SELinuxé és az RSBAC-é, másrészt ezek a MAC megoldások a bootolási folyamat tetszőleges pontján (vagy akár a rendszer aktív futása közben) aktiválhatóak deaktiválhatóak és tetszőleges mértékben átkonfigurálhatóak.

Az elérési út alapú (path based) hozzáférésvezérlés azonban nem mindenki szerint bír létjogosultsággal (bővebben ld. a fentebb már hivatkozott http://securityblog.org/brindle/2006/04/19/security-anti-pattern-path-b… posztban). Joshua Brindle cikke alapos és jól bemutatja az "inode tábor" sokszor jogos érveit, de van benne szerintem néhány csúsztatás, vagy azóta elavult információ: A path alapú MAC megoldások gyengeségéül rója fel pl., hogy nem minden Linux kernel objektum rendelkezik névvel/elérési úttal, ezért ezeket nem is lehet fájlnévvel illetni. Nos, ez igaz (mint ahogy az is, hogy a Grsecurity és az AppArmor biztonsági szűrőinek felbontása durvább szemcsézettségű a SELinux-énál és az RBAC-énál), de ezek az objektumok a vanilla Linuxban pontosan ugyanannyira nem rendelkeznek security contexttel sem, csak miután a SELinux felcímkézi őket.
A path alapú megoldások hibájául rója fel azt is, hogy azok a közös használatú könyvtárakban a Linux DAC segítségére szorulnak a különböző felhasználók fájljainak megkülönböztetése érdekében. Ez így van, de az alapértelmezett targeted policy esetében a SELinux is nagyban a DAC-ra alapoz hasonló szituációkban.
A "Binaries aren’t processes" bekezdés szerint hiba, hogy az azonos bináris végrehajtásából származó processzek a MAC szempontjából azonos jogokkal futnak a path alapú rendszerekben. Amint később látni fogjuk, ez a Grsecurity-re sohasem volt igaz (sőt, talán az összes rendszer közül a legjobban kezeli ezt a problémát), és a pam_apparmor.so modul, valamint többféle öröklési szabály megjelenése óta az AppArmor újabb változatai is a SELinuxéhoz hasonló szintű megoldással álltak elő ezen a téren.
Azzal vádolja továbbá az path alapú megoldásokat, hogy a gyengeségeiket ellensúlyozandó, az alkalmazások módosítását igénylik, holott a fentiekben kifejtettem, hogy más "hiányosságai" révén a SELinux élen jár abban, hogy csak módosított userland-del legyen képes futni (igaz, ott standard rendszerösszetevőket, nem pedig speciális alkalmazásokat kell módosítani).
A poszt kommentjeit is érdemes elolvasni, hogy képet kaphassunk mindkét oldal érveiről. Azt el kell ismerni, hogy helytálló a legerősebb érve, miszerint a GNU/Linux esetében az elérési út nem jelöl olyan egyértelműen egy fájlt, mint az inode-ja, mert hard linkek, névterek, --bind opciós mountolások révén ugyanaz a fájl több helyen is feltűnhet. Klasszikus példa ezen probléma szemléltetésére az a helyzet, amikor egy path alapú MAC megoldás megpróbálja megvédeni a /etc/shadow fájlt az illetéktelen hozzáférésektől, de ha egy támadó sikeresen létrehoz egy hard linket a shadow fájlról mondjuk a /tmp könyvtárban, akkor - mivel ez az utóbbi link path alapján nem részesül a /etc/shadow-val egyenrangú védelemben - az új elérési úton keresztül illetéktelenek is módosíthatják a felhasználói adatbázist. A path alapú megoldások hívei erre válaszul felvethetik, hogy mi van, ha a védendő fájl valamilyen okból, pl. szoftverfrissítés miatt vagy mentésből történő visszaállítás során elveszti a security contextjét hordozó címkét? Ilyen esetekben az inode alapú védelem mondana csődöt, a path alapú viszont zavartalanul biztosítaná a folyamatos védelmet.
Mindkét típusba tartozó MAC rendszerre jellemző, hogy amíg aktívak, mindent megtesznek az ellen, hogy a gyengeségeiket ki lehessen használni: Csak a megbízhatónak minősített programok szűk körének engedélyezik a mountolást, hard linkelést, névtér létrehozást, security context címke-módosítást, stb., egy szóval a lehetőségeikhez mérten közelítenek a legkisebb jogosultság elvének betartásához. És ez az, amiben a négy vizsgált rendszer közül átlagosan talán a Grsecurity teljesít a legjobban éles környezetben.

A Grsecurity MAC megoldásának, az ún. RBAC rendszernek két hatalmas előnye van: a nagyon egyszerű, ugyanakkor praktikus és erőteljes policy szintaxis, és egy rendkívül hatékony tanuló mód (learning mode). Ezen előnyöket kihasználva speciális IT biztonsági szakismeretek vagy hosszas tanulás nélkül is könnyedén készíthetünk olyan policyt, amely nem csak bizonyos szolgáltatásokat szorít szigorú keretek közé (mint a SELinux általánosan használt targeted policyja vagy az AppArmor disztribútor által szállított gyári házirendjei), hanem a SELinux strict policyjához hasonlóan (illetve a tökéletes testreszabottsága okán még szigorúbban) érvényesíti a legkisebb jogosultság elvét.

A Grsecurity RBAC rendszere a processzeket (R)UID/(R)GID alapú role-okba vagy domain-ekbe, és ezen belül (a processzekek binárisainak elérési útja alapján) subjectekbe szervezi. Ez a kétszintű hierarchia a subjectek execve híváson keresztüli átörökítését lehetővé tevő szabályokkal kiegészítve egyszerű, de rendkívül hatékony és flexibilis policy struktúrát eredményez, ráadásul olyat, aminek a generálása jól automatizálható, és ezt a Grsecurity ki is aknázza a gradm parancs segítségével. A role/subject elrendezés univerzális módon oldja meg Joshua Brindle cikkének "Binaries aren’t processes" bekezdésében felvetett problémát. A policy hatékonyságára jellemző, hogy semmiféle userland támogatást vagy nem igényel! A Grsecurity userland-je a PaX specifikus parancsokat is beleértve két-három binárisból és egyetlen konfigurációs könyvtárból áll. A policy egyetlen szöveges fájlban van, a teljes userland kb. tíz fájlt tesz ki.

A Grsecurity az RSBAC-hoz hasonlóan az előbbiekben felvázolt RBAC rendszeren felül további praktikus, a /proc/sys felületen keresztül ki- és bekapcsolható védelmi "trükkökkel" rendelkezik. Itt is teljes értékű biztonsági megoldást faraghatunk a chroot rendszerhívásból, aktiválhatjuk az erőteljes Trusted Path Execution védelmet, szigoríthatjuk a /proc fájlrendszeren keresztül elérhető adatokhoz való hozzáférést, stb., de symlink átirányítás sajnos nincs.

A Grsecurity dokumentációja jól érthető, de nem éreztem elég alaposnak (talán el kellett volna olvasnom ezt meg ezt is?), ezért az IRC-s közösség unszolására kénytelen voltam kiegészíteni. A projekt pár évvel ezelőtti "haldoklását" meghazudtolva látszólag szépen fejlődik. Nem tudom, hogy csinálják a fejlesztők, de remélem sokáig aktívak tudnak maradni. Az egyetlen, ami aggasztott a Grsecurity-vel kapcsolatban, az az, hogy egy-két hetes tanulmányozása után nem éppen elhanyagolható bugokat találtam benne. Ezeket Brad Spengler szerencsére órákon belül kijavította, sőt, a javaslataim alapján nekiállt, hogy kicsit átdolgozza a soft- és hard linkek kezelését. Ez a munka most is folyamatban van (nem tudom, milyen fazisba jutott éppen), ezért az általam írt kiegészítő doksi egy-két bekezdésének pontossága és időszerűsége kérdéses.

4.: AppArmor

Legutoljára maradt az AppArmor, amely a SELinux-hoz hasonlóan az LSM infrastruktúrára épül, és része a vanilla kernelnek (igaz, csak a 2.6.36-os verzió óta). Kezdetben az Immunix, később a Novell, jelenleg pedig az Ubuntut kiadó Canonical a fő fejlesztője. Az AppArmor a Grsecurityhez hasonlóan elérési út/fájlnév alapú biztonsági megoldás, de a MAC rendszeren felül nem tartalmaz kiegészítő védelmi mechanizmusokat.

A dokumentációjából hamar kitűnik, hogy az AppArmor policy szintaxisa is kísértetiesen hasonlít a Grsecurity-ére, de sajnos sajnos hiányzik a role/domain fogalma, bár a 2.7-es verziótól tervezték egy erre emlékeztető, de valószínűleg kevésbé erőteljes eszköz bevezetését, de úgy tűnik, nem sikerült teljesíteni a tervet, mert a 2.7-es kiadás még mindig a 2.5-ös verzió kernel kódját használja.

A grsecurityben subjectként megismert fogalom itt "profile"-ként köszön vissza. A role-ok hiánya sajnos azzal jár, hogy a SELinuxhoz hasonlóan a kernel-beli MAC kód nem tesz semmit annak érdekében, hogy a különböző UID-del/GID-del futó processzek különböző jogokat kapjanak, vagyis igazzá válik Joshua Brindle "Binaries aren’t processes" címszó alatt megfogalmazott kritikája. Ezt a gyengeségét az AppArmor a SELinux módjára az userland közreműködésével kompenzálja az aa_change_hat és aa_change_profile rendszerhívásokat(?) valamint a pam_apparmor.so modult mozgósítva.

Az AppArmor profilok a Grsecurity subjecteknél flexibilisebb módon rendelhetőek hozzá a processzekhez (ami nem meglepő, hiszen részben rájuk hárul a role-ok hiányának kompenzálása). Az objectekre megadható végrehajtási jogot (x) négyféle - az öröklést szabályozó - módosító flag-gel láthatjuk el, ráadásul a négyféle flag közül három lehetővé teszi az AT_SECURE glibc paraméter explicit átadását a vermen keresztül a környezeti változók biztonsági célokat szolgáló kigyomlálásának érdekében.

Az AppArmor általában a disztribútorok által előre gyártott, a SELinux targeted policy-jéhez hasonló módon csak bizonyos kiválasztott rendszerszolgáltatásokat korlátozó policy-vel érkezik, de ezek egyszerűen szerkeszthetőek, sőt policy-generáló segédeszköz is rendelkezésre áll. Az AppArmorban egyébként a többi MAC megoldásnál természetesebb módon valósítható meg a kiválasztott szolgáltatások korlátozása és a rendszer többi részének korlátlan jogosultságokkal történő futtatása, ugyanis a másik három rendszer szigorú "minden tilos, amit nem szabad" elvével szemben itt korlátoktól mentesen fut minden processz, amihez nem rendelünk profilt (a profilokon belül azonban már itt is érvényesül a "minden tilos, amit nem szabad elv").

Összességében az a benyomásom, hogy a biztonsági profilok processzekhez kapcsolása leginkább a SELinux hasonló funkciójával rokonítható, az objektumok osztályozása viszont a Grsecurity módszerére emlékeztet.

A fenti négy MAC rendszeren kívül további hasonló biztonsági megoldások is elérhetőek a GNU/Linux rendszerekhez, pl. a TOMOYO Linux (amelynek doksijában egy érdekes race condition-ről olvastam, ami más path alapú (de azok közül legalábbis az LSM-re épülő) megoldásokat is érinthet, pl. az AppArmort), aztán a Smack, a LIDS, stb., de ezekkel nem foglalkoztam. Az én összehasonlításom győztese toronymagasan a Grsecurity/PaX. Ezzel a témát lezártam, a betegszabadságomnak is vége. Megyek dolgozni, szevasztok.

Ja, még egy kérdés: Ti mit használtok, és miért?

email archivalas biztonsagosan

Fórumok

adott egy open source email archivalo megoldas, ahova omlenek be a levelek. A feladat az, hogy valamilyen integritas ellenorzest adjunk a rendszerhez ugy, hogy meg a root user se tudja se a leveleket, se az esetleges meta- ill. audit adatokat (ezek tarolasi modjara elso korben nincs megkotes) eszrevetlenul/nyom nelkul modositani. Hogyan oldanad meg ezt a feladatot?

Grsecurity doksi hiányosságból adódó kérdések

Fórumok

Mivel a Grsecurity doksija (http://en.wikibooks.org/wiki/Grsecurity) néhány kérdésben kétségek között hagyott, és az IRC csatornán (irc://irc.oftc.net/grsecurity) sem tudták mindet megválaszolni, úgy döntöttem, megpróbálom megválaszolni én, és ha már így teszek, felrakom a hupra. Lássuk:

After reading the "official" documentation of (http://en.wikibooks.org/wiki/Grsecurity) I was still left in doubt with some aspects of Grsecurity. I asked my questions in the corresponding IRC channel (irc://irc.oftc.net/grsecurity) but it didn't give me all the answers. So, I decided to answer them myself and publish the results at http:/hup.hu. Let's see it:

1. Hogyan töltődik be a policy a kernelbe?

Ellentétben a SELinuxszal (ahol a módosított init tölti be) és az RSBAC-kal (ahol tisztán a kernel végzi a betöltést), amelyeknél a boot processz korai, szigorúan meghatározott fázisában történik a policy betöltése, a Grsecurity-nál az userland-ben futó gradm parancs (többnyire a -E kapcsolóval) tölti be a policyt. Erre a célra alkalmas lehet egy saját System V szolgáltatás hozzáadása a /etc/init.d könyvtárhoz. Még az éles policy létrehozása előtt ugyanebben a szkriptben (tehát a boot processznek ugyanazon a pontján) érdemes elhelyezni a full system learninget végző gradm utasítást, hogy a lehető legjobban leképezze a rendszert. A fejlesztők szerint a Grsecurity RBAC-nak a boot processzben történő előbbre hozása bonyolultabb policyt, de nagyobb biztonságot, míg a későbbre tolása egyszerűbb policyt, de gyengébb biztonságot eredményez. Én úgy érzem, a helyzet nem ilyen egyszerű, és a késői RBAC inicializációra szavaznék, mert az egyszerűbb policy kevesebb engedélyt tartalmaz, tehát futás közben nagyobb biztonságot jelent, valószínűleg nem teszi lehetővé például a System V init szkriptek menet közbeni meghívását. Igaz, cserébe a boot processz során nincs RBAC védelem, de ez talán elfogadható.

1. How does the policy get loaded into the kernel?

Contrary to SELinux (in which a modified init does the job) and RSBAC (in which the kernel does it by itself) where the policy is loaded in at a strictly defined moment in the early boot process, with Grsecurity the policy is loaded by the userland command `gradm` (usually using the -E option). One could probably add an own System V inits script to the /etc/init.d directory to call gradm. This same init script (or at least the same moment during the boot process) should be the point to call gradm to generate the policy by doing full system learning, because using this way the policy will fit the system quite well. According to some opinions, a policy recorded and used at a later point of the boot process can be simpler but less secure, whereas a policy being used early in the boot process must be more complex but safer. In my humble layman's opinion the scenario may be not this simple: I vote for a policy recorded and loaded on a later point of the boot process because its fewer rules give fewer permissions to processes, probably meaning better security. A policy like this should not make possible to start or stop System V init script. It's true however, that on the other hand we wont have RBAC protection during (most of) the boot process, but it may be an acceptable risk.

2. Pontosan mi alapján kerül eldöntésre, mi lesz egy processz role-ja?

Számomra a Grsecurity RBAC egyik legszimpatikusabb tulajdonsága, hogy a subjecteket (processzek) és az objecteket (fájlok, erőforrások, POSIX capability-k, hálózati erőforrások stb.) nem ruházza fel saját magára nézve specifikus metainformációkkal, (mint a - véleményem szerint - értelmetlenül, sőt már káros módon bonyolult SELinux és RSBAC) hanem azzal dolgozik, amit már eleve is biztosít számára a Linux kernel, sőt, érzésem szerint a gyakorlatban ennek ellenére (vagy épp ezért) hatékonyabb a fent említett rendszereknél. (Arról nem is beszélve, hogy a puszta RBAC védelmen felül rendkívül sok és rendkívül hasznos, praktikus biztonsági megoldást tartalmaz).
A Grsecurity RBAC rendszere tehát elég egyszerűen dönti el, milyen user/group (vagy default) role-ba vagy domain-be kerüljön egy processz: semmi mást nem használ fel ennek eldöntésére, csak a processz RUID-jának és RGID-jének értékét. Az effective, saved és filesystem UID/GID értékek semmit sem számítanak ebből a szempontból.
A RUID-role/domain és RGID-role/domain összerendeléseket egyébként nem futásidőben nyeri ki a UNIX felhasználói adatbázisból, hanem a policy betöltésekor vagy frissítésekor betölti ezeket a kernelbe és ott tárolja. Éppen ezért a UNIX felhasználói adatbázis módosítása után esetleg szükség lehet a policy újratöltésére.

2. What is the exact method of allocating roles to processes?

One of my favourite attributes of Grsecurity RBAC is that (unlike the overwhelmingly and harmfully complex SELinux and RSBAC) it doesn't add its own specific metainformation set to subjects (processes) and objects (files, resources, capabilities, network resources, etc.). Instead of this, it just uses the information already provided by the Linux kernel. Moreover - in my opinion - despite this (or probably because of this) it can be more efficient then those mentioned systems. (No to mention that in addition to a sole RBAC protection, GRsecurity provides numerous useful and practical security solutions).
So, Grsecurity's RBAC system assigns user/group (or the default) roles or domains to processes in a quite simple way: It doesn't respect anything else but the RUID and RGID of the given process. Effective, saved and filesystem UID/GID don't matter in this relation.
RUID to role/domain and RGID to role/domain assignments aren't extracted in runtime from the UNIX user database. Instead, they are computed and loaded during policy load or refresh. This means, that it may be necessary to reload the policy after UNIX database modifications.

3. Mit jelent a "G" role mode (http://en.wikibooks.org/wiki/Grsecurity/Appendix/Role_Modes)?

Ha jól értem semmi mást, mint hogy a role kap egy implicit subjectet, ami a /sbin/gradm programnak a működését teszi lehetővé, minden bizonnyal azzal együtt, hogy ez az implicit subject megkapja az "a" mode-ot is, hogy a /dev/grsec eszközfájlon keresztül kommunikálhasson a kernelben levő Grsecurity rendszerrel. Ha jól veszem ki, az RBAC rendszer API-ja semmi másból nem áll, mint a /dev/grsec eszközből.

3. What does role mode "G" exactly mean (http://en.wikibooks.org/wiki/Grsecurity/Appendix/Role_Modes)?

If I understand it correctly, it means nothing more than giving an implicit `/sbin/gradm` subject to the role, with sufficient permissions to communicate with the kernel via the /dev/grsec character special devide file (which means setting the `a` mode for this subject). BTW, according to my experiences, the API of the in-kernel Grsec system consist of nothing more than this /dev/grsec node.

4. Milyen öröklődést gátol az "o" subject mode (http://en.wikibooks.org/wiki/Grsecurity/Appendix/Subject_Modes)?

Kétféle öröklés van a Grsecurity RBAC policy-jében: Egyrészt az ugyanabban a role-ban levő kevésbé specifikus subjectek engedélyeit örökölhetik az "alattuk levő" specifikusabb subjectek, másrészt amikor egy subject végrehajt egy olyan programfájlt, amelyhez - mint objecthez - xi hozzáférési joga van, akkor a processz az execve után nem a neki megfelelő subjectbe kerül, hanem az execve előtti subject jogait örökli. Az "o" subject mode kizárólag ez előbbi típusú öröklődés megakadályozására szolgál.

4. What kind of inheritance does subject mode "o" prevent (http://en.wikibooks.org/wiki/Grsecurity/Appendix/Subject_Modes)?

There are two distinct types of inheritance in the Grsecurity RBAC policy: On the one part more specific subjects can inherit permissions from less specific subject. On the other hand when a subject has at least "xi" permissions to an object and executes it, then Grsecurity RSBAC won't check the policy for an appropriate subject for the process upon that execve call, instead, the process will continue running with the permissions of the calling subject. Subject mode "o" prevents only the first type of inheritance.

5. Milyen mély ACL öröklődést tesz lehetővé az "i" object mode (http://en.wikibooks.org/wiki/Grsecurity/Appendix/Object_Modes), pl. változatlanok maradhatnak-e a jogosultságok RUID/RGID váltás esetén?

Amennyiben a RUID/RGID váltás role (vagy domain) váltást eredményez, akkor az "i" mode teljesen hatástalan. A processz új role-ba, és az ottani megfelelő subjectbe kerül. A roleváltást tehát nem lehet megakadályozni az "i" mode-dal, csakis a role-on belüli subjectváltást. A subjecteken keresztüli ACL öröklődés mélysége tetszőlegesen szabályozható, subjectváltás ugyanis execve-híváskor történhet, és a következő execve esetén az RBAC rendszer megnézi, hogy az aktuális (megörökölt) subject szabályai ismét öröklést írnak-e elő az "i" mode-on keresztül, és ha igen, megint öröklődés történik, ha nem akkor subjectváltás (ha kell). Az "i" mode tehát csak egyszeres mélységű öröklődést idéz elő, de újabb "i" flag-ekkel ez tetszőlegesen meghosszabbítható.

5. How deep is the inheritance caused by object mode "i"? (http://en.wikibooks.org/wiki/Grsecurity/Appendix/Object_Modes) For example, can subject ACLs be kept unchanged through RUID/RGID changes?

RUID/GUID changes triggering role (or domain) change render mode "i" ineffective. In these cases the process will be assigned new role and an appropriate subject to. This means chat role change cannot be prevented by mode "i" at all. Subject inheritance within the same role/domain can be regulated to be arbitrarily deep, since subject changes occur on execve calls, and - upon every execve - the RBAC system checks if the rules of the current (inherited) subject dictate inheritance via the "i" mode or not. If they do, inheritance occurs again, if not, the subject of the process may be changed (if necessary). So, to sum it up, mode "i" causes only a single level inheritance, but this inheritance can be extended arbitrarily by further "i" flags.

6. Pontosan milyen jogok kellenek hard link létrehozosához?

Semmi más, mint "l" jog a linkelendő (forrás) fájlhoz, ami ezen felül nem lehet "h" (hidden) "Find" jog a linkelendő (forrás-) fájlhoz (ami azt jelenti, hogy nem lehet "hidden"), valamint "l" és "c" jog az elkészítendő hard linkhez. Ez utóbbi esetében még az sem gond, ha rejtett, mint ahogy nem gond az sem, ha sem a forrást, sem a célt tartalmazó könyvtárhoz nincs még "r" jogunk sem, sőt, az sem baj, ha "h" flag-gel el vannak rejtve előlünk. Amennyiben azonban a /proc/sys/kernel/grsecurity/linking_restrictions engedélyezve van, a forrásfájlnak a hard linkelési műveletet végrehajtó processz tulajdonában kell lennie, pontosabban a processz FSUID-jének kell megegyeznie a linkelendő file owner UID-jával. További korlátozás, hogy ha a a forrásfájlhoz képest bármilyen többletjogosutlsággal rendelkezünk a létrehozandó linkhez (kivéve persze a "c" jogot), akkor a Grsecurity megakadályozza a link létrehozását.

6. What permissions are exactly necessary for creating a hard link?

Nothing more than "l" permission to the source file to be linked, which also has not to be hidden (restricted with "h" "permission") Find permission to the source file to be linked (which means it must not be hidden), and additionally one needs "l" and "c" permissions to the destination file (the hard link to be created). The destination file can even be hidden. In additionally directories containing both source and destination files can be hidden and we don't even need the "r" permission to these directories. However, if /proc/sys/kernel/grsecurity/linking_restrictions is enabled, then the source file must be owned by the process attempting to make a hard link of it. To be more precise, the process' FSUID must equal the owner UID of the source file. Another restriction is that if we have any more permissions to the link to be created than to the source file (except the "c" permission of course), then Grsecurity will prevent creating the link.

7. Hogyan kezeli a Grsecurity RBAC rendszere a symlinkeket?

Futásidőben nem sok váratlan dolog van a symlink-kezelésben. A symlinkekre vonatkozó jogok természetesen nem érvényesek a célpontra, tehát ha egy symlink eléréséhez van jogunk, de a célpontjához nincs, akkor a célpontot nem fogjuk elérni. A dereference-hez egyébként a "find" jogon kívül nincs szükség másra, azaz elég, ha nem rejtett a symlink "find" jogra sincs szükség, tehát az sem baj, ha rejtett a symlink. Symlink létrehozásához "cw" jogra van szükség.
A policy szövegformátumról binárissá történő fordítása közben azonban - amit a gradm végez - van néhány trükk, amelyeknek célja az életciklusuk folyamán gyakran változó célpontú symlinkeket tartalmazó programcsomagok kezelésének megkönnyítése:
Amennyiben a policyben objectként felsorolva KÖZVETLEN HIVATKOZÁS található egy symlinkre, és ugyanebben a subjectben feljebb még nem szerepelt a KÖZVETLEN HIVATKOZÁS a link célpontjára, akkor ez a symlinkre mutató sor megkétszereződik: Az egyik sor nem meglepő módon magára a symlinkre vonatkozik, a másik viszont a symlink célpontjára állítja be ugyanazokat a jogosultságokat. (Ennek a duplikálásnak feltétele az is, hogy a symlinknek és célpontjának ugyanaz legyen a tulajdonosa.) FONTOS: Ez azt jelenti, hogy a symlink célpontja KÖZVETLENÜL is elérhetővé válik, nem csak a symlinken keresztül. Sőt, még azután is elérhető marad, ha esetleg letöröltük a symlinket. A policyben a symlink után következő sorokban már nem szabad felsorolni a célpontját is, mert a duplikálás miatt ez annak felel meg, mintha a célpontot kétszer írtuk volna be, ami hibának számít, és a gradm egész addig nem engedi betölteni a policyt, amíg ezt ki nem javítjuk.
Amennyiben a policyben link célpontja szerepet először, és csak utána a symlink maga, akkor nem történik meg a fent leírt duplikálás, hanem a symlinkre megadott jogok kizárólag a symlinkre fognak vonatkozni.
Ha nem objectként, hanem subjectként adunk meg symlinket, a gradm ott is behelyettesíti a célpontot a symlink helyett, de duplikálás nem történik. A futásidejű bináris policybe tehát a symlink helyett csakis annak célpontja kerül be subjectként (bár a logokban a symlink nevét látjuk). Ez azt jelenti, hogy a symlink célpontja a symlink törlése után is minden joggal rendelkezni fog, amit a symlink számára adtunk meg, viszont ha a letörölt symlink helyébe egy programfájlt rakunk, az nem fogja örökölni ezeket a jogokat.

7. How does Grsecurity RBAC handle symlinks?

There's not much to be surprised about Grsecurity's runtime symlink handling. Permissions applying to symlinks don't apply to their targets, of course. So, if we have the permission to access a symlink but not its target, we won't be allowed to access the target the same way as the symlink itself. To dereference a symlink we don't need any permission other than to "find" it, which means it's enough for the symlink just not to be hidden not even the "find" permission, which means a symlink can be dereferenced even when it's hidden. To create a symlink we need at least the "cw" permissions to it.
Contrary to this simplicity, we are facing some interesting quirks during the process of compiling the text format policy into binary by gradm. These quirks were added to make easier the handling of software packages containing symlinks with targets often changing with version changes:
If gradm finds an object in the policy which is actually a symlink AND it haven't yet seen its target somewhere earlier in this policy then this object line gets duplicated: Not surprisingly, one of the lines will apply to the symlink itself while the other line will set the same permissions for the target of the symlink. (A requirement for this duplication is that the owner of the symlink and its target be the same.) IMPORTANT: This means that the target also becomes directly accessible, not just via the symlink exclusively. Moreover, it remains accessible even after the deletion of the symlink. In the same subject it's not allowed to refer to the target of a symlink in a line below the line referring the symlink itself, since because of this duplication its equivalent to refer to the target twice, which is not allowed and gradm won't allow loading the policy until fixing this.
If the target precedes the symlink (in the same subject of course) then the duplication described above is simply omitted.
If gradm finds a symlink in the policy which is NOT an object but a SUBJECT then it makes a similar substitution but without duplicating the line. It means that in the binary runtime in-kernel policy we will only have the symlink's target as a subject but not the symlink itself (despite this, in the kernel logs grsecurity refers to this subject with the name (path) of the symlink, not with that of the actual target). This means that the target of the symlink - as a subject - will continue having all permissions originally "intended" to be given to the symlink, even after deleting that symlink. However, if we put an executable file in the place of the deleted symlink, it won't inherit anything of that permissions.

8. Hogy működik a beépített authentikáció?

A `gradm -P *` parancs /etc/grsec/pw fájlban tárolja el a speciális role-ok jelszavait. Sajnos, úgy tűnik, törölni nem lehet belőle. Ez a jelszóadatbázis a policy betöltésekor töltődik be a kernelbe, úgy, mint a RUID/RGID-role összerendelések, így `gradm -a *` parancs authentikációja nem userlandn-ben, hanem a kernelben történik! Ha megváltoztatjuk egy role jelszavát a /etc/grsec/pw fájlban, az a kernelben tárolt jelszóadatbázisra nincs azonnali hatással. A módosítások életbe lépéséhez újra kell tölteni a policyt, pl. a `gradm -r` paranccsal.

8. How does builtin authentication work?

Using the command `gradm -P *` one can store passwords for special roles in the file /etc/grsec/pw. Sadly I didn't find the way to remove entries from this file. This password database is loaded into the kernel together with the policy, just like RUID/RGID-role assignments. This means that the `gradm -a *` style authentication takes place entirely in the kernel, not in userland! Changing a password in the /etc/grsec/pw file doesn't affect the in-kernel authentication database, so to commit password changes actually, it's necessary to reload the policy (e.g. using the command `gradm -r`).

9. Hogy működik a PAM authentikáció?

A fent említett `gradm -a *` authentikációval szemben a `gradm -p *` (PAM) típusú authentikáció nem a kernelben tárolt jelszóadatbázist használja, hanem a PAM-et futásidőben. Ehhez a gradm egy nem dokumentált segédprogramot, a /sbin/gradm_pam parancsot hívja meg. A Grsecurity PAM service-ének neve "gradm", tehát egy /etc/pam.d/gradm nevű fájlt kell létrehozni, hogy ez működjön. A PAM authentikációval aktiválható role-ok "P" mode-ja legjobb tudomásom szerint azt jelenti, hogy minden role, aminek van joga átlépni ebbe a role-ba, kap egy implicit "/sbin/gradm_pam" subjectet elegendő joggal a PAM könyvtár szolgáltatásainak használatához. Ezek a jogok nem egy policy fájlban vannak definiálva, hanem a gradm forráskódjában, és mivel implicit módon jelen vannak az ezt igénylő role-ok ACL-jében, a /etc/grsec/policy fájlban további engedélyeket nem is lehet már adni ennek a subjectnek. Ez elég nagy problémat okozhat, ha a mi rendszerünkön éppen nem elegendőek a Grsecurity fejlesztők által megfelelőnek gondolt jogok, ilyenkor ugyanis a gradm forráskódjának módosítására kényszerülhetünk: http://forums.grsecurity.net/viewtopic.php?f=1&t=2831

9. How does PAM authentication work?

Contrary to the `gradm -a *` style authentication mentioned above, `gradm -p *` style (PAM based) actually uses PAM in runtime, instead of Grsecuty's in-kernel builtin database. To achieve this, gradm uses the undocumented helper program /sbin/gradm_pam. The PAM service name of Grsecurity is "gradm", so the file named "/etc/pam.d/gradm" has to be created. According to my experiences, the "P" mode of PAM authenticating roles causes every role - allowed to authenticate to that role - to have an implicit "/sbin/gradm_pam" subject having enough permissions to use the PAM library. Instead of some policy file, this subject is defined in the source code of gradm, and because it's implicitly present in the ACLs of the appropriate roles, there is no possibility of explicitly defining or extending the permissions of this subject. This can cause some headache if the permissions in an unmodified gradm given for "/sbin/gradm_pam" arent's sufficient on our system to use the PAM system. In this situation we may be forced to modify the source code of gradm: http://forums.grsecurity.net/viewtopic.php?f=1&t=2831

SSL tanusitvanyt, honnan?

Fórumok

Sziasztok,

szuksegem lenne par ajanlatra azzal kapcsolatban, hogy honnan vasaroljak SSL tanusitvanyt weboldalamhoz,
ugyanis Oktober 1-tol minden facebook appnak kotelezoen kell rendelkeznie SSL tanusitvannyal.

Negativ illetve pozitiv tapasztalatokat is szivesen olvasnek/hallanek ezzel a temaval kapcsolatban.

Koszonom a segitseget!
Csaba

[megoldva] startssl auth hiba

Fórumok

Sziasztok,

igényelnék startssl free certet, azonban a https://auth.startssl.com állandóan elhajt a vérbe, vagy én rontok el nagyon valamit vagy nem tudom, de már kezd idegesíteni. Próbált böngészők: Firefox 6.x, Chrome 13.x, Seamonkey 2.2, 2.3.x és még elvetemült módon IE 8 is.

A hibaüzenet a következő:


Secure Connection Failed
  
An error occurred during a connection to auth.startssl.com.

SSL peer was unable to negotiate an acceptable set of security parameters.

(Error code: ssl_error_handshake_failure_alert)

Mit rontok el nagyon?

Update:

Nem rontottam el semmit, a startssl állt be kicsit, de most délután megpróbálva már használható volt jól.