Hlavní navigace

OpenBSD 6.4 je ještě bezpečnější, svazuje aplikace a opravuje CPU

Petr Topiarz

Existuje něco, co je ještě bezpečnější než OpenBSD 6.3? Ano, je to OpenBSD 6.4. Nové vydání vylepšuje virtualizační nástroj VMM, podporu spousty hardware a hlavně přidává řadu novinek pro zvýšení bezpečnosti.

Doba čtení: 6 minut

Podzimní pohádka

Dvakrát do roka, většinou na přelomu dubna/května a října/listopadu vychází nové vydání OpenBSD. Současné vydání přináší bezpečnostní novinky, nejdůležitější je zavedení unveil()MAP_STACK.

Pro zajímavost, v OpenBSD neexistují major a minor vydání, a neexistuje ani plnohodnotná dlouhodobá podpora verzí, kromě toho, že si lze připlatit u jedné německé firmy, která zaměstnává hromadu lidí z OpenBSD. Pak dostanete dvouletou podporu. Pro lid obecný je tu zkrátka vždy po půl roce upgrade.

Podporovaný je vždy jen přechod z nejbližší nižší na nejbližší vyšší verzi. Upgrade 6.2 rovnou na 6.4 se nedoporučuje. Na druhou stranu, právě díky častým upgradům se nenastřádá tolik změn a přechod nebývá většinou tak drastický jako třeba přechod z CentOS 6.x na CentOS 7.x. Tento podzim přinesl poměrně hodně různorodých vylepšení, tak se na ně pojďme podívat.

Potěšení pro oči a pár slov o vnitřnostech

Výčet hardwarových vylepšení se čte v tomto vydání jako telefonní seznam. A tak vybereme namátkou pár ilustrativních zajímavostí. Radeon má nyní vylepšené DRM pro KAVERI/KABINI/MULLINS APU a OLAND/BONAIRE/HAINAN/HAWAII GPU a nově je k dispozici i pro arm64. Arm64 získává ACPI.

Ovladače síťových karet s čipsetem RTL8188EE, RTL8723AE obslouží nyní rtwn a RT3290 poskytne ral. Pro externí síťové karty Microchip LAN7500/LAN7505/LAN7515/LAN7850 USB 2.0 a LAN7800/LAN7801 USB 3.0 (Gigabit) tu máme ovladač mue. A milovníci armového hardware si navíc přijdou na své díky nové podpoře pro Allwinner H3 a A64 SoC.

O krok dále ve virtuálním stroji VMM

Virtualizační nástroj vmm z dílny OpenBSD se nyní dočkal podpory pro qcow2, oblíbený a hojně používaný komprimovaný formát z Qemu projektu, a také umí snapshoty. Dále byla přidána podpora šablony virtuálních strojů. Příkaz vmctl nyní podléhá kontrole unveil (viz bezpečnost níže).

V tenatech sítí

Jedno vylepšení pro svět bez drátů: v závislosti na ifconfigu nyní kernel automaticky dokáže přepínat mezi různými Wi-Fi sítěmi. Kromě toho bylo výrazně zlepšeno skenování bezdrátových sítí.

Ve světě obecného síťování máme pro trunk a ifconfig zavedeno vylepšení v práci s LACP (Link Aggregation Control Protocol). Kernel lock odstraněn ze sendmsg, sendto, recvfrom a recvmsg. Bylo přidáno rozhraní eoip pro MikroTik Ethernet over IP (EoIP protocol)

Mnoho vylepšení získává ospf6d. Pledge nyní chrání ospf6d i slaacd. A slaacd  nyní získává ochranu proti DAD (duplicate addres detection). Route nyní hlídá chybné nastavení - netmask/ -prefixlen, a dhclient získává hromadu vylepšení, mezi nimi inteligentní práci s resolv.conf.

Služba bgpd má nově výchozí stav deny (místo allow), volba announce ( all|self|none|default-route) byla nyní označena za přežitou a nahrazena nastaveními ve filtru. Direktiva roa-set nyní poskytuje BGP Origin Validation RFC 6811. Dále vývojáři uvádějí ještě další čištění konfiguračních souborů a nastavení pro tohoto démona.

1. bezpečný
2. bezpečnější
3. nejbezpečnější
4. OpenBSD

Toto vydání zavádí nové systémové volání unveil(), které omezuje přístup běžící aplikace k souborům a adresářům na disku. Ideálně funguje, když se kombinuje se systémem pledge, který zase omezuje přístup aplikace k paměti, popisovačům a síti.

Další velmi zajímavou novinkou je MAP_STACK  – nová volba pro mmap. Tato volba zajišťuje, že kernel si kontroluje, zda pointery ukazují na správné části paměti, což zabraňuje útokům malware zaměřeným na paměť (stack pivoting).

Pro architektury amd64 a arm64 je připraven RETGUARD  – bezpečnostní mechanismus, který brání útočníkovi v přístupu k návratovým instrukcím. Dále je zapracován mechanismus proti Meltdown pro i386 a Spectre pro amd64, a také ochrana proti Spectre v2 pro obě architektury. 

Z bezpečnostních důvodů je vypnut SMT, pokud souběžný multithreading potřebujete, zapnete ho manuálně přes volbu sysctl hw.smt. Dále ještě drobné obranné funkce typu ochrana sshd proti nekonečným slovníkovým útokům. Ve výchozím stavu je také ztlumen mikrofon vašeho počítače.

openSSH

Změn v OpenSSH a LibreSSL je mnoho, tak jen pár pro zajímavost. V nastavení ssh(d) lze nově používat názvy služeb místo portů. Parametrssh -Q sig nám umožní vypsat podporované volby podpisů.

Seznam revokovaných klíčů (KRL) nyní může obsahovat klíče specifikované hašem SHA256. Byl opraven bug z OpenSSH 7.8, kdy špatně fungovalo použití ssh-agenta oproti nižším verzím ssh.

LibreSSL nyní používá přísnější ověření, šifrování DES bylo odstraněno a mnohá volání byla přepsána.

Bagáž a pakáž

Vývojáři zefektivnili instalaci, protože různé postinstalační nástroje typu update-desktop-database se spouštějí nyní jen jednou, po nainstalování všech balíčků, místo toho, aby se spouštěly neprakticky po každém jednom balíčku jako dosud.

Pomocná utilita update-plist byla přepsána tak, aby lépe řešila situace s MULTI_PACKAGES. Balíčky jsou nyní k připravené pro architektury aarch64 (8319 balíčků), i386 (10230 balíčků), amd64 (10304 balíčků), mips64 (7181 balíčků) a sparc64 (7327 balíčků). Pro ostatní architektury jako powerpc, arm a mips64el nejsou čísla k dispozici.

Pro vývoj ve repozitáři naleznete LLVM/Clang 6.0.1, GCC 4.9.4, Mono 5.14.0.177, Ruby 2.3.7, 2.4.4 a 2.5.1, Python 2.7.15 a 3.6.6, a také Rust 1.29.2. PHP se nabízí v repozitáři dle vaší potřeby ve verzích PHP 5.6.38, 7.0.32, 7.1.22 a 7.2.10. Z databází je k mání PostgreSQL 10.5, OpenLDAP 2.3.43 and 2.4.46 a MariaDB 10.0.36. Pro desktop je k dispozici GNOME 3.28.2, Xfce 4.12, Mozilla Firefox 60.2.2esr a 62.0.3, Chromium 69.0.3497.100, Mozilla Thunderbird 60.2.1, LibreOffice 6.1.1.2 nebo Gimp 2.8.22.

Jen pro pořádek uvedu, že na rozdíl od většiny linuxových distribucí používají všechny distribuce BSD odděleně některé programy jako součást takzvaného základního systému. Ty pak není možné přidat či odebrat pomocí nástrojů na správu balíčků.

U OpenBSD tam patří třeba domácí packet filter, httpd, relayd, anebo některé programy třetích stran, které jsou v jiných verzích dostupné přes balíčky, to jsou ku příkladu Perl 5.24.3, nebo Binutils 2.17 a GCC 4.2.1. Tyto balíčky bývají významně opevněné různými záplatami z dílny Theova týmu.

Na co dát pozor při upgradu

Při upgradu je nutno ohlídat některá nastavení, protože drobné změny napříč systémem přinášejí nutnost sáhnout do konfigurace. Tady jsou ty nejpodstatnější:

  • bgpd.conf  – před upgradem zaměnit announce self výrazem announce all, a přidat deny from any a deny to any na začátek pravidel
  • bgpd.conf  – po upgradu odstranit announce all
  • hostname.if  – v nastavení vašeho rozhraní Wi-Fi je ideální mít argument wpakey na stejné lince jako argumenty joinnwid
  • httpd.conf  – změna v syntaxi volby listen on * port 80 a listen on :: port 80 nově nahrazuje pouze jeden řádek  listen on * port 80
  • /etc/installurl  – změna repozitáře, nově pouze řádek: https://cdn.openbsd.org/pub/OpenBSD
  • nsd – control socket přesunut z TCP/IP do unix domain socket, nutno provést úpravu konfiguračního souboru po upgradu přes  sysmerge
  • pf.conf  – PF queue nyní je navázána jen na jedno rozhraní, nikoli na skupinu rozhraní.
  • relayd.conf  – volby log updates a log all byly odstraněny. Nově existují: log state changes, log host checkslog connections
  • smtpd – vícero změn v souborech mail.lmtp a smtpd.conf
  • sndio – nová cesta k session cookie ~/.aucat_cookie →  ~/.sndio/cookie

Velký krok pro lidstvo

Vydání OpenBSD 6.4 je určitě zajímavé zavedením systémového volání unveil(), které pomáhá oddělit jejich běh od běhu ostatních aplikací a přístupu k souborovému systému. Dále přináší hromadu praktických změn, oprav a vylepšení, z nichž mezi významnější určitě patří z hlediska systému ty v OpenSSH a LibreSSL, nebo v případě notebooku třeba ovladače pro grafiky Radeon a implementace ACPI pro arm64. A nebuďte překvapeni, pokud vám nepůjde po startu PC mikrofon.

Kde číst více?

Našli jste v článku chybu?