HACKTIVITY-Konferenz 2012. Die Urknalltheorie: Die Entwicklung des Pentesting für mehr Sicherheit. Teil 1

Grüße an alle, wie geht es dir? Ich hoffe es geht dir gut, dann hör zu. Hören Sie, was mir immer passiert, wenn ich Amerika verlasse und nach Asien oder Europa komme, in all diese anderen Länder. Ich fange an zu reden, ich stehe auf der Bühne und fange an mit Leuten zu reden, ich sage ihnen ... wie man es politisch sagt ... Leute, die keine Amerikaner sind, sind auch verdammt nette Leute, und ich freue mich, sie zu sehen und zu hören.



Hören Sie, ich denke, Sie werden mich richtig verstehen, also entspannen Sie sich ein bisschen, strecken Sie Ihre Schultern, ich meine es ernst! OK, wenn ich meine Arbeit hier mache, möchte ich, dass du sozusagen mit mir in Kontakt trittst. Ich habe einen kabellosen Zugangspunkt und ein paar anfällige Anwendungen, und ich habe eine Idee, wie ich Ihre Programme in Unordnung bringen kann ... Letztes Jahr habe ich gesprochen und mich auf der Bühne betrunken, und dann kam ein Kritiker auf mich zu und sagte: “ Hey Joe, du hattest eine normale Präsentation, aber die Demo war eindeutig nicht genug! “ Aus diesem Grund wird meine gesamte Präsentation heute eine solide Demo sein, und ich frage mich, was Ihnen sonst noch nicht gefallen könnte.

Also, "Die Entwicklung des Pentesting unter Bedingungen erhöhter Sicherheit." Ich bin seit gut 10 Jahren im Netz und wie beschissen sie waren, sie sind gleich geblieben. Ich weiß nicht, ob Sie Erfahrung mit ihnen haben, aber das Netzwerk ist immer noch schlecht. Und die Anwendungen saugen immer noch. Was passiert gerade? Wir haben jetzt 50 Millionen Sicherheitsprodukte, die Ihre Anwendungen schützen, na und? - Scheiße! - Und du gehst mit ihnen ins Netz, was? - Scheiße! - Und wir haben eine Reihe von Dingen, die all das beschützen!

Also, was wird meine Arbeit heute sein? Wer bin ich Die meisten Networker kennen mich, ich bin ein Schwarzer bei Sicherheitskonferenzen, ja, ich bin es, derselbe Typ, den sie normalerweise sagen: "Nun, dieser hier, wie er ... ein farbiger Afrikaner ... ich habe ihn schon mal gesehen!"

Okay Leute, ich war einige Zeit damit beschäftigt, mich in Netzwerke zu hacken. Also, ich bin ein Cracker, ich bin ein Fluch, und wer mich kennt, weiß auch, dass ich gerne Rum und Coca-Cola trinke. Aber etwas hat sich in meinem Leben geändert, ich habe eine neue Freundin gegründet, und sie ist verrückt, weil ich zu viel trinke und sie wirklich nicht mag, wie ich esse. Deshalb muss ich reisen, also musste ich hierher kommen. Ich musste all dieses fette Gulasch essen. Also sag ihr bitte nicht, was ich esse und trinke.

Auf dieser Folie sehen Sie meinen ersten Auftritt auf der DefCon vor 10 Jahren, schauen Sie, dann gab es noch CRT-Monitore, erinnert sich jemand an sie?



Ich habe dort mit vielen Leuten gesprochen und wir haben mit ihnen „Flaggen erbeutet“. „Die Flagge erobern“ - es war einfach eine erstaunliche Erfahrung, die mein Leben auf wundersame Weise veränderte. Genau wie Jesus war ich bereit, „Halleluja!“ Zu rufen. Es war so erstaunlich.
Ich möchte also den Capture the Flag-Test für Anfänger erstellen. Als Anfänger haben Sie wahrscheinlich noch nie an Capture the Flag teilgenommen. Für diesen Test gibt es einen monatlichen Schulungskurs, der das Studium von Ver- und Entschlüsselungsproblemen, das Testen eines Netzwerks, das Testen von Malware, das Studium von Reverse-Engineering-Problemen, das Verwenden von Exploits und dergleichen umfasst. Dies ist eine sehr solide und unterhaltsame Veranstaltung. Kurz gesagt, lassen Sie uns versuchen, etwas Ähnliches zu tun.

Auf der Folie sehen Sie die Einstellungen für das drahtlose Netzwerk, ich bitte Sie, es nicht zu brechen. Wenn Sie auf ein Netzwerk namens joe-hacktivity-demo zugreifen möchten, können Sie dieses Passwort verwenden.



Hier befindet sich eine Textdatei. Der Grund für die Erstellung ist, dass Sie die Informationen einfach kopieren und in die Adressleiste des Browsers einfügen können. Normalerweise machen die Leute das mit Dingen wie Windows 7, aber in diesem Fall brauchen Sie nur einen Webbrowser. Wenn Sie also Firefox oder Chrome haben, müssen Sie nur Ihr iPad oder Ihren Laptop öffnen, diesen Text kopieren und auf die Website des Online-Buchladens gehen. Ich habe ein IDS Intrusion Detection System, ich habe Snort Box im Einsatz und wir werden dieses Netzwerk einfach betriebsbereit halten. Wir werden eine Reihe von Webanwendungen, eine Reihe von SQL-Injections und eine Reihe von Cross-Site-Skripts für diesen Host mit dieser Webanwendung verwenden. Dann haben wir noch eine "Box", in der eine Firewall konfiguriert ist, damit ich Sie um einige IDs und Firewalls herumführen kann. Wir steigen einfach ein, diskutieren darüber und machen dort einige interessante Dinge.

Muss ich also weiter erklären oder kann ich anfangen? OK, lass uns anfangen. Ich habe hier ein kniffliges Intrusion Detection System in meinem Laptop. Jetzt werde ich das Bild auf dem Bildschirm vergrößern, auf dem die Textdatei angezeigt wird. Sie können die Adresse in der Browserleiste überprüfen. Dies ist unsere Textdatei.



Ich werde Cross-Site-Scripting mit trivialem SQL implementieren. Wenn Sie jedoch ernsthafter mit der Anwendung experimentieren möchten, können Sie diese Textdatei mit zwei Anwendungen überprüfen. Die Anwendung 2.6, die auf der ASP.NET-Plattform entwickelt wurde, überprüft, ob das Netzwerk funktioniert. Hierbei handelt es sich um eine aktualisierte Version der DotNet-Plattform mit einer Cross-Site-Skriptbibliothek und einigen anderen Sicherheitsmechanismen sowie einer modifizierten Datei web.config zum Laden anderer Sicherheitsbibliotheken.

Die Anwendung von 2.7 ist dieselbe wie die vorherige, verfügt jedoch nicht nur über alle DotNet-Sicherheitsfunktionen, sondern auch über eine Firewall für Netzwerkanwendungen. Also, ich möchte mit dieser Anwendung um 2.35 "durcheinander" sein und ich werde darüber sprechen.



Wenn Sie mit den Grundlagen von Cross-Site-Scripting und SQL-Injection vertraut sind, werden Sie verstehen, was 2.6, 2.5 und 2.7 sind. Wir haben also diese Textdatei, die wir kopieren und einfügen können. Lassen Sie uns über den Parameter sprechen, den ich in die Adressleiste unserer Site einfüge. Dies ist bookdetail.aspx? Id = 2, und das Fragezeichen bedeutet, dass der von uns benötigte ID-Parameter ID 2 ist. In der Tat spricht die Schnittstelle Ihres Webservers mit der Webserver-Datenbank, um herauszufinden, ob ein Eintrag darin vorhanden ist. Zu dieser Datenkennung gehört eine ID mit dem Wert 2. Und die Datenbank antwortet auf die Schnittstelle: "Ja, Mann, ich habe, was Sie brauchen!"



Was wir jetzt tun werden, ist zu überprüfen, ob SQL Injection für uns funktioniert. Deshalb werden wir hier einen einfachen Code in Form von Anführungszeichen am Ende werfen und sehen, dass dies zu der Fehlermeldung "Offene Anführungszeichen nach der Zeichenkette" führte. Dies ist einer der häufigsten Tests, wenn Sie einen Parameter durch ein Anführungszeichen ersetzen oder das Anführungszeichen direkt als Parameter verwenden. Das passiert oft und es gibt nichts überraschendes.



Versuchen wir es etwas anders. Ich werde die Parameterzeichenfolge durch den Wert bookdetail.aspx? Id = 4 ersetzen. Bitte beachten Sie: Wenn ich diese 4 durch eine Zwei ersetze, ändert sich die angezeigte Seite und das Bild oben auf der Seite. Versuchen Sie nun die beiden in Klammern zu nehmen, das Bild hat sich wieder geändert. Wenn ich am Ende der Zeile (4-2) schreibe, ist das Bild dasselbe wie mit 2 am Ende der Zeile. Wenn ich in eckige Klammern schreibe (4-1), sieht die Seite genauso aus, als würde ich die Zahl 3 am Ende setzen, dh ich habe die ID mit dem Tripel gleichgesetzt.



Also, wer von Ihnen hat sich während eines Pentests mit diesen Dingen befasst? Sie denken so: "OK, ich füge den SQL-Code hier in die Adressleiste ein und er leitet mich zur Startseite weiter. Jetzt werde ich ihn ändern und er kann mich überall hin oder wieder zur Startseite schicken." Tatsächlich unterdrücken Sie Fehlermeldungen, und das Fehlen einer ODBS-Fehlermeldung bringt Sie zum Tanzen, weil Sie SQL-Code einschleusen konnten.

Ich sehe, dass etwas nicht stimmt, kann es aber nicht beheben. Und was passiert Ihr Entwickler hält sich für den schlauesten, weil er Fehlermeldungen entfernen konnte. Aber was passiert wirklich, wenn Sie die Datenbank zwingen, all diese arithmetischen Berechnungen durchzuführen?

Die Datenbank führt also die folgende Berechnung durch: (4-1), und wir erhalten Seite 3. Wir haben gerade bewiesen, dass SQL-Injection jetzt möglich ist. Sie können also zum Entwickler zurückkehren und sagen: "Nein, nein, nein, Mann, Sie haben immer noch die Möglichkeit der SQL-Injection, obwohl es keine Fehlermeldungen gibt!" Sie können es nur ein wenig beheben, und das passiert die ganze Zeit und überall.

Ich habe Tricks dieser Art verwendet, aber Spiele ändern sich, und jetzt verwenden viele Leute so etwas wie eine Webanwendungs-Firewall. Wenn Sie daher Folgendes eingeben: 2 oder 1 in (Benutzer auswählen) - In der Adressparameterzeichenfolge wird normalerweise eine Fehlermeldung angezeigt, da das Präfix des Datenbankbesitzernamens DBO (Datenbankbesitzer) für diesen Datentyp falsch ist. In diesem Fall fällt die Firewall in diesem Stadium nach Wahl des Benutzers in die Falle und sagt: "Nein, nein, nein, ich kann keine Wahl treffen"!



Wenn Sie solche Dinge sehen, bedeutet dies, dass Sie, wenn Sie noch nicht herausgefunden haben, ob Sie auf eine Webanwendungs-Firewall gestoßen sind oder wenn Sie diese arithmetischen Tricks nicht ausführen, immer noch gut herausfinden können, ob es in diesem Fall eine SQL-Injection gibt und ob Diese Webanwendung ist eine Firewall.

Ich sage Ihnen, dass es eine schreckliche Sache gibt - die Notwendigkeit, Pentests für Einzelhandelsketten durchzuführen. Weiß jemand von euch, was das auf Englisch bedeutet? PCI? Ich hasse PCI, beschäftige mich aber ständig mit dem Pentesting von Einzelhandelsketten. PCI ist ein Datensicherheitsstandard, der auf der PCI DSS-Verordnung (Payment Card Industry Data Security Standard) von 2008 basiert. Mit „Retail Network Pentesting“ können Sie die Einhaltung des PCI-Standards überprüfen und echte Bedrohungen erkennen.

Dieser Standard ist eine unendliche Weisheit, die die Wahrheit sagt: "Sie müssen ... es muss sein ..." und Sie müssen sichere Verschlüsselungsstandards gemäß internationalen Authentifizierungsstandards verwenden, und Sie werden es tun ... oder Sie können die Firewall Ihrer Webanwendung verwenden.

Alle Benutzer, mit denen ich zusammengearbeitet habe, haben das Richtige getan, sie haben eine Bedrohungsmodellierung durchgeführt, dann ein Meeting vereinbart, ein weiteres Meeting, dann haben sie sich wieder getroffen und schließlich alles repariert. Du denkst schon? Und nein! Sie "gaben ihren Lastwagen zurück" und seine Parksensoren gaben solche Rückfahrsignale ab. Sie versteckten das Problem einfach in einem Schrank und sagten: "Wir haben alles repariert!"

Jetzt zeige ich Ihnen noch etwas, was meiner Meinung nach sehr interessant ist, damit zu spielen. Schau mal hier. Ich habe bisher nur SQL implementiert. Jetzt mache ich das - ich wähle die Adresse der Hauptdatenbank aus, kopiere sie und füge sie in die Adressleiste des Browsers ein. Wir sehen, dass die erste Datenbank "BookApp" heißt, wenn der letzte Parameter in der Adressparameterzeichenfolge 0 ist.



Jetzt werde ich diese 0 durch 1 ersetzen und Sie werden sehen, was passiert ist - wir haben gesehen, dass die zweite Datenbank „master“ heißt.



Dann ändern wir 1 zu 2 und sehen, dass die nächste Datenbank "tempdb" heißt.



Jetzt hilf mir! Könnten Sie sagen, dass wir die SQL-Injection identifiziert haben? Ja, es ist großartig! Das Problem ist jedoch, dass in meinem IDS-Programm zur Erkennung von Eindringlingen nichts rot geworden ist! Diese Sache, die nicht rot auf dem Bildschirm ist, wenn wir SQL-Injection tun, wurden keine Bedrohungen erkannt!



Ok, jetzt schau mal hier - ich muss etwas falsch machen. Ich beziehe keine Datenbankinformationen direkt aus der Datenbank, und was sagt mir dieses Ding, dass ich rot unterstrichen habe?



Nein, warte eine Minute! Ich werde versuchen, es anders zu machen. Anstatt die Datenbank zu nummerieren, verwenden wir die Nummerierung aus der Zeile der obigen Tabelle, die "SQL-Injection-Fehler - Abrufen von 1 Datenbanktabelle" lautet.



Ich kopiere diese Daten und füge sie in die Adressleiste des Browsers ein. Schauen Sie, was wir jetzt haben - die Phrase (wählen Sie den ersten Namen aus den Fächern mit xtype = char (85)) - gibt was?

Richtig, der Name der BOOKMASTER-Hauptdatenbank. Ich denke, das ist SQL Injection, wer denkt das auch? Sogar Stevie Wonder konnte sehen, dass dies eine SQL-Injektion ist!



Aber schauen wir mal hier - 0 Bedrohungen! Aber das ist ein billiges System, es hat Fehler, die Regeln wurden nicht aktualisiert.



Ich denke, die IDS-Validierungsregeln sind etwas veraltet, ich habe sie heute Morgen heruntergeladen und sie sind ein bisschen, ziemlich veraltet. Vielleicht habe ich hier etwas falsch gemacht, ich habe die alten Regeln heruntergeladen und ich musste die neuesten Regeln herunterladen, die nicht länger als 3 Stunden sind - ich weiß nicht.
Aber schauen wir weiter. Was ist, wenn wir versuchen, andere Daten zu kopieren, auf denen „SQL-Injection-Fehler - Abrufen von 2 Datenbanktabellen“ steht.



Aufzeichnungen der 2. Datenbank geben uns also das, was man als "Sysdiagramme" bezeichnet.



Das heißt, wir haben die Frage gestellt, ob der Parameter xtype = char (85) und der Name 'BOOKMASTER' den Namen einer höheren Ebene als BOOKMASTER enthalten können. Kann mir das System den Namen der folgenden Tabelle geben? So listen wir die Datenbank auf - sobald Sie den Datenbanknamen und den Tabellennamen abrufen, fragen Sie immer wieder: "Hey Mann, kann ich einen Tabellennamen erhalten, der größer ist als der, den ich gerade ansehe?" Sie setzen diesen Prozess einfach fort und erhalten die Namen der neuen Tabellen.

Aber schauen wir uns noch einmal mein Programm an - es zeigt erneut, dass die Anzahl der eindeutigen Sicherheitsbedrohungen 0 beträgt. Wir haben wieder ein Problem!



Was ist, wenn ich gewerkschaftsbasiertes SQL-Injection oder gewerkschaftsbasiertes SQL versuche? Hier habe ich mehrere andere Arten von SQL-Injektionen, und jetzt fügen wir einfach eine Zeile ein, die sofort auf einen Datensatz mit der ID 100 zeigt.



Als Ergebnis erhalten wir die Antwort, dass die Zahl 100 außerhalb des gültigen Wertebereichs liegt. Denn wenn ich 10 Spalten habe, kann ich 5 auswählen? Natürlich! Kann ich aus 10 Spalten 20 auswählen? Natürlich nicht! Das heißt, die Datenbank antwortet: "Es tut mir leid, Alter, aber ich habe nicht so viele Spalten!" Gut, dann wechsle ich von 100 auf 50 und sie schreibt mir erneut: "50 ist außerhalb des Bereichs." Okay, was ist mit 25? Nein, 25 liegt ebenfalls außerhalb des zulässigen Bereichs. Sag mir, was ich sonst noch wählen soll? 13? Dies ist eine unglückliche Nummer, aber gut, wir wählen 13 und sie liegt auch außerhalb des gültigen Bereichs.

Nehmen wir 9! Großartig, die Neun haben funktioniert! Dies ist der richtige Eintrag. Ich benötige mehr als 9, aber weniger als den Grenzwert. Spielen wir also etwas länger, um herauszufinden, wie viele Spalten unsere Tabelle enthält.



Wie bestimmen wir also, wie viele Spalten sich in einer Tabelle befinden? Jetzt fügen wir in die Adressleiste eine Sequenz von 1 bis 9 ein, die als "union statement" oder "united statement" bezeichnet wird. Diese Anweisung kombiniert das, was der Entwickler geschrieben hat, mit dem, was Sie selbst geschrieben haben.



Sie müssen jedoch die richtige Anzahl von Zahlen für beide Optionsanweisungen haben, um herauszufinden, auf welcher Nummer Ihre Spalten enden. Wir machen diesen Trick - weisen Sie der Nummer 2 einen negativen Wert zu, dh korrigieren Sie ihn in der Adressleiste 2 mit –2.



Das Bild mit dem Umschlag des Buches verschwand, aber alle diese Nummern erschienen - dies sind die Spaltennummern in der Datenbanktabelle. Komm schon, sag mir die Nummer! Zwei? Nun, lass es 2 sein. Ich ersetze 2 in der Sequenz durch das Wort "Benutzer", und jetzt erscheint der Benutzer dbo anstelle von Buchname 2 auf der Seite.



Was ist, wenn ich zu Nummer 3 gehe? Zusammen werde ich Nummer 3 @@ Version schreiben. Sehen Sie, was wir jetzt auf der Seite haben?



Ok, Jungs, hilf mir! Können wir jetzt sagen, dass wir eine SQL-Injection haben?



Immer noch nichts! Das Sicherheitssystem erkennt keine SQL-Injection.

Ich begann meine Sicherheitskarriere als Analyst für IDS-Intrusion-Detection-Systeme. Es war ein schreckliches Leben, man musste den ganzen Tag auf das Abfangen von Paketen achten und wahrscheinlich auf nichts anderes als auf die Ehe, also zwingt es Sie nicht, eine Kugel in den Kopf zu stecken.

Ich war genau wie die anderen, ich habe den ganzen Tag beobachtet, dass es sehr schlimm war, und wenn Sie anfangen, diese Dinge zu sehen, die an Ihnen vorbeiziehen, ist es einfach atemberaubend, es ist verrückt.

Nehmen wir also an, wir werden etwas Interessantes machen. Vielleicht hole ich es hier raus, kopiere es und ziehe es hierher. Also füge ich die Datenbankversion, den Servernamen in die Adresszeile ein und dann master.sys.fn_varbintohexstr (password_hash) - nichts Interessantes, oder?



Jetzt erhalten wir solche Daten auf der Seite, und ich denke, dass die oberste Zeile für uns nützlich sein wird.



Wichtig ist, dass wir herausfinden können, dass IDS das Beste ist, was uns zur Verfügung steht! Also, wer ist bei mir? Führen Sie eines dieser Programme aus und kaufen Sie es!

Der Bildschirm zeigt, dass das Programm erneut keine SQL-Injektionen erkannt hat.



Dies ist einfach ein großartiges Programm, es ist sogar besser als wir denken, weil es all diese nutzlosen Benutzerprotokolle kompilieren kann, die niemand jemals untersucht hat, und das ist cool! Okay, nehmen wir an, wir machen doch etwas Interessantes. Wir verwenden diese Parameter: 1 = 1, 1 = 2 und 1 * 1. Ist eins gleich eins? Ja Ist eins gleich zwei? Nein, nicht gleich. Wir müssen jedoch überprüfen, ob die Änderungen auf der richtigen Seite, die wir sagen möchten, "aufgezählt" sind.



Ich kopiere die Parameter der ersten Zeile 1 = 1 und füge sie in die Adressleiste ein, schaue auf die Seite und ändere diesen Ausdruck in 1 = 2. Wenn sich die Seite auf eine „unehrliche“ Art und Weise ändert - wie Sie sehen, hat sich dies tatsächlich geändert -, kann ich aus der Sicht der Programmierung daraus schließen, dass es eine SQL-Injection gibt. Denn wenn ich 1 = 1 und 1 = 2 verwende, kann ich das so verstehen: „OK, wenn ich den Benutzernamen dbo und 1 = 1 nehme, weil wir gemäß den Anweisungen, wenn der Benutzername dbo und 1 = 1 ist, bekommen die richtige Seite, und dank dessen weiß ich, dass der Benutzername wirklich dbo ist. " Das ist klar? Schauen Sie sich noch einmal die Registerkarte IDS an - keine Bedrohungen! Ich sage, das ist ein erstaunliches Produkt.
. . , ? , . , . «1 - 1».



– . , , . « ? – , ! – , ? – , ! – , «»?» , .

25:50

HACKTIVITY 2012. : . Teil 2


:)


, . ? ? , , VPS $4.99 , entry-level , : VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps $19 ? ( RAID1 RAID10, 24 40GB DDR4).

Dell R730xd 2 - Equinix Tier IV ? 2 Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 $199 ! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — $99! . c Dell R730xd 5-2650 v4 9000 ?

Source: https://habr.com/ru/post/de480388/


All Articles