ASLR (англ. address space layout randomization — «рандомізація розміщення адресного простору») — технологія, яка застосовується в операційних системах, при використанні якої випадковим чином змінюється розташування в адресному просторі процесу важливих структур даних, а саме образів виконуваного файлу, підвантажуваних бібліотек, купи і стека.

Технологія ASLR створена для ускладнення експлуатації декількох типів дефектів. Наприклад, якщо за допомогою переповнення буфера або іншого методу атакуючий отримає можливість передати управління за довільною адресою, йому слід буде вгадати, за якою саме адресою розташований стек, купа або інші структури даних, в які можна помістити шелл-код. Подібні проблеми виникнуть і при атаці типу «повернення в бібліотеку» (return-to-libc): атакуючому не буде відома адреса, за якою завантажена бібліотека. У наведених прикладах від атакуючого приховані конкретні адреси, і, якщо не вдасться вгадати правильну адресу, додаток швидше за все аварійно завершиться, тим самим позбавивши атакуючого можливості повторної атаки і привертаючи увагу системного адміністратора.

Реалізації ред.

OpenBSD ред.

Розробники OpenBSD реалізували ASLR одними з перших. ASLR включена за замовчуванням.

Linux ред.

У ядрі Linux простий варіант ASLR є з 2005 року (з версії 2.6.12). Більш складні і повні варіанти ASLR пропонуються у вигляді патчів (PaX, ExecShield та ін). В дистрибутивах, що містять у назві слово «hardened», а також в сучасних версіях дистрибутиву Ubuntu, потужні варіанти включені за замовчуванням.

Для роботи ASLR (для розміщення виконуваних файлів в пам'яті за випадковим адресами) виконувані файли повинні бути скомпільовані в режимі position-independent executable (виконувані файли, що цілком складаються з позиційно-незалежного коду[en]).

Microsoft Windows ред.

В ОС Windows технологія ASLR підтримується починаючи з Windows Vista (2007 рік) [1] для виконуваних файлів і бібліотек, зібраних зі спеціальними прапорами.

ASLR також підтримується в пізніших версіях Windows, таких як Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows 8.1. ASLR не застосовується для додатків, зібраних без спеціальних прапорів, а також при роботі в режимі сумісності з попередніми версіями Windows.

В ОС Windows XP та Windows Server 2003 ASLR можна включити для будь-яких додатків за допомогою набору засобів Microsoft EMET[2] (Enhanced Mitigation Experience Toolkit).

Mac OS X ред.

Деяка випадковість при завантаженні бібліотек додана в ОС Mac OS X v10.5 Leopard (2007 рік)[3]. В OS X 10.8 Mountain Lion (2012) ASLR є частиною ядра системи[4].

iOS ред.

В ОС iOS технологія ASLR використовується, починаючи з версії 4.3[5]. Для ядра використовується з iOS 6[6].

Недоліки ред.

Для використання ASLR виконувані файли потрібно збирати зі спеціальними прапорами. В результаті в коді не будуть використовуватися постійні адреси, але при цьому:

  • збільшиться розмір коду виконуваних файлів;
  • збільшиться час завантаження в пам'ять кожного виконуваного файлу;
  • виникне додаткова несумісність з ПО і бібліотеками, розробленим під версії ОС без ASLR.

Крім того, захист можна обійти через виснаження пам'яті[7] або методи Heap Spray[8].

Примітки ред.

  1. Windows ISV Software Security Defenses. Msdn.microsoft.com. Архів оригіналу за 18 квітня 2012. Процитовано 10 квітня 2012.
  2. Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) ISBN 978-0-7356-2530-3
  3. Ryan Naraine (17 жовтня 2007). Memory randomization (ASLR) coming to Mac OS X Leopard. ZDNet. Архів оригіналу за 15 серпня 2020. Процитовано 3 лютого 2020. {{cite web}}: Cite має пусті невідомі параметри: |7= та |3= (довідка)
  4. OS X Mountain Lion Core Technologies Overview (PDF). June 2012. Архів оригіналу (PDF) за 10 липня 2012. Процитовано 25 липня 2012.
  5. Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows. Архів оригіналу за 27 лютого 2017. Процитовано 19 квітня 2018. iOS 4.3 introduces Address Space Layout Randomization (ASLR)
  6. Архівована копія (PDF). Архів оригіналу (PDF) за 21 вересня 2020. Процитовано 19 квітня 2018.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  7. Простой обход защиты ASLR в Windows 7/8. Архів оригіналу за 19 квітня 2018. Процитовано 19 квітня 2018.
  8. Архівована копія (PDF). Архів оригіналу (PDF) за 20 квітня 2018. Процитовано 19 квітня 2018.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)

Література ред.

  • Фленов М. Е. Программирование на C++ глазами хакера. 2 изд. — БХВ-Петербург, 2011. — С. 53. — ISBN 978-5-9775-0303-7.
  • Саша Голдштейн, Дима Зурбалев, Идо Флатов. Оптимизация приложений на платформе .NET с использованием языка C#. — ДМК Пресс, 2014. — С. 524. — ISBN 978-5-457-83128-5.

Посилання ред.