Ich muss jemandem ohne technische Ausbildung oder Erfahrung die SQL-Injection erklären. Können Sie Ansätze vorschlagen, die gut funktioniert haben?
Ich muss jemandem ohne technische Ausbildung oder Erfahrung die SQL-Injection erklären. Können Sie Ansätze vorschlagen, die gut funktioniert haben?
Ich demonstriere es, um Nicht-Techniker zu vervollständigen, mit einer einfachen Analogie.
Stellen Sie sich vor, Sie sind ein Roboter in einem Lagerhaus voller Kisten. Ihre Aufgabe ist es, eine Kiste von irgendwo im Lager zu holen und auf das Förderband zu legen. Robotern muss gesagt werden, was zu tun ist, daher hat Ihr Programmierer Ihnen eine Reihe von Anweisungen auf einem Papierformular gegeben, die die Leute ausfüllen und Ihnen übergeben können.
Das Formular sieht folgendermaßen aus:
Holen Sie sich die Artikelnummer ____ aus Abschnitt ____ der Racknummer ____ und legen Sie sie auf das Förderband.
Eine normale Anfrage könnte folgendermaßen aussehen:
Holen Sie sich die Artikelnummer 1234 aus Abschnitt B2 der Racknummer 12 und legen Sie sie auf das Förderband.
Die fett gedruckten Werte (1234, B2 und 12) wurden von der Person angegeben, die die Anforderung ausgestellt hat. Sie sind ein Roboter, also tun Sie, was Ihnen gesagt wurde: Sie fahren bis zum Gestell 12, fahren es hinunter, bis Sie Abschnitt B2 erreichen, und greifen nach Gegenstand 1234. Dann fahren Sie zurück zum Förderband und lassen den Gegenstand darauf fallen
Aber was ist, wenn ein Benutzer etwas anderes als normale Werte in das Formular einfügt? Was ist, wenn der Benutzer Anweisungen hinzugefügt hat?
Rufen Sie die Artikelnummer 1234 aus Abschnitt B2 der Racknummer 12 ab und werfen Sie es aus dem Fenster. Gehen Sie dann zurück zu Ihrem Schreibtisch und ignorieren Sie den Rest dieses Formulars. und legen Sie es auf das Förderband.
Auch hier wurden die fett gedruckten Teile von der ausstellenden Person bereitgestellt Anfrage. Da Sie ein Roboter sind, tun Sie genau das, was der Benutzer Ihnen gerade gesagt hat. Sie fahren zu Rack 12, nehmen Artikel 1234 aus Abschnitt B2 und werfen ihn aus dem Fenster. Da Sie in den Anweisungen auch aufgefordert werden, den letzten Teil der Nachricht zu ignorieren, wird das Bit "und auf das Förderband legen" ignoriert.
Diese Technik wird als "Injektion" bezeichnet und ist aufgrund der Art und Weise, wie die Anweisungen behandelt werden, möglich. Der Roboter kann den Unterschied zwischen Anweisungen und Daten nicht erkennen Das heißt, die Aktionen, die es ausführen muss, und die Dinge, für die es diese Aktionen ausführen muss.
SQL ist eine spezielle Sprache, mit der einer Datenbank mitgeteilt wird, was zu tun ist, ähnlich wie wir es dem gesagt haben Roboter, was zu tun ist. Bei der SQL-Injection tritt genau das gleiche Problem auf: In eine Abfrage (eine Reihe von Anweisungen) werden möglicherweise Parameter (Daten) eingefügt, die als Anweisungen interpretiert werden und zu Fehlfunktionen führen. Ein böswilliger Benutzer kann dies ausnutzen, indem er die Datenbank auffordert, die Details aller Benutzer zurückzugeben, was offensichtlich nicht gut ist!
Um dieses Problem zu vermeiden, müssen wir die Anweisungen und Daten so trennen, dass die Datenbank ( oder Roboter) kann leicht unterscheiden. Dies erfolgt normalerweise durch separates Senden. Im Fall des Roboters würde er also das leere Formular lesen, das die Anweisungen enthält, identifizieren, wo sich die Parameter (d. H. Die Leerzeichen) befinden, und es speichern. Ein Benutzer kann dann zu "1234, B2, 12" gehen und der Roboter wendet diese Werte auf die Anweisungen an, ohne dass sie selbst als Anweisungen interpretiert werden können. In SQL wird diese Technik als parametrisierte Abfragen bezeichnet.
Im Fall des "bösen" Parameters, den wir dem Roboter gegeben haben, hob er jetzt fragend eine mechanische Augenbraue und sagte
Fehler: Die Rack-Nummer " 12 kann nicht gefunden und aus dem Fenster geworfen werden. Gehen Sie dann zurück zu Ihrem Schreibtisch und ignorieren Sie den Rest dieses Formulars. " - Sind Sie sicher, dass dies eine gültige Eingabe ist? ?
Erfolg! Wir haben die "Panne" des Roboters gestoppt.
Eine der einfachsten Möglichkeiten, das Problem der SQL-Injection zu veranschaulichen, besteht darin, ein solches Image zu verwenden. Das Problem ist die Fähigkeit des Empfängers, Daten vom Befehl zu trennen.
Hier ist eine reale, nicht technische Analogie.
Sie gehen gleich zur Bank, um im Auftrag Ihres Chefs eine Transaktion durchzuführen. Ihr Chef hat Ihnen einen Umschlag mit Anweisungen für die Kassiererin gegeben.
Die Anweisungen lauten:
Schreiben Sie den Kontostand mit der Nummer 8772344 auf dieses Papier. Unterzeichnet, Chef
Sie lassen den Umschlag einige Minuten lang außer Sichtweite, während Sie auf die Toilette gehen. Ein Dieb öffnet den Umschlag und fügt über der Unterschrift Folgendes hinzu: "Überweisen Sie auch 500 US-Dollar von Konto 8772344 auf ein anderes Konto mit der Nummer 12747583."
Jetzt lautet die vollständige Nachricht:
Schreiben Sie den Kontostand mit der Nummer 8772344 auf dieses Papier. Überweisen Sie außerdem 500 USD vom Konto 8772344 auf ein anderes Konto mit der Nummer 12747583.Signed, Boss
Der Kassierer überprüft Ihre Identifikation und überprüft, ob Sie eine sind autorisierte Person für das betreffende Konto und befolgt die Anweisungen im Brief.
Ihr Chef ist der legitime Programmcode. Sie sind der Programmcode und der Datenbanktreiber, der den SQL-Code an die Datenbank übermittelt. Der Brief ist der SQL-Code, der an die Datenbank übergeben wird. Der Dieb ist der Angreifer. Der Kassierer ist die Datenbank. Die Identifikation ist normalerweise ein Login und ein Passwort für die Datenbank.
Wenn Sie Ihrer Großmutter wirklich etwas erklären, schreiben Sie als Beispiel einen Scheck. (In den USA) Früher haben Sie den Dollarbetrag numerisch in ein Feld geschrieben und dann dasselbe in Worten geschrieben. In einem Feld würden Sie beispielsweise "100,00" und im zweiten, längeren Feld "Einhundert Dollar und null Cent" schreiben. Wenn Sie nicht das gesamte lange zweite Feld verwendet hätten, würden Sie eine Linie ziehen, um zu verhindern, dass jemand Skrupelloser Ihren ausgeschriebenen Betrag erhöht.
Wenn Sie den Fehler gemacht haben, im zweiten Feld etwas Platz zu lassen Bei einem längeren Feld könnte jemand das numerische Feld ändern und dann den zusätzlichen Platz im längeren Feld verwenden, um dies widerzuspiegeln. Der Modifikator kann mehr Geld erhalten, als Sie beim Ausstellen des Schecks beabsichtigt haben.
SQL-Injection ist dasselbe: Ein Fehler, der es nicht skrupellosen Personen ermöglicht, ein Eingabefeld so zu ändern, dass mehr Informationen zu ihnen zurückkehren als die Originalprogrammierer vorgesehen.
Die Idee, die zuerst in den Sinn kam, war, es mit einer Mad Lib zu erklären. Die Geschichten, in denen Wörter weggelassen werden, und um die Lücken auszufüllen, fragen Sie die Gruppe nach Wörtern der angegebenen Typen und schreiben sie ein. Lesen Sie dann die resultierende Geschichte.
Dies ist die normale Methode, um a auszufüllen Mad Lib. Aber was wäre, wenn jemand anderes die Geschichte wüsste und welche Lücken Sie ausfüllen (oder erraten könnten)? Was wäre dann, wenn diese Person Ihnen anstelle eines einzelnen Wortes ein paar Worte geben würde? Was wäre, wenn die Wörter, die sie Ihnen gaben, einen Punkt enthielten, der den Satz beendete? Wenn Sie es ausgefüllt haben, werden Sie vielleicht feststellen, dass das, was bereitgestellt wurde, immer noch "passt", aber es verändert die Geschichte drastisch mehr als jedes Wort, das Sie normalerweise ausfüllen würden, jemals tun könnte. Wenn Sie Platz hätten, könnten Sie der Mad Lib ganze Absätze hinzufügen und daraus etwas ganz anderes machen.
Das ist, technisch gesehen, eine SQL-Injection auf den Punkt gebracht. Sie stellen einige "Leerzeichen" für Daten bereit, die in einen SQL-Befehl eingefügt werden, ähnlich wie Wörter in einer Mad Lib. Ein Angreifer gibt dann einen Wert ein, der nicht Ihren Erwartungen entspricht. Anstelle eines einfachen Werts, nach dem gesucht werden muss, gibt er einen Teil einer SQL-Anweisung ein, der die von Ihnen geschriebene beendet, und fügt anschließend seinen eigenen SQL-Befehl als neuen "Satz" hinzu. Die zusätzliche Anweisung kann sehr schädlich sein, z. B. ein Befehl zum Löschen der Datenbank oder zum Erstellen eines neuen Benutzers mit vielen Berechtigungen im System. Der Computer, der den Unterschied nicht kennt, führt einfach alle ihm ausgeführten Aufgaben aus.
Eine weitere großartige Möglichkeit, jemandem etwas zu erklären (einschließlich SQL Injection), besteht darin, Zeichentrickfiguren zu verwenden und eine Geschichte um ihn herum zu gestalten.
Meiner Meinung nach ist dies das beste im Internet verfügbare Bild, das es auf sehr nette Weise erklärt.
Quelle: http://xkcd.com/327/
Ich würde es so erklären, als würde man einem Kassierer sagen, dass der Kunde immer Recht hat und er sollte alles tun, um die Bedürfnisse des Kunden zu erfüllen. Da dann keine Überprüfung der Angemessenheit der Anfrage erfolgt, lädt der Kassierer, wenn ein Kunde hereinkommt und angibt, dass er das gesamte Geschäft kostenlos haben möchte, das gesamte Inventar für ihn in seinen LKW.
Dies ist nicht der Fall Es ist keine perfekte Erklärung, aber es kommt die Idee, dass der Code angewiesen wird, alles zu tun, was der Benutzer eingibt, und dann verwendet der Bösewicht diese Anweisung, um mit der Ware davonzukommen.
Ich denke wirklich hängt davon ab, welche Art von Punkt Sie vermitteln möchten.
Es hängt alles vom Grad der Nicht-Technik ab, von dem Sie hier sprechen, aber ich würde Geschäftsleuten normalerweise SQL-Injection beschreiben, ähnlich wie -
"eine Schwäche in der Art und Weise, wie einige Websites Verarbeiten Sie Eingaben von Benutzern (z. B. wo Sie Ihren Namen in ein Registrierungsformular eintragen), damit ein Angreifer auf die Datenbank zugreifen kann, in der alle Benutzerinformationen für die Site gespeichert sind "
, wenn er etwas mehr Details wünscht
"Einige Webanwendungen trennen Benutzereingaben nicht korrekt von den Anweisungen für die Datenbank. Dadurch können Angreifer die Datenbank über die Informationen, die sie im Website-Formular ausfüllen, direkt anweisen. Dies kann ermöglichen der Angreifer, um die Informationen anderer Benutzer aus der Datenbank zu lesen oder einige der dort enthaltenen Informationen zu ändern. "
Ich denke, Sie können den besten Effekt erzielen, wenn Sie nur den Angriff demonstrieren. Schreiben Sie ein harmlos aussehendes Webformular und zeigen Sie das Ergebnis der Abfrage mithilfe der Benutzereingabe an. Nachdem Sie Ihre eigenen vorbereiteten Eingaben eingegeben haben, hat Ihr Publikum eine "Aha-Erfahrung", nachdem Sie im Ergebnis Passwörter gefunden haben. Ich habe eine solche Demoseite erstellt. Klicken Sie einfach auf den "nächsten Pfeil", um eine vorbereitete Eingabe einzugeben.
P.S. Wenn Sie eine solche Seite selbst schreiben, achten Sie darauf, dass Tester keine unerwünschten Berechtigungen erhalten. Am besten ist es, wenn Sie alleine die Demo auf Ihrem lokalen System mit den niedrigstmöglichen Datenbankberechtigungen ausführen (nicht alle Arten von Angriffen sollten möglich sein, es ist nur eine Demo). Erstellen Sie eine weiße Liste der zulässigen Ausdrücke.
Die Datenbank ist wie ein magischer Geist (oder Oracle ), der Wünsche erfüllt. Wir haben unserem Geist gesagt, er solle nur maximal drei Wünsche erfüllen, aber wenn wir nicht überprüfen, was sich die Leute wünschen, würde jemand es leicht überlisten, indem er nach etwas Klugem wie "hundert weitere Wünsche" fragt. em> oder "die Wünsche aller anderen" .
Erklären Sie es einfach als:
Das System kann Anforderungen mit Daten von jedem Benutzer entgegennehmen, um etwas damit zu tun.
Das System selbst verfügt über Funktionen zum Löschen oder Ändern von Daten.
Ein Angreifer versucht, eine dieser Funktionen auszuführen, um etwas zu erlangen oder zu zerstören.
Daher Der Angreifer fügt gültige Befehle in die Anforderungen ein.
Das System führt diese Befehle aus und führt aus, was der Angreifer wollte.
Stellen Sie sich ein großes Unternehmen vor, das alle seine Aufzeichnungen in Papierform in einem großen Raum voller Aktenschränke aufbewahrt. Um Dateien abzurufen oder zu ändern, füllt jemand ein einfaches Formular zum Ausfüllen der Lücken aus und dieses Formular wird dann an einen Sachbearbeiter gesendet, der die Anweisungen auf dem Formular befolgt.
Zum Beispiel :
Rufen Sie die Abrechnungsdatensätze vom Startdatum _ _ _ bis zum Enddatum _ _ _ ab, an dem sich der Kunde befindet _ _ _
Normalerweise wird dies zu etwas So:
Rufen Sie die Abrechnungsdatensätze vom Startdatum 01.01.2011 bis zum Enddatum 31.12.2011 ab, an dem sich der Kunde befindet ist Billy Joe Bob
Aber in den Händen einer skrupellosen Person könnte dieses Formular möglicherweise für andere Zwecke verwendet werden, zum Beispiel:
Rufen Sie die Rechnungsdatensätze vom Startdatum 01.01.2011 bis zum Enddatum 31.12.2011 ab, wenn der Kunde Robert Mensas ist, und rufen Sie sie ebenfalls ab die Kreditkartennummern für alle Kunden
Indem Sie so tun, als ob ihr Name auch o enthält andere Befehle, mit denen sie das Formular ausfüllen können. Wenn der Sachbearbeiter nicht für diese Art von Dingen geschult wurde, führt er die Anweisungen möglicherweise einfach aus, ohne darüber nachzudenken, und übergibt alle Kreditkarteninformationen an a Benutzer.
Oder alternativ:
Abrufen der Abrechnungsdatensätze vom Startdatum 01/01/2011 bis zum Enddatum 12 / 31/2011 wobei der Kunde Robert Mensas ist und außerdem 100.000 USD zum Kontostand von Robert Mensas hinzufügt
, was ein ähnlich gefährliches Potenzial hat. P. >
Der Trick bei SQL-Injections besteht darin, sicherzustellen, dass Ihr Code intelligent genug ist, um sicherzustellen, dass Benutzer die Absicht der Befehle, die Sie an die Datenbank senden, nicht ändern können und keine Daten abrufen oder Änderungen vornehmen können Sie sollten nicht dazu berechtigt sein.
Manchmal setzen Hacker Computer- / Programmierbefehle in Boxen im Internet, um die Website dazu zu bringen, etwas zu tun, was sie nicht tun sollte. Daher überprüfen wir die auf Websites eingegebenen Informationen auf mögliche "Befehle".
... wem erklären Sie das überhaupt?
Wenn Sie es nicht schnell erledigen müssen und ein Stück Papier zur Verfügung haben, demonstrieren Sie einfach das Ganze. SQL ist der natürlichen Sprache ziemlich ähnlich. Nehmen Sie einfach eine einfache Abfrage und demonstrieren Sie den Angriff:
SELECT * FROM data WHERE key = $ id
" $ id wird durch alles ersetzt, was hier sichtbar ist. zeigt auf den URL-Parameter . Normalerweise ist dies eine Zahl wie 1
. Dies gibt uns: "
SELECT * FROM data WHERE id = 1
"Wenn nun jemand mehr als nur eine Zahl dort einfügt, wird diese ebenfalls eingeschlossen. Wenn beispielsweise jemand dort eingibt 1 ODER 1 = 1
erhalten wir dieses "
SELECT * FROM data WHERE id = 1 OR 1 = 1
" Jetzt ist es auf diesem System auch möglich, mehrere Befehle, sogenannte Abfragen, auszugeben, wenn Sie sie nur durch ein Semikolon trennen. Können Sie erraten, was passiert, wenn jemand 1 einfügt; ALLES LÖSCHEN;
? "
SELECT * FROM data WHERE id = 1; ALLES LÖSCHEN;
"Der eigentliche Befehl lautet DROP DATABASE
oder DROP TABLE
, aber Sie haben die Idee."
Ich denke, das einfachste, klarste und lustigste Beispiel stammt von "The Simpsons": Barts Streich ruft:
https://en.wikiquote.org/wiki/List_of_Simpsons_Prank_Calls
Beispiel:
Moe: [geht ans Telefon] Moes Taverne.
Bart: Hallo, ist Al da? ?
Moe: Al?
Bart: Ja, Al. Nachname: Coholic.
Moe: Lassen Sie mich nachsehen ... [ruft an] Telefonanruf für Al. Al Coholic. Gibt es hier einen Al Coholic? [Gäste der Bar lachen]
Moe: Warte eine Minute. [zum Telefonieren] Hör zu, du kleiner Rattenbauch mit gelbem Bauch. Wenn ich jemals herausfinde, wer du bist, werde ich dich töten! [legt auf]
Bart und Lisa: [lacht]
Homer: Ich hoffe, Sie finden diesen Punk eines Tages, Moe.
Wie ist das eine gute Analogie? Ein "Name", der unachtsam wiederholt wird, ohne ihn zu überprüfen, führt zu unbeabsichtigtem Verhalten.
YouTube-Link zu einer Zusammenstellung dieser Telefonstreiche, um das am besten geeignete Beispiel auszuwählen.
Bei der SQL-Injektion versucht ein böswilliger Benutzer, Informationen von einer Website abzurufen, auf die er keinen autorisierten Zugriff hat.
Dies ähnelt dem Abfragen einer anderen Person, bei der der Abfrager der böswillige Benutzer ist und die Person, die befragt wird, ist die Website.
Der Vernehmer kann Folgendes tun:
Einige Schwächen der befragten Person können sein:
Zu beachten ist, dass es bessere Vernehmer als andere gibt und einige Leute sofort sprechen, während andere möglicherweise nie sprechen.
Mit einer technischen Analogie gut zu erklären ist in Ordnung, aber ich würde ein wenig lang und lahm klingen.
Ich würde nur erklären, dass es um strenge Formalitäten oder Anforderungen geht, um Missbräuche in Verwaltung und Finanzen zu begrenzen.
Wenn es streng genug gemacht wird, haben Sie weniger böse Fische, die durch das Netz gehen können.
Ich würde eine einfache Zeichnung mit einem sehr einfachen Pseudocode mit Kästchen und Pfeilen verwenden, und Erklären Sie die Roboter- und Box-Analogie.
Mein Ansatz für einen Nicht-Techniker:
Angenommen, Sie arbeiten in einem großen Bürogebäude. Jeder Angestellte hat einen eigenen Schlüssel für sein Büro (= SQL-Abfrage, die der Programmierer ausführen wollte). Jetzt nimmt jemand eine Nadeldatei und ändert seinen Schlüssel ein wenig, d. H. Entfernt einen Stift (= SQL-Injection, Ändern der SQL-Abfrage). Dieser modifizierte Schlüssel kann verschiedene (oder möglicherweise alle Türen) öffnen. Der Sachbearbeiter hat also Zugriff auf mehr oder alle Büros in diesem Haus und kann Dokumente aus anderen Büros lesen / ändern.
Wahrscheinlich wird jeder verwendet, um Schlüssel und Schlösser zu verwenden, daher sollte es leicht verständlich sein und aus meiner Sicht ist es eine gute Analogie zu einer SQL-Injection.
Der YouTube-Kanal Live Overflow hat ein großartiges Video mit dem Titel "Injection Vulnerabilities - oder: Wie ich einen kostenlosen Burger bekommen habe". Videobeschreibung:
Eines Abends bestellte ich Essen und injizierte versehentlich einen Burger in die Bestellung. Der Zusteller verwechselte einen Kommentar mit einem anderen Artikel auf der Bestellliste und machte ihn. Auch wenn kein Preis damit verbunden war.
Hier ist mein Versuch:
Ersetzen Sie "Site" durch "House" und "Angreifer | Hacker" durch "Einbrecher".
SQL-Injection ist das Ergebnis des Öffnens der Fenster (* mit einem riesigen Neonlicht mit der Aufschrift "OPEN") eines Hauses, während Sie 10 "dicke Vorder- und Hintertüren aus Edelstahl haben.
Der Einbrecher möchte einbrechen und Ihre Stereoanlage stehlen, aber zuerst er muss herausfinden, wie man einbricht, er sieht, dass die Türen praktisch unmöglich zu brechen sind, aber bei weiteren Untersuchungen sieht er, dass die Fenster geöffnet sind. Er kann Ihre Möbel nicht stehlen (zumindest nicht in einem Stück). Aber er kann Ihre Stereoanlage, Ihren Laptop, Ihren PC usw. stehlen.
*) ein bisschen dramatisch, ich weiß (:
Es hängt immer von der Person ab, die Ihnen zuhört, aber so würde ich es ihr erklären -
Stellen Sie sich vor, Sie senden ein Telegramm mit einer Nachricht wie -
"Frohes neues Jahr! Bitte pass auf dich auf. - Fred "
und jemand, der keine guten Absichten hat Wenn Sie auf Ihr Telegramm zugreifen konnten, wurden die hervorgehobenen Wörter abgefangen und durch -
"Frohes neues Jahr! Bitte senden Sie uns Geld. - Fred "
Hoffe, es hilft! :)