Функции безопасности OpenBSD - OpenBSD security features
В OpenBSD Операционная система фокусируется на безопасность и развитие функции безопасности.[1][2]:xxvii[3] По словам автора Майкла Лукаса, OpenBSD «широко рассматривается как самая безопасная операционная система, доступная где угодно, при любых условиях лицензирования».[2]:XXIX
API и изменения сборки
Ошибки и недостатки безопасности часто вызваны ошибкой программиста. Распространенный источник ошибок - неправильное использование strcpy
и strcat
нить функции в C язык программирования. Есть две общие альтернативы: strncpy
и strncat
, но они могут быть трудными для понимания и их легко использовать неправильно,[4][5] поэтому разработчики OpenBSD Тодд С. Миллер и Тео де Раадт разработал strlcpy
и strlcat
функции.[6] Эти функции предназначены для того, чтобы программистам было сложнее случайно оставить буферы незавершенными или позволить им переполниться.[7] Они были приняты проектами NetBSD и FreeBSD, но не были приняты Библиотека GNU C.[8]
В OpenBSD компоновщик был изменен, чтобы выдавать предупреждение, когда небезопасные функции обработки строк, Такие как strcpy
, strcat
, или же спринт
, найдены. Все вхождения этих функций в дерево исходных текстов OpenBSD были заменены.[нужна цитата ] Кроме того, проверка статических границ включен в OpenBSD в попытке найти другие распространенные ошибки программирования во время компиляции.[9] Другое, связанное с безопасностью API разработанные проектом OpenBSD включают issetugid
[10] и arc4random
.[11]
Рандомизация ядра
В электронном письме от июня 2017 года Тео де Раадт заявил, что проблема стабильных систем заключается в том, что они могут работать месяцами. Хотя в ядре присутствует значительная рандомизация, некоторые ключевые адреса остаются неизменными. Текущий проект изменяет компоновщик так что при каждой загрузке происходит повторное связывание ядра, а также все другие рандомизации. Это отличается от ядра ASLR; в электронном письме он заявляет, что «В результате каждое новое ядро уникально. Относительные смещения между функциями и данными уникальны ... [Текущее] изменение является каркасом, чтобы гарантировать, что вы загружаете только что связанное ядро при каждой перезагрузке .. . так что новое случайное ядро можно связать вместе ... На быстрой машине это занимает меньше секунды ... При перезагрузке запускается новое ядро, и еще одно ядро создается для следующей загрузки. Внутренние дельты между функциями внутри ядра находятся не там, где их ожидает злоумышленник, поэтому ему понадобится лучшая утечка информации ».[12]
Защита памяти
OpenBSD объединяет несколько технологий, помогающих защитить операционную систему от таких атак, как переполнение буфера или же целочисленные переполнения.
Разработано Хироаки Это, ProPolice это GCC расширение, предназначенное для защиты приложений от сокрушающие атаки.[13] Он делает это с помощью ряда операций: переменные локального стека переупорядочиваются для размещения буферов после указателей, защищая их от повреждения в случае переполнения буфера; указатели из аргументов функции также помещаются перед локальными буферами; и канарейка Значение помещается после локальных буферов, которые при выходе из функции иногда можно использовать для обнаружения переполнения буфера. ProPolice выбирает, защищать буфер или нет, на основе автоматической эвристики, которая определяет, насколько он уязвим, снижая накладные расходы защиты на производительность.[нечеткий ] Он был интегрирован в версию GCC OpenBSD в декабре 2002 г. и впервые стал доступен в OpenBSD 3.3;[14] он был применен к ядру в версии 3.4.[15] Расширение работает на всех архитектурах ЦП, поддерживаемых OpenBSD, и включено по умолчанию, поэтому любой скомпилированный код C будет защищен без вмешательства пользователя.[16]
В мае 2004 года OpenBSD на SPARC платформа получила дополнительную защиту стека в виде StackGhost. Это позволяет использовать функции архитектуры SPARC для предотвращения эксплуатации переполнения буфера.[17] Поддержка SPARC64 была добавлена в -Текущий в марте 2005 г.
Представлен OpenBSD 3.4 W ^ X, схема управления памятью, гарантирующая, что память может быть либо записываемой, либо исполняемой, но никогда и тем и другим, что обеспечивает еще один уровень защиты от переполнения буфера. Хотя это относительно легко реализовать на такой платформе, как x86-64, который имеет аппаратную поддержку Бит NX, OpenBSD - одна из немногих ОС, поддерживающих это на общей платформе i386,[18] в котором отсутствуют встроенные элементы управления выполнением для каждой страницы.
В процессе разработки релиза 3.8 были внесены изменения в маллок
функции управления памятью. В традиционных операционных системах Unix маллок
выделяет больше памяти за счет расширения сегмента данных Unix, что затрудняет реализацию надежной защиты от проблем безопасности.[нечеткий ] В маллок
реализация сейчас в OpenBSD использует mmap
системный вызов, который был изменен таким образом, что он возвращает случайные адреса памяти и гарантирует, что различные области не отображаются рядом друг с другом. Кроме того, распределение небольших блоков в общих областях теперь рандомизировано, и свободный
функция была изменена, чтобы немедленно вернуть память ядру, а не оставлять ее отображенной в процессе. Также был добавлен ряд дополнительных необязательных проверок для помощи в разработке.[нужна цитата ] Эти функции упрощают обнаружение программных ошибок и затрудняют их использование: вместо того, чтобы повреждать память или игнорировать недействительный доступ, они часто приводят к ошибка сегментации и прерывание процесса. Это выявило несколько проблем с программным обеспечением, работающим на OpenBSD 3.8, особенно с программами, считывающими за пределами начала или конца буфера, тип ошибки, который раньше не обнаруживался напрямую, но теперь может вызвать ошибку.[нужна цитата ] На реализацию этих возможностей потребовалось более трех лет без значительного снижения производительности.
Криптография и рандомизация
Одна из целей проекта OpenBSD - интеграция средств и программного обеспечения для сильная криптография в основную операционную систему. С этой целью предоставляется ряд низкоуровневых функций, в том числе источник сильных псевдослучайные числа;[19] встроенный криптографические хеш-функции и трансформирует; и поддержка криптографического оборудования (Криптографическая структура OpenBSD ). Эти возможности используются во всем OpenBSD, включая bcrypt алгоритм хеширования паролей[20] происходит от Брюс Шнайер с Blowfish блочный шифр, который использует процессор Blowfish ключевой график, изготовление атаки методом перебора менее практично.
Для защиты конфиденциальной информации, такой как пароли от утечки на диск, где они могут сохраняться в течение многих лет, OpenBSD поддерживает шифрование раздела подкачки. Пространство подкачки разделено на множество небольших областей, каждой из которых назначается собственный ключ шифрования: как только данные в какой-либо области больше не требуются, OpenBSD безопасно удаляет их, отбрасывая ключ шифрования.[21] Эта функция включена по умолчанию в OpenBSD 3.9 и новее.
В Сетевой стек также активно использует рандомизацию для повышения безопасности и снижения предсказуемости различных значений, которые могут быть полезны злоумышленнику, включая TCP начальные порядковые номера и временные метки, а также временные исходные порты.[22] Ряд функций для повышения отказоустойчивости и доступности сети, включая меры по устранению проблем с ICMP и программное обеспечение для резервирования, такое как Карп и pfsync, также включены. Проект первым отключил простой текст телнет демон в пользу зашифрованного SSH демон, в 1999 году,[23] и имеет другое интегрированное криптографическое программное обеспечение, такое как IPsec. Демон telnet был полностью удален из OpenBSD в 2005 году.[24] перед выпуском OpenBSD версии 3.8.
X11
Все части X11 в OpenBSD работают от имени пользователя, за исключением X-сервера, который разделен между X-процессом с лишенными привилегиями, запущенным от имени root, и X-процессом, запущенным от имени пользователя _X11.[нужна цитата ]
В X11 на OpenBSD ни X-сервер, ни X-клиенты обычно не имеют расширенных прав доступа к прямой памяти или оборудованию: при управлении X с драйверами Intel (4) или Radeon (4) они обычно взаимодействуют с базовым оборудованием через Direct Rendering Management. (4) только интерфейс ядра, так что доступ к памяти / оборудованию низкого уровня обрабатывается исключительно ядром. Другие драйверы, такие как WSFB, следуют аналогичной схеме. По этой причине X11 в OpenBSD не открывает низкоуровневую память или доступ к оборудованию для пользовательских / корневых программ, как это делается в некоторых других системах, и как это было в прошлом, когда пользователю затем потребовалось увеличить значение параметра machdep.allowaperture из его нулевое значение по умолчанию, небезопасное значение.[нужна цитата ]
Версия OpenBSD X Window System (назван Ксенокара ) имеет некоторые модификации безопасности. В сервер и некоторые из приложений по умолчанию исправлены, чтобы использовать разделение привилегий, а OpenBSD предоставляет драйвер «апертуры» для ограничения доступа X к памяти.[25] Однако после работы Лоика Дюфло над недостатками безопасности X Тео де Раадт прокомментировал, что драйвер апертуры был просто «лучшим из того, что мы можем сделать» и что X «нарушает все модели безопасности, о которых вы услышите в университетских классах».[26] Он продолжал критиковать разработчиков X за то, что они «не торопились решать эту проблему десятилетней давности». 29 ноября 2006 г. VESA Был разработан драйвер ядра, который позволял X работать, хотя и медленнее, без использования драйвера апертуры.[27]
15 февраля 2014 года X был дополнительно изменен, чтобы позволить ему работать без привилегий root.[28][29]
После обнаружения уязвимости безопасности в X,[30] OpenBSD не поддерживает запуск X от имени пользователя root и поддерживает запуск X только через диспетчер отображения в качестве выделенного _x11
Пользователь.
Другие свойства
Разделение привилегий,[31] отмена привилегии, укоренение и рандомизированная загрузка библиотек также играют роль в повышении безопасности системы. Многие из них были применены к версиям OpenBSD распространенных программ, таких как tcpdump и Apache, и к BSD аутентификация система.
OpenBSD уже давно предоставляет своим пользователям полное раскрытие в отношении различных ошибок и нарушений безопасности, обнаруженных командой OpenBSD.[32] Это подтверждается слоган проекта: "Только две удаленные дыры в установке по умолчанию, черт побери!"
В OpenBSD 5.3 поддержка полное шифрование диска был представлен.[33]
OpenBSD 5.8 представила приносить присягу
системный вызов для ограничения возможностей процесса до минимального набора, необходимого для правильной работы.[34] Если процесс скомпрометирован и попытается выполнить непредусмотренное поведение, он будет остановлен ядром. С момента его появления приложения и порты были изменены для поддержки приносить присягу
, в том числе Хром веб-браузер.
Рекомендации
- ^ Корф, Янек; Надежда, Пако; Поттер, Брюс (2005). Освоение безопасности FreeBSD и OpenBSD. Севастополь, Калифорния, США: О'Рейли. ISBN 0-596-00626-8.
- ^ а б Лукас, Майкл В. (2013). Absolute OpenBSD: Unix для практических параноиков (2-е изд.). Сан-Франциско: Пресс без крахмала. ISBN 978-1-59327-476-4.
- ^ Палмер, Брэндон; Назарио, Хосе (2004). Безопасные архитектуры с OpenBSD. Бостон: Эддисон-Уэсли. ISBN 0-321-19366-0.
- ^ "strncpy - копировать часть строки в другую". Страницы руководства OpenBSD. Получено 26 мая, 2016.
- ^ "strncat - объединить строку с частью другой". Страницы руководства OpenBSD. Получено 26 мая, 2016.
- ^ "strlcpy, strlcat - копирование и объединение строк с ограниченным размером". Страницы руководства OpenBSD. Получено 26 мая, 2016.
- ^ Миллер, Тодд С .; де Раадт, Тео (6 июня 1999 г.). strlcpy и strlcat - согласованное, безопасное, копирование и конкатенация строк. USENIX Ежегодная техническая конференция. Монтерей, Калифорния. Получено 26 мая, 2016.
- ^ Дреппер, Ульрих (8 августа 2000 г.). «Re: PATCH: безопасное копирование и объединение строк». [email protected] (Список рассылки). Получено 26 мая, 2016.
- ^ Мадхавапедди, Анил (26 июня 2003 г.). "CVS: cvs.openbsd.org: src". openbsd-cvs (Список рассылки). Получено 31 марта, 2013.
- ^ "issetugid - текущий исполняемый файл, на котором запущены setuid или setgid". Страницы руководства OpenBSD. Получено 26 мая, 2016.
- ^ "arc4random, arc4random_buf, arc4random_uniform - генератор случайных чисел". Страницы руководства OpenBSD. Получено 26 мая, 2016.
- ^ электронная почта 2017-06-13
- ^ «Расширение GCC для защиты приложений от атак, разбивающих стек». IBM Research. Архивировано из оригинал 4 июня 2014 г.. Получено 26 мая, 2016.
- ^ "OpenBSD 3.3". OpenBSD. Получено 28 мая, 2016.
Интеграция технологии защиты стека ProPolice [...] в системный компилятор.
- ^ "OpenBSD 3.4". OpenBSD. Получено 28 мая, 2016.
В ядре также включена защита стека ProPolice.
- ^ "gcc-local - локальные изменения в gcc". Страницы руководства OpenBSD. Получено 28 мая, 2016.
gcc поставляется с расширением защиты стека ProPolice, которое по умолчанию включено.
- ^ Францен, Майк; Шуи, Майк (13 августа 2001 г.). StackGhost: аппаратная защита стека. 10-е USENIX Симпозиум по безопасности. Вашингтон, округ Колумбия. Получено 26 мая, 2016.
- ^ «OpenBSD 5.8». OpenBSD. Получено 28 мая, 2016.
Поддержка бита NX (No-eXecute) на i386, что приводит к гораздо лучшему применению W ^ X в пользовательском пространстве для оборудования, имеющего эту функцию.
- ^ де Раадт, Тео; Халлквист, Никлас; Грабовский, Артур; Keromytis, Angelos D .; Провос, Нильс (6 июня 1999 г.). Криптография в OpenBSD: обзор. USENIX Ежегодная техническая конференция. Монтерей, Калифорния. Получено 30 января, 2005.
- ^ Провос, Нильс; Мазьер, Давид (6 июня 1999 г.). Схема паролей, адаптируемая к будущему. USENIX Ежегодная техническая конференция. Монтерей, Калифорния. Получено 26 мая, 2016.
- ^ Провос, Нильс (14 августа 2000 г.). Шифрование виртуальной памяти. 9-е USENIX Симпозиум по безопасности. Денвер, Колорадо. Получено 9 апреля, 2006.
- ^ Бьянкуцци, Федерико (12 октября 2005 г.). "Сетевой стек OpenBSD". Безопасность. Получено 10 декабря, 2005.
- ^ де Раадт, Тео (10 апреля 1999 г.). «пока отключите telnet / ftp / login по умолчанию». OpenBSD.
- ^ де Раадт, Тео (25 мая 2005 г.). "CVS: cvs.openbsd.org: src". Список рассылки OpenBSD-CVS.
Удалены файлы: libexec / telnetd
- ^ "xf86 - драйвер апертуры X Window System". Страницы руководства OpenBSD. Получено 26 мая, 2016.
- ^ де Раадт, Тео (11 мая 2006 г.). «Re: ошибка безопасности в оборудовании x86 (спасибо X WIndows)». openbsd-misc (Список рассылки). Получено 26 мая, 2016.
- ^ Херрб, Матье (29 ноября 2006 г.). "CVS: cvs.openbsd.org: XF4". openbsd-cvs (Список рассылки). Получено 26 мая, 2016.
- ^ Кеттенис, Марк (15 февраля 2014 г.). "CVS: cvs.openbsd.org: xenocara". openbsd-cvs (Список рассылки). Получено 26 мая, 2016.
- ^ «Xorg теперь может работать без привилегий на OpenBSD». Журнал OpenBSD. 22 февраля 2014 г.. Получено 26 мая, 2016.
- ^ "OpenBSD 6.4 Errata". www.openbsd.org. Получено 23 мая, 2019.
- ^ Провос, Нильс; Фридл, Маркус; Ханимен, Питер (4 августа 2003 г.). Предотвращение повышения привилегий. 12-е USENIX Симпозиум по безопасности. Вашингтон, округ Колумбия. Получено 26 мая, 2016.
- ^ Миллер, Робин (11 декабря 2000 г.). "Тео де Раадт отвечает". Slashdot. В архиве из оригинала 28 июля 2011 г.. Получено 16 мая, 2014.
- ^ "OpenBSD 5.3". OpenBSD. Получено 26 мая, 2016.
- ^ "залог () - новый механизм смягчения". OpenBSD. Получено 19 мая, 2018.
внешняя ссылка
- Использование методов смягчения последствий: обновление через 10 лет
- Тео де Раадт письмо о безопасном программировании: По вопросу принятия strlcpy / strlcat отраслью