Adams State University. Wie man Websites hackt. Teil 1Sprechen wir über unseren nächsten Angriff. Ich werde Ihnen sagen, wie die Server Sie identifizieren. Zu diesem Zweck wird das HTTP-Protokoll zwischen dem Browser und dem Server verwendet, ohne den Status zu speichern, wenn die Kommunikation mit dem Server über unabhängige Anforderungs-Antwort-Paare erfolgt. Daher vergisst der Server Sie, sobald die Verbindung hergestellt ist, und merkt sich bei der nächsten Sitzung nicht mehr, wer Sie sind.

Er erinnert sich jedoch an Sie, während Sie die Webanwendung verwenden, denn wenn Sie die Dinge, die Sie kaufen möchten, in den Warenkorb legen, können Sie weiter einkaufen und wieder zurückkehren, um den Inhalt Ihres Warenkorbs anzuzeigen. Die Implementierung von "Erinnern" erfolgt mithilfe von Sitzungsidentifikations-Cookies. Sobald Sie sich beim Server anmelden, wird ein Cookie generiert, bei dem es sich um eine eindeutige Folge von Buchstaben und Zahlen handelt, und an Ihren Browser gesendet, der dieses Cookie lokal auf Ihrem Computer speichert. Danach gibt der Browser mit jeder Ihrer Anforderungen für eine einzelne Sitzung Cookies an den Server zurück. Durch den Empfang dieser Cookies versteht der Server, welche Art von Benutzer mit dieser Anfrage darauf zugreift. Dies ist die häufigste Methode, um den Benutzer zu identifizieren, der die Webanwendung verwendet.
Die nächste Art von Angriff heißt Cross-Site-Scripting, XSS. Die Idee hinter diesem Angriff ist, dass ein Angreifer eine Website zwingt, schädlichen Code anzuzeigen, normalerweise in Form von JavaScript, der dann im Browser des Benutzers ausgeführt wird. Ein solcher Angriff kann jeden Zweck verfolgen, wird jedoch am häufigsten verwendet, um die Sitzungskennung des Opfers zu erhalten. Der Wert der Sitzungs-ID besteht darin, dass sie als Kennwort betrachtet werden kann, da sie Sie identifiziert. Durch die Erfassung der Sitzungskennung kann sich ein Angreifer mithilfe eines Proxyservers verkleiden, um mit dem Zielserver zu kommunizieren. Die Ziele eines solchen Angriffs können der Wunsch sein, in Ihrem Namen zu sprechen, einige Aktionen zu automatisieren, z. B. Spam, in Ihrem Namen, oder einen Virus einzuführen.
Wenn Sie in einer Webanwendung nach Sicherheitslücken für XSS-Cross-Site-Scripting suchen, suchen Sie nach einem Eingabefeld, in das Sie einige Informationen eingeben, an den Server senden und sehen können, welches Ergebnis im Browserfenster angezeigt wird.

Ich gebe den Standort des Gebäudes falsch ein und gebe Plachy Hall an, die Adresse der Halle des Basketballteams unserer Universität. Der Webserver erhält diese Informationen und versteht, dass der Professor für Informatik ein „Nerd“ ist, der nicht am Standort einer Sportmannschaft leben kann, und gibt eine Fehlermeldung aus: „Plachy Hall ist falsch“!
Die Suchfelder sind in dieser Hinsicht am anfälligsten. Hier können Sie einige eher dunkle Begriffe eingeben und dann sehen, was Sie dafür erhalten. Meistens erhalten Sie einen Hinweis, in dem die möglichen richtigen Optionen aufgeführt sind, die ein Angreifer nutzen könnte.
Als nächstes müssen Sie prüfen, ob Sie Ihren Schadcode einfügen und dann ausführen können. Wir werden versuchen, einen XSS-Angriff mit JavaScript zu organisieren.

JavaScript-Code wird immer durch Öffnen und Schließen des Skript-Tags sowie des OR-Operators unterschieden. Anwendungsentwickler sind nicht ganz dumm, deshalb haben sie einen Filtermechanismus namens "Desinfektion" eingerichtet. Es bettet sich in den Code ein, prüft, ob gefährliche Zeichen vorhanden sind, und entfernt sie, wann immer dies möglich ist. Der einfachste JavaScript-Desinfektionstest sieht folgendermaßen aus:
<script>alert(“Testing”)</script>
Aber Hacker sind etwas schlauer, also haben sie
ha.ckers.org/xss.html . Ich habe keine Zeit, Ihnen diese Website zu zeigen, aber dort finden Sie die ausgefeiltesten Möglichkeiten, um Steuerelemente zu umgehen, die Anwendungsentwickler versucht haben, in ihre Programme einzufügen, um gefährliche Zeichen zu entfernen. Es gibt also einige ziemlich clevere Möglichkeiten, mit denen ein Hacker in die Anwendung gelangen kann.
Sprechen wir also darüber, wie der XSS-Angriff verlaufen wird. Wir haben einen Webserver für die "Fakultätsseiten", auf dem wir den Schadcode eingeben werden. Wir haben Eve, die hacken wird, aber wir haben etwas auf dieser Folie verpasst - wir haben das Opfer vergessen. Das Gute an einem XSS-Angriff ist, dass Sie dafür niemanden einstellen müssen. Ich meine, diesmal werde ich kein Opfer sein, weil Eva mein Passwort hat und mit meinem Konto machen kann, was sie will. Deshalb verlässt Eva das große Spiel und jagt die kleinen Jungen nicht mehr. Lassen Sie uns unser Opfer auf die Bühne bringen (Publikum lacht, weil auf der Folie ein Foto eines der Fakultätsprofessoren erscheint).
Nachdem das Opfer seinen Platz eingenommen hat, wollen wir sehen, wie sich der Angriff entwickelt. Angenommen, Eve hat es geschafft, den schädlichen JavaScript-Code auf dem Server zu hosten, auf den unser Opfer mit ihrem Konto eintreten wird.
Dies ist wichtig, da das Opfer, sobald es sich am Server anmeldet, eine Sitzungskennung erhält, die Eva abzufangen versucht. Dies ist ein sehr wichtiger Teil des Angriffs. Wenn das Opfer eine Webseite anfordert, die schädlichen JavaScript-Code enthält, wird dieser Code im Browser des Opfers ausgeführt und sendet Eva die Sitzungskennung.

Nachdem Eve die Sitzungskennung erhalten hat, kann sie ihren Proxyserver verwenden und tun, was sie will, und sich als Opfer verkleiden. Das einzige fehlende Teil des Mosaiks ist das bösartige JavaScript selbst, das der Hacker in die Seite einfügen muss und das unsere Sitzungs-ID des Opfers erfassen und an den Angreifer weitergeben muss.
Es ist sehr einfach. Wir haben JavaScript-Code, der mit dem Öffnen und Schließen des Tags beginnt und endet:
<script>
Die erste Codezeile erstellt ein Bild auf die gleiche Weise wie in JavaScript. Ein Bild wird dynamisch für jede Seite erstellt. Sie wissen, dass das Herzstück eines jeden Bildes eine Datei ist, die das Bild enthält. Daher müssen wir dem Browser mitteilen, wohin er gehen soll, um dieses Bild zu erhalten. Dies wird in der zweiten Zeile angezeigt, in der sich der Link zur Website des Hackers befindet. Der Browser ist jedoch der Ansicht, dass dies genau der Ort ist, an dem sich das gewünschte Bild befindet. Er wird auf Eves Website nach document.cookie fragen, weil er glaubt, dass dies die Bilddatei ist, die er benötigt.
Dies ist jedoch überhaupt keine Bilddatei, sondern eine Sitzungskennung, die wir mit JavaScript erfassen möchten. Wie Sie sehen können, ist das Abrufen einer Sitzungs-ID ziemlich einfach. Die dritte Zeile, die im Code zur Ausführung eines XSS-Angriffs nicht verwendet wird, enthält einen Alarm, der ein Popup-Fenster im Browser mit einer Angriffsmeldung auslöst. Dies geschieht speziell für unser Beispiel, da ein echter XSS-Angriff vom Opfer völlig unbemerkt erfolgt.

Laden wir Eve ein und sehen, wie sie Cross-Site-Scripting angreift.
Eve Hacker: Danke Dr. Loveland! Das erste, was ich tun muss, ist ein paar Dinge zu schließen, die wir nicht brauchen. Wir brauchen den Burp Suit-Proxy nicht mehr, also schließe ich ihn. Zweitens muss ich den Webbrowser neu konfigurieren und auf die Standardeinstellungen des Proxysystems umstellen.
Gehen wir jetzt zur Anmeldeseite von Dr. Lovelands Website, denn wenn Sie sich erinnern, habe ich ihr Passwort und kann die Website jederzeit anstelle von ihr betreten. Wie bereits erwähnt, ist Dr. Loveland ziemlich faul. Sie verwendet ein abgelaufenes SSL-Zertifikat. Daher muss ich die Sicherheitsausnahmen bestätigen, um zur Anmeldeseite zu gelangen. Da ich das Passwort kenne, kann ich ihre Webseite bearbeiten. Wie wir bereits wissen, befindet sich auf der Seite zum Bearbeiten persönlicher Informationen eine Sicherheitslücke in der Zeile "Gebäudestandort", "Gebäudestandort", und hier werde ich mein schädliches JavaScript eingeben.

Ich habe diesen Angriff vereinfacht, daher werde ich den Code in Wirklichkeit nicht an den Server senden, sondern stattdessen ein Popup-Fenster mit der Meldung aufrufen, dass jemand versucht, mich anzugreifen. Nachdem ich die Voraussetzungen für den Angriff geschaffen habe, kehre ich zur Autorisierungsseite zurück und melde mich ab. Jetzt müssen Sie nur noch warten, bis ein Opfer erscheint, das diese Anwendung verwenden möchte.

(Eve setzt eine Baseballkappe auf und posiert als Fakultätsprofessor Stephen Eldridge.)
Ich bin gerade von einem faszinierenden Treffen zurückgekehrt, bei dem wir außerhalb der Geschäftszeiten besprochen haben, welches Auto auf dem Parkplatz Vorrang haben soll - ein Subaru oder ein Jeep, und dann kam uns der Gedanke, dass der Unterschied ein Schiebedach im Auto sein könnte. Jetzt muss ich mich anmelden und meine Kontaktdaten überprüfen, da ich das nächste Meeting außerhalb der Klasse nicht verpassen möchte, da meine Daten nicht verfügbar waren. Also melde ich mich bei meiner Webanwendung unter dem Login Saldrich und meinem Passwort an.

Also, alles sieht wie gewohnt aus, ich sehe auf meiner Seite als Professor für Mathematik nichts Schlechtes, alle Kontaktinformationen sind in Ordnung.
Oh mein Gott, meine Uhr zeigt, dass bis zum nächsten Treffen nur noch 2 Minuten übrig sind! Jetzt werde ich Dr. Loveland treffen, also muss ich auf ihre Seite gehen und sehen, ob ich etwas Schmutz auf ihr ausgraben kann, um ihn bei dem Treffen zu erwähnen. Also klicke ich auf den Link Susan Loveland, komme zu ihrer Seite und ... Dr. Eldridge, Ihre Seite ist gehackt!

(Professor Eldridge nimmt seine Baseballkappe ab und verwandelt sich in Eva.)
Nachdem ich Ihre Sitzungs-ID habe, kann ich meinen Proxyserver verwenden und mich als Sie, Dr. Eldridge, verkleiden und in Ihrem Namen tun, was ich will. Ich gebe Ihnen das Wort, Dr. Loveland!
Susan Loveland: Danke, Eva! Ich wollte erwähnen, dass unsere Fakultätsseitenanwendung auf der Grundlage eines der neuesten Webframeworks entwickelt wurde - Python Django Web Framework, das über ein hervorragendes Desinfektionssystem für Eingabedaten verfügt, das gefährliche Zeichen aus dem JavaScript-Code entfernt. Damit Eve ihren Angriff ausführen kann, habe ich es daher ausgeschlossen, den Wert des Felds "Gebäudestandort" auf das Vorhandensein solcher Zeichen zu überprüfen.

Wie erfolgreich sind Cross-Site-Scripting-Angriffe? Ungefähr 80-90% der Websites verfügen über einen clientseitigen Mechanismus zum Verwalten von Sicherheitslücken. Das Versagen, XSS-Angriffen zu widerstehen, ist die häufigste Sicherheitsanfälligkeit von Web 2.0-Anwendungen, die mehr mit Endbenutzern interagieren.
Sie haben wahrscheinlich von einem der bekanntesten „Würmer“ von Samy Cross-Site-Scripting gehört, dessen Autor Samy Kamkar 2005 erfunden hat, wie man die Eingabefilterung des sozialen Netzwerks MySpase umgeht. Er hat JavaScript auf seiner Seite platziert, genau wie Eva es mit meiner Seite getan hat. Dieses Skript hat zwei Dinge getan: Samy als Freund zum Opfer hinzugefügt und sich selbst auf die Profilseite des Opfers kopiert. Anfangs ging dieser Angriff sehr langsam voran, da nur wenige Leute auf Samys Seite gingen und Freunde wurden, aber allmählich verbreitete sich das Virus immer mehr und die Infektion begann wie eine Lawine zu wachsen. Dieses Beispiel diente der Veranschaulichung der Fähigkeiten des XSS-Angriffs, da mehr als eine Million Freundschaftsanfragen in wenigen Stunden die MySpase-Site "zum Absturz gebracht" haben. Daher können die Folgen dieser Angriffe sehr schwerwiegend sein.
Die letzte Art von Angriff, über die ich heute sprechen möchte, sind Zugriffskontrollangriffe oder Zugriffsangriffe. Bei einem solchen Angriff möchte der Hacker Informationen erhalten, auf die er keinen Zugriff hat. Es gibt mehrere Sicherheitslücken, auf die der Zugriffsangriffsvektor abzielt.
Anwendungsentwickler vergessen häufig, dass sie Dateien im Stammverzeichnis eines Dokuments auf einem Webserver hinterlassen haben. Wenn Sie ihre Existenz feststellen können, können Sie diese Dateien anzeigen, die häufig vertrauliche Informationen enthalten.
Eine andere Möglichkeit, die Sicherheitsanfälligkeit zu finden, besteht darin, die URL sehr genau zu betrachten. Wenn Sie beispielsweise eine Adresse dieser Art unter
app.com/ViewDoc.php?docid=1280149120 sehen , können Sie die Nummern am Ende des Links leicht durchsuchen, um ein Dokument zu erhalten, das nicht für Ihre Augen bestimmt ist.
Viele Anwendungen sind für verschiedene Benutzerebenen konzipiert und verfügen über einen integrierten Zugriffsmechanismus, der häufig auf Anforderungen mit den folgenden Parametern
app.com/login/home.jsp?admin=false basiert. Sie können also versuchen, die Site mithilfe der Adressersetzung in der Zeile
aufzurufen zu admin = true.
Tatsächlich ist die häufigste Sicherheitsanfälligkeit bei der Zugriffskontrolle die fehlerhafte Implementierung der Autorisierungsfunktion. Jetzt wird Eva dies demonstrieren.
Eve Hacker: Danke, Dr. Loveland. Um den letzten Angriff auszuführen, müssen Sie sich nur die URL unserer Webanwendung genau ansehen. Jetzt werde ich das Bewerbungsfenster so erweitern, dass die Zeile mit der Adresse auf Dr. Lovelands Seite vollständig auf den Bildschirm passt. Ich muss dieses nervige JavaScript, das ich installiert habe, loswerden.
Wir sehen, dass die Adresse von Dr. Lovelands Seite
localhost / SampleSite / Faculty / index-1.html lautet . Wenn wir zur Seite von Dr. Eldridge wechseln,
lautet die Adresse
localhost / SampleSite / Faculty / index-2.html .
Denken Sie nicht, dass hier dieselbe Vorlage verwendet wird? Diese Adresszeilen interessieren mich jedoch nicht, da sie keine Informationen eingeben können. Ich möchte also zum Anmeldeformular von Dr. Loveland gelangen. Wenn ich mich unter ihrem Namen anmelde, kann ich ihre persönlichen Daten bearbeiten. Aber schauen wir uns die URL der Seite an, an deren Ende sich IndexForm-1 befindet, und Sie können sich vorstellen, dass möglicherweise die Möglichkeit besteht, auf das Datenformular von Dr. Eldridge zuzugreifen.

Die Frage ist also, ob wir zu seinem Formular gelangen können, ohne uns in seinem Namen anzumelden. Lass es uns versuchen. Ich ändere die Einheit auf zwei, sodass die Adresse die Form
localhost / SampleSite / Faculty / indexForm-2.html hat ,
drücke die Eingabetaste und eine Seite mit den persönlichen Informationen von Dr. Eldridge wird angezeigt.

Vor uns liegt ein Fehler, den Dr. Loveland-Studenten vergessen haben zu beheben. Die Anwendung weist eine Sicherheitsanfälligkeit auf, die es ihr ermöglicht, in die Seite eines anderen einzudringen, ohne das Login des Opfers einzugeben.
Dr. Eldridge ist eine sehr nette Person, ich möchte ihn nicht ärgern, ich habe nichts gegen ihn, aber zum Lachen werde ich etwas auf seiner Seite lassen. Lassen Sie mich seinen Vor- und Nachnamen verzerren und gleichzeitig die Position von "Professor" zu "Juniorlehrer" korrigieren.

Jetzt sende ich die korrigierten persönlichen Informationen an den Server. Wenn ich jetzt die Eldridge-Seite betrete, können Sie darauf die von mir vorgenommenen Korrekturen sehen.

Also, Dr. Loveland, wenn Sie Probleme mit Dr. Eldridge haben, wenn er beschließt, Sie nach den Vorträgen festzunehmen, sagen Sie es mir einfach und ich werde alle seine Informationen löschen!
Susan Loveland: Danke für die Unterstützung, Eve! Ich möchte noch eine Sekunde über die Sicherheitsanfälligkeit bei der Zugriffskontrolle sprechen. Für Leute, die wie ich gerne in den Code eintauchen, werde ich erklären, was während dieses Angriffs passiert ist.

Diese Folie zeigt, wie Sie ein Formular mit persönlichen Informationen ausfüllen. Die letzte Zeile ist genau das, was Eva interessiert. Diese Klasse schützt form_index vor den schnellen Funktionen @ login-required und @authUser und prüft, ob sich jeder, der die Werte in den Formularfeldern ändern möchte, dafür beim System anmelden muss. Die Entwickler haben dies jedoch vergessen und die obligatorische Erwähnung dieser Schnellfunktionen im Zusammenhang mit dem Ausfüllen des Formulars nicht hinzugefügt.
Der angezeigte Code prüft, ob das angeforderte Formular mit der Person übereinstimmt, die sich am System angemeldet hat. Da es jedoch nicht korrekt verwendet wurde, konnte Eve diese Sicherheitsanfälligkeit in der Anwendung erkennen.
Ich stelle fest, dass 78% aller Websites Zugriffslücken haben. Im April letzten Jahres entdeckten einige Hacker eine Sicherheitslücke auf dem Campus der Berkeley University - dies waren versteckte Dateien, die Entwickler auf dem Dokumentenserver des Webservers hinterlassen hatten. Hacker konnten diese Dateien einsehen und Sozialversicherungsnummern und vertrauliche medizinische Informationen für mehr als 160.000 Menschen erhalten. Sie sehen also, wie schwerwiegend die Folgen eines Zugriffskontrollangriffs sein können.
Ich möchte im Zusammenhang mit dem heutigen Gesprächsthema einige weitere interessante Fakten erwähnen. In letzter Zeit hat die Aufmerksamkeit der Regierung für die Cybersicherheit stark zugenommen. So verzeichnete das Verteidigungsministerium allein im Jahr 2008 mehr als 360 Millionen Hacking-Versuche. Für die Verbesserung des Cybersicherheitssystems im Bereich der Informationstechnologien im Jahr 2010 sollen rund 75,8 Mrd. USD ausgegeben werden. Dies sind 7,2% mehr als für diese Ziele im Jahr 2009. Laut CNN Money Magazine gehörten Internet-Sicherheitsspezialisten 2009 in den USA zu den gefragtesten Berufen. Das durchschnittliche Jahreseinkommen der Berater im Bereich Computersicherheit belief sich auf 99,7 Tausend Dollar, das Maximum auf 152 Tausend Dollar. Prognosen zufolge wird der Bedarf an solchen Spezialisten von 2006 bis 2016 um 27% steigen.
Ich möchte sagen, dass die Fakultät für Informatik kürzlich die Möglichkeit hatte, einen Associate Degree in Internet Computing und Netzwerksicherheit zu erwerben. Dies ist also ein guter Ausgangspunkt, um eine Karriere in diesem Bereich zu beginnen.
(setzt einen schwarzen Hut auf)
Eve Hacker: Ich möchte Sie für einen Moment unterbrechen, Dr. Loveland! Für zukünftige Lehrer, die in diesem Publikum anwesend sind, stelle ich fest, dass Sie sich jederzeit an die Mafia wenden und einen Vertragshack für sie durchführen können, wenn Sie diese Spezialität beherrschen und sich eines Tages in einer Situation befinden, in der Sie die versprochene Gehaltserhöhung nicht erhalten. Dies wird eine hervorragende Erhöhung des Gehalts eines Informatiklehrers sein.
(nimmt seinen Hut ab)
Susan Loveland: Ich möchte den Menschen, die einen ernsthaften Beitrag zur Erstellung der heutigen Präsentation geleistet haben, den Entwicklern der „Fakultätsseiten“ danken. Ich denke, dass ich dank ihrer harten Arbeit dieses Publikum ohne die Handschellen und die Eskorte der Campus-Polizei verlassen kann. Das einzige "überlebende" Mitglied dieser Gruppe ist Ryan Goldsworthy, der eine wichtige Rolle bei der Entwicklung dieser Seiten spielte. Ich möchte Dr. Stephen Eldridge für seinen Sinn für Humor und für das Einreichen einer persönlichen Seite danken, um die Angriffe zu demonstrieren, den Abteilungsleitern, die großzügig zu meinem Fakultätsseitenprojekt beigetragen haben, und dem Computer Computing Service auf dem Campus für den Schutz vor solchen Leute wie Eva.
Danke für die Aufmerksamkeit.
Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung
aufgeben oder Ihren Freunden empfehlen, einen
Rabatt von 30% für Habr-Benutzer auf ein einzigartiges Analogon von Einstiegsservern, das wir für Sie erfunden haben: Die ganze Wahrheit über VPS (KVM) E5-2650 v4 (6 Kerne) 10 GB DDR4 240 GB SSD 1 Gbit / s von $ 20 oder wie teilt man den Server? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).
VPS (KVM) E5-2650 v4 (6 Kerne) 10 GB DDR4 240 GB SSD 1 Gbit / s bis zum Frühjahr kostenlos, wenn Sie ein halbes Jahr bezahlen, können Sie
hier bestellen.
Dell R730xd 2 mal günstiger? Nur wir haben
2 x Intel Dodeca-Core Xeon E5-2650v4 128 GB DDR4 6 x 480 GB SSD 1 Gbit / s 100 TV von 249 US-Dollar in den Niederlanden und den USA! Lesen Sie mehr über
den Aufbau eines Infrastrukturgebäudes. Klasse mit Dell R730xd E5-2650 v4 Servern für 9.000 Euro für einen Cent?