Введение

Проект, направленный на снижение риска атак на системы Linux

Exec Shield — это проект, начатый в Red Hat, Inc. в конце 2002 года с целью снижения риска распространения червей и других автоматизированных удалённых атак на системы Linux. Первым результатом проекта стал патч безопасности для ядра Linux, эмулирующий бит NX на процессорах x86, не имеющих аппаратной реализации NX. Несмотря на то, что проект Exec Shield включал в себя множество других компонентов, некоторые пользователи называют этот первый патч Exec Shield. Первый патч Exec Shield пытается пометить память данных как неисполняемую, а память программ как недоступную для записи. Это подавляет многие уязвимости безопасности, в том числе возникающие из-за переполнения буфера и других техник, основанных на перезаписи данных и внедрении кода в эти структуры. Exec Shield также обеспечивает рандомизацию адресного пространства для базовых адресов mmap и кучи. Кроме того, патч усложняет внедрение и выполнение шелл-кода, делая большинство эксплойтов неэффективными. Для полноценного использования Exec Shield перекомпиляция приложений не требуется, хотя некоторые приложения (Mono, Wine, XEmacs, Mplayer) не полностью совместимы с ним. Среди других разработок, появившихся в рамках проекта Exec Shield, — позиционно-независимые исполняемые файлы (PIE), патч рандомизации адресного пространства для ядра Linux, широкий набор внутренних проверок безопасности glibc, затрудняющих эксплуатацию уязвимостей в куче и при работе со строками формата, функция GCC Fortify Source, а также портирование и интеграция функции защиты стека GCC.

Реализация

Exec Shield работает на всех процессорах x86, использующих ограничение сегмента кода. Благодаря принципу работы Exec Shield, он отличается легковесностью, однако не обеспечивает полной защиты от произвольных схем организации виртуальной памяти. Если ограничение CS увеличено, например, с помощью вызова mprotect для разрешения выполнения кода в более высоких областях памяти, то защита теряется для областей памяти ниже этого ограничения. Инго Молнар указал на это в переписке по электронной почте. Большинство приложений в этом плане достаточно корректны: стек (важная часть) по крайней мере располагается выше загруженных библиотек и не становится исполняемым, если это не предусмотрено явными вызовами приложения. По состоянию на август 2004 года ни один из проектов Exec Shield не пытается обеспечить защиту памяти путем ограничения mprotect на какой-либо архитектуре; хотя память изначально может быть не предназначенной для выполнения, она может стать таковой позже, поэтому ядро позволяет приложению помечать страницы памяти как доступные для записи и для выполнения одновременно. Однако, в сотрудничестве с проектом Security Enhanced Linux (SELinux), стандартная политика для дистрибутива Fedora Core запрещает такое поведение для большинства исполняемых файлов, за исключением нескольких исключений, сделанных для обеспечения совместимости.

История

Exec Shield был разработан разными специалистами в Red Hat; первый патч был выпущен Инго Молнар из Red Hat и впервые представлен в мае 2003 года. Он включен в состав Fedora Core 1–6 и Red Hat Enterprise Linux, начиная с версии 3. Среди других участников разработки — Якуб Елинек, Ульрих Дреппер, Ричард Хендерсон и Арьян ван де Вен. Молнар отметил в 2007 году на LWN.net, что «некоторые части [Exec Shield] были включены в основную ветку разработки, но значительная часть так и не вошла в нее».