 Herzlich Willkommen zum Vortrag Moosecure Website. Sie habt ja vorhin schon vielleicht gehört, wie ihr eure Services absichern könnt. Und da kamen auch schon diese Hedder vor. Ich habe jetzt noch einen ganzen Vortrag dazu. Mal schauen, ob er noch was Neues hört. Genau, fangen wir einfach mal an. Genau, was machen diese Hedder eigentlich? Die sind erst mal unabhängig von der Anwendung oder vom Code der Anwendung. Weil die schickt der Websauer mit und der User-Agent macht irgendwas damit. Das sozusagen ist das dann innerhalb der Infrastruktur, also wenn wir jetzt das mal als Web begreifen. Und insbesondere geht das um HTTP-Protokoll-Erweiterung. Man kann da jetzt halt neue Hedder mit schicken. Die machen irgendwas auf der User-Agent-Seite. Also muss nicht zwingend ein Webbrowser sein. Und da gibt es einen kleinen Überblick zu. Und halt auch ein paar Dinge, die man dabei beachten sollte. Das Ganze ist nicht so einschalten, feier und vergeht. Man kann sich da auch ein bisschen weh tun. Scanner habt ihr vorhin vielleicht in dem anderen Vortrag schon mal gesehen. Es gibt da ein paar Tools. Es gibt aber auch welche, die einem helfen, solche Hedder zu erstellen. Und wie man mit diesem Reporting umgehen kann. Eine kleine Zusammenfassung. Genau, wo stehen wir da eigentlich so mit der Web-Anwendungssicherheit? Was sind die Probleme? XSS wird auch gerne als Remote-Code-Exclusion auf die Web bezeichnet. Also als Gegenpart von der Server- oder Desktop-Seite oder Mobile-Applications. Ich glaube, ich werde es nicht mehr erleben. Von daher hat man sich dann gedacht, naja, irgendwie geht das alles nicht so weiter, beziehungsweise es skaliert halt nicht, den ganzen Code aufzuräumen. Secret Injection, habe ich heute auch schon mal erzählt, ist immer noch eins der Top-Risiken. Wir haben 2016. Genau, was könnte man tun, um das besser zu machen? Das muss irgendwie skalieren. Und zwar einfach. Und das soll halt die Angriffsmöglichkeiten signifikant reduzieren. Und genau, also geht man in die Infrastruktur, in dem Fall halt die Web-Infrastruktur-Server. Also in dem Vortrag verstehe ich unter Infrastruktur jetzt irgendwie genau das. Protokolle, Standards und irgendwie die Dinge, die da miteinander kommunizieren und diese Anwendungen ausführen oder diese Seiten rendern und die Server, die das ausliefern. Was ist es nicht? Die Anwendungen selber betrachten wir jetzt primär nicht. An einigen Stellen muss man die dann schon betrachten. Also die Header sind nicht ganz so unabhängig. Also normale Desktop- oder Mobile-Anwendungen betrachten wir jetzt nicht. Die Web-Anwendungen an sich auch nicht. Was sind jetzt diese Header? Genau, habe ich ja schon kurz erzählt. Das ist eine Erweiterung vom HTTP-Protokoll. Deswegen haben die oft so ein H irgendwie drin stehen, manchmal auch nicht. Sehen wir nachher noch. Das wären irgendwie immer mehr. Das sind jetzt schon sechs, die hier drin sind. Ich habe 2014 auch schon mal einen Vortrag gehalten. Da war dieser Pinning-Header für die Public Keys noch quasi ein Draft-Mode. Inzwischen ist der ja auch ausgerollt und verfügbar. Genau, der Vorteil davon ist, man kann das erstmal nutzen, ohne viel an seiner Anwendung ändern zu müssen. Und kriegt eine Verbesserung der Situation. Es wird nicht alles gut, aber es wird ein bisschen besser. Also es wird schwieriger für einen Angreifer, bestimmte Dinge auszunutzen, von fehlerhaften Code, der ich schon vorhanden ist. Und man reduziert dadurch dann halt ein paar Standardrisiken, die wir immer noch haben, aber eigentlich nicht mehr haben wollen. Genau, aber auch wenn man jetzt in die Infrastruktur geht und sagt, der User-Agent wird das schon richten, hat man da halt auch wieder die Probleme, wenn der User-Agent das halt nicht richtet, wenn ein Bug in Chrome, Firefox oder ein anderen Browser ist, dann ist das erstmal, dann skaliert das auch wieder wunderbar für den Angreifer, bis alle ihren Browser geupdatet haben. Aber auf der anderen Seite skalieren die Fixes auch relativ gut, weil bis alle ihre Anwendungen geupdatet haben, das dauert noch länger, als bis alle Leute ihre Browser oder auch mobile Betriebssysteme. Das ist ja auch oft heutzutage der Standard, dass man halt irgendwie ein Web-View in der Mobile-App hat, also letztendlich auch nur eine Webseite rendert, aber das skaliert trotzdem noch besser, als alle Anwendungen zu fixen. Man wird aber auch abhängig von dieser Infrastruktur und vielleicht auch ein bisschen lazy, also faul, weil die Infrastruktur macht das ja dann für mich, muss ich nicht mehr im Code machen, muss man also auch ein bisschen aufpassen, muss ich trotzdem, muss beides machen. Genau, das ist der Punkt. Genau, die Infrastruktur repariert es halt nicht, es war in dem Vortrag heute Mittag, da ging es darum, was kann man auf der Code-Seite tun, jetzt geht es darum, was kann man mit diesen Headern machen und worauf muss man achten. Also man muss trotzdem die Leute, die das bauen, trainieren, schulen, die Leute, die das einrichten und so weiter, da kommt man nicht drum herum, das wird eher mehr und nicht weniger damit. Aber man, ja, genau. Was gibt es für Header? Ich habe die mal in so einer bestimmten Reihenfolge, weil manche sehen einfach aus, man muss trotzdem auf ein paar Sachen achten und dann gibt es so ein paar Komplexere, wo man länger darüber erzählen muss oder kann. Genau, deswegen sind die jetzt nicht so ganz, also sie sind jetzt in einem bestimmten Reihenfolge, weil zum Beispiel auch die X-Frame-Options, das kann man jetzt auch mit der Content Security Policy abdecken und da hat man auch mehr Möglichkeiten als die originäre Header. Das heißt, manche Header werden jetzt auch in diesem Policy Header integriert, sodass man wieder weniger hat, aber an der anderen Stelle halt mehr einstellen muss. So, fangen wir mit dem Ersten an. Da klingt schon mal gut, ne? XSS Protection, cool, schalt mal ein, sind wir glücklich. Vielleicht? Das Problem an der Stelle ist, das ist ja quasi ein Filter oder sagen wir mal, eine sehr intelligente Heuristik auf User-Agent-Seite, die versucht, bösartigen JavaScript-Grid oder bösartige Dinge zu erkennen und dabei gleichzeitig sicherzustellen, dass alle möglichen Anwendungen funktionieren. Das heißt, diese Filter sind extrem fehler-tolerant, weil das Schlimmste, was passiert, ihr ruft in eurem Lieblingsbrowser eine Seite auf und die geht nicht mehr. Dann geht ihr einfach zum anderen Browser oder zum anderen User-Agent, um das will keiner. Die Browser ja auch immer versuchen, alle möglichen kaputten Webseiten zu reparieren, dass sie vernünftig rennern, was halt auch ein paar Probleme macht, mit denen wir uns heutzutage herumschlagen. Das heißt, der Filter ist schön, der funktioniert in dem Browser natürlich auch anders. Es ist ein anderer JavaScript-Engine drin, es ist ein anderer Ansatz drin und die Defaults sind auch nicht unbedingt gut. Aber es ist auf jeden Fall nicht verkehrt, das einzuschalten. Es gibt hier mehrere Optionen. Man kann ihn ausschalten. Bei Chrome ist die Default-Option die zweite, der ist an und der versucht, den bösartigen Quot wegzufiltern, rennt er trotzdem die Seite und der User merkt nichts davon. Außer, wenn er jetzt seine Konsole offen hätte, was ja jeder User jeden Tag macht und sich die Browser aber nichts anguckt. Der sieht davon nichts und merkt im Zweifel gar nicht, dass da irgendwas Komisches passiert. Das ist aber das Default-Setup von Chrome und Chrome. Im IE ist es zum Beispiel aus, also der macht das nicht von selber. Hier gibt es eine dritte Option, der soll das erkennen und wenn er was findet, dann soll er die Seite nicht mehr rennen. Das heißt, der meinte, okay, hier ist jetzt irgendwas kaputt, und dann gibt es noch eine vierte Option, die ist relativ neu, die gab es am Anfang noch nicht. Das kommt aus sehr viel, dass man bei dem CSP, weil das sehr komplex ist, sehen wir nachher noch, auch so eine Report URI eingefügt ist. Da heißt das Attribut übrigens anders, damit es mehr Spaß macht. Das ist in jedem Hader immer irgendwie alles anders. Anders mit den Quotes, anders mit den Attributen. Ja, es hat jetzt Report und CSP nachher heißt das Report bin es Stich URI. Das heißt, kann man auch immer schnell falsch machen. Genau, in dem Fall würde er dann an irgendeine URI, die man da angibt, das hinschicken, dass da was war. Der User könnte die Seite benutzen, aber der Betreiber der Seite würde irgendwie mitbekommen, dass da was passiert. Deswegen gibt es ja auch ein, genau, also das ist, wenn man das nutzen will, dann ist das eher die empfohlene Einstellung die Eins, weil das vielleicht eher das Risiko für den Nutzer der Anwendung erhöht, weil der merkt gar nicht, dass da was war und der Browser filtert das heimlich weg in Anführungszeichen. Dann ist es vielleicht besser den Filter ganz auszulassen. Da gibt es einen schönen Blockbeitrag, kann man sich durchlesen, da ist das ein bisschen diskutiert, was der Vorteil in der Nachteil ist und ob dann Protection 2.0 nicht besser ist als das mit der Eins, was man sich sofort macht. Und wenn man die Eins haben will, dann lieber mit dem Block-Mode oder mit dem Report-Mode, so dass der Seitenbetreiber das zumindest mitbekommt. Genau, also schon der erste kann man nutzen, ist aber gar nicht so trivial, wie es aussieht. Der hier ist mal wirklich einfach. X Content-Type-Options das kommt noch aus der Zeit, als alle möglichen Leute es nicht geschafft haben, die richtige Seiten zu bauen und auch den Content, den sie zum User-Agen geschickt haben, mit dem richtigen Header zu versehen, also mit dem Content-Header. Was haben also die User-Agen gemacht? Wenn man sagt, okay, die Server schicken immer irgendein Header mit, aber das hat gar nichts, das ist gar kein JPEG, das ist ein PNG. Also gucke ich mal nach, was es wirklich ist. Darüber gab es halt auch eine ganze Menge Unfälle und potenzielle Angriffs-Szenarien. Genau, deswegen will man das eigentlich nicht mehr. Heutzutage sind die meisten Web-Server und Anwendungen in der Lage, mit dem jeweiligen Content auch den richtigen Content-Type mitzuschicken und wenn es nicht passt, dann muss man es reparieren. Deswegen ist das eine Sache, die man eigentlich immer einschauen sollte, wenn man wirklich so eine kaputte Anwendung hat, ist das halt auch eine blöde Idee, weil dann sieht sie vielleicht nicht mehr so aus oder funktioniert nicht mehr die Web-Anwendung. Das heißt, den kann man auch nicht einfach benutzen, muss das vorher alles ausprobieren. Weil wenn ich das mache, geht meine Seite vielleicht nicht mehr, weil ich gar nicht weiß, dass sie kaputt ist und der Browser repariert das immer heimlich, weil der nachguckt, was ich da schicke, ob das jetzt wirklich ein JPEG oder was auch immer ist, ein HTML oder ein JSON, auch wenn es mit einem anderen Mime-Type schon ankommt. Und die Option stellt halt sicher, dass der Browser nicht anfängt zu raten, was ihr ihn geschickt habt, sondern sagt, okay, ihr habt gesagt, es ist ein JSON-File, dann war ich das jetzt auch wie ein JSON-File und mache kein Bild draus oder andersrum. Ich pass jetzt nicht plötzlich HTML aus dem JPEG raus. Da gibt es ja auch lustige Dinge, die dann in der Vergangenheit funktioniert haben. Das schaltet man damit aus. Genau. Jetzt kommen wir zu einer etwas komplexeren Geschichte. Das ist das sogenannte... Ihr seht jetzt, hier steht vorn, in der Abkürzung steht HPKP, aber offiziell heißt der Header Public Key Pinning Extension for HTTP. Nachher bei dem HSTS heißt es dann HTTP Security und so weiter. Also macht immer Spaß. Weil jeder dieser Header hat zum Teil auch ein eigenes AFC und dann macht dann jeder immer alles anders. Einfach damit wir alle mehr Spaß haben, wenn man solche Sachen benutzen wollen. Warum gibt es jetzt diese Public Key Pinning Geschichte im User Agent? Irgendwie ist das mit der Public Key Infrastructure auch so ein... Na ja, die Idee ist jetzt auch nicht wahnsinnig neu. Dieser ganze Standard ist furchtbar alt und da hängen halt doch eine ganze Menge Probleme drin, die auch vor allem in den letzten Jahren sehr... Na ja, hart aufgeschlagen sind. Weil diese ganze PKI Geschichte basiert darauf, dass es irgendwie so ein Vertrauensanker gibt. Den hat der Browser hart eingebaut, das sind diese ganzen CAs, denen er einfach so vertraut. Das ist die Grundlage von diesem ganzen System, von der ganzen Kryptografie, die da drunter liegt. Und wenn jetzt dieser Vertrauensanker halt irgendwas macht, was uns nicht in den Kram passt, zum Beispiel, dass eine zweite CA auch ein Zertifikat für meine Webseite ausstellt und der Browser vertraut er, dann könnte einen Angreifer sein. Es wurde ja genutzt, solche Möglichkeiten genau um dann sich in Sessionszecken und so, weil ich merke das als Susanne, ich gehe auf die Seite, die sieht aus wie immer, das Zertifikat passt, aber ich bin ganz woanders und ich habe keine Chance das zu sehen. Und dieses Public Keypinning ist genau eine Option um also ich als Betreiber von so einer Webseite aus dem Server, ich kann jetzt dem Useragen sagen, welchen öffentlichen Schlüsselen vertraue ich eigentlich. Das macht genau dieser Header. Also wirklich der Schlüssel und nicht die Zertifikate, das ist ein Hash über den Public Key. Und der Useragen guckt danach, wenn er diesen Hash findet in diesem Header, guckt er alle Keys an von der Chain bis hoch zur Wurzel und wenn einer matcht, dann passt es, macht er weiter und wenn nicht, dann zeigt er die Seite nicht mehr an. Das sieht dann zum Beispiel so aus. Es muss immer mindestens zwei solcher Pins geben. Warum ist das so? Es kann ja sein, dass irgendwas, wenn das jetzt der aktive Public Key für das Zertifikat auf der Seite liegt, das läuft aus. Das gibt irgendein Problem, weil der Private Key irgendwo hingekommen ist, wo er nicht hin sollte. Oder es gab ein oben SSL Problem und man konnte den Private Key Remote auslesen. Deshalb wird in dem Fall muss ich das Zertifikat invalidieren und ein neues ausstellen. Jetzt hat sich der Browser gemerkt, du darfst nur mit diesem Schlüssel hier hinkommen. Deswegen hat man immer so ein Fallback Key da drin. Der ist lebensnotwendig, wenn man damit anfängt. Es hängt noch ein bisschen mit dem Max-Age zusammen, was man mitschickt. Wenn man mit diesem zweiten Pin dieses Keypa, das hat man schon irgendwo im Schrank liegen und dann nimmt man das und holt sich ein neues Zertifikat und dann ist das aber trotzdem validiert. Man kann aber, wie gesagt, die Keys, das kann in der kompletten Kette sein, bis hoch zur CA, ich kann auch sagen, ich nehme das Route CA, den Public Key und den Hash. Davon vertraue ich halt immer dieser CA, das würde beziehungsweise der User Agent, also der Browser, dann allen Zertifikaten für meine Seite von dieser CA vertrauen, aber nicht von allen anderen. Darüber kann ich das also steuern. Wem vertraue ich als Betreiber dieser Webseite? Wer darf Zertifikate oder Schlüsse für mich in Umlauf bringen oder signieren? Das kann ich darüber sehr genau steuern. Weil die Browser, wenn man da in diesen weiß ich nicht, ein paar Hundert CAs drin, den vertraut ihr einfach allen so. Das ist aber die Realität. Und jetzt ist man zumindest als Webseitenbetreiber in der Lage, diese Menge an impliziten Vertrauen wieder einzuschränken auf Dinge, wo man sagt, okay, ist jetzt noch Let's Encrypt oder wer auch immer. Oder meine eigene PKI, weil ich das nur intern benutze und dann steht der Useragent, also der Browser sicher, dass auch kein KIE da benutzt wird, der nicht aus dieser vertrauenswürdigen Gruppe stammt. Also man kann ja auch, Minimum sind zwei Hashes, aber man kann da auch deutlich mehr reinmachen. Ihr seht, hier gibt es auch wieder so ein Reporting, das ist jetzt auch mit Report-Uri. Da kann man also eine beliebige Domain angeben und da schickt der Browser dann Informationen hin. Wenn er das validiert oder wenn Fehler auftreten. Dann gibt es hier auch ein Max-Age. Das ist dafür da, diese Pins merkt sich der Useragent so lange. Das sind jetzt 10.000 Sekunden. Das heißt, wenn ich heute aufs Set gehe und morgen wieder, dann hätte er die Pins vergessen und dann könnte ich auch mit einem anderen KIE, würde er das wieder validieren. Er würde also diesen Check nicht mehr machen. Das kann halt so ein bisschen rumspielen. Da gibt es verschiedene Ansichten. Das eine habe ich auch schon mal erzählt, das nennt sich TOFU, das ist jetzt nicht Text oben und Fullquote unten, sondern jetzt habe ich vergessen, was das Dekonym ist. Das ist halt, wenn ich das erste Mal die Seite besuche, schickt er mir halt diese Pins mit und dann merke ich mir, die für eine bestimmte Dauer. In dem Fall wäre das quasi so eine Art, solange ich da auf der Seite bin, also für die Dauer der Session, wenn ich alle 10.000 Sekunden mal klicke, dann kann mir in der Zwischenzeit keiner ein anderes Zertifikat unterjubeln. Weil ein Teil der Angriffe, die ja tatsächlich passiert sind, beruht ja darauf, dass man vielleicht schon im ersten Schritt auf der echten Seite ist und danach erst die Session gekappert wird und man woanders hin umgeleitet wird aber nur während der Session. Wenn man den Wert größer macht, muss man dann halt aufpassen, wenn jetzt so wie viele das jetzt nutzen, letztendlich Krypt benutzt, dann läuft das Zertifikat ja spätestens alle 3 Monate aus und wenn ich hier nicht genug Hashes vorretig habe, dann habe ich quasi so ein Self-DOS, weil wenn der Browser, ich habe dann mein neues Zertifikat eingespielt, dann ist das alles super, aber leider kennt der Useragent von eurem letzten Besuch den neuen Hashes nicht, weil das ein neuer Key ist und dann kommt ihr nicht mehr auf die Seite oder die Leute, die eigentlich dahin wollen, kommen nicht mehr auf eure Seite und die Browser, da gibt es auch keine Exception mehr, ich zeig das gleich mal mit dem anderen Herder, mit dem HSTS Herder. Ich kann das mal ganz kurz schon mal zeigen, wie das aussieht, da kommen wir gleich hin. Wir gucken noch ein paar Sachen an heute, genau. Also wenn jetzt hier so ein HTTPS-Fehler auftritt, ja, dann sagt ihr, da stimmt irgendwas nicht, in dem Fall ist jetzt der Name nicht richtig, aber es wäre auch mit dem Kinn, dann gibt es hier diesen At-Wants-Button und dann kann man hier drauf sehen, ja, ich weiß schon, was ich mache, lasst mich mal dahin. Wenn ihr jetzt diesen Herder benutzt, dann gibt es den Button da unten nicht mehr. Das heißt, ihr kommt da nicht mehr hin. Es ist wirklich, ich zeig das nachher gleich, wie das funktioniert und ja, das ist hier zum Beispiel auch ein letztes Encrypt-Zertifikat, aber da ist halt in dem San nicht diese Domain drin, das zeigt aber auch auf den Server, aber das ist halt, um das mal zu demonstrieren jetzt kann ich da halt draufklicken, da ist jetzt nichts drauf und vor allem habe ich jetzt kein Internet, aber hier geht das, jetzt nehmen wir mal das Open, weil das vorhin mit dem anderen nicht ging, zack. Ich habe da kein Auto-Connect drauf, genau. So, jetzt lässt er mich dann irgendwann vielleicht dahin, weil ich sage, ja, mach mal, ich weiß, ich weiß schon. Und das ist nämlich was, was viele Leute, nee, okay, geht jetzt hier nicht, aber um das halt zu demonstrieren, mal gucken wir mal, ich habe das auf mir gesehen, also ich kann das umgehen und wenn ihr so ein Header benutzt, dann könnt ihr das nicht mehr umgehen. Dann sagt er, hier ist was kaputt und du kommst da nicht hin und dann ist Ende Gelände und man da nicht hin. Also das ist, auch bei dem HSTS ist das genauso, der macht dann richtiges Enforcement, wenn man diese Header benutzt und da kommt ja auch nicht mehr raus. Also der Standard-User eurer Webseite kommt da nicht mehr raus ohne fremde Hilfe. Ich zeige euch, wie man das machen kann, wenn das nur dynamisch übermittelt ist. Im Chrome gibt es da Optionen, da kann man sich das angucken, das ist gerade für Header von Vansinti, das zeige ich gleich noch, aber dass dieser Header verändert das Verhalten des Browsers im Fehlerfall, das ist glaube ich vielen Leuten nicht bewusst. Genau, kommen wir mal zum HSTS. Was macht der jetzt? Der stellt sicher, wenn man eine Seite hat, die man per HTTPS betreibt und möchte, dass die Leute da nur noch umgehen, dann kann man das jetzt auch sagen, lieber User Agent, wenn du das nächste Mal kommst, das ist mir egal, ob der da HTTPS hinschreibt oder gar nichts, nimm einfach den sicheren Kanal und alles ist gut. Und dieser Header macht genau das gleiche, also der verändert auch das Fehlerverhalten des Browsers. Ach so, da kommt jetzt ganz viel, die Folie ist kaputt, aber das macht nichts. Die Folie hat den falschen Header. Genau, die Folie hat den falschen Header. Das kennt ihr auch schon. Weißt du in dem anderen Vortrag die Frage gab, wofür braucht man noch HTTPS Seiten? Das ist jetzt eine Google-Seite, Google macht ja alles per HTTPS, wie ihr seht, das ist nicht HTTPS, das ist HTTPS und das ist auch noch die PKI-Seite, wie kommt das? Das ist eigentlich relativ trivial, weil alles, was ich hier runterladen kann, kriptografisch gesichert. Eine CAL, einen OCSP Response und so weiter ist immer kriptografisch signiert von der CAL. Ich muss also den Kanal nicht nochmal sichern, weil das ist schon gesichert, die Daten, die ich übertrage. Und vor allem macht man solche Domains auch immer gezielt per HTTPS verfügbar, weil wenn man jetzt zum Beispiel OCSP oder andere Sachen aktiv hat und der sagt, lieber Browser, wenn du das nicht checkst, dann darfst du nicht zu dieser Domain und wenn wir uns jetzt vorstellen, wir sind auf einer bestimmten Webseite und der Browser versucht jetzt das OCSP abzufragen, ob das Certificat noch gültig ist oder die CAL runterzuladen und der kommt auf eine HTTPS Domain, wo das Certificat abgelaufen ist, dann sind wir in der Endlosschleife und dann ist die Infrastruktur kaputt und deswegen gibt es bestimmte Teile, gerade was PKI angeht, also das ist auch nicht so trivial, wie es immer aussieht, die man nicht per HTTPS haben möchte, weil man sonst in Situationen geraten kann, aus denen man nicht so ohne weiteres wieder hinauskommt. Weil wenn ich mein HTTPS-Zertifikat von der einen Domain validieren möchte und zufällig das P-Domain-Zertifikat abgelaufen ist, aus was wir im Grund auch immer, dann bricht das Ganze. Deswegen gibt es zum Beispiel hier auch bei Google Domains, die nicht per HTTPS, sondern per HTTP ausgeliefert werden. Und wenn wir jetzt in das Certificat reinschauen, dann sehen wir auch, dass diese ganzen relevanten URLs, also zum Beispiel der CAL Distribution Point, der ist auch absichtlich per HTTP da drin und nicht per HTTPS, um genau das beschriebene Problem zu vermeiden, weil die CAL an sich ist ja schon kryptografisch gesichert, weil die ist signiert von der CA. Ich muss die nicht nochmal behindertes Transport sichern, da ändert sich nichts dran, da kann nichts passieren. Und die Informationen, die drinstehen, die sind öffentlich. Aber manche machen dann halt wirklich alles und dann das weiß man jetzt noch nicht. Es laufen immer mal Zertifikate aus, das hatten wir bei Java, das haben alle schon hingekriegt. Und wenn ich hier das dann noch, dann kann das ja schmerzhaft und leidvoll werden, das wieder aufzuräumen. Genau, das muss so kleiner Ausflug warum man vielleicht doch nicht alles über HTTPS ausliefern möchte. Genau. Was gibt es jetzt hier noch zu beachten? Genau. Also ich habe ja eben schon mal gezeigt, wenn das mit dem Internet noch irgendwie funktioniert. Dann probiere ich den mal. Da muss man sich auch nicht extra anmelden. Genau. Ach Quatsch, ja. Ach, diese blöden Buttons. Mal sehen, ob das besser geht. Das sieht auch nicht viel schicker aus. Ach doch, jetzt geht es. Genau. Dann können wir noch mal zu der anderen Seite gehen. Weil bei dem HTTPS haben wir auch noch, genau, da kommen wir gleich hin. Wo war denn jetzt meine Domäne hier? Ne, das ist was anderes. So, das ist ja noch ein HTTPS von Dranclin. Der geht ja jetzt leicht hin, weil ich ihm das ja vorhin erlaubt habe. Genau. Also ich habe ja gesagt, wow, das ist mir egal. Geht da mal hin, das passt schon. Jetzt gibt es im Chrome eine schöne URL. Da ist sie. NetInternet. Da gibt es auch noch ein paar andere Sachen. Da gehe ich jetzt aber nicht weiter darauf ein, hatte ich gesagt. Da kann man sich alle möglichen Krämpel intern angucken. Warum ist die wichtig? Die ist wichtig, wenn man damit rumexperimentiert, weil ihr seht hier schon, man kann hier irgendwie Domainzen zufügen und sagen, du hast jetzt hier STS und PKP. Und ich kann hier auch Fingerprinzen übergehen. Also ich kann den Browser das direkt setzen und dann merkt er sich das. Ich kann das löschen und ich kann auch abfragen, ob er dafür schon irgendwas hat. Wenn ich jetzt hier abfrage, dann sagt er wahrscheinlich not found. Genau, jetzt kann ich hier sagen, zack, ich will da jetzt aber mal was haben. Ich tue jetzt mal so, als ob die Seite ist. Dann kriegt man hier unten zwei Rubriken. Auf die obere gehe ich gleich noch ein. Dann ist es nämlich hard coded im Browser und dann tut es richtig weh, wenn ihr eure Prozesse und Infrastruktur nicht im Griff habt. Und jetzt wurde der Header halt dynamisch gesetzt. Ich habe den jetzt einfach hier eingetragen, aber üblicherweise schickt den der Server mit und dann steht hier unten bei Dynamic drin. Ja, okay, so ist das jetzt. Jetzt gehen wir mal wieder auf die Seite und dann sage ich jetzt, das ist jetzt eigentlich nicht mehr erlaubt. Ah, verdammt. So, dann machen wir einfach eine neue. So, wenn wir da jetzt wieder hingehen, eigentlich muss ich jetzt nicht mehr HTTPS tippen. Der hat sich jetzt gemerkt, dass er da immer per HTTPS hingehen soll. In dem Fall, weil ich jetzt eine exception schon drin habe. Warum geht das jetzt? Also, muss ich gleich nochmal gucken. Ich habe es ja jetzt nur so halbrichtig gesetzt und nicht tatsächlich vom Server übertragen. Aber ich habe zumindest gesehen, er hat automatisch das Protokoll gewechselt. Ich habe da ja gar nicht HTTPS hingeschrieben. Und jetzt muss ich nochmal gucken. Eigentlich hatte er das jetzt hier drin stehen. Er hat auch automatisch geschickt. Darauf bin ich noch nicht eingegangen. Auch beim Public Keypinning header. Man kann auch immer sagen, für meine Hauptdomain, wie jetzt in dem Fall, der Linie.de, das gilt auch für alles Hubdomains. Das heißt, www.abc.abc.abc. der Linie.de und so weiter, die würden dann alle nur noch diese Public Keys akzeptieren und es auch nur noch per HTTPS aufrufen werden. Das heißt, dieses Fleck includes Hubdomains. Muss man ein bisschen mit Vorsicht behandeln. Vor allem, wenn man eine externe Seite hat, aber auch interne Domains nutzt, die quasi Subdomains von dieser Domain sind. Wenn dieses Fleck gesetzt ist, dann kann es passieren, dass der Browser da gemeine Dinge tut. Weil er dann sagt, dass er nicht so vorgesehen. Jetzt muss ich nur noch mal gucken, warum der wahrscheinlich die andere noch offen hat. Wo ist jetzt dieser andere Tab? Aber mal weiter im Text. Was man noch machen kann, man kann sieht das hier, da steht jetzt irgendwas preloaded, weil ich habe ja immer noch diesen First Contact das First Contact Problem. Wenn ich vorher noch nie auf dieser Web Seite war, dann weiß ich ja gar nicht, vor allem weiß der User Agent nicht, dass die Seite eigentlich gar nicht per HTTPS, sondern nur per HTTPS aufgerufen werden möchte, dann gehe ich dahin, dann macht da den redirect. Das ist die Stelle, wo man angreifbar ist. Wenn man irgendwo im Internetcafe im offenen WLAN sitzt, dann kann ihr hier mitlesen. Ich hänge auf dem falschen Proxy und der macht dann lustige Sachen auf meiner HTTPS Seite, sondern auf einen anderen. Deswegen gibt es hier die Option hier kann man jetzt eine Domain eingeben und sagen, ja, gucken wir, ob der Header da ist und ich möchte gerne, hier stehen ganz viele Details dazu, wie das funktioniert. Ich möchte da gerne jetzt hier nicht nur dynamisch, das heißt, ich schick das mit, sondern lieber Browser, ich sag dir, ich übermittele das da dieser Webseite. Das kommt dann ins Chromium-Projekt. Das dauert ungefähr je nachdem, wie oft wir es checken, ein bis zwei Monate. Dann bubbelt das von Dev über Beta in den finalen Release vom Browser und dann ist das im Source Code vom Browser hinterlegt. Das sieht dann so aus. Hier ist die andere, die mal zu sehen, ob es dann geht. Da kommen wir gleich zu. Genau. Das ist jetzt die JSON-Variante. Das gibt es auch als C++-File. Ihr seht, das ist hier wirklich im Source Tree vom Chromium drin. Das hat dann der Chrom auch drin. Hier steht jetzt am Anfang ganz viel Google-Zeug drin, weil die machen das ja. Ihr seht auch, man kann ja auch diese PKP-Header fest verdrahten und dann hat die unten bei Dynamis drin. Ich habe jetzt keinen mitgeschickt. Oder die tauchen dann hier auf mc zum Beispiel google.com eingeben. Dann sehen wir hier, okay, Subdomains is true, die PKI haben sie irgendwie exklu, die können das halt. Für uns ist dann wieder schwieriger. Und hier seht ihr auch, hier sind auch Hashes hinterlegt. Das heißt, das ist extrem schwierig, außer man tauscht den Code vom Browser aus. Es ist wirklich hard coded und es gibt auch viele Informationen drin. Und so sehen die halt ungefähr aus. Also, es sind jetzt die ganzen Google- Sachen, die haben noch ganz viele Keys drin. Genau. Gehen wir mal weiter runter. Hier sind jetzt so alle möglichen anderen Domain-Namen. Da kann man sich wirklich auf diese Seite eintragen. Voraussetzung ist halt, dass dieser HSTS-Header mitgeschickt wird, wenn wir einen da eintragen, das wäre doof. Und auf einmal geht die Seite nicht mehr, weil die wird gar nicht über HTTPS ausgeliefert, sondern über HTTPS. Und es ist im Moment auch so, dass man den include Subdomains, der muss auch auf true stehen und mitgeschickt werden. Ansonsten kann man nicht auf diese Liste drauf. Wenn ich da jetzt mal die Domain hier eingebe, dann sagt er, nee, das geht aber nicht, weil irgendwie kommt er genau. Beziehungsweise hier ist sogar die Zertifikatkette kaputt, super. Ne, weil das haben wir ja eben schon gesehen, der Name passt nicht, der im Zertifikat steht. Ja, also der macht hier ein paar Hintergrundchecks. Wenn wir jetzt hier google.com hinschreiben, dann wird er sagen, ja, die scann ich schon. Ah, nee. Das ist cool, oder? Aber ihr habt ja gesehen, es ist schon im Sosco drin. Das ist auch drin. Ihr checkt da das und ihr seht doch, das ist schon in der Preload Liste drin. Und wenn das nicht drin ist, dann kann man sagen, ich will da drauf. Das heißt, wenn ihr auch diesen hstsher damit schickt und nicht auf die Preload Liste wollt, kann er sich da jemand eintragen. Und ihr könnt nichts dagegen tun. Nee, ihr müsst auf jeden Fall auch den, hier unten steht das nochmal. Das muss auf jeden Fall spezifiziert sein im Header, den der Server ausliefert. Und nur genau dann, wenn, ah, genau, ich hab eins vergessen. Es gibt noch ein Fleck. Preload muss man auch noch hinschreiben. Also der Server kann schon ein bisschen entscheiden, ob man da draufkommt oder nicht. Also den deny of service gibt es nicht mehr. Es gibt noch ein Fleck. Das muss ich mitschicken. Wenn ich also auf die Preload Liste möchte, dann muss ich bei dem hstsher da auch noch das Fleck Preload mitschicken. Das wird hier validiert. Und dann kann ich auf diese Liste drauf. Genau. Jetzt probieren wir nochmal. Jetzt hab ich ja alle Darlini seitens Zuge mal. Ob er mich da jetzt hinnässt. Er ist jetzt noch in Memory wahrscheinlich, muss ich ihn einmal neu starten, damit er, mit das jetzt greift. Wir können das aber mal kurz mit dem anderen machen, weil bevor ich jetzt nämlich gleich das Update mache. So, genau. Wenn ich das jetzt abfrage, dann sieht man, es gibt kein Header. Wenn ich jetzt auf die Seite gehe, der macht kein redirect, deswegen muss er einmal mit HTTPS aufrufen. Dann kriegt er den Header. Jetzt habe ich den nicht von Hand gesetzt. Wenn ich das jetzt wieder abfrage, ist der Dynamisch drin. Und wenn ich jetzt ein Chrome-Updater besitze, hier ist eine neue Version da, nehme ich die 51. Und in der 51 Public Version ist jetzt diese Domain mit drin. Wenn ich jetzt hier auf... Ach so, ich habe das vorhin abgebrochen. Genau, wenn ich das jetzt ausführe, warten wir mal kurz, dann wird auch bei Static die Domain auftauchen. Das ist die 51. Man kann das schön mitverfolgen. Man kann sich auf den Dev-Channel oder den Beta-Channel subscriben. Dann sieht man dann schon, das war auch schon jetzt die ganze Zeit in der 51 Beta drin. Der wurde jetzt vor ein paar Tagen released. Man sollte dann also auch immer den Release-Kalender von Chrome auch überhalten. Dann weiß man, wann das hart greift. Wenn wir jetzt hier wieder hingehen und das abfragen, dann ist der Dynamisch da drin. Das heißt, ich kann das jetzt hier oben zwar löschen, dann fällt zwar der Dynamische hier unten, der Dynamische hat da raus, aber der Statische bleibt drin. Und wenn ich das jetzt hier auffragen, dann sieht man, das ist jetzt weg. Aber Statisch ist es noch da, das heißt, er enforced das jetzt immer noch. Auch wenn ich den Dynamischen... Jetzt hat er den Dynamischen natürlich auch wieder. Oder so, und man kommt da nicht wieder raus. Jetzt haben wir den Browser neu gestartet. Jetzt kann man das hier auch mal testen. Jetzt dürfte... Aha, warum macht er das noch? Der hat diese Exception irgendwie gespeichert, die ich eben vorhin gegeben habe. Wenn man jetzt... Ich kann mal WWW probieren. Was? Und jetzt sieht da hier, es gibt kein Button mehr. HSTS, das verändert das Fehlerverhalten vom Browser. Er kommt nicht mehr auf diese Seite drauf, wenn ihr mit HPKP und HSTS-Header benutzt, dann nehmen die das alle ernst und diese HSTS-Liste, oder wenn er den Header mit schickt, also es muss gar nicht statisch sein. Das reicht auch, wenn das... Das war jetzt ein rein dynamischer Header, den ich gesetzt habe. Wenn der sich das einmal gemerkt hat und der Timeout lang genug ist und ihr habt irgendein Fehler in eurem neuen Zertifikat oder im Protokoll oder irgendwas passt nicht mehr, dann kommen eure Website-Besucher nicht mehr auf diese Webseite drauf. Und der normale Nutzer, der wird nicht damit dieser Internet URL und was soll ich da löschen? Das funktioniert nicht, ja. Also da muss man wirklich sicherstellen, dass das Zeug dann auch funktioniert. Weil man hat dann hier zwar noch Advanced, aber hier kriegt man nur noch viel Text und eben keine Handlungsoptionen mehr. Das ist Ende Feierabend. Das ist im Firefox so, das ist im Edge und im aktuellen IE auch so. Also ihr kommt da nicht wieder raus. Was eine schöne Seite ist um zu schauen, Anni, das ist CSP. Ich wollte eigentlich auf die... Ja, ich kann hier jetzt auch einfach HSTS eingeben. Und dann seht ihr, wer das unterstützt, seit wann das unterstützt wird. Das ist eine schöne Seite, keiner Use.com kann ich nur empfehlen. Da kann man auch alle möglichen CSS-Features usw. abfragen. Man kriegt hier... Man kann auch gucken, wie die Nutzung der Browserversion ist. Das ist ein super geiles Tool. Und ihr seht halt vor allem, ab wann das Feature von ist. Also wenn ich jetzt für den User wehle, nutze den IE9. Weil der benutzt diesen Header nicht. Das heißt, der kommt auf die Seite. Aber die modernen, alle aktuellen Versionen bis auf Opera Mini 8 oder naja, bei Android ist das immer so eine Sache, wo man drauf läuft. In dem Fall geht es. Wird es auch schon relativ lange unterstützt. Aber wenn die mit irgendwas davon kommen, dann kommen sie halt nicht mehr auf die Seite. So wie das jetzt hier in dem Beispiel ist. Und da gibt es auch keinen Ha, ich weiß schon was ich mache Button mehr, den gibt es einfach nicht mehr. Genau. Also hier kann man es registrieren. Der Nachteil von der Preload-Liste ist die funktioniert als Supercookie. Weil man über cleverere Abfragen an den User-Agent rausfinden kann, auf welchen Seiten derjenige schon mal war. Das ist wieder so ein Timing-Angriff. Das geht dabei. Also nichts kommt. Nothing is for free. Dann sind zwar die Nutzer geschützt auch beim ersten Zugriff auf die Seite, wenn sie noch nie auf der Domain waren. Aber man kann dieses, können wir mal kurz nach googeln. HSTS Supercookie so ein bisschen wie die also da gibt es schöne lange Blog-Posts wo das erklärt wird, wie das funktioniert und also wie diese genau erkennt das vielleicht von Flash und Co. Aber diese HSTS-Geschichte hat das Problem inherent auch. Hier ist beschrieben wie das funktioniert. Also auch dieses Feature kommt nicht ganz ohne Preis. Genau. Aber das ist nur für Domains, die da drauf sind weil man, also das geht nur mit Domains, die da drauf sind, wenn der User schon mal da war. Genau. Also man muss sich entscheiden. Entweder oder, weil das gibt es gerade nicht. Und ich glaube das Problem ist immer noch da, weil das ist inherent, das kann man nicht trivial lösen. Genau. Also auch HSTS Preload hat eine zweite Seite der Medaille. Genau. So ich glaube das ist erstmal alles zu HSTS. X-Frame Options nochmal was einfaches. Genau. X-Frame Options ist ein ganz einfacher Header, der einfach dieses Problem der Framebuster löst. Was ist ein Framebuster? Also Frames ist die Möglichkeit, Content einer anderen Seite auf der eigenen Seite darzustellen und manchmal möchte man nicht geframed werden aus diversen Gründen. Man kann ja auch darüber verschiedener Angriffsmodi fahren weil man kann den Content Frame ja auch unsichtbar darstellen. Dann klickt man gar nicht auf der Seite, sondern in der anderen. Und vielleicht gibt es auch noch andere Gründe weil irgendwer quasi meinen Content mit benutzt bei sich auf der Seite, wenn der Clever frame und dann möchte ich nicht geframed werden. Da gibt es alle möglichen und unmöglichen JavaScript Variationen um das zu verhindern. Das Problem mit JavaScript kann man abschalten. Ja dann rennt hat die Seite vielleicht auch nicht mehr so schön. Aber da ja der der Parent from Frame hat halt ein Haufen Control auch über den Content der geframed wird. Deswegen sind diese ganzen Frame Buster JavaScript Varianten nicht also die kann man irgendwie immer angreifen und umgehen. Und dieser Header den kann man halt nicht so einfach den kann man nicht so einfach angreifen oder umgehen weil jetzt macht es wieder die Infrastruktur also der User Agent für mich. Ich schick einfach den Header mit und sag entweder ne gar nicht dann macht er rauser das auch nicht mehr ja nur ich selber darf das und ansonsten wenn ich dann von einer anderen Origin aufgerufen werde also von einer anderen Uri dann wird meine Seite nicht mehr gerendert oder eine Option ist ich kann eine Domain angeben also nicht der Origin entspricht und die kann mich dann frame ist halt doof wenn ich das brauche und vielleicht mehr als eine brauche deswegen übliche Settings sind hier die nahe und das wird glaube ich auch nicht von allen Brousern unterstützt. Übliche Settings sind hier die nahe aus dem Origin und das ist halt deutlich effizienter. Ich habe keinen komischen JavaScript und muss da nicht auf meiner Seite rum basteln, dass die nicht geframed wird sondern der Browser stellt das sicher. Das kann man jetzt aber auch mit dem mit dem nächsten Header machen mit dem CSP Header das heißt ich brauche den XFrame Options Header gar nicht mehr ich kann das alles mit der Content Security Policy erledigen und da habe ich auch die Option mehrere Domains anzugeben das heißt hier habe ich nicht diese Einschränkung von dem Header, sondern ich kann da auch 10, 20 keine Ahnung wie viel auch immer mein Content benutzen dürfen die schreibe ich da alle rein und das funktioniert, es geht hier halt nicht genau, kommen wir zum letzten es ist auch der Komplexeste Content Security Policy da steht jetzt irgendwas mit Policy, gucken wir mal was das genau macht und wo man hier vielleicht drauf achten sollte kann nämlich auch wehtun wenn man das einfach einschaltet im Prinzip kann ich jetzt hier so Wide Listing machen also ich kann sagen von wo darf irgendwelcher Content auf meine Seite eingebunden werden jetzt ist es ja so auch wenn so ein XSS Angriff erfolgt und da erleden JavaScript von sonst wo jetzt bin ich mit diesem Header ist der Seitenbetreiber in der Lage zu sagen ja aber ich will nur JavaScript von meiner Domain und von der Domain und wenn der JavaScript irgendwo anders herkommt dann schmeiß ich ihn einfach wieder weg und führe ihn gar nicht erst aus es ist quasi Wide Listing ist auch immer der wenn man Security macht will man eigentlich immer irgendwie mit Wide Listing und genau der Ansatz wird hier auch verfolgt da steht jetzt auch noch including protocol das heißt ich kann hier sogar auch sagen ob er den Content per HTTP oder per HTTPS abholen soll das kann ich ja auch vorgeben ich kann das pro Ressource steuern das ist jetzt ich glaube das ist nicht mehr ganz vollständig es gibt inzwischen schon eine neuere Version von CSP aber ihr seht ok das hat man nicht in 2 Minuten fertig gemacht ich will ein bisschen mitbeschäftigen man kann jetzt also für die Base overwrite connect ist für xmlrequest xhttprequest und so weiter oder für webresources fontform frame also ich kann also hier frameanchester ist genau das Equivalent zum xframe das wir gerade vorher gesehen haben damit kann ich genau den gleichen Effekt erzielen aber ich kann hier zum Beispiel mehrere Quellen angeben die mich frame dürfen was bei dem anderen nicht geht Style ist für CSS, Kript ist für JavaScript Image für Bilder man hat ja vielleicht auch ein CDN irgendwo liegen dann muss ich das ja irgendwie erlauben das kann ich also auf dieser Ebene man kann auch steuern welche Plugins dürfen laufen im User Agent wenn meine Seite angestellt wird und welche nicht das heißt wenn mir jetzt jemand ein Flash unter jubeln will dann kann ich das auch sicher unterbinden hier gibt es auch wieder so eine Report UI Style habe ich doppelt drin und dann gibt es hier noch Upgrade Insecure Requests wenn man alten Liegesieh Kram an der Backe hat den man codenmäßig nicht aktualisiert kriegt und da überall noch HTTP Doppelpunkt Hardcode drin steht so was sollte man halt nicht machen aber wird halt oft gemacht dann macht der Browser das so requested alles per HTTPS oder ich habe halt den HTS und so weiter dann kann man das umgehen es gibt auch ein Default Source und das heißt Default Source weiß alle Typen hier oben mit Source hinten dran umfasst das heißt wenn ich sagen will laht nur JavaScript Bilder und so weiter von meiner Domain dann mache ich Default Source Same Origin also wie es genau ist, sehen wir gleich Safe ist es glaube ich aber das gilt dann nicht für Base-Ure-Form-Action Frame-Ancheses, Plug-in-Types, Report-Ureon-Sendbox alles was kein Source hinten dran hat das heißt wenn ich das nicht setze ist es von überall erlaubt die Default Policy wenn ich keine Mitschicke ist so wie bisher auch das ist quasi rückwärtskompatibel der Browser lädt das ja jetzt auch von überall bis auf ein paar Ausnahmen ich kann jetzt nicht überall Request hinten machen aber jetzt kann ich es genau steuern und das heißt wenn ich nicht geframpt werden möchte dann muss ich das trotzdem separat angeben genau wie geht man mit CSP vor vorsichtig ja weil wenn man diesen header mitschickt und da ein Fehler reinschreibt dann sagt der Render der User-Agent vielleicht die Seite nicht mehr weil der JavaScript nicht mehr lädt weil das vielleicht auf einer Subdomain liegt dumm gelaufen deswegen kann man jetzt pro Ressource die wir oben gesehen haben kann man sagen ich mache keine Request von Daten irgendwo hin gar nicht ausschalten Self, alles wo ich auch herkomme Same Origin Policy und dann gibt es hier noch zwei Dinge die heißen schon extra Unsafe so nach dem Motto know what you do Also Unsafe Inline und Unsafe Evil was bedeutet das jetzt ja ich die schon hinterher hab es schon gelesen aber viele Seiten haben Inline JavaScript und CSS und dann kann ich halt hier sagen ja ok von mir darfst du das aber das bedeutet auch wenn ich ein XSS Problem hab hab ich das halt immer noch wenn ich Unsafe Inline hinschreibe dann sagt er alles was an Inline Code da ist führe ich aus viel Spaß und Unsafe Evil ist genau das was da steht das heißt die Evil Funktion wird erlaubt und dann hat mein Angreifer genauso viel Spaß wie vorher das heißt dann mach ich dann CSPer da rein und fühle mich toll aber in der Realität deswegen heißen die Attribute auch extra Unsafe wenn du das machst dann machst du es kaputt also seid ihr bewusst was du tust man kann die auch weglassen was macht man dann dann gibt's zwei Möglichkeiten die tun aber richtig richtig weh aber es gibt die Option nicht Unsafe Inline und Unsafe Evil hinzuschreiben man kann jetzt an jedem Script Tag das im Source Code vorkommt nanz dran hängen also ein Attribut das nanz heißt und da ist ein hash dran und den hash schreib ich auch in den header nanz und das macht für jedes Inline Attribut für jedes Inline CSS und jedes Inline JavaScript und dann kann der Browser das validieren die zweite Variante sind hashes das heißt ich hasche die JavaScript jeden Script Blog den ich habe und schreibe den hash rein und dann kann das wirklich validieren macht so viel Arbeit also die Message ist die ist sowieso schon länger man will kein Inline JavaScript man will kein Inline CSS benutzen man hat ein Source Pfeil für das und da steht das JavaScript drin genauso fürs CSS und alles andere ist halt per se unsicher weil jeder XSS Angriff funktioniert so man kann sich erst mal eine schöne Policy bauen und die funktioniert auch und alles ist toll aber letztendlich bin ich genauso weit wie vorher ich sage es gibt ja ein paar Dinge die das schon mal einschränken ich kann die Quellen einschränken wo der Code herkommt und ich kann halt auch Reporting anmachen aber deswegen es gibt halt diesen genau wie wir es hier sehen das ist das aber deswegen es gibt halt diesen genau wie bei dem Pinning bevor ich mir ins Knie schieße logge ich erstmal ein bisschen und guck mal wo der Browser überall meckert und räumt auf oder ich mache halt eine Policy die funktioniert also deswegen durchaus mit einer offenen Policy anfangen und die langsam dann zumachen deswegen gibt es auch die 2 Attribute aber man sollte dann nicht aufhören sondern weitermachen und gucken dass man das Zeug richtig zubekommt und eine sehr schöne Einführung gibt es hier das ist ein plant ein bisschen Zeit ein das ist lesend genau es gibt auch ich habe das schon mal kurz gesehen im Browser es gibt auch ein paar Tools die einen unterstützen ich sehe eine Frage gleich die einen dabei unterstützen so eine Policy zu erstellen also die Anmerkungen für den Stream es gibt auch CMS-Systeme die mit Inline, JavaScript und CSS nicht funktionieren also die ohne nicht funktionieren die einfach damit arbeiten ja natürlich deswegen gibt es ja auch die Attribute das ist einfach die Realität in der wir uns befinden das ist einfach viele von solchen Sachen gibt aber das bedeutet natürlich wenn man neuen Code schreibt wenn man neue Systeme entwickelt sollte man darauf verzichten und das quasi in Anführungszeichen richtig machen das heißt nicht Inline ist ja auch schwer zu pflegen ich hatte ja auch einen anderen Vortrag wo es um Permissions und so was geht wenn ich das im Code an jeder Stelle mache das kriege ich halt nie gemanagt wenn ich da was ändern muss das ist tödlich zu Inlines das heißt es gibt ja viele Permions die dann immer direkt Parameter hineinschreiten wer nicht dann auch nicht funktionieren will das weiß ich nicht muss er ausprobieren deswegen gibt es das Reporting man kann das einmal in der Konsole sehen im Browser direkt oder man gibt diese Report UI an und dann kriegt man das dort geschickt ich zeige auch gleich noch ein Tool da muss man sich überlegen ob man das will wie sieht jetzt so ein Ding aus also das ist hier so eine ganz einfache Report Source Self alles von mir cool hier ist jetzt schon ein bisschen komplexer hier sieht man, es gibt einmal okay alles von mir, Bilder von überall Objekte also Flash und so was oder JSP oder solche Geschichten also hier sind jetzt 2 3 Domains sind jetzt hier angegeben die sind mit Space getrennt und es ist auch so das halte ich jetzt nicht auf dem Extra Slide wenn man den Object Source 2 mal hinschreibt wird nur der erste ausgewertet also man muss das in einer Anweisung machen die zweite wird verworfen und dann hier noch von irgendeinem CDN also hier stehen jetzt mehr Sachen drin und dann gibt es hier noch Script Source Extra von der weiteren URL aber die darf dann Script Files dürfen dann nur von dort kommen ja ne, ich glaube nur Sternen aber das weiß ich jetzt auch nicht wir können gleich mal auf dem Tool schauen was ein dabei unterstützt so was zu schreiben da steht auch noch mal eine Beschreibung drunter ich habe es jetzt auch noch nicht alles im Detail überall selber ausprobiert weil es braucht Zeit also so eine schnelle Policy die funktioniert kriegt man hin und die Sache nicht unbedingt sicherer wobei Self oder sowas hilft schon viel also wenn man die möglichen Quellen von Skripten einschränkt dann gibt das schon eine gute Safety hier sieht man auch so ein Beispiel oder hier ist ja das soll nur per TPS aufgerufen werden man kann ja so auch dieses Protokoll mit spezifizieren und dann sagen ja und alles was schon in der Seite ist genau, aber Inline ist dann halt blöd weil dann geht da halt trotzdem noch XSS genau Toolchain, was gibt es so an Tools genau, Header Anding, CSP ist Aviusom hüpfen wir mal ganz kurz hin ein paar Minuten müsste ich ja noch haben nee, das ist sie nicht hier ihr seht auch hier oben sind diese ganzen Dinger, da kann man mal angeben jetzt ist das immer so ein bisschen beschrieben Orself, Data, Host ich würde mal sagen es gibt nur Sternen oder nicht keine Rackax ist auch noch mal beschrieben bla, bla aber hier wird anders nur erstellt, dann kann man es runterladen oder sich rüber kopieren und man kann hier das für die einzelnen Sachen durchklicken, das sieht immer sehr ähnlich aus, weil es im Prinzip auch immer ähnlich ist, hier sind auch immer noch so ein paar Hinweise, was bedeutet das jetzt, auf was wirkt sich das aus wenn man das benutzt, also welche Domains muss ich vielleicht berücksichtigen aber deswegen ist halt das Reporting ganz essenziell am Anfang weil dann sagt einem der Browser auch wo eine Policy Violation stattfindet und wo man vielleicht was anpassen muss genau, das wurde vorhin in dem anderen Vortrag schon mal kurz gezeigt, es gibt einmal von Scott Helmy SecurityHeaders.io und dann gibt es von SSL Labs den default SSL Test auf den sich viele verlassen oder der so quasi Standard etabliert hat, von dem ist hier auch das Rating bei SecurityHeaders inspiriert mit dem A plus bis F und dann genau, das ist auch von Scott Helmy der auch die Seite betreibt hier Kamernetz, man kann also dieses Ding da bei sich falscher Browser nee, der Edge ist ja eigentlich ganz schön, oder? aber was macht das hier, hier kann man sich einen Account klicken, man kann dann hier auch slash-strahler-la machen, schickt dann immer ins slash-strahler-Grichter-Statistik denken, dass er ja das so bestimmte wenn er das da hinschickt, schickt der Browser glaube ich auch so die Referre und so was mit, dessen sollte man sich bewusst sein, sonst muss man sich halt eine eigene Infrastruktur bauen aber zum Rumprobieren ist das wahrscheinlich ein ganz, ganz guter Anfang, das liegt dann aber alles in der Cloud der hat das in seinem Blog auch schön beschrieben wie er das gebaut hat und so weiter genau und zum ersten Rumprobieren wahrscheinlich ganz hilfreich aber vielleicht will man's nicht dahin schicken sag mal so, das ist vielleicht eine vertrauenswürdigere Zeit als irgendwas mit komischen Abkürzungen da drin aber das muss jeder für sich entscheiden wo er seine Logging-Daten hinschickt von den Headern, die er da einbaut und da hat man nicht nur selber Zugriff drauf genau auf, da können wir mal ganz kurz hinschauen das liefert halt so ein Rating zurück also der wertet halt diese Header aus aber ich hoffe es ist eben klar selbst wenn ich so ein X-Frame also frame mich nicht Header über HTTP mit schicke und das über ein Proxy läuft dann ist der Header vielleicht später nicht mehr beim Browser da auch wenn ich eine Server raus geschickt habe die einzigste sichere Variante ist aber natürlich gibt es auch immer gute Gründe vielleicht doch nur HTTP zu machen also wenn man diese Header einbaut manche machen auch keinen Sinn über HTTP zu schicken wie HSTS bei A kann er manipuliert werden und B bin ich auf den falschen Protokoll und das soll man laut Standard auch nicht mit schicken aber der User-Agent sorgt dann dafür, dass das ignoriert wenn es über HTTP kommt genau, dann kriegt man hier halt auch so Ratings es ist auch auf der Seite in der FAQ beschrieben wie das Rating zustande kommt will jemand eine Domain ausprobieren oder habt ihr vorhin schon alle ausprobiert im anderen Vortrag das geht hier, was vielleicht noch ganz spannend ist er baut auch gerade an der API ich glaube die ist noch nicht fertig es gibt noch ein anderes Test-Tool von einer Firma weil das ist ja hier noch so privat vergnügen quasi von ihm wo man eine API hat auch SSL-Labs das wissen viele nicht warum auch immer also wenn man jetzt mehr eine Domain verwaltet oder irgendwie berücksichtigen muss es gibt auch eine API für den Analyzer von SSL-Labs und da kann man dann halt auch mehr Abfragen gegenfahren die Grenzimplementierung die liegt auf JitHub die ist in Go geschrieben und da kann man dann einfach seine Liste reinpacken und dann kriegt man das alles zurück kann man auch relativ leicht in eine Datenbank schreiben genau hier sitzt der Aplus Aplus kriegt man übrigens nur wenn man HSTS-Header mit schickt man kann perfekte Settings haben man kommt nicht überall hinaus Aplus gibt es ja erst mit HSTS-Header steht auch an Stelle 8 oder so in der statischen Liste wir machen das also schon länger wir können mal gucken genau ich glaube ach ja, Brauser, das hab ich ja schon gezeigt also man hat hier dieses schöne Encom zumindest, die anderen haben vielleicht auch was aber das ist ja schon mal eins wo mit man rumspielen kann und so ein bisschen sieht was da eigentlich intern passiert wo der das hinschreibt, man kann es auch wieder rauslöschen von Hand eintragen genau das macht aber, da steht zwar jetzt HSTS macht aber auch pkp mit ich zeige es nochmal kurz also da ist beides abgedeckt sowohl das Public Keeping als auch der STS-Header das ist beides auf der HSTS-Seite also nicht wundern und ansonsten gibt es ja auch noch schöne nette Insights die interessieren das ist vielleicht auch ganz spannend wenn das noch nicht sauber funktioniert kann man sich schön angucken was er da macht es gibt schon ein paar Sachen einfach mal gut hin nee oder selber schreiben oder sich irgendwo mit dranhängen ich glaube ja, bestimmt aber ich hab da jetzt auch keinen vollständigen Überblick da ist grad relativ viel Bewegung drin wie gesagt den Pinheader den gibt es noch nicht so furchtbar lange in einer offiziell implementierten Version der ist relativ jung das heißt HSTS ist schon ein bisschen älter und auch mit den Report-Uries einfach mal gucken oder was bauen das ist jetzt nicht furchtbar kompliziert aber man muss sich halt damit beschäftigen einfach also wenn man eine Seite hat die viel Traffic hat und man baut diesen Report-Ury ein dann schießt es auf der URL natürlich auch ein paar Requesten der schießt dann alle Fehler darüber die er findet da können auch ein paar Daten zusammenkommen dessen sollte man sich auch bewusst sein wenn man das tut genau ja und wenn man einfach das Nummer ausprobieren dann setzt man halt die Lebenszeit von dem Header auf klein dann vergisst der Browser die ja auch relativ schnell wieder oder man benutzt sowas wie Fiddler oder einen anderen Proxy sondern schickt es einfach nur den Browser oder man trägt es ja von Hand ein und dann kann man das ja auch ein bisschen ausprobieren was dann passiert wie sich der Browser verhält wo er die Daten hinschickt kann ja über ein Proxy abfangs muss ja gar keine echte Ury sein die existiert kann mir das ja dann irgendwo einsammeln kannst ja auch Fluggehurst schicken genau kann man also ausprobieren genau dann sind wir auch auf der anderen Seite also ihr seht das ist schon einfach Header einbauen und wirklich werden ist leider nicht ganz so muss auf ein paar Sachen achten aber es ist wenn nichts dagegen spricht aus der Anwendung die man benutzt oder selber baut sollte man die auf jeden Fall einbauen wo immer es geht und wenn immer möglich weil es einfach die Sache für den Angreifer schwieriger macht und aber nicht vergessen den Code auch selber sauber zu haben gegen Sequel Injection hilft das alles nicht also da muss man schon an den Code rein und auch XSS das sind halt nur Mitigations also Workarounds Hilfsmittel die Sachen bisschen angrafer schwerer machen aber die ursächlichen Probleme muss man trotzdem fixen oder gar nicht erst einbauen aber das hilft und es ist relativ einfach mit überschaubarem Aufwand aber man muss schon ein bisschen Aufwand reinstecken und sich ein paar Gedanken machen vorher und dann funktioniert es auch ganz gut ok, gibt es noch weitere Fragen? ja wenn man den CSP-Header falsch konfiguriert dann führt er das JavaScript ja nicht aus lädt das CSS nicht lädt die Bilder nicht die Seite sieht dann sehr wahrscheinlich anders aus als vorher deswegen halt mit Reporting anfangen oder halt mal von Hand setzen und gucken was passiert das findet man ja dann relativ schnell raus aber man sollte es nicht einfach einschalten und sich dann hinterher wundern dass es nicht mehr schön aussieht gibt es noch weitere Fragen? gut ich habe es mit dem pre-loading ausprobiert und wenn es jetzt über der anderen Ort angeht geht halt die TP nicht mehr ja, die TP geht nicht mehr das ist richtig enforced also dieser Pin-Header und der HSTS-Header verändern das Verhalten vom Browser nicht nur dass er die Abfragen anders macht sondern dass er wirklich als Fehler nimmt und da gibt es keinen Entkommen mehr sozusagen, es ist dann zu Ende, es kaputt also wenn da irgendwas wo der Bau sagt, ja das ist jetzt aber komisch ich mache jetzt nicht mehr weiter deswegen muss man durchaus ein klein wenig vorsichtig sein dabei, ansonsten ja, also HSTS ist relativ ungefährlich das ist mein Zertifikatauslauf aber dann habe ich ja fast viel User-Response, dass sie seit nicht mehr geht das kriege ich ja relativ schnell mit wenn das kaputt geht weil dann alle User nicht mehr draufkommen das gibt schnelles Feedback das merkt man aber man muss dann halt auch was tun und bis man es repariert hat solange ist es halt nicht benutzbar da muss man wirklich dafür sorgen dass die Prozesse die hinten dran stehen funktionieren um das man Eskalationsprozesse hat und so weiter, also hat gar nichts mit Code und Setup zu tun sondern man muss dann organisiert sein damit die Seite auch verfügbar ist, sonst ist sie ganz schnell offline einfach weil die Browser sie nicht mehr darstellen weil irgendwo ein Fleck nicht mehr richtig ist sich irgendwas geändert hat ja, dann gibt's kein ich weiß schon was ich tue Button, der ist weg der ist auch im Firefox weg und der ist auch im IE weg also es hilft dann nicht den Browser zu wechseln man muss dann schon auf eine alte Version wechseln die das nicht kann wenn man die noch irgendwo herkriegt ja klar die Alternativvarianten, die gehen alle aber das ist nicht deine Standard Userbase die auf deine Seite kommt sehr wahrscheinlich die kommen dann da alle nicht mehr hin weil die haben im Zweifel jetzt ein aktuellen Chrome zwei Jahre alten und die kommen dann da einfach nicht mehr hin genau noch eine Frage, ja ja, es gibt diese Bestrebungen wir haben da auch letztens auf dem Obers Stammtisch gab's einen Vortrag darüber es gibt sogar ein DNS Chain Concept um da gewisse Probleme die DNS auch hat zu lösen und ja, es gibt auch die Idee zum Beispiel um das Stammtisch im DNS zu hinterlegen mir fällt nur gerade der Name nicht ein das sind sogar auch K2er Leute die haben ja auch so ein Security-Laden oder auf jeden Fall als Deutschland die die da auch immer wenn jetzt die anderen Obers bedeutig werden, die könnten das sagen ja, ich hab immer so ein schlechtes Namensgedächtnis aber ja, gibt es Ideen ja, genau ich glaub das geht in die Richtung wie buchstabiert man das noch mal ah ja, Dekim genau, ich hab da auch schon mal nachgesucht Domenkis Identified Mail also das ist so die Mail-Ecke da hat man ja ein ähnliches Problem aber letztendlich kann man das Konzept auch auf Webseiten ausdehnen also bei Dekim geht's jetzt erstmal darum dass die Mail-Domains verifiziert sind aber letztendlich benutzen auch 126 Meshover aus Deutschland und 5 aus dem Rest der Welt also total obsolet macht keiner wirklich aber schon eine nette Idee hat auch ein paar Seiteneffekte und Probleme weil ich ja dann hänge ich wieder in der DNS-Infrastruktur die ist jetzt auch nicht unbedingt es gibt ja auch also das DNS-Hack das ist ja auch nicht alles problemfrei aber da gibt es durchaus Ideen dass auch da einfach wieder zusätzliche Attribute in DNS reinzukippen und das gleich von dort zu holen natürlich, ja, gibt es gut, dann vielen Dank fürs Zuhören und noch viel Spaß