Die Innovationen von OpenBSD
(openbsd.org)Das OpenBSD-Projekt entwickelt und pflegt eine Vielzahl von Software und Ideen. Nachfolgend eine Übersicht in ungefährer Reihenfolge ihrer Einführung
Konzepte (Concepts)
- IPSec(4): OpenBSD war das erste freie Betriebssystem mit einem IPSec-Stack. Eingeführt am 20. Februar 1997
- INET6(4): Vollständige Integration von IPv6 in OpenBSD 2.7. Entwicklung begann am 6. Januar 1999, und beim ersten Hackathon am 6. Juni desselben Jahres wurde ein nahezu vollständig funktionsfähiger Zustand erreicht
- Privilegientrennung (Privilege Separation): Wurde erstmals im März 2002 in OpenSSH implementiert. Danach auf verschiedene Programme wie bgpd(8), dhclient(8), smtpd(8), tmux(1) usw. angewendet
- Privilegienverzicht (Privilege Revocation): Anwendung einer Methode, bei der Berechtigungen gesenkt werden, während bestimmte Ressourcen beibehalten werden. Beispiele: ping(8), traceroute(8)
- Stack Protector: Basierend auf „propolice“, entwickelt seit 2001. In OpenBSD 3.3 standardmäßig aktiviert
- W^X (Write XOR Execute): Erstmals in OpenBSD 3.3 angewendet. Seit OpenBSD 6.0 standardmäßig strikt erzwungen
- GOT- und PLT-Schutz: In OpenBSD 3.3 wurde ld.so verbessert, um GOT (Global Offset Table) und PLT (Procedure Linkage Table) zu schützen
- ASLR (Address Space Layout Randomization): OpenBSD 3.4 war das erste System, bei dem dies standardmäßig aktiviert war
- Analyse und Prüfungen mit gcc-local(1): Erstmals in OpenBSD 3.4 eingeführt
- Härtung von malloc(3): Zufällige Speicherzuweisung und verzögertes Freigeben beim Allokieren von Speicher. In OpenBSD 4.4 neu implementiert
- Positionsunabhängige Executables (PIE): In OpenBSD 5.3 erstmals standardmäßig aktiviert. Auf 7 Hardware-Plattformen
- Zufallsbasierte Speicherinitialisierung: In OpenBSD 5.3 wurde der ELF-Abschnitt
.openbsd.randomdatahinzugefügt - Stack Protector pro Shared Object: In OpenBSD 5.3 wurden für jedes Shared Object eigene Stack-Protector-Cookies angewendet
- Static-PIE: Unterstützung für positionsunabhängige statische Binärdateien in /bin, /sbin und RAM-Disks. Eingeführt in OpenBSD 5.7
- SROP-Angriffsabwehr: In OpenBSD 6.0 standardmäßig aktiviert
- Randomisierung der Bibliotheks-Ladereihenfolge: In OpenBSD 6.0 und 6.2 standardmäßig aktiviert
- Verbessertes lazy-binding für W^X-Sicherheit in Multithread-Umgebungen: Eingeführt in OpenBSD 5.9
- Härtung des Speicherlayouts: In OpenBSD 6.1 auf alle Programme und Bibliotheken angewendet
- Verwendung der Methode fork+exec: Stärkt den Schutz des Adressraums bei Programmen mit Privilegientrennung
- trapsleds: Anwendung einer NOP-Umwandlungstechnik zur Abschwächung von ROP(Return-Oriented Programming)-Angriffen
- Relinking des Kernels beim Booten: Randomisiert bei jedem Start das interne Layout des Kernels
- Härtung von Instruktionssequenzen auf i386/amd64: Verbesserungen, um ROP-Angriffe zu erschweren
- Hinzufügen der Option MAP_STACK: Verhindert bei ROP-Angriffen den Missbrauch von anderem Speicher als dem Stack
- RETGUARD: Ein stärkerer Schutzmechanismus als der bisherige Stack Protector, eingeführt ab OpenBSD 6.4
- Hinzufügen der Option MAP_CONCEAL: Verhindert, dass sensible Informationen aus Core Dumps auslaufen
- Blockieren von Systemaufrufen aus PROT_WRITE-Speicher: Eingeführt in OpenBSD 6.5
- Fixierung der Position von Systemaufrufen: Beschränkt Systemaufrufe darauf, nur an bestimmten Positionen möglich zu sein
- Verstärkter Schutz des Adressraums: Beschränkt Speicheränderungen über mmap(2), mprotect(2) usw.
- Relinking von sshd beim Booten: Eingeführt in OpenBSD 7.2
- Unterstützung für nicht lesbaren Code (xonly): Beschränkt ausführbaren Speicher so, dass er nicht gelesen werden kann
- Schutz von Systemaufrufen mit pinsyscalls(2): Schützt Systemaufruf-Positionen durch vorherige Registrierung
- Schutz indirekter Sprungziele (BTI, IBT): Anwendung hardwarebasierter Sicherheitsfunktionen
- Hinzufügen der Funktion -fret-clean: Verhindert, dass Rückgabewerte auf dem Stack verbleiben, und blockiert so Informationslecks. Derzeit nur auf amd64 angewendet
Funktionen (Functions)
- issetugid(2): Eine in OpenBSD 2.0 eingeführte Funktion, die prüft, ob für einen Prozess eine Benutzer-ID oder Gruppen-ID zur Laufzeit gesetzt wurde
- arc4random(3): Funktion zur Erzeugung von Zufallszahlen, hinzugefügt in OpenBSD 2.1
- bcrypt(3): Funktion für Passwort-Hashing. Erstmals eingeführt in OpenBSD 2.1
- strlcpy(3), strlcat(3): Funktionen für sicheres Kopieren und Verketten von Zeichenketten. Eingeführt in OpenBSD 2.4
- strtonum(3): Funktion zur Umwandlung von Zeichenketten in Zahlen unter Vermeidung von Fehlern. Eingeführt in OpenBSD 3.6
- imsg: API zur Nachrichtenübermittlung, die in verschiedenen Daemons verwendet wird. In OpenBSD 4.8 zu libutil hinzugefügt
- timingsafe_bcmp(3): Byte-Vergleichsfunktion mit garantierter konstanter Laufzeit. Eingeführt in OpenBSD 4.9
- explicit_bzero(3): Funktion zum sicheren Löschen von Speicher. Hinzugefügt in OpenBSD 5.5
- ohash: Hash-Tabellen-Implementierung. In OpenBSD 5.6 in libutil enthalten
- asr: Alternativer DNS-Resolver. Aktiviert in OpenBSD 5.6
- reallocarray(3): Funktion, die bei Speicher-Reallokation Overflow verhindert. Hinzugefügt in OpenBSD 5.6
- getentropy(2): Funktion, die kryptografisch sichere Zufallszahlen bereitstellt. Eingeführt in OpenBSD 5.6
- sendsyslog(2): Funktion zum Senden von syslog-Meldungen aus dem Kernel. Hinzugefügt in OpenBSD 5.6
- timingsafe_memcmp(3): Speichervergleichsfunktion mit garantierter konstanter Laufzeit. Eingeführt in OpenBSD 5.6
- pledge(2): Funktion zur Erhöhung der Sicherheit durch Beschränkung von System Calls. Hinzugefügt in OpenBSD 5.9
- getpwnam_shadow(3), getpwuid_shadow(3): Funktionen zum Abrufen von Shadow-Passwortdaten zur Härtung der Sicherheit. Eingeführt in OpenBSD 5.9
- recallocarray(3): Funktion, die beim Ändern der Speichergröße vorhandene Daten mit 0 auffüllt. Hinzugefügt in OpenBSD 6.1
- freezero(3): Funktion, die Speicher freigibt und dabei mit 0 überschreibt. Eingeführt in OpenBSD 6.2
- unveil(2): Funktion zur Beschränkung des Zugriffs auf das Dateisystem. Hinzugefügt in OpenBSD 6.4
- malloc_conceal(3), calloc_conceal(3): Bieten beim Allokieren von Speicher Schutz für sensible Daten. Hinzugefügt in OpenBSD 6.5
- ober: ASN.1 Basic Encoding Rules API. In OpenBSD 6.6 nach libutil verschoben
Programme und Subsysteme (Programs and Subsystems)
- YP-bezogene Utilities: ypbind(8), ypset(8), ypcat(1), ypmatch(1), ypwhich(1), hinzugefügte libc-Unterstützung. Erstmals ausgeliefert mit NetBSD 0.9
- ypserv(8): YP-Server, eingeführt in OpenBSD 2.0
- mopd(8): Daemon mit Unterstützung für MOP(Maintenance Operations Protocol). Hinzugefügt in OpenBSD 2.0
- AnonCVS: System, das für anonymen Zugriff auf das OpenBSD-Code-Repository entwickelt wurde
- aucat(1): Utility im Zusammenhang mit dem Audio-Server. Hinzugefügt in OpenBSD 2.1
- OpenSSH: Werkzeug für sichere Kommunikation auf SSH-Basis. Eingeführt in OpenBSD 2.6
- mg(1): Leichter Texteditor. Enthalten ab OpenBSD 2.7
- m4(1): Makroprozessor. Seit OpenBSD 2.7 erweitert und gepflegt
- pf(4), pfctl(8), pflogd(8), authpf(8), ftp-proxy(8): Paketfilter-Firewall. Hinzugefügt in OpenBSD 3.0
- systrace(4), systrace(1): Werkzeug zur Überwachung von System Calls. In OpenBSD 3.2 hinzugefügt, aber seit OpenBSD 5.9 durch pledge(2) ersetzt
- spamd(8): Daemon zur Spam-Filterung. Eingeführt in OpenBSD 3.3
- dc(1), bc(1): Rechner-Utilities. Hinzugefügt in OpenBSD 3.5
- sensorsd(8): Werkzeug zur Überwachung von Hardware-Sensoren. Enthalten in OpenBSD 3.5
- pkg_add(1): Utility zur Paketverwaltung. Eingeführt in OpenBSD 3.5
- carp(4): Netzwerkinterface-Protokoll für Failover. Hinzugefügt in OpenBSD 3.5
- OpenBGPD: BGP-Routing-Daemon. Eingeführt in OpenBSD 3.5
- dhclient(8), dhcpd(8): DHCP-Client und -Server. Hinzugefügt in OpenBSD 3.5~3.6
- hotplugd(8): Daemon zur Verarbeitung von Hotplug-Ereignissen. Hinzugefügt in OpenBSD 3.6
- OpenNTPD: NTP(Network Time Protocol)-Daemon. Hinzugefügt in OpenBSD 3.6
- dpb(1): Verteiltes Paket-Build-System. Eingeführt in OpenBSD 3.6
- ospfd(8), ospfctl(8), ospf6d(8): OSPF(Open Shortest Path First)-Routing-Daemons. Eingeführt in OpenBSD 3.7~4.2
- ifstated(8): Werkzeug zur Verwaltung des Interface-Status. Hinzugefügt in OpenBSD 3.8
- bioctl(8): Werkzeug zur Verwaltung von Blockgeräten und RAID. Enthalten in OpenBSD 3.8
- hostapd(8): Werkzeug zur Verwaltung von Wireless Access Points. Eingeführt in OpenBSD 3.8
- watchdogd(8): Watchdog-Timer zur Sicherstellung der Systemstabilität. Hinzugefügt in OpenBSD 3.8
- sdiff(1): Datei-Vergleichs-Utility. Eingeführt in OpenBSD 3.9
- dvmrpd(8), dvmrpctl(8): Unterstützung für DVMRP(Distance Vector Multicast Routing Protocol). Hinzugefügt in OpenBSD 4.0
- ripd(8), ripctl(8): Unterstützung für RIP(Routing Information Protocol). Enthalten in OpenBSD 4.1
- pkg-config(1): Werkzeug zur Paketkonfiguration. Eingeführt in OpenBSD 4.1
- relayd(8), relayctl(8): Werkzeuge zum Relaying von Netzwerkverkehr. Hinzugefügt in OpenBSD 4.1
- cwm(1): Leichter Window Manager. Hinzugefügt in OpenBSD 4.2
- libtool(1): Werkzeug zur Automatisierung des Bibliotheks-Builds. Enthalten in OpenBSD 4.3
- snmpd(8): SNMP(Simple Network Management Protocol)-Daemon. Hinzugefügt in OpenBSD 4.3
- sysmerge(8): Werkzeug zum Zusammenführen von Systemkonfigurationsdateien. Hinzugefügt in OpenBSD 4.4
- ypldap(8): LDAP-basierter YP-Server. Enthalten in OpenBSD 4.4
- OpenSMTPD: SMTP(Simple Mail Transfer Protocol)-Server. Eingeführt in OpenBSD 4.6
- tmux(1): Terminal-Multiplexer. Enthalten in OpenBSD 4.6
- ldpd(8), ldpctl(8): Unterstützung für das Label Distribution Protocol (LDP). Hinzugefügt in OpenBSD 4.6
- mandoc(1): Werkzeug zur Dokumentation von Manpages. Eingeführt in OpenBSD 4.8
- ldapd(8), ldapctl(8): LDAP(Lightweight Directory Access Protocol)-Server. Hinzugefügt in OpenBSD 4.8
- OpenIKED: Implementierung des IKE(Internet Key Exchange)-Protokolls. Eingeführt in OpenBSD 4.8
- iscsid(8), iscsictl(8): iSCSI-Daemons. Enthalten in OpenBSD 4.9
- rc.d(8), rc.subr(8): Verwaltung von System-Initialisierungsskripten. Hinzugefügt in OpenBSD 4.9
- npppd(8), npppctl(8): PPP(Point-to-Point Protocol)-Daemon. Hinzugefügt in OpenBSD 5.3
- ldomd(8), ldomctl(8): Werkzeuge zur Verwaltung von LDOM(Logical Domains). Enthalten in OpenBSD 5.3
- sndiod(8): Audio-Server. Eingeführt in OpenBSD 5.3
- cu(1): Utility für serielle Kommunikation. Hinzugefügt in OpenBSD 5.4
- slowcgi(8): Werkzeug zur Verarbeitung langsamer HTTP-Anfragen. Enthalten in OpenBSD 5.4
- signify(1): Werkzeug zum Signieren und Verifizieren von Dateien. Hinzugefügt in OpenBSD 5.5
- LibreSSL: Projekt zur Erhöhung der Sicherheit durch einen Fork von OpenSSL. Erstmals veröffentlicht in OpenBSD 5.6
- httpd(8): Leichter Webserver. Enthalten in OpenBSD 5.6
- rcctl(8): Utility zur Verwaltung von rc.d-Diensten. Hinzugefügt in OpenBSD 5.7
- doas(1): Einfaches Utility zur Rechteerweiterung. Eingeführt in OpenBSD 5.8
- radiusd(8): Implementierung eines RADIUS-Servers. Hinzugefügt in OpenBSD 5.8
- eigrpd(8), eigrpctl(8): Unterstützung für EIGRP(Enhanced Interior Gateway Routing Protocol). Enthalten in OpenBSD 5.9
- vmm(4), vmd(8), vmctl(8): System zur Verwaltung virtueller Maschinen. Hinzugefügt in OpenBSD 5.9
- acme-client(1): Client für die Zertifikatsausstellung mit dem ACME-Protokoll. Eingeführt in OpenBSD 6.1
- syspatch(8): Werkzeug zur Verwaltung von Sicherheits-Patches. Hinzugefügt in OpenBSD 6.1
- xenodm(1): Bereinigter Fork von XDM. Enthalten in OpenBSD 6.1
- unwind(8): Lokaler DNS-Resolver. Eingeführt in OpenBSD 6.5
- sysupgrade(8): Werkzeug für automatische System-Upgrades. Hinzugefügt in OpenBSD 6.6
- rpki-client(8): RPKI(Route Origin Validation)-Client. Eingeführt in OpenBSD 6.7
- resolvd(8): Werkzeug zur Verwaltung der DNS-Konfiguration in dynamischen Netzwerkumgebungen. Hinzugefügt in OpenBSD 6.9
- dhcpleased(8): Verbesserter DHCP-Client. Enthalten in OpenBSD 6.9
Projekte, die von OpenBSD-Entwicklern außerhalb von OpenBSD gepflegt werden
- sudo: Werkzeug, mit dem Systemadministratoren bestimmten Benutzern die Berechtigung geben können, eingeschränkte Befehle auszuführen. Enthalten in OpenBSD 2.7
- femail: Einfaches Werkzeug zum Versenden von E-Mails. Begann 2005, ein OpenBSD-Port wurde am 22. September desselben Jahres bereitgestellt
- midish: MIDI-Sequencer und Verarbeitungswerkzeug. Begann 2003, ein OpenBSD-Port wurde am 4. November 2005 bereitgestellt
- fdm: Werkzeug zum Filtern und Ordnen von E-Mails. Begann 2006, ein OpenBSD-Port wurde am 18. Januar 2007 bereitgestellt
- toad: Werkzeug zur automatischen Software-Bereitstellung für OpenBSD. Begann 2013, ein OpenBSD-Port wurde am 8. Oktober desselben Jahres bereitgestellt
- docbook2mdoc: Werkzeug zur Umwandlung von DocBook-Dokumenten in das mdoc-Manpage-Format. Begann 2014, ein OpenBSD-Port wurde am 3. April desselben Jahres bereitgestellt
- portroach: Werkzeug zur Verfolgung von Port-Updates, entwickelt als Fork von FreeBSDs portscout. Begann 2014, ein OpenBSD-Port wurde am 5. September desselben Jahres bereitgestellt
- cvs2gitdump: Werkzeug zur Umwandlung von CVS-Repositories in Git. Begann 2012, ein OpenBSD-Port wurde am 1. August 2016 bereitgestellt
- Game of Trees: Versionsverwaltungssystem als mögliche Alternative zu Git. Begann 2017, ein OpenBSD-Port wurde am 9. August 2019 bereitgestellt
1 Kommentare
Hacker-News-Kommentar
Die OpenBSD Foundation hat rund 380.000 Dollar gesammelt
John Ioannidis ist vor einigen Wochen verstorben, und fast niemand hat es bemerkt
Neben dem privdrop/privsep-Design von OpenBSD und der Einführung von pledge(2)/unveil(2) bleiben auch jüngere Härtungsmaßnahmen wie mimmutable weitgehend unbeachtet
In OpenBSD 5.3 wurde von Matthew Dempsky Random-Data-Memory implementiert
AmigaOS nutzte 1985 positionsunabhängige Executables (PIE) und ASLR
Es wird Verwunderung darüber geäußert, dass pledge/unveil nicht prominenter vorgestellt wurden
Es wird gefragt, ob OpenBSD ISO C11
_Thread_localimplementiert hatEs wird infrage gestellt, warum die OpenBSD-Seite nur einfaches HTML ohne Styling oder CSS verwendet
Als weitere hervorragende Ressource wird <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a> empfohlen