This article is missing information about LibreSSL and the project's tendency to reduce software complexity. (April 2023) |
This article needs to be updated. The reason given is: OpenBSD 7.3 was released with new security features (see release notes, independent news report, and updated list of innovations).(April 2023) |
Операционная система OpenBSD фокусируется на безопасности и разработке функций безопасности. [1] [2] : xxvii [3] По словам автора Майкла В. Лукаса, OpenBSD «широко рассматривается как самая безопасная операционная система, доступная где-либо, на любых условиях лицензирования». [ 2] : xxix
Ошибки и уязвимости безопасности часто возникают из-за ошибок программиста. Распространенным источником ошибок является неправильное использование строковыхstrcpy
функций и в языке программирования C. Существуют две распространенные альтернативы, и , но их также может быть трудно понять и легко использовать неправильно, [4] [5] поэтому разработчики OpenBSD Тодд К. Миллер и Тео де Раадт разработали функции и . [6] Эти функции предназначены для того, чтобы программистам было сложнее случайно оставить буферы незавершенными или допустить их переполнение. [7] Они были приняты проектами NetBSD и FreeBSD, но не библиотекой GNU C . [8]strcat
strncpy
strncat
strlcpy
strlcat
В OpenBSD компоновщик был изменен, чтобы выдавать предупреждение при обнаружении небезопасных функций обработки строк , таких как strcpy
, strcat
, или sprintf
. Все вхождения этих функций в исходном дереве OpenBSD были заменены. [ необходима цитата ] Кроме того, в OpenBSD включен статический контролер границ в попытке найти другие распространенные ошибки программирования во время компиляции. [9] Другие API , связанные с безопасностью, разработанные проектом OpenBSD, включают issetugid
[10] и arc4random
. [11]
В электронном письме от июня 2017 года Тео де Раадт заявил, что проблема со стабильными системами заключается в том, что они могут работать месяцами. Хотя в ядре присутствует значительная рандомизация, некоторые ключевые адреса остаются прежними. Текущий проект изменяет компоновщик таким образом, чтобы при каждой загрузке ядро перекомпоновывалось, как и все другие рандомизации. Это отличается от ASLR ядра ; в электронном письме он заявляет, что «в результате каждое новое ядро уникально. Относительные смещения между функциями и данными уникальны... [Текущее] изменение — это каркас, гарантирующий загрузку нового связанного ядра при каждой перезагрузке... так что новое случайное ядро может быть связано вместе... На быстрой машине это занимает меньше секунды... Перезагрузка запускает новое ядро, и для следующей загрузки собирается еще одно ядро. Внутренние дельты между функциями внутри ядра не там, где ожидает злоумышленник, поэтому ему понадобятся более эффективные утечки информации». [12]
OpenBSD объединяет несколько технологий, помогающих защитить операционную систему от таких атак, как переполнение буфера или целочисленное переполнение .
Разработанный Хироаки Это, ProPolice является расширением GCC , предназначенным для защиты приложений от атак на стек . [13] Он делает это с помощью ряда операций: локальные переменные стека переупорядочиваются для размещения буферов после указателей, защищая их от повреждения в случае переполнения буфера; указатели из аргументов функций также размещаются перед локальными буферами; и значение canary размещается после локальных буферов, которое при выходе из функции иногда может использоваться для обнаружения переполнения буфера. ProPolice выбирает, защищать ли буфер или нет, на основе автоматической эвристики, которая оценивает, насколько он уязвим, что снижает накладные расходы на производительность защиты. [ неопределенно ] Он был интегрирован в версию OpenBSD GCC в декабре 2002 года и впервые стал доступен в OpenBSD 3.3; [14] он был применен к ядру в выпуске 3.4. [15] Расширение работает на всех архитектурах ЦП, поддерживаемых OpenBSD, и включено по умолчанию, поэтому любой скомпилированный код C будет защищен без вмешательства пользователя. [16]
В мае 2004 года OpenBSD на платформе SPARC получила дополнительную защиту стека в виде StackGhost . Это использует возможности архитектуры SPARC для предотвращения эксплуатации переполнений буфера. [17] Поддержка SPARC64 была добавлена в -current в марте 2005 года.
OpenBSD 3.4 представила W^X , схему управления памятью, гарантирующую, что память либо доступна для записи, либо доступна для исполнения, но никогда и то, и другое одновременно, что обеспечивает еще один уровень защиты от переполнения буфера. Хотя это относительно легко реализовать на платформе x86-64 , которая имеет аппаратную поддержку бита NX , OpenBSD является одной из немногих ОС, поддерживающих это на общей платформе i386, [18] в которой отсутствуют встроенные элементы управления выполнением на каждой странице.
В ходе цикла разработки версии 3.8 были внесены изменения в malloc
функции управления памятью. В традиционных операционных системах Unix malloc
выделяет больше памяти за счет расширения сегмента данных Unix, что затрудняет реализацию надежной защиты от проблем безопасности. [ неопределенно ] Реализация malloc
в настоящее время в OpenBSD использует mmap
системный вызов, который был изменен таким образом, чтобы он возвращал случайные адреса памяти и гарантировал, что различные области не будут отображаться рядом друг с другом. Кроме того, выделение небольших блоков в общих областях теперь рандомизировано, а функция free
была изменена так, чтобы немедленно возвращать память ядру, а не оставлять ее отображенной в процессе. Также был добавлен ряд дополнительных необязательных проверок для помощи в разработке. [ необходима цитата ] Эти функции упрощают обнаружение ошибок программы и затрудняют их использование: вместо того, чтобы повредить память или проигнорировать недопустимый доступ, они часто приводят к ошибке сегментации и прерыванию процесса. Это выявило несколько проблем с программным обеспечением, работающим на OpenBSD 3.8, в частности, с программами, считывающими данные за пределами начала или конца буфера, — тип ошибки, который ранее не обнаруживался напрямую, но теперь может вызывать ошибку. [ необходима цитата ] Реализация этих возможностей заняла более трех лет без существенной потери производительности.
Одной из целей проекта OpenBSD является интеграция средств и программного обеспечения для сильной криптографии в ядро операционной системы. Для этого предоставляется ряд низкоуровневых функций, включая источник сильных псевдослучайных чисел ; [19] встроенные криптографические хэш-функции и преобразования; и поддержка криптографического оборудования ( OpenBSD Cryptographic Framework ). Эти возможности используются во всей OpenBSD, включая алгоритм хэширования паролей bcrypt [20], полученный из блочного шифра Blowfish Брюса Шнайера , который использует преимущества интенсивного использования процессором ключевого расписания Blowfish , делая атаки методом грубой силы менее практичными.
В OpenBSD 5.3 была введена поддержка полного шифрования диска , [21] но включение его во время установки OpenBSD требовало ручного вмешательства пользователя путем выхода из установщика и ввода некоторых команд. Начиная с OpenBSD 7.3, установщик поддерживает включение полного шифрования диска с помощью управляемой процедуры, не требуя больше ручного вмешательства. [22] [23]
Для защиты конфиденциальной информации, такой как пароли, от утечки на диск, где они могут сохраняться в течение многих лет, OpenBSD поддерживает шифрование пространства подкачки. Пространство подкачки разделено на множество небольших областей, каждой из которых назначается собственный ключ шифрования, который генерируется случайным образом и автоматически без ввода данных со стороны пользователя, хранится полностью в памяти и никогда не записывается на диск, за исключением случаев гибернации ; как только данные в области больше не требуются, OpenBSD сбрасывает свой ключ шифрования, фактически превращая данные в этой области в бесполезный мусор. [24] Переключение этой функции может быть выполнено с помощью одного параметра конфигурации sysctl и не требует какой-либо предварительной настройки, разбиения диска или настроек, связанных с разделами, которые необходимо выполнить/изменить; кроме того, нет возможности выбора параметров шифрования (таких как алгоритм или длина ключа для использования), поскольку всегда используются надежные параметры. Эта функция не приносит вреда и не теряет функциональности, поскольку ключи шифрования, используемые для доступа к подкаченным процессам, теряются только при сбое компьютера (например, отключении питания), после чего все операционные системы в любом случае сбрасывают предыдущее содержимое памяти и подкачки, а также поскольку гибернация продолжает работать как обычно с этой функцией. Эта функция включена по умолчанию в OpenBSD 3.8 (выпущенной в ноябре 2005 года) и более поздних версиях; OpenBSD по состоянию на 2022 год остается единственной известной операционной системой, в которой подкачка зашифрована по умолчанию независимо от шифрования диска и его пароля, предоставленного пользователем. ( Windows требует [ требуется ссылка ] переключения параметра конфигурации, который не представлен в его пользовательских приложениях «Панель управления» и «Настройки» , а другие операционные системы, включая macOS [ требуется ссылка ] , FreeBSD [25] и все операционные системы на базе Linux [ требуется ссылка ] , полагаются на существующие функции шифрования диска для шифрования подкачки, которые часто (a) должны быть включены пользователем вручную, (b) требуют настройки (если шифрование диска не было выбрано во время установки операционной системы), что не так тривиально, как переключение шифрования подкачки в OpenBSD, и (c) используют предоставленный пользователем пароль, который пользователи должны запомнить и который может быть слабым/угадываемым или даже извлеченным из пользователей.)
Сетевой стек также интенсивно использует рандомизацию для повышения безопасности и снижения предсказуемости различных значений, которые могут быть полезны злоумышленнику, включая начальные порядковые номера TCP и временные метки, а также эфемерные исходные порты. [26] Также включен ряд функций для повышения устойчивости и доступности сети, включая контрмеры для проблем с ICMP и программное обеспечение для избыточности, такое как CARP и pfsync . Проект был первым, кто отключил простой текстовый демон telnet в пользу зашифрованного демона SSH в 1999 году [27] и включает другое интегрированное криптографическое программное обеспечение, такое как IPsec . Демон telnet был полностью удален из OpenBSD в 2005 году [28] перед выпуском OpenBSD версии 3.8.
Проект OpenBSD изобрел собственную утилиту для криптографической подписи и проверки файлов, signify
[ 29] вместо использования существующих стандартов и программного обеспечения, таких как OpenPGP и GnuPG . Создатель утилиты signify
Тед Унангст в 2015 году писал, говоря об OpenPGP и GnuPG : «Проблемы, которые у меня были при использовании существующего инструмента, были сложность, качество и сложность». [29] Это соответствует давней тенденции проекта по снижению сложности и, в свою очередь, снижению вероятности уязвимостей, существующих в программном обеспечении, и помощи пользователю лучше понимать программное обеспечение и принимать более обоснованные с точки зрения безопасности решения. signify
интегрирован в базовую операционную систему и используется для проверки всех выпусков, исправлений и пакетов, начиная с OpenBSD 5.5. [30] [31] Напротив, другие операционные системы свободного программного обеспечения и программное обеспечение, ориентированное на безопасность, как правило, используют OpenPGP для проверки выпуска, и по состоянию на 2022 год продолжают это делать, включая: Debian , известную операционную систему, которая также используется в качестве базы для других операционных систем, включая Ubuntu ; [32] Kali Linux , специализированную операционную систему для тестирования на проникновение , исследований безопасности, цифровой криминалистики и обратного проектирования ; [33] Qubes OS , операционная система, ориентированная на безопасность; [34] Tor Browser , анонимный веб-браузер; [35] SecureDrop , программный пакет для журналистов и информаторов для безопасного и анонимного обмена информацией через Интернет; [36] и VeraCrypt , программное обеспечение для шифрования «на лету» и полного шифрования диска . [37]
В X11 на OpenBSD ни X-сервер, ни X-клиенты обычно не имеют никаких расширенных прямых привилегий памяти или оборудования: при управлении X с помощью драйверов Intel(4) или Radeon(4) они обычно взаимодействуют с базовым оборудованием только через интерфейс ядра Direct Rendering Management(4), так что низкоуровневый доступ к памяти/оборудованию обрабатывается исключительно ядром. Другие драйверы, такие как WSFB, следуют аналогичной схеме. По этой причине X11 на OpenBSD не открывает низкоуровневый доступ к памяти или оборудованию для пользовательских/корневых программ, как это делается в некоторых других системах, и как это делалось в прошлом, когда пользователю требовалось расширить настройку machdep.allowaperture с нулевого значения по умолчанию до небезопасного значения. [ необходима цитата ]
Версия X Window System от OpenBSD (названная Xenocara ) имеет некоторые изменения безопасности. Сервер и некоторые из стандартных приложений исправлены для использования разделения привилегий , а OpenBSD предоставляет драйвер «апертуры» для ограничения доступа X к памяти. [38] Однако после работы над уязвимостями безопасности X Лоиком Дюфло, Тео де Раадт прокомментировал, что драйвер апертуры был просто «лучшим, что мы можем сделать» и что X «нарушает все модели безопасности, о которых вы услышите в университетском классе». [39] Он продолжил критиковать разработчиков X за то, что они «тратили время на решение этой проблемы > 10-летней давности». 29 ноября 2006 года был разработан драйвер ядра VESA , который позволил X работать, хотя и медленнее, без использования драйвера апертуры. [40]
15 февраля 2014 года X был дополнительно модифицирован, чтобы позволить ему работать без привилегий root. [41] [42]
После обнаружения уязвимости безопасности в X [43] OpenBSD не поддерживает запуск X от имени пользователя root и поддерживает запуск X только через менеджер дисплеев от имени выделенного _x11
пользователя.
Разделение привилегий , [44] отзыв привилегий , chrooting и рандомизированная загрузка библиотек также играют роль в повышении безопасности системы. Многие из них были применены к версиям OpenBSD распространенных программ, таких как tcpdump и Apache , а также к системе аутентификации BSD .
OpenBSD имеет историю предоставления своим пользователям полной информации относительно различных ошибок и нарушений безопасности, обнаруженных командой OpenBSD. [45] Это подтверждается слоганом проекта : «Только две удаленные дыры в установке по умолчанию за чертовски долгое время!»
OpenBSD по умолчанию должен быть безопасным, что включает (но не ограничивается) отключение всех несущественных служб по умолчанию. Это делается не только для того, чтобы не заставлять пользователей изучать и тратить время на обеспечение безопасности своих компьютеров после установки OpenBSD, но и в надежде сделать пользователей более осведомленными о соображениях безопасности, требуя от них принятия осознанных решений для включения функций, которые могут снизить их безопасность. [46]
OpenBSD 5.9 включала поддержку нового на тот момент pledge
системного вызова (введенного в OpenBSD 5.8 как tame
и переименованного в 5.9 в pledge
) для ограничения возможностей процесса минимальным подмножеством, необходимым для корректной работы. [47] Если процесс скомпрометирован и пытается выполнить непреднамеренное поведение, он будет завершен ядром. OpenBSD 6.4 представил unveil
системный вызов для ограничения видимости файловой системы до минимального уровня. [48] pledge
и unveil
используются вместе для ограничения приложений, еще больше ограничивая то, что им в противном случае разрешено делать под учетной записью пользователя, под которой они работают. С момента введения pledge
базовые программы OpenBSD (включенные из коробки в OpenBSD), приложения (обрабатываемые их разработчиками) и порты (приложений, обрабатываемые командой OpenBSD) были обновлены для ограничения с помощью pledge
и/или unveil
. Некоторые примеры сторонних приложений, обновленных с этими функциями (их разработчиками или в портах приложений OpenBSD), включают веб-браузеры Chromium и Firefox .
технологии защиты стека ProPolice [...] в системный компилятор.
стека ProPolice также включена в ядре.
поставляется с расширением защиты стека 'ProPolice', которое включено по умолчанию.
бита NX (No-eXecute) на i386, что приводит к гораздо лучшему обеспечению W^X в пользовательском пространстве для оборудования, поддерживающего эту функцию.
Удалённые файлы: libexec/telnetd