ASLR

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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. Процитовано 10 April 2012. 
  2. Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) ISBN 978-0-7356-2530-3
  3. Ryan Naraine (October 17, 2007). Memory randomization (ASLR) coming to Mac OS X Leopard. ZDNet. Процитовано 2020-02-03. 
  4. OS X Mountain Lion Core Technologies Overview. June 2012. Процитовано 25 July 2012. 
  5. Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows. «iOS 4.3 introduces Address Space Layout Randomization (ASLR)» 
  6. http://people.oregonstate.edu/~jangye/assets/papers/2016/jang:drk-bh.pdf
  7. Простой обход защиты ASLR в Windows 7/8
  8. https://www.owasp.org/images/0/01/OWASL_IL_2010_Jan_-_Moshe_Ben_Abu_-_Advanced_Heapspray.pdf

Література[ред. | ред. код]

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

Посилання[ред. | ред. код]