SL 6.2 és Firefox sandbox-ban

Kísérletezek tovább a RedHat 6 új Sandbox feature-jével. (Előzmények 1 és 2.)

Hasznosnak tartom, ha lóg valahol egy olyan parancsikonom, amivel sandbox-ba zárt böngészőt tudok indítani. SL 6-ra 1-2 klikkel felmegy a Chrome stable. Ezt viszont nem tudom egyelőre bezárni, mert variál a PID-ekkel, és ezt nem engedi a SELinux. Majd meg akarom nézni, mennyire macerás extra saját policy típust csinálni ehhez. (Ilyenkor átirányítom a kimenetet egy fájlba és egy sleep 300-at odateszek a parancs mögé, így a /tmp/.sandbox_home* mappában meg tudom keresni a fájlt - mert a sandbox bezárásával törlődnének a temp dir-ek.)

A hivatalosan szállított Firefox 3.6 tökéletesen működik minden szempontból - sandbox-ban is. A flash-el van annyi, hogy egy frissítés óta fagy a 3.6-os vele, de csak sandbox-ban.

Gondoltam megnézem a legújabb 64 bites upstream Firefox verziót, a 10.0.2-t. Flottul megy minden láthatólag, hibába eddig nem futottam. Kicsomagoltam ~/bin-be, majd így indítottam sandbox-hoz:

cd ~/bin/firefox
sandbox -i . -t sandbox_web_t -X -- ./firefox

Flash is megy szépen, semmi lassúlás, hang is rendben van. Gondolom Adobe-éknál sem tesztelik végtelen kombinációban ezer böngésző verzióval. Egyébként a sandbox ablak átméretezhető - de mintha rémlene, hogy csak egy frissítés óta, mert valami release notesban azt olvastam, hogy egyelőre azt nem tudná az X-es sandbox. De már tudja. Az is kiderült, hogy a sandbox_net_t és sandbox_web_t policy típusok közt az a különbség, hogy utóbbi csak az "apache portokhoz" enged kapcsolódni (egy RedHat-es PDF prezentáció szerint).

Azt előzőkben sem említettem, hogy tud olyat Sandbox, hogy megmondhatjuk, hogy a bezárt alkalmazás maximum mennyi CPU-t és memóriát ehet. Így nem tudja le-DoS-olni a rendszert az idegen app. Nálam így néz ki a /etc/sysconfig/sandbox fájl (a CPU is 80%-ra van állítva gyárilag):


 Space separate list of homedirs
HOMEDIRS="/home"
# Control group configuration
NAME=sandbox
CPUAFFINITY=ALL
MEMUSAGE=80%
CPUUSAGE=95%

Javítás a sandbox scripthez: az audió-hoz web_t helyett sandbox_net_t policy kell, és a flash-t a mozilla/plugins-be másolva működik. A fentinél youtube-bal teszteltem csak, az meg html5-volt, ezt nem vettem észre. Tehát a működő megoldás:

#!/bin/sh

mkdir -p ~/.mozilla/plugins
ln -sf /usr/lib64/flash-plugin/libflashplayer.so ~/.mozilla/plugins/
cd ~/bin/firefox

sandbox -i ~/.mozilla/plugins -i . -t sandbox_net_t -w 1250x730 -X -- ./firefox

Szerk.: még egy javítás a fentiekben: nem a ~/.mozilla mappát adom át a sandbox-olt firefox-nak, hanem a ~/.mozilla/plugins mappát, amely azt eredményezi, hogy nem kerül át az összes mentett adatom a profilommal együtt a sandbox-ba, csupán a plugins mappa - ez a flash miatt kell - és így üres profilal indul, tehát a támadó oldalak nem férnek hozzá a cookie és egyéb adatokhoz az eredeti profilból.

Hozzászólások

Vajon ezt a sandbox-megoldást portolják más disztróra is? Ubuntu 12.04-ben el tudnám viselni. :)

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

Még valami: rémlik olvastam valahol, hogy van AppArmor profile Firefox-hoz openSUSE-hez. Mivel Ubuntu is AppArmor-t szállít gyári MAC megoldásként, ezért gondolom a szabály kis alakítással átültethető, és akkor speciel lehet bezárt böngésződ relatíve egyszerűen - illetve nem tudom hogy Ubuntu-n létezik-e az AppArmor creator progi, amivel pl. SUSE alatt lehet adott alkalmazáshoz szabályt gyártani. Ez is egy lehetőség lehet.