OpenBSD, bekannt für seine Fokus auf Sicherheit und Stabilität, hat kürzlich ein bedeutendes Update im Bereich der Programm- und Systemanalyse erhalten. Mit der Einführung eines neuen Profilingsubsystems für die aktuelle Entwicklungszweig OpenBSD-current setzt das Projekt erneut Maßstäbe in Sachen Sicherheit kombiniert mit Funktionalität. Die Entwicklung wurde maßgeblich von Theo de Raadt, dem Gründer und Projektleiter von OpenBSD, vorangetrieben. Das neue Subsystem bringt eine zeitgemäße Lösung für Herausforderungen, die im bisherigen gprof-Profiling zu beobachten waren, insbesondere im Zusammenspiel mit den strikten Sicherheitsmechanismen von OpenBSD. Die traditionelle gprof-Methode basierte auf dem Profil-Systemaufruf profil(), der es ermöglichte, einen Speicherpuffer anzulegen, in dem die gesammelten Daten über die Programmausführung zwischengespeichert wurden.
Am Ende eines Programmablaufs wurden diese Daten durch eine Routine namens _mcleanup() zusammengefasst und in einer Datei gespeichert. Dieses Verfahren war zwar funktional, stieß jedoch zunehmend an seine Grenzen, da es im OpenBSD-Kontext immer schwieriger wurde, Daten sicher zu speichern. Die zunehmenden Sicherheitsmechanismen wie Privilege-Separation (Privsep), Privileg-Dropping, Chroot, Setresuid sowie die Sicherheitsprimitiven Pledge und Unveil verhinderten es, dass Programme ohne weiteres auf das Dateisystem zugreifen konnten, um gprof-Profiling-Dateien zu schreiben. Dieser Umstand führte dazu, dass Entwickler und Administratoren nach Möglichkeit auf das klassische Profilingsystem verzichteten, da es aufwändige Anpassungen erforderte, um die Sicherheitsvorkehrungen aufzuheben oder zu umgehen. Gerade in sicherheitskritischen Anwendungen wie im Netzwerkbereich oder bei Systemdiensten war dies problematisch.
Beispiele hierfür sind Projekte wie rpki-client oder bgpd, die auf hochsichere OpenBSD-Umgebungen angewiesen sind und dennoch auf effizientes Profiling angewiesen sind, um Performance-Engpässe zu identifizieren und zu beheben. Das neue Profilingsubsystem adressiert genau diese Problematik. Statt wie bisher darauf zu setzen, dass das Programm selbst eine Ausgabedatei öffnet und beschreibt, übernimmt nun der Kernel die Verantwortung für das sichere Schreiben der Profildaten. Der Profil-Systemaufruf wurde dahingehend erweitert, dass er nicht nur den Speicherpuffer angibt, sondern auch genaue Informationen darüber übermittelt, wo und wie die Profildatei erstellt werden soll. Dies ermöglicht es dem Kernel, den Schreibvorgang sicher im Kontext des Programms, aber unter Wahrung der Privilegienbeschränkungen durchzuführen.
So entfällt das problematische Öffnen und Schreiben der Datei im Benutzerprozess, was zuvor zahlreiche Sicherheitskonflikte verursachte. Eine weitere wichtige Änderung besteht darin, dass der bisher oft genutzte monstartup(3)-Funktionsaufruf entfällt und nicht mehr unterstützt wird. Die Vereinfachung der Schnittstellen zugunsten eines robusteren Verfahrens ist ein Schritt, um den Code für Entwickler und Anwender klarer und wartbarer zu gestalten. Die neuen Profildateien erhalten zudem ein verbessertes und eindeutigeres Namensschema. Statt einer statischen Datei gmon.
out verwendet das System nun den Namen gmon.progname.pid.out. Dieser Wechsel trägt den modernen Multi-Prozess- und Multi-Nutzer-Umgebungen Rechnung, die bei OpenBSD insbesondere durch Privsep übliche Praxis sind.
Damit wird ein Überschreiben von Profilergebnissen vermieden, was gerade bei parallelen oder wiederholten Anwendungsausführungen zu zuverlässigen Messergebnissen führt. Ein weiterer positiver Effekt der Überarbeitung ist die Integration des Profilingsystems in die OpenBSD-Pledge-Funktion, die Anwendungen restriktiv Zugriffsrechte erteilt. Während das Profil-System früher keinen Zugangsstatus im Zusammenhang mit Pledge hatte oder man es nur mit weiteren Lockern von Sicherheitsprimitiven ermöglichen konnte, wurde nun die Nutzung von profil() unter der Pledge-Stufe "stdio" erlaubt. Der Zugriff wird dabei über einen speziellen ELF-Note (-pg ELF note) gesteuert, was eine einfache und sichere Aktivierung ermöglicht. Diese Änderungen sind ein Beleg für die Innovationskraft und das Engagement der OpenBSD-Community, insbesondere von Theo de Raadt, für eine Lösungen, die sowohl sicherheitskonform als auch funktional sind.
Die enge Zusammenarbeit mehrerer Entwickler, darunter Job Snijders, Claudio Jeker und Henning Brauer, sorgte für das Gelingen dieses Projekts und dafür, dass Profiling auch in hochgesicherten OpenBSD-Umgebungen praktikabel bleibt. Für Anwender und Entwickler bedeutet dies, dass sie künftig wieder einfacher und sicherer Performance-Analysen durchführen können, ohne die Schutzmechanismen des Systems aufbrechen oder einschränken zu müssen. Die Profildateien werden verlässlich geschrieben, ohne dass die Programmlogik sich mit Dateiberechtigungen und Schreibrechten auseinandersetzen muss. Darüber hinaus ist es erfreulich, dass das neue Profilingsubsystem direkt in der aktuellen Entwicklungszweig OpenBSD-current verfügbar ist und somit zeitnah in neue Versionen Eingang finden wird. Das ermöglicht umfangreiche Tests durch die Community und schnelles Feedback für weitere Verbesserungen.
In Zusammenhang mit den allgemeinen Sicherheitsfeatures von OpenBSD zeigt diese Verbesserung, wie man durch wohlüberlegte technische Lösungen dafür sorgen kann, dass essentielle Entwicklerwerkzeuge nicht unter der Sicherheit leiden, sondern diese sogar gestärkt wird. Dies verdeutlicht das Bestreben von OpenBSD, eine führende Rolle im Bereich sicherer Betriebssysteme einzunehmen, ohne dabei die Entwicklerfreundlichkeit zu vernachlässigen. Die Einführung des neuen Profilingsubsystems steht exemplarisch für die ständige Pflege und Weiterentwicklung des Betriebssystems, die darauf ausgerichtet ist, auch komplexe Anforderungen moderner IT-Umgebungen zu erfüllen. Mit der robusten, sicheren und performant eingebundenen Profiling-Option können Entwickler Fehler leichter erkennen und beheben, Ressourcennutzung optimieren und so letztlich die Stabilität und Nutzererfahrung von Anwendungen auf OpenBSD weiter verbessern. Abschließend lässt sich sagen, dass das neue Profilingsubsystem ein wichtiger Schritt zur modernen, sicheren Analyse und Optimierung von Software unter Berücksichtigung heutiger Sicherheitsstandards ist.
Es überzeugt durch technische Raffinesse und praktische Umsetzung, die Anwendern erlaubt, wieder uneingeschränkt auf Profiling zu setzen, ohne Kompromisse bei der Systemsicherheit eingehen zu müssen. Das neue System wird voraussichtlich schnell breite Akzeptanz finden und zählt zu den bedeutenden Neuerungen in der OpenBSD-Entwicklung im Jahr 2025.