Атаки, использующие разыменование нулевого указателя
На 32-разрядной системе пользовательское пространство занимает нижние 3 Гбайт адресного пространства, а ядро занимает верхний 1 Гбайт. Причиной такого сожительства является эффективность, поскольку переключение между адресными пространствами обходится недешево.
Обычно такое размещение не вызывает никаких проблем. Ситуация меняется, когда взломщик получает возможность заставить ядро вызывать функции в пользовательском пространстве. Зачем ядру это делать? Понятно, что оно этого делать не должно. Но помните, мы говорили о дефектах? Ядро с дефектом может в редких и неудачных обстоятельствах случайно разыменовать нулевой указатель (NULL pointer). Например, оно может вызвать функцию, использующую указатель функции, который еще не был инициализирован. В последние годы в ядре Linux было обнаружено несколько таких дефектов. Разыменование нулевого указателя — дело грязное, поскольку обычно приводит к аварии. Результаты печальны для пользовательского процесса, поскольку программа терпит крах, но еще хуже они для ядра, поскольку при этом рушится вся система.
Иногда бывает еще хуже, и взломщик приобретает возможность инициировать разыменование нулевого указателя из пользовательского процесса. В таком случае он может обрушить систему в любой нужный ему момент. Но обрушивая систему, вы не получите высоких оценок от своих друзей-взломщиков — им нужно увидеть оболочку.
Обрушение происходит по той причине, что на нулевую страницу никакой код не отображается. Поэтому взломщик может использовать специальную функцию ттар, чтобы исправить ситуацию. С помощью ттар пользовательский процесс может потребовать от ядра отобразить память по конкретному адресу. После отображения страницы по адресу 0 взломщик может написать в этой странице шелл-код. И наконец, он запускает разыменование нулевого указателя, что приводит к выполнению шелл-кода с привилегиями ядра. Вот тогда будут получены высокие оценки.
В современных ядрах возможность отображения через ттар страницы с нулевым адресом уже отсутствует. Но даже при этом в преступном мире по-прежнему используются многие старые ядра. Более того, этот прием работает и с указателями, имеющими другие значения. При наличии ряда дефектов взломщик может внедрить собственный указатель в ядро и добиться его разыменования. Урок, который нужно вынести из рассмотрения этого средства атаки, заключается в том, что взаимодействия уровня «ядро — пользователь» могут возникать в самых неожиданных местах и оптимизационные меры, направленные на повышение производительности, могут позже вылиться в преследования в виде атак.
9.7.5.
Еще по теме Атаки, использующие разыменование нулевого указателя:
- УКАЗАТЕЛЬ СОКРАЩЕНИЙ
- Алфавитно-предметный указатель
- Алфавитно-предметный указатель
- Алфавитно-предметный указатель
- АЛФАВИТНО-ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
- 3.6. ИСПОЛЬЗУЙТЕ ТОЛЬКО НАСТОЯЩЕЕ ВРЕМЯ
- 4.2.2. Используйте или потеряете
- 3. Используйте имя Бога
- Используйте имя Бога.
- Используйте дуальные перспективы.
- ЧТОБЫ СТАТЬ БОГАТЫМ, ИСПОЛЬЗУЙТЕ СИЛУ ВООБРАЖЕНИЯ
- 3 Используйте активное программирование, «подключая» к работе голос и движение.
- 1 . Когда слушаете собеседника, используйте выражение глаз, мимику и отдельные жесты.
- Статья 54. Управление имуществом, которое используется в предпринимательской деятельности, органом опеки и попечительства