Portál AbcLinuxu, 26. dubna 2024 01:26

Jaderné noviny – 31. 5. 2018: Připojování souborových systémů bez práv v roce 2018

18. 6. 2018 | David Kolibáč
Články - Jaderné noviny – 31. 5. 2018: Připojování souborových systémů bez práv v roce 2018  

Stav vydání jádra. Připojování souborových systémů bez práv v roce 2018.

Stav vydání jádra

Kernel release status. Jonathan Corbet. 30. května 2018

Současné vývojové jádro je 4.17-rc7, vydané 27. května. Zdá se, že půjde o poslední prepatch před finálním vydáním: „Tento týden nebyl tak klidný jako ty předchozí, ale i tak se domnívám, že jde o poslední rc.“

Stabilní aktualizace: 4.16.12, 4.14.44, 4.9.103, 4.4.1333.18.110 byly vydány 25. května. Poté 30. května následovaly (poměrně velké) aktualizace 4.16.13, 4.14.45, 4.9.104, 4.4.1343.18.111 – o několik hodin později pak 4.14.46 opravující regresi perf a o dalších několik hodin později vyšly aktualizace 4.14.47, 4.9.105, 4.4.1353.18.112, které přinášely jediný nový commit, v němž se rušil patch týkající se sítí, „který se neměl dostat mezi backporty.“

Připojování souborových systémů bez práv v roce 2018

Unprivileged filesystem mounts, 2018 edition. Jonathan Corbet. 30. května 2018

Příchod uživatelských jmenných prostorů a kontejnerových technologií umožnil (snad) bezpečně přiblížit možnosti neprivilegovaných uživatelů možnostem superuživatele. Jeden případ, kde to stále drhne, je připojování souborových systémů, které se sebou dlouho neslo bezpečnostní rizika. Pracuje se na tom již léta a do jádra 4.18 má namířeno skupina patchů, která by měla stav zase o kousek posunout. Jak se ale vyjasnilo v jedné nesouvisející diskuzi, k opravdu bezpečnému připojování souborových systémů bez práv je ještě dlouhá cesta – aspoň pokud toho chceme dosáhnout v jádře.

Pokusy zařídit, aby běžní uživatelé mohli bezpečně připojovat souborové systémy, nejsou nic nového. O jedné skupině patchů jsme informovali už v roce 2008. K jejímu začlenění nikdy nedošlo, ale problematika umožnění připojování bez práv se vrátila v roce 2015, kdy to Eric Biederman (spolu s dalšími, zvláště Sethem Forsheem) myslel vážně s tím, aby uživatelským jmenným prostorům umožnil připojovat souborové systémy. Prvotní práce byly začleněny do jádra 4.8 v roce 2016, ale vědělo se, že ještě nešlo o úplné řešení, takže většinu souborových systémů stále mohou připojit pouze uživatelé s právy ve výchozím jmenném prostoru.

Biederman nedávno zveřejnil novou skupinu patchů, která podporu připojování bez práv „shrnuje“. Stará se o celou řadu drobností jako např. umožnění vytváření uzlů zařízení na souborových systémech připojených v uživatelských jmenných prostorech – tato operace je považována za bezpečnou díky tomu, že jádro uzly zařízení na takových souborových systémech nerozpozná. Biederman se zjevně domnívá, že tato funkce se blíží ke stavu, kdy ji bude možné nasadit v běžném provozu.

V plánu ale není povolit připojení libovolného souborového systému bez práv. Takový režim bude povolen jen a pouze u souborových systémů explicitně označených jako bezpečných. Zamýšlený způsob použití evidentně spočívá v povolení připojování souborových systémů pomocí mechanismu FUSE, tudíž implementace samotná poběží v uživatelském prostoru. Tím by jádro mělo být odstíněno od kódu souborového systému, což se ukazuje, že je dobře.

V jiné diskuzi nahlásil fuzzovací projekt „syzbot“ problém se souborovým systémem XFS. Syzbot totiž prováděl fuzzing s daty uloženými na disku, načež z něj vypadla řada chyb. Tentokrát ale vývojář XFS Dave Chinner vysvětlil, že problém se opravovat nebude, je totiž dobře známý a projevuje se pouze u staršího („verze 4“) formátu uložení na disku – opravit ho lze pouze za cenu rozbití neznámého, leč velkého počtu stávajících, jinak funkčních souborových systémů. Navíc vývoj XFS již cílí na pátou verzi formátu, která už podporuje kontrolní součty a další mechanismy, které mohou zachytit většinu problémů s poškozením metadat.

Proběhla obsáhlá diskuze o tom, zda si vývojáři XFS zvolili ten správný přístup k věci. Ovšem posléze odbočila od původního tématu, když si Eric Sandeen postěžoval na chyby, jež stačí vyvolat „pouhým připojením zvláštně rozbitého souborového systému, který by se v praxi do takového stavu nikdy (před tepelnou smrtí vesmíru) nedostal.“ Ted Ts'o upozornil, že takové souborové systémy (a související pády) se v praxi skutečně objevit mohou, když je útočník jakýsi takový vytvoří a nějak přesvědčí systém, aby ho připojil. Jako příklady systémů, kde se takový problém může objevit v důsledku automatického připojení souborových systémů na odpojitelných médiích (např. v USB zařízeních) uvedl Fedoru a Chrome OS.

Samozřejmě je tu jistý typ uživatele, který ocení pohodlí automatického připojování souborových systémů. Je tu také případ užití v oblasti kontejnerových technologií, kde jsou dobré důvody, proč uživatelům bez práv povolit připojování souborových systémů. Takže by si jeden mohl myslet, že by bylo důležité všechny chyby spojené s poškozením formátu uložení na disku opravit, aby takové případy byly bezpečné. Pokud ale na něco takového čekáte, Chinner pro vás má špatné zprávy:

Je toho málo, co můžeme udělat, abychom lidem zabránili ve zneužívání nedostatků formátu uložení souborového systému na disk. Žádný souborový systém nedisponuje možností robustního úplného ověření veškerých metadat, ani to není něco, co bychom vůbec mohli kontrolovat za běhu, protože taková kontrola by byla příliš složitá a měla moc velkou režii.

Mnoho druhů poškození jde zachytit kontrolními součty apod. Jiné druhy jsou ale hůře postřehnutelné: Chinner jako příklad zmínil spojování bloků důležitých metadat do obyčejného souboru. Ochránit systém před takovými útoky by bylo přinejmenším složité a nejspíš by se tím systém drasticky zpomalil. Přesto Chinner neočekává, že by distribuce jako Fedora přestaly souborové systémy automaticky připojovat: „Učiní tak, až jim poskytneme bezpečné, snadno použitelné řešení problému. Ten problém je náš a měli bychom ho řešit, ne házet na někoho jiného.“ Otázka, jak vyřešit problém právě popsaný jako neřešitelný, zůstává otevřená.

Chinner v tom má jasno, aspoň obecně: „Pořád dokola na to tvrdě narážíme: neparsujte nedůvěryhodný vstup v privilegovaném kontextu.“ Myslí tím to, že pokud obsah určitého obrazu souborového systému není důvěryhodný (například pochází od uživatele bez práv), neměl by se o něj starat jaderný prostor. Jinými slovy by se pro operace připojování bez práv měl raději starat mechanismus FUSE.

Ts'o namítal, že FUSE je „dost hrozná bezpečnostní bariéra“ a postrádá podporu mnoha významných souborových systémů. Ale FUSE je to, co zrovna máme, a zacházení s nedůvěryhodnými souborovými systémy opravdu přesouvá mimo jádro. Modul fusefs-lkl (který postrádá vlastní webové stránky, ale je postavený nad projektem Linux kernel library) přes FUSE zpřístupňuje všechny souborové systémy podporované jádrem.

Když se ho Ts'o zeptal na zabezpečení připojování souborových systémů bez práv, Biederman jasně prohlásil, že ani on neočekává, že by v dohledné době bylo bezpečné v tomto režimu používat většinu souborových systémů podporovaných jádrem:

Právě teď je mým cílem v praxi být schopen říct: „Jestli chcete jistotu lepšího zabezpečení, provozujte svůj souborový systém v uživatelském prostoru přes fuse.“ Myslím, že to stačí, aby byla odpojitelná média přiměřeně chráněná před útoky získávajícími práva navíc.

Zdá se, že cesta k tomu, aby uživatelé mohli konečně připojovat souborové systémy bez práv, aniž by ohrožovali bezpečnost systému jako takového, je poměrně jasná. Samozřejmě zbývá ještě kus práce, aby všechny do sebe zapadly všechny dílky. Jakmile se to podaří, mohli bychom mít konečně řešení problému, na němž vývojáři pracují už přes deset let.

Odkazy a zdroje

LWN.net
Unprivileged filesystem mounts, 2018 edition

Další články z této rubriky

Jaderné noviny – přehled za březen 2024
Jaderné noviny – přehled za únor 2024
Jaderné noviny – přehled za leden 2024
Jaderné noviny – přehled za prosinec 2023
Jaderné noviny – přehled za listopad 2023

Diskuse k tomuto článku

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.