Locked History Actions

Skirtumas „EternalBlue“

Pakeitimai tarp versijų 20 ir 21
Versija 20 nuo 2019-11-24 16:09:43
Dydis: 9163
Redaktorius: edgar
Komentaras:
Versija 21 nuo 2019-11-24 17:18:35
Dydis: 9170
Redaktorius: edgar
Komentaras:
Pašalinimai yra pažymėti taip. Pridėjimai yra pažymėti taip.
Eilutė 26: Eilutė 26:
Trečioji saugumo spraga „Non-paged Pool Allocation Bug“ [[Server Message Block|SMB]] protokolo komandomis leidžia išskirti norimo dydžio bloką non-paged pool atmintyje. Naudojant šią spragą ir kitas [[heap grooming]] technikas galima apeiti [[ASLR]] atminties apsaugą ir užtikrinti sėkmingą [[Buffer overflow|perpildymo]] ataką. Klaida atsiranda išsiunčiant netaisyklingai suformuluotą [[Server Message Block|SMB]] sesijos praždios komandą {{{SMB_COM_SESSION_SETUP_ANDX}}} Trečioji saugumo spraga „Non-paged Pool Allocation Bug“ [[Server Message Block|SMB]] protokolo komandomis leidžia išskirti norimo dydžio bloką non-paged pool atmintyje. Naudojant šią spragą ir kitas atminties manipuliacijos technikas galima apeiti [[ASLR]] atminties apsaugą ir užtikrinti sėkmingą [[Buffer overflow|perpildymo]] ataką. Klaida atsiranda išsiunčiant netaisyklingai suformuluotą [[Server Message Block|SMB]] sesijos praždios komandą {{{SMB_COM_SESSION_SETUP_ANDX}}}

EternalBlue

EternalBlue yra saugumo spragas Windows SMB (Server Message Block) protokole išnaudojantis įrankis leidžiantis įvykdyti nuotolini kenksmingo kodo paleidimą kompiuteriuose be savininko žinios. Įrankį sukūrė JAV nacionalinio saugumo agentūra NSA, tačiau saugumo spragos buvo laikomos paslaptyje mažiausiai 5 metus, kol EternalBlue ir dar kelį NSA įrankiais nebuvo paviešinti 2017 metais grupuotės The Shadow Brokers. Grupuotė dar 2016 metų rugpjūti paskelbė turintis NSA sukurtų kibernetinio karo įrankių ir norinti juos parduoti, tačiau galiausiai 2017 m. balandi viskas buvo paviešinta nemokamai, tarp paviešintų dokumentų buvo daugiau negu 30 Windows saugumo spragų ir 7 įrankiai skirti spragos išnaudoti.

Naudotos saugumo spragos

EternalBlue nuotoliniai kodo paleidimui naudoja 3 Microsoft SMB protokolo spragas:

  1. spraga „Wrong type casting Bug“
  2. spraga „Wrong parsing function Bug“
  3. spraga „Non-paged Pool Allocation Bug“


Pirmoji saugumo spraga „Wrong parsing function Bug“ yra Windows SMBv1 tvarkyklėje (srv.sys), klaida atsiranda kai per SMB yra siunčiamas OS/2 operacinės sistemos formato EFA (extended file attributes) sąrašas. Kadangi OS/2 ir Windows EFA formatai skiriasi, OS/2 formatas yra konvertuojamas į Windows suprantamą formatą.

Siunčiant EFA sąrašą per SMB protokolą, paketas susideda iš SMB antraštės nurodančios paketo tipą ir FeaList(full extended attribute list) bloko, kuri sudaro SizeOfListInBytes kintamasis nurodantis argumentų sąrašo ilgį baitais ir atitinkamas skaičius EFA atributų. Atsiradus neatitikimų tarp SizeOfListInBytes kintamojo ir siunčiamų EFA atributų skaičiaus tvarkyklė juos perskaišiuoja ir išsaugo nauąs SizeOfListInBytes vertę. Dėl programos klaidos pakeičiami tik paskutiniai 2 SizeOfListInBytes kintamojo baitai, todėl tam tikromis salygomis vietoj kintamojo sumažinimo jis yra padidinamas, kas gali sukelti atminties perpildymą.


Antroji saugumo spraga „Wrong parsing function Bug“ yra Windows SMBv1 komunikacijos protokole ir leidžia realizuoti pirmąją saugumo spragą. EFA paketai gali būti siunčiami naudojant kelias skirtingas SMB komandas. Klaida atsiranda naudojant SMB_COM_TRANSACTION2 ir SMB_COM_NT_TRANSACT komandas.

  • SMB_COM_TRANSACTION2 maksimalus perduodamų duomenų ilgis yra apibrėžiamas WORD tipo kintamuoju, kai perduodami duomenis viršija maksimalų vieno paketo ilgį (apibrėžta sesijos pradžios metu), pertekliniai duomenys yra siunčiami SMB_COM_TRANSACTION2_SECONDARY komanda.

  • SMB_COM_NT_TRANSACT yra skirtas didesniam duomenų perdavimui, duomenų ilgis yra apibrėžtas DWORD kintamuoju, duomenims viršijant maksimalų vieno paketo ilgį, jie taip pat yra dalinami į antrinius paketus SMB_COM_NT_TRANSACT_SECONDARY komanda.

Klaida atsiranda dėl netaisyklingos paketų tipo interpretacijos, SMD_COM komandos tipas yra nustatomas pagal paskutinio gauto _SECONDARY paketo tipą. Taigi pradėjus komunikacija SMB_COM_NT_TRANSACT ir vėliau išsiunčiant SMB_COM_TRANSACTION2_SECONDARY galima priversti SMB tvarkyklę interpretuoti DWORD ilgio duomenis kaip WORD. Ši klaida leidžia realizuoti pirmąją saugumo spragą, kadangi 32 bitų DWORD ilgio paketas yra siunčiamas kaip 16 bitų WORD paketas.


Trečioji saugumo spraga „Non-paged Pool Allocation Bug“ SMB protokolo komandomis leidžia išskirti norimo dydžio bloką non-paged pool atmintyje. Naudojant šią spragą ir kitas atminties manipuliacijos technikas galima apeiti ASLR atminties apsaugą ir užtikrinti sėkmingą perpildymo ataką. Klaida atsiranda išsiunčiant netaisyklingai suformuluotą SMB sesijos praždios komandą SMB_COM_SESSION_SETUP_ANDX

Įsilaužimo primityvai

Toliau aprašyta įsilaužimo technika tinkama tik Windows operacinės sistemos versijoms iki Windows 8, kadangi iki šios versijos Windows HAL heap atmintis turėjo paleidimo teisę (execution permission) ir nenaudojo ASLR apsaugos. Norint realizuoti anksčiau minėtas SMBv1 saugumo spragas vėlesnėse Windows versijoje turi būti naudojama kitokia įsilaužimo technika.

Įsilaužimui naudojamas SMBv2 protokolas. Nors jis neturi žinomų saugumo spragų naudojant perpildymo ataką ir SMBv2 užklausas galima įrašyti norimus duomenis bent kurioje fizinės atminties vietoje ir priversti procesorių vykdyti komandas nuo pasirinktos atminties vietos. Pradėjus SMBv2 komunikaciją atmintyje yra išsaugomas SRVNET_BUFFER_HDR antraštės blokas, kurioje nurodomi sąsajos nustatymai, tarp jų yra pMdl1 rodyklė rodanti fizinės atminties vietą kurioje bus išsaugomi gauti duomenys ir pSrvNetWskStruct, rodyklė į iš anksto apibrėžtą SRVNET_RECV objektą kuris nurodo kur yra HandlerFunction funkcija, iškviečiama pasibaigus SMBv2 komunikacijai. Naudojant SMBv1 saugumo spragas užpuolikas gali perrašyti minėtas rodykles.

  • pMdl1 rodyklės perrašymas leidžia įrašyti kenksmingą ShellCode ir netikrą SRVNET_RECV objektą į HAL heap atmintį.

  • pSrvNetWskStruct perrašoma taip, kad rodytu į netikrą SRVNET_RECV objektą, kurio dėka pasibaigus komunikacijai yra vykdomas ne HandlerFunction kodas, o į HAL atmintį įrašytas kenksmingas kodas.

Įsilaužimo eiga

EternalBlue įsilaužimo eiga susideda iš 10 punktų. Sėkmingas įsilaužimas po vienos atakos nėra užtikrinamas šimtu procentu atvejų, tačiau ataka yra trumpa todėl ją galima kartoti kol įsilaužimas nebus sėkmingas arba aukos kompiuteris nebus priverstas persikrauti.

Etapas

Aprašymas

Pre-Overflow

Naudojant SMB_COM_NT_TRANSACT} pradedamas duomenų perdavimas, tačiau perdavimas ne pilnas, laukiama _SECONDARY paketo

Pre-Hole

Naudojant 3 SMB spraga užimama atmintis nenumatytiems procesams kurie gali reikalauti atminties įsilaužimo metu, turi būti šiek tiek mažesnė negu likusiam FEA sąrašui reikalinga atmintis

Grooming

Pradedama daug SMB sesijų norit užpildyti non-paged atminti ir padidinti tolesnių etapų sėkmės tikimybę

Hole

Naudojant 3 SMBv1 spraga užimama atmintis kuri bus naudojama FEA sąrašo įrašymui naudojant 1 ir 2 spragas

Pre-Hole atlaisvinimas

Atlaisvinama atminties vieta nenumatytiems procesams

SRVNET Grooming

Pradedamos mažiausi 5 naujos SMBv2 sesijos, kurios atmintyje išsaugo 5 trumpas SRVNET antraštes iš kurių vienai tūrėtų būti išskirta atmintis po Hole punkte užimtos atminties.

Hole

Atlaisvinama atmintis skirta FEA sąrašui

Overflow

Išsiunčiamas paskutinis SMB_COM_TRANSACTION2_SECONDARY. Kadangi Windows naudoja LIFO principą atminties skirstymui, paketas įrašomas į atlaisvinta Hole atmintį ir perpildo sekančius atminties segmentus. Sėkmingos atakos atveju yra perrašoma viena iš SRVNET antraščių ir pakeičiamos pMdl1 ir pSrvNetWskStruct rodyklės

SRVNET Grooming

Per kiekviena iš anksčiau atidarytų SMBv2 sąsajų išsiunčiamas netikras SRVNET_RECV objektas kartu su kenksmingu ShellCode, kuris dėka perpildymo yra įrašomas HAL heap atmintyje

Execution

Uždaromos visos SMB sąsajos, dėka perpildymo po uždarymo pradedamas vykdyti anksčiau į HAL heap įrašytas kodas

Literatūros sąrašas

https://www.virusbulletin.com/uploads/pdf/magazine/2018/201806-EternalBlue.pdf

https://en.wikipedia.org/wiki/Extended_file_attributes

https://research.checkpoint.com/2017/eternalblue-everything-know/

https://docs.microsoft.com/en-us/windows/win32/memory/memory-pools

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb/a00d0361-3544-4845-96ab-309b4bb7705d?redirectedfrom=MSDN

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/81e15dee-8fb6-4102-8644-7eaa7ded63f7?redirectedfrom=MSDN

https://en.wikipedia.org/wiki/EternalBlue

https://en.wikipedia.org/wiki/WannaCry_ransomware_attack


CategoryŽodis