Здравствуйте, Pzz, Вы писали:
C>>Meltdown специфичен для Intel и позволяет из userspace-процесса прочитать всю физическую память, включая ядро и гипервизор. Защита только через KAISER для Линукса ( https://lwn.net/Articles/741878/ ) или аналогичное изменение для NT. AMD не подвержен конкретно этой уязвимости.
Pzz>А объясни, пожалуйста, мине, тупому, каким образом возможность разнюхать kernel pages layout из user space превращается в возможность прочитать содержимое ядерной памяти?
Можно организовать пробы, которые утекают по одному биту
содержимого. А одного бита со сдвигом уже достаточно, чтобы получить всё остальное. В результате, память читается со скоростью 500 килобайт в секунду.
Из моего понимания:
char *data = 0xFFFFa123123; // В ядре
if ((*data) & 0x01 != 0) { // Упадёт здесь
char *probe1 = 0x123123123; // В нашем адресном пространстве
*probe1 = 123;
} else {
char *probe1 = 0x234123412; // В нашем адресном пространстве
*probe1 = 234;
}
Этот код, естественно, падает на SIGSEGV. Но проблема в том, что CPU успевает таки спекулятивно исполнить одну из проб. И затем с помощью тестирования кэша можно обнаружить какая проба сработала.