Juunis 2019 tuvastasid ESETi uurijad nullpäevhaavatavuse, mida kasutati väga suunatud rünnakute teostamiseks Ida-Euroopas.
Ära kasutatakse kohaliku privileegi laiendamise haavatavust Microsoft Windowsi platvormil, eriti NULL osuti viite eemaldamist win32k.sys
komponendilt. Vea avastamisel ja analüüsimisel anti sellest teada Microsoft Security Response Centerile, kes haavatavuse kiiresti ära parandas ja vastava patch’i avaldas.
Haavatavus puudutab järgnevaid Microsoft Windows versioone:
- Windows 7 for 32-bit Systems Service Pack 1
- Windows 7 for x64-based Systems Service Pack 1
- Windows Server 2008 for 32-bit Systems Service Pack 2
- Windows Server 2008 for Itanium-Based Systems Service Pack 2
- Windows Server 2008 for x64-based Systems Service Pack 2
- Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1
- Windows Server 2008 R2 for x64-based Systems Service Pack 1
See blogipostitus keskendub haavatavuse tehnilistele detailidele ja nende ärakasutamisele. Homme avaldame teise postituse, kus käsitleme süvitsi leitud pahavara näidist ja selle laiemat mõju.
Haavatavus
Nii nagu mitmete teiste viimastel aastatel tuvastatud Microsoft Windows win32k.sys
haavatavuste puhul, kasutatakse ära hüpikmenüü objekte. Näiteks Sedniti grupi kohaliku privileegi laiendamise haavatavus, mida analüüsisime 2017. aastal kasutas menüüobjekte ja tehnikaid, mis on väga sarnased praegusele haavatavusele.
Antud juhul luuakse kaks akent, üks nii haavatavuse kasutamise esimese kui teise etapi jaoks. Esimeses aknas luuakse hüpikmenüü objektid ja menüü elemendid kinnitatakse sellele CreatePopupMenu
ja AppendMenu
funktsioone kasutades. Lisaks luuakse WH_CALLWNDPROC
ja EVENT_SYSTEM_MENUPOPUPSTART
haagid.
Seejärel kuvab haavatavus ekraanile menüü TrackPopupMenu
funktsiooni kasutades. Sel hetkel käivitatakse kood, mis on seotud EVENT_SYSTEM_MENUPOPUPSTART
funktsiooniga. Koodiga üritatakse avada menüü esimest objekti, edastades menüüle sõnumite MN_SELECTITEM ja MN_SELECTFIRSTVALIDITEM
ning MN_OPENHIERARCHY
jada.
Järgmiseks sammuks on haavatavuse ärakasutamisel väga oluline toiming. Haavatavuse kasutamiseks tuleb tuvastada hetk, mil luuakse algne menüü, kuid alammenüü on alles loomisel. Selleks on haavatavusel kood, mis tegeleb WM_NCCREATE
sõnumiga WH_CALLWNDPROC
jadas. See kood tuvastab süsteemi vastava seisundi ja edastab esimesele menüüle MN_CANCELMENUS
(0x1E6) sõnumi, mis menüü tühistab. Kuid alammenüü on ikka loomisel.
Nüüd, kui kontrollime seda alammenüü objekti kernel-režiimis, näeksime seda, et tagPOPUPMENU‑>ppopupmenuRoot
võrdub 0-ga. Selline seisund võimaldab ründajal kasutada elementi selles kernelstruktuuris NULL osuti viite-eemaldajana. Nii jaotatakse aadressile 0x0 uus leht ja aadressi käsitletakse kerneli poolt tagPOPUPMENU
objektina (vt Joonis 1).
Joonis 1. tagPOPUPMENU
kernelstruktuur.
Sel hetkel kasutavad ründajad teist akent. Haavatavuse kasutamisel on peamine eesmärk bServerSideWindowProc
bitt
muuta teise akna tagWND
struktuuris ära. Nii tingitakse WndProc
protseduuri teostamine kernelrežiimis.
Selle teostamiseks lekitavad ründajad tagWND
struktuuri kernelmälu aadressi teise aknasse, käivitades user32.dll
kogus eksportimata HMValidateHandle
funktsiooni. Haavatavus loob NULL lehel võltsi tagPOPUPMENU
objekti ja saadab MN_BUTTONDOWN
sõnumi alammenüüsse.
Seejärel käivitab kernel lõpuks win32k!xxxMNOpenHierarchy
funktsiooni.
Joonis 2. Funktsiooni win32k!xxxMNOpenHierarchy
lahtivõetud kood.
See funktsioon edastab NULL lehel loodud objekti win32k!HMAssignmentLock
juurde. bServerSideWindowProcbitt
paigutatakse win32k!HMDestroyUnlockedObject
funktsiooni, mis asub mõne kutsungi kaugusel funktsioonis win32k!HMAssignmentLock
.
Joonis 3. Funktsiooni win32k!HMDestroyUnlockedObject
lahtivõetud kood.
Kõik on tehtud! Nüüd võib haavatavuse ärakasutamisel edastada teise aknasse spetsiifilise sõnumi WndProc
teostamiseks kernelrežiimis.
Viimase sammuna asendatakse praeguse protsessi tähis süsteemi tähisega.
Järeldus
Haavatavust on võimalik ära kasutada ainult vanemate Windowsi versioonide puhul, sest Windows 8 kasutajaprotsessidel ei ole lubatud NULL lehte kaardistada. Microsoft on selle lahenduse kasutusele võtnud ka Windows 7 for x64-based süsteemide juures.
Kasutajad, kelle arvutites on veel kasutusel Windows 7 32-bit Service Pack 1 peaksid kaaluma uuematele operatsioonisüsteemidele üleminekut, sest Windows 7 Service Pack 1 jaoks lõpetatakse pikendatud kasutajatugi 14. jaanuaril 2020. See tähendab, et Windows 7 kasutajad ei saa enam kriitilisi turbeuuendusi. See tähendab, et haavatavused nagu see, mida käesolevas artiklis käsitlesime, jäävad alatiseks parandamata.
Kompromissiindikaatorid (IoC-d)
SHA-1 räsi | ESET tuvastusnimi |
---|---|
CBC93A9DD769DEE98FFE1F43A4F5CADAF568E321 | Win32/Exploit.CVE-2019-1132.A |
Allikas: Welivesecurity
Jaga artiklit