Доступ к таблице страниц трассировки процесса Linux - PullRequest
0 голосов
/ 05 мая 2020

Я пишу, чтобы узнать о возможности отслеживания доступа к таблице страниц (в терминах «индекса» доступа к каждой таблице страниц) обычного Linux пользовательского приложения. По сути, я пытаюсь воспроизвести эксплуатацию, упомянутую в этой исследовательской статье (https://www.ieee-security.org/TC/SP2015/papers-archived/6949a640.pdf). В частности, обращения к странице данных должны быть записаны для использования и вывода секретов программы.

Я понимаю систему Linux, 64-битную архитектуру x86, таблицу страниц размер 4К. И я использовал pin (https://software.intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool) для регистрации трассировки адресов для всего доступа к виртуальной памяти. Итак, могу ли я просто вычислить «индекс» каждого доступа к таблице страниц данных , используя следующее правило преобразования:

index = address >> 15 

Начиная с 4KB = 2 ^ 15. Это правильно? Заранее благодарим вас за любые предложения или комментарии.

Кроме того, я думаю, что я хочу отметить одну вещь: концептуально мне не нужен «точный» идентификатор каждого идентификатора таблицы страницы данных, а просто число («индекс») для различения guish доступа к разным страницам данных. Это должно предоставить концептуально идентичный объем информации по сравнению с их атаками.

1 Ответ

1 голос
/ 05 мая 2020

Хорошо, так что вам действительно не нужен «индекс», а просто какой-то уникальный идентификатор для различения guish разных страниц в виртуальном адресе процесса.

В таком случае, тогда вы можете просто сделать address >> PAGE_SHIFT. В x86 со страницами 4 КБ PAGE_SHIFT равно 12, поэтому вы можете сделать:

page_id = address >> 12

Тогда, если address1 и address2 соответствуют одной и той же странице, page_id будет одинаковым для обоих адресов.

В качестве альтернативы, для достижения того же результата вы можете ввести address & PAGE_MASK, где PAGE_MASK - это просто 0xfffffffffffff000 (то есть ~((1UL << PAGE_SHIFT) - 1)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...