Представлен новый выпуск свободной, кросс-платформенной UNIX-подобной операционной системы OpenBSD 6.2. Проект OpenBSD был основан Тэо де Раадтом (Theo de Raadt) в 1995 году, после конфликта с разработчиками NetBSD, в результате которого для Тэо был закрыт доступ к CVS репозиторию NetBSD. После этого Тэо де Раадт с группой единомышленников создал на базе дерева исходных текстов NetBSD новую открытую операционную систему, главными целями развития которой стали переносимость (поддерживается 13 аппаратных платформ), стандартизация, корректная работа, активная безопасность и интегрированные криптографические средства. Размер полного установочного ISO-образа базовой системы OpenBSD 6.2 составляет 340 Мб.
Кроме непосредственно операционной системы, проект 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-сервер.
Основные улучшения:
- Clang задействован по умолчанию в качестве компилятора для базовой системы и портов для архитектур amd64 и i386. Поддержка gcc4 сохранена, но теперь позиционируется как опция. Некоторые оптимизации clang отключены из-за возможного негативного влияния на безопасность;
- Задействована новая техника рандомизации адресного пространства ядра KARL (Kernel Address Randomized Link), нацеленная на усиление защиты от атак, связанных с манипуляцией структурами и кодом ядра. KARL позволяет изменить первичную раскладку виртуального адресного пространства ядра через выполнение операции перекомпоновки исполняемого файла ядра при каждой перезагрузке, формируя каждый раз уникальный экземпляр ядра, раскладка структур в котором заранее неизвестна;
- Добавлена реализация технологии защиты Trapsleds, усложняющей выполнение эксплоитов, использующих технику заимствования кусков кода (ROP, Return-Oriented Programming). Суть метода в применении для заполнения добавочных областей (используются для выравнивания блоков с кодом функций по 16-байтовой границе) инструкций INT3 вместо NOP. В случает выполнения эксплоита попадание на область заполнения на базе INT3 приведёт к возникновению исключения и остановке выполнения (SIGTRAP) вместо выполнения следующих за добавочным блоком инструкций;
- Обеспечена перекомпоновка библиотек libcrypto и ld.so при каждом перезапуске с расстановкой входящих в библиотеку объектов в случайном порядке;
- Процессы pflogd и tcpdump переведены на модель fork+exec;
- В процессах ifstated, at и snmpd задействован механизм изоляции pledge;
- Усилена защита, связанная с упаковкой структур и очисткой объектов ядра, перед их передачей в пространство пользователя;
- Ядро избавлено от глобальной блокировки (KERNEL_LOCK) при обработке входящих и транзитных пакетов, что положительно отразилось на производительности и привело к снижению задержек;
- С целью упрощения стека IPv6 в ядре прекращена поддержка автоконфигурации (IPv6 Stateless Address Autoconfiguration, RFC 4862). Данная возможность теперь реализуется на уровне пользователя процессом slaacd(8);
- В pf интегрирована поддержка алгоритма FQ-CoDel (Сontrolled Delay — управляемая задержка), позволяющего существенно поднять производительность работы в беспроводных сетях. В pf также добавлена возможность инспектирования пакетов AH (IP Authentication Header, RFC 4302) и проверки инкапсулированного в них протокола;
- В системе распределения памяти для обработки сетевых пакетов реализованы отдельные кэши для каждого ядра CPU;
- Улучшения в системе виртуализации VMM: В утилиту vmctl добавлена возможность миграции приостановленных виртуальных машин и манипуляции снапшотами памяти виртуальных окружений; В гостевых системах обеспечена поддержка доступа к инструкциям AVX/AVX2 CPU; Добавлена поддержка AMD SVM/RVI. Размер памяти виртуальных окружений увеличен до 32GB на системах amd64. Внесена большая порция улучшений в код эмуляции устройств;
- Улучшения в инсталляторе: осуществлён переход на Allotment Routing Table (ART), реализована генерация уникального образа ядра, обеспечен запуск скриптов install.site и upgrade.site после завершения установки и обновления, расширена выводимая информация о дисках, на системах amd64 задействовано расширение AES-NI;
- Представлена новая функция freezero, выполняющая операцию освобождение памяти с обнулением содержимого;
- Добавлен новый системный вызов futex;
- В библиотеке pthread представлена новая реализация mutex и условных переменных (condition variable), позволяющая увеличить отзывчивость многопоточных приложений;
- Добавлена собственная реализация POSIX xlocale;
- В функции malloc при указании опции «F» улучшено определение случаев двойного освобождения одного блока памяти;
- Включен автоматический переход в спящий режим при низком заряде аккумулятора;
- Добавлены утилиты ctfdump и ctfconv для манипуляции файлами в формате CTF (Compact C Type Format);
- Добавлена система трассировки процессов fktrace;
- В беспроводном стеке теперь отдаётся предпочтения частоте 5GHz, а не 2GHz, в процессе выбора точки доступа;
- В rtadvd добавлена поддержка рекомендаций по снижению энергопотребления RFC 7772 («Reducing Energy Consumption of Router Advertisements»);
- В утилиту nc добавлены опции: «-W recvlimit» для завершения работы после получения заданного числа пакетов, «-T tlscompat» для включения TLS-протоколов из категории «compat» в libtls, «-Z» для сохранения сертификата удалённого хоста в формате PEM;
- В bgpd обеспечена поддержка виртуальных маршрутизаторов через запуск своего экземпляра bgpd для каждого домена маршрутизации;
- В dhcpd добавлена поддержка выражения echo-client-id и обеспечена обработка сообщений DHCPINFORM от клиентов на другой стороне DHCP-шлюза;
- Обновлена версия почтового сервера OpenSMTPD, в которой устранена утечка файловых дескрипторов, прекращена поддержка синтаксиса «listen secure» и удалена поддержка фильтров (позиционировались как экспериментальная возможность);
- Обновлён пакет OpenSSH 7.6, подробный обзор улучшений можно посмотреть здесь;
- Обновлён пакет LibreSSL, подробный обзор улучшений можно посмотреть в анонсах выпусков 2.6.0 и 2.6.1;
- Число портов для архитектуры AMD64 составило 9728 , для i386 — 9685. Из находящихся в портах приложений, отмечены:
- CMake 3.9.3
- Chromium 61.0.3163.100
- GCC 4.9.4
- GNOME 3.24.2
- Go 1.9
- JDK 8u144
- KDE 3.5.10 и 4.14.3;
- LLVM/Clang 5.0.0
- LibreOffice 5.2.7.2
- Lua 5.1.5, 5.2.4, and 5.3.4
- MariaDB 10.0.32
- Mozilla Firefox 52.4.0esr и 56.0.0
- Mozilla Thunderbird 52.2.1
- Node.js 6.11.2
- OpenLDAP 2.3.43 и 2.4.45
- PHP 5.6.31 и 7.0.23
- Postfix 3.2.2 и 3.3-20170910
- PostgreSQL 9.6.5
- Python 2.7.14 и 3.6.2
- Ruby 1.8.7.374, 2.1.9, 2.2.8, 2.3.5 и 2.4.2
- Rust 1.20.0
- Sendmail 8.16.0.21
- SQLite3 3.20.1
- Vim 8.0.0987
- Xfce 4.12
- Компоненты от сторонних разработчиков, входящие в состав OpenBSD 6.2:
- Графический стек Xenocara на базе X.Org server 1.18.4 с патчами, freetype 2.8.0, fontconfig 2.12.4, Mesa 13.0.6, xterm 330, xkeyboard-config 2.20 и т.п.)
- LLVM/Clang 4.0.0 (c патчами)
- GСС 4.2.1 (c патчами) и 3.3.6 (c патчами)
- Perl 5.24.2 (c патчами)
- NSD 4.1.175
- Unbound 1.6.6
- Ncurses 5.7
- Binutils 2.17 (c патчами)
- Gdb 6.3 (c патчами)
- Awk в версии от 10 августа 2011 г.
- Expat 2.1.4
- Расширена поддержка оборудования: Значительно расширено число драйверов для платформы ARM; Добавлен драйвер hvs для хранилища Hyper-V. Добавлена поддержка беспроводных карт на базе чипов Intel 8265 и 3168, RTL8192CE, RT5360 и RTS525A. Драйвер для GPU Intel (inteldrm) обновлён до состояния драйвере из ядра Linux 4.4.70 и теперь включает поддержку графических подсистем чипов Skylake, Kaby Lake и Cherryview, а также улучшенную поддержку Broadwell и Valleyview.