Malé novinky o velkých věcech

Mac OS
Foto: Apple
Poslat odkaz Jak spustit FireFox v Sandboxu na facebook Poslat odkaz Jak spustit FireFox v Sandboxu na twitter

Mac OS X má vestavěnou funkci Sandboxing (pokud chcete vědět více, podívejte se zde), která může omezit aplikaci přístup k určitým částem operačního systému. K této funkci není příliš mnoho dokumentace, zejména proto, že jak Apple uvádí, mohou se zde dít změny. Některým se již přesto podařilo umístit do Sandboxu jiné než Applovské aplikace, jako například Firefox. Podle všeho Google Chromium projekt toto již využívá.

Umístění Firefoxu do Sandboxu může mít určitá omezení, například některé doplňky mohou vyžadovat větší přístupy, ale to je již na vašem rozhodnutí, zda si to vyzkoušíte či nikoliv. V každém případě vám odměnou může být bezpečnější systém před případnými chybami Firefoxu, kterých ruku na srdce, bylo také dost.

Začneme tím, že si následující text uložíte do souboru firefox-sandbox:

;; http://codereview.chromium.org/379019/diff/1/2
(version 1) 
(deny default)

(allow file-write* file-read-data file-read-metadata
  (regex "^/Users/user_name/Downloads")
  (regex "^/Users/user_name/Library/Application Support/Mozilla")
  (regex "^/Users/user_name/Library/Application Support/Firefox")
  (regex "^/Users/user_name/Library/Preferences")
  (regex "^/Users/user_name/Library/PreferencePanes")
  (regex "^/Users/user_name/Library/Caches/Firefox")
  (regex "^/Users/user_name/Library/Caches/TemporaryItems")
  (regex "^/Applications/Firefox.app")
  (regex "^(/private)?/tmp/")
  (regex "^/private/var/tmp")
  (regex "^/private/tmp"))

(allow file-read-data file-read-metadata
  (regex "^/dev/autofs.*")
  (regex "^/Library/")
  (regex "^/Library/Preferences")
  (regex "^/Library/Internet Plug-Ins")
  (regex "^/Library/PreferencePanes")
  (regex "^/usr/share/icu")
  (regex "^/usr/share/locale")
  (regex "^/System/Library")
  (regex "^/Applications/Firefox.app")
  (regex "^/usr/lib")
  (regex "^/var")
  (regex #"Frameworks/SDL.framework")
; Our Module Directory Services cache
  (regex "^/private/var/tmp/mds/")
  (regex "^/private/var/tmp/mds/[0-9]+(/|$)")
  (regex "^/Users/user_name"))

 
(allow mach* sysctl-read)

(import "/usr/share/sandbox/bsd.sb")
(deny file-write-data
   (regex #"^(/private)?/etc/localtime$"
     #"^/usr/share/nls/"
	 #"^/usr/share/zoneinfo/"))

(allow process-exec 
  (regex "^/Applications/Firefox.app"))

(allow file-ioctl
	(regex "^/dev/urandom"))
  
(allow network*)
(allow process-fork)
(allow system-socket)

Pak je třeba nahradit část /Applications/Firefox.app za cestu k FireFoxu ve vašem systému. Nezapomeňte také nahradit user_name za vaše uživatelské jméno v Mac OS X, aby fungovaly cesty (Je samozřejmě možné použít chytřejší přístup, ale chceme přeci Firefox omezit, ne mu umožnit přístup do všech složek uživatelů). Pak otevřete terminál a spusťte příkaz sandbox-exec (předpokládá se, že soubor firefox-sandbox je na stejném místě jako zrovna spouštíte sandbox nebo je firefox-sandbox ve složce /usr/share/sandbox/, pak však musí být použit přepínač -n ):

sandbox-exec -f ./firefox-sandbox  /Applications/Firefox.app/
Contents/MacOS/firefox-bin

Někteří uživatelé si stěžovali, že aplikováním pravidel Sandboxu se jim špatně zobrazovaly některá písma, řešením je přidáním těchto pravidel pro příslušné systémy. (U mne s Firefoxem 3.6.3 na Mac OS X 10.6.3 výše uvedený profil fungoval bez problémů):

(allow file-read-data (regex #"^/System/Library/Fonts"))  ; 10.5.6
(allow file-read-data (regex #"^/Library/Fonts")) ; 10.6
(allow mach-lookup (global-name "com.apple.FontObjectsServer")) ; 10.5.6
(allow mach-lookup (global-name "com.apple.FontServer")) ; 10.6

Doufejme že to zabrání ošklivým hackerům převzít naše stroje nebo jim to alespoň ztíží práci. Pokud se vám Firefox nenastartuje pomocí příkazu sandbox-exec, zkuste se podívat do logu /var/log/system.log, kde by jste mohli mít nějakou zprávu typu:

Apr 27 23:50:52 macosmachine sandboxd[567]: firefox-bin(565) deny file-read-data /private/etc/passwd
Apr 27 23:50:52 macosmachine sandboxd[567]: firefox-bin(568) deny process-exec /usr/sbin/netstat

Ano, čtete dobře, toto se mi objevilo při výpisu z Firefoxu, neměl jsem čas to zkoumat, ale rozhodně se mi nelíbí, pokud nějaký plugin čte data z /etc/passwd. Napsání pravidla, které povoluje netstati, je zřejmé, stačilo by do souboru přidat řádek:

(allow process-exec 
(regex "^/Applications/Firefox.app")
(regex "^/usr/sbin/netstat"))

Tento způsob psaní pravidel mě osobně připadne velmi zajímavý a rozhodně je to dobrý způsob, jak prověřit, co vám vlastně aplikace v systému opravdu dělá.

Publikováno: 30.11.2009

 

 

Změna barev | Autorská práva | Kontakt | Podpora | RSS kanály
© 2006 Gandalf, Design by Mirek
Creative Commons License