<<
>>

Обход ASLR

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

Наиболее важная атака на ASLR формируется за счет раскрытия информации о памяти. В этом случае взломщик использует уязвимость не для непосредственного получения контроля над программой, а для организации утечки информации о распределении памяти, которой затем можно воспользоваться для использования другой уязвимости.

В качестве простого примера рассмотрим следующий код:

1. void C() {

2. int index;

3. int prime [16] = { 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };

4. printf ("Какое простое число из показанных здесь вы хотели бы видеть?");

5. index = read user input ();

6. printf ("На позиции %d находится простое число %d\n", index,

prime[index]);

В коде содержится вызов чтения пользовательского ввода, где это чтение не является частью стандартной библиотеки языка C. Мы просто предполагаем, что эта функция чтения существует и возвращает целочисленное значение, набранное пользователем в командной строке. Мы также предполагаем, что в ней нет ошибок. Но даже при этом из данного кода довольно просто организовать утечку информации. Нужно лишь предоставить индекс больше, чем 15, или меньше, чем 0. Поскольку программа индекс не проверяет, она с готовностью вернет значение любого целого числа из памяти.

Для успешной атаки зачастую вполне достаточно адреса одной функции. Причина в том, что хотя место, куда загружается каждая библиотека, может быть выбрано произвольно, относительное смещение для каждой отдельной функции от этой позиции имеет, как правило, фиксированное значение. Иначе говоря, узнав, где находится одна функция, вы узнаете, где находятся все остальные. Даже если это не так, то при наличии всего лишь одного адреса кода зачастую довольно просто отыскать многие другие адреса, что и показано в работе Snow et al. (2013).

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

Еще по теме Обход ASLR:

  1. Почему надо обходиться без "надо"
  2. РЕВ
  3. ИДЕНТИФИКАЦИЯ НАРЦИССИЧЕСКАЯ
  4. Ретроградный Юпитер в знаке Весов
  5. Помоги нам, Господи?
  6. ОЧЕРК ОДИННАДЦАТЫЙ ЭКОНОМИКА И ЭКОНОМИСТЫ
  7. Шаг пятый: последний секрет
  8. Управитель Солнце.
  9. Ретроградный Марс в знаке Рыб
  10. В знаке Весов
  11. ОЧЕРК ДЕСЯТЫЙ СОЦИОЛОГИЯ И ЮМОР
  12. Закон посоха.