Прагназатар разгалінаванняў з'яўляецца найважнейшым кампанентам сучасных архітэктур цэнтральных працэсараў, прызначаных для павышэння прадукцыйнасці шляхам разважанняў аб напрамку інструкцый разгалінавання (напрыклад, аператараў if-else) да іх вырашэння. Гэтая спекуляцыя дазваляе працэсару папярэдне забіраць і выконваць інструкцыі па прадказаным шляху, тым самым памяншаючы меркаваную затрымку і паляпшаючы агульную прапускную здольнасць. Аднак гэтая аптымізацыя прадукцыйнасці стварае патэнцыйныя ўразлівасці, якія могуць быць выкарыстаны ў атаках на працэсар, асабліва ў кантэксце ўцечкі канфідэнцыйнай інфармацыі.
Прагназаванне разгалінаванняў працуе шляхам захавання гісторыі вынікаў разгалінаванняў і выкарыстання гэтай гісторыі для прагназавання будучых разгалінаванняў. Калі сустракаецца інструкцыя па разгалінаванні, прадказальнік выкарыстоўвае гэтыя гістарычныя даныя, каб выказаць здагадку, будзе зроблена галінка ці не. Калі прагноз правільны, працэсар працягвае выкананне без перапынкаў. Калі гэта няправільна, працэсар павінен выканаць адкат і выканаць правільны шлях, што цягне за сабой пагаршэнне прадукцыйнасці. Гэты штраф, хоць і невялікі, можа быць вымераны і выкарыстаны зламыснікамі.
Зламыснікі могуць маніпуляваць прадказальнікам галінавання, каб стварыць вымерную розніцу ў часе паміж правільна і няправільна прадказанымі галінамі. Гэтая розніца можа быць выкарыстана для высновы аб шляху выканання праграмы, што, у сваю чаргу, можа раскрыць канфідэнцыяльную інфармацыю. Адным з найбольш вядомых прыкладаў такой атакі з'яўляецца ўразлівасць Spectre, якая выкарыстоўвае спекулятыўнае выкананне і прагназаванне галінавання для доступу да несанкцыянаваных месцаў памяці.
У звычайнай атацы Spectre зламыснік спачатку навучае прадказальнік разгалінавання прытрымлівацца пэўнай схемы. Гэты этап навучання ўключае ў сябе выкананне паслядоўнасці інструкцый галінавання, якія абумоўліваюць прадказальнік зрабіць пэўны прагноз. Пасля навучання прадказальніка зламыснік выконвае сегмент кода ахвяры, які ўключае галіну, якая залежыць ад сакрэтных даных. Калі прадказальнік робіць няправільны прагноз, заснаваны на навучанні зламысніка, працэсар будзе спекулятыўна выконваць інструкцыі, якія звяртаюцца да памяці на аснове сакрэтных даных. Хоць гэтыя спекулятыўныя інструкцыі ў канчатковым выніку адкідаюцца, яны пакідаюць сляды ў кэшы працэсара.
Затым зламыснік можа вымераць час доступу да розных месцаў памяці, каб вызначыць, да якіх дадзеных быў спекулятыўны доступ. Гэтая тэхніка, вядомая як атака па часе кэша, дазваляе зламысніку зрабіць выснову аб сакрэтных дадзеных на аснове назіраных адрозненняў у часе. Ключавыя этапы такой атакі:
1. Навучанне прагназатара галін: Зламыснік выконвае кантраляваную паслядоўнасць інструкцый, якія ўплываюць на стан прадказальніка разгалінавання. Напрыклад, неаднаразовае выкананне інструкцыі разгалінавання з паслядоўным вынікам (напрыклад, заўсёды прымаецца) абумоўлівае прадказальнік чакаць гэтага выніку ў будучых выкананнях.
2. Запуск спекулятыўнага выканання: Зламыснік запускае код ахвяры з інструкцыяй разгалінавання, якая залежыць ад сакрэтных дадзеных. Дзякуючы папярэдняй падрыхтоўцы зламысніка, прадказальнік галінавання спекулятыўна выконвае няправільны шлях, які прадугледжвае доступ да памяці на аснове сакрэтных даных.
3. Вымярэнне часу доступу да кэша: Пасля спекулятыўнага выканання зламыснік вымярае час, неабходны для доступу да пэўных месцаў памяці. Хутчэйшы час доступу паказвае на тое, што дадзеныя прысутнічаюць у кэшы, што азначае, што да іх быў спекулятыўны доступ. Аналізуючы гэтыя таймінгі, зламыснік можа зрабіць выснову аб сакрэтных дадзеных.
Каб праілюстраваць гэта на канкрэтным прыкладзе, разгледзім сцэнар, дзе сакрэтныя дадзеныя вызначаюць індэкс доступу да масіва ў галінцы. Зламыснік спачатку навучае прадказальнік разгалінавання прымаць пэўны кірунак разгалінавання. Калі код ахвяры запускаецца, прадказальнік галінавання спекулятыўна выконвае доступ да масіва на аснове навучанага кірунку. Калі спекуляцыя прадугледжвае доступ да пэўнага элемента масіва, загружаецца адпаведны радок кэша. Затым зламыснік можа выканаць серыю замеркаваных доступаў да памяці, каб вызначыць, якія радкі кэша загружаны, і такім чынам атрымаць сакрэтны індэкс.
Змякчэнне такіх нападаў прадугледжвае некалькі стратэгій. Апаратныя рашэнні ўключаюць паляпшэнне ізаляцыі паміж спекулятыўнымі і неспекулятыўнымі шляхамі выканання і забеспячэнне таго, каб спекулятыўнае выкананне не закранала агульныя рэсурсы, такія як кэш. Рашэнні на аснове праграмнага забеспячэння ўключаюць такія метады, як устаўка інструкцый "агароджы", каб прадухіліць спекулятыўнае выкананне пасля пэўных пунктаў у кодзе, або выкарыстанне метадаў праграмавання з пастаянным часам, каб гарантаваць, што час выканання не залежыць ад сакрэтных даных.
Складанасць і вытанчанасць нападаў на час, заснаваных на прадказальніку галін, падкрэсліваюць неабходнасць пастаянных даследаванняў і распрацовак у галіне бяспекі апаратнага і праграмнага забеспячэння. Паколькі архітэктуры працэсараў працягваюць развівацца, таксама павінны развівацца стратэгіі абароны ад гэтых і іншых формаў атак пабочных каналаў.
Іншыя апошнія пытанні і адказы адносна Атакі па часе працэсара:
- Якія некаторыя праблемы і кампрамісы звязаны з укараненнем апаратнага і праграмнага забеспячэння для змякчэння наступстваў па часе пры захаванні прадукцыйнасці сістэмы?
- Як праграмаванне з пастаянным часам можа дапамагчы знізіць рызыку атак па часе ў крыптаграфічных алгарытмах?
- Што такое спекулятыўнае выкананне і як яно спрыяе ўразлівасці сучасных працэсараў да такіх атак, як Spectre?
- Як атакі па часе выкарыстоўваюць варыяцыі ў часе выканання для атрымання канфідэнцыйнай інфармацыі з сістэмы?
- Што такое таймінгавая атака?