Some random GrafanCon EU 2k18 Notes – Telegram
Some random GrafanCon EU 2k18 Notes
73 subscribers
312 photos
9 files
54 links
Заметки по докладам на которые я пошел (начинаются с #talk) и флуд фоточками.

Связаться с автором можно так: @Civiloid
Download Telegram
если мы выполним невилидные инструкции - то ничего не случится пока не поймем в какую втеку попали
Предполагается что из кода программы не узнать было ли предсказание успешным или нет
Предсказатель ветвлений так или иначе записывает историю
ер если мы встретили 10 раз условие true значит в 11ый вероятно будет true
в некоторых случаях даже может быть предсказатель закончится ли цикл
чтобы не хранить полный адрес каждого ветвлений - хранится только часть
минус - если есть 2 процесса у которых так получилось что кусок адреса совпал, предсказатель не сможет сказать какое приложение выполняется
И теперь мы поговорим про Meltdown и Spectre
Их нашли параллельно в нескольких проектах - в академических исследованиях и в google project zero
Кстати пример side-channel атаки не в цпу - можно было посмотреть свежозарегистрированные домены и найти домен для spectre/meltdown еще в декабре
В новых ядрах есть /sys/devices/system/cpu/vulnerabilities/*
где есть инфа о том что ядро думает о уязвимостях процессора и их mitigation'е (пофиксить их можно в ряде случаев только заменой железа, чего не случиться)
Meltdown
Вспомни что если speculative exectuion случился и произошел exception - то он не вернется если if не выполнится по факту
В упрощенном виде - можно замерять время выполнения попытки доступа к кэшу
и по этому делать выводы есть ли данные из какого-то адреса в кэше
сами данные прочитать впрочем пока еще нельзя
(лучше за подробностями почитать презентацию или одну из многочисленных статей)
Spectre
Есть концепт Gadget - это кусок кода который уже существует в программе, но который не должен выполняться. А мы влияем на состояние системы чтобы он таки выполнился.
Пример:
if (untrusted_offset < limit ) {
trusted_value = trusted_data[untrusted_offset];
tmp = other_data[(trusted_value)&mask];
...
}
процессор может продолжить выполнение кода даже если не шибко нужно