Została zaprezentowana wersja wolnego systemu operacyjnego podobnego do UNIX-a OpenBSD 7.4. Projekt OpenBSD został założony przez Theo de Raadta w 1995 roku po konflikcie z programistami NetBSD, w wyniku którego Theo stracił dostęp do repozytoriów CVS NetBSD. Następnie Theo de Raadt wraz z grupą zwolenników stworzył nowy otwarty system operacyjny na podstawie drzewa kodu źródłowego NetBSD, a jego głównymi celami rozwoju stały się przenośność (obsługiwane są 13 platform sprzętowych), standaryzacja, prawidłowe działanie, proaktywne bezpieczeństwo oraz zintegrowane środki kryptograficzne. Rozmiar pełnego obrazu ISO instalacyjnego podstawowego systemu OpenBSD 7.4 wynosi 630 MB.
Oprócz samego systemu operacyjnego, projekt OpenBSD znany jest ze swoich komponentów, które zyskały popularność w innych systemach i ugruntowały swoją pozycję jako jedno z najbardziej bezpiecznych i jakościowych rozwiązań. Należą do nich: LibreSSL (fork OpenSSL), OpenSSH, filtr pakietów PF, demony routingu OpenBGPD i OpenOSPFD, serwer NTP OpenNTPD, serwer pocztowy OpenSMTPD, multiplexer terminali tekstowych (analog GNU screen) tmux, demon identd z implementacją protokołu IDENT, BSDL-alternatywa dla pakietu GNU groff — mandoc, protokół do organizacji systemów odpornych na awarie CARP (Common Address Redundancy Protocol), oraz lekki serwer http, narzędzie do synchronizacji plików OpenRSYNC.
Zaimplementowano wywołania systemowe waitid (oczekiwanie na zmianę stanu procesu), pinsyscall (do przekazywania informacji o punkcie wejścia execve w celu ochrony przed exploitami ROP), getthrname i setthrname (uzyskiwanie i ustalanie nazwy wątku).
- Dla architektur amd64 i i386 dodano komponenty do aktualizacji mikroprogramów dla procesorów AMD. Nowe wersje mikroprogramów są automatycznie instalowane podczas uruchamiania. Port "ports/sysutils/firmware/amd" został przygotowany do dystrybucji plików binarnych mikroprogramów. Instalacja nowego mikroprogramu odbywa się za pomocą standardowej aplikacji fw_update. Podobne wsparcie dla aktualizacji mikroprogramów dla procesorów Intel zostało zrealizowane w 2018 roku oraz zostało zaoferowane w wydaniu OpenBSD 6.3.
- Dla jądra i przestrzeni użytkownika włączono mechanizmy ochrony IBT (Indirect Branch Tracking, amd64) oraz BTI (Branch Target Identification, arm64), mające na celu blokowanie zakłóceń normarnego porządku wykonania (control flow) spowodowanych wykorzystaniem exploitów zmieniających przechowywane w pamięci wskaźniki do funkcji (realizowana ochrona nie pozwala złośliwemu kodowi na przechodzenie do wnętrza funkcji).
- Na systemach z architekturą arm64 do ochrony przestrzeni użytkownika włączono uwierzytelnianie wskaźników (Pointer Authentication). Ta technologia pozwala korzystać z wyspecjalizowanych instrukcji ARM64 do weryfikacji adresów powrotu za pomocą podpisów cyfrowych, które są przechowywane w niewykorzystywanych górnych bitach samego wskaźnika.
- Ustawienia kompilatora systemowego clang, a także clang i gcc z portów, zostały zmienione w celu zastosowania wyżej wymienionych mechanizmów ochrony, co znacznie wzmocniło bezpieczeństwo wszystkich podstawowych aplikacji oraz większości aplikacji z portów przed exploitami wykorzystującymi metody programowania z wykorzystaniem powrotów (ROP – Return-Oriented Programming). Przy użyciu techniki ROP atakujący nie próbuje umieścić swojego kodu w pamięci, lecz operuje już istniejącymi w załadowanych bibliotekach fragmentami instrukcji maszynowych, kończącymi się instrukcją powrotu kontroli (zazwyczaj są to zakończenia funkcji bibliotecznych). Działanie exploita sprowadza się do budowania łańcucha wywołań podobnych bloków („gadżetów”) w celu uzyskania potrzebnej funkcjonalności.
- Dodano nowy systemowy wywołanie kqueue1, które różni się od kqueue przekazywaniem flag. Obecnie w kqueue1 obsługiwana jest tylko flaga O_CLOEXEC (close-on-exec) do automatycznego zamykania deskryptorów plików w procesie potomnym po wywołaniu exec().
- Dla architektur amd64 i i386 wdrożono wsparcie dla pseudourządzenia dt do organizacji dynamicznego śledzenia systemu i aplikacji. Do wstawiania użytkowych zapisów do logu ktrace dodano wywołanie systemowe utrace.
- Z FreeBSD przeniesiono poprawki eliminujące niejednoznaczne zachowanie przy użyciu systemów plików MS-DOS.
- Wyłączono opcję montowania softdep, stosowaną do opóźnionego zbiorczego zapisu metadanych.
- Programom chronionym przy pomocy wywołania systemowego unveil zezwolono na zachowanie zrzutów rdzeniowych w bieżącym katalogu roboczym.
- Dla architektury ARM64 wykorzystano możliwość przejścia w głębokie stany nieaktywności (idle), dostępne w chipach Apple M1/M2, w celu oszczędzania energii i realizacji trybu uśpienia.
- Dodano obejściową ochronę przed luką Zenbleed w procesorach AMD.
- Udoskonalono wsparcie dla systemów wieloprocesorowych (SMP). Zlikwidowano blokady funkcji arprequest(), kod obróbki przychodzących pakietów ARP oraz implementacja określania sąsiednich węzłów w stosie IPv6.
- Interfejs synchronizacji tabeli filtrów pakietów pfsync został przepisany w celu ulepszenia pracy z blokadami i kompatybilności z przyszłymi pracami nad równoległym przetwarzaniem stosu sieciowego.
- Realizacja frameworka drm (Direct Rendering Manager) została zsynchronizowana z jądrem Linux 6.1.55 (w poprzedniej wersji - 6.1.15). Poprawiono działanie na systemach z procesorami Intel opartymi na mikroarchitekturze Alder Lake i Raptor Lake.
- Wprowadzono ulepszenia do hipernadzorcy VMM. W vmd wprowadzono wsparcie dla modelu wieloprocesorowego dla blokowych i sieciowych urządzeń virtio. Do blokowego urządzenia virtio dodano wsparcie dla wektorowego wejścia/wyjścia w trybie zero-copy. Ograniczono dostęp systemów gościnnych do trybów p-state procesorów AMD. Właściciele maszyn wirtualnych mają pozwolenie na nadpisywanie ładowanego jądra przez vmctl.
- Dodano nowy plik nagłówkowy uchar.h z typami char32_t i char16_t oraz funkcjami c32rtomb(), mbrtoc32(), c16rtomb() i mbrtoc16(), zdefiniowanymi w standardzie C11.
- Do funkcji malloc dodano opcję „D” do wykrywania wycieków pamięci za pomocą ktrace („MALLOC_OPTIONS=D ktrace -tu program”) i kdump („kdump -u malloc …”).
- Do narzędzia make dodano wsparcie dla zmiennej ${.VARIABLES} do wyświetlania nazw wszystkich ustawionych globalnych zmiennych.
- Do narzędzia kdump dodano opcję „-u” do wyboru punktów śledzenia utrace według zadanej etykiety.
- Do narzędzia openrsync dodano opcje „—size-only” i „—ignore-times”.
- Do cron i crontab dodano wsparcie dla losowych przesunięć przy wskazywaniu zakresów wartości z zadanym krokiem, co pozwala uniknąć jednoczesnego żądania zasobów z różnych maszyn mających te same zasady w cron. Na przykład, określenie „0~59/30” lub „~/30” w polu minut spowoduje uruchomienie polecenia dwa razy na godzinę w kolejnych losowo wybranych interwałach.
- Do narzędzia wsconsctl dodano możliwość mapowania przycisków dla naciśnięć dwoma lub trzema palcami na gładziku.
- Dodano wsparcie dla nowego sprzętu oraz włączono nowe sterowniki.
- Poprawiono instalację na systemach z procesorami armv7 i arm64.
- Dodano wsparcie dla ładowania plików z partycji systemowej EFI (EFI System Partition).
- W instalatorze poprawiono wsparcie dla programowych RAID (softraid). Dodano możliwość umieszczania partycji root w softraid na systemach riscv64 i arm64. Softraid dodano do ramdisk dla architektury powerpc64. Dla arm64 wprowadzono wsparcie dla szyfrowania dysków (Guided Disk Encryption).
- Do funkcji malloc dodano sprawdzanie wszystkich bloków w liście opóźnionego zwalniania pamięci w celu wykrywania sytuacji zapisu w zwolnioną pamięć.
- Aby wykonać polecenie shutdown, teraz wymagane jest dodanie użytkownika do grupy „_shutdown”, co pozwala na rozdzielenie uprawnień związanych z zakończeniem pracy i bezpośrednim odczytem z urządzeń dyskowych.
- Dzięki wywołaniu systemowemu unveil, narzędzie patch ma ograniczony dostęp tylko do bieżącego katalogu, katalogu plików tymczasowych oraz plików wymienionych w wierszu poleceń.
- Dodano sysctl net.inet6.icmp6.nd6_queued do pokazania liczby pakietów oczekujących na odpowiedź ND6 (analogicznie do ARP).
- Podczas konfiguracji adresu IPv6 na interfejsie sieciowym zapewniono wysyłanie ogłoszenia do sąsiednich routerów pod adresem multicast.
- Dodano początkowe wsparcie dla TSO (TCP Segmentation Offload) i LRO (TCP Large Receive Offload) w celu przetwarzania segmentów i łączenia pakietów po stronie karty sieciowej.
- Przyspieszono ładowanie z jądra reguł filtracji pakietów pf za pomocą narzędzia pfctl. Włączono obsługę akcji „keep state” i „nat-to” dla odpowiedzi ICMP o błędach.
- Wyłączono obliczanie sum kontrolnych IP, TCP i UDP dla interfejsów loopback.
- Dodano początkowe wsparcie VPN IPsec, zależne od trasowania (route-based).
- W bgpd dodano wsparcie dla Flowspec (RFC5575, obecnie wspierane jest jedynie ogłaszanie reguł flowspec). Implementacja ASPA (Autonomous System Provider Authorization) dostosowano do specyfikacji draft-ietf-sidrops-aspa-verification-16 i draft-ietf-sidrops-aspa-profile-16 oraz przekształcono w użycie tabel wyszukiwania niezależnych od AFI (Adres Family Indicator).
- Wydajność rpki-clienta wzrosła o 30-50%. Dodano wsparcie dla kompresji gzip i deflate.
- Zaktualizowano pakiety LibreSSL i OpenSSH. Szczegółowy przegląd ulepszeń można znaleźć w recenzjach LibreSSL 3.8.0, OpenSSH 9.4 i OpenSSH 9.5.
- Liczba portów dla architektury AMD64 wyniosła 11845 (wcześniej 11764), dla aarch64 — 11508 (wcześniej 11561), dla i386 — 10603 (wcześniej 10572). Wśród wersji aplikacji w portach:
- 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 i 11.2.0
- GHC 9.2.7
- GNOME 44
- Go 1.21.1
- JDK 8u382, 11.0.20 i 17.0.8
- KDE Applications 23.08.0
- KDE Frameworks 5.110.0
- Krita 5.1.5
- LLVM/Clang 13.0.0 i 16.0.6
- LibreOffice 7.6.2.1
- Lua 5.1.5, 5.2.4, 5.3.6 i 5.4.6
- MariaDB 10.9.6
- Mono 6.12.0.199
- Mozilla Firefox 118.0.1 i ESR 115.3.1
- Mozilla Thunderbird 115.3.1
- Mutt 2.2.12 i NeoMutt 20230517
- Node.js 18.18.0
- OpenLDAP 2.6.6
- PHP 7.4.33, 8.0.30, 8.1.24 i 8.2.11
- Postfix 3.7.3
- PostgreSQL 15.4
- Python 2.7.18, 3.9.18, 3.10.13 i 3.11.5
- Qt 5.15.10 i 6.5.2
- R 4.2.3
- Ruby 3.0.6, 3.1.4 i 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 i 8.6.13
- TeX Live 2022
- Vim 9.0.1897 i Neovim 0.9.1
- Xfce 4.18
- Zaktualizowano komponenty od zewnętrznych producentów, wchodzące w skład OpenBSD 7.3:
- Graficzny stos Xenocara oparty na X.Org 7.7 z xserver 21.1.8 + poprawki, 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 (+ poprawki)
- GCC 4.2.1 (+ poprawki) i 3.3.6 (+ poprawki)
- Perl 5.36.1 (+ poprawki)
- NSD 4.7.0
- Unbound 1.18
- Ncurses 5.7
- Binutils 2.17 (+ poprawki)
- Gdb 6.3 (+ poprawka)
- Awk 12.9.2023
- Expat 2.5.0.
Źródło: opennet.ru
