Блокираторы поведения
Блокираторы поведения предотвращают выполнение определенных операций, которые практически всегда связаны с программными атаками.
Openwall. По существу, — заплатка для ядра Linux, усиливающая защиту ОС и включающая три блокиратора поведения.
Неисполняемый сегмент стека. В силу того что набор команд Intel x86 в известной степени является унаследованным, не позволяет разделять права на операции чтения и выполнения, касающиеся страниц виртуальной памяти, в силу чего защитить от исполнения сегменты данных в операционных системах на платформе x86 крайне сложно. Openwall рационально использует регистры сегментов x86 (они поддерживают раздельные атрибуты чтения и исполнения) для переразметки стека таким образом, чтобы препятствовать попытке выполнения данных в стеке. Пользователь, не обладающий правами root, не может создавать жесткую ссылку на файл, если этот файл ему не принадлежит. Такой подход позволяет предотвратить одну из форм атак с использованием временных файлов, при которой хакер создает ссылку на критически важный файл, так что привилегированная программа может уничтожить этот файл. Пользователь root не может обращаться к файлу через символьную ссылку. Это предотвращает еще одну форму атак с использованием временных файлов.
Две последние возможности реализованы в интерфейсе LSM в виде модуля OWLSM. OWLSM, получивший свое название от аббревиатуры Openwall (OWL) и LSM, поддерживает правило «никаких ptrace для процессов суперпользователя», что защищает от ошибок при обработке ptrace в ядре Linux.
Libsafe. Библиотека, созданная для стандартных функций glibc, проверяет корректность аргументов, предотвращая использование функций glibc для причинения вреда вызывающей программе [19]. Libsafe 2.0 может предотвращать использование дефектов, приводящих к переполнению буфера и некорректному использованию строки формата оператора printf, за счет прекращения выполнения функции, если она пытается переписать запись активации, которая вызывает функцию. Основное ограничение состоит в том, что данный механизм не действует, если программы скомпилированы с ключом fomit-frame-pointer (его часто применяют, чтобы предоставить компилятору GCC/x86 возможность зарезервировать еще один регистр).
RaceGuard. Атаки с использованием временных файлов организуются в тех случаях, когда хакер пытается использовать промежуток времени при создании файла с помощью привилегированных программ (setuid). При обычных операциях создания временных файлов всегда есть промежуток времени между моментом, когда программа проверяет существование файла, и моментом, когда она записывает данные в этот файл [20]. RaceGuard защищает от такой формы атаки, максимально сокращая время между проверкой существования и доступом к файлу, тем самым не позволяя хакеру «проскользнуть» между операциями чтения и записи [21]. Эффективный доступ реализуется за счет использования так называемой «оптимистической блокировки» (optimistic locking): разрешаются обе операции доступа, но вторая операция записи блокируется, если она фантастическим образом указывает на другой файл, а не на тот, который был использован при первом обращении [22]. RaceGuard реализуют в интерфейсе LSM.
Systrace. Гибридный инструментарий, объединяющий средства контроля доступа и блокиратор поведения для OpenBSD и NetBSD, как и SubDomain, позволяет системным администраторам указывать, к каким файлам может получить доступ каждая из программ. Кроме того, позволяет определять, какой системный вызов может выполнять программа, тем самым давая возможность реализовать определенный вид блокировки действий.
Содержание раздела