Size: a a a

IT KPI C/С++ ХВ (хорошо, что не UB)

2018 January 16

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
там побольше оптимизаций думаю
источник

TK

Tihran Katolikian in IT KPI C/С++ ХВ (хорошо, что не UB)
окей, спасибо. Может в доках покопаюсь
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
по дефолту проц предсказывает бранч рандомно
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
а этим ты ему задаешь изначальное предсказание
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
именно оно будет загружено в конвейер ядра
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
Rabu
именно оно будет загружено в конвейер ядра
так было лет 10 назад, сейчас уже нихуя
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
если бы было так как ты написал - мельтдаун/спектр (не помню что из них) абузились бы вообще на изи
источник

RI

Rostyslav Ivanika in IT KPI C/С++ ХВ (хорошо, что не UB)
@susume_tomorrow , твоя програмка для подсветки но переписана чтоб использовать fscanf вместо fgetc. Выглядит акуратнее, правда?
источник
2018 January 17

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
bohdan ivashko
если бы было так как ты написал - мельтдаун/спектр (не помню что из них) абузились бы вообще на изи
чего? у конвейера есть функция очистки, а происходит так, как я сказал
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
Rostyslav Ivanika
@susume_tomorrow , твоя програмка для подсветки но переписана чтоб использовать fscanf вместо fgetc. Выглядит акуратнее, правда?
спасибо
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
Rabu
чего? у конвейера есть функция очистки, а происходит так, как я сказал
нет, все предсказания уже лет 10 как происходят динамически на современных процах.
если бы билтин експект явно говорил процу что именно предсказывать, то для спектра не тренировали бы бренч предиктор перед использованием уязвимости, а просто бы абузили билтин експект.
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
bohdan ivashko
нет, все предсказания уже лет 10 как происходят динамически на современных процах.
если бы билтин експект явно говорил процу что именно предсказывать, то для спектра не тренировали бы бренч предиктор перед использованием уязвимости, а просто бы абузили билтин експект.
а вот тут не надо, защитой памяти занимается не конвейер и не предиктор
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
Rabu
а вот тут не надо, защитой памяти занимается не конвейер и не предиктор
да, но абузится именно предиктор. сначала он тренируется так чтоб он предполагал что он зайдет именно в нужный бранч, потом в какой-то момент даные меняются так чтоб в этот бранч ты не зашел, а в этом бранче произошло чтение недоступной памяти. предиктор предсказывает что ты зайдешь в этот бранч и проц читает левую память -> бросает исключение, но потом оказывается что это предиктор ошибся -> чтения не должно было быть -> исключение бросать не надо, но некоторое время эти данные еще будут в кеше и дальше уже идет абуз как у мельтдауна, если не ошибаюсь
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
уязвимость завязана на спекулятивном выполнении и предсказывании бранчей
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
защитой то занимаются не они, но используется то, что если ты что-то не то прочитал, то тебя не мгновенно тыкают в это мордочкой и ты можешь успеть еще что-то сделать
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
bohdan ivashko
да, но абузится именно предиктор. сначала он тренируется так чтоб он предполагал что он зайдет именно в нужный бранч, потом в какой-то момент даные меняются так чтоб в этот бранч ты не зашел, а в этом бранче произошло чтение недоступной памяти. предиктор предсказывает что ты зайдешь в этот бранч и проц читает левую память -> бросает исключение, но потом оказывается что это предиктор ошибся -> чтения не должно было быть -> исключение бросать не надо, но некоторое время эти данные еще будут в кеше и дальше уже идет абуз как у мельтдауна, если не ошибаюсь
доступ к кешу регулируется так само, как и доступ отображаемой в него страницы памяти
источник

R

Rabu in IT KPI C/С++ ХВ (хорошо, что не UB)
есть предположение*, что уязвимость даёт многопоточное исполнение однопоточной программы, и в конвейер параллельно загружается проверка и то, что после неё
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
Rabu
доступ к кешу регулируется так само, как и доступ отображаемой в него страницы памяти
окееей, после того как ты считал защищенное значение, ты считываешь элемент с большого массива, индексом используя считанное защищенное значение. дальше после того как обработалось уже исключение, ты уже поэлементно считываешь свой массив и замеряешь время доступа. у одного элемента оно будет значительно ниже т.к. он уже закеширован - индекс этого элемента и есть твое значение.
конечно в реальности там все еще сложнее, но это базовая схема
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
Rabu
есть предположение*, что уязвимость даёт многопоточное исполнение однопоточной программы, и в конвейер параллельно загружается проверка и то, что после неё
ну как бы да
источник

bi

bohdan ivashko in IT KPI C/С++ ХВ (хорошо, что не UB)
и это потом абузится вот как я описал
источник