Я пишу, чтобы узнать о возможности отслеживания доступа к таблице страниц (с точки зрения «индекса» каждого доступа к таблице страниц) обычного пользовательского приложения 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
. Это правильно? Заранее благодарим вас за любые предложения или комментарии.
Кроме того, я думаю, что хочу отметить одну вещь: концептуально мне не нужен «точный» идентификатор каждого идентификатора таблицы страниц данных, а просто число («индекс»), чтобы различать доступ к различным страницам данных. Это должно обеспечить концептуально идентичный объем информации по сравнению с их атаками.
pin
? Что вы имеете в виду под индексом? Чего вы точно пытаетесь достичь? Вы пишете модуль ядра? Вы работаете с пользовательской программой? Просьба уточнить. Сказать, что индекс таблицы страниц сам по себе не имеет большого значения, поскольку в Linux есть несколько уровней таблиц страниц, и каждый адрес соответствует индексу в каждом из них. - person Marco Bonelli   schedule 05.05.2020