Čas kontroly na dobu použití - Time-of-check to time-of-use
v vývoj softwaru, čas kontroly na čas použití (TOCTOU, TOCTTOU nebo TOC / TOU) je třída softwarové chyby způsobené a stav závodu zahrnující kontrola stavu části systému (například pověření zabezpečení) a použití výsledků této kontroly.
TOCTOU závodní podmínky jsou běžné v Unix mezi operacemi na souborový systém,[1] ale může nastat v jiných kontextech, včetně místních zásuvky a nesprávné použití databázové transakce. Na počátku 90. let měla poštovní utilita BSD 4.3 UNIX využitelné sporová podmínka pro dočasné soubory, protože používala soubor mktemp ()
funkce.[2] Rané verze OpenSSH měl zneužitelný rasový stav pro Unixové doménové zásuvky.[3] Zůstávají problémem v moderních systémech; od roku 2019 je podmínka závodu TOCTOU v Přístavní dělník umožňuje root přístup k souborovému systému hostitelské platformy.[4]
Příklady
v Unix, následující C kód, pokud je použit v setuid
program, má chybu TOCTOU:
-li (přístup("soubor", W_OK) != 0) { výstup(1);}fd = otevřeno("soubor", O_WRONLY);psát si(fd, nárazník, velikost(nárazník));
Tady, přístup je určen ke kontrole, zda skutečný uživatel, který provedl setuid
programu by normálně bylo umožněno zapsat soubor (tj. přístup
kontroluje skutečné uživatelské ID spíše než efektivní ID uživatele ).
Tato rasa je zranitelná vůči útoku:
Oběť | Útočník |
-li (přístup("soubor", W_OK) != 0) { výstup(1);}fd = otevřeno("soubor", O_WRONLY);// Aktuální zápis přes / etc / passwdpsát si(fd, nárazník, velikost(nárazník)); | // //// Po kontrole přístupusymbolický odkaz(„/ etc / passwd“, "soubor");// Před otevřením ukazuje „soubor“ na databázi hesel//// |
V tomto příkladu může útočník zneužít rasové podmínky mezi přístup
a otevřeno
oklamat setuid
oběť přepsat záznam v databázi systémových hesel. Lze použít pro závody TOCTOU eskalace privilegií, abyste získali přístup pro správu k počítači.
Ačkoli tato posloupnost událostí vyžaduje přesné načasování, je možné, aby útočník zařídil takové podmínky bez větších obtíží.
Důsledkem je, že aplikace nemohou předpokládat, že stav spravovaný operačním systémem (v tomto případě jmenný prostor systému souborů) se mezi systémovými voláními nezmění.
Spolehlivé načasování TOCTOU
Využití závodních podmínek TOCTOU vyžaduje přesné načasování, aby se zajistilo, že se operace útočníka prokládají správně s oběťmi. Ve výše uvedeném příkladu musí útočník provést symbolický odkaz
systémové volání přesně mezi přístup
a otevřeno
. U nejobecnějšího útoku musí být útočník naplánován na provedení po každé operaci oběti, která se také označuje jako „jednostupňová“ oběť.
V případě poštovního nástroje BSD 4.3 a mktemp (),[5] útočník může jednoduše pokračovat v spouštění poštovního nástroje v jednom procesu a neustále hádat o dočasných názvech souborů a v dalším procesu vytvářet symbolické odkazy. Útok může obvykle uspět za méně než jednu minutu.
Techniky jednostupňového programu oběti zahrnují bludiště souborového systému[6] a útoky na algoritmickou složitost.[7] V obou případech útočník manipuluje se stavem OS, aby řídil plánování oběti.
Bludiště souborového systému přinutí oběť přečíst položku adresáře, která není v mezipaměti OS, a operační systém uvede oběť do režimu spánku, zatímco čte adresář z disku. Algoritmické útoky na složitost přinutí oběť strávit celé plánování kvantem uvnitř jediného systémového volání procházením hašovací tabulky jádra s názvy souborů v mezipaměti. Útočník vytvoří velmi velké množství souborů se jmény, jejichž hash má stejnou hodnotu jako soubor, který oběť vyhledá.
Prevence TOCTOU
Navzdory koncepční jednoduchosti je obtížné vyhnout se a vyloučit závodní podmínky TOCTOU. Jednou obecnou technikou je použití zpracování výjimek namísto kontroly, podle filozofie EAFP - „Je snazší požádat o odpuštění než o povolení“, spíše než LBYL - „podívat se před skokem“ - v tomto případě neexistuje žádná kontrola a při použití se zjistí selhání předpokladů, čas, výjimečně.[8]
V kontextu rasových podmínek systému souborů TOCTOU je zásadní výzvou zajistit, aby systém souborů nemohl být změněn mezi dvěma systémovými voláními. V roce 2004 byl zveřejněn výsledek nemožnosti, který ukazuje, že neexistuje přenosná, deterministická technika, jak se vyhnout závodním podmínkám TOCTOU.[9]
Od této nemožnosti výsledek, knihovny pro sledování deskriptory souborů a zajištění správnosti navrhli vědci.[10]
Alternativním řešením navrhovaným ve výzkumné komunitě je přijetí systémů UNIX transakce v systému souborů nebo jádru OS. Transakce poskytují a řízení souběžnosti abstrakce pro OS a lze ji použít k prevenci ras TOCTOU. I když zatím žádné produkční jádro systému UNIX nepřijalo transakce, pro Linux byly vyvinuty výzkumné prototypy proof-of-concept, včetně souborového systému Valor[11] a jádro TxOS.[12] Microsoft Windows přidal transakce do svého NTFS souborový systém,[13] Microsoft však od jejich používání odrazuje a naznačil, že mohou být v budoucí verzi Windows odstraněny.[14]
Zamykání souborů je běžnou technikou prevence rasových podmínek pro jeden soubor, ale nepřesahuje obor názvů systému souborů a další metadata, ani uzamčení nefunguje dobře se síťovými souborovými systémy a nemůže zabránit rasovým podmínkám TOCTOU.
U setuidových binárních souborů je možným řešením použití souboru seteuid ()
systémové volání pro změnu efektivního uživatele a poté provést otevřeno()
. Rozdíly v setuid ()
mezi operačními systémy může být problematická.[15]
Viz také
Reference
- ^ Wei, Jinpeng; Pu, Calton. „Zranitelnosti TOCTTOU v souborových systémech typu UNIX: Anatomická studie“. www.usenix.org. Citováno 2019-01-14.
- ^ Shangde Zhou (周尚德) (01.10.1991). „Bezpečnostní mezera v Unixu“. Archivovány od originál dne 16. 1. 2013.
- ^ Acheson, Steve (04.11.1999). „Secure Shell (SSH), často kladené otázky“. Archivovány od originál dne 2017-02-13.
- ^ „Chyba Dockeru umožňuje kořenový přístup k hostitelskému systému souborů“. Rozluštit. Citováno 2019-05-29.
- ^ "mktemp (3) - Linux page".
- ^ Borisov, Nikita; Johnson, Rob; Sastry, Naveen; Wagner, David (2005). "Oprava závodů pro zábavu a zisk: jak zneužít čas". Sborník příspěvků ze 14. konference o bezpečnostním symposiu USENIX, Baltimore (MD), 31. července - 5. srpna 2005. 14: 303–314. CiteSeerX 10.1.1.117.7757.
- ^ Xiang Cai; Yuwei Gui; Johnson, Rob (06.03.2009). „Využívání závodů unixového systému souborů prostřednictvím útoků na algoritmickou složitost“ (PDF). Sborník řízení IEEE Symposium on Security and Privacy, Berkeley (CA), 17. – 20. Května 2009.
- ^ Martelli, Alex (2006). „Kapitola 6: Výjimky“. Python v kostce (2. vyd.). O'Reilly Media. p. 134. ISBN 978-0-596-10046-9.
- ^ Dean, Drew; Hu, Alan J. (2004). Msgstr "Opravy závodů pro zábavu a zisk: Jak používat přístup (2)". Sborník ze 13. bezpečnostního symposia USENIX, San Diego (CA), 9. – 13. Srpna 2004: 195–206. CiteSeerX 10.1.1.83.8647.
- ^ Tsafrir, Dan; Hertz, Tomer; Wagner, David; Da Silva, Dilma (Červen 2008). „Přenosné prevence útoků na souborové soubory s rozlišením cesty v uživatelském režimu“. Technická zpráva RC24572, IBM T. J. Watson Research Center, Yorktown Heights (NY).
- ^ Spillane, Richard P .; Gaikwad, Sachin; Chinni, Manjunath; Zadok, Erez (2009). „Povolení přístupu k transakčním souborům prostřednictvím odlehčených rozšíření jádra“ (PDF). Sedmá konference USENIX o souborových a úložných technologiích (FAST 2009), San Francisco (CA), 24. – 27. Února 2009.
- ^ Porter, Donald E .; Hofmann, Owen S .; Rossbach, Christopher J .; Benn, Alexander; Witchel, Emmett (2009). „Transakce operačního systému“ (PDF). Sborník ze dne 22 ACM Symposium on Operating Systems Principles (SOSP '09), Big Sky (MT), 11. – 14. Října 2009.
- ^ Russinovich, Mark; Solomon, David A. (2009). Interní prvky systému Windows. Microsoft Press. ISBN 978-0735648739.
- ^ „Alternativy k použití transakčního NTFS“. Microsoft Developer Network. Citováno 10. prosince 2015.
- ^ Hao Chen; Wagner, David; Dean, Drew (2002-05-12). „Setuid Demystified“ (PDF).
Další čtení
- Bishop, Matt; Dilger, Michael (1996). „Kontrola podmínek závodu v přístupech k souborům“ (PDF). Výpočetní systémy. str. 131–152.
- Tsafrir, Dan; Hertz, Tomer; Wagner, David; Da Silva, Dilma (2008). „Přenosné řešení závodů TOCTTOU se zesílením tvrdosti“ (PDF). Sborník ze 6. konference USENIX o souborových a úložných technologiích (FAST '08), San Jose (CA), 26. – 29. Února 2008. 189–206.