This article needs additional citations for verification. (September 2007) |
Exec Shield — проект, начатый в Red Hat , Inc в конце 2002 года с целью снижения риска червей или других автоматизированных удаленных атак на системы Linux. Первым результатом проекта стал патч безопасности для ядра Linux , который эмулирует бит NX на процессорах x86 , не имеющих собственной реализации NX в оборудовании. Хотя проект Exec Shield имел много других компонентов, некоторые называют этот первый патч Exec Shield.
Первый патч Exec Shield пытается пометить память данных как неисполняемую, а память программ как непереписываемую. Это подавляет множество эксплойтов безопасности , например, те, которые возникают из- за переполнений буфера и других методов, основанных на перезаписи данных и вставке кода в эти структуры. Exec Shield также обеспечивает некоторую рандомизацию макета адресного пространства для mmap () и heap base.
Патч дополнительно увеличивает сложность вставки и выполнения шеллкода , делая большинство эксплойтов неэффективными. Для полного использования exec-shield не требуется перекомпиляция приложения, хотя некоторые приложения ( Mono , Wine , XEmacs , Mplayer ) не полностью совместимы.
Другими функциями, появившимися в результате проекта Exec Shield, стали Position Independent Executables (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. [1] [2] Среди других участников проекта были Якуб Елинек, Ульрих Дреппер, Ричард Хендерсон и Арьян ван де Вен.
В 2007 году Молнар прокомментировал на LWN.net, что «части [exec-shield] были переданы в исходное состояние, но значительная часть — нет». [3]