Что нового в OpenBSD 7.4: обзор основных улучшений и компонентов

Появиласьверсия свободной UNIX-подобной операционной системы OpenBSD 7.4 . Проект был основан Тэо де Раадтом в 1995 году после конфликта с разработчиками NetBSD, который привел к тому, что Тэо был лишен доступа к CVS-репозиторию NetBSD. Тогда он собрал команду единомышленников и создал новую открытую операционную систему на основе исходного кода NetBSD. Главные цели проекта стали -переносимость ( система работает на 13 разных платформах), стандартизация, надежность, безопасность и встроенные криптографические функции. Полный установочный ISO-образ базовой системы OpenBSD 7.4 занимает 630 МБ.

Проект OpenBSD также известен своими компонентами, которые были успешно внедрены в другие операционные системы и признаны одними из наиболее безопасных и качественных решений. Среди них можно выделить следующие: LibreSSL (вариант OpenSSL), OpenSSH , пакетный фильтр PF, демоны маршрутизации OpenBGPD и OpenOSPFD , сервер точного времени OpenNTPD, почтовый сервер OpenSMTPD, мультиплексор текстовых терминалов (аналог GNU screen) tmux , демон identd с реализацией протокола IDENT, альтернатива пакету GNU groff – mandoc , протокол CARP (Common Address Redundancy Protocol) для обеспечения надежности систем, легковесный HTTP-сервер и утилита синхронизации файлов OpenRSYNC.

В представленной версии системы есть много улучшений:

  • Для архитектур amd64 и i386 добавлена поддержка обновления микрокода процессоров AMD. Новые версии микрокода теперь устанавливаются автоматически при загрузке системы. Для распространения бинарных файлов с микрокодом разработан порт “ports/sysutils/firmware/amd”. Установка нового микрокода выполняется с помощью утилиты fw_update.
  • Добавлены механизмы защиты IBT (Indirect Branch Tracking, amd64) и BTI (Branch Target Identification, arm64) для ядра и пространства пользователя. Они предназначены для предотвращения нарушения нормального порядка выполнения при использовании эксплоитов, изменяющих хранимые в памяти указатели на функции ((реализованная защита не позволяет вредоносному коду выполнить переход на середину функции).
  • На архитектуре arm64 введена поддержка аутентификации указателей (Pointer Authentication), которая использует специализированные инструкции ARM64 для проверки адресов возврата с помощью цифровых подписей, хранящихся в верхних битах указателя. Это улучшает безопасность системы.
  • Настройки системного компилятора clang, а также clang и gcc из портов, изменены для применения вышеотмеченных механизмов защиты. Это значительно повышает безопасность базовых приложений и большинства приложений из портов от эксплоитов, использующих методы возвратно-ориентированного программирования (ROP – Return-Oriented Programming)
  • Добавлен новый системный вызов kqueue1, который отличается от обычного kqueue передачей флагов. В настоящее время kqueue1 поддерживает только флаг O_CLOEXEC (close-on-exec) для автоматического закрытия файловых дескрипторов в дочерних процессах после вызова exec().
  • Для архитектур amd64 и i386 добавлена поддержка псевдоустройства dt для организации динамической трассировки системы и приложений. Для вставки пользовательских записей в лог ktrace добавлен системный вызов utrace .
  • Из FreeBSD перенесены исправления, устраняющие неопределенное поведение при использовании файловых систем MS-DOS.
  • Отключена опция монтирования softdep, которая применяется для отложенной сгруппированной записи метаданных.
  • Программам, защищенным с помощью системного вызова unveil, разрешено сохранять core-дампы в текущем рабочем каталоге.
  • Для архитектуры ARM64 активирована поддержка глубоких состояний неактивности (idle), доступных в чипах Apple M1/M2, для более эффективного управления энергопотреблением.
  • Добавлена дополнительная защита от уязвимости Zenbleed в процессорах AMD.
  • Усовершенствована поддержка многопроцессорных систем (SMP). Избавлены от блокировок функция arprequest(), код обработки входных ARP-пакетов и реализация определения соседних узлов в стеке IPv6.
  • Интерфейс синхронизации таблиц пакетного фильтра pfsync переписан для лучшей работы с блокировками и совместимости с будущими работами по распараллеливанию сетевого стека.
  • Реализация фреймворка drm (Direct Rendering Manager) синхронизирована с ядром Linux 6.1.55, что улучшает работу на системах с процессорами Intel на базе микроархитектур Alder Lake и Raptor Lake.
  • В гипервизор VMM введена поддержка многопроцессорной модели для блочных и сетевых virtio-устройств. Также добавлена поддержка векторного ввода/вывода в режиме zero-copy для блочных virtio-устройств. Ограничен доступ гостевых систем к режимам p-state процессоров AMD, а владельцам виртуальных машин разрешено переопределять загружаемое ядро через vmctl.
  • Добавлен новый заголовочный файл uchar.h с типами char32_t и char16_t, а также соответствующими функциями, определенными в стандарте C11.
  • Функция malloc теперь поддерживает опцию “D” для обнаружения утечек памяти при помощи ktrace (“MALLOC_OPTIONS=D ktrace -tu program”) и kdump (“kdump -u malloc …”).
  • Утилита make получила поддержку переменной ${.VARIABLES} для вывода имён всех установленных глобальных переменных.
  • В утилиту openrsync добавлены опции “–size-only” и “–ignore-times”.
  • Теперь в cron и crontab поддерживаются случайные смещения при указании диапазонов значений с определенным шагом. Это позволяет избежать одновременных запросов ресурсов с разных машин, имеющих одинаковые правила в cron. Например, указание “059/30” или “/30” в поле с минутами приводит к запуску команды дважды в час через последовательные случайно выбранные интервалы.
  • В утилиту wsconsctl добавлена возможность маппинга кнопок для нажатий двумя или тремя пальцами на кликпаде.
  • Также в этой версии OpenBSD добавлена поддержка нового оборудования и включены новые драйверы.
  • Установка на системы с процессорами armv7 и arm64 теперь улучшена, а также добавлена поддержка загрузки файлов из системного раздела EFI (EFI System Partition).
  • В инсталляторе улучшена поддержка программных RAID (softraid), включая размещение корневого раздела в softraid на системах riscv64 и arm64. Softraid также добавлен в ramdisk для архитектуры powerpc64. Для arm64 реализована поддержка шифрования дисков (Guided Disk Encryption).
  • Функция malloc теперь включает проверку всех блоков в списке отложенного освобождения памяти для выявления ситуаций записи в освобожденную область памяти.
  • Для выполнения команды shutdown теперь требуется добавление пользователя в группу “_shutdown”, что позволяет разделить полномочия, связанные с завершением работы и прямым чтением с дисковых устройств.
  • С использованием системного вызова unveil, утилита patch ограничена доступом только к текущему каталогу, каталогу со временными файлами и файлам, перечисленным в командной строке.
  • Добавлен sysctl net.inet6.icmp6.nd6_queued для отображения числа пакетов, ожидающих ответа ND6 (по аналогии с ARP).
  • При настройке адреса IPv6 на сетевом интерфейсе теперь отправляется анонс соседним маршрутизаторам по мультикаст адресу.
  • Добавлена начальная поддержка TSO (TCP Segmentation Offload) и LRO (TCP Large Receive Offload) для обработки сегментов и объединения пакетов на стороне сетевой карты.
  • Также ускорена загрузка правил пакетного фильтра pf утилитой pfctl, включая обработку действий “keep state” и “nat-to” для возвращаемых через ICMP сообщений об ошибках.
  • Контрольные суммы IP, TCP и UDP больше не вычисляются для loopback-интерфейсов.
  • В этой версии добавлена начальная поддержка VPN IPsec, зависящих от маршрутизации (route-based).
  • В bgpd добавлена поддержка Flowspec (RFC5575) с анонсированием правил flowspec. Реализация ASPA (Autonomous System Provider Authorization) приведена к соответствию спецификациям draft-ietf-sidrops-aspa-verification-16 и draft-ietf-sidrops-aspa-profile-16, и переведена на использование поисковых таблиц, не зависящих от AFI (Address Family Indicator).
  • Производительность rpki-client увеличена на 30-50%, добавлена поддержка сжатия gzip и deflate.
  • Обновлены пакеты LibreSSL и OpenSSH.
  • Число портов для архитектуры AMD64 составило 11845 (было 11764), для aarch64 – 11508 (было 11561), для i386 – 10603 (было 10572). Среди версий приложений в портах:
    • Asterisk 16.30.1, 18.19.0б, 20.4.0
    • Audacity 3.3.3
    • CMake 3.27.5
    • Chromium 117.0.5938.149
    • Emacs 29.1
    • FFmpeg 4.4.4
    • GCC 8.4.0 и 11.2.0
    • GHC 9.2.7
    • GNOME 44
    • Go 1.21.1
    • JDK 8u382, 11.0.20 и 17.0.8
    • KDE Applications 23.08.0
    • KDE Frameworks 5.110.0
    • Krita 5.1.5
    • LLVM/Clang 13.0.0 и 16.0.6
    • LibreOffice 7.6.2.1
    • Lua 5.1.5, 5.2.4, 5.3.6 и 5.4.6
    • MariaDB 10.9.6
    • Mono 6.12.0.199
    • Mozilla Firefox 118.0.1 и ESR 115.3.1
    • Mozilla Thunderbird 115.3.1
    • Mutt 2.2.12 и NeoMutt 20230517
    • Node.js 18.18.0
    • OpenLDAP 2.6.6
    • PHP 7.4.33, 8.0.30, 8.1.24 и 8.2.11
    • Postfix 3.7.3
    • PostgreSQL 15.4
    • Python 2.7.18, 3.9.18, 3.10.13 и 3.11.5
    • Qt 5.15.10 и 6.5.2
    • R 4.2.3
    • Ruby 3.0.6, 3.1.4 и 3.2.2
    • Rust 1.72.1
    • SQLite 3.42.0
    • Shotcut 23.07.29
    • Sudo 1.9.14.2
    • Suricata 6.0.12
    • Tcl/Tk 8.5.19 и 8.6.13
    • TeX Live 2022
    • Vim 9.0.1897 и Neovim 0.9.1
    • Xfce 4.18
  • Обновлены компоненты от сторонних разработчиков, входящие в состав OpenBSD 7.3:
    • LLVM/Clang 13.0.0 (+ патчи)
    • GCC 4.2.1 (+ патчи) и 3.3.6 (+ патчи)
    • Perl 5.36.1 (+ патчи)
    • NSD 4.7.0
    • Unbound 1.18
    • Ncurses 5.7
    • Binutils 2.17 (+ патчи)
    • Gdb 6.3 (+ патч )
    • Awk 12.9.2023
    • Expat 2.5.0.
Public Release.