Ang isang kahinaan sa klase ng Meltdown ay natuklasan sa mga processor ng AMD batay sa Zen+ at Zen 2 microarchitectures

Natukoy ng isang pangkat ng mga mananaliksik mula sa Technical University of Dresden ang isang kahinaan (CVE-2020-12965) sa mga processor ng AMD batay sa Zen+ at Zen 2 microarchitectures, na nagbibigay-daan sa isang Meltdown class attack. Sa una ay ipinapalagay na ang mga processor ng AMD Zen+ at Zen 2 ay hindi madaling kapitan sa kahinaan ng Meltdown, ngunit natukoy ng mga mananaliksik ang isang tampok na humahantong sa speculative na pag-access sa mga protektadong lugar ng memorya kapag gumagamit ng mga non-canonical virtual address.

Ang arkitektura ng AMD64 ay gumagamit lamang ng unang 48 bits ng virtual address at binabalewala ang natitirang 16 bits. Tinukoy na ang mga bit 48 hanggang 63 ay dapat palaging kopyahin ang halaga ng bit 47 (sign bit extension). Kung ang kundisyong ito ay nilabag at isang pagtatangka ay ginawa upang ma-access ang isang address na may mga di-makatwirang halaga ng itaas na mga bit, ang processor ay bumubuo ng isang pagbubukod. Ang paulit-ulit na pagpuno sa itaas na mga bit ay nagiging dahilan upang ang magagamit na espasyo ng address ay nahahati sa dalawang bloke - isang mas mababang isa (mula 0 hanggang 00007FFFFFFFFFFFFFF), kung saan ang itaas na mga bit ay nakatakda sa 800000000000, at isang itaas na isa (mula FFFF1 hanggang FFFFFFFFFFFFFFFF), kung saan lahat ng mga upper bit ay nakatakda sa XNUMX.

Ang mga address na nasa loob ng tinukoy na mga bloke ay tinatawag na canonical, at ang mga maling address na may di-makatwirang nilalaman ng mga upper bit ay tinatawag na non-canonical. Ang mas mababang hanay ng mga canonical address ay karaniwang inilalaan para sa proseso ng data, at ang itaas na hanay ay ginagamit para sa kernel data (ang access sa mga address na ito mula sa user space ay hinarangan sa antas ng paghihiwalay ng pribilehiyo).

Ang klasikong kahinaan ng Meltdown ay batay sa katotohanan na sa panahon ng haka-haka na pagpapatupad ng mga tagubilin, maaaring ma-access ng processor ang isang pribadong lugar ng data at pagkatapos ay itapon ang resulta dahil ipinagbabawal ng mga nakatakdang pribilehiyo ang naturang pag-access mula sa proseso ng user. Sa programa, ang speculatively executed block ay pinaghihiwalay mula sa pangunahing code ng isang conditional branch, na sa totoong mga kondisyon ay palaging nagpapaputok, ngunit dahil sa ang katunayan na ang conditional statement ay gumagamit ng isang kinakalkula na halaga na hindi alam ng processor sa panahon ng preemptive execution ng ang code, ang lahat ng mga pagpipilian sa sangay ay isinasagawa sa haka-haka.

Dahil ang mga speculatively executed operations ay gumagamit ng parehong cache gaya ng normal na executed na mga tagubilin, posible sa panahon ng speculative execution na magtakda ng mga marker sa cache na sumasalamin sa mga content ng indibidwal na bits sa isang private memory area, at pagkatapos ay sa normal na executed code upang matukoy ang kanilang halaga sa pamamagitan ng timing pag-access ng pagsusuri sa naka-cache at hindi naka-cache na data.

Ang isang tampok ng bagong kahinaan na nakakaapekto sa mga processor ng AMD Zen+ at Zen 2 ay ang mga CPU ay nagbibigay-daan sa mga speculative read at write operations na nag-a-access ng memorya gamit ang mga di-wastong non-canonical address, na binabalewala lang ang upper 16 bits. Kaya, sa panahon ng speculative code execution, ang processor ay palaging gumagamit lamang ng mas mababang 48 bits, at ang validity ng address ay sinusuri nang hiwalay. Kung, kapag nagsasalin ng isang non-canonical virtual address sa isang pisikal na address sa associative translation buffer (TLB), may nakitang tugma sa canonical na bahagi ng address, ibabalik ng speculative load operation ang halaga nang hindi isinasaalang-alang ang mga nilalaman ng itaas na 16 bits, na nagbibigay-daan sa pag-bypass ng pagbabahagi ng memorya sa pagitan ng mga thread. Sa dakong huli, ang operasyon ay ituturing na hindi wasto at itatapon, ngunit ang pag-access sa memorya ay makukumpleto at ang data ay mapupunta sa cache.

Sa panahon ng eksperimento, gamit ang pamamaraan ng pagtukoy sa mga nilalaman ng FLUSH+RELOAD cache, nagawa ng mga mananaliksik na ayusin ang isang channel para sa nakatagong paglipat ng data sa bilis na 125 bytes bawat segundo. Bilang karagdagan sa mga AMD chips, ang problema ay nakakaapekto rin sa lahat ng mga processor ng Intel, na madaling kapitan sa klasikong kahinaan ng Meltdown. Ang parehong mga diskarte na tumutulong sa pagharang sa mga pag-atake ng Meltdown, gaya ng paggamit ng mga tagubilin sa LFENCE, ay maaaring gamitin upang maprotektahan laban sa bagong uri ng pag-atake na ito. Halimbawa, kung ang isang Intel processor ay may kasamang proteksyon ng hardware laban sa Meltdown o ang system ay may pinaganang proteksyon ng software, kung gayon ang mga naturang configuration ay hindi madaling kapitan sa bagong variant ng pag-atake.

Kasabay nito, napansin ng mga mananaliksik na, kumpara sa mga processor ng Intel, nililimitahan ng arkitektura ng mga processor ng AMD ang posibilidad na magsagawa ng mga tunay na pag-atake, ngunit hindi ibinubukod ang paggamit ng isang bagong paraan kasama ang iba pang mga pag-atake ng microarchitectural upang madagdagan ang kanilang pagiging epektibo. Sa partikular, ang iminungkahing pag-atake ay hindi nagpapahintulot sa isa na matukoy ang mga nilalaman ng mga lugar ng memorya ng kernel at iba pang mga proseso, ngunit limitado sa kakayahang makakuha ng access sa iba pang mga thread ng parehong programa na tumatakbo sa parehong virtual memory space.

Dahil ang isang programa na walang kahinaan ay may kakayahang makakuha ng access sa mga thread nito, mula sa isang praktikal na punto ng view ang pamamaraan ay interesado para sa pag-bypass sa sandbox isolation at pag-aayos ng pagkagambala sa gawain ng iba pang mga thread sa mga programa na nagpapahintulot sa pagpapatupad ng third-party code, gaya ng mga web browser at JIT engine . Sinuri ng mga mananaliksik ang kahinaan ng SpiderMonkey JavaScript engine at ang Linux kernel sa pag-atake, ngunit hindi nakakita ng mga mahina na pagkakasunud-sunod ng code na maaaring magamit upang magsagawa ng pag-atake. Bilang karagdagan sa pag-atake ng mga application, ang pamamaraan ay maaari ding gamitin upang pilitin ang mga hindi katanggap-tanggap na daloy ng data sa pagitan ng mga elemento ng microarchitectural ng processor habang sinasamantala ang iba pang mga kahinaan sa microarchitectural.

Pinagmulan: opennet.ru

Magdagdag ng komento