Lieber Zuschauer, dieser Untertitel wurde automatisch generiert von YouTube und dementsprechend (sehr) fehlerhaft. Wenn du kannst, hilf uns bitte gute Untertitel zu erstellen: https://c3subtitles.de/talk/2828 Danke!
willkommen zurück bei firchance nach
dieser kurzen
Pause wie immer wenn ihr Fragen Wünsche
memes Anmerkungen habt dann Post diese
doch gerne auf modon mit dem #
chance23 Chance 23 ist auch der Name des
IC Kanals auf
ic.hackin.org wo ihr uns Fragen stellen
könnt ähm wir haben ein Public Viewing
im Aquarium im jits der Link dazu ist
wie immer in unserem infobeamer zu
finden das Weiteren haben wir unseren
Stream auf drei Plattformen auf Youtube
mit dem Namen fire Chance auf Twitch
ebenfalls mit dem Namen firchance oder
auf
streaming.media.ccc.de ebenfalls mit dem
Namen firchance dort zu finden
YouTube und Twitch haben jeweils einen
Livechat in dem ihr eure Fragen stellen
könnt oder stellt sie einfach auf
Mastodon oder im IC
so ich habe hier mit mir Lea
R Lea R hält heute ein ein Talk mit dem
Namen ah mein regulärer Ausdruck ist
böse Lea macht was mit IT ist
professionelle pinguinstreichlerin aka
surprise Linux admine mag Koffein und es
hin und wieder anzutreffen in der binary
kitchen Regensburg sie gibt uns eine
kurze Einführung in reguläre Ausdrücke
das Konzept ein regulären ausdrücks und
deren Verwendung bis hin zum Ausnutzen
bestimmter Kombination von regulären
Ausdrücken als payload für einen Regular
Expression den of service ein
redosangriff hallo zusammen ich freue
mich dass ihr eingeschaltet habt zu
meinem Talk ah mein regulärer Ausdruck
ist böse ich bin Lea und wir sind hier
bei Fire chongs 23 ich würde sehr gerne
sagen dass es alles live aufgenommen ist
und ihr sehr zahlreich erschienen seid
aber ich weiß gar nicht wie viel viele
Leute von euch hier gerade zuschauen
weil es hier ein prererecording ist ich
weiß nicht ob ihr es mitbekommen habt
aber leider gab es so ein paar ja issues
bei fireetongs so dass die talks jetzt
prerecorded sind aber uns dennoch
ermöglicht wurden diese talks zu halten
worüber ich sehr dankbar bin an der
Stelle ein großes Danke an Tanja die das
möglich macht dass ich hier meinen Talk
halten kann in einer prererecorded
Version und die talks gerettet wurden
das wollte ich einfach nur noch mal am
an Fang als Dankeschön daassen und mich
bedanken dass mir die Möglichkeit
gegeben wurde den Talk hier
prererecorded einzureichen das Motto ist
try this at home ich hätte nicht gedacht
dass ich es so sehr at home try aber h
we are genau lass es auch schon mal
gleich kurz loslegen mit einer kurzen
Einführung was wir heute eigentlich so
besprechen werden oder über was ich
heute sprechen werde erst einmal gibt es
eine kurze Einführung in mich in meine
Person und
Motivation dann müssen wir über
theoretische Informatik sprechen ich
werde mich bemühen das ja so
verständlich wie möglich zu machen
ansonsten gibt es auch noch wenn wir
dann live sind und dieser Talk hier
ausgestrahlt wird die Möglichkeit Fragen
denn wir brauchen theoretische
Informatik um reguläre Ausdrücke zu
verstehen und das führt uns dann zu dem
eigentlichen Thema der Regular
Expression denial of service über die
wir heute sprechen werden und was das
mit regulären Ausdrücken zu tun hat was
der Name eben schon
sagt wir fangen wie gesagt an mit einer
kurzen Einführung und zwar hi ich bin
der wir sind hier bei den firechongs
mein homespace und meine hometown ist
Regensburg da bin ich in der binary
kitchen aktiv ich habe Spaß am Gerät und
bin ialerin und hacke manchmal so ein
paar Dinge kaputt aber meistens nur mit
einem Verständnis ich studiere
Informatik im Master und betreibe
nebenbei so ein bisschen IT security
consulting in Penetration testing und
abgesehen davon mag ich knus Pinguine
Tastaturen und Herzen das bedeutet im
Endeffekt kN knu Linux frei Software ist
was Tolles das hier wird auch gerade mit
freier Software auf einem Linux System
aufgenommen ich bin ein großer Linux Fan
und ja das ist mir
wichtig so zu meinem Hintergrund hier
seht ihr mich auch fröhlich am
Hacken und das bin ich und ich bin froh
dass ich euch ja heute so ein kleines
bisschen einen Einblick in das geben
kann was ich so tue auch wenn ich jetzt
nicht täglich das Theme mit Regular
Expression denyow Service zerlege
wir fangen ein bisschen an mit IT
Sicherheit was wollen wir damit
eigentlich erreichen wir wollen
Informationen Datensysteme Infrastruktur
alles was irgendwie mit dem Gerät zu tun
hat schützen
und zwar gibt's da was was ich CIA
triide nennt da definieren wir quasi
Schutzziele was wir mit der IT
Sicherheit schützen wollen und das ist
einmal confidentiality integrity und
availability je nach Anwendungsfall kann
man noch ein bisschen mehr definieren
dann kommt da sowas rein wie
authorization und and
authentication je nach Anwendungsfall
aber um das jetzt erstmal zu verstehen
was die CIA Tri ist wir haben
confidentiality oder auch
Vertraulichkeit das heißt Daten und
Anwendungen sind insofern geschützt dass
der lesende Zugriff nur durch einen
definierten Personenkreis aka
autorisierte Entitäten erfolgen kann
integrity oder Integrität geht in
dieselbe Richtung nur dass wir hier über
den schreibenden Zugriff reden und das
der most pressing point today ist
availability Verfügbarkeit das
datenservices und Infrastruktur ohne
Einschränkung nutzbar sind das ohne
Einschränkung bezieht sich hier auch auf
einen vorher definierten Personenkreis
also es ist jetzt nicht z.B gemeint dass
einfach jeder jeden Service einfach ja
verwenden kann und und letzterer Punkt
ist eigentlich auch der Punkt in den wir
heute reingehen denn bei einem denil
Service wie auch der Name Regular
Expression denid Service schon sagt
haben wir eine Einschränkung der
Verfügbarkeit eines Systems einer
Infrastruktur oder einer
Anwendung und das kann entweder
absichtlich als Angriff passieren oder
unabsichtlich als ressourcenüberlastung
das ist dann übrigens der Punkt an dem
IT security eben nicht nur der Schutz
vor Hackern ist sondern auch der Schutz
vor zu vielen nutzen
oder der Schutz ja von ein bisschen
nicht skalierbaren gebauten
Systemen genau und die Idee wenn man es
tatsächlich als Angriff verwendet ist
dass wir einen Teil des Systems finden
der quasi der schwächste Punkt ist und
diesen ausnutzen und das kann im
heutigen Fall die Validierung von
regulären Ausdrücken
sein die Konsequenzen das System fällt
aus was nicht schön ist je nachdem wie
das System programmiert ist oder
entwickelt ist kommt es zu einer
Einschränkung der weiteren Schutzziele
wie confidentiality oder
integrity das berühmte Beispiel hier ist
quasi eine Datenbank bzw eine Webseite
wird angegriffen es kommt zu einem
Ausfall und es ist ein debugmus
eingeschaltet und dieser Debug Modus
sorgt dafür dass quasi die Logmeldungen
ungfiltert auf die Webseite in das
userinface gegeben werden und da ist
dann unter Umständen auch schon die
Vertraulichkeit des jeweiligen Services
eingeschränkt im besten Fall wird es
also für im besten Fall für einen
Angriff wä das hier z.B dass wir einen
Regular Expression den Service haben und
dadurch dafür sorgen dass wir ja eine
Fehlermeldung irgendwie
erzwingen neben ja dem eigentlichen
Systemausfall und dadurch weitere
Information gewen aber eigentlich wollen
wir bei einem klassischen den auf
Service erstmal dafür sorgen dass wir
ein System aus fall
haben bevor wir allerdings damit
anfangen wie wir Systemen zum Ausfallen
bringen oder wie wir vielleicht Systeme
so sicher entwickeln dass wir sie nicht
zum Ausfallen bringen gehen wir ein
bisschen in theoretische Informatik und
reguläre
Ausdrücke wie gesagt an der Stelle dann
gerne später ein paar Fragen stellen ich
habe in den Referenzen die dann auch
kommen werden ein Skript drin aus meiner
theoretischen Informatik Vorlesung ist
zum Glück alles frei verfügbar in dass
man auch sehr gerne reinschauen kann
darf und soll wenn man sich tiefer dafür
interessiert fangen wir aber erstmal an
mit formalen Sprachen und
Grammatiken formale Sprachen sind
erstmal eine Menge aus definierten
Zeichenketten das was wir Wörter nennen
eines definierten Alphabets ein
definiertes Alphabet bedeutet dass wir
Symbole haben die wir für eine Sprache
verwenden
können dazu haben wir dann auch eine
formale Grammatik die quasi
ja die Anwendung von formalen Sprachen
ist die besteht aus Syntax und
Produktionsregeln das bedeutet im
Endeffekt wir haben auf der linken Seite
etwas was in eine rechte Seite
umgewandelt wird also wir haben eine
vorgegebene
Grammatik und mit dieser vorgegebenen
Grammatik haben wir eine
produktionsregel und diese
produktionsregel sagt wir können aus ab
machen es kommen auch noch Beispiele die
das dann ein bisschen verständlicher
machen wenn man es jetzt formalisiert
will ich habe an der Stelle die
mathematischen Symbole so Biss
weggelassen dann haben wir eine
Grammatik die besteht aus einer
endlichen variablenmenge die sogenannten
nichtterminalsymbole das bedeutet im
Endeffekt da können wir gewisse ja aus
diesen nicht terminalsymbolen können wir
quasi eine entsprechende Entwicklung
machen mit einem endlichen
terminalalphabet also quasi das was am
Ende da stehen soll vereinfacht gesagt
wir haben eine endliche Menge an
Produktionsregeln also so wie A wird in
B überführt und und wir haben ein
stsymbol mit dem wir anfangen das wird
häufig s genannt kann aber ja
freigewählt werden aus dieser vorher
definierten endlichen variablenmenge ich
weiß es hört sich jetzt ein bisschen
mathematisch und weird an aber es ist
quasi diese formalisierte
Variante wir haben jetzt ein paar
Beispiele Anmerkung an der Stelle wenn
ich normalerweise eine formale Grammatik
definieren würde müsste ich vorher auch
auf jeden Fall noch mal alle
Produktionsregeln definieren mein ganzes
Alphabet definieren etc pp das habe ich
an der Stelle weggelassen
so dass wir keine vollständige formale
Angabe haben aber was mir hier wichtig
war dass wir eine verständliche Angabe
haben und zwar ist das erste Beispiel ja
Sprache wir haben einen Satz dieser Satz
besteht aus Subjekt Prädikat und Objekt
und hier ist das Beispiel plohhey mag
Weihnachtskekse wenn man an der Stelle
noch weitergehen wollen würde könnte man
aus Weihnachtskekse auch ein nicht
terminalsymbol machen oder das
terminalsymbol spekulaus oder Lebkuchen
nehmen
was dann tatsächlich ja ein bisschen
näher am Gerät ist sind
Programmiersprachen wir haben z.B einen
Funktionsaufruf hier habe ich jetzt mal
die Sprache C als Beispiel genommen die
einer bestimmten stagsfolgt und zwar
haben wir eine Funktionsnamen dann haben
wir Klammer auf dann haben wir die
entsprechend
Parameter der die Funktion aufberufen
wird haben wir eine Klammer zu und dann
haben wir ein Semikolon das können wir
auch umwandeln in ja print fellow ch
insofern hello fire CHS oder ein
Beispiel was ja vielleicht auch
anschaulich sein soll wir haben Kleidung
Kleidung besteht aus einem Oberteil und
m Unterteil und das können wir immer
weiter aufspalten
quasi und bis wir dann entsprechend bei
unseren terminalsymbolen angelangt sind
das sind wir hier z.B nicht aber wie
gesagt das ist einfach die Idee dass ein
bisschen verständlicher und greifbarer
zu
machen so wir haben Grammatiken die
Grammatiken können wir unterteilen da
gibt so eine sogenannte pomski
Hierarchie die Grammatiken in
Komplexitätsklassen bzw in verschiedene
Typen einteilt die eine unterschiedliche
Komplexität
haben es kommen jetzt ein paar Begriffe
die ja sind im Grunde so ein bisschen
Hintergrund kann man nachlesen ich
versuche hier sie so kurz wie möglich zu
erklären aber dennoch verständlich zu
erklären bei sogenannten phrasenstuktur
Iken haben wir keine weiteren
Einschränkung und bei unseren
Produktionsregeln ist es egal wie lange
unsere linke und unsere rechte Seite ist
also vielleicht noch mal kurz zu den
Produktionsregeln noch mal kurz
zurückgehen hier haben wir jetzt beim
teil bei dem ersten Beispiel
Sprache besteht aus einem Satz und das
wird umgewandelt ein Subjekt Prädikat
und Objekt die linke Seite Satz die
rechte Seite Subjekt Prädikat
Objekt und da ist die Idee beid kann
beliebig lang sein es gibt in dem Sinne
keine anschränkungen bei einer
phrasenstrukturgrammatik dann haben wir
Typ 1 das sind die kontextsensitiven
Grammatiken da ist die linke Seite einer
produktionsregel gleich oder kürzer als
die rechte
Seite dann sind wir kontextfrei die
linke Seite muss ja nicht terminalsymbol
sein
bei den davor kann ich das quasi so
machen wie ich lustig bin und so ja
stapeln wie ich lustig bin und mir
allerlei lustigen Produktionsregeln
ausdenken und dann sind wir beim JA
heutigen Fall angekommen bei den
regulären Grammatiken die rechte Seite
besteht da aus einem terminalsymbol mit
maximal einem
nichtterminalsymbol auf der rechten
Seite
um unsere Produktionsregeln entsprechend
zu entwickeln das ja schränkt es alles
so ein bisschen ein und macht es weniger
komplex und das ist im Grunde genommen
auch so ein bisschen das was wir
erreichen wollen denn je weniger komplex
etwas ist desto
einfach ist es verständlich und umso
einfacher können wir ja damit
umgehen und entsprechend einfach können
wir das auch mit weiteren Strukturen
abbilden also das ist eigentlich auch so
ein generelles Ding was mir wichtig ist
je weniger komplex etwas ist desto
besser ist es
eigentlich und hier gibt auch noch
praser und homework für all diejenigen
die noch ein bisschen weiter über
Sprachen und chromsk tromsky Hierarchie
nachdenken wollen wo finden wir denn
unsere natürliche Sprache die wir
sprechen tromsky
Hierarchie ich bin ja wenn ihr darüber
auch im Q&A reden wollt gerne ansonsten
einfach gerne als ja kleine Hausaufgabe
mitnehmen
m ich sagte eben schon wir können
Sprachen bzweise eher die Grammatiken
als etwas darstellen und die Darstellung
von regulären Sprachen funktioniert mit
sogenannten endlichen Automaten dadurch
laufen wir eine Eingabe und haben für
diese Eingabe definierte Zustände und
ein akzeptanzkriterium das wird gleich
hoffentlich auch noch klarer werden wenn
ich ein Beispiel bringe
aber erst einmal die formalisierte
Darstellung wir haben einen Automaten
einen endlichen Automaten der hat eine
endliche Menge an Zuständen ein
endliches Alphabet wir haben eine
übergangsfunktion zu Beschreibung der
Zustandsübergänge vielleicht auch da
ganz kurz an die Produktionsregeln und
die Grammatik denken ähm und der nötigen
Eingabe wir haben einen Startzustand und
eine Menge der zu akzeptierenden
Endzustände mit dem wir quasi sagen das
Wort wird akzeptiert oder das Wort wird
nicht akzeptiert damit können wir
entscheiden ob ein Wort zu einer Sprache
gehört oder nicht hier ein einfaches
Beispiel nämlich die Parität wir haben
unseren Startzustand das ist hier q0 die
Zustände werden meistens immer mit Q
eine Zahl und dann eine beliebige Zahl
bezeichnet meistens einfach
durchnummeriert von Null beginnt und wir
haben Q1 Q1 ist unser Endzustand deshalb
Desh ist der hier so ein bisschen dicker
und das ist unser akzeptierter inzustand
wenn wir da jetzt quasi reingehen und
mit einer Null starten dann bleiben wir
in q0 wenn wir eine 1 eingeben dann
gehen wir in Q1 wenn wir in Q1 dann noch
mal eine 1 eingeben dann bleiben wir in
Q1 und mit 0 kommen wir zurück zu q0 und
hier werden binäre zahlen die ungerade
sind von unserem Automaten
akzeptiert so das ganze können wir aber
auch nicht deterministisch machen also
noch mal zurück zu diesem Automaten hier
der hat für jeden z genau eine
definierte ja Funktion was hier passiert
bei nichtdeterministischen endlichen
Automaten sieht das ein bisschen anders
aus nicht Determinismus heißt nämlich
dass wir mehrere mögliche Wege haben das
ist beispielsweise wichtig für
verordererung und bei diesem Automaten
hier der hier als Beispiel ist da werden
Strings mit 0 10 oder 101 akzeptiert
also wir können beispielsweise für eine
Null weiter zu wenn wir Startzustand
Null sind können wir für eine n0 noch
mal zu q0 gehen oder eben zu Q1 das kann
wenn man das programmiert beispielsweise
durch Parallelität umgesetzt werden ist
in dem Falle aber ein ja entsprechendes
theoretisches Konstrukt der nicht
Determinismus das hier ist jetzt ein
weiteres Beispiel was ich mitgebracht
habe für
FS xx vielleicht ganz kurz dazu FS steht
hier für fechance und dahinter hätte ich
gerne irgendeine beliebige Zahl gehabt
z.B Feier
23 wir starten quasi in q0 und für alles
was nicht ein F ist bleiben wir in
unserem Startzustand für ein F gehen wir
dann weiter damit wir unser F
haben wenn dann kein s kommt dann gehen
wir quasi wieder zurück und starten das
Spiel von vorne nach einems überprüfen
wir das ganze ob da eine Null oder ob da
Zahlen von 0 bis 9 drin sind wenn das so
ist dann gehen wir weiter und wenn das
entsprechend dann noch mal der Fall ist
dann gehen wir weiter vier das ist unser
akzeptierter nzustand und dann das uns
im Grunde genommen egal was dahinter
kommt
dementsprechend suchen wir hier einfach
nur ein Wort das FS und dann zwei
beliebige Zahlen enthält dürfen dann
dürfen dann natürlich auch drei werden
weil es hier nicht weiter spezifiziert
ist aber das wäre quasi der
entsprechende Automat dazu so jetzt ist
die Frage warum mache ich das weil wir
dadurch eigentlich schon einen regulären
Ausdruck haben und so kommen wir quasi
von der theoretischen Informatik in
unsere regulären Ausdrücke rein die
definiert werden durch reguläre Sprache
Grammatik und endliche Automaten
yeah so und ein regulärer Ausdruck ist
eine Zeichenkette zur Beschreibung von
Mengen von Zeichenketten also wir haben
quasi eine Definition an Zeichenkette
aus die wir quasi aus der wir mit der
wir überprüfen können ob eine andere
Zeichenkette Teil dieser regulären
Sprache ist und dafür haben wir ein paar
bestimmte syntaktische Regeln wie wir
reguläre Ausdrücke darstellen wollen
oder können wir haben quasi beliebiges
Symbol die wir beliebig aneinander rein
können wie hier z.B das FS und dann zwei
Zahlen wir können eine Auswahl machen
oder entsprechende veroderung also wir
können beispielsweise festlegen dass
statt dem F auch ein G da stehen darf
wir können eine sternoperation verwenden
als Wildcard das ist quasi dann das habe
ich hier quasi gemacht mit davor darf
alles beliebig kommen danach darf alles
beliebig kommen wir können aber auch
bestimmte Symbole ausschließen und
natürlich können wir das alles auch
entsprechend lustig grupieren wie wir
wollen und hier hätten wir entsprechend
auch den regulären Ausdruck zum
vorherigen Automaten je nachdem wie ihr
das implementiert oder mit welcher
Sprache ihr das implementiert kann das
ein bisschen anders aussehen es kommt
auf die jeweilige recx Engine und Syntax
an aber das ist alles meistens ziemlich
einheitlich so ich habe hier noch ein
paar Beispiele mitgebracht palendrome
der länge 4 z.B ein palaleendrom ist ein
Wort dass man in der Mitte
durchschneiden kann und das dann quasi
gespiegelt selber ergibt also ein
Beispiel wäre ab
BA was man hier verwenden könnte ein
palontrom das die Länge F hat wä z.B das
Wort
Radar kann man auf jeden Fall viel Zeit
drin versenken ein paar nette reguläre
Ausdrücke zu finden was auch
funktioniert sind reguläre Ausdrücke für
IPv4 Adressen
die quasi entsprechend m ja aus den
jeweiligen also die entsprechend aus den
jeweiligen Kombination von ziffernpkt
etc bestehen können was auch
funktioniert sind activity Pub
Usernamen und das sieht dann alles auch
entsprechend
ja schwer zugänglich aus sage ich mal
und auch hier kann es natürlich sein
dass je nachdem wer diese regulären
Ausdrücke impl entiert das vielleicht
nicht so zu 100% einer Spezifikation
entspricht wie man eigentlich dachte
also was auch sehr spannend ist sind z.B
Mailadressen als regulärer Ausdruck und
das kann dann beliebig komplex W
eigentlich das falsche Wort aber
kompliziert im Kopf werden
dementsprechend ist es auch total normal
von regulären Ausdrücken sehr verwirrt
zu
sein und dementsprechend K kann man auch
sein Computer sehr gut damit
verwirren so jetzt haben wir quasi unser
Rüstzeug für reguläre Ausdrücke ähm und
können ein bisschen darüber reden wie
wir all das was wir gerade gelernt haben
nutzen können um ein deny of service zu
erzeugen die grundsätzliche Idee warum
wir eigentlich reguläre Ausdrücke
verwenden ist dass wir damit so ein
bisschen Input validation und filtern
machen wollen also ihr kennt es
vielleicht wenn ihr irgendwo auf einer
Webseite seid gebeten werdet eure
Mailadresse einzugeben dann wird da
überprüft okay sieht diese Mailadresse
aus wie eine Mailadresse oder wie ich
eben hatte mit IPv4 Adressen wenn wir
IPv4 Adressen sieht diese IPv4 Adresse
aus wie eine IPv4 Adresse aussehen
sollte dementsprechend sind so reguläre
Ausdrücke eigentlich schon cool um sowas
zu verwenden ich sagte ja eben auch je
weniger komplex etwas ist desto schöner
ist es quasi und desto weniger ja dest
du weniger anfällig für Probleme höherer
Komplexitätsklassen ist ein
Problem hier ist allerdings die Idee
dass wir quasi diesen regulären Ausdruck
der diese Input validation macht oder
irgendwie filtert für ein denil of
service
ausnutzen das funktioniert indem wir
einfach die recex Engine der jewigen
Programmiersprache angreifen die
entsprechend im Hintergrund auch
endliche Automaten verwendet was ich an
der Stelle aber wichtig finde und noch
nicht so sehr erklärt habe
sind nämlich die nicht deterministischen
endlichen Automaten die hier quasi eine
Rolle spielen denn wir haben die
Evaluierung den nicht deterministischen
Wege mit sogenanntem Backtracking und
eine rekursive Ausführung was im
Endeffekt dazu führt dass alle Wege
ausprobiert werden und das können schon
ein paar
werden so ich habe h nämlich auch ein
Beispiel mitgebracht nämlich der
reguläre Ausdruck A+ und dann plus das
heißt wir haben mindestens ein A und
können dahinter eine beliebige Anzahl
machen und diesen Ausdruck haben wir
noch mal in Klammern geschrieben das ist
dann eine Gruppierung und das heißt für
unseren Ausdruck können wir quasi noch
mal beliebig fropieren und hier haben
wir dann auch einen endlichen
Automaten der nicht deterministisch ist
der das entsprechend evaluieren kann an
der Stelle habe ich jetzt mal nur die as
eingetragen und nicht das weitere
Alphabet aber quasi für alle Zeichen die
nicht a sind landen wir noch mal im
Startzustand weil das ist dann
entsprechend ein nicht akzeptierter
Ausdruck und bei der Evaluierung gehen
wir jetzt quasi Weg parallel was dann
entsprechend dazu führt dass wir für
eine Eingabe mit Länge n zwei hoch n
Möglichkeiten haben das ist für kleine
Ausdrücke wie sie hier z.B im Titel
stehen auch eher so
harmlos für 11 ist es auch immer noch
eher harmlos für 2 hoch 2 bzw 23
Möglichkeiten wird es nicht mehr ganz so
harmlos deshalb war ich auch ein
bisschen traurig dass ich nicht so viele
Zeichen bei pret eingeben konnte weil
das Ausrufezeichen dann wahrscheinlich
auch dazu führen könnte dass hier etwas
schwierig wird auch wenn ich davon
ausgehe das sollte dort ein regulärer
Ausdruck zuur Filterungen verwendet
werden man diesen eventuell nicht so
leicht kaputt machen kann hoffentlich
was man an der Stelle aber noch
mitnehmen kann wenn wir irgendwo
exponentielles Wachstum haben ist immer
schlecht für Laufzeiten und wollen wir
wenn es geht beim Programmieren
eigentlich vermeiden
einfach weil dadurch sehr viele Wege
gegangen werden was sehr viel
Rechenpower kostet und dann irgendwann
sehr sehr langsam wird also während der
Talk Vorbereitung habe ich mir dann den
Ausdruck angeschaut für A+ Plus und wenn
die Eingabe nur aus asbeht dann ist es
auch vergleichsweise
ungefährlich weil du sich sehr schnell
evaluieren lässt weil da keine
Parallelität notwendig ist wenn wir aber
böser werden let's get more evil und
eine andere Eingabe geben dann sieht es
nicht mehr ganz so lustig aus und zwar
machen wir jetzt einen kleinen live Test
das hier ist die Programmier Sprache
pythen wo ich entsprechend etwas
vorbereitet habe also das ist auch der
Code den wir jetzt ausführen werden wenn
das patter matcht dann bekommen wir ein
fire ch 23
zurück und dann gehen wir hier auch mal
direkt rein hier habe ich mein pyenript
drin und wenn wir hier einfach eine
beliebige Anzahl an as eingeben dann ist
es cool dann sind wir bei Fire J 23 wenn
ich dann noch ein B eingebe dann upsi
stehe ich von dem Terminal das ein
bisschen gebraucht hat
werden wir das aber mal noch so ein
bisschen verlängern ein bisschen
rausschieben und das eingeben dann würde
ich hier eine ganze Weile stehen wir
können mal einen kurzen Blick drauf
werfen was hier eigentlich gerade
passiert dann sehen wir dass meine
Videoaufnahme ein bisschen CPU kostet
aber was halt noch mehr CPU kostet ist
unser nettes pythenript hier das quasi
ja gerade so ein bisschen meine CPU
belastet hier ist dann gerade auch ein
bisschen
hochgesprungen und dementsprechend
blockiert es gerade einfach ein Prozess
auf meinem laptop lässt die CPU ein
bisschen klühen was an sich erstmal
nicht schlimm ist aber angenommen das wä
jetzt z.B eine externe Anwendung oder
der Anwendung kleinseitigen Browser oder
so dann wäre es nicht mehr ganz so
angenehm wenn hier einfach die ganzen
Ressourcen zugeballert
werden rechenen wir mal ab nicht mal
Rechner zu viel zu tun hat genau das
wäre dann quasi ja das Live Beispiel
dazu gewesen kann man auch gerne zu
Hause nachmachen mit seinem eigenen
Rechner und den quasi ja ein bisschen
als Heizung verwenden
m tatsächlich gibt's dazu auch ein paar
bekannte Angriffe es gab z.B einen 34
minütigen Ausfall von slack overflow in
2016 durch den hier gezeigten regulären
Ausdruck der eine veroderung mit sich
bringt die Idee war an der Stelle dass
man am Anfang und am Ende eines Strings
entsprechenden Unicode entfernt das ist
einfach eine Form von Input Validierung
damit da einfach nicht irgendwie random
irgendwelcher Unicode reingeworfen wird
es gibt vulnerable
JavaScript Funktionen in entsprechenden
Bibliotheken hier für excepts language
in dem HTTP Header wo entsprechende
Input Validierung durchgeführt wurde
oder entsprechend auch in einer weiteren
JavaScript Bibliothek die Moment heißt
die Lehrzeichen hier sind
Absicht das ist nämlich das was dazu
geführt hätte dass man die regular
expression in N Service ausgelöst hätte
selbes
Prinzip hier dass man einfach ja ein
random Input in einer entsprechend Länge
reingibt und damit quasi die recx Engine
überfordert und das ja kann durchaus
auch in the wi passieren und das ist ein
bisschen ich will nicht sagen lustig
weil solche Angriffe sind eigentlich
nicht unbedingt lustig aber in dem Fall
war es tatsächlich so dass all diese
Griffe in oder um 2016 durchgeführt
wurden bzw bekannt wurden
generelle Gefahreneinschätzung würde ich
an der Stelle auch mal noch machen und
basierend auf den existierenden
Angriffen die ich finden konnte die
tatsächlich zu einem Ausfall geführt
haben ist die Gefahr meiner Einschätzung
nach eher gering
was interessant sein könnte wä
kleinseitig die Verfügbarkeit von
Anwendung einzuschränken also indem man
quasi einen Webbrowser von dem kleent
über fordert was beispielsweise ganz
nett wäre wenn man input fields hätte
und die entsprechend als Query Parameter
angeben könnte und dann quasi einen Link
an Menschen verschickt die dazu der dazu
führt dass der Browser einfriert was
jetzt nicht schön ist aber jetzt auch
nichts ist was wirklich gefährlich ist
das sind die Serverausfälle wenn
serverseitig etwas validiert wird schon
ein bisschen krifficher zu betrachten
wie der Stck overflow auswall ja ich
habe auch ein nettes paper gefunden was
das untersucht hat wo quasi das nojs und
pythen Ökosystem untersucht wurde auf
diese vulnerablen Regular Expressions
und da gab es wohl schon einiges zu
finden nichtsdestotrotz würde ich die
Gefahr dennoch eher als gering
einschätzen und eher so als lästiges
Übel was man vermeiden kann oder als
lästigen back den man einfach vermeiden
kann wenn man ja
entsprechend versucht sauber zu
programmieren was bei recais Super
schwierig sein kann und worin ich auch
nicht perfekt bin sicherlich nicht und
ich glaube jeder der sagt ich bin gut in
R ais hat irgendein Geheimnis falls hier
Leute zuuhören die gut recess sind sagt
mir was ihr macht oder warum ihr gut in
recaess geworden seid das würde mich
sehr
interessieren so dann gehen wir zu den
Abwehrmöglichkeiten die
Programmiersprache kann was für uns
machen indem wir einfach einen Timeout
für res haben oder eben nicht diesen
Backtracking oder recursion Algorithmus
UMX zu validieren was an sich cool ist
wenn die Programmiersprache das zur
Verfügung stellt was aber wie wir
gesehen haben eben häufig nicht der Fall
ist gerade bei sowas wie pyon und nojs
was se häufig verwendet wird oder wir
können als programmierende Personen
versuchen gewisse antipattern zu
vermeiden die in REC Access auftreten
können antipattern sind z.B Gruppierung
mit Wiederholung und innerhalb dieser
Wiederholung haben wir dann noch weitere
Wiederholung oder
veroderungen oder eben entsprechende
veroderungen die sich aber teilweise
überschneiden ich habe hier auch ein
paar Beispiele mitgebracht die z.B von
ersp auch so aufgeführt werden also wie
ihr später sehen könnt referenz6 ist die
Referenz zu
Obers die sich sehr tief mit IT security
beschäftigen und hier haben wir dann
entsprechend Beispiele für diese
antipattern man kann das alles
validieren es gibt z.B online Tools die
das überprüfen können und die basieren
im Grunde genommen auf einer
starterchenanalyse von der Regular
Expression mit der man more or less gut
erkennen kann ob eine ob ein regulärer
Ausdruck anfällig ist für Regular
Expression deny Service dann gibt's
generell natürlich noch Empfehlungen für
recxess generell die sollen das Leben
erleichtern und nicht erschweren
beispielsweise für eingabevalidierung
oder wenn einfach von extern
irgendwelche wert reinkommen und man
wissen möchte ob die gerade passen oder
nicht oder formal betrachtet ob die
reguläre Sprache die ich dort ein Wort
dass ich erhalte ob das zu einer
regulären Sprache bzw zu einer regulären
Grammatik gehört die ich eigentlich
abbilden möchte m und dafür sind
crackxes gut und dafür können die auch
weiter verwendet
werden man sollte idealerweise auch ein
Verständnis dafür bilden oder sich
zumindest damit beschäftigen was eine RX
warum tut
da gibt's entsprechend auch Tools RX 101
die entsprechend auch erklären können
was eine RX gerade macht um einfach so
ein gewisses Gefühl dafür zu bekommen
hey was passiert hier eigentlich
gerade und R Access sind einfach nur ein
Tool im
Werkzeugkasten den wir zur Verfügung
haben verwendet wenn es quasi angeprchtt
ist z.B für eingabevalidierung es ist
jetzt nichts wovor man Angst haben muss
in dem Sinne weil der Gedanke aufkommen
könnte okay ich könnte versehentlich RX
den of service
verursachen ich kann jetzt keine R AES
mehr verwenden das ist eigentlich die
falsche Herangehensweise in meinen Augen
zumindest und der Gedanke okay wie
vermeide ich das und wie gehe ich
sinnvoll mit Ress um ist in meinen Augen
der bessere Weg in dem Fall dann habe
ich natürlich noch den obligatorischen
xkcd
dabei der in diesem Fall auch sehr
aussagekräftig
ists
Bad
das drückt es teilweise auch sehr aus x
die hat quasi für jede Lebenslage in der
IT ein entsprechenden Comic da per
können wir an der Stelle mit jeder
beliebigen Sprache ersetzen die
verwenden wollen
so dann habe ich noch ein paar
Referenzen durch die ich mal einfach
ganz kurz durchklicken
werde Gens auch das entsprechende Skript
ist die Folien werde ich im pretalks
hochladen und an dem Punkt möchte ich
euch sehr für eure Aufmerksamkeit danken
ich bin auch denke ich verfügbar für
Fragen und ansonsten könnt ihr mir
natürlich auch im F schreiben oder mir
eine E-Mail schreiben wenn ihr lieber
Mailkontakt haben wollt indem ich auch
Fragen beantworten kann und in dem Sinne
danke schön und ja
eine frohen Rest des Jahres bis
dann hi und willkommen zum Q&A zum Talk
von Lea Rain a reguläre aus a mein
regulärer Ausdruck ist böse wir haben
ein paar ein paar Fragen und als
allererstes mal eine eine Anmerkung aus
dem
Chat dass man dass man ein regulären
Ausruck der Ausdruck der Form Wechsler
ST 1,3 immer mal wieder in Filmen sieht
um IP-Adressen auszudrücken
aber da kannst du uns ja sicher sagen
dass das eher eher schwierig ist
oder warte mal hörst du mich
ähm kannst mich hören ja ah okay mein
Audio war glaube ich falsch eingestellt
noch mal man man sieht ja in in Filmen
immer wieder auch reguläre Ausdrücke
oder Ergebnisse von regulären Ausdrücken
aufploppen wie z.B den
RegEx back
ein bis
3 für für IP-Adressen allerdings ist das
ist das eher
suboptimal ja das ist definitiv eher
suboptimal und erhöht glaube ich nicht
unbedingt das Verständnis für reguläre
Ausdrücke genauso wenig wie quasi
irgendwelcher kommandozahlen Output für
hacking verwendet wird was auch nicht
das Verständnis erhöht wenn jemand in
einem in einer Kommandozeile in einem
Programm in irgendeinem Editor
irgendeiner Zeile etwas ändert und flup
ist alles gehackt
also tatsächlich ist vielleicht auch so
ein bisschen mit ähnlich mit regulären
Ausdrücken
in Film wobei ich die tatsächlich selbst
noch nicht so häufig gesehen habe
aber was IP-Adressen angeht ist der
reguläre Ausdruck dann ja auch schon ein
kleines bisschen komplexer
ähm und da ist es halt irgendwo einfach
wichtig den Weg zu finden dass der
Ausdruck so wie es gewünscht ist
gematcht wird
ähm und eben nicht irgendwas gematcht
wird und dabei noch irgendwas dabei ist
was
quasi nicht gematcht werden sollte aber
das ist ja auch insgesamt so eine
abwgung die man da machen muss zwischen
mein Ausdrück Match präzise und exakt
nur auf das was ich matchen will und
mein Ausdruck ist so kompliziert dass
den zu evaluieren eine längere Zeit
dauert ja
das ist korrekt dass ist durchaus dazu
diesen ja gewissen Optimierung kommen
kann dass ich als Programmiererin die
Verantwortung derf habe genau darüber
nachzudenken okay wann sollte dieser
Ausdruck matchen und wann eben nicht
also was S z.B IP-Adressen angeht gibt
es da ja zum Glück auch eine ja ziemlich
genaue Definition in einem RC ähm bei
Mailadressen ist es ja im Grunde
genommen ähnlich ähm so dass das dann
quasi so ein bisschen als plaupasser
verwendet werden kann und das sind dann
quasi diese Standardfälle für die es
häufig schon reguläre Ausdrücke gibt
die schon vorgefertigt sind die viele
Leute schon verwendet haben und die man
dann entsprechend auch nutzen kann und
im besten Fall auch verstehen sollte was
da passiert da empfehle ich dann auch
solche Tools wie recx 101 ähm wie
entsprechend auch reguläre Ausdrücke
erklären können damit die Person die vor
einem rechnersitz in der Lage ist zu
verstehen hey was wird ja eigentlich
gemacht und wie funktioniert es apropos
Optimierung ist es möglich durch die
Wahl der Programmiersprache ein redos
teilweise oder sogar komplett zu
umgehen da kann ich nur mit einem
eindeutigen Jin Antworten es kommt an
der Stelle nämlich auf die
dahinterliegende RX engine an also der
Teil der Programmiersprache oder die
Bibliothek die reguläre Ausdrücke im
Endeffekt auswertet
und da kommt es darauf an ob die so
implementiert ist diese rückreferenz und
Rekursion auftritt oder nicht für viele
bekannte Programmiersprachen ist so
implementiert weil das natürlich auch in
anderen Fällen eine gewisse Optimierung
ist und da sind wir auch wieder bei
dieser Frage
Optimierung versus Komplexität
und wie die Person von dem Rechner das
am besten entscheidet aber die Wahl der
Programmiersprache kann etwas daran
ändern es gibt beispielsweise RX engines
in Rust oder go oder in C++ gibt's auch
eine RX Engine die das nicht
implementiert hat aber gerade was so be
also ich will nicht sagen dass oder Rust
und ähnliche Sprachen nicht so bekannt
sind aber gerade solche Sprachen die
häufig im webkontext verwendet werden
wie
JavaScript oder quasi so eine Allrounder
Sprache sind wie pythen da ist es dann
so dass die Sprachen bzw recx engines an
sich wohnerabel dazu sind aber ich würde
jetzt nicht die Wahl der
Programmiersprache davon abhängig machen
ob da ein reados auftreten kann dafür
ist das Problem einfach nicht groß genug
ist es halt einfach etwas was im
Hinterkopf behalten werden sollte wenn
rxes geschrieben werden du hast ja als
weitere Möglichkeit ein ein redos zu
vermeiden hast du ja eine statische
Überprüfung
in in deinem Talk erwähnt wie wie
funktioniert so eine statische Analyse
dann hat man da einen recx der ein recx
passt um zu gucken ob dort bestimmte
problematische Ausdrücke drin sind
im Grunde genommen also ich habe das
entsprechende
paper dazu auch noch in den Slides drin
wenn sich da jemand genauer einlesen
möchte im Grunde genommen sind ja
bestimmte rexattern kann und diese
rexattern können ja auf auf regulären
Ausdrücken die in Code gefunden werden
oder die einfach so als Eingabe
verwendet werden überprüft werden also
es ist im Grunde genommen eine gewisse
Art des pasens aber nicht so dass die
rxis an sich ausgewertet werden und
damit getestet werden wobei das
natürlich auch ein Ansatz wäre
m in in deinem live Beispiel hattest du
ja ganz viele a und dann ein ein B am
Ende macht dieses B B da ein ein
Unterschied braucht man das bei pyon
ansonsten die Überprüfung Weg optimiert
im Grunde genommen ist die Überprüfung
ja sonst quasi dass ich immer in einem
akzeptierten Endzustand bin das B sorgt
allerdings dafür dass ich eben nicht in
einem akzeptierten Endzustand bin und
alle Wege die gegangen werden können bis
das B erreicht wird überprüft werden
müssen also ich hatte auf meinen slides
ja quasi auch diesen Automaten für den
Ausdruck
da waren sehr viele AR drauf
ich habe da jetzt nicht die Rückkehr zu
dem nicht akzeptierten Zustand für den
Rest des Alphabets eingezeichnet aber im
Grunde genommen sorgt das B dafür bzw
sorgt das B am Ende dafür dass quasi der
Weg zurückgegangen wird und die
Validierung für alle Wege parallel
erfolgen muss bzw nicht parallel sondern
entsprechend rekursiv je nach
Implementierung eben das das heißt ohne
ohne das B ist man immer in in einem
erfolgreichen Zustand und mit dem B erst
quasi tut das Tracking dann auftreten
genau wenn ich also alles außer Arm
Grunde genommen und das war in dem Fall
dann entsprechend das
B etwas etwas mehr generell gefragt
woher weiß ich dannn ob ein Rex für mein
Problem geeignet ist und wann kann ich
Rex überhaupt sinnvoll verwenden oder
muss ich jetzt einfach immer Angst davor
haben dass ich wenn ich ein RX irgendwo
verwende ich eine redosattacke
unterliegen
könnte also im Grunde genommen ist die
Einsatzmöglichkeit
gerade so ein Bereich
inputvidierung oder ich erhalte
also inputvidierung von Usern oder ich
erhalte von einem anderen Programm etwas
und möchte überprüfen ob das
entsprechend passt oder ich möchte m in
einem bestimmten pattern beispielsweise
IP-Adressen überprüfen ob etwas ob eine
spezielle Eigenschaft
was weiß ich fängt die mit 1 2 an oder
mit 10 oder so
das das eben erfüllt ist
ähm und dass da quasi noch so eine
genauere Präzisierung stattfindet
für solche Dinge sind R Access eine
tolle Sache
ähm die sicherlich zu Problemlösung
beitragen können also das sind eben
diese klassichchen Fälle der
inputvidierung wenn ich sowieso schon
ein sehr genaues Muster habe dem etwas
folgen muss
ähm und da gibt es teilweise auch schon
Bibliotheken die das entsprechend
implementieren oder so eine Validierung
an sich schon vornehmen die im Endeffekt
dann auch wieder auf Rais beruhen die in
dem Fall dann auch entsprechend diese
Aufgabe schon übernehmen und ansonsten
sind rxes natürlich ein schöner ja prin
Teaser und ein Thema was man sicherlich
overengineieren kann und wo man in der
Lage ist in ein tiefes rabbit Hool zu
fallallen vericher man kann bestimmt bei
sehr vielen rxen dann auch in die
Richtung von von codegolf gehen also
versuchen ein einen bestimmten Ausdruck
in so so wenig Zeichen wie möglich
funktional darzustellen genau
m irgendeine Frage hatte ich noch aber
sie ist mir jetzt leider
entfallen ich glaube ich ich schaue noch
mal ob es sonst noch Fragen gab
ansonsten war es das glaube ich
dann ansonsten kann ich auch sehr gerne
noch mal auf mein letzten slide
verweisen und den marodon Handel und
meine Mailadresse falls jemand ähm noch
im Nachhinein mehr Fragen hat oder
Anregungen oder Wünsche genau dann würde
ich mich bei Dir bedanken für diesen
tollen Talk danke dass du hier warst und
Fragen beantwortet hast
ähm ja danke schön für die Fragen und
danke dass ich hier sein konnte und ich
wünsche allen die hier zuschauen noch
einen wundervollen Tag und ein tolles
feierchance danke
schön