Выпуск OpenBSD 6.0

2016-09-01

Состоялся релиз операционной системы 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.