Выпуск OpenBSD 7.4

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

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

Основные улучшения:

  • Для архитектур amd64 и i386 добавлены компоненты для обновления микрокода к процессорам AMD. Новые версии микрокода устанавливаются автоматически при загрузке. Для распространения бинарных файлов с микрокодом подготовлен порт «ports/sysutils/firmware/amd». Установка нового микрокода осуществляется при помощи штатной утилиты fw_update. Аналогичная поддержка обновления микрокода для процессоров Intel была реализована в 2018 году и предложена в выпуске OpenBSD 6.3.
  • Для ядра и пространства пользователя включены механизмы защиты IBT (Indirect Branch Tracking, amd64) и BTI (Branch Target Identification, arm64), предназначенные для блокирования нарушения нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции (реализованная защита не позволяет вредоносному коду выполнить переход на середину функции).
  • На системах с архитектурой arm64 для защиты пространства пользователя включена аутентификация указателей (Pointer Authentication). Технология позволяет использовать специализированные инструкции ARM64 для проверки адресов возврата при помощи цифровых подписей, которые хранятся в неиспользуемых верхних битах самого указателя.
  • Настройки системного компилятора clang, а также clang и gcc из портов, изменены для применения вышеотмеченных механизмов защиты, что значительно усилило защиту всех базовых приложений и большинства приложений из портов от эксплоитов, использующих методы возвратно-ориентированного программирования (ROP — Return-Oriented Programming). При использовании техники ROP атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления (как правило, это окончания библиотечных функций). Работа эксплоита сводится к построению цепочки вызовов подобных блоков («гаджетов») для получения нужной функциональности.
  • Добавлен новый системный вызов 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 (в прошлом выпуске — 6.1.15). Улучшена работа на системах с процессорами Intel на базе микроархитектур Alder Lake и Raptor Lake.
  • Внесены улучшения в гипервизор VMM. В vmd реализована поддержка многопроцессной модели для блочных и сетевых virtio-устройств. В блочное virtio-устройство добавлена поддержка векторного ввода/вывода в режиме zero-copy. Ограничен доступ гостевых систем к режимам p-state процессоров AMD. Владельцам виртуальных машин разрешено через vmctl переопределять загружаемое ядро.
  • Добавлен новый заголовочный файл uchar.h с типами char32_t и char16_t, и функциями c32rtomb(),
    mbrtoc32(),
    c16rtomb() и
    mbrtoc16(), определёнными в стандарте C11.

  • В функцию malloc добавлена опция «D» для определения утечек памяти при помощи ktrace («MALLOC_OPTIONS=D ktrace -tu program») и kdump («kdump -u malloc …»).
  • В утилиту make добавлена поддержка переменной ${.VARIABLES} для вывода имён всех выставленных глобальных переменных.
  • В утилиту kdump добавлена опция «-u» для выбора точек трассировки utrace по заданной метке.
  • В утилиту openrsync добавлены опции «—size-only» и «—ignore-times».
  • В cron и crontab добавлена поддержка случайных смещений при указании диапазонов значений с заданным шагом, что позволяет избежать одновременного запроса ресурса с разных машин, имеющих одинаковые правила в cron.
    Например, указание «0~59/30» или «~/30» в поле с минутами приведёт к запуску команды два раза в час через последовательные случайно выбранные интервалы.

  • В утилиту wsconsctl добавлена возможность маппинга кнопок для нажатий двумя или тремя пальцами на кликпаде.
  • Добавлена поддержка нового оборудования и включены в состав новые драйверы.
  • Улучшена установка на системы с процессорами 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).
  • На 30-50% повышена производительность rpki-client. Добавлена поддержка сжатия gzip и deflate.
  • Обновлены пакеты LibreSSL и OpenSSH. Подробный обзор улучшений можно посмотреть в обзорах LibreSSL 3.8.0, OpenSSH 9.4 и OpenSSH 9.5.
  • Число портов для архитектуры 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:
    • Графический стек Xenocara на базе X.Org 7.7 с xserver 21.1.8 + патчи, freetype 2.13.0, fontconfig 2.14.2, Mesa 22.3.7, xterm 378, xkeyboard-config 2.20, fonttosfnt 1.2.2.
    • 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.

Источник: http://www.opennet.ru/opennews/art.shtml?num=59942