 So, liebe Menge. Dies sind Antonio, Jacopo und Andrew vom Shellfish Team. Das ist von der UC Santa Barbara. Sie werden euch heute etwas erzählen über mehrere Dutzende Jahre von ihrem Shellfish und von DEFCOM zu einem großen Cyber challenge Wettbewerb. Okay, vielen Dank für die Einleitung. Ich würde gerne weitermachen und erklären, wer zu Hölle wir sind. Hier werft es Selfies. Es ist eine Gruppe von Cyber-Susiasten, die in Santa Barbara angefangen haben vor einiger Zeit. Die Originalwesen dieser Slide sagt, es ist ein Hacking Team und es sind jede Menge Italiener Leute. Vielleicht versteht das jemand. Vielleicht sind die unglücklich. Wir haben nichts mit dem Hacking Team zu tun. Viele von uns machen Forschung in sicheres Systemsicherheit. Viele von uns sind den Forschungslaboren. Wir produzieren diverse Papers, um das zu verbessern, was es so gibt. Aber wir spielen mit in vielen Capture the Flight Wettbewerben mit. Wir haben sogar einige der Tools, die wir verwendet haben, veröffentlicht. In Sicherheitsforschung, KZL2-Szenarien. Einige von euch haben die vielleicht verwendet. Die sind öffentlich verwendbar, z.B. an Nubils und Webernet. Wo man eine Binary oder eine Website schicken konnte. Man kann da sehen, wie die funktioniert. Wir werden darüber in etwas mehr Detail reden und auch über das Anger-Tool, dass die unsere Team-Member veröffentlicht haben. Um etwas mehr über uns zu erzählen, was ist Schäfisch? Schäfisch wurde in diesem kleinen Gebäude dahinten geboren, in UC Santa Barbara, sehr weltbekannt. Welt bekannt als die einzige Uni, die eine eigene Strand hat. Er hat den Ruf, dass es eine Party-Schule ist. Und sogar eine Stühle, das hat mir das gesagt. Aber glaubt uns, das ist eine gute Forschung. Viele normalen Preiswinner sind dabei. Aber keine von uns sehen sie bei uns. Das Schäfisch hat sich expandiert. In anderen Unis, z.B. in Boston, die Sonne sehen und Euro kommen in Frankreich, in Europa. Wie ihr seht, sind wir ziemlich international. Die meisten von uns sind ursprünglich aus Europa, viele von Staaten, viele coole Leute aus Asien, einer aus Brasilien, aus Senegal. Aber leider niemand aus Oceania. Bitte, wenn ihr möchtet, wir sind daran interessiert, Leute dazu zu rekrutieren. Unser Team spielt CTF, wie gesagt. Ich bin mir sicher, Fehler von euch haben schon in solchen Bewerb mitgemacht. Ich gebe euch eine minimale Grund darüber. CTF ist ein Sicherheitswettbewerb. Was tust du? Es gibt eine Challenge-Wett, zum Beispiel eine Website oder ein Hardware oder irgendetwas. Es gibt viele Variationen. Die Grundidee ist, du musst verstehen, wie das funktioniert. Finde das Geheimnis, einmal das Geheimnis stehlen und den Organisationen geben und drücken mal Punkte. Schäfisch hat bei vielen CTFs mitgemacht, das war eine gute Erinnerung. Wir spielen nicht nur CTFs, aber vielleicht kennt ihr das UCSB ICDF. Es ist ein Angriff unverteidigungs-CDF, wo man nicht nur Programme crackt, um die Geheime von anderen Leuten zu stehlen. Es ist eine gute Erinnerung. Wir spielen nicht nur CTFs, sondern vielleicht kennt ihr das UCSB ICDF. Man muss sich selbst verteidigen und die eigenen Binarys patchen, sodass andere Teams nicht stehlen können, aber dass der Dienst trotzdem noch weiter funktioniert. Giovanni Vigni, was der Ursprünger hat im Ursprünger gemacht, das war früher das Finale seiner Vorlesung. Er hat sich über viele Jahre entwickelt und hat angefangen, die Innovationen zu kommen, jedes Jahr was Neues. Vier Jahre hat es gut funktioniert, andere Jahre nicht so gut. Wir haben viele Diskussionen gehabt, aber wir haben den Namen Chaotic Shitstorm mit vollen Armen empfangen. Wir haben viel Garage und versucht, die Innovation zu bringen. Wenn ihr mit den letzten Jahren gespielt habt, wisst ihr sicherlich, dass wir versucht haben, mehr Gewicht auf Verteidigung zu legen und uns versuchen zu sehen, was Teams machen würden, wenn ihr in jede Menge möglichen Services gibt, würden die alle möglichen Systeme gleich verteidigen oder gleich angreifen. Am Ende haben wir sogar volles Player gegen Spieler, gegen Spieler, sogar dass die Programme selber von den Spielern gemacht haben. Wenn ihr weitere erfahren wollt, könnt ihr euch das Grundframework veröffentlicht. Wir sind gerade dabei, die neue Vision zu entwickeln. Wir können euch auch unser Paper anschauen, über zehn Jahre davon, um zu erfahren, was so los ist. Zurück zu, warum wir hier sind. Warum sollt ihr zu uns zuhören? Wir werden euch zeigen, wie es von hier zu da kommt. Wir haben gehört, das ist ein sehr amerikanisches Leid. Ihr seid wirklich amerikanisch, wenn ihr so etwas zeigt. Ich möchte euch zeigen, dass das alles $1 oder $5 Banken sind. Das ist nicht so viel Geld. Um ehrlich zu sein, Shellfish hat ein bisschen Geld gewonnen. Das war eine sehr viel Geld, wo wir uns beim Darpa Grants Cybel Challenge mitgemacht haben. Wir werden euch erklären, wum es da geht. Wir haben etwas mehr Detail zu erklären, wie wir darauf auf die Regel gekommen sind, damit zu machen. Wir geben euch nicht alle Komponenten öffentlich. Wir wollen es nicht zu einfach machen. Wir geben euch ein paar Ideen. solche Schwächen entwickeln kann. Und wenn ich einen Live-Vorteil, Beispiel geben, wie man Enger verwenden kann. Enger ist ein Quell-Offense-Binaire-Analysierprogramm. Man kann viel damit machen. Wir werden euch viel mehr als das, was wir Ihnen zeigen, mit dem Quell-Offense-Frame, das ihr selber verwenden könnt. In der Tat könnt ihr, wenn ihr euch da Interesse habt, nach diesem Talk werden wir ein Workshop organisieren. Und wir werden das machen in Halle 13. 1-3. Im ersten Stock, wenn ihr, wenn ihr da Interesse habt, könnt ihr zu uns dazukommen. Wir werden euch mehr Details geben. Und schließlich werden wir euch ein paar Tipps geben, was die nächsten Schritte wohl sein werden, die Teams machen werden, um im Finale dieser Grand Challenge mitzumachen. Wie ihr seht, mögen wir Akronyme sehr gern. Also, fangen wir an mit der Grundidee. Die meisten von euch kennen wahrscheinlich DARPA schon. DARPA ist eine Forschungsgemeinde der Teil des Verteidigungsministeriums der Staaten von Amerika. Und viele von euch kennen vielleicht, was für eine Rolle die gespielt hat in der Entwicklung des Internets. Und die Mission von DARPA ist es im gewissen Sinne, die Forschung um interessanten Problemen sich zu nähern, die Forschung weiterzubringen. Und wahrscheinlich die berühmteste ist, kennt ihr vielleicht aus der Presse, ist in 2004 haben die die Grand Challenge, niemand hat es geschafft, bis jetzt geschafft, um ein Auto zu machen, das an einer Stimmstelle losfahren kann und vollkommen autonom von A nach B fahren kann. Heutzutage hört man, dass es viele Projekte gibt, die solche Sachen verwirklichen. Aber in 2004 war es absolut nicht einfach, um ehrlich zu sein. In 2004 hat keines der Fahrzeuge das eigentlich geschafft. Gewissermaßen hat es DARPA fünf Sucht, DARPA Probleme, die niemand gelöst hat und schreibt dann einen Wettbewerb aus und fragt die Leute, könnt ihr das schaffen? Heutzutage gibt es Gebäude, die das tun? Also 2014 hat DARPA sich dazu entschlossen, eine Cyber Grand Challenge zu machen. Und nochmal wieder ein totales Autonomensystem, automatisches Exploiten. Was ihr da seht, ist ein Mitbewerber, ein Mitstreiter. Also als Team hast du diesen Array von Servern, kannst du was du tun, was du möchtest, aber du musst ein bestimmtes Spiel, wir werden darüber in einem nächsten Slide spielen. Vielleicht haben wir eine Idee, was die Probleme sind. Die Verletzungen hat schon stattgefunden im Juni dieses Jahr. Siebzig Teams haben am Anfang mitgemacht und sieben Teams wurden ausgesucht als Qualifikanten nach der Qualifikationsrunde. Die Finale ist im August nächsten Jahr und wird während Defqon stattfinden. Tag vor der Defqon zu der Finale. Der Sieger wird gegen die Menschen spielen. Ich bin hoffentlich gewinnt die Menschen, sonst haben wir Probleme. Wir werden in etwas mehr Detail gehen. Wenn ihr ein Intro möchtet oder eine Einleitung, schaut euch bitte die Website an. Sehr, sehr hübsch bei Cyber Grand Challenge.com. Was sind die Regeln? Was ist genau dieses Cyber Grand Challenge? Es ist eine Angriff Unverteidigungs-CTF. Die Art, wie man mitmacht, man kriegt nicht irgendeinen Programm und schaut sich ein Programm an und explodiert das, sondern man schaut noch nicht mal sich das ein Programm an und schreibt dann im Programm, dass dieses Programm explodiert, sondern du musst ein System entwickeln, dem man ein Programm gibt und das automatisch ohne Menschenneinwirkung, die Schwächen findet, explodiert und dann patcht. Hört sich einfach an? Nicht so einfach. Es ist interessant. Wie würdet ihr tun? Wie würdet ihr mitspielen? Das ist eine interessante Frage. Das hat uns dazu gebracht, damit zu arbeiten. Ich möchte, dass ihr darüber lacht denkt, es ist nicht so einfach zu organisieren, diese Art von Challenge. In gewissen Sinne würde ich sagen, dass Starpa es ein bisschen lobverdient hat, dass es diese Challenge ausschreibt. Wie zum Beispiel, wie beweist man, dass ein Binary ausgenutzt wurde, explodiert wurde? In einem klassischen CTF hat das Binary vielleicht ein geheimes Pfeil zum Beispiel, oder es ist ein Sieg Nachricht oder ein Loser Nachricht, und man muss die Sieg Nachricht springen, oder vielleicht ist ein kleiner Server, der was speichert und muss bestimmte geheimen Pfeils finden oder sowas in der Richtung. Das ist natürlich viel komplizierter. Das ist sehr komplizierter, dass ein Programm das so eine Art Komplizität analysieren soll. Daher hat Starpa dafür eine sehr einfache Art und Weise zu definieren, was ein Expert ist. Man hat ein Programm explodiert, wenn man den Programm ein Input geben kann, das ist crashed, zum Beispiel ein Seckfold oder was ähnliches. Zum Beispiel, dass ein gutes Programm wird, wird crashed nicht. Wenn du es schaffst, das Programm zu crashen, dann hast du ja einen extra gefunden und kriegst Punkte. Einfach, es ist einfach nicht vergessen, diese Wettbewerbe hat auch eine Verteidigungskomponente. Das heißt, meistens, was wohl die Verteidigung ist, vielleicht läuft das Programm bis zum Ende und wenn es nicht crashed und es keine Timeout hat, dann ist es gut. Ja, okay, das funktioniert wahrscheinlich, aber dann kann ich einfach dieses Programm ergeben. Und ich glaube, das ist ein, wenn du schon mal CTF gespielt habt, habt ihr vielleicht, habt ihr schon mal den Ausdruck, Superman Defense gehört. In diesem, wenn man möchte, man normalerweise, man möchte nicht, dass es Verteidigungssysteme gibt, die immer funktionieren und wo man einfach keine Fähigkeit braucht, um die einzusetzen, die immer funktionieren und einfach alles tun. Wie verhindert man, dass diese Art von Programm verwendet wird? Einfach, man muss eine Funktionsanfragen reintun. Das heißt, wer die Leute, die ihren Programm schreiben, müssen nicht nur den Code schreiben, sondern sie müssen eine Schwäche reintun, sondern man muss auch bestimmte, ein Script bauen, dass die, dass den Server kontrolliert. Wenn man eine Server Palindrome finden soll, müsst ihr einen Script schreiben, dass das korrekt checkt, ob der Server die Palindrome findet oder nicht. Und außerdem möchte dir sicher sein, dass diese Kontrollen nicht einfach gepatched werden, sondern zum Beispiel, dass das, dass man einfach zu gute Inputs annimmt und dann, wollt ihr verhindern, dass die solche Art von, dass dieses Team einfach ein Patches reintun kann. Wenn dieser Input und dieser Ausput und dieser andere, sondern sonst einfach Erfolg. Es muss etwas schwieriger machen als es sonst. Das war ein Geheim. Was könnt ihr sonst machen, um diese Superman-Verteidigung zu umgehen? Ihr könnt etwas machen. Das nennt man Alt of Band Error-Behandlung, Fehlerbehandlung. Ihr startet ein Programm, das versucht, zum Beispiel eine, eine nicht zugewissene Adresse aufzurufen. Dann gibt das normal für ein Segmentation Fold und das stürzt ab. Aber wenn man einen Signalhandler nun, definiert, dann kann man diese, alle diese, alle diese Crashes behandeln. Und ja, Superman-Defense, also ja, so heißt das jetzt, dann kann mein Programm ja gar nicht abstürzen. Und ja, die Lösung, die sie dazu gemacht haben, sagen, es darf keine einfache Autofand Fehlerbehandlung gemacht werden. Viele von euch können wahrscheinlich in welcher Emulatoren wie Mame für Konsolen, was hängt mich jetzt denn davon ab, eine Art Interpreter zu schreiben, sodass ich meine Instruktionen in meine kleine WM, also virtuelle Maschine schmeißen kann, oder in Mame VirtualBox. Und jedes Mal wenn ich feststelle, dass die CPU einen Fehler feststellen würde, zum Beispiel eben Segmentation Fold, also dass die CPU das anzeigen würde, die Vision durch Null und so weiter, dann gebe ich einfach null zurück. Wie kann ich, wie könnte mich jetzt daran hindern, dass ich sowas mache? Das ist nicht so einfach wie es klingt und DARPA hat da eine sehr elegante Lösung gefunden, nämlich gar nicht. Das ist erlaubt, aber man muss dafür bezahlen. Ihr könnt machen, was ihr wollt. Ihr könnt auch eine ganze Plattform schreiben, die das Binarfile übersetzt, aber ja, eines der Teams hat so etwas eigentliches gemacht. Sie haben, wir haben nicht alle ganzen Details, aber wir haben also ein RLVM eigentliches Ding gebaut und das ist eigentlich ein guter Weg, aber ihr habt dann halt ein Risiko, dass ihr sehr gut einschätzen müssen, wie viel kostet euch jetzt diese Verteidigung, wenn es zum Beispiel zu viel Speicherverbraucher, dann fördert ihr Halbpunkte, weil es zu viel Rechenleistung oder zu viel Speicher braucht. Ein paar weitere Ideen von diesem Wettbewerb, natürlich wollt ihr einen Wettbewerb, der realistisch mit realistischen Programmen funktioniert. Ihr möchtet Programme, die mehr oder weniger etwas machen können, was auch eure Laptops können, also nicht nur ein Hello World Programm, aber es soll auch nicht extra kompliziert werden. Es ist halt nicht so genau definiert, diese, ja, was ist, ja, aber das, was die Teams, die Vorteile der Teams sind, also die Teams haben nur eine begrenzte Zeit und es lohnt sich halt nicht, also man will nicht, dass ein Team halt das ganze Ding modelliert und das ganze Fallsystem modelliert und so weiter und ein ganzes IPI und so weiter und dann hat auch da DARPA wieder einen guten Kompromiss gefunden, dass, ja, die Architektur, die benutzt wird, ist ein normaler Intelliq 86, alle Benutzer-Land, also User Space-Operationen sind erlaubt und ja, also man kann auch disassemblen und so weiter, aber das Betriebssystem ist ein limitiertes Linux-Unix eigentliches System. Man hat nur ein paar grundsätzliche Systemaufrufe, also Transmit, also Verschicke, Empange etwas, Alloziere-Speicher und so weiter, Zufall und so weiter, also eine Art ja, eine Art reservierende Speicher und geben wieder zurück und so könnt ihr zum Beispiel halt auch in dieser Architektur einen eigenen Compiler oder ausführbaren Code in eurer eigenen Speicher schreiben, zum Beispiel einen eigenen Compiler, aber es ist vereinfacht im Vergleich zu einem real world, also echten Welt-Linux-Programm, es gibt zum Beispiel keine Signale, kein Shirt, kein geteilten Speicher, keine Threads und DARPA hat diesen, bringt eine Selb, die Verteidigung selber mit, haben sie halt weiter getrieben, etwas weiter, als man das im Normalfall machen kann, also das hat kein ASLR, also Layout Randomization der Stack ist ausführbar und ihr müsst selber mit euren Programmen dafür sorgen, dass ja, dass es nichts Böses macht und wir haben halt, hatten auch selber ein paar nicht triviale Entscheidungen zu treffen in unserem Team, was wir nun machen müssen und ich gebe das Mikrofon nun weiter an meinen Kollegen Antonia, der auch über das Cyber Reasoning System informiert, also ich erzähle euch das CRS, Cyber Reasoning System das, was ist das, das ist die Art und Weise, wie die DARPA definiert, wie das System funktionieren soll, dass sie selber entwickelt, wie Jakob schon gesagt hat, die Eingabe ist eine Liste und für diese muss man eine Schwachstelle oder eine Ausnutzung, also eine Exploit gefunden werden, so dass das Binar also das Programm abstürzt und dann muss es das patchen, damit es immun wird, aber immer noch die gleiche Funktionalität hat. In Detail sieht das System Folgen am Außen aus. Wir haben das verwundbare Programm Binary das wird halt gefüttert in dieses Automatik Vulnerability Finding, das halt selbst versucht Verrumpakheiten zu finden und die Exploits, die das dann findet, das geht das in ein automatisches Patching System, ein automatisches Cut Patch Komponente, die dann Patches vorschlägt und einige Patch Strategien müssen halt zuerst an Exploit haben, bevor man ein Patch erstellen kann und das muss halt teilweise sehr präzifisch sein. Und der vorgeschlagene Patch und der vorgeschlagene Exploit werden dann vergleich, also mit einer anderen Komponente getestet mit diesem Automatik Testing und das Testet haben ja, hat es immer noch die gleiche Funktionalität, crashed es tatsächlich und so weiter und die besten Exploits und diesen Patches werden dann veröffentlicht an die DARPA für die Evolution. So, so sieht das das ist die Grundidee der Systems. Das nächste ist das Automatik Vulnerability Discovery also Verwundbarkeitsdetektion quasi in Deutsch. Die Frage ist wie kann ich dieses Programm dieses Beinoree zum Abstürz bringen also zum Beispiel indem man ihm eine bestimmte Eingabe gibt das ist die Frage die es zu beantworten gibt. Die Frage ist ein Subset einer noch größeren schwierigeren Frage wie erreicht man einen bestimmten Zustand innerhalb dieser Serbineer Datei. Das ist ein sehr interessantes Problem im allgemeinen Fall es gibt ein paar Herangehensweisen die das Programm ein Problem lösen können in vielen Fallen also es gibt diese zwei Herangehensweisen die wir benutzen das eine ist Fasing und das andere ist Symbolic Execution für uns sind diese zwei Herangehensweisen ja die Erzgezerliche ist mehr darüber Zuerst zum Fasing also Dynamische Analyse die Frage ist wie komme ich zu einem bestimmten Zustand innerhalb dieses Programms ihr seht den Code den ich auf der Folie habe es ist ein sehr einfaches Programm das einen eine Eingabe kriegt das schreibt sie dann in eine Variable macht zwei verschiedene Überprüfungen und sagt dann entweder du gewinst oder du verlierst und die Frage ist nun welche Eingabe müssen wir jetzt da nur geben um den Jovin Zustand zu erreichen Möglichkeit 1 man versucht einfach ganz viele verschiedene Eingaben als man versucht mal 1, dann 2 und so weiter bis und mit 10 und aber erst beim 10. erreicht man dann halt den Zustand den man erreichen will also Fasing ist im Grunde genommen die Maschine Inputs einfach auszuprobieren und für die CGC haben wir jetzt Fasing benutzt und die Methode die wir benutzen heißt Coverage Guarded Fasing und das heißt das Programm wurde in einer Umgebung ausgeführt welche welche aufgezeichnet hat wie viel Eingaben man benaucht um das ganze Binary zu traversieren und diese alle Eingaben die mehr dazu beigebracht haben die hat es sich dann gemerkt und das ganze basiert auf AFL da ist der Link das System war recht effektiv aber es gibt auch ein paar spezifische Fälle wo das System nicht funktioniert oder nicht effizient funktioniert zum Beispiel ich habe dir nochmal den selben Kodi vorher aber es gibt einen Unterschied mit in der zweiten Überprüfung jetzt ist nicht mehr X sondern X Quadrat muss halt diese große Konstante sein das ist jetzt sehr unwahrscheinlich dass ihr das einfach so findet indem man verschiedene Eingaben ausprobiert durch Glück so ja so als mögliche Lösung kann man jetzt eben symbolische Ausführung versuchen also suchen wir nochmal diesen, das original Beispiel die Grundidee ist dass man das Binarfile interpretiert und alle Benutzereingaben mit symbolischen Werten ersetzt also das X können wir zum Beispiel nicht darum merken wir uns das ist jetzt ein Input das erste Symbol und die Symbolik muss sich darum kümmern was dieses X nun macht in aktuellen Stand dann wird das Programm normal ausgeführt und sobald wir an eine Stelle treffen wo dieses dann wissen wir halt nicht was genau passieren wird sondern wir also ist es größer oder kleiner das ist F oder L und darum nehmen wir einfach beide Wege den F und L Weg und können so weiter weiter herausfinden auf welchem Weg das Programm weitergeht wenn wir wenn wir jetzt das erste nehmen dann muss halt vielleicht zehn sein beim anderen nicht dann gibt es halt diesen Baum mit quasi zwei verschiedenen Ausführungs-Standen und jetzt habt ihr eine zweite Instruktion wo es auseinandergehen kann und eine zweite Bedingung und da haben wir eine weitere Bedingung dass die eine sein muss als 100 und am anderen Ort haben wir etwas das sagt X muss größer als gleich 100 sein darum haben wir das ganze schon gefunden und jetzt haben wir also den Text Juven gefunden jetzt können wir die Symbolik Execution an den Fragen was ist das konkreter sie sollen uns etwas einen konkreten Wert geben der zum Beispiel beide Werte erfüllt zum Beispiel 99 und wenn ihr 99 als Eingabe gebt dann würde das funktionieren und bei etwas komplizierten Dingen ja dann muss die Enstein halt einfach mehr Symboles sich merken und mehr Wege nehmen also also ich verwende dieses Symbolik Execution insbesondere um genau zu sein die Symbolik Execution von Anger diese binäre Plattformen die wir die von USEN's Investition entwickelt wurde und insbesondere haben wir es auf zwei Bedingungen konzentriert erstens Memory Zugriff außerhalb von allizierten Visionen und andererseits nicht bedingte Instruktion zum Beispiel ein Pointe der irgendwo hin zu den Register geht aber der Wert des Registers kommt von einem Nutzer, das heißt die Symbolik Execution weiß nicht wo es losgeht, wohin warum haben wir das danach geschaut weil wenn ja eine die Entity ein oder andere findet dann findet ihr habt ja eine Zustand gefunden wo das Programm crashen kann entweder weil man es schafft, dass das Programm eine nicht allizierte Memory finden kann oder man kann einen nicht existierten Code springen die generelle Idee ist für die Finale haben wir die folgende Idee um die beiden Zustände zu kombinieren um genau zu sein gibt es einen Paper das folgende Paper in der Konferenz dass wir in Februar präsentiert werden wird um ein Vorschau auf die Resultate zu geben das ist die gesamte die ganze binäre Programm ist ungefähr skaliert das sind die Binaries die wir wo wir ein Exploit mit Fuzzing finden das ist die Anzahl von Binaries wo wir mit Symbolik Execution ein Export finden können wenn wir die beiden kombinieren finden wir noch mehr Binaries wo es Schwächen gibt aber der Großkreis ist die zweite Anzahl von Binaries ich schlage vor ihr, lese das Paper durch sobald es blödsiert wird jetzt gibt es wird Andrew Enger einführen und es gibt eine Live-Demo Hallo, ihr könnt mich hören, super ich werde euch über Enger was erzählen ich bin der der Erzirnte Enger ist eine Python-Politik das verwendet und es analysiert die Binaries und tut all die Sachen von denen sie gesprochen haben und noch mehr ist es Quellaufend weil wir daran glauben und es ist übrigens die kommt daher weil es von aus einem Doktor angetan der sich Filme anschauen wollte und daraus das entstanden und sich diversen Binaries und es hat diese Multi-Plattform-Geschichte von Anfang an ist wie gesagt in Python geschrieben weil wir weil wir forsch sind wir können schnell bewegen und Sachen kaputt machen weil wir nicht so Zeit haben in Camel oder C++ programmieren weil wir nicht Zeit haben warum und dank der Magie von Linux und des Python-Pagage-Indexes könnt ihr das in ein zwei Kommandos holen ok was ich jetzt hier tun werde werde ich eine Demo machen mit Enger um automatisch Schwächen zu finden die Automatischteil ich werde euch jetzt zeigen ich werde euch zeigen wie man die Grub-Back to 28 Schwäche finden kann wie ihr vielleicht gehört habt ist gegen um eine Schwäche in dem Grand Unified Bootloader von 1 bis 1.2 wenn du die drückt mit haste 28 mal drückt der Eingabe bei der Passwort-Eingabe kriegt man eine Rescue-Stelle es ist eine sehr interessante Schwäche denn liegt dank eines nicht kontrollierten integer-underflow bei der Funktion die den Nutzernamen und Passwort kollen wie ihr sehen könnt er kopiert von der Schwäche das ist genau die Schwachstelle genau die Stelle die den Index verringert das Import Buffers später in der Funktion löscht die Funktion die Teile des Buffers die nicht verwendet wurden mit diesem Memset das Problem ist dass man die momentane Länge negativ machen kann auf einmal sucht es einen Memset Memset sets andere Teile des Stacks auf einmal zum Beispiel die Rückkehradresse auf einmal wenn es zum Beispiel auf 0 stellt crush das Programm aber das ist in x86 sehr niedes wie geht das wie kann man das die Schwäche auslösen wie geht das es kann wir nicht darüber reden um das automatisch zu finden ist sehr schwierig da wie ihr sehen könnt das ist der Kontrollflow dieser Funktion wie ihr sehen könnt ist eine riesen Schleife und mit vielen vielen Faden wenn ihr eine Symbolische Nächtigkeit nehmt und da rein schmeißt dann wird das Universe sterben bevor hier irgendwas zum Transpil zu viel komischem Zustand 10 Kinderzustände und dann wieder in den Schleife und nochmal 10 Kinder und dann habt ihr einen exponentiellen Wachstum von Zuständen und ihr kommt wieder der Arbeitsspeich aus gibt es keine Arbeitsschriche ich werde euch hier mal den dummen Ansatz den so ganzen Grab naiv ich werde einfach das naiv verwenden das meiste davon ist einfach den Grabzustand aufbauen weil wir in der Wirklichkeit nicht Grab von Anfang an das tun können deswegen starten wir Grab einfach in der Mitte das kann ein Gatun ihr könnt einen ihren Zustand aufbauen dass das wie ihr sehen könnt es macht eine Tabula rasa und damit könnt ihr dann symbolisch einen Zustand ausführen so symbolisch wie ihr halt möchtet und dann einfach es geschreitet durch den dadurch bis es etwas findet was zu auf null springt wie ihr sehen könnt wie ihr sehen werdet habe ich es auch so aufgestellt dass es bei jedem Schritt den eigenen Zustand ausdruckt wie ihr sehen könnt wie es sehr schnell viel, viel, viel Zustand ausführt wie ihr seht wird die aktive Nummer größer und größer und das Programm wird langsamer und langsamer wenn ihr euch die Speichernutzung anschaut wird es irgendwann den ganzen Speicher ausnutzen okay der generelle Lösung dafür versucht es mit einer Technik sogenannte Wertesting aus der Calligame Melodin es tätet an Paper ein gar versucht benutze diese Methode und ich habe es versucht aber es funktioniert nicht weil es einfach zu viel Komplizität dass der Constraintlöser die Bedienungslöser das tun kann ist ein Thema aber ein Gakran dieses Problem löst kann ich es für euch lösen weil symbolische Ausführung ist zwar stark sehr kraftvoll ist mächtig ist aber sehr dumm ist weil es viel Zeit darauf verwendet Sachen auszurechnen die man nicht ausrechnen muss und ihr aber ihr seid sehr clever und ihr wisst wie man clever aber ihr könnt das nicht mit der gleichen Position und Sorgfalt wie ein symbolischer Ausführung die Lösung ist enger enger gibt euch die Schnittstelle um eure eine Wut zu kanalisieren was ihr tun könnt das könnt ihr wie das das letzte auch gemacht haben könnt ihr alles das extra ist und sich anschauen was enger nicht tut was es unnütz ist und ihr könnt euch das jede Menge Sachen tut die ihr nicht braucht die ihr nie tun werdet zum Beispiel viele viele Buchstaben einfügen dann wieder löschen oder den Homebutton Homecraft drücken und was ihr tun könnt könnt ihr einfach enger sagen tut einfach die Sachen nicht zu tun und die Macht von enger dass es mit sinnvollen Schnittstellen tun wenn ihr mein vorheriges mein vorheriges Beispiel nehmen könnt und mit 10 weiteren Kurzheilen findet es den Bug wenn ihr jetzt grabbug und es drückt den gleichen Zustand und wie wie jetzt findet es jede Menge Zustände die es nicht außen und jetzt ist die Ausrechnung ja sehr einfach und es findet den question in input der da wäre 28 mal die Rücknahmetast zu drücken und enter drücken das ist die demo und ein paar weitere Kommentare wenn ihr euch den wenn ihr den kript anschaut seht ihr am Anfang es lädt die Grub dieses Grub Binary aus meinem Linux ich habe mein System nicht abgedattet also bitte nicht hacken was ich früher gemacht habe habe ich versucht die 6.Forbit Version auszunutzen weil das 6.Forbit funktioniert nicht aufgrund des aufgrund diversen Grund nicht funktioniert es wusste ich nicht bevor ich den ganzen Export geschrieben habe und gefunden habe das es gar nicht funktioniert nachdem ich das Analyse gemacht habe ah das darum also habe ich einfach auf den 32 Bit Version umgeschaltet und das einzige was ich tun musste ist die Worldgröße zu tun und die Adresse des Programmen ein Geist sehr flexibel es kann diese ganzen allen möglichen Sachen behandeln zum Beispiel Binary Blobs also PE, Executable Maybe, Marco, Files und ich weiß nicht in meiner was ich meine das ist eine sehr eine sehr unterschiedliche eine sehr gute ich meine dass das der Grund ist warum die Cyber Channel so schwierig ist der geheime Trick in dieser ganzen Geschichte darüber dürfen wir nicht reden weil mein Professor mir das verboten hat aber ich möchte nochmal unterstreichen wie nutzerfreundlich einger ist weil so wie ihr das verwenden könnt wir werden es als automatisiertes System ein schwieriger Argument zu tun hat aber das war alles vorüber ich reden kann das zurück zu dem anderen und das Ende zu reden so dann danke zu etwas weniger technisch wir haben die Qualifikation gespielt von dem CGC und waren in den sieben Besten wir haben 44 Binaries ausgenutzt und jedes der qualifizierten Teams hat 57.000 Dollar gekriegt was eigentlich ziemlich cool ist Applaus im Saal okay für die Finale für das Finale war das Setup etwas anders also einige Dinge werden anders sein die Finale werden rundenbasiert also für die Qualifikation hatten wir einfach alle Binaries und dann konnten wir 24 Stunden lang automatisch finden und das angeben was wir gefunden haben und hier haben wir jetzt eben ein rundenbasiertes Spiel bei jeder Runde kriegen wir neue Binaries und müssen halt neue Patches einreichen um uns zu qualifizieren wahrscheinlich wird es keine Möglichkeit geben dass man als Mensch darin eingreifen kann aber während der Qualifikationsphase war es zumindest möglich ein paar Bucks zu lösen wieder und vielleicht gibt es eine Möglichkeit auch bei den finalen Fehler zu finden und zu reparieren also zum Beispiel wenn ihr ja irgendwo ein Semikolon vergessen habt dann ist alle eure Arbeit ja für die Katz und ja für die große Herausforderung sollen sie halt irgendwie schauen, dass das nicht passiert ja andererseits muss es halt auch fair sein gegenüber allen Teams und so weiter der Vorteil ist dass die forderen forderen können wir ja, die sind schon verfügbar und wir können vom System auch schon die Dateufarmate und so weiter und so können wir uns darauf vorbereiten und wir haben auch analysierten Trafik von anderen Teams denn wir analysieren können und wir können auch Patches von anderen Teams also können wir anschauen und ja, all diese Szenarien sind sehr interessant weil vielleicht kann man auch einen Patch von einem anderen Team oder Exploits von einem anderen Team stehlen also es ist vielleicht auch etwas Meta-Spielen oder Meta-Wettbewerb wie man das ganze patchen will und kann ja, man kann zum Beispiel einen Patch einfach stehlen, aber warten bis man ihn dann aus einfügt in die ja, wir wissen noch nicht genau wie wir es machen wollen also die Exploits werden auch anders sein in der Qualifikation war ein Exploit einfach eine Eingabe die das Programm zum Abstoss bringt für das Finale gibt es zwei verschiedene Typen von Exploits Typ 1 ist ein Exploit der ist ein Stück Code das einen spezifischen Ort und spezifische Register kriegt dann so an diesem speziellen Ort das BNR-File zum Absturz kriegt und das Register auf einem bestimmten Wert setzt dann habt ihr es halt ausgenutzt also dann ist das Bindere unter eurer Kontrolle oder eine andere Art ist der zweite Typ ist dass man halt Daten zeigen muss also auf einer spezifischen Speicherseite dafür braucht man eine etwas realistischere Exploit-Generation und wir arbeiten noch einen Anger damit das solche Dinge automatisch ausnutzen kann automatisch Robchain-Bilder man kann auch Netzwerk-Level-Filterregeln auslegen also anwenden und zum Beispiel halt Regeln vorgeben dass bestimmter Traffic euer System nicht gar nicht erreicht aber das müsst ihr natürlich so machen dass ihr den eigenen Dienst nicht damit behindert also eine ganze neue Art von der Herausforderung das ist das System ihr seht die Specs auf der Folie und auf dieses System können wir jetzt per SSH drauf zugreifen auf dem Amphinale werden sieben davon herumstehen für jedes Team eines und wahrscheinlich werden sie auch einen halb megawatt Generator mitbringen um das ganze Ding zu betreiben und zu kühlen und das erste was wir machten ist ein Heidstopp ausgeführt auf dem Ding und wenn man jetzt Heidstopp auf all diesen gleichzeitig ausführen würde dann sieht das wohl irgendwie so aus ja das ist ein großer Screenshot von sehr vielen CPUs also die Finale das Finale ist im August 2016 und der Defcon in Las Vegas der erste Preis ist 2 Millionen der dritte 750.000 und wie Jakob schon gesagt hat dass das Gewinnerteam wird dann antreten gegen ein Team aus Menschen an den Defcon CTF also der Flaggfinale und da haben wir ja noch mehr Rechenleistung und irgendwie um ein Terabyte rein zur Verfügung und wegen all das ist halt nächstes Jahr alle alle Binary Dateien müssen diesem CGC Format folgen die die halt damit die Systeme automatisiert gegen einander antreten können ja, am Schluss seht ihr noch ein Bild unseres ja, aller Personen die irgendwie etwas dazu beigetragen haben dass wir jetzt im Finale sind, ihr seht auch meine Photoshop-Kentnisse sind sehr gut es hat auch noch zwei mehr Mitglieder die vor Kurzem erst angefangen haben wie ihr auch seht sind wir aus verschiedensten Ländern der Erde, Italien hat viele dabei aber auch ein paar Leute aus den Vereinten Staaten und nach diesem Vortrag wird es in Halle 13 einen Workshop geben bringt eure Laptops mit da auf der Karte seht ihr wo der Raum ist also am besten ihr folgt uns einfach das ist das einfachste ja, also es ist halt einfach angeschrieben können auf den Weg sein folgen oder auf die Karte schauen und wir haben ein paar einfache Beispiele mitgebracht damit ihr auch selber ein bisschen damit rumspielen könnt und sehr wahrscheinlich auch schon etwas finden werdet also auf der letzten Folie findet ihr noch ein paar Referenzen wo falls ihr so interessiert wo ihr weiterlesen könnt also das cgc zum Beispiel der Cyber Grant Challenge große Cyber Challenge da ein paar Präsentationen und so weiter unsere eigenen E-Mail Adressen also bitte leise sein und nur hinten rausgehen also bitte leise ihr braucht eure Stimme nicht um das Zimmer zu verlassen so dass Leute die Fragen fragen möchten fragen können okay, hier ist ein bisschen Chaos wir warten ein paar Sekunden bis sich das erklärt okay, nur zum Informationen wie viele Fragen aus dem Internet okay, verstanden okay um nicht weiter Zeit zu verfentern, fangen wir einfach an also bitte Frage von vorne rechts bitte hallo ich bin von den anderen Teams die früher bei DefCon mitgemacht haben meine Frage ist früher war es schwierig Geld zu bekommen für die Forschung zumindest wenn du CTF machst warum hat DAPA so viel Geld in diese Sache reingetan was glaubt ihr, was die Motivationen sind? haben wir darauf einen Antwort also einerseits kann man zum Beispiel sagen dass die ganze Situation etwas sich entwickelt hat in der Zwischenzeit das AFL hat sicher gezeigt dass man viele Bugs einfach automatisiert finden kann wenn man den Konferenz etwas verfolgt dann siehst du, dass da sehr viele Fortschritte gemacht wurden in letzter Zeit und wahrscheinlich dachte DAPA ja, das ist jetzt an der Zeit dass man das machen kann okay und aus dem Internet die Frage okay, aus dem Internet was was für eine Antwort habt ihr bekommen als ihr die freedom of information Anfrage geschallt bitte noch mal und die letzten Slides war irgendwas über eine freedom of information Anfrage und die Internet wirst du gerne ob ihr dazu eine Antwort erhalten habt freedom of information anfrage das ist die freie Internet also wir denken, dass das Internet falsch ist was ich sagen kann ist nach dem Webbewerb werden wir wohl den meisten wenn ich sogar allen Code hinausgeben aber ja, ich verstehe die Frage leider nicht und alle also, alle binaries die übermittelt oder ja, abgegeben wurden eingereicht für den Webbewerb und alle exploits und so weiter die sind alle verfügbar auf der DAPA Webseite also wenn ihr verstehen wollt, was die Teams gemacht haben dann könnt ihr diese binaries halt herunterladen reverse engenieren und dann seht ihr was die Teams gemacht haben viel mehr kann ich nicht dazu sagen also der größte Teil des DAPA Codes ist auch öffentlich zugänglich also wenn es euch interessiert dann könnt ihr im Moment einen guten Überblick euch verschaffen und nach dem finalen Wirt das war dann wahrscheinlich noch viel, viel besser weil halt relativ viele Informationen dann halt bis dann noch nicht veröffentlicht sondern erst dann okay, auf meiner Rechten keine Frage, doch hast du eine Frage? Nein Nein, Leute stehen einfach gibt es noch eine Frage aus dem Internet? Nein keine Frage aus dem Internet dann wäre das der perfekte Zeitpunkt oh, halt, halt, halt eine letzte Frage ist, meint ihr, dass 2 Millionen einen fairer Messer für automatische Exportfindung? Ja, denkst du, dass wir mehr oder mehr mehr halten sollten? es ist sehr schwierig, also ja, grundsätzlich es ist nämlich sehr schwierig und es braucht sehr viel Zeit also wir haben noch andere Projekte und andere Forschungsarbeiten es ist sehr schwierig ein sehr schwieriges Programm und ja, es ist nicht einfach nur so ein Schritt und dann hat man das sondern ja, man muss sehr viel ich gebe Ihnen ein Tool, mit dem man mit einem Verbesserung fast jedes Binary nur 2 Millionen gibt ja falls jemand in diesem Raum mit der DARPA darüber reden möchte dass man den großen Preis etwas erhöht dann hätte ich dann natürlich nichts dagegen aber im Moment sind auch die 750.000 helfen uns für die nächsten 20 Jahre genügend Pizza und Reisekosten zu decken ok, damit haben wir es vielen Dank Antonio Nacobo und geht