Функции безопасности OpenBSD

Security features as used in OpenBSD operating system

Операционная система OpenBSD фокусируется на безопасности и разработке функций безопасности. [1] [2] : xxvii  [3] По словам автора Майкла В. Лукаса, OpenBSD «широко рассматривается как самая безопасная операционная система, доступная где-либо, на любых условиях лицензирования». [ 2] : xxix 

Изменения API и сборки

Ошибки и уязвимости безопасности часто возникают из-за ошибок программиста. Распространенным источником ошибок является неправильное использование строковыхstrcpy функций и в языке программирования C. Существуют две распространенные альтернативы, и , но их также может быть трудно понять и легко использовать неправильно, [4] [5] поэтому разработчики OpenBSD Тодд К. Миллер и Тео де Раадт разработали функции и . [6] Эти функции предназначены для того, чтобы программистам было сложнее случайно оставить буферы незавершенными или допустить их переполнение. [7] Они были приняты проектами NetBSD и FreeBSD, но не библиотекой GNU C . [8]strcat strncpystrncatstrlcpystrlcat

В 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]

Х11

В 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 .

Ссылки

  1. ^ Корфф, Янек; Хоуп, Пако; Поттер, Брюс (2005). Освоение безопасности FreeBSD и OpenBSD. Севастополь, Калифорния, США: O'Reilly. ISBN 0-596-00626-8.
  2. ^ ab Lucas, Michael W. (2013). Absolute OpenBSD: Unix для практичных параноиков (2-е изд.). Сан-Франциско: No Starch Press . ISBN 978-1-59327-476-4.
  3. ^ Палмер, Брэндон; Назарио, Хосе (2004). Безопасные архитектуры с OpenBSD. Бостон: Addison-Wesley . ISBN 0-321-19366-0.
  4. ^ "strncpy – копировать часть строки в другую". Страницы руководства OpenBSD . Получено 14 мая 2021 г.
  5. ^ "strncat – объединить строку с частью другой". Страницы руководства OpenBSD . Получено 14 мая 2021 г.
  6. ^ "strlcpy, strlcat – копирование и конкатенация строк с ограничением по размеру". Страницы руководства OpenBSD . Получено 14 мая 2021 г.
  7. ^ Miller, Todd C.; de Raadt, Theo (6 июня 1999 г.). strlcpy и strlcat — согласованное, безопасное копирование и конкатенация строк. Ежегодная техническая конференция USENIX . Монтерей, Калифорния . Получено 26 мая 2016 г.
  8. ^ Drepper, Ulrich (8 августа 2000 г.). "Re: PATCH: безопасное копирование и конкатенация строк". libc-alpha@sources.redhat.com (список рассылки) . Получено 26 мая 2016 г.
  9. ^ Мадхавапедди, Анил (26 июня 2003 г.). "CVS: cvs.openbsd.org: src". openbsd-cvs (список рассылки) . Получено 31 марта 2013 г.
  10. ^ "issetugid – текущий исполняемый файл, работающий с setuid или setgid". Страницы руководства OpenBSD . Получено 14 мая 2021 г.
  11. ^ "arc4random, arc4random_buf, arc4random_uniform – генератор случайных чисел". Страницы руководства OpenBSD . Получено 14 мая 2021 г.
  12. ^ электронная почта 2017-06-13
  13. ^ "Расширение GCC для защиты приложений от атак на разрушение стека". IBM Research . Архивировано из оригинала 4 июня 2014 г. Получено 26 мая 2016 г.
  14. ^ "OpenBSD 3.3". OpenBSD . Получено 28 мая 2016 г. Интеграция технологии защиты стека ProPolice [...] в системный компилятор.
  15. ^ "OpenBSD 3.4". OpenBSD . Получено 28 мая 2016 г. Защита стека ProPolice также включена в ядре.
  16. ^ "gcc-local – локальные модификации gcc". Страницы руководства OpenBSD . Получено 28 мая 2016 г. gcc поставляется с расширением защиты стека 'ProPolice', которое включено по умолчанию.
  17. ^ Францен, Майк; Шуи, Майк (13 августа 2001 г.). StackGhost: Аппаратная защита стека. 10-й симпозиум по безопасности USENIX . Вашингтон, округ Колумбия . Получено 26 мая 2016 г.
  18. ^ "OpenBSD 5.8". OpenBSD . Получено 28 мая 2016 г. Поддержка бита NX (No-eXecute) на i386, что приводит к гораздо лучшему обеспечению W^X в пользовательском пространстве для оборудования, поддерживающего эту функцию.
  19. ^ де Раадт, Тео ; Халлквист, Никлас; Грабовский, Артур; Керомитис, Ангелос Д.; Провос, Нильс (6 июня 1999 г.). Криптография в OpenBSD: обзор. Ежегодная техническая конференция USENIX . Монтерей, Калифорния . Проверено 30 января 2005 г.
  20. ^ Provos, Niels ; Mazières, David (6 июня 1999 г.). Схема паролей, адаптируемая к будущему. Ежегодная техническая конференция USENIX . Монтерей, Калифорния . Получено 26 мая 2016 г. .
  21. ^ "OpenBSD 5.3". OpenBSD . Получено 26 мая 2016 г. .
  22. ^ "OpenBSD 7.3". www.openbsd.org . Получено 19 апреля 2023 г. .
  23. ^ "Первоначальная поддержка управляемого шифрования диска в установщике". undeadly.org . Получено 19 апреля 2023 г. .
  24. ^ Провос, Нильс (14 августа 2000 г.). Шифрование виртуальной памяти. 9-й симпозиум по безопасности USENIX . Денвер, Колорадо . Получено 9 апреля 2006 г.
  25. ^ "Глава 20. Хранилище — 20.14. Шифрование свопа". Портал документации FreeBSD . Получено 27 сентября 2023 г.
  26. ^ Бьянкуцци, Федерико (12 октября 2005 г.). "Сетевой стек OpenBSD". SecurityFocus . Получено 10 декабря 2005 г. .
  27. ^ de Raadt, Theo (10 апреля 1999 г.). "отключить telnet/ftp/login по умолчанию, на данный момент". OpenBSD .
  28. ^ de Raadt, Theo (25 мая 2005 г.). "CVS: cvs.openbsd.org: src". Список рассылки OpenBSD-CVS . Удалённые файлы: libexec/telnetd
  29. ^ ab Unangst, Ted. "signify: Securing OpenBSD From Us To You". www.openbsd.org . BSDCan 2015 (июнь), Оттава, Канада . Получено 12 июля 2022 г. .
  30. ^ "OpenBSD 5.5". www.openbsd.org . Получено 12 июля 2022 г. .
  31. ^ "OpenBSD: Инновации". www.openbsd.org .
  32. ^ "Проверка подлинности образов Debian". www.debian.org . Получено 12 июля 2022 г. .
  33. ^ "Загрузка образов Kali Linux безопасно | Документация Kali Linux". Kali Linux . Получено 12 июля 2022 г. .
  34. ^ "Проверка подписей". Qubes OS . Получено 12 июля 2022 г.
  35. ^ «Как проверить подпись Tor Browser? | Tor Project | Поддержка». support.torproject.org . Получено 12 июля 2022 г. .
  36. ^ «Безопасно обменивайтесь и принимайте документы». SecureDrop . Freedom of the Press Foundation . Получено 12 июля 2022 г. .
  37. ^ "VeraCrypt - Бесплатное шифрование дисков с открытым исходным кодом и надежной защитой для параноиков". veracrypt.fr . IDRIX . Получено 12 июля 2022 г. .
  38. ^ "xf86 – X Window System opening driver". Страницы руководства OpenBSD . Получено 14 мая 2021 г.
  39. ^ de Raadt, Theo (11 мая 2006 г.). "Re: ошибка безопасности в оборудовании x86 (спасибо X WIndows)". openbsd-misc (список рассылки) . Получено 26 мая 2016 г.
  40. Herrb, Matthieu (29 ноября 2006 г.). "CVS: cvs.openbsd.org: XF4". openbsd-cvs (список рассылки) . Получено 26 мая 2016 г.
  41. ^ Кеттенис, Марк (15 февраля 2014 г.). "CVS: cvs.openbsd.org: xenocara". openbsd-cvs (список рассылки) . Получено 26 мая 2016 г.
  42. ^ "Xorg теперь может работать без привилегий на OpenBSD". OpenBSD Journal . 22 февраля 2014 г. Получено 26 мая 2016 г.
  43. ^ "OpenBSD 6.4 Errata". www.openbsd.org . Получено 23 мая 2019 г. .
  44. ^ Провос, Нильс ; Фридл, Маркус; Ханиман, Питер (4 августа 2003 г.). Предотвращение повышения привилегий. 12-й симпозиум по безопасности USENIX . Вашингтон, округ Колумбия . Получено 26 мая 2016 г.
  45. Миллер, Робин (11 декабря 2000 г.). «Theo de Raadt Responds». Slashdot . Архивировано из оригинала 28 июля 2011 г. Получено 16 мая 2014 г.
  46. ^ "OpenBSD: Безопасность — "Безопасность по умолчанию"". www.openbsd.org . Получено 27 сентября 2023 г. .
  47. ^ "pledge() - новый механизм смягчения". OpenBSD . Получено 19 мая 2018 г. .
  48. ^ "раскрыть — раскрыть части ограниченного представления файловой системы". Страницы руководства OpenBSD . Получено 15 мая 2020 г.
  • Методы смягчения последствий эксплойтов: обновление спустя 10 лет Архивировано 20 февраля 2014 г. на Wayback Machine
  • Письмо Тео де Раадта о безопасном программировании: По вопросу принятия strlcpy/strlcat в отрасли
Retrieved from "https://en.wikipedia.org/w/index.php?title=OpenBSD_security_features&oldid=1262743844"