Представлен выпуск свободной 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.
>>> Подробности