Выпуск OpenBSD 6.0
Состоялся релиз операционной системы OpenBSD 6.0. Проект OpenBSD был основан Тэо де Раадтом (Theo de Raadt) в 1995 году, после конфликта с разработчиками NetBSD, в результате которого для Тэо был закрыт доступ к CVS репозиторию NetBSD. После этого Тэо де Раадт с группой единомышленников создал на базе дерева исходных текстов NetBSD новую открытую операционную систему, главными целями развития которой стали переносимость (поддерживается 20 аппаратных платформ), стандартизация, корректная работа, активная безопасность и интегрированные криптографические средства. Размер полного установочного ISO-образа базовой системы OpenBSD 6.0 составляет 216 Мб.
Кроме непосредственно операционной системы, проект 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-сервер.
Основные улучшения:
- Включён по умолчанию механизм защиты памяти W^X (Write XOR Execute), при котором страницы памяти процесса не могут быть одновременно доступны на запись и исполнение. Таким образом, код может быть исполнен только после запрещения записи, а запись в страницу памяти возможна только после запрета исполнения. Механизм W^X помогает защитить приложения в пространстве пользователя от типовых атак, осуществляемых через переполнение буфера, в том числе от переполнений стека (записанный за пределы буфера код не может быть исполнен).
Традиционная модель "W|X", допускающая одновременно запись и исполнение, переведена в разряд недопустимых. Для обхода запрета требуется монтирование ФС (ffs/nfs) со специальным флагом "wxallowed", который рекомендуется использовать для монтирования /usr/local, так как некоторые порты пока не адаптированы для нормальной поддержки "W^X". Например, наблюдаются проблемы с JDK, GCC, Mono и Chromium. При установке на новую систему опция "wxallowed" будет применена к /usr/local по умолчанию,но при обновлении необходимо уделить этому внимание, чтобы не потерять работоспособность установленных пакетов.
- Добавлены средства для блокирования эксплоитов, основанных на технике заимствования кусков кода: При каждой загрузке libc.so перекомпоновывается с перестроением в случайном порядке экспортируемых символов, что затрудняет создание ROP-эксплоитов, так как составляющие эксплоит "гаджеты" меняют свои смещения при каждой загрузке. Функции setjmp и jmpbuf теперь применяют к стеку и адресам возврата операции XOR со специальной меткой (cookie). Вызов sigreturn теперь может применяться только через предоставляемый ядром обработчиков сигналов с cookie для определения фактов повторного использования;
- Добавлен самостоятельный загрузчик EFI для ARMv7. Теперь не нужен u-boot с его отдельным FAT-разделом, грузиться можно прямо с FFS. Благодаря использованию одного ядра для всех SoC и поддержке Flattened Device Tree (FDT) для определения параметров оборудования, значительно упрощена реализация поддержки новых ARM плат;
- Из-за отсутствия рабочего оборудования прекращено поддержка архитектуры VAX, не поддерживавшей разделяемые библиотеки;
- Удалена прослойка для обеспечения совместимости с Linux, которая была доступна только для систем i386 и содержала ряд концептуальных проблем, которые потенциально могли оказывать негативное влияние на безопасность.
- Удалён механизм ограничения системных вызовов systrace, на смену которому пришла технология Pledge;
- Удалена возможность монтирования файловых систем непривилегированным пользователем (sysctl kern.usermount), которая позволяла не использовать привилегии root для монтирования в произвольную часть дерева vfs. Вместо данной возможности рекомендуется использовать doas/sudo;
- Добавлены настройки sysctl net.inet.tcp.rootonly и net.inet.udp.rootonly, позволяющие выборочно запретить приём соединений по указанным в списке сетевым портам непривилегированными процессами;
- Продолжена работа по распараллеливанию сетевых операций. Исправлены некоторые проблемы в планировщике задач, что позволило увеличить отзывчивость рабочего стола и таких приложений, как web-браузеры;
- Увеличена производительность таблиц маршрутизации, благодаря использованию структур ART (Allotment Routing Table), обеспечивающих более быстрый поиск записей. В rc.d и rcctl добавлена поддержка таблиц маршрутизации;
- Добавлены драйверы нового оборудования, в том числе представлены драйверы для Intel Bay Trail GPIO, Intel Cherry View GPIO, конроллеров NVMe, Mobile Broadband Interface Model (MBIM), RealTek RTL8152 10/100 USB Ethernet, устройств захвата видео Fushicai USBTV007, беспроводных чипов Intel Wireless 3165 и 8260;
- Обновлена версия почтового сервера OpenSMTPD 6.0, в которой реализован механизм защиты fork+exec, унифицирован формат логов,
- Обновлена реализация NTP-сервера OpenNTPD 6.0;
- Обновлён пакет OpenSSH 7.3, подробный обзор улучшений можно посмотреть здесь;
- Обновлён пакет LibreSSL 2.4.2, подробный обзор улучшений можно посмотреть в анонсах выпусков 2.4.0 и 2.4.2;
- Число портов для архитектуры AMD64 составило 9433, для i386 - 9394. Из находящихся в портах приложений, отмечены:
- Chromium 51.0.2704.106
- GCC 4.9.3
- Gimp 2.8.16
- GNOME 3.20.2
- Go 1.6.3
- JDK 7u80 и 8u72
- KDE 3.5.10 и 4.14.3;
- LLVM/Clang 3.8.0
- LibreOffice 5.1.4.2
- MariaDB 10.0.25
- Firefox 45.2.0esr и 47.0.1
- Thunderbird 45.2.0
- Node.js 4.4.5
- PHP 5.5.37, 5.6.23 и 7.0.8
- Postfix 3.1.1 и 3.2-20160515
- PostgreSQL 9.5.3
- Python 2.7.12, 3.4.5 и 3.5.2
- Rust 1.9.0-20160608
- Компоненты от сторонних разработчиков, входящие в состав OpenBSD 5.9:
- Графический стек Xenocara на базе X.Org server 1.18.3 с патчами, freetype 2.6.3, fontconfig 2.11.1, Mesa 11.2.2, xterm 322, xkeyboard-config 2.18 и т.п.)
- Gcc 4.2.1 (c патчами) и 3.3.6 (c патчами)
- Perl 5.20.3 (c патчами)
- SQLite 3.9.2 (c патчами)
- NSD 4.1.10
- Unbound 1.5.9
- Ncurses 5.7
- Binutils 2.17 (c патчами)
- Gdb 6.3 (c патчами)
- Awk в версии от 10 августа 2011 г.
- К выходу релиза приурочено 6 новых песен.
Кроме функциональных новшеств, принято решение об изменении процесса подготовки релизов. Долгие годы процесс разработки OpenBSD обеспечивался продажей компакт-дисков. Установочные образы появились только в версии 4.2, но и после этого основным способом установки были компакт-диски. Продажа дисков финансировала работу Тео де Раадта по созданию операционной системы, но на подготовку дисков уходило много времени и после заморозки релиз приходилось ждать ещё полтора месяца - пока диски изготовят, напечатают, доставят. Релиз 6.0 стал последним, который распространялся таким способом, в дальнейшем все релизы будут публиковаться через Web, и задержка выпуска будет минимальной.
Из грядущих улучшений также отмечается добавление утилиты acme-client для получения ключей от удостоверяющего центра Let's Encrypt в основной состав базовой системы OpenBSD Current.