Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Вторым китом является технология рандомизации адресного пространства – Address Space Layout Randomization или сокращенно ASLR. Если при каждом запуске программы непредсказуемым образом менять положение всех сегментов, хакер не сможет определить ни расположение shell-кода, ни адреса API-функций (это утверждение справедливо даже для тех клонах UNIX, в которых вызов APIфункций происходит через прерывание, например в Linux/i386, поскольку прикладные процессы общаются с ядром не напрямую, а через разделяемые библиотеки, придерживающиеся соглашения stdcall, и являющиеся своеобразным аналогом KERNEL32.DLL), следовательно, подмена адреса возврата не дает ничего кроме DoS. Пакет PaX позволяет рандомизовать основные сегменты ELF-файла (code, data, bss), кучу, библиотечные функции, стек потока, разделяемую память и стек ядра, короче устраивает настоящий хаос, в котором не остается ничего постоянного, за что можно было бы уцепиться. Ну или практически ничего.
Третий кит – PaX «дорабатывает» функцию mprotect
так, чтобы назначать x-атрибут могла только система. Никакой прикладной процесс
не может изменить атрибуты региона памяти с -x на +x. Также никакой регион
памяти не может иметь -x- и -w- атрибуты одновременно. Пакет PaX портирован на
множество систем, в том числе и… под Windows. Существует по меньшей мере два
приличных порта для NT – BufferShield (см. одноименную врезку) и StackDefender
(
Другой популярный пакет – Exec Shield (
Еще хуже дела обстоят в OpenBSD. Начиная с версии
3.3 ядро поддерживает механизм W^X (произносится как «W xor X»), который по
своему названию предотвращает одновременную установку атрибутов -x- и -w- на
любую область памяти, что по замыслу разработчиков должно серьезно озадачить
хакеров (
На самом деле эта защита элементарно обходится множественным вызовом функции mprotect. Сначала shell-код вызывает mprotect, устанавливая один лишь атрибут записи (если он не был установлен ранее), затем копирует shell-код через memcpy и вызывает mprotect еще раз, сбрасывая атрибут записи и присваивая себе права исполнения. Кстати говоря, в версии 3.3 W^X не работал на x86, поскольку у того отсутствует возможность задания x-атрибута на уровне страниц, однако, начиная с версии 3.4, этот недостаток был исправлен.