isolate: segédprogram a Unix processzek elkülönítésére, azok privilégiumainak minimalizálására

A probléma:

Az összes Unix alkalmazásod annak a felhasználói fióknak a teljes jogkörével fut, amely elindította: a böngésződ képes olvasni az SSH privát kulcsodat, a levelezőkliensed turkálhat a böngészési előzményeidben, a képátalakító programod kitörölheti az összes leveled és így tovább. Kollégám, David számos kihasználható sebezhetőséget talált a gyakran használt médialejátszókban.

Ennélfogva nem biztonságos megbízhatatlan forrásból zenét hallgatni: egy rosszindulatúan összeállított MP3 képes lehet megtörni a zenelejátszó programodat és annak jogkörét felhasználva elküldheti az SSH kulcsodat egy gonosz bajusszal rendelkező őrültnek.

Mit jelent a "nem megbízható forrás"? Erre példa lehetne mondjuk az internet...

A megoldás:

Ez a segédprogram, az isolate, chroot-olt környezetben futtatja a processzeket, (ki)kényszerített erőforrás korlátokkal, mint véletlenszerű UID-del, korlátozott X szerver hozzáféréssel. Az elszigetelt program ("isolatee") a továbbiakban nem rendelkezik a felhasználói fiókod teljes jogkörével, de te továbbra is élvezheted annak funkcionalitását. Például az adataidra nézve egész minimális rizikóval futtathatsz rosszindulatúan megpiszkált zenéket egy nem biztonságosan implementált zenelejátszóval.

Az isolate program Daniel Bernstein ötletén alapul. Lásd a "Some Thoughts on Security After 10 Years of qmail 1.0" dokumentumának 5. szekcióját.

Az isolate egyszerűen használható, felhasználási módja hasonlít a sudo-éhoz, chroot-éhoz, nice-éhoz stb.: egyszerűen csak tedd a parancsod elé az "isolate "-et. Az isolate automatikusan megkeresi a library függőségeket és felépíti az elszigetelt processz számára szükséges támogató környezetet [...]

Az isolate-et teszteltük FreeBSD 7-en és Ubuntu 8-on. Végső soron az a célunk, hogy minden Unix-on működjön!

isolate használat közben
Példa az isolate használatára

A projekt nyílt forrású, terjeszthető a GPLv2 feltételei szerint. További részletek, képernyőképek a projekt weboldalán.

Hozzászólások

Nem vagyok benne biztos, hogy egy automatikus chroot keszitos, masolgatos setuiod root -os program megoldas.
pl. egy SELinux jellegu dolog inkabb tunik megoldasnak.

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

Vagy: még mindig mindkettőt használom. :)

Egyébként ez az igazság. És lassan az Ubuntut is dobnám a notebookomról, ha lenne időm kideríteni, hogy miért nem megy a suspend/resume FreeBSD-ből.

Hasznos lenne ott is a ZFS (snapshotok, tömörítés, deduplikáció, checksumozás, a snapshot küldéssel rém egyszerű, és rendkívül gyors inkrementális backup külső diszkre/szerverre). Főleg most, hogy az ext4-re való átállás első élménye három darab nulla hosszúságú fájl (eddig csak ezeket "találtam" meg anélkül, hogy kerestem volna, de félek, hogy van több is)...

Azért ez a dolog felvet 1-2 kérdést. Mivel az IE Low szinten fut, ezért csak olyan processnek küldhetn üzenetet, amely szintén Low szinten fut (vagy direktben őt indította, azaz a parent processnek), illetve csak az NTFS ACL-szinten Low Mandatory Level beállítást specifikáló fájlokat, könyvtárakat érheti el (akármilyen read, write, stb. ACE vonatkozik a futtató felhasználóra). Hasonlóan működik a registry elérés is (ott is ACL korlátoz így). Low szintre a fájlrendszer szempontjából a böngésző cache van beállítva, a többi batyu már legalább Medium. Tehát csak ezt látja az IE.
Hogy tudjál letölteni az IE-vel, annak az a trükkje, hogy amikor indul az IE process (duplaklikk) alapértelmezés szerint Medium szinten, akkor ez beindít még néhány további IE-t (tabonkét, security zónánként, stb) Low szinten. Amikor download-ot mondasz, akkor IPC-zik a low process a parent processnek (mert neki tud csak), hogy írja a letöltött cuccot a cél könyvtárba. (A cél könyvtár mondjuk Medium levelre van belőve, ezért az Low IE nem tudna oda pakolni.)

Szóval az alkalmazás jó, ha tud róla, hogy milyen szinten fut, mert különben nem tud semmit sem csinálni. Gyakorlatilag ekkora security parázásnak internetre kapcsolódó, pluginokat töltögető alkalmazások esetében van értelme.

Természetesen tetszőleges alkalmazás elindítható ilyen szinten, csak nem duplaklikkre, hanem egy Windows SDK hívással.

"Ki van zárva, mert nem tudom", hogy van-e más program, ami ezt a feature-t kihasználja.

Igazából itt egy filozófiai ugrásról van szó: nem a user az evil, nem a kód.

Hmmm, de ha felejti valaki az isolate parancsot? :) Amugy akkor jobb "kikenyszeriteni" kernel szinten, pl ott a SELinux vagy az bonyi stb akkor apparmor, ahol path alapjan lehet megmondani az "okossagokat".

Talán a Linuxnak lassan szintet kellene lépnie local security szempontból. Tök jó, hogy alig van remote exploit, de talán a POSIX szabványok nyújtotta lehetőségekkorlátok helyett fontolóra kellene venni az olyan módszerek finomítását és könnyebben használhatóvá tételét, mint a GRsec/RBAC vagy a Novell-style ACL-ek. Jelenleg csak az ilyen hackek és a security listák árgus szemekkel való figyelése marad.

> elküldheti az SSH kulcsodat egy gonosz bajusszal rendelkező őrültnek.

Érdekes, hogy ekkor lúzerséget egy security programmal kapcsolatban valaki leír,
főleg aki fejleszti. Kicsit komolytalan..

Ha valakinek van egy kis esze levédi a privát kulcsát, onnantól meg akárkinek nyugodt
szívvel el lehet küldeni.

-----BEGIN DSA PRIVATE KEY-----
MIIBugIBAAKBgQCcB1TmM2q3fn5gcOxG705OxCt7ms/sVq+LkQtiwjhmYnlYOkUb
0S5Rxs8AjaRlbZeAcUnX/Q8PDEpgspogavHsMPibNVQbi22HQgCWFCBHHrJfvJLr
gQt71LKwfkzVOgyHniBjkNF+bRJCSvlysBUI/vkS96jbelm4dPE9QC30HwIVALlu
RY7UU/3Ucl1FVlLTZFE8/tTxAoGAOVGGqmDiwilVT58xWhcEWCawa/zMYRK4bOoR
SwwkzE0Q/sCXovC/qNVBctjtaEzU5n/rxraM4pNGqPyDNvkU9Mem3KIl52HoBjI7
OgeyqSnDIBCtgTyED+HXJM4GXKA93AoDlOkejG8Hzm/jup/cX95eiy4oJexUwaj7
0y438SwCgYBoFtXG0UQjqR6dyi0ZXxoaOzSfkKngro8H4SvMDwMki0kBBCLMhn2a
N3J8xEdCxiVwHJHrNPbkpUQ8uru5TU7XIqECMUbCAwrYEFjmw78Kp7fH69j+yU8Z
I7EOU0vZjv/6VaUdD0n6BqngA4R0sdstUf9N5yoPQY11Syh9+o1xpwIUdJiyGerX
So7pOkQdA6/zlUVq7dw=
-----END DSA PRIVATE KEY-----

És mit csinálsz vele okoska? Ha nem tudod, hogy hova használom, mit érsz vele, vagy bárki?

Hát igen. Végül is mindent elküldhet. Figyelheti hova lépek be stb. Ettől függetlenül tartom az állításomat, hogy a többség ssh kulcsának nincs értéke, amelyért megérné egy botnet hálózatot rászabadítani a feltöréséért és izgulni kellene, hogy milyen priv-el fut a firefox.

én olyant szeretnék, hogy egy könyvtárhoz csak egy program férjen hozzá – ilyet lehet? (tetszőleges program, kivéve a péntek esti sörözést)

balabitnel van egy szabadon hozzaferheto, nyilt forraskodu LD_PRELOAD-alondo lib, ami bechrootol, eldobalja a capabilityjeit es csak aztan inditja az eredeti programot. Szerintem hasnalhatobb, egy sima program fut egy nulla tartalmu chroot dirben is (mivel az LD_PRELOAD miatt a lib csak akkor hajtodik vegre, amikor az OS mar eleve osszelinkelte az egesz programot, ezert nincs szukseg gyakorlatilag semmire a chrootban)

asd

Ismét feltalálták az apparmort?
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..