<<
>>

Атаки, использующие разыменование нулевого указателя

Несколькими сотнями страниц ранее, в главе 3, подробно рассматривалось управление памятью. Возможно, вы помните, как современные операционные системы вир- туализируют адресное пространство ядра и пользовательских процессов.
Перед тем как программа обращается к адресу в памяти, диспетчер памяти посредством таблиц страниц преобразует этот виртуальный адрес в физический. Обращение к неотображенным страницам невозможно. Представляется вполне логичным предположение, что адресное пространство ядра и адресное пространство пользовательского процесса совершенно разные, но так бывает не всегда. Например, в Linux ядро просто отображается в адресном пространстве каждого процесса, и всякий раз, когда ядро приступает к обработке системного вызова, оно запускается в адресном пространстве процесса.

На 32-разрядной системе пользовательское пространство занимает нижние 3 Гбайт адресного пространства, а ядро занимает верхний 1 Гбайт. Причиной такого сожительства является эффективность, поскольку переключение между адресными пространствами обходится недешево.

Обычно такое размещение не вызывает никаких проблем. Ситуация меняется, когда взломщик получает возможность заставить ядро вызывать функции в пользовательском пространстве. Зачем ядру это делать? Понятно, что оно этого делать не должно. Но помните, мы говорили о дефектах? Ядро с дефектом может в редких и неудачных обстоятельствах случайно разыменовать нулевой указатель (NULL pointer). Например, оно может вызвать функцию, использующую указатель функции, который еще не был инициализирован. В последние годы в ядре Linux было обнаружено несколько таких дефектов. Разыменование нулевого указателя — дело грязное, поскольку обычно приводит к аварии. Результаты печальны для пользовательского процесса, поскольку программа терпит крах, но еще хуже они для ядра, поскольку при этом рушится вся система.

Иногда бывает еще хуже, и взломщик приобретает возможность инициировать разыменование нулевого указателя из пользовательского процесса. В таком случае он может обрушить систему в любой нужный ему момент. Но обрушивая систему, вы не получите высоких оценок от своих друзей-взломщиков — им нужно увидеть оболочку.

Обрушение происходит по той причине, что на нулевую страницу никакой код не отображается. Поэтому взломщик может использовать специальную функцию ттар, чтобы исправить ситуацию. С помощью ттар пользовательский процесс может потребовать от ядра отобразить память по конкретному адресу. После отображения страницы по адресу 0 взломщик может написать в этой странице шелл-код. И наконец, он запускает разыменование нулевого указателя, что приводит к выполнению шелл-кода с привилегиями ядра. Вот тогда будут получены высокие оценки.

В современных ядрах возможность отображения через ттар страницы с нулевым адресом уже отсутствует. Но даже при этом в преступном мире по-прежнему используются многие старые ядра. Более того, этот прием работает и с указателями, имеющими другие значения. При наличии ряда дефектов взломщик может внедрить собственный указатель в ядро и добиться его разыменования. Урок, который нужно вынести из рассмотрения этого средства атаки, заключается в том, что взаимодействия уровня «ядро — пользователь» могут возникать в самых неожиданных местах и оптимизационные меры, направленные на повышение производительности, могут позже вылиться в преследования в виде атак.

9.7.5.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Атаки, использующие разыменование нулевого указателя:

  1. УКАЗАТЕЛЬ СОКРАЩЕНИЙ
  2. Алфавитно-предметный указатель
  3. Алфавитно-предметный указатель
  4. Алфавитно-предметный указатель
  5. АЛФАВИТНО-ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
  6. 3.6. ИСПОЛЬЗУЙТЕ ТОЛЬКО НАСТОЯЩЕЕ ВРЕМЯ
  7. 4.2.2. Используйте или потеряете
  8. 3. Используйте имя Бога
  9. Используйте имя Бога.
  10. Используйте дуальные перспективы.
  11. ЧТОБЫ СТАТЬ БОГАТЫМ, ИСПОЛЬЗУЙТЕ СИЛУ ВООБРАЖЕНИЯ
  12. 3 Используйте активное программирование, «подключая» к работе голос и движение.
  13. 1 . Когда слушаете собеседника, используйте выражение глаз, мимику и отдельные жесты.
  14. Статья 54. Управление имуществом, которое используется в предпринимательской деятельности, органом опеки и попечительства