Meltdown-klasa vundebleco estis malkovrita en AMD-procesoroj bazitaj sur mikroarkitekturoj Zen+ kaj Zen 2.

Grupo de esploristoj de la Teknika Universitato de Dresdeno identigis vundeblecon (CVE-2020-12965) en AMD-procesoroj bazitaj sur mikroarkitekturoj Zen+ kaj Zen 2, kio permesas Meltdown-klasan atakon. Komence estis supozite, ke AMD Zen+ kaj Zen 2-procesoroj ne estas sentemaj al la Meltdown-vundebleco, sed esploristoj identigis trajton, kiu kondukas al konjekta aliro al protektitaj memorareoj kiam ili uzas ne-kanonajn virtualajn adresojn.

La AMD64-arkitekturo uzas nur la unuajn 48 bitojn de la virtuala adreso kaj ignoras la ceterajn 16 bitojn. Estas precize, ke bitoj 48 ĝis 63 devas ĉiam kopii la valoron de bito 47 (signo-bita etendaĵo). Se ĉi tiu kondiĉo estas malobservita kaj provo aliri adreson kun arbitraj valoroj de la supraj bitoj, la procesoro generas escepton. Plurfoje plenigi la suprajn bitojn igas la disponeblan adresspacon esti dividita en du blokojn - malsupra unu (de 0 ĝis 00007FFFFFFFFFFFFF), en kiu la supraj bitoj estas agordita al 800000000000, kaj supra (de FFFFFF1 ĝis FFFFFFFFFFFFFF), en kiu ĉiuj supraj bitoj estas fiksitaj al XNUMX.

Adresoj falantaj ene de la specifitaj blokoj estas nomitaj kanonikaj, kaj malĝustaj adresoj kun arbitra enhavo de la supraj bitoj estas nomitaj ne-kanonikaj. La pli malalta gamo de kanonikaj adresoj estas tipe asignita por procesdatenoj, kaj la supra intervalo estas uzita por kerndatenoj (aliro al tiuj adresoj de uzantspaco estas blokita sur la privilegia apartignivelo).

La klasika vundebleco de Meltdown baziĝas sur la fakto, ke dum spekula ekzekuto de instrukcioj, la procesoro povas aliri privatan datuman areon kaj poste forĵeti la rezulton ĉar la fiksitaj privilegioj malpermesas tian aliron de la procezo de la uzanto. En la programo, la konjekte efektivigita bloko estas apartigita de la ĉefa kodo per kondiĉa branĉo, kiu en realaj kondiĉoj ĉiam pafas, sed pro la fakto, ke la kondiĉa deklaro uzas kalkulitan valoron, kiun la procesoro ne konas dum la preventa ekzekuto de la kodo, ĉiuj branĉo opcioj estas efektivigitaj spekulative.

Ĉar konjekte efektivigitaj operacioj utiligas la saman kaŝmemoron kiel normale ekzekutita instrukciaĵo, estas eble dum konjekta ekzekuto meti markilojn en la kaŝmemoro kiuj reflektas la enhavon de individuaj bitoj en privata memorareo, kaj tiam en normale efektivigita kodo por determini sian valoron tra tempigo. analizaj aliroj al kaŝmemoritaj kaj ne-konmemorigitaj datumoj.

Karakterizaĵo de la nova vundebleco, kiu influas AMD Zen+ kaj Zen 2-procesorojn, estas, ke la CPUoj permesas konjektajn legadon kaj skribajn operaciojn, kiuj aliras memoron per nevalidaj ne-kanonikaj adresoj, simple ignorante la suprajn 16 bitojn. Tiel, dum konjekta koda ekzekuto, la procesoro ĉiam uzas nur la pli malaltajn 48 bitojn, kaj la valideco de la adreso estas kontrolita aparte. Se, kiam oni tradukas ne-kanonan virtualan adreson al fizika adreso en la asocieca tradukbufro (TLB), kongruo estas detektita en la kanonika parto de la adreso, tiam la konjekta ŝarĝa operacio resendos la valoron sen konsideri la enhavon. de la supraj 16 bitoj, kio permesas preteriri memordividon inter fadenoj. Poste, la operacio estos konsiderata nevalida kaj forĵetita, sed la memoraliro estos kompletigita kaj la datumoj finiĝos en la kaŝmemoro.

Dum la eksperimento, uzante la teknikon determini la enhavon de la kaŝmemoro FLUSH+RELOAD, la esploristoj povis organizi kanalon por kaŝita transdono de datumoj je rapideco de 125 bajtoj sekundo. Krom AMD-blatoj, la problemo ankaŭ influas ĉiujn Intel-procesorojn, kiuj estas sentemaj al la klasika Meltdown vundebleco. La samaj teknikoj, kiuj helpas bloki Meltdown-atakojn, kiel uzi instrukciojn de LFENCE, povas esti uzataj por protekti kontraŭ ĉi tiu nova speco de atako. Ekzemple, se Intel-procesoro inkluzivas hardvarprotekton kontraŭ Meltdown aŭ la sistemo havas programaran protekton ebligita, tiam tiaj agordoj ne estas sentemaj al la nova atakvariaĵo.

Samtempe, la esploristoj rimarkas, ke, kompare kun Intel-procesoroj, la arkitekturo de AMD-procesoroj limigas la eblecon fari realajn atakojn, sed ne ekskludas la uzon de nova metodo kombine kun aliaj mikroarkitekturaj atakoj por pliigi ilian efikecon. Aparte, la proponita atako ne permesas determini la enhavon de memorareoj de la kerno kaj aliaj procezoj, sed estas limigita al la kapablo akiri aliron al aliaj fadenoj de la sama programo kurante en la sama virtuala memorspaco.

Ĉar programo sen vundebleco havas la kapablon akiri aliron al siaj fadenoj, de praktika vidpunkto la metodo interesas preterpasi sablokestan izolitecon kaj organizi interferon kun la laboro de aliaj fadenoj en programoj, kiuj permesas la ekzekuton de triaj. kodon, kiel retumiloj kaj JIT-motoroj. Esploristoj ekzamenis la vundeblecon de la SpiderMonkey JavaScript-motoro kaj la Linukso-kerno por ataki, sed ne trovis vundeblajn kodsekvencojn, kiuj povus esti uzataj por fari atakon. Aldone al atakado de aplikoj, la metodo ankaŭ povas esti uzita por devigi neakcepteblajn datenfluojn inter mikroarkitekturaj elementoj de la procesoro ekspluatante aliajn mikroarkitekturajn vundeblecojn.

fonto: opennet.ru

Aldoni komenton