Retbleed estas nova atako kontraŭ la konjekta ekzekutmekanismo de Intel kaj AMD-CPUoj

Grupo de esploristoj de ETH Zuriko identigis novan atakon kontraŭ la mekanismo de spekula ekzekuto de nerektaj transiroj en la CPU, kiu ebligas ĉerpi informojn el la memoro de la kerno aŭ organizi atakon kontraŭ la gastiga sistemo de virtualaj maŝinoj. La vundeblecoj estas kodita Retbleed (CVE-2022-29900, CVE-2022-29901) kaj estas proksimaj en naturo al Spectre-v2-atakoj. La diferenco venas malsupren al la organizo de konjekta ekzekuto de arbitra kodo dum prilaborado de la "ret" (reveno) instrukcio, kiu prenas la adreson por salti de la stako, anstataŭe de nerekta salto uzante la "jmp" instrukcion, ŝarĝante la adreson de memoro aŭ CPU-registro.

Atakanto povas krei kondiĉojn por malĝusta transira prognozo kaj organizi laŭcelan, konjektan transiron al bloko de kodo, kiu ne estas provizita de la programa ekzekutlogiko. Finfine, la procesoro determinos, ke la branĉa prognozo ne estis pravigita kaj retroigos la operacion al sia origina stato, sed la datumoj prilaboritaj dum konjekta ekzekuto finiĝos en la kaŝmemoro kaj mikroarkitekturaj bufroj. Se erare efektivigita bloko aliras memoron, tiam ĝia konjekta ekzekuto kondukos al datumoj legitaj de memoro deponitaj en la komuna kaŝmemoro.

Por determini la datumojn restantajn en la kaŝmemoro post konjektaj operacioj, atakanto povas uzi flankajn kanalajn teknikojn por determini restajn datenojn, kiel analizi ŝanĝojn en alirtempoj al kaŝmemoritaj kaj nekaŝigitaj datumoj. Por celkonscie ĉerpi informojn de areoj je alia privilegia nivelo (ekzemple, el kerna memoro), "aplikaĵoj" estas uzataj - sekvencoj de komandoj ĉeestantaj en la kerno, kiuj taŭgas por konjekte legi datumojn el memoro depende de eksteraj kondiĉoj, kiuj povas esti influitaj de. la atakanto.

Por protekti kontraŭ klasikaj atakoj de la klaso Spectre, kiuj uzas kondiĉajn kaj nerektajn saltinstrukciojn, la plej multaj operaciumoj uzas la "retpolin" teknikon, kiu baziĝas sur anstataŭigado de nerektaj saltoperacioj kun la "ret" instrukcio, por kiu procesoroj uzas apartan stakan ŝtatan prognozunuon. Ne uzante branĉan antaŭdiran blokon. Kiam retpolino estis lanĉita en 2018, oni kredis, ke Spectre-similaj adresmanipuladoj ne estis praktikaj por konjekta disbranĉigo uzante la "ret" instrukcion.

La esploristoj, kiuj disvolvis la atakmetodon Retbleed, pruvis la eblecon krei mikroarkitekturajn kondiĉojn por komenci konjektan transiron uzante la "ret" instrukcion kaj publikigis pretajn ilojn por identigi sekvencojn de instrukcioj (gadgets) taŭgaj por ekspluati la vundeblecon en la Linukso-kerno, en kiu tiaj kondiĉoj manifestiĝas.

Dum la esplorado, funkcianta ekspluato estis preparita, kiu permesas, sur sistemoj kun Intel-CPUoj, ĉerpi arbitrajn datumojn el kernmemoro de senprivilegia procezo en uzantspaco kun rapideco de 219 bajtoj sekundo kaj 98% precizeco. Sur AMD-procesoroj, la efikeco de la ekspluato estas multe pli alta—la likprocento estas 3.9 KB je sekundo. Kiel praktika ekzemplo, ni montras kiel uzi la proponitan ekspluatadon por determini la enhavon de la /etc/shadow-dosiero. Sur sistemoj kun Intel-CPUoj, la atako por determini la radikan pasvorton de hash de uzanto estis farita en 28 minutoj, kaj sur sistemoj kun AMD-CPU - en 6 minutoj.

La atako estis konfirmita por generacioj 6-8 de Intel-procesoroj kiuj estis liberigitaj antaŭ Q3 2019 (inkluzive de Skylake), kaj AMD-procesoroj bazitaj sur Zen 1, Zen 1+, kaj Zen 2 mikroarkitekturoj kiuj estis liberigitaj antaŭ Q2021 3. En pli novaj procesoraj modeloj kiel AMD ZenXNUMX kaj Intel Alder Lake, same kiel en ARM-procesoroj, la problemo estas blokita de ekzistantaj protektaj mekanismoj. Ekzemple, uzi instrukciojn de IBRS (Indirect Branch Restricted Speculation) helpas protekti kontraŭ atakoj.

Aro da ŝanĝoj estis preparita por la Linukso-kerno kaj la hiperviziero Xen, kiuj blokos la problemon en programaro sur pli malnovaj CPUoj. La proponita flikaĵo por la Linukso-kerno ŝanĝas 68 dosierojn, aldonas 1783 liniojn kaj forigas 387 liniojn. Bedaŭrinde, la protekto kondukas al gravaj superkostoj - en la tekstoj faritaj sur AMD kaj Intel-procesoroj, la rendimento malpliiĝo estas taksita de 14% ĝis 39%. Estas pli preferinde uzi protekton bazitan sur IBRS-instrukcioj, haveblaj en novaj generacioj de Intel-CPUoj kaj subtenataj ekde la Linukso-kerno 4.19.

Sur Intel-procesoroj, adresanstataŭigo por konjekta nerekta salto estas efektivigita danke al trajto, kiu aperas kiam superfluo okazas tra la malsupera limo (subfluo) en la Return Stack Buffer. Kiam tiaj kondiĉoj okazas, la "ret" instrukcio komencas apliki adreselektologikon similan al tio uzita por normalaj nerektaj saltoj. Pli ol mil lokoj estis trovitaj en la Linukso-kerno, kiuj kreas kondiĉojn por komenci tian retrofluon kaj estas alireblaj per sistemaj vokoj.

Sur AMD-procesoroj, konjekta ekzekuto de la "ret" instrukcio estas farita sen referenco al stak-specifa bufro (Return Address Stack) kaj la branĉa prognozunuo konsideras la "ret" instrukcion ne kiel kontrolrevenon, sed kiel nerektan branĉon. , kaj, sekve, uzas la datenojn por antaŭdiraj nerektaj transiroj. Sub ĉi tiuj kondiĉoj, preskaŭ ajna "ret" operacio atingebla per sistemvoko povas esti ekspluatata.

Aldone, alia afero ankaŭ estis identigita en AMD-CPUoj (CVE-2022-23825, Branch Type Confusion) rilata al la efektivigo de fikciaj branĉoj - kondiĉoj por branĉa prognozo povas okazi eĉ sen la necesaj branĉo-instrukcioj, kio ebligas influi la branĉan prognozan bufron. sen la instrukcio "ret". Ĉi tiu funkcio signife malfaciligas la efektivigon de protekto kaj postulas pli aktivan purigadon de la branĉa prognoza bufro. Aldonante plenan protekton al la kerno estas atendita pliigi la supran koston je 209%.

fonto: opennet.ru

Aldoni komenton