Ipinakita ng Google ang pagsasamantala sa mga kahinaan ng Spectre sa pamamagitan ng pagsasagawa ng JavaScript sa browser

Nag-publish ang Google ng ilang exploit prototype na nagpapakita ng posibilidad ng pagsasamantala sa mga kahinaan ng klase ng Spectre kapag nagpapatupad ng JavaScript code sa isang browser, na lumalampas sa mga naunang idinagdag na paraan ng proteksyon. Maaaring gamitin ang mga pagsasamantala upang makakuha ng access sa memorya ng isang proseso na nagpoproseso ng nilalaman ng web sa kasalukuyang tab. Upang subukan ang pagpapatakbo ng pagsasamantala, ang site leaky.page ay inilunsad, at ang code na naglalarawan sa lohika ng trabaho ay nai-post sa GitHub.

Ang iminungkahing prototype ay idinisenyo upang atakehin ang mga system na may mga processor ng Intel Core i7-6500U sa kapaligiran ng Linux at Chrome 88. Kinakailangan ang mga pagbabago upang mailapat ang pagsasamantala sa ibang mga kapaligiran. Ang paraan ng pagsasamantala ay hindi partikular sa mga processor ng Intel - pagkatapos ng naaangkop na pagbagay, ang pagsasamantala ay nakumpirma na gumana sa mga system na may mga CPU mula sa iba pang mga tagagawa, kabilang ang Apple M1 batay sa arkitektura ng ARM. Pagkatapos ng maliliit na pagsasaayos, gagana rin ang pagsasamantala sa iba pang mga operating system at iba pang mga browser batay sa Chromium engine.

Sa isang environment na nakabatay sa karaniwang Chrome 88 at Intel Skylake processor, na-leak ang data mula sa prosesong responsable para sa pagproseso ng web content sa kasalukuyang tab ng Chrome (proseso ng renderer), sa bilis na 1 kilobyte bawat segundo. Bukod pa rito, ang mga alternatibong prototype ay binuo, halimbawa, isang pagsasamantala na nagbibigay-daan, sa halaga ng pagbabawas ng katatagan, na taasan ang leak rate sa 8kB/s kapag ginagamit ang performance.now() timer na may katumpakan na 5 microseconds (0.005 milliseconds) . Naghanda din ng isang variant, na gumagana sa isang katumpakan ng timer na isang millisecond, na maaaring magamit upang ayusin ang pag-access sa memorya ng isa pang proseso sa bilis na humigit-kumulang 60 byte bawat segundo.

Ang na-publish na demo code ay binubuo ng tatlong bahagi. Ang unang bahagi ay nag-calibrate sa timer upang matantya ang oras ng pagpapatupad ng mga operasyon na kinakailangan upang maibalik ang data na natitira sa cache ng processor bilang resulta ng haka-haka na pagpapatupad ng mga tagubilin ng CPU. Tinutukoy ng ikalawang bahagi ang layout ng memorya na ginamit kapag inilalaan ang array ng JavaScript.

Direktang sinasamantala ng ikatlong bahagi ang kahinaan ng Spectre upang matukoy ang mga nilalaman ng memorya ng kasalukuyang proseso bilang isang resulta ng paglikha ng mga kondisyon para sa speculative execution ng ilang mga operasyon, ang resulta nito ay itinapon ng processor pagkatapos matukoy ang isang hindi matagumpay na hula, ngunit ang pagpapatupad ang mga bakas ay idineposito sa pangkalahatang cache at maaaring ibalik gamit ang mga pamamaraan para sa pagtukoy ng mga nilalaman ng cache ng mga third-party na channel na nagsusuri ng mga pagbabago sa oras ng pag-access sa naka-cache at hindi naka-cache na data.

Tinatanggal ng iminungkahing diskarte sa pagsasamantala ang mga high-precision na timer na magagamit sa pamamagitan ng performance.now() API, at nang walang suporta para sa uri ng SharedArrayBuffer, na nagbibigay-daan sa paglikha ng mga array sa shared memory. Kasama sa pagsasamantala ang Spectre gadget, na nagiging sanhi ng kinokontrol na speculative code execution, at isang side-channel leak analyzer, na tumutukoy sa data na nakuha sa panahon ng speculative execution na nakapasok sa cache.

Ang gadget ay ipinatupad gamit ang isang JavaScript array, kung saan ang isang pagtatangka ay ginawa upang ma-access ang isang lugar sa labas ng mga hangganan ng buffer, na nakakaapekto sa estado ng bloke ng hula ng sangay dahil sa pagsusuri sa laki ng buffer na idinagdag ng compiler (ang processor, nakatingin sa unahan , speculatively gumaganap ng access, ngunit roll back ang estado pagkatapos ng tseke). Upang pag-aralan ang mga nilalaman ng cache sa ilalim ng mga kondisyon ng hindi sapat na katumpakan ng timer, ang isang paraan ay iminungkahi na nanlilinlang sa Tree-PLRU cache eviction diskarte na ginagamit sa mga processor at nagbibigay-daan, sa pamamagitan ng pagtaas ng bilang ng mga cycle, upang makabuluhang taasan ang pagkakaiba sa oras kapag nagbabalik ng isang halaga mula sa cache at kapag walang halaga sa cache.

Napansin na ang Google ay nag-publish ng isang prototype na pagsasamantala upang ipakita ang pagiging totoo ng mga pag-atake gamit ang mga kahinaan ng klase ng Spectre at upang hikayatin ang mga web developer na gumamit ng mga diskarte na nagpapaliit sa mga panganib mula sa mga naturang pag-atake. Kasabay nito, naniniwala ang Google na walang makabuluhang rebisyon ng iminungkahing prototype, imposibleng lumikha ng mga unibersal na pagsasamantala na handa hindi lamang para sa pagpapakita, kundi pati na rin para sa malawakang paggamit.

Upang mabawasan ang panganib, hinihikayat ang mga may-ari ng site na gamitin ang kamakailang ipinatupad na Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X -Content-Type-Options at SameSite Cookies. Ang mga mekanismong ito ay hindi direktang nagpoprotekta laban sa mga pag-atake, ngunit pinapayagan ang paghiwalayin ang data ng site mula sa pagtagas sa mga proseso kung saan maaaring isagawa ang JavaScript code ng umaatake (ang pagtagas ay nangyayari mula sa memorya ng kasalukuyang proseso, kung saan, bilang karagdagan sa code ng umaatake, ang data mula sa isa pang site na binuksan sa parehong tab na iyon). Ang pangunahing ideya ay paghiwalayin sa iba't ibang proseso ang pagpapatupad ng code ng site mula sa code ng third-party na nakuha mula sa hindi mapagkakatiwalaang mga mapagkukunan, halimbawa, kasama sa pamamagitan ng isang iframe.



Pinagmulan: opennet.ru

Magdagdag ng komento