arech: (Default)
[personal profile] arech
Гениально просто.

; rcx = a protected kernel memory address
; rbx = user space массив размером 256*PageSize(==4096)
mov al, byte [rcx] ; read from forbidden kernel address
shl rax, 0xc ; multiply the result from the read operation with 4096 (==PageSize)
mov rbx, qword [rbx + rax] ; touch the user space array at the offset that we just calculated

1. Из-за спекулятивного выполнения инструкций page fault от попытки чтения запрещённого ядерного пространства может накрыть не сразу в момент чтения (первая инструкция), а позднее. Достаточно часто - после того, как будет выполнена третья инструкция с чтением в rbx страницы массива с индексом, соответсвующим значению байта данных al, прочитанного из ядра.

2. Если мы побеспокоимся, чтобы до выполнения этого кода все страницы нашего юзер-мод массива были бы не в кэше, то после выполнения кода одна страница, соответствующая прочитанному из ядра байту, окажется в кеше. Замерив скорость доступа ко всем страницам массива мы сможем узнать, что это была за страница.
...

PROFIT!!!


Спектр работает на тех же принципах определения значения по замеру времени доступа к адресуемым этм значением данным.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Profile

arech: (Default)
arech

October 2021

S M T W T F S
      12
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 24th, 2025 04:11 pm
Powered by Dreamwidth Studios