SWAPGS - nova vundebleco en la CPU-konjekta ekzekutmekanismo

Esploristoj de Bitdefender identigita nova vundebleco (CVE-2019-1125) en la konjekta instrukcia ekzekutmekanismo de modernaj CPUoj, kiu estas nomita SWAPGS, kiu egalrilatas al la nomo de la procesorinstrukcio kaŭzanta la problemon. Vundebleco permesas al senprivilegia atakanto povas determini la enhavon de kernaj memorareoj aŭ kurante virtualajn maŝinojn. Problemo konfirmis en Intel-procesoroj (x86_64) kaj parte influas AMD-procesoroj por kiuj la ĉefa atakvektoro ne aperas. Antaŭe efektivigitaj metodoj por kontraŭstari la vundeblecojn Spectre kaj Meltdown ne protektas kontraŭ la SWAPGS-atako kiam oni uzas Intel-procesorojn, sed korektoj jam estis proponitaj por Linukso, ChromeOS, Android kaj Vindozo.

La vundebleco apartenas al la klaso Spectre v1 kaj baziĝas sur la ideo restarigi datumojn de la procesora kaŝmemoro restanta post spekula ekzekuto de instrukcioj. Por plibonigi rendimenton, branĉaj prognozunuoj de modernaj CPUoj uzas preventan ekzekuton de iuj instrukcioj, kiuj plej verŝajne estos ekzekutitaj, sed sen atendi la kalkulon de ĉiuj faktoroj, kiuj determinas ilian ekzekuton (ekzemple, kiam branĉokondiĉoj aŭ alirparametroj ne havas. ankoraŭ kalkulita). Se la antaŭdiro ne estas konfirmita, la procesoro forĵetas la rezulton de la konjekta ekzekuto, sed la datumoj prilaboritaj dum ĝi restas en la procesora kaŝmemoro kaj povas esti restarigitaj uzante metodojn por determini la enhavon de la kaŝmemoro tra flankaj kanaloj, analizante la ŝanĝon en aliro. tempo al kaŝmemoritaj kaj nekaŝigitaj datumoj.

La propreco de la nova atako estas la uzo de liko, kiu okazas dum la spekula ekzekuto de la SWAPGS-instrukcio, kiu estas uzata en operaciumoj por anstataŭigi la valoron de la GS-registro kiam kontrolo pasas de uzantspaco al la OS-kerno (la GS). valoro uzata en uzantspaco estas anstataŭigita per la valoro uzata dum operacioj en la kerno ). En la Linukso-kerno, GS stokas per_cpu-montrilon uzatan por aliri kernajn datumojn, kaj uzantspaco stokas montrilojn al TLS (Thread Local Storage).

Por eviti voki la SWAPGS-instrukcion dufoje dum aliro al la kerno denove de kernspaco aŭ dum plenumado de kodo kiu ne postulas GS-registran ŝanĝon, kontrolo kaj kondiĉa branĉo estas faritaj antaŭ la instrukcio. La konjekta ekzekutmotoro iniciateme daŭrigas ekzekuti kodon kun la SWAPGS-instrukcio sen atendado de la rezulto de la kontrolo, kaj se la elektita branĉo ne estas konfirmita, forĵetas la rezulton. Tiel, situacio povas ekesti kiam branĉo kiu ne implikas SWAPGS-ekzekuton estas konjekte elektita, sed dum konjekta ekzekuto la valoro de la GS-registro estos ŝanĝita per la SWAPGS-instrukcio kaj uzita en dependaj memoroperacioj kiuj alvenas en la CPU-kaŝmemoro.

Esploristoj proponis du atakscenarojn por kiuj ekspluatprototipoj estis preparitaj. La unua scenaro estas bazita sur la situacio kie la SWAPGS-instrukcio ne estas efektivigita konjekte, kvankam ĝi estas fakte uzita en ekzekuto, kaj la dua estas la kontraŭo, kiam la SWAPGS-instrukcio estas efektivigita konjekte, kvankam ĝi ne devus fakte esti efektivigita. Por ĉiu scenaro, ekzistas du opcioj por ekspluato: la atakanto povas determini la valoron ĉe specifa adreso en la kernelareo, kaj la atakanto povas serĉi specifan valoron ĉe hazardaj adresoj en la kerno. Fari atakon prenas longan tempon kaj la ekspluato povas postuli plurajn horojn por kompletigi la likon.

Estas problemo en la Linukso-kerno eliminita ŝanĝante la logikon de vokado de la SWAPGS-instrukcio (blokante konjektan ekzekuton), simile al la korekto de aliaj Spectre v1-klasa vundeblecoj. La aldonita protekto estas atendita havi minimuman efikon al la agado de tipaj laborŝarĝoj. Latenteco okazas dum la ŝanĝfazo inter uzanto kaj kernspaco, kiu povas rezultigi malbonan efikecon kiam, ekzemple, ekzistas peza sistema vokado de la aplikaĵo aŭ ofta generacio de NMIoj kaj interrompoj.

La riparo postulas instali kernan ĝisdatigon sur kaj la gastiga sistemo kaj gastmedioj, sekvita de sistema rekomenco. Por malŝalti protekton en Linukso, la opcio "nospectre_v1" povas esti uzata, kiu ankaŭ malŝaltas mezurojn por bloki la vundeblecon de SWAPGS. La riparo estas disponebla kiel flikaĵo por la Linukso-kerno, kiu jam estas inkluzivita en la eldonoj 4.19.65, 5.2.7, 4.14.137, 4.9.188 kaj 4.4.188. Ĝisdatigoj por Linukso-distribuoj ankoraŭ ne estis publikigitaj (Debian, RELO, Fedora, Arch Linukso, SUSE/malfermuSUSE, ubuntu). En Vindozo, la problemo estis kviete riparita ĝisdatigo de julio. Guglo Kompanio preparita ripari por kerno 4.19 sendita kun ChromeOS kaj android.

Laŭ esploristoj de Bitdefender, Intel estis informita pri la problemo en aŭgusto pasintjare. Estis decidite ripari la problemon programe, por kiu programistoj de Mikrosofto, Guglo kaj la Linukso-kerno estis implikitaj en la kunordigita evoluo de riparo. Pli malnovaj Intel-procesoroj, antaŭ-Ivy Bridge, estas multe pli malfacile atakeblaj pro la manko de subteno por la instrukcio WRGSBASE uzita en la ekspluato. ARM, POWER, SPARC, MIPS, kaj RISC-V-sistemoj ne estas trafitaj per la problemo ĉar ili ne subtenas la SWAPGS-instrukcion.

La problemo ĉefe influas posedantojn de Intel-procesoroj -
Sur AMD-sistemoj, nur la dua atakscenaro povis esti reproduktita, kiu estas limigita al spekula prilaborado de la baza valoro de la GS-registro, kiu povas esti uzata por serĉi specifajn valorojn en hazardaj memoraj areoj. Por bloki ĉi tiun atakopcion estas sufiĉa ekzistantaj metodoj de protekto kontraŭ Spectre v1.

fonto: opennet.ru

Aldoni komenton