Verteile Brute-Force Attacken auf Wordpress-Blogs

November 30th, 2009 § 0

Ein täglicher auf den ISC-Blog von SANS lohnt sich definitiv. Heute wurde auf dem ISC-Blog ein interessantes Skript, welches ein User auf einem Server gefunden hat, vorgestellt. Dieses Skript ermöglicht es über PHP eine verteile Bruteforce-Attake auf Wordpress-Blogs durchzuführen.

Das Skript bedient sich dazu der Möglichkeit unter PHP cURL zu nutzen.

cURL:

A free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE, LDAP and LDAPS. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more.

Wikipedia

wp-bruteforce1

Es wurde nicht das komplette Skript veröffentlicht, sondern nur einige Code-Snippets. Wer das Skript haben möchte, sollte schnell anfangen zu programmieren ;)

Im ersten veröffentlichten Screenshot erkennt man eine Funktion, die 3 verschiedene Parameter erwartet. $ch ist dabei der Handle, der durch curl_init() erstellt wurde. Das ist im Ausschnitt nicht zu sehen.  An diesen Handle werden nun alle erforderlichen Einstellungen angehängt und am Ende mittels curl_exec($ch) ausgeführt.

Parameter 2 und 3 ergeben sich logischerweise aus ihrem Namen.

Enthält die Antwort des Servers, also die zurückgelieferte Webseite, den Ausdruck “Log Out” war die Brute-Force Attacke erfolgreich. Das wird mittels

[...]

eregi(“Log Out”,$result)

[...]

überprüft.

Interessanter als die Nutzung von cURL in PHP ist die Möglichkeit, Seiten, die gecrackt werden sollen, in einer zentralen Instanz zu verwalten um verteiltes Cracken zu ermöglichen.

wp-bruteforce2

Zunächst holt sich das Skript aus einer zentralen MySQL-Datenbank 200 URLs, die gecrackt werden sollen und markiert diese in der Datenbank mit seiner persönlichen “colo_id”. Bricht das Skript nun aus irgendeinem Grund ab, holt sich das Skript die vorher markieren Einträge wieder aus der Datenbank und kann an der Stelle weitermachen, an der es abgebrochen wurde. Genau diesen Schritt stehen wir hier in diesem Screenshot:

Mittels “select url, site_type from site where colo_id=’$colo_id’” werden die Einträge aus der Datenbank geholt, an denen dieser “colo”, also dieses Skript, vorher gearbeitet hat.

Interessant ist auch die Möglichkeit, Passwortlisten zentral in einer Datenbank zu speichern und so allen Skripts zur Verfügung zu stellen.

Auf jeden Fall eine interessante und erwähnenswerte Idee, wie ich finde.

Wortlisten optimieren mit sozialen Netzwerken

April 1st, 2009 § 0

Welche Passwörter nutzen User? Wie sicher sind diese?

Bei den meisten Internet-Nutzern ist die Grundregel “Immer, zusätzlich zu den Buchstaben, Zahlen nutzen…” angekommen. Das befolgen die meisten pflichtbewusst. Leider wird oft nicht erwähnt, dass ein Passwort nicht unbedingt sicherer wird, wenn man sein Geburtsdatum an den Namen des Hundes anhängt. “wuffi1980” ist eben nur bedingt sicherer als “wuffi”. Auch wenn einem diverse Portale da etwas anderes erzählen wollen:

Passwröter

Warum ist das so? User kombinieren bekannte Daten und erstellen so ihre Passwörter. Cracker wissen das und können so die eigenen Wortlisten optimieren. So könnte ein Angreifer versuchen per Social Engineering Daten eines Users herauszufinden und diese mit in seine Wortliste einfließen lassen. Das war einmal…

Inzwischen sind wir ja im Web 2.0 angekommen und jeder der nicht mindestens einen Account bei StudiVZ oder Konsorten hat, wird schräg angeschaut. Nur wo liegt hier die Gefahr? Eigentlich ist das ziemlich offensichtlich. Bei sozialen Netzwerken geht ja im Grunde ja darum, sich selbst seinen Freunden und denen die es gerne werden wollen, möglichst genau zu präsentieren. Dazu werden viele persönliche Daten, die im Grunde nicht sehr “wertvoll” erscheinen, veröffentlicht. (inwiefern diese für Werbezwecke doch wertvoll sein können, lassen wir außen vor).

Ein Angreifer könnte jetzt genau diese Informationen gezielt nutzen um eine “soziale Wortliste” zu erstellen. In Kombination mit der vorher erwähnten Fahrlässigkeit bei der Auswahl der Passwörter entsteht hier, vor allem bei einem gezielten Angriff, ein großes Potential für den Angreifer.

studivz

Konkret: Die hier links angezeigten Daten könnte ein Angreifer gezielt auswerten und speichern. Per Skript könnte man anschließend die diversen Daten beliebig kombinieren und in eine Wortliste schreiben:

  • $heimatstadt
  • $geburtsdarum_ohne_punkte
  • $vorname$geburtsjahr_yy
  • $vorname$geburtsjahr_yyyy
  • $sternzeichen$geburtsjahr
  • $fußballverein
  • $geburtstag_ddmm$

Klar, bei den Daten hier links muss es natürlich nicht bleiben. StudiVZ z.B. bietet die Möglichkeit Gruppen beizutreten – analysiert man diese, lassen sich die $variablen beliebig erweitern. Mit einer “schlauen” Software lassen sich hier mit Sicherheit viele potenzielle Passwörter herausfinden und so die Chance das richtige Passwort zu erraten erheblich steigern.

Vielleicht lassen sich ja einige User hinreißen und schicken mir, per Mail oder hier als Kommentar, ihre Erfahrungen mit schwachen Passwörtern. Hätte sich dieses Passwort durch geschickte Kombination der $variablen herausfinden lassen?

Meine Erfahrung jedenfalls sagt mir, dass man eine deutlich höhere Chance hätte, als mit einer alten Standard-Wortliste. Vor allem bei gut gefüllten StudiVZ-Profilen…

PS. StudiVZ soll nur ein Beispiel sein. Das gilt natürlich für jedes soziale Netzwerk.

Passwort Cracking – Teil 2

März 21st, 2009 § 0

Im letzten Beitrag über dieses Thema ging es ja um Rainbow-Tables, Hashes und um Salts.

Als Barriere gegen Rainbowtables wurden Salts eingeführt. Reagiert wurde schnell: Die Passwortcracker wurden angepasst und können nun Hashes mit Salt knacken.  Dazu gibt man im Cracker einfach den Salt und den Hash an, den Rest macht der Cracker selbst.

In der Praxis sieht das so aus:

Wir haben einen MD5-Hash von unserem Passwort: 08da50bd109c7fb1bec49d15ae86e55f

Den wollen wir überprüfen. Dazu schmeißen wir zunächst den Passwortcracker an:

Crack MD5

Der findet das Passwort in sekundenschnelle heraus – es ist schließlich auch nicht wirklich komplex. Auch in einer Rainbowtable würden wir den Hash sofort finden. Nun erhöhen wir den Sicherheitsgrad indem wir einen Salt generieren ( invf&RxOb< ) und an das Passwort anhängen (blubberinvf&RxOb<) und Hashen das Ganze:8efc27deead2de7def412600f06c8ca8

Ein Passwortcracker würde Jahre brauchen, in Rainbowtables hätten wir auch keine Chanche.  Schafft ein Hacker nun es den Hash herauszufinden hätte er ohne Salt keine Chance.

Mit Salt hätte er eine, da hier das Passwort nicht sehr komplex ist. Viele Cracker haben Funktionen nachgerüstet, wo man einfach die Struktur der Passwort-Salt-Kombination (hier: $password.$salt) und den Salt angibt und der Cracker so den Salt mit berücksichtigen kann. Damit ist die Sicherheitsfunktion des Salts außer Kraft gesetzt.

Außerdem gibt es seit einiger Zeit Cracker die nicht nur über die CPU Hashes durchprobieren, sondern auch noch die GPU mit einbeziehen. Bei dem oberen Bild sehen wir wie die GPU mit in den Crackvorgang eingebunden wurde. ~100 MHashes / s kommen allein von der GPU, ~50-60 pro CPU-Kern. Für eine 70 Euro-Grafikkarte ( 9500GT ) ein doch sehr beachtlicher Wert – HighEnd Grafikkarten bringen deutlich mehr: Mit einer GTX 260 schafft man fast  500 MHashes /s. Die 280 schafft um die 750 MHashes /s – nur mit der GPU!

Fazit:

Das Salzen von Passwörtern ist eine gute Möglichkeit um die Sicherheit ein klein wenig zu erhöhen. Taucht aber beispielsweise eine SQL-Injection in einer Anwendung wie Wordpess auf kann diese Injection so umgeschrieben werden, dass sie zusätzlich zum Passwort auch noch den Salt ausgibt. Der Sicherheitsgewinn geht gegen Null.

Man sollte also auf jeden Fall darauf achten, dass man immer komplexe Passwörter nutzt. Egal für welche Anwendung.


Passwort Cracking – Teil 1

März 18th, 2009 § 1

Es gibt diverse Möglichkeiten die Sicherheit seines eigenen Passworts zu überprüfen. Meistens werden Passwörter nicht im Klartext gespeichert sondern als so genannter Hash.

Kurz was ein Hash ist: Quasi der Fingerabdruck des Passworts. Überall wo man sich anmeldet muss ja das Passwort zum vergleich gespeichert werden. Meldet man sich z.B. in einem Forum an, gibt man bei der Registrierung ein Passwort an. Der Hash des Passworts wird in der Datenbank gespeichert. (NICHT das Passwort im Klartext!) Bei

Cracker

Cracker

jeder Anmeldung wird nun das eingegebene Passwort gehashed und mit dem in der Datenbank gespeicherten Passwort verglichen. Stimmt der Hash überein, ist man authentifiziert. (Vorsicht vor Webseiten, die einem das Passwort im Klartext zuschicken (per Mail oder SMS). Das heißt dann, dass das Passwort irgendwo im Klartext bzw in umkehrbarer Form gespeichert wird. Da würde ich mich sofort abmelden.)

Passwörter die im Klartext gleich sind, sind natürlich auch im Hash gleich. Menschen die geklont werden, haben ja auch die gleichen Fingerabdrücke. Logisch, oder?

Nun, da ein Hash nur ein Fingerabdruck des Passworts ist, kann man das Passwort also nicht einfach zurückrechnen. Deswegen kann man diverse Möglichkeiten nutzen sein Passwort zu überprüfen:

Ranbow-Tables

Die Tatsache, dass gleiche Klartext-Passwörter den gleichen Hash haben machen sich die Rainbow-Tables zu nutze. Denn in Rainbow-Tables werden Passwort und dazu der dazu passende Hash gespeichert. Diese Rainbow-Tables kann man sich entweder selbst mit diversen Programmen anlegen oder schon vorgefertigt von Webseiten per BitTorrent oder direkt herunterladen. Hat man nun beispielsweise einen MD5-Hash den man Cracken will muss man einfach die Tabellen nach dem passenden Hash durchsuchen. Findet man den Hash, hat man das Passwort.

Rainbow-Tables lassen mit einer einfachen Technik außer Kraft setzen: Man salzt die Passwörter (Salt). Ein so genannter Salt ist eine Zufallszahl, die zusätzlich an das Passwort angehängt wird.

Salt

Salt

Nehmen wir wieder unser Beispiel von vorher, in Verbindung mit der Hash-Funktion MD5. Ein User registriert sich in einem Forum und gibt dazu sein Passwort an. Im Hintergrund erstellt die Forensoftware eine Zufallszahl, den so genannten Salt. Wenn der User auf Registrieren klickt speichert die Forensoftware folgendes in der Datenbank:

md5($password.$salt) und $salt

Klartext: Die Forensoftware setzt das Passwort und den Salt zusammen, und speichert den Hash über Passwort+Salt (vgl. vorher: nur Passwort) in der Datenbank. Zusätzlich speichert es den Salt im Klartext. Um nun einen Nutzer zu authentifizieren muss die Forensoftware also bei jeder Anmeldung das eingegebene Passwort + Salt hashen und mit dem gespeicherten Wert vergleichen.

Da man das Passwort mit einem Salt verbunden hat, sind selbst identische Passwörter unterschiedlich.

Sinnvoll sind Hashes mit Salt natürlich nur, wenn absolut niemand an die Salts kommt. Hat man die komplette Datenbank an einen Hacker verloren, kann dieser den Salt schon mit einrechnen und hat somit die Sicherheitsvorkehrung des Salts umgangen. Mehr dazu im nächsten Teil “GPU/CPU Bruter”…

Wie sicher sind eure Passwörter?

Februar 17th, 2009 § 5

Eigentlich sollte man sich hin und wieder folgende Fragen stellen:

  • Wann habe ich das letzte mal mein Passwort geändert
  • Ist mein Passwort wirklich sicher?
  • (Wie) könnte es jemand erraten

Ich sehe immer wieder Passwörter die viel zu einfach sind. Da gibt es z.B. $vorname$geburtsjahr, $sternzeichen, $1BuchstabeVorname$Nachname, usw…

Dabei gibt es wirklich einfache Möglichkeiten sich Passwörter zu merken. Z.B.

  • Um 6 Uhr aufzustehen macht keinen Spaß. Deswegen bleibe ich bis 7 liegen! => U6UamkS.Dbib7l!

Wer erkennt das System?  ;)

  • !!37bC1h(wordpress)69blHf??

Und hier?

Eigentlich muss man nur ein wenig kreativ sein, dann funktioniert die Sache schon viel einfacher. Was man allerdings nicht mehr machen sollte, ist seine Passwörter folgendermaßen zu gestalten: $St3rnZ31ch3n. Also die schlechten Passwörter von vorher in l33t-speech umzuwandeln. Dafür gibt es inzwischen schöne Wortlisten und mit Sicherheit auch schon Generatoren. Die Idee selbst ist aber garnicht so schlecht… ohne das weiter auszuführen ;)

Bei packet storm gibt es z.B. solche Wortlisten zum runterladen. Professionelle Cracker haben da natürlich eigene, bessere Listen…

Ein weiterer Punkt ist die Faulheit. Es gibt viele Dienste, die einen nach einer gewissen Zeit dazu zwingen sein Passwort zu ändern. Meistens hat das einen Sinn – deswegen sollte man nicht bei jedem Passwortreset das hier machen: $Sternzeichen1 => $Sternzeichen2 … -_-

Also denkt mal über eure Passwörter nach ;)

Where Am I?

You are currently browsing entries tagged with crack at IT-Blogger.