10 Punkte von GN⁺ 2025-02-23 | 1 Kommentare | Auf WhatsApp teilen

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.randomdata hinzugefü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

 
GN⁺ 2025-02-23
Hacker-News-Kommentar
  • Die OpenBSD Foundation hat rund 380.000 Dollar gesammelt

    • Wenn man bedenkt, dass sie OpenSSH entwickelt hat und es von allen Fortune-500-Unternehmen genutzt wird, sollte sie meiner Meinung nach jedes Jahr 1–2 Millionen Dollar einwerben
    • Es ist an der Zeit, dass diese Unternehmen nun etwas beitragen
    • Auch Hardware-Anbieter sollten ihren Quellcode offenlegen; Nvidia wird dabei ausdrücklich erwähnt
  • John Ioannidis ist vor einigen Wochen verstorben, und fast niemand hat es bemerkt

    • Er ist auch dafür bekannt, die Grundlage für Mobile IP geschaffen zu haben, das IP auf Mobiltelefonen möglich machte
  • 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

    • Unter OpenBSD ist der statische Adressraum der meisten Programme automatisch unveränderlich geworden
    • Auf modernen Intel/AMD- und ARM-Systemen sind Execute-only Memory sowie BTI/IBT standardmäßig aktiviert
    • Dazu gehört auch Entwicklungsarbeit an den Ports, um das größere Software-Ökosystem darauf vorzubereiten
  • In OpenBSD 5.3 wurde von Matthew Dempsky Random-Data-Memory implementiert

    • Ein Anwendungsfall für diese Funktion ist RETGUARD
    • RETGUARD ersetzt Stack Canaries und prüft konsistent die Rücksprungadresse auf dem Stack mithilfe funktionsspezifischer Zufalls-Cookies
  • AmigaOS nutzte 1985 positionsunabhängige Executables (PIE) und ASLR

    • Amiga hatte keine MMU und nur wenig Speicher, daher musste alles Geladene im verfügbaren RAM platziert werden
    • Einzelne Sektionen konnten an unterschiedlichen Stellen abgelegt werden, und der Compiler erzeugte dafür viele Sektionen
  • Es wird Verwunderung darüber geäußert, dass pledge/unveil nicht prominenter vorgestellt wurden

  • Es wird gefragt, ob OpenBSD ISO C11 _Thread_local implementiert hat

    • Das war die größte Unannehmlichkeit beim Portieren von Software auf OpenBSD
    • OpenBSD war das einzige bedeutende Betriebssystem ohne Unterstützung für nativen Thread-Local-Storage
  • Es wird infrage gestellt, warum die OpenBSD-Seite nur einfaches HTML ohne Styling oder CSS verwendet

    • Typografie ist wichtig für die Lesbarkeit; zumindest eine angemessene Zeilenhöhe und eine Begrenzung auf etwa 60 Zeichen pro Zeile wären nötig
    • Es wird gefragt, ob OpenBSD potenzielle Nutzer nicht ernsthaft berücksichtigt
    • User Experience ist wichtig, und die Lesbarkeit der Dokumentation ist ebenfalls Teil der UX
  • Als weitere hervorragende Ressource wird <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>; empfohlen