<<
>>

Указатели на несуществующие объекты

Третьей технологией искажения памяти является весьма популярный в преступном мире прием, называемый атакой с использованием указателей на несуществующие объекты (dangling pointer attack).
В простом проявлении этой технологии разобраться совсем нетрудно, но вот создание вредоносного кода может оказаться непростой задачей. C и C++ позволяют программе распределять память под кучу, используя вызов функции malloc, при котором возвращается указатель на только что выделенную часть памяти. Позже, когда программа больше в ней не нуждается, она вызывает функцию free для освобождения памяти. Ошибка указателя на несуществующий объект происходит, когда программа случайно использует память после того, как она уже ее освободила. Рассмотрим следующий код, который дискриминирует весьма пожилых людей:

1. int *A = (int *) malloc (128); /* выделение места под 128 целых

чисел */

2. int year of birth = read user input (); /* считывание целого числа из

стандартного ввода */

3. if (input < 1900) {

4.

printf ("Ошибка, год рождения должен быть больше 1900 \n");

5. free (A);

6. } else {

7. ...

8. /* совершение полезных действий над содержимым массива A */

9. ...

10. }

11. ... /* множество других инструкций, содержащих, malloc и free */

12. A[0] = year of birth;

Код неверен. Не только из-за возрастной дискриминации, но также потому, что в строке 12 он может присвоить значение элементу массива A после того, как выделенная под него память уже была освобождена (в строке 5). Указатель A все еще будет вести на тот же адрес, но его дальнейшее использование уже не предполагается. Фактически память теперь уже могла быть повторно использована другим буфером (см. строку 11).

Вопрос в следующем: что же произойдет? Код в строке 12 будет пытаться обновить содержимое памяти, которая уже больше не используется для массива A, и может изменить другую структуру данных, которая теперь находится в этой области памяти. В общем, это искажение памяти ничего хорошего не принесет, но будет еще хуже, если взломщик сможет манипулировать программой таким образом, чтобы она поместила в эту память конкретный объект кучи, где первое целочисленное значение этого объекта содержит, скажем, уровень авторизации пользователя. Это не всегда просто сделать, но есть технологии (известные как фэншуй кучи — heap feng shui), помогающие взломщикам вытаскивать такие значения. Фэншуй является древнекитайским искусством ориентации зданий, гробниц и памяти в куче благоприятным образом. Если мастер цифрового фэншуя преуспеет в своей работе, то после этого он сможет установить для уровня авторизации любое значение (впрочем, не более чем 1900).

9.7.4.

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

Еще по теме Указатели на несуществующие объекты:

  1. УКАЗАТЕЛЬ СОКРАЩЕНИЙ
  2. Алфавитно-предметный указатель
  3. Алфавитно-предметный указатель
  4. АЛФАВИТНО-ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
  5. Алфавитно-предметный указатель
  6. Статья 298. Незаконное проведение поисковых работ на объекте археологического наследия, уничтожение, разрушение или повреждение объектов культурного наследия
  7. ОБЪЕКТ: ПРИВЯЗАННОСТЬ
  8. ОБЪЕКТ-ЛИБИДО
  9. ОБЪЕКТ
  10. НАУКА: ОБЪЕКТ
  11. ОБЪЕКТ РЕФЕРЕНТНОСТИ
  12. Тема 6. Объекты гражданских прав
  13. ОБЪЕКТ СЕКСУАЛЬНЫЙ: ВЫБОР
  14. 2. Объект аренды.
  15. Тема 11. Объекты гражданских правоотношений
  16. ОБЪЕКТ СЕКСУАЛЬНЫЙ: ВЫБОР: ТИП