Функции безопасности OpenBSD
В этой статье отсутствует информация о LibreSSL и тенденции проекта к снижению сложности программного обеспечения. ( апрель 2023 г. ) |
![]() | Эту статью необходимо обновить . Причина: OpenBSD 7.3 был выпущен с новыми функциями безопасности (см. примечания к выпуску , независимый новостной отчет и обновленный список нововведений ). ( апрель 2023 г. ) |
Операционная OpenBSD система фокусируется на безопасности и разработке функций безопасности. [1] [2] : xxvii [3] По словам автора Майкла Лукаса, OpenBSD «широко считается самой безопасной операционной системой, доступной где угодно, на любых условиях лицензирования». [2] : XXIX
API и изменения в сборке
[ редактировать ]Ошибки и недостатки безопасности часто вызваны ошибкой программиста. Распространенным источником ошибок является неправильное использование strcpy
и strcat
Строковые функции на C. языке программирования Есть две распространенные альтернативы: strncpy
и strncat
, но их также может быть сложно понять и легко использовать неправильно, [4] [5] поэтому разработчики OpenBSD Тодд Миллер и Тео де Раадт разработали strlcpy
и strlcat
функции. [6] Эти функции предназначены для того, чтобы программистам было сложнее случайно оставить буферы незавершенными или допустить их переполнение. [7] Они были приняты проектами NetBSD и FreeBSD, но не библиотекой C. GNU [8]
В OpenBSD компоновщик был изменен, чтобы выдавать предупреждение при небезопасных функциях манипуляции со строками , таких как strcpy
, strcat
, или sprintf
, найдены. Все вхождения этих функций в исходном дереве 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 были внесены изменения в 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 операционная система на базе [ нужна ссылка ] , полагаются на существующие функции шифрования диска для шифрования подкачки, которые часто (а) должны быть включены пользователем вручную, (б) требуют настройки (если шифрование диска не было выбрано во время установки операционной системы), что не так уж и важно. тривиально сделать, например, переключить шифрование подкачки в 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 , известная операционная система, которая также используется в качестве основы для других операционных систем, в том числе Убунту ; [32] Kali Linux — специализированная операционная система для тестирования на проникновение , исследований безопасности, цифровой криминалистики и обратного проектирования ; [33] Qubes OS — операционная система, ориентированная на безопасность; [34] Tor Browser , анонимный веб-браузер; [35] SecureDrop — пакет программного обеспечения для журналистов и информаторов, позволяющий безопасно и анонимно обмениваться информацией через Интернет; [36] и VeraCrypt , программа для оперативного шифрования и полного шифрования диска . [37]
Х11
[ редактировать ]В X11 на OpenBSD ни X-сервер, ни X-клиенты обычно не имеют каких-либо повышенных привилегий прямого доступа к памяти или оборудованию: при управлении X с помощью драйверов Intel(4) или Radeon(4) они обычно взаимодействуют с базовым оборудованием через Direct Rendering Management. (4) только интерфейс ядра, так что низкоуровневый доступ к памяти/оборудованию обрабатывается исключительно ядром. Другие драйверы, такие как WSFB, следуют аналогичной схеме. По этой причине X11 в OpenBSD не открывает низкоуровневую память или аппаратный доступ к пользовательским/корневым программам, как это делается в некоторых других системах, и как это делалось в прошлом, когда пользователю требовалось повысить настройку machdep.allowaperture с его нулевое значение по умолчанию становится незащищенным. [ нужна ссылка ]
от OpenBSD Версия X Window System (названная Xenocara ) имеет некоторые модификации безопасности. Сервер . и некоторые приложения по умолчанию исправлены для использования разделения привилегий , а OpenBSD предоставляет драйвер «апертуры», ограничивающий доступ X к памяти [38] Однако после работы Лоика Дюфло над недостатками безопасности X Тео де Раадт заметил, что драйвер апертуры был просто «лучшим, что мы могли сделать» и что X «нарушает все модели безопасности, о которых вы услышите на университетских занятиях». [39] Далее он раскритиковал разработчиков X за то, что они «тратят время на решение этой проблемы десятилетней давности». 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 веб-браузеры .
Ссылки
[ редактировать ]- ^ Корф, Янек; Надеюсь, Пако; Поттер, Брюс (2005). Освоение безопасности FreeBSD и OpenBSD . Севастополь, Калифорния, США: О'Рейли. ISBN 0-596-00626-8 .
- ^ Перейти обратно: а б Лукас, Майкл В. (2013). Абсолютный OpenBSD: Unix для практических параноиков (2-е изд.). Сан-Франциско: Пресса без крахмала . ISBN 978-1-59327-476-4 .
- ^ Палмер, Брэндон; Назарио, Хосе (2004). Безопасные архитектуры с OpenBSD . Бостон: Аддисон-Уэсли . ISBN 0-321-19366-0 .
- ^ «strncpy – скопировать часть строки в другую» . Страницы руководства OpenBSD . Проверено 14 мая 2021 г.
- ^ «strncat – объединить строку с частью другой» . Страницы руководства OpenBSD . Проверено 14 мая 2021 г.
- ^ «strlcpy, strlcat – копирование и объединение строк с ограничением по размеру» . Страницы руководства OpenBSD . Проверено 14 мая 2021 г.
- ^ Миллер, Тодд С.; де Раадт, Тео (6 июня 1999 г.). strlcpy и strlcat — согласованное, безопасное копирование и конкатенация строк . Ежегодная техническая конференция USENIX . Монтерей, Калифорния . Проверено 26 мая 2016 г.
- ^ Дреппер, Ульрих (8 августа 2000 г.). «Re: PATCH: безопасное копирование и объединение строк» . [электронная почта защищена] (список рассылки) . Проверено 26 мая 2016 г.
- ^ Мадхавапедди, Анил (26 июня 2003 г.). «CVS: cvs.openbsd.org: src» . openbsd-cvs (список рассылки) . Проверено 31 марта 2013 г.
- ^ «issetugid – текущий исполняемый файл, выполняющий setuid или setgid» . Страницы руководства OpenBSD . Проверено 14 мая 2021 г.
- ^ «arc4random, arc4random_buf, arc4random_uniform – генератор случайных чисел» . Страницы руководства OpenBSD . Проверено 14 мая 2021 г.
- ^ электронная почта 13 июня 2017 г.
- ^ «Расширение GCC для защиты приложений от атак, разрушающих стек» . Исследования IBM . Архивировано из оригинала 4 июня 2014 года . Проверено 26 мая 2016 г.
- ^ «ОпенБСД 3.3» . OpenBSD . Проверено 28 мая 2016 г.
Интеграция технологии защиты стека ProPolice [...] в компилятор системы.
- ^ «ОпенБСД 3.4» . OpenBSD . Проверено 28 мая 2016 г.
В ядре также включена защита стека ProPolice.
- ^ «gcc-local — локальные модификации gcc» . Страницы руководства OpenBSD . Проверено 28 мая 2016 г.
gcc поставляется с расширением защиты стека ProPolice, которое включено по умолчанию.
- ^ Францен, Майк; Шуи, Майк (13 августа 2001 г.). StackGhost: аппаратная защита стека . 10-й симпозиум USENIX по безопасности. Вашингтон, округ Колумбия . Проверено 26 мая 2016 г.
- ^ «ОпенБСД 5.8» . OpenBSD . Проверено 28 мая 2016 г.
Поддержка бита NX (No-eXecute) на i386, что приводит к гораздо лучшему обеспечению W^X в пользовательском пространстве для оборудования, имеющего эту функцию.
- ^ де Раадт, Тео ; Халлквист, Никлас; Грабовский, Артур; Керомитис, Ангелос Д.; Провос, Нильс (6 июня 1999 г.). Криптография в OpenBSD: обзор . Ежегодная техническая конференция USENIX . Монтерей, Калифорния . Проверено 30 января 2005 г.
- ^ Провос, Нильс ; Мазьер, Давид (6 июня 1999 г.). Схема паролей, адаптируемая к будущему . Ежегодная техническая конференция USENIX . Монтерей, Калифорния . Проверено 26 мая 2016 г.
- ^ «ОпенБСД 5.3» . OpenBSD . Проверено 26 мая 2016 г.
- ^ «ОпенБСД 7.3» . www.openbsd.org . Проверено 19 апреля 2023 г.
- ^ «Первоначальная поддержка управляемого шифрования диска в программе установки» . undeadly.org . Проверено 19 апреля 2023 г.
- ^ Провос, Нильс (14 августа 2000 г.). Шифрование виртуальной памяти . 9-й симпозиум USENIX по безопасности. Денвер, Колорадо . Проверено 9 апреля 2006 г.
- ^ «Глава 20. Хранение — 20.14. Шифрование свопа» . Портал документации FreeBSD . Проверено 27 сентября 2023 г.
- ^ Бьянкуцци, Федерико (12 октября 2005 г.). «Сетевой стек OpenBSD» . БезопасностьФокус . Проверено 10 декабря 2005 г.
- ^ де Раадт, Тео (10 апреля 1999 г.). «пока отключить telnet/ftp/login по умолчанию» . OpenBSD .
- ^ де Раадт, Тео (25 мая 2005 г.). «CVS: cvs.openbsd.org: src» . Список рассылки OpenBSD-CVS .
Удаленные файлы: libexec/telnetd.
- ^ Перейти обратно: а б Неугомонный, Тед. «означает: защита OpenBSD от нас до вас» . www.openbsd.org . BSDCan 2015 (июнь), Оттава, Канада . Проверено 12 июля 2022 г.
- ^ «ОпенБСД 5.5» . www.openbsd.org . Проверено 12 июля 2022 г.
- ^ «OpenBSD: Инновации» . www.openbsd.org .
- ^ «Проверка подлинности образов Debian» . www.debian.org . Проверено 12 июля 2022 г.
- ^ «Безопасная загрузка образов Kali Linux | Документация Kali Linux» . Кали Линукс . Проверено 12 июля 2022 г.
- ^ «Проверка подписей» . ОС Qubes . Проверено 12 июля 2022 г.
- ^ «Как я могу проверить подпись Tor Browser? | Проект Tor | Поддержка» . support.torproject.org . Проверено 12 июля 2022 г.
- ^ «Безопасный обмен и принятие документов» . SecureDrop . Фонд свободы прессы . Проверено 12 июля 2022 г.
- ^ «VeraCrypt — бесплатное шифрование диска с открытым исходным кодом и надежная защита для параноиков» . veracrypt.fr . ИДРИКС . Проверено 12 июля 2022 г.
- ^ «xf86 – Драйвер апертуры X Window System» . Страницы руководства OpenBSD . Проверено 14 мая 2021 г.
- ^ де Раадт, Тео (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» . www.openbsd.org . Проверено 23 мая 2019 г.
- ^ Провос, Нильс ; Фридл, Маркус; Ханиман, Питер (4 августа 2003 г.). Предотвращение повышения привилегий . 12-й симпозиум USENIX по безопасности. Вашингтон, округ Колумбия . Проверено 26 мая 2016 г.
- ^ Миллер, Робин (11 декабря 2000 г.). «Ответы Тео де Раадта» . Слэшдот . Архивировано из оригинала 28 июля 2011 года . Проверено 16 мая 2014 г.
- ^ «OpenBSD: Безопасность — «Безопасность по умолчанию» » . www.openbsd.org . Проверено 27 сентября 2023 г.
- ^ «pledge() — новый механизм смягчения последствий» . OpenBSD . Проверено 19 мая 2018 г.
- ^ «unveil — раскрыть части ограниченного представления файловой системы» . Страницы руководства OpenBSD . Проверено 15 мая 2020 г.