Jailing/Sandboxing procesů v Linuxu aneb jak na izolaci aplikací

Jailing/Sandboxing procesů v Linuxu aneb jak na izolaci aplikací

Dostali jste se někdy do situace, že jste potřebovali použít aplikaci na práci s vašimi citlivými daty a i přes důvěryhodný původ aplikace z distribučních repozitářů, otevřený zdrojový kód, zodpovědnou vývojářskou komunitu, včasné fixy CVEs, dobré recenze a celkově kvalitní renomé jste přece jen byli paranoidní a měli obavy, aby se vaše data nedostala kam nemají? Pokud ano, pak bude dnešní zápisek právě pro vás protože jailing či sandboxing je technika, která vám umožní spouštěné aplikaci (programu, skriptu) přesně nastavit oprávnění, které má aplikace mít a zakázat co naopak nechcete aby aplikace mohla – například můžete aplikaci omezit přístup k síti a tím pádem i internetu a zabránit tak potencionální exfiltraci (odcizení) vašich dat.

K čemu je to dobré?

V mém případě šlo o změnu aplikace na správu klíčenky s hesly, kdy jsem z jednoho léty odzkoušeného a pro mě důvěryhodného řešení, přecházel na jiné – také otevřené a široce používané řešení a navíc nativní v Linuxu – jenže moje přirozená ostražitost mi bránila jen tak na první dobrou otevřít svou stávající klíčenku s hesly v pro mě nové a neodzkoušené aplikaci a proto jsem se podíval jaké jsou v Linuxu možnosti k tomu přistoupit bezpečně a na základě toho vznikl tento článek.

Možností využití jsou široké. Pointou jailingu/sandboxingu je povolit aplikaci jen to co dává smysl a co potřebujete a případně explicitně zakázat to co by rozhodně potřebovat neměla. Například při přehrávání lokálních médií, jako jsou hudební a video soubory, tak ve většině případu by přehrávač neměl vyžadovat přístup na internet. Stejně tak textový editor by neměl potřebovat přístup k vaší web kameře.

Jailing/sandboxing je fajn dodatečná vrstva zabezpečení, nicméně rozhodně se nedá považovat za dostatečnou formu zabezpečení pro spuštění nedůvěryhodného a potencionálně nebezpečného kódu! I v jailovacích nástrojích může být chyba umožňující nebezpečné aplikaci napáchat velké škody.

Firejail

Open source nástroj, který sandboxuje aplikace a omezuje jejich práva pomocí nástrojů, které poskytuje samotné Linuxové jádro. Díky tomu, že používá technologie co už linuxové jádro obsahuje, tak nemá žádné závislosti ani komplikovanou architekturu (žádný démon, žádný client-server, atd.) a nezabírá moc místa.

Firejail v dnešní době už v základu obsahuje více jak tisíc přednastavených profilů pro různé aplikace tak, aby aplikace měla přístup jen k tomu co skutečně vzhledem ke své funkci potřebuje, takže je jeho použití snadné a není třeba se bát větších problémů. Firejail také umoňuje aby jste si vytvořili vlastní profily, či upravili existující.

$ sudo dnf install firejail  # Instalace firejail

Pro vypsání předdefinovaných profilů:

$ ls /etc/firejail/ | grep profile

Použití firejail (předdefinovaný profil pro Firefox bude použit automaticky):

$ firejail firefox

Oprávnění se dají také konfigurovat rovnou přes parametry příkazové řádky:

$ firejail --net=none firefox  # Zakáže aplikaci přístup k síti
$ firejail --seccomp  firefox  # Spuštění se seccomp ochranou která provádí filtrování systémových volání
$ firejail --private firefox  # Znepřístupní aplikaci váš domovský adresář
$ firejail --private=~/soukromy_adresar/  firefox  # Místo domovského adresáře dosadí tento

Při použití --private firejail vytváří dočasný souborový systém tmpfs, který se smaže po ukončení aplikace, pokud specifikujete existující adresář jako argument, použije se tento.

Jednotlivé volby se dají samozřejmně kombinovat, takže můžete aplikaci zároveň zabránit jak přistupovat k síti, tak k vaší domovské složce.

Poznámka: Konkrétně zrovna spuštění Firefoxu v jailu vyžaduje, aby Firefox ještě neběžel! Design Firefoxu neumožňuje mít spuštěno více instancí Firefoxu. Pokud tyto příkazy spustíte když Firefox už běží, pak dojde pouze k vytvoření nového okna v již existující instanci Firefoxu a jailing/sandbox nebude aplikován!!

Přehled běžících jailů/sandboxů:

$ firejail --list  # Statický výpis
$ firejail --top  # Kontinuální přehled

Přizpůsobení existujících profilů pro vašeho uživatele se dělá přes lokální config:

~/.config/firejail/JMENO_APPLIKACE.profile

Kam pak nadefinujete profil tak jak jej potřebujete – víc informací zde.

Přímo od autora Firejail existuje i GUI pro Firejail nazvané Firetools: https://github.com/netblue30/firetools

Firejail obsahuje i příkaz firecfg, který firejail integruje v rámci systému, takže se bude používat automaticky.

Pěkné funkce firejail jsou pak podpora OverlayFS a AppImage.

Více informací o Firejail:

Bubblewrap (bwrap)

Nízkoúrovňový open source nástroj pro sandboxování procesů, který je využíván například pro izolaci Flatpaků. Podobně jako Firejail je malý a nemá prakticky žádné závislosti protože také využívá technologie dostupné přímo v Linuxovém jádře. Navíc pokud používáte aplikace ve formátu flatpak, tak jej již máte určite na systému nainstalovaný.

Narozdíl of Firejail neobsahuje Bubblewrap předdefinované profily aplikací a tak co aplikaci povolíte a co ne záleží čiště na vás a na tom jaké parametry při spuštění použijete. To znamená, že používání Bubblewrap vyžaduje alespoň určitou znalost problematiky a technologie a tím pádem není sám o sobě úplne vhodný pro běžného uživatele. Typicky je Bubblewrap volán ostatními aplikacemi, které jej využívají k implementaci požadovaného bezpečnostního modelu – například onen Flatpak či rpm-ostree.

$ sudo dnf install bubblewrap  # Instalace Bubblewrap

Použití Bubblewrap:

$ bwrap --dev-bind / / chromium-browser  # Spuštění aplikace přes bubblewrap bez omezení
$ bwrap --ro-bind / / gedit  # Spuštění aplikace s přístupem k souborovému systému pouze pro čtení
$ bwrap --dev-bind / / --unshare-net chromium-browser  # Standardní přístup k souborovému systému, ale bez přístupu k síti
$ bwrap --ro-bind / / --tmpfs /home/tojaj gedit  # Souborový systém pouze pro čtení, domovský adresář (dostupný pro zápis) je dočasný souborový systém

Existuje i projekt Bubblejailhttps://github.com/igo95862/bubblejail, který využívá Bubblewrap a poskytuje předdefinované profily podobně jako Firejail, kromě toho taky poskytuje grafické uživatelské rozhraní.

Další příklady použití Bubblewrap:

Více informací o Bubblewerap:

Comments are closed.