Zranitelnost špinavé krávy

Zranitelnost Dirty COW (CVE-2016-5195, z angličtiny  dirty + copy-on-write  - copy -on-write ) je závažná softwarová zranitelnost v jádře Linuxu , která existuje od roku 2007 a byla opravena v říjnu 2016. Umožňuje místnímu uživateli zvýšit svá oprávnění kvůli sporu při implementaci mechanismu kopírování při zápisu (COW) pro stránky paměti označené příznakem Dirty bit (změněná paměť). [1] [2] [3] Od října 2016 bylo hlášeno aktivní zneužití zranitelnosti při napadení serverů [3] .

Technické detaily

Problém nastává, když existuje mnoho současných volání systémové funkce madvise(MADV_DONTNEED)a zápisu na paměťovou stránku, ke které uživatel nemá přístup ke změně [4] . Tato volání jsou prováděna z různých vláken současně.

Při pokusu o zápis na stránku COW pouze pro čtení jádro automaticky vytvoří její kopii a poté zapíše data do nové kopie. Původní paměťová stránka zůstane nedotčena. Dotčený kód linuxového jádra nezkontroloval, zda byla kopie dokončena a zda stále existuje, před zahájením zápisu na požadovanou adresu paměti. Vzhledem k tomu, že se jedná o dvě po sobě jdoucí instrukce, bylo považováno za nepravděpodobné, že by se mezi nimi mohlo něco „spojit“.

Pro použití exploitu jsou vytvořena dvě vlákna A a B. Systémové volání madvise(MADV_DONTNEED)ve vlákně A říká jádru, že program již nikdy nepoužije zadanou paměťovou stránku, takže jádro okamžitě smaže všechny kopie této stránky (ale nezakáže k ní přístup na předchozí adrese!). Zápis na stejnou stránku z vlákna B vede k nutnosti znovu vytvořit jeho kopii. Pokud jsou výše uvedené instrukce provedeny současně, je velmi nepravděpodobné, že by byla kopie stránky odstraněna ihned po jejím vytvoření, ale před operací zápisu. V tomto nepříznivém okamžiku jádro zapíše data na původní stránku paměti pouze pro čtení, nikoli na její kopii. Při vícenásobném opakování požadavků z různých vláken dochází k závodu a jistě dojde k nepravděpodobné události, v důsledku čehož exploit získá právo změnit původní stránku pouze pro čtení. Obvykle proces netrvá déle než několik sekund [5] .

Předpokladem pro zneužití zranitelnosti je přístup pro čtení k souboru nebo paměťovému umístění. To znamená, že místní uživatel nemůže přímo přepsat systémové soubory, které nejsou čitelné, jako je /etc/shadow , což by umožnilo změnit heslo superuživatele . Tato chyba zabezpečení však umožňuje zapsat libovolný kód do libovolného spustitelného souboru, včetně jakéhokoli souboru suid . Uživatel tak získá možnost „nahradit“ systémové soubory, které spouští jako root. Například je možné nahradit „neškodný“ soubor suid ping systémovým terminálem, který poběží jako root.

Přestože je chyba eskalace oprávnění implementována pro místní uživatele, vzdálení útočníci ji mohou použít ve spojení s dalšími exploity , které umožňují vzdálené spuštění neprivilegovaného kódu. Tato kombinace povede k úplnému hacknutí vzdáleného systému. [2] Využití zranitelnosti DirtyCOW samo o sobě nezanechává žádnou stopu v systémových protokolech. [3] [1]

Historie

Zranitelnost získala označení CVE CVE-2016-5195, na škále CVSS je předběžně odhadována na 6,9-7,8 bodů z 10 [6] . Chyba se v jádře vyskytuje od roku 2007 (verze 2.6.22) [1] a lze ji použít na velkém množství distribucí včetně Androidu [7] . Tato chyba zabezpečení se stala nejdéle existující kritickou chybou v jádře Linuxu [8] . Pouze v jednotlivých distribucích (RHEL5/6) je provoz jednoho ze standardních exploitů nemožný z důvodu deaktivace rozhraní „proc mem“ [9] . Linus Torvalds přiznal, že se již pokusil opravit tento závod v srpnu 2005, ale tento patch byl nekvalitní a byl téměř okamžitě zrušen kvůli problémům na architektuře S390 [10] .

Zneužití této chyby zabezpečení objevil bezpečnostní výzkumník Phil Oester při analýze hacku na jednom ze svých serverů. Zaznamenáním veškerého HTTP provozu po několik let se mu podařilo získat exploit a analyzovat jeho fungování. Exploit byl zkompilován pomocí kompilátoru GCC verze 4.8 (vydáno v roce 2013), což může naznačovat, že zranitelnost byla úspěšně využívána již několik let. Uzavřená diskuse a příprava opravy proběhla 13. října 2016 [11] [12] . 18. října byla představena oprava, která chybu opravila; Linus však neuvedl, že tato oprava je důležitá a řeší tuto chybu zabezpečení. Toto zatajování citlivých informací a problémy s odhalováním zranitelností pouze komplikují život uživatelům a distributorům, tato praxe byla kritizována v LWN [13] . Ve dnech 19. až 20. října zveřejnil RedHat informace o zranitelnosti; byl spuštěn také speciální web [11] , který o zranitelnosti hovoří a nabízí různé exploity, twitterový účet a internetový obchod s tričky a suvenýry s logem zranitelnosti.

Oprava této chyby zabezpečení vyžaduje aktualizaci jádra. Chyba zabezpečení byla opravena ve verzích jádra 4.8, 4.7, 4.4 a dalších [14] , opravou je přidání nového příznaku FOLL_COW (změněno 7 řádků kódu) [10] . Řada distribucí GNU/Linuxu, jako je Debian , Ubuntu, RedHat a další, již oznámila záplatované balíčky jádra [15] . Zároveň existuje řada zranitelných zařízení a systémů na čipu, u nichž je vydávání aktualizací ukončeno výrobcem a nemusí být dostupné třetím stranám z důvodu proprietárních doplňků a porušení GPL . Zranitelnost lze například použít k získání přístupu root na téměř všech zařízeních Android [16] [17] , s verzemi OS až po Android 6 [18] včetně a se staršími verzemi Androidu 7.

V prosinci 2017 byla představena varianta „Huge Dirty COW“ (CVE-2017-1000405), spojená s podobnou chybou při manipulaci s velkými stránkami (2 MB) [19] .

Poznámky

  1. 1 2 3 Zranitelnost 0-day Dirty COW, kterou již hackeři přijali, byla opravena v linuxovém jádře xakep.ru (21. října 2016). Archivováno z originálu 23. října 2016. Staženo 22. října 2016.
  2. 12 Dobrý , Dane . „Nejzávažnější“ chyba eskalace oprávnění Linuxu, jaká kdy byla, je aktivně využívána (aktualizováno)  (anglicky) , Ars Technica (20. října 2016). Archivováno z originálu 10. března 2017. Staženo 21. října 2016.
  3. ↑ 1 2 3 Vaughan-Nichols, Steven J. The Dirty Cow Chyba Linuxu: Hloupé jméno pro vážný problém . Získáno 21. října 2016. Archivováno z originálu 7. května 2021.
  4. Kernel Local Privilege Eskalace – CVE-2016-5195 Archivováno 26. října 2016 na Wayback Machine /Redhat
  5. Dirty COW vysvětlil: Získejte moooo-ve a opravte kořenovou díru Linuxu , The Register (21. října 2016). Archivováno z originálu 22. října 2016. Staženo 22. října 2016.
  6. Kernel Local Privilege Eskalace – CVE-2016-5195 – Zákaznický portál Red Hat . Získáno 21. října 2016. Archivováno z originálu dne 26. října 2016.
  7. Alex Hern . Zranitelnost Linuxu „Dirty Cow“ nalezena po devíti letech  , The Guardian (21. října 2016) . Archivováno z originálu 22. října 2016. Staženo 23. října 2016.
  8. Životnost bezpečnostní chyby.  CVE -2016-5195 . Kees Cook (20.10.2016). Získáno 23. října 2016. Archivováno z originálu 23. října 2016.
  9. ↑ Chyba 1384344 – jádro CVE- 2016-5195 : mm: eskalace oprávnění prostřednictvím porušení MAP_PRIVATE COW 6
  10. 1 2 Linus Torvalds. mm: odeberte hry gup_flags FOLL_WRITE z __get_user_pages(  ) . 19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619 . Kernel.org GIT (18. října 2016). Získáno 22. října 2016. Archivováno z originálu dne 20. října 2016.
  11. 12 Graeme Burton . Uživatelé Linuxu vyzvali k ochraně před bezpečnostní chybou „Dirty COW“. Všichni uživatelé Linuxu by to měli brát vážně, říká bezpečnostní expert  (anglicky) , V3 (20. října 2016). Archivováno z originálu 19. ledna 2018. Staženo 23. října 2016.
  12. oss-security – CVE-2016-5195 Chyba zabezpečení týkající se eskalace oprávnění jádra Linuxu „Dirty COW“ . Získáno 23. října 2016. Archivováno z originálu 23. října 2016.
  13. Dirty COW and clean commit messages Archivováno 4. listopadu 2016 na Wayback Machine / LWN, Jonathan Corbet, 21. října  2016
  14. Nejzávažnější chyba zabezpečení týkající se eskalace oprávnění byla opravena v linuxovém jádře securitylab.ru (21. října 2016). Archivováno z originálu 22. října 2016. Staženo 22. října 2016.
  15. CVE-2016-5195 . Získáno 21. října 2016. Archivováno z originálu 21. října 2016.
  16. Telefony s Androidem zakořeněné „nejzávažnější“ chybou eskalace Linuxu vůbec  , Ars Technica (  24. října 2016). Archivováno z originálu 29. ledna 2017. Staženo 1. října 2017.
  17. Každé zařízení Android potenciálně zranitelné vůči „nejzávažnějšímu“ eskalačnímu útoku Linuxu, jaký kdy byl / Boing Boing . Získáno 25. října 2016. Archivováno z originálu 26. října 2016.
  18. Dirty COW ovlivňuje nejen Linux, ale všechny verze Androidu . Získáno 25. října 2016. Archivováno z originálu 26. října 2016.
  19. Tom Spring. Chyba nalezena v náplasti špinavé krávy . výhrůžkový post (1. 12. 2017). Datum přístupu: 18. prosince 2017. Archivováno z originálu 7. února 2018. ( cs Archivováno 8. prosince 2017 na Wayback Machine )

Odkazy