Google браузерде JavaScriptти ишке ашыруу менен Spectre чабал жерлерин эксплуатациялоону көрсөтөт

Google мурунтан кошулган коргоо ыкмаларын кыйгап өтүп, браузерде JavaScript кодун аткарууда Spectre классынын алсыз жактарын пайдалануу мүмкүнчүлүгүн көрсөткөн бир нече эксплуатация прототиптерин жарыялады. Эксплоиттерди учурдагы өтмөктө веб-мазмунду иштетүү процессинин эс тутумуна жетүү үчүн колдонсо болот. Эксплойттун иштешин текшерүү үчүн leaky.page веб-сайты ишке киргизилип, иштин логикасын сүрөттөгөн код GitHub сайтында жайгаштырылган.

Сунушталган прототип Linux жана Chrome 7 менен чөйрөдө Intel Core i6500-88U процессорлору бар системаларга чабуул жасоо үчүн иштелип чыккан. Эксплойтти башка чөйрөлөр үчүн колдонуу үчүн, өзгөртүүлөр талап кылынат. Эксплуатация ыкмасы Intel процессорлоруна мүнөздүү эмес - тиешелүү адаптациядан кийин эксплойт башка өндүрүүчүлөрдүн, анын ичинде ARM архитектурасына негизделген Apple M1 процессорлору менен системаларда иштөөсү тастыкталды. Кичинекей оңдоп-түзөөдөн кийин, эксплуатация башка операциялык системаларда жана Chromium кыймылдаткычына негизделген башка браузерлерде да иштейт.

Стандарттык Chrome 88 жана Intel Skylake процессорлоруна негизделген чөйрөдө, учурдагы Chrome өтмөгүндө (рендерер процесси) секундасына 1 килобайт ылдамдыкта веб-мазмунду иштетүү үчүн жооптуу процесстен маалыматтарды агып чыгуу мүмкүн болгон. Кошумчалай кетсек, 8 микросекунд (5 миллисекунд) тактык менен performance.now() таймерин колдонууда стабилдүүлүктү азайтуунун эсебинен агып чыгуу ылдамдыгын 0.005 кБ/сек чейин жогорулатууга мүмкүндүк берүүчү альтернативдик прототиптер иштелип чыккан. ). Ошондой эле бир миллисекунддук таймердин тактыгы менен иштеген версия даярдалган, аны секундасына болжол менен 60 байт ылдамдыкта башка процесстин эс тутумуна кирүүнү уюштуруу үчүн колдонсо болот.

Жарыяланган демо-код үч бөлүктөн турат. Биринчи бөлүк процессордун кэшинде калган маалыматтарды калыбына келтирүү үчүн зарыл болгон операциялардын аткарылуу убактысын эсептөө үчүн таймерди калибрлейт. Экинчи бөлүк JavaScript массивдерин бөлүштүрүүдө колдонулган эс тутумдун схемасын аныктайт.

Үчүнчү бөлүк белгилүү бир операциялардын спекулятивдүү аткарылышы үчүн шарттарды түзүүнүн натыйжасында учурдагы процесстин эстутум мазмунун аныктоо үчүн Spectre аялуулугун түздөн-түз колдонот, анын натыйжасы ийгиликсиз божомолду аныктагандан кийин процессор тарабынан жокко чыгарылат, бирок анын издери. аткаруу жалпы кэшке сакталат жана кэштелген жана кэштелбеген маалыматтарга жетүү убакытындагы өзгөрүүлөрдү талдоочу үчүнчү тараптын каналдары тарабынан кэштин мазмунун аныктоо ыкмаларын колдонуу менен калыбына келтирилиши мүмкүн.

Сунушталган эксплуатациялоо техникасы performance.now() API аркылуу жеткиликтүү жогорку тактыктагы таймерлерсиз жана жалпы эстутумда массивдерди түзүүгө мүмкүндүк берген SharedArrayBuffer тибинин колдоосуз жасоого мүмкүндүк берет. Эксплуатацияга коддун башкарылуучу спекулятивдүү аткарылышын шарттаган Spectre гаджети жана спекуляциялык аткаруу учурунда алынган кэштелген маалыматтарды аныктоочу капталдагы агып чыгуу анализатору кирет.

Гаджет JavaScript массивинин жардамы менен ишке ашырылат, анда буфердин чегинен тышкаркы аймакка жетүү аракети жасалган, бул компилятор (процессор, процессор, алдыга карап, спекулятивдүү түрдө мүмкүндүктү аткарат, бирок текшерүүдөн кийин абалды артка кайтарат). Таймердин тактыгы жетишсиз болгон шарттарда кэштин мазмунун талдоо үчүн процессорлордо колдонулган Tree-PLRU кэш чыгаруу стратегиясын алдаган жана циклдердин санын көбөйтүү менен кайра кайтаруудагы убакыттын айырмасын олуттуу көбөйтүүгө мүмкүндүк берген ыкма сунушталган. кэштен алынган маани жана кэште эч кандай маани жок болгондо.

Белгиленгендей, Google Spectre классынын алсыз жактарын колдонуу менен чабуул жасоонун мүмкүндүгүн көрсөтүү жана веб-иштеп чыгуучуларды мындай чабуулдардын тобокелдиктерин азайтуу ыкмаларын колдонууга шыктандыруу үчүн эксплуатациянын прототибин чыгарган. Ошол эле учурда Google сунушталып жаткан прототибин олуттуу түрдө кайра иштебей туруп, демонстрацияга гана эмес, кеңири колдонууга да даяр универсалдуу эксплуатацияларды түзүү мүмкүн эмес деп эсептейт.

Тобокелдиктерди азайтуу үчүн сайт ээлерине жакында ишке ашырылган Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame- аталыштарын колдонуу сунушталат. Параметрлер, X -Content-Type-Options жана SameSite Cookie. Бул механизмдер түздөн-түз чабуулдардан коргобойт, бирок алар сайттын маалыматтарын агып кетүүдөн чабуулчунун JavaScript коду ишке ашырыла турган процесстерге бөлүп коюуга мүмкүндүк берет (агып чыгуу учурдагы процесстин эсинде пайда болот, ал чабуулчунун кодунан тышкары , ошол эле өтмөктө ачылган башка сайттагы маалыматтарды да иштете алат). Негизги идея - ар кандай процесстерде сайттын кодунун аткарылышын ишенимсиз булактардан алынган үчүнчү тараптын кодунан бөлүү, мисалы, iframe аркылуу.



Source: opennet.ru

Комментарий кошуу