Dear viewer, these subtitles were generated by a machine via the service Trint and therefore are (very) buggy. If you are capable, please help us to create good quality subtitles: https://c3subtitles.de/talk/1193 Thanks!
[Musik]
okay
aber nächster Tag ist und Java
actilien
native German speaker hier denn schaut
no
[Musik]
okay die Präsentation heute ist
sozusagen so ein Ding was ich mal
gemacht habe in ganz kurz ich wollte
eine Einführung geben in cositescripting
und weil ich das witziger machen wollte
habe ich natürlich gleich alles
umgeworfen mein normales folienformat
komplett ersetzt und habe das mal
versucht als eine Demo zu machen und was
muss man da machen man muss das ganze
Ding halt dummerweise in dieser
javascriptache irgendwie äh in den
Browser bringen das heißt das weil ihr
seid im Hintergrund seht ist tatsächlich
mein Firefox und dann könnt ihr auf
genau die Art angreifen die ich jetzt
gleich demonstrieren werde werde ich die
Demo entwickelt habe habe ich mich
tatsächlich selber ein zwei mal gekostet
seit skripted das Zeug scheint also
tatsächlich gefährlich zu sein der Sinn
der Präsentation ist tatsächlich eine
ganz grundlegende Einführung zu geben
und wenn irgendjemand das noch nie
gesehen hat hat er vielleicht diesen
baueffekt das wäre total cool wenn nicht
dann nicht äh und am Ende gebe ich noch
mal zwei drei Folien zu wenn ihr
unbedingt eine Web-Applikation bauen
wollt also eine Webseite oder sowas in
der Art mit einer Datenbank hinten dran
oder irgendwas in der Art dann gibt es
ein oder zwei Leute die man im
Hinterkopf haben solltet während man das
programmiert an der Universität hatte
ich tatsächlich eine Folie die hatte
dann diese zwei Worte so oft auf dieser
Folie wie es ging damit man sich das
irgendwie merken kann die Leute sind
heute nicht anwesend die das haben
können die das gelesen haben aber ich
denke die hätten die zwei Worte immer
noch im Kopf gut
wir haben keine Zeit für Fragen bzw
Fragen machen wir dann danach in der
Lounge da stehe ich noch ein bisschen
rum da könnte dann einfach vorbeikommen
ansonsten wenn ihr irgendwas absolut
nicht versteht brüllt einfach rein das
ist ja die professionellste Bühne auf
der ich je war die Tontechniker kriegen
das hin
gut warum mache ich das das habe ich
eben gerade im Prinzip schon erklärt ich
muss dahin Vortrag halten der sollte
irgendwie eine Einführung sein
und dann habe ich halt meine slides over
Engine und ich wollte unbedingt mal was
mit 3D machen und dachte ich weiß jetzt
für Croissant da brauche ich die dritte
Dimension so richtig in die Tiefe wenn
jemand schlecht wird einfach die Augen
schließen ich rede weiter
ansonsten ist kribbling unglaublich
einfach zu vermeidende Schwachstelle und
wie alle anderen halt auch
und immer noch seit in auf der 2017 da
Rangliste der Open web application
security jetzt habe ich vergessen das
projects genau auf Platz drei immer noch
relativ häufig und den String den wir
gleich haben könnt ihr einfach mal in
jede Suche in jedes Suchfeld reinwerfen
vielleicht kommt ja was raus ne kann man
einfach mal mit rumspielen das
funktioniert dann
gut
können wir loslegen
ja
gut danke danke für dieses unglaubliche
Feedback
gut das erste was ich mal kurz erklären
muss damit wir alle auf derselben Seite
ist was ist dieses komische WWW ich
werde gleich den Begriff Server
verwenden also müssen wir mal kurz
rausfinden was so ein Server ist den
habe ich mal da unten hingeschrieben der
Webserver ist halt das was uns die
Webseite liefert das muss man sich so
ein bisschen vorstellen wie in einem
Restaurant ich sitze also hier in meinem
Restaurant und ich will was haben das
kommt aus der Küche die ist dahinten das
heißt mein Server ist sowas wie der Koch
dann bestelle ich das über ein Protokoll
das ist üblicherweise im WWW also das
definierende Protokoll heißt HTTP das
ist dann in diesem Fall der Kellner dem
gebe ich meine Bestellung mit das nennt
man dann request der geht in die Küche
sagt das den Koch der Koch also mein
Webserver der mixt das an
und dann lässt er das von dem Kellner
wieder her transportieren wenn wir sowas
wie TLS also transportlayer Security
eingeschaltet haben dann gibt es eine
gewisse Chance dass das Zeug unverändert
hier ankommt ohne dass der Kellner
zwischendurch selber mal gemacht hat
wenn nicht dann kann halt zwischendurch
alles mögliche passieren aber das ist
gar nicht das Thema eigentlich mein
Essen kommt üblicherweise im Web in so
einer Form die heißt Hypertext Mark ab
language das ist also das
Dokumentenformat da ist dann alles drin
geschrieben das ist sowas wie der Teller
oder der Tisch hier an der Stelle bzw
genau und das wird mir dann geliefert
und ich muss das dann verarbeiten indem
ich esse das heißt ich nehme das in mich
auf damit bin ich gewissermaßen in
diesem Bild der Browser und ich schlug
dann alles was da kommt und ja was
kriegt ganz oben auf diesem HTML Berg
drauf ist dann etwas was mir sozusagen
mein Verhalten diktiert als Browser
damit kann ich dann kann man kann mich
dann im Prinzip der Server wenn er
einfach Skript auf seiner Webseite einen
bittet
dazu bringen irgendetwas anderes zu tun
zum Beispiel blöd sind zu erzählen
aufzustehen nach rechts oder links zu
gehen daran merkt man unter Umständen
bitte vielleicht irgendwie schon mal was
kritisches ist dass man da ja was gibt
einbindet weil das jetzt natürlich
voraus dass sich der ganzen Lieferkette
von Küche bis hierher Brot vertraue dass
die mir da nichts einbauen was nachher
meinen Browser Cup also mich kaputt
macht oder dazu bringt seltsame Sachen
zu fabrizieren
gut jetzt gibt es ein paar Sicherungen
in den ganzen Browser drin die halt nur
bestimmte Dinge erlauben aber auch da
gab es immer mal wieder Schwachstellen
und man kann da allgemein
versuchen vor sich zu vorsichtig zu sein
unangenehm wird es halt dann wenn ich
das Zeug was da angeliefert kommt nicht
aus der Küche Kriege sondern das halt
von jemandem anderen kommt nur der hat
dann irgendwann reingeträufelt oder so
und das will ich dann ziemlich definitiv
nicht haben und da könnte eigentlich die
Küche und die ganze Lieferkette was
gegen tun und heute geht's ein bisschen
darum wie eigentlich so ein Angreifer
was in der Küche in den Topf träufeln
kann und mir das dann ausgeliefert wird
bzw ganz grob das echte Beispiel dass
ich heute bringe ist der macht was im
Lager kaputt so
ich bin also der Client also der
Webbrowser und die Küche da hinten dass
der Koch das der Server damit haben wir
da mal die Grundlagen gelegt und dann
können wir uns mal grob angucken was ich
heute eigentlich erzählen möchte
crossheizkripting attack man kann das
Wort einfach auch wörtlich sozusagen
nehmen crosszeit heißt es geht sozusagen
über Bande da kreuzen sich kreuzt sich
im Prinzip Angreifer Kommunikation mit
der
Opfer Kommunikation das Prinzip es gibt
mehrere Arten von Angreifern warten wie
man Koch den Angriff durchführen kann
reflective Start was wir heute als Demo
haben csrf also Cross sight request
vordere wäre auch noch eine
Spezialversion das funktioniert aber im
Großen und Ganzen immer auf die gleiche
Art und zwar so dass der Angreifer
irgendetwas an den Server schickt oder
schicken lässt auf irgendeine Art der
Server verarbeitet das dann ne also in
der Küche auf eine Art die nicht
verhindert dass da irgendwelche
komischen Sachen in meinem Essen drin
sind und dann liefert er mir das aus
weil ich will ja die Webseite sehen am
Ende des Tages
soweit klar
wunderbar ich kann euch jetzt nicken und
klatschen sehen das toll
gut wie läuft sowas dann tatsächlich
einfach mal konkret ab und wir gehen
jetzt einmal diesen webaufruf durch und
mache mal so ein Cross sidescripting
Angriff weil der Grund warum ich das
überhaupt in diesem impress-js gemacht
habe ist das ist praktischerweise schon
mit Javascript behaftet ist eine
Webseite und dann kann man sich selber
gleich großheitskripten und das sieht
dann schöner aus und ihr könnt mir
danach sagen ob das tatsächlich
didaktisch gar nicht mal so schlecht war
gut also wir haben so einen übliches
Ding das ist jetzt hier ein sign in
Webformular üblicherweise kann das auch
sowas sein wie ein Posting in einem
Forum oder so die einzige Sache die
einzige Anforderung die ich habe ist
dass man da was an den Server schicken
kann ich habe es mal versucht einfach zu
machen und vermutlich könnt ihr das
Skript da gerade nicht lesen aber da
steht im Prinzip nicht mein Username
sondern da steht halt dieses HTML
Steuerzeichen für ich bitte da jetzt ein
Programm ein dann steht dann sehr
harmloses Programm das einfach nur eine
Nachricht aufpoppen lassen soll und dann
wird das halt noch abgeschlossen das
heißt ich gebe da einfach mal Zeichen
ein die mir so im Kopf gekommen sind die
halt irgendwie interessantes Ergebnis
haben könnten das ist auf jeden Fall
nicht mein Nutzername damit sieht man
auch schon gleich was man eigentlich
dagegen machen könnte man könnte mal
überprüfen ob jemand wirklich Skript und
erhört heißt also das ist halt ein
relativ unüblicher Name vielleicht wieso
keiner heißen gut den habe ich dabei
eingegeben das Passwort ist in dieser
Demo relativ egal deswegen werfe ich das
einfach mal ein das ist sehr übliches
Formular das sieht halt dann in HTML
habt ihr das so ausgeliefert gekriegt
das ist sowas wie
ja ich weiß nicht keine Ahnung das Menü
im Restaurant oder sowas in der Art und
ich habe jetzt hier in das Input-Feld
sozusagen ein variabel Name namens
Passwort mit einem Wert belegt dem hier
unten und hier oben bei Username habe
ich im Prinzip dieses komische Dingsda
als Daten hinterlegt und diese Daten
wandern jetzt von dem Angreifer Browser
das könnte ich unter Umständen auch
selbst sein werden die in so ein HTTP
Request verwendet also meine Bestellung
oder die Bestellung von jetzt in diesem
Fall von Angreifer und dann landen die
halt einfach tatsächlich relativ direkt
als Variablen
irgendwie drin und werden so direkt an
den Server geschickt da ist halt nie was
also Magie ist da ja nie dabei so
richtig so das heißt dass das ist jetzt
die konkrete Nachricht leicht
vereinfacht die der Server geliefert
kriegt von meinem Angreifer was macht
der Server damit der Server
verarbeitet das Zeug in so einem
Programm hier das ist jetzt tatsächlich
mal ein bisschen Java oder so das habe
ich aus einem naja war eh Anleitung
irgendwo rausgeholt was man damit machen
kann damit also relativ übliches
Framework mit denen man mit dem man
Daten verarbeitet wie das konkret
geschieht ist eigentlich relativ egal
wichtig zu merken ist halt da kommen
irgendwelche Parameter an die speichert
man normalerweise kurz mal im
Hauptspeicher Weg na also merkt sich wie
die heißen irgendwelche Varianten und
dann kommt der wichtige Schritt man will
das ja irgendwo speichern in diesem Fall
legen wir einen neuen Nutzername an und
die muss ich halt irgendwo speichern
das tue ich jetzt hier mit meiner selbst
völlig frei erfundenen Funktionen in
User da taucht dann exakt der gleiche
Nutzername natürlich auf den ich eben
den man Angreifer eben eingegeben hat
mein absolut kreatives Passwort und
danach wird das dann halt direkt in die
Datenbank übergeben ob das hier auch
klappt
ach das klappt nicht so direkt ich würde
mich gar nicht angezeigt aber das
Passwort wird angezeigt weil man sieht
halt dieses Skript kann gerade im HTML
tatsächlich gar nicht angezeigt werden
weil es halt ein Skript ist
glücklicherweise wird es an der Stelle
nicht direkt ausgeführt dass es die
Stelle wo ich mich selbst
gekostetheitskriptet habe da poppt er
nämlich jetzt auf einmal gleich das
kostet ein auf gut damit ist das Ding
jetzt gespeichert im Prinzip habe ich
jetzt als Angreifer im Lager der Küche
was abgelegt nur irgendwie so eine
kleine vergiftete Dose oder sowas in der
Art
gut da ist das noch relativ ungefährlich
jetzt kommt aber der Moment wo ich was
bestellt habe das heißt ich will was
haben das heißt der Koch geht jetzt
wieder in sein Lager und holt sich die
Zutaten raus und bastelt mir daraus eine
Webseite die ihr mehr als Nutzer ein
zeigen kann bei so einem Nutzernamen
könnte das z.B sowas sein wie naja der
der Administrator der dringt irgendwie
die Liste aller Nutzer haben will das
wäre schon mal sehr schön wenn er sich
so eine Nutzerliste anzeigen lassen kann
und ich könnte dann sein Browser in
irgendeiner Weise manipulieren das heißt
das sieht wieder genauso aus wie vorher
auch der baut das in der Webseite ein
hier sieht man diese dieses Markup von
der Webseite der macht mir jetzt hier
eine Liste mit diesem Output eine Liste
von Nutzern und natürlich trägt er dann
wenn er das aus der Datenbank abfragt
mit User-Namen in diesem Fall das ist
völlig frei erfunden fügt der genau an
der Stelle den String ein den ich als
Nutzername als Angreifer angegeben habe
und natürlich auch mein Passwort so
das heißt der baut jetzt eine Webseite
zusammen und packte einen Krempel ein
jetzt könnte man auch an der Stelle
schon mal über irgendwie so eine gewisse
Idee haben was man eigentlich richtig
machen könnte an der Stelle aber ich
will mich ja irgendwie nicht selber das
buchen
gut das heißt der macht eine Liste und
so sieht dann diese Webseite aus die
mein Server gebaut oder so könnte sie
aussehen die mein Webserver ausgebaut
hat er aufgebaut hat da sind halt alle
Nutzer drinne und einer dieser Nutzer
hat halt etwas seltsamen Namen so
ungefähr also normales HTML und das wird
jetzt an meinen kleinen geschickt also
in diesem Fall den hypothetischen
Administrator der sich jetzt gerade
Nutzerliste angucken will
und der kriegt dann sowas angezeigt
wunderbar funktioniert ich hatte ein
bisschen Angst gut was ist da jetzt
passiert
ähm im Prinzip seht ihr auch wieder hier
wird nichts angezeigt und ich habe
zugegebenermaßen ein bisschen
geschummelt das ist sehr explizit
ausgeführt worden aber mein Browser hat
jetzt gerade das was hier war als Skript
wahrgenommen weil der sieht ja dieses
ganze Mark ab und das eine Marke hat ihn
halt gesagt hier kommt übrigens ein
Programm für das bitte sofort aus und
glücklicherweise stand da jetzt in dem
Skript nichts drinne wie explodiere von
den Dritten Weltkrieg an oder sowas
sondern da stand halt da drin zeig mir
eine Nachricht auf der steht das ist
relativ harmlos aber was auch mein
Computer und den wollte ich nicht direkt
selber kaputt machen das mache ich oft
genug in diesem Fall können wir es
einfach wegklicken alles ist in Ordnung
aber
im Prinzip haben wir jetzt einen Skript
im Browser ausgeführt das ist erstmal so
vielleicht mäßig gefährlich kommen wir
gleich noch mal zu halt genau nicht
selber gucken
gut also was haben wir gemacht
wir haben Angreifer gehabt der hat
seltsamen Nutzernamen gehabt oder was
auch immer das für ein Eingabefeld ist
oder wir da wirklich was eingibt
vielleicht geht er auch direkt an die
Datenbank denn in der Lage war
ungefiltert Daten in die Datenbank von
dem Server zu werfen der Server oder in
das Lager von der Küche ne der Server
hat genauso ungefiltert und
unverarbeitet dieses Zeug aus der Dose
genommen und hat das dann an das Opfer
also auch wieder nicht selber in diesem
Fall ausgeliefert und das Opfer hat dann
auf einmal angefangen sich komisch zu
verhalten Nachrichten aufzupoppen oder
vielleicht Webseiten aufzurufen oder was
auch immer da kann man tatsächlich dann
im Endeffekt rein theoretisch grob alles
machen was der Nutzer letztendlich
selber auch in Javascript bauen könnte
da hatten Abfragen dann wegschicken und
so weiter auch wenn es da gewisse sind
Sandboxing Verfahren gibt die wieder ein
eigener Browser versucht dich zu
schützen im großen und ganzen ist das
jetzt erstmal nicht gut
die Frage ist was können wir dagegen
machen und die unglaublich deprimierende
Antwort ist eigentlich ist das überhaupt
nicht schwierig eigentlich ist das gutes
programmiert das Problem was wir gehabt
haben an der Stelle ist tatsächlich dass
wir nicht aufgepasst haben oder
beziehungsweise gibt mehrere Sachen die
man machen kann was wichtig ist wir
haben ja hier irgendein unbekannten
Inhalt
den wir hatten den haben wir einfach mal
in so ein html-kontext geworfen der war
vorher im Datenbank Kontext und davor
war der irgendwo im Angreifer Kontext
und wir haben das genommen und ist
einfach unten ungefilter da rein
geworfen ohne darüber nachzudenken das
bestimmte Sachen die hier in meiner
Datenbank gespeichert sein könnten eine
besondere Interpretation in HTL haben
nämlich insbesondere diese spitzen
Klammern so
und das sagt mir natürlich das ist
unglaublich einfach ist wenn ich nämlich
in meiner Datenbank sowas wie eine
Spitze Klammer stehen haben habe dann
will ich doch eigentlich das in meinem
Browser nachher eine Spitze Klammer
angezeigt wird und der nicht anfängt das
als Sonderzeichen zu interpretieren das
heißt ich muss im Endeffekt ganz einfach
alle Sonderzeichen die da sind also
Sonderzeichen im zielkontext in diesem
Fall im HTML in irgendetwas umwandeln
was einem normalen Zeichen entspricht
und es wird noch viel einfacher für
solche Dinge gibt es tatsächlich einfach
Datenbank die muss man nur verwenden
vielleicht ist euch aufgefallen dass ich
hier jetzt an dieser Stelle nicht nur
den Nutzernamen rausgeholt hat sondern
einfach gesagt hat guck dir das noch mal
sinnvoll für HTML und dann sind wir
fertig und das macht solche
Schwachstellen so unglaublich deprimiert
weil es eigentlich zum Programmieren
dazu gehören sollte wie ja ich weiß
nicht trinken zum Leben oder sowas in
der Art atmen
und ähnliche Dinge gut falls Sie Hilfe
haben wollt mache ich jetzt mal ein
bisschen Fremdwerbung es gibt so ein
Open Source artiges Projekt ist oben web
application security project und die
liefern euch solche Encoder für so grob
alles was sie haben wollte zum Beispiel
die liefern euch auch unter anderem
diese Top Ten und da kann man noch mal
nachlesen was man noch machen könnte
sowas wie Input validation ich müsste ja
diesen blöden Namen gar nicht erst in
meine Datenbank rein schubsen ne wer
heißt schon
seid ihr noch bei mir irgendjemand
eingeschlafen
hat die melden sich wieder nicht gut
also sozusagen die vorzusammenfassung
der Zeug ist jetzt einmal nicht direkt
gefährlich aber was kann halt schon
schief gehen wir haben eine Menge Daten
wir haben Kontext indem wir nicht wissen
was passiert ist es einfach zu vermeiden
im Endeffekt sind das eine ganze Menge
Fehler die irgendwelche Seiteneffekte
haben zu können das wird z.B keiner auf
die Idee kommen irgendwelche wichtigen
Industrieanlagen mit so einem komischen
Webinterface zu versehen was auch noch
größer als kräftigen äh Schwachstellen
enthält es Seiten ersten
Windparkbetreiber dann macht das halt
doch da gab es 2017 irgendwie ein paar
Leute die haben die mal analysiert diese
Web Interfaces und haben da nebenbei
auch noch kochsalskripting
Angriffsmöglichkeiten gefunden und haben
dann tatsächlich Windkraftanlagen
steuern können und zwar so ein bisschen
großflächig weil die Software natürlich
einmal schreiben und überall ausrollen
dann hat man die Schwachstelle überall
und dann kann man halt mal eben kurz
Windkraft an der norddeutschen Küste aus
oder anschalten und wenn ihr vorgestern
in diesem energievortrag wart ich komme
auch aus dem Bereich Energie Informatik
dann wisst ihr dass das nicht gut ist
solche Dinge also da gibt es eine Menge
Sachen die in Angreifer machen kann und
das noch viel schöner und viel einfacher
er ist halt unglaublich leicht zu
beheben deswegen wäre es schön wenn ihr
wenigstens mal die Top Ten der overs
durchgeht
dann wisst ihr was er nicht machen
sollte jetzt bin ich zu weit genau okay
also Auto put and coding betreiben Input
validation betreiben und wenn jetzt
nicht dieses letzte Bildchen euch
komplett überzeugt hat dass man dringend
3D braucht wo man dann seine Grafiken
recyceln kann dann versucht euch nicht
an irgendwelchen komischen 3D Folien
weil das macht eine Hölle Arbeit ist
aber schön vielen Dank
[Musik]