Riigi Infosüsteemi Ameti intsidentide käsitlemise osakond (CERT-EE) kirjutab haavatavusest Linuxi tuumas.
Räpane lehm edaspidi Dirty COW on privileegide eskaleerimise haavatavus Linuxi Kernelis.
Mis on CVE-2016-5195?
CVE-2016-5195 on ametlik viide haavatavusele. CVE (Common Vulnerabilities and Exposures) on infoturbe haavatavuste nimede standard, mida haldab MITRE.
Miks just Dirty COW?
Linuxi Kerneli mälu alamsüsteemist leiti trügimishaavatavus (sündmustevahelist siirdelist ajalõiku nõrkusena ärakasutav rünne), mis käsitles copy-on-write (COW) privaatlugemiseks ainult (read-only) mälu kaardistust (memory mapping). See võimaldab lokaalsel kasutajal mööduda standardsetest failisüsteemi pääsuõigustest ning muuta faile, millele muidu õigused puuduvad.
Mida saan teha?
Tutvu allolevate linkidega ning järgi oma operatsioonisüsteemile vastavaid tegutsemisjuhiseid!
- https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=19be0eaffa3ac7d8eb6784ad9bdbc7d67ed8e619
- https://www.ubuntu.com/usn/usn-3107-1/
- https://bugzilla.redhat.com/show_bug.cgi?id=1384344#c13
- https://www.suse.com/security/cve/CVE-2016-5195.html
Rohkem infot haavatavate süsteemide kohta leiab allolevatelt linkidelt:
- https://access.redhat.com/security/cve/cve-2016-5195
- https://security-tracker.debian.org/tracker/CVE-2016-5195
- http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-5195.html
Mis teeb Dirty COW haavatavuse nii eriliseks?
Dirty COW haavatavus on olnud süsteemides 9 aastat ning seda on paigatud ühe korra. Seda on tunnistanud ka Linuxi Kerneli looja ise, põhjendades, et 11 aastat tagasi jäi paikamine poolikuks IBM süsteemide ühilduvusprobleemide tõttu.
Seega võib spekuleerida, et kasutajatel on olnud võimalus kirjutada privileege eskaleerides ohvri masinasse faile/tagauksi. Samuti on Dirty COW just nüüd erilise tähelepanu all, sest varem paigati see “enam-vähem” põhimõttel, kuid praeguseks on süsteemid arenenenud tohutu kiirusega tehes trügimisründe (sündmustevahelist siirdelist ajalõiku nõrkusena ärakasutamise) võimalikuks.
Kuidas toimib Dirty COW haavatavus?
Idee tõestamisekood (PoC kood) kasutab haavatavuse ära kasutamiseks faili read-only (ainult lugemiseks) olekus.
Pärast faili avamist read-only olekus kutsutakse esile mmap funktsioon, mis kaardistab faili mälu kasutades järgnevaid lippe (flags): f (varem avatud fail), PROT_READ (ainult lugemiseks), MAP_PRIVATE (lubab copy-on-write kaardistamist).
Mmap lubab nüüd lugeda mälus olevat faili või kirjutada mälus olevale koopiale.
Järgnevalt on vajalik luua kaks lõimu paraleelselt kasutamaks ära trügimishaavatavust. Trügimine selles kontekstis tähendab kahe lõimu sündmustevahelise ajalõigu nõrkusena ära kasutamist.
Selleks on meil loodud lõim nr1 madvise süsteemikutse aitamaks Kernelil leida sobiv ettelugemise ja puhvri loomise võimalus. See on kriitiline osa haavatavusest. Madvise lõimule antakse kaasa lipp, mis paigutab Kernelile antava teabe: kuidas kaardistada mälu nii, et see ei kasutaks ära 100 biti mäluaadressil.
Need 100 bitti, mille kasutamist ei oodata, võib üle laadida uue sisuga, juhul kui peaks toimuma bittide samasse mäluvähemikku sattumine.
Lühidalt on võimalik eirata mälukaardistamise häid tavasid ning kasutada trügimist, tekitamaks olukorda, kus kasutaja sisend kirjutatakse originaalfaili, mitte enam mälus olevasse koopiasse.
Kas on oodata Dirty COW paika?
Jah, see on juba valmis. Paik sisaldab endas ainult kolme rida koodi.