 OpenBSD wurde vor 20 Jahren als eine Fog von OpenBSD gegründet und inzwischen sind wir bei der Version 6.6 und die wichtigsten Sachen sind einfache Installationen, viele Dokumentationen und sehr gute Sicherheitsfeatures. Aber wie ist das mit Sicherheitsmitigration? Eine nächste Vortragende führt einen systematischen Blick auf Sie haben. Steven. Ja, guten Morgen. Ich bin Stein, ist Dean und es geht heute um die Abwehr- und Schutzmaßnahmen von OpenBSD und ich erkläre euch mal, warum ich hier bin. Und dann gehen wir irgendwo direkt rein und über die Abwehrmaßnahmen und am Ende gibt es auch eine Zusammenfassung. Warum bin ich überhaupt hier? Wie jede Computergeschichte fängt es im IRC an, im IRC. Und ich habe mit einigen Freunden diskutiert, wie das mit OpenBSD ist, mit den Abwehrmaßnahmen und einige. Und ich wusste nicht viel von OpenBSD. Und warum nicht? Weil OpenBSD die Sicherheit ernst nimmt, das ist eine ganz kurze Aussage. Und ich habe gemacht, was andere gemacht haben. Ich habe Dutzende Stunden damit verbracht, Source Code und Mailing-Listen zu lesen über OpenBSD, Design-Dokumente, PDFs. Und dann mich zurück ins IRC und habe gesagt, hatte jemand gesagt, du sollst im CCC darüber sprechen. Ja, das ist eine gute Idee und ich wollte sowieso hingehen. Also warum nicht? Also deswegen bin ich jetzt hier. OpenBSD ist ein Betriebssystem wie Windows oder Linux so in der Art. Außer, dass es auf NetBSD basiert. Es wurde abgezeigt von NetBSD 1995, von Theodorat. Und die Ziele waren, das steht auf der Webseite auch, Sicherheitsprobleme wichtig nehmen und die fixen, bevor andere das machen und das beste, sicherste Betriebssystem zu sein. Und möglichst wenig Politik, die Lösungen sollten bewertet werden aufgrund der technischen Qualität. Und Leute hatten geringe Erwartungen von meinem Talk und es wird natürlich niedrige Qualität sein und es ist eher peinlich und ich will diese Leute eigentlich enttäuschen. Und die Ernst hat, als der Abstrakt veröffentlicht wurde auf der Webseite vom Kongress, gab es viele Antworten. Guck einfach auf die Innovationen-Webseite und die Events-Webseite und es geht hier um die Abwehrmaßnahmen von OpenBSD und wollen gucken, ob die wirklich funktionieren und nicht nur eine Liste haben. Und Leute haben gesagt, es gibt keine Exploits und es gibt keine Exploits für manche anderen Betriebssystemen, aber ich weiß nicht, ob die wirklich so besonders sicher sind. Und OpenBSD und OpenBSD sind wirklich toll. Ja, darum geht es nicht. Die benutzt die auch, sondern es geht hier um die OpenBSD Security Mitigation. Alle Abwehrmaßnahmen sind komplementär und das ist einfach nur, ja, das sagt auch nichts. Alles ist irgendwie komplementär und es geht nicht wirklich um OpenBSD. Ja, liess einfach nur an deadly.org und da steht alles drin. Und auf an deadly.org, immer wenn es eine neue Abwehrmaßnahme gibt, dann gibt es immer Leute jubeln und sagen toll, aber das sagt nichts darüber. Und vielleicht ist hier noch eine Schwachstelle und so. Und ich habe mit Freunden diskutiert, wie man Exploits schreiben kann und die haben sich beschwert, dass Leute fassig machen in OpenBSD und da ging es auch nicht um die Abwehrmaßnahmen. Und ja, der Titel ist einfach nur clickbait, aber vielleicht ist es nicht clickbaitig genug, denn die Halle ist gar nicht voll. Ja, also wie misst man die Abwehrmaßnahmen überhaupt? Und Halver Flag hat diesen Mitigator gemalt, diesen Comic und der Mitigator hat gute Absichten. Und ja, wir haben diese Verwundbarkeit gelöst, aber es nützt nichts, nicht wirklich was. Und wie macht man gute Abwehrmaßnahmen? Halver hat auf Twitter auch geschrieben und hatte verschiedene Blogposts. Und um gute Abwehrmaßnahmen zu haben, sollte man nicht nur so mit der Handwedel und sagen, es macht es ein schwerer für Angreifer, sondern welche Klassen von Fehlern behebt es oder welche Verwundbarkeiten werden damit gelöst und wie viele Stunden mehr Arbeit verzögert es den Angriff. Und es macht es schwerer für den Angreifer. Und ja, ich habe hier einen Vorschleife gemacht, das macht es schwieriger für den Angreifer, das funktioniert nicht so gut. Mit einem guten Abwehrmaßnahmen sollte man auch fragen, wie die Autoren von Exploits das sehen. Und ich habe hier diese Abwehrmaßnahme, kannst du dir umgehen? Und Code Reviews sind auch wichtig. Woher kommt die Abwehrmaßnahme? Hast du Papers gelesen oder hast du dir das selbst ausgedacht oder benutzen andere Leute das auch so? Was ist die Komplexität des Codes? Und das garantiert keine gute Abwehrmaßnahme, aber um immerhin kann man mit guten Methoden anfangen. So, das Thread Modeling, die Modellierung des Angriffs ist auch wichtig. Und die Faustregel ist, wenn du nicht erklärst, wogegen du die Abwehrmaßnahme machst und wie gut die funktioniert, dann kann die Antwort vielleicht sein gegen Bären und nicht wirklich gut. Es gibt zum Beispiel eine Abwehrmaßnahme in OpenBSD und dann muss der Angreifer mit den hoffentlich komplexeren Sachen sich rumschlagen, und das ist auch keine gute Aussage über eine Mitigation. Also, in diesem Vortrag habe ich einfach beliebig einige OpenBSD-Abwehrmaßnahmen ausgewählt, woher die kommen, ob die von OpenBSD erfunden oder verbessert wurden, vielleicht wogegen sie sich verteidigen. Es sind sie gegen spezifische Exploits. Und was macht das der Rest der Welt, verglichen mit OpenBSD? Wie ist es mit Windows? Die stecken natürlich viel Geld und Aufwand rein, um das sicherer zu machen. Und warum eine beliebige Auswahl? Na ja, weil ich nur 45 Minuten habe und dann vielleicht noch Zeit für Fragen und dann kann ich natürlich nicht über alles reden. Und es gibt nicht so viele Quellenangaben in meinen Slides, weil ich auch nicht so viel Platz habe, obwohl es hier ein großer Bildschirm ist. Aber es gibt am Ende eine Webseite und da kann man dann nachgucken. Ich habe auch einige Pufferfische, immer eine Kugelfische unten hin, um zu sagen, meine Meinung, wie gut diese Abwehrmaßnahme ist. So, jetzt geht es los. Der erste ist, die Angriffs-Schnittfläche zu reduzieren. Ein fähigeres Information ist, dass die Angriffs-Schnittfläche zu reduzieren, ist die effektivste Sicherheits-Feature oder Sicherheitsmaßnahme, die gemacht werden kann. Privilegseparation und Privilegstrop oder Privilegien abgeben, wurde 1997 das erste Mal so richtig implementiert. Q-Mail hatte mehrere Prozesse, aber davon lief nur einer als Route. Das heißt, wenn einer dieser Prozesse, der mit dem Internet-Kommunizierte aufgemacht hat oder angreifen konnte, hat man immer noch keinen Routezugang. BustFix hat dasselbe im selben Jahr gemacht und ein paar Jahre später hat OpenSSH auch Privilegien-Separationen bekommen. Das heißt, wenn man OpenSSH eine Sicherheitslücke hat, dann kann es sein, dass man immer noch keine Route-Schild bekommt. Das ist ziemlich cool. Fast alle OpenBSD-Software benutzt Privilegien-Separationen und Privilegien-Reduzierungen. Das heißt, Privilegien-Separationen bedeutet, dass wir unterschiedliche Prozesse haben, die unterschiedliche als unterschiedliche Benutzer mit unterschiedlichen Rechten laufen. Privilegien-Droppen bedeutet, dass man, nachdem man Ressourcen bekommen hat vom Betriebssystem, dann die Privilegien, die Ressourcen wiederzubekommen, einfach dropped abgibt. Damit, dass wenn jemand später das eine Sicherheitslücke ausnutzt, das nicht mehr benutzen kann oder die die Rechte nicht mehr hat. Wir haben Roodless X-Orcs seit 2014, aber Set UID ist immer noch vorhanden und es gibt immer noch Sicherheits-Löden. Ist nicht pledged? Ich mag es. In der Linux-Welt gibt es etwas, was Seccom heißt. Es wurde 2002 erstellt und 2005 hinzugeführt. Die Idee ist, dass ein Prozess, ein Modus gilt, in der sicher Kommen rechnet und dann gibt es nur wenige Betriebssystemfunktionen, die darauf zugreifen können. Also, wo das nicht sonderlich benutzbar ist, wo das Seccom BPF 2012 erstellt. Damit kann man definieren, welches Scrolls überhaupt erlaubt sind. Ob ein BSD hat es tame oder inzwischen bekannt als pledge und es ist relativ einfach zu benutzen, weil im Gegensatz zu Seccom ist basiert es nicht auf Scrolls, wo man sagt, wo man durch den Betriebssystem schaut, brauche ich, welche Scroll gibt es? Brauche ich das für dieses Java-Software? Sondern es geht um die Fähigkeiten. Das heißt, man kann sagen, hey, dieses Programm darf nur diese Inputs und diese Outputs benutzen. Oder damit es reduzieren. Also der NTP-Klein von OpenBSD hat unterschiedliche Prozesse mit unterschiedlichen Platsch-Erlaubnissen. Also einen darf eine Domain auflösen, einen anderer darf diese Systemzeit verändern und so weiter. Das ist sehr hilfreich. Außerdem wird es auch mehr benutzt als Seccom. Seccom wird hauptsächlich von Docker benutzt, zum Beispiel Tor, IPT und so paar andere Prozesse. Prom eventuell, aber in OpenBSD gibt es 850 Calls zu Platsch. Das heißt, es wird in OpenBSD sehr häufig benutzt. Und es ist der tolle Engineering-Arbeit, die da reingeflossen ist, sehr effektiv. Dann gibt es Unveil, das ist wie Platsch, aber für Dateien. Die Idee dahinter ist, dass man den Dateienzugriff reduzieren kann. Das heißt, wenn wir einen Web-Browser haben, dann muss der Web-Browser nur die Dateien, die Cache und die Cookie-Ordner haben und rechnen Anhänden für Downloads. Aber der Web-Browser sollte nicht SSH-Schlüssel zugreifen können. Wenn du komische Software schreibst, kriegst du vielleicht eine Log-Nachricht, aber das Programm wird nicht automatisch abbrechen. Es wird von 77 User-Lang-Programmen von OpenBSD benutzt, das ist eine relativ große Gruppe, weil OpenBSD im Default mit relativ wenig Software kommt. Ich glaube, dass das auch eine sehr gute Medikation ist, weil das ist wie App-Armor oder SE-Linux, aber was man zum Beispiel bei Ubuntu oder Android hat, aber ich glaube, dass es viel besser ist, weil die Policy in den Programmen lebt. Das heißt, wenn du z. B. Weget benutzt, wenn du das ganze Detail-System read-only machen oder wenn wir ein Bild herunterladen, dann muss nur dieses Ziel-Datei schreibbar sein. Das können wir mit App-Armor nicht machen, wo es so, hey, Weget darf nur diesen Bereich zugreifen. Das heißt, das Abhängig ist davon, was das Programm macht, dass es sehr gut ist, dass es sehr gut ist, dass wir sicherheitslücken. Wir hatten davon einige. Man kann eine CPU irgendwie nicht mehr wirklich vertrauen. Das ist ein Problem. Und das ist schade. Ich glaube, dass hier die spannende Sache, über die ich rede, ist die Reaktionszeit, weil häufiger ist es schneller, ein Betriebssystem zu updaten, als eine CPU zu verbessern. Das heißt, das Abhängig ist davon, was das Programm macht, dass es eine sehr gute Funktionalität hat. Wir hatten davon einige. Wir hatten Proof-of-Concepts innerhalb von Stunden, diese ... Hyper, Hyper, Hyper, Hyper, What? Also Hyper-Threading. Hyper-Threading, würden um PSD standardmäßig benutzt. Und viele Leute haben sie dafür genervt. Die haben gesagt, um PSD kümmert sich nicht um Performance. Und die haben mal nachgeschaut, sie haben mal gemessen, und die Performanceverwässerung ist relativ gering, außer man hat spezielle Funktionen und man hat viele Sicherheitslücken, die man einfach umgehen kann, z.B. Sambeload und so weiter. Das sind aus dem User-Land. Vielleicht ist es in dem Angriffsvektor Reduzierung nicht hier, aber das ist ein sehr starker ... Sache, starker Ausdruck. Die zeigt, dass um PSD sich um Sicherheit kümmert. Spectre 1, 2 und 3, die Idee ist, dass Reduzierung ... Neben Effekte hat. Und die CPU versucht, was zu erraten und einen Angreifer kann der CPU dabei zuschauen und dabei Daten extrahieren. Das heißt, Spectre V1 ... In Windows ist Compiler basiert. In Lidos kann man gewisse DataJets entfernen und in OpenBSD muss man nichts machen, wenn man da vor Angst hat. Spectre V2 muss man auch Piler basierte Sachen machen und ... drei Monate für AMD. Und Spectre V3 ... und DayZero für alle. Und ... Wir haben da auch ein schnelles Ergebnis bekommen. OpenBSD hat KPDI ... Ja. Es gibt noch andere Weite, einen TF, alle haben dieselbe Mitikation benutzt, nur dass OpenBSD einige umgangen hat für den Userland oder nicht brauchte, weil sie keine Hyper-Trading benutzt haben. Das heißt, im Endeffekt ... Wir waren im Tag neun und ... Theodorad hat gesagt, es wird keine Mitikation für OpenBSD 6.3 geben, obwohl es noch supportelt wird. Das ist ein interessanter Aussage. Ich hab das auf der Mailingliste gesehen und ich weiß nicht, ob Leute darüber reden oder ob Leute davon wissen. Zufällig ... Also es gibt Zufälligkeit benutzen, um einen Angreifer zu erschweren. Zum Beispiel ... ASLR ... Arbeitsspeicher-Layout-Randomisierung oder Zuverlegung. Der Arbeitsspeicher ist anders gemappt, jedes Mal, wenn das ... die Software gestartet wird. Wir benutzen ... 2001 begann das mit dem PAX-Projekt für Linux. In dem selben Jahr hat OpenBSD einen zufälligen Offset für den Stack eingeführt. 2003 ... wurden ein zufälliger Offset auch für Libraries und MemoryMap hinzugeführt. Und 2005 hat Linux eine ähnliche ... diese Sachen nachgezogen. Technisch ist es ASR und nicht ASLR, weil der Abstand zwischen den gleich ist. Der Abstand ist nicht zwischen der Library und dem Stick. Die werden in unterschiedlichen Offsets gemappt, aber der Abstand ist gleich. Das ist nicht so stark, so groß, aber es ist noch besser als per Boot, was Windows und Android benutzt. Und PSD behauptet auch, dass das erste Betriebs ist zu sein. Es ist ASLR, aber es gibt Gen2 davor. Also Gen2-hardened. Wir wissen nicht, wie viele Leute Gen2-hardened benutzen, aber ... Positions in der unabhängigen Code, das heißt, wir haben nicht nur den Deep und die Libraries unterschiedlich, sondern auch, dass die ... die Binnerdatei unterschiedlich aufsetzt ist. Das heißt, es macht auch den Angreifer schwerer zu raten, wo man hinspringen muss und welche Aufsätze es gibt. 2001 wird es in Pi implementiert. 2003 wurde es von Gen2-hardened benutzt. Und 2008 wird es auch von OpenBSD benutzt. Bis auf ein paar Beispiele, wo Performance konzentriert ist. 2008 hat OpenBSD Pi hinzugeführt. 2011 wurde es standard für IOS und OS X. Und ich habe viele Zeiten hier, weil ich glaube, dass es relevant ist. 2012 hat auch Android Essen zugeführt. Und ... auch in 2012 standen es für OpenBSD. Aber bei OpenBSD wird behauptet, dass 5.3 das erste Standard-Software ist auf unterschiedlichen Hardware-Plattformen. Android war das erste für 6. Fedora war das erste für 8 Architekturen. Und dann gibt es Gen2-hardened Adamentics. Vielleicht haben sie weniger Benutzer für OpenBSD damals, aber Apple hat das auch für OS X und IOS hinzugefügt. Und ich glaube, das ist ein Mainstream-Betrieb-System. Also, ja, die waren ein bisschen schnell. Aber es traut sich noch eine gute, gut verteidigungsmaßnahme. Carl ist auch eine gute Massnahme. Und OpenBSD hat 2017 Kernel-Objekte neu gelingt nach jedem Bootvorgang. Und wenn man neu bootet, dann sieht der Kernel ... Also, wenn man bei Ubuntu rebooted, sieht der Kernel jedes Mal gleich aus. Das heißt, ich muss nur einmal die selbe Version Ubuntu haben, ich schreibe da einmal den Export für den Kernel, und dann wird das auf deinem Gerät funktionieren. Und es vereinfacht, dass ... führt also, dass wir nur ein einzelner Pointer ist. Aber wenn nur ein einzelner Pointer ist, dann kriegt man da auch nicht sonderlich für Informationen, weil bei jedem Boot der Kernel ein bisschen anders, deutlich anders aussieht, wo unterschiedliche Software gemappt ist oder im Arbeitsspeich hervorhanden ist. Wenn ich etwas überschreibe, weiß ich nicht, was ich genau überschreibe. Und den Angriff gegen ... Abwehr gegen Angreifer, der nicht genug beliebige Lesezugriffe hat, oder eine CPU Side Channel im Prozessor. Und wenn ich einen anderen Kernel hab und meinen OpenBSD stürzt ab und ich hab den Stack Trace, dann hab ich jedes Mal einen anderen. Und wenn ich kein Power-User bin und ich durch ein Screenshot schicke, dann weißt du auch nicht, wie mein Kernel-Layout aussieht. Und es funktioniert auch nicht mit ... Ja, nach jedem Reboot hat man einen anderen Kernel und dann kann man den auch nicht so einfach signieren. Und OpenBSD kümmert sich nicht wirklich um Trusted Computing und Trusted Boot. Interessant ist auch, was Sie auch zufällig machen, ist für Lib C und Lib Crypto beim Booten. Das ist ganz schön, 2016. Und das ist auch eine Abwehr gegen Single-Pointer-Lex und mit relativem Offset was zu überschreiben. Und beim Blind Drop kann man sich dagegen auch verteidigen. Aber OpenBSD hat Maßnahmen, die das auch ein bisschen schwerer machen. Und es ist einfach gegen einfache Angriffe, ist das nutzlos. Die zufällige Auslegung von Libraries ist nicht innerhalb der Libraries zufällig, sondern die Reihenfolge der Libraries wird zufällig ausgewählt. 2003 gab das und auch in Android. Und das ist eine kleine Verbesserung gegenüber ASLR. Aber wenn man einen einzelnen League hat, auf eine Library, zum Beispiel Lib C und Lib Crypto, dann gibt es genug Dinge da. Und da muss man andere Libraries eigentlich gar nicht mehr angucken. Und die Entropie ist auch wirklich schrecklich gering. Und es ist nicht schwer, die Reihenfolge rauszufinden. Und wenn ich schon die Libraries das Mapping habe, dann habe ich eine Chance von 1 von n das rauszufinden. Und finde das ziemlich schnell auch beim ersten Versuch mit einer relativ guten Wahrscheinlichkeit. So, WX, und das bedeutet, man kann Speicherbereiche entweder schreiben oder ausführen, aber nicht beides gleichzeitig. Und das ist eine ziemlich alte Abwehrmaßnahme schon. Und zuerst gab es von Kaspar Dieg in 1990. Es war es irgendwas in 90. Und es gab einen Patch für den Niedungskörnel dafür. Schon relativ früh. Und das verhindert die Einführung von neuem Code. Man kann nicht als Angreifer einfach Code in seinen, in einem schreibbaren Bereich schreiben und dann einfach hinspringen und das ausführen. Das geht nicht mehr wegen dieser Maßnahme. OpenBSD war relativ spät damit in 2002 im Userland und 2015 im Kernel. Und ist eine wirklich hervorragende Abwehrmaßnahme außer, dass einige Sachen fehlen wie PaxM Protect aus NetBSD. Die haben das oder ACG, ACG in Windows. Das ist ähnlich, KTRR ist eine ähnliche Maßnahme im Apple-Fahrtware-Ebene. Und das Betriebssystem muss ich merken, wo die Seiten sind und welche, wenn ihr jeweils schreibbar war, dann kann sie nie mehr ausführbar werden. Und wenn man das dann ummappt, geht das nicht. Und deswegen kann man nicht einfach einen neuen Code hinzufügen. Sonst könnte der Angreifer einfach vielleicht irgendwas nehmen und man kann einfach einen Bereich, Speicherbereich schreibbar markieren, kann mein Nutzlaster reinbauen, mein Angriff und kann es dann ändern auf ausführbar. Und aber wenn man PaxM Protect hat, dann kann man das auch nicht machen. Das heißt, man muss es wirklich in einen Bob reinbringen und man kann nicht einfach Shellcode nutzen dafür oder so. Ja, und es gab ein WX-Verfeinerung, Verbesserung. Theodorat hat gesagt, er will direkte Systemaufrufe aus diesen Bereichen unterbinden, sodass man hoffentlich komplexeren Aufwand treiben muss von dem Just-in-Time-Compiler und dass man vielleicht einfach die Syscall-Stubs direkt rausfinden muss in einer zufällig verlinkten Lipzee. Und das ist der Pax-Track, was ich wovon nicht vorhin gesprochen habe. Und für einen Angreifer kann der aus Systemaufrufen nicht mehr aus einem ausführbaren Speicher machen und dann will er Systemaufrufe aus dem Speicher auch nicht machen. Aber wenn die Seite kein MySyscall-Flag hat und wenn da ein Programm läuft, kann man nur noch Systemaufrufe aus dem ganz kleinen Bereich des Programms machen. Und vor einigen Tagen gab es einen Vortrag über ein Exploit hiervon und das würde diese Abwehrmaßnahme komplett aushebeln und einfach dran vorbeigehen. Das hätte gar keinen Effekt, denn wenn man als Angreifer genug Kontrolle hat, einen Speicherbereich als Schreibbar markieren und seine Sache da reinlegen und dann ein Systemaufruf machen kann aus einem anderen Bereich, dann kann man das trotzdem nutzen. Das heißt, als Abwehrmaßnahme ist dies eigentlich ziemlich nutzlos. Und jetzt kommt es zu den wirklich interessanten Sachen über Speicherverstümmelung, Speicherkorruption, der Heapmanagement in Musaland. Im Juli 2008 gab es Otto Merlok von Otto Mörbek und ich kann den nicht richtig aussprechen, namen Damien Miller und das ist ein großartiges Stück Software. Es gibt Auto-Band-Meterdaten, das heißt, wenn man Speicher etwas alloziert und die Metadata werden an einer anderen Stelle gehalten im Speicher, das heißt, wenn der Angreifer einfach was überschreibt, dann kann man mit den Metadaten trotzdem nichts machen und es gibt nur lesbare Strukturen und wenn man beliebig lesen und schreiben will, dann kann man trotzdem da nichts mitmachen. Es gibt Quarantine über ein verzögertes Freigeben und wenn man den Speicher freigeben will und dann wird es nicht sofort freigegeben, sondern erst bei einer Quarantäne gesteckt, sondern erst später freigegeben und dann ist es schwieriger, wenn man Delay-Use-After-Free benutzt will und Junking ist, das heißt, wenn der Speicher alloziert wird, dann kann man nicht sofort da reingucken und kann deswegen nicht sofort Sachen liegen. Es gibt Kanarienvögel, die gibt es einen geheimen Wert, der in den Puffer und wenn der Puffer überläuft, dann merkt man das, weil sich dieser spezielle Wert geändert hat. Page Alignment, wenn die Speicheranforderungen allein sind und hat einen Overflow auf eine Seite, die nicht gemapped ist, dann hat man nicht Canaries, sondern hat da auch geheime Werte und steht die in den Speicherbereich davor und danach und wenn der Speicherbereich überläuft, dann geht es einfach hoch und alles ist zufällig angeordnet überall und das ist wirklich ein ganz cooles Ding und das ist ein bisschen langsamer als zum Beispiel Scoodo, was der hertete Allocator von Google und einige Benchmark zeigen, dass AutoMalloc zwölfmal langsamer ist, aber OpenBSD kümmern sich mehr um Security als um Leistung und dann ist das okay. Railroad und das ist schwieriger zu erklären, die Idee ist, wenn man eine Funktion programmiert und aus einer anderen Library braucht und man will PrintF benutzen will und dann Programm implementiert das nicht und dann fragt man, wo ist die Funktion PrintF nochmal und dann gibt es einen Stop und er sagt, okay, ich guck mal nach und okay, das ist hier und dann kann das Programm die Funktion nehmen und wenn es das nächste Mal benutzen will, guckt es im Cash nach und kann PrintF direkt aufrufen. Die Idee kommt ursprünglich aus Reddit und dann kann ein Angreifer, wenn der Cash ReadOnly ist, dann kann man nicht mehr die Punkte austauschen und wenn du nächstes Mal PrintF aufruft, wenn man den Cash geändert hat, dann ruft man stattdessen System auf und gibt mir eine Shell und die Idee ist, dass das ReadOnly ist und das Problem ist, wenn man ein Programm startet, dass man alles auflösen muss und man kann es nicht mehr dynamisch im Cash ändern, das ist hier eine kleine interessante Wendung und es gibt immer noch eine Zone, die man nur lesen kann, aber es wird zur Laufzeit geändert und es gibt einen neuen System aufruft, der heißt K-Bind und das erlaubt es dem Programm eine beliebige Schreibzugreffen in dem gemärten Speicher zu machen, in dem Adressraum. Sonst ReadOnly ist, kann man da immer noch hinschreiben und es gibt eine Callside-Verification und das erste Mal merkt sich das Betriebssystem, wo der Funktionsaufruf war und macht einen Cookie und dann weiß der den magischen Wert und man kann trotzdem das auch einfach umgehen, die Verifikation und das nützt dann auch nicht mehr so viel Fell und das Richtige wäre einfach gewesen im Media Bindings zu haben statt Lazy Trapset ist auch eine lustige Sache, 2017 hat dort Multima dieses Patch hin zugeschickt um Padding zwischen Funktionen zu benutzen, das früher Nobs waren und es wurde in die Idee geändert, dass man einfach keine Nob also nichts zu tun Instruktionen hat, aber es wird nicht mehr benutzt weil früher, damals als der Stack noch ausführbar war, haben sie Leute da ungefähr reingesprungen aber heutzutage ist kein normaler exploit in der Erkenntnis mehr vorhanden der Nobslets benutzt Microsoft hat auch dieses Funktion seit 2010 und sie haben es auch nie als Sicherheitsfeature bezeichnet außerdem hat OpenBSD versucht so viel wie möglich return orientiert das Programmieren Gadgets zu entfernen, es geht darum, dass unterschiedliche Register benutzt werden und sie benutzen Instruktionen das heißt es hat EA zu Alpha zu verschieben, dann tauschen sie A und B und dann tauschen sie wieder, bewegen das wieder mit Alignment mit Trapslet und sie versuchen, das unmöglich macht irgendwie in die Mitte einer Instruktion zu springen und sie haben Red Guard versuchen Align Red zu machen, aber Red Guard wird dich später nochmal besprechen Red Gadget entfernen, aber warum? Weil sie ein Crit benutzen was Rob Gadget heißt, das wurde von Proof of Concept geschrieben, einfach so als Spaß aber es benutzt keiner, außer vielleicht bei CTFs, und in der Regel funktioniert es auch da nicht weil die Heuristiken, die es benutzt, ziemlich einfach sind und den Erfolg wie sie das messen, ist wenn es möglich ist ein exec.ve Robchain zu erstellen und es ermöglicht einen Robchain zu machen und wenn sie Mitigationen hinzufügen und dieses dann nicht mehr ausführen, die ganze Kette nicht mehr erstellen kann dann wird das als Erfolg gewertet und das in eine komische Messtechnik außerdem versuchen sie das auf 11% auf AMD64 zu reduzieren, das ist nicht sonderlich viel wenn man vielleicht braucht man 20 Gadgets, aber nicht so viele und 11% macht überhaupt keinen Unterschied es sind immer noch Dutzende und hunderte von Gadgets, die da vorhanden sind sie behaupten, dass für AMD keine Rob Gadgets mehr gibt, das ist toll aber ich habe den RobGadget.pi benutzt und alle die dieses Jahr gefunden haben entfernt, aber es gibt immer noch 12.591 die Job Rob und Peacop überall außerdem werden andere Funktionen nicht umgangen und sie haben behauptet wenn das erst einmal Red umgangen ist aber es ist nicht sonderlich erfolgreich, 2009 hat Michael Brown ein Paper in den Dokument veröffentlicht und gesagt haben dass RobGadgets die Entfernung die Sicherheit nicht umbringend verbessert und manchmal sogar verschlechtert DCC hatte eine Funktion dafür aber es wurde entfernt, weil diese Option unerfolgreich war, es scheint keiner wollte diese Option verbessern und wir wollen es nicht dazu führen, dass es nicht dazu führt dass Entwickler damit das Gefühl der Sicherheit haben RedGuard wurde 2019 als StackGuard geschrieben die Idee ist, dass wir Cookies haben, das wäre ein geheimen Wert irgendwo hat und wenn der Angreifer Arbeitsspeichel überschreibt, dann wird auch dieses geheime Cookie Wert überschrieben und dann kann man das erkennen hier wird es in der Regel auf dem Stack zugeführt wenn man eine irgendeine Funktion hat muss man wissen, wo man zurückkommt und wenn wir eine Funktion ausführen am D64 wird der Rücksprungwert auf den Stack geschrieben und wenn es fertig ist, dann nimmt es den Wert zurück und springt dahin zurück, wo es aufgerufen wird und wenn ich diese Adresse überschreibe kann ich die Kontrollfluss des Programms irgendwo anders hinzeigen OpenBSD hat StackCookies in 2003 hinzugefügt im Kölner und Kölner Land und sie haben einen Segment benutzt mit zufälligen Daten drin und es haben es im Statische Konstante genommen und der Compiler hat gesagt, oh Statische Konstante also muss es null sein und dann hat es die Überprüfung einfach ignoriert 2017 war die Idee, dass wir das XOR auf die Rücksprungadresse machen ganz oben mit dem Stack, mit dem StackPoint der Value da auch hinzufügen eine coole Idee, aber wenn man einen Part spezial überschreiben kann, dann ist es immer noch kein Problem und wenn man lesen kann, dann kann man das immer noch ignorieren und wenn man ein Teil vom Kernel Stack hat dann kriegt man auch den StackCookie das heißt auch nicht der effizienteste Methodik darum haben sie Redguard 2018 hinzugefügt es sind ein paar Assembly Instruktionen und die Idee ist Redguard mit zufälligen Daten überschreiben mit Daten und am Ende der Funktion ist eine Verifikation dass der Wert immer noch der gleiche ist und dann ein großer Sprung über ein Trapsnet und dann auch Gabelwert das ist nett, das ist besser 11 ist vorhanden, man kann die Cookie-Werte von allen Funktionen über sich herausbekommen es gibt eine Cookie-Profunktion, das ist eine kleine Verbesserung und also die Cookie sind im dedizierten Segment gespeichert das heißt man kann sie nicht einfach so überschreiben in anderen Betriebssystemen und die Integrität ist bei der return-Adresse es ist nicht mehr nur ein Cookie der die return-Werte darunter schützt sondern der Integrität von der Rücksprung-Adresse wird überprüft selbst wenn wir ein beliebiger Schreibzugriff haben können wir das nicht verändern aber es ist immer noch eine kleine Verbesserung über ASLR sorry, über kleine Verbesserungen ich bin müde, tut mir leid man kann immer noch alles liegen wenn man den richtigen Zugriff hat Null-Def-Colonel-Land die Idee ist, dass wenn wir einen Null-Pointer haben dann ist es ein Pointer der, wenn man z.B. einen Funktions-Pointer hat dann hat man die Adresse 0 und die Adresse 0 ist im User-Land dann kann man das in den User-Land springen das heißt, dann hat man Code-Execution Pax hat das 2004 Umgang und es hat anscheinend 2x in 2004 und ja Null hat auf dem 23C3 gesagt und hat gesagt das ist ein unnormal, komischer Bug und das wurde 2007 von M-Map in Linux mitigiert das führt das User-Land nicht mehr in die Anfangung vom Arbeitspreich her als ich Sachen mapen kann 2007 haben alle OpenBSD Exploits rumkopiert, 2008 hat OpenBSD auch hinzugeführt, dass man die erste Arbeitsspeicher Seite nicht mehr mapen kann sie sind nicht, sondern die stolz auf diese Lösung alle kommen auf die gute Lösung aber sie haben 2 Jahre gebraucht um das zu bekommen also die ordentliche Lösung zu machen S-Map und der Freunde dabei ist, dass man auf CPU-Level prüft das Sachen, die im Superweise-Modus laufen nicht in den User-Land zu greifen können das heißt, wenn ein Kernel auf irgendwas im Arbeitspreich im User-Land möchte dann kann ein, wenn hier zum Beispiel ein Arbeits, ein Payload in den User-Land hat dann den Kernel dazu bringen, da reinzuspringen wird das nicht es gab ja unterschiedliche Aktionen und Intel und AMD haben S-Map und S-Map also S-Map ist eines Zugerefs von das anderes X-Ausführung von Code 2012 wurde das hinzugeführt und dann hat jemand einen coolen S-Map, Bipass hinzugeführt wenn irgendwie ein Back drin war und das war für 5 Jahre verfügbar und war ein sehr interessanter Back MapStack wurde auch in Linux verfügbar ist praktisch nicht benutzbar außer man benutzt kein Proc und steht, hey, dieser Arbeitssprachbereich ist in Stack Windows war auch diese Funktion 2012 wurde es in Windows entfernt weil es wenig benutzt wurde und die Idee war, dass man den Stack-Pointer prüft, dass der im Stack ist bei jedem Betriebssystem Aufruf umgehungsmaßnahmen und die Idee war, dass man einen Stack hat der M-Map aufruft man schreibt die Payload rein und springt rein und vor jedem Syscall kann man die Saison auf den Stack zeigen, dann kann man das zeigen OpenBSD hat es verbessert und sie überprüfen, dass der Stack-Pointer bei jedem Syscall und bei jedem PageFold überprüft und ich glaube, das ist eine sehr gute Verbesserung aber es gibt auch ein paar OpenBSD-spezifische Umgehungsmethoden und die könnt ihr euch selber herausfinden andere Umgebungen Medikierungs- oder Abwehrmethoden sindcookies, die wurden 1969 von Jenkins fermentiert d.h. wir haben eine Liste von exterendem Handshakes, d.h. wir machen eine TCP-Verbindung aufbauen, wir machen einen Sinn und der Server würde arg antworten und dann sagt man Sinn arg und dann kann man Daten übertragen, das ist cool aber wenn jetzt ein Kleint mit alle sich speichern, die Idee von Sinncookies ist, dass wenn die ganzen Sins in weniger städtlich, also mit weniger State speichern kann, weniger Status und OpenBSD hat es im letzten Jahr implementiert und aktuell ist es nicht sondern hilfreich, weil jeder kann einfach Terabytes benutzen, wenn man Botnet nimmt vielleicht ist es hilfreich im LAN oder wenn jemand im LAN dorscht dann hat man wirkliche Probleme Webkranzil, oder verstecken ist die Idee dass gewisse Arbeitsspeicherbereiche der Software sagt, hey bitte nie auf die Festplatte schreiben wenn man Crashdump hat und ein Entwickler weitergibt und dann sagt man hey, no core und dann wird das nie auf die Festplatte geschrieben werden man kann den Coredump weitergeben 2012 wurde es bei Linux in Zürich gefühlt 2019 bei OpenBSD und da hat Annika gesagt die Hauptnahmekonzil wurde hinzugefühlt dass man Flexibilitäten hat Problem ist, dass man ein Thread-Model-Problem hat wenn man ein P-Thread-Zugriff auf einen Prozess hat dann kann man einfach den Arbeitsspeicher umschreiben und was anderes ausführen lassen Entwicklungsprojekt es gibt keinen Bugtracker, es gibt nur E-Mail und man weiß nicht ob jemand schon auf deinem Bug angesetzt ist und das macht es gibt keine öffentlichen Code Reviews Theo hat gesagt es ist okay Ted hat gesagt es ist okay es ist wirklich Theo okay am Ende des Kommentars es gibt keine Rechtfertigung oder keinen Kontext und keinen Angriffsmodell für die Mitigations es gibt nur ein bisschen mit der Hand gewedelt und es ist schon okay es gibt keinen Kontext für die Signatures und dann wird es einfach angemacht und kann ich einfach mal ein bisschen was haben der hat jemand was aufgeschrieben was das macht nein mach einfach ein Patch und neu booten und dann ist gut und es gibt keine Integration die irgendwie organisiert ist und es gibt es manchmal nicht und vor allem booten manchmal nicht für einige Monate oder so es scheint akzeptabel zu sein CVS wird benutzt als Versionskontrollsystem und es gibt keine Branches fast keine, 50% der Kommittnachrichten sind 10 Buchstaben und Hello World ist schon 11 die Zusammenfassung, genau pünktlich OpenBSD hat einige coole Sachen erfunden wie zum Beispiel Timerlock, Otto Merlock und einige Sachen zum Hagenling erfunden, gute Sachen gemacht und sammeln Entropy interessant und sie haben einige gute Ideen gehabt sie haben ein paar gute Ideen gemacht sie haben ein paar gute Ideen gemacht sie haben einige gute Ideen gehabt sie haben einige Ideen verbessert die andere gehabt haben und haben aber das nicht gesagt, dass andere das gemacht haben Password Hashing, Becrypt haben sie erfunden das ist ganz toll, es gibt einige nutzlose Maßnahmen und Trapslet zum Beispiel das ganze WX Refinement die Entfernung der Rob Gadgets könnte deutlich verbessert werden mit systematischem Security Engineering vielleicht Angriffsmodelle schreiben denn Smart Buyspaß hätte einfach nicht da sein sollen und niemand würde wirklich heute das in der Art machen Kryptografie entwickelt, wie OpenBSD das entwickelt hat warum ist das akzeptabel Abwehrmaßnahmen so zu entwickeln ich glaube ich komme aus gutem Design und gutem Angriffsmodellierung das ist gegen genau diesen Angriff und das verzögert die Möglichkeit von diesem Angriff um eine Woche man muss ja auch in Kontakt sein mit den Autoren von Exploits vielen Dank Wir sind hier in der Oste Besetzerkabine Frank Franz T. und Pink Dispatcher Ich habe nicht viele Quellenangaben hier deswegen habe ich diese Webseite es OpenBSD Secure.re und es ist nicht wirklich die Frage es ist wichtig einfach Leuten zu helfen diese Frage selbst zu beantworten vielen Dank Stein für diese wirklich systematische Analyse und jetzt haben wir noch Zeit für Fragen und Antworten haben wir Fragen aus dem Internet im Moment nicht gibt es sonst Fragen hier im Saal im Moment sehe ich auch noch niemand am Mikrofon keine Fragen vielleicht noch etwas Zeit darüber nachzudenken ob nicht, doch ich meine Frage hat wirklich keine Frage wenn du gezeigt hast die Antwortzeiten bei einigen der Abwehrmaßnahmen weißt du ob OpenBSD Leute Zugriff hatten auf diese Informationen schon vor der Zeit wie zum Beispiel Linux und Windows die haben natürlich Zugriff schon auf die Informationen vorher schon damit sie abwehrmaßnahmen machen könnten aber bei OpenBSD weiß ich es nicht genau das ist eine interessante Frage ich habe jetzt nicht über Embarko Management gerede das ist eine sensitive Frage OpenBSD behauptet dass sie nie Embarkos gegangen hatten sie haben nicht so gut damit gemacht sie haben nicht so gut damit mitgespielt darum kriegen sie jetzt diese Informationen nicht mehr vor der öffentlichen Veröffentlichung ok wir haben eine Frage aus dem Internet ja vielen Dank und es gibt eine Frage hast du eine Antwort auf die Aussage von OpenBSD Developer Brand Steel das MapStack ganz anders ist als andere Implementationen MapStack ist das MapStack das ist ich glaube mal vielleicht haben wir da die Folie MapStack ist ein System in Linux wird haptisch nur für Schönheitssachen benutzt die Idee ist dieselbe den Setpoint zu verifizieren bei jedem Cisco und OpenBSD hat es verbessert es ist eine Verbesserung aber es ist keine großartige Abwehr-Massnahme ok wir haben jemand an Mikrofon 4 wie vergleichst du die Play mit den Capability die von Linux was mit Capabilities zum Beispiel gibt es die Capability zum Beispiel gibt es Cap Network Bind das gibt der App die Capability zum Beispiel etwas zu erzeugen ich kann mich nicht genau an den Namen erinnern es gibt viele von denen die sind nicht so natürlich gut dokumentiert und manchmal hat man einen Blockpost der die Kapazitäten aufgeschrieben haben wie durcheinander das ist vielleicht ist es gut aber da ich das einfach nicht benutzt von normalen Menschen ist es nicht benutzen können ist es keine gute Umgebung das ist der Vorteil von den OpenBSD es ist relativ einfach ich brauche jetzt diesen spezifischen Socket-Typ in meinem Java-Programm ok Mikrofon 5 bitte es gab diesen Developer-Kanal ICB ist das immer noch aktiv in OpenBSD oder sind sie jetzt auf ERC oder so ehrlich gesagt auch nicht ich weiß nicht so viel mit dem System ich habe keine Ahnung noch mehr Fragen es gibt noch eine aus dem Internet wie ist OpenBSD im Vergleich mit FreeBSD im Kontext deines Vortrags ich weiß auch nicht viel FreeBSD vielleicht merkt er nächstes Jahr einen Vortrag es gibt dieses HardenBSD-Projekt was ein Software von FreeBSD ist was versucht also Harden FreeBSD ich gebe halt diesen Fog aber ich weiß da auch nicht viel drüber muss ich mir noch mal anschauen ok noch mehr Fragen hier es ist noch etwas Zeit noch keine Fragen mehr dann schließe ich diese Sitzung damit ab vielen Dank Stein und bitte noch einen Applaus für den Vortrag