Pincracker „Brute Force“

Vor einiger Zeit bekam ich von einem großen Internetunternehmen eine Email mit etwa folgendem Inhalt (stark gekürzt):
cyberattacke.PNG

Wo ist das Problem?

Nunja, wenn Ihr Passwort zu denen gehört, welche man eben mal schnell knacken kann, dann haben Sie ein Problem! Dann besitzen nämlich fremde Leute Zugang zu Ihrem Internet-Account bei diesem Anbieter. Diese Leute können Ihre Daten ändern. Das kann teuer werden, z.B. wenn über Ihre aktuelle Bankverbindung plötzlich Waren gekauft und in die dritte Welt versandt werden.

Wie wird ein Passwort gespeichert?

Ein Passwort wird nicht im Klartext gespeichert. Ein Passwort wird vor dem Speichern verschlüsselt. Für die Verschlüsselung steht Informatikern eine so genannte MD5-Funktion zur Verfügung. Damit wird erreicht, dass auch Personen, welche Zugang zur Datenbank haben, sich nicht einfach mit Ihren Daten irgendwo einloggen können.

Was ist eine Brute-Force-Attacke?

Bei einer Brute-Force Attacke handelt es sich um ein nacheinander Ausprobieren sämtlicher in Frage kommender Kombinationen für ein Passwort. Bei einer PIN - wie sie z.B. für EC-Karten genutzt wird - sind das alle Zeichenkettenkombinationen von „0000“ bis „9999“. Wenn Sie das verschlüsselte Passwort besitzen, müssen Sie also einfach nur die MD5-Codes aller möglichen Kombinationen errechnen. Sobald Sie einen identischen Code finden, kennen Sie das Passwort. Solch ein Vergleich des verschlüsselten Passworts mit den verschlüsselten Passwörtern aller möglichen Kombinationen nennt man Brute-Force-Attacke.

Aufgabe

Entwickeln Sie ein Programm zur Ermittlung der "richtigen" PIN!

Wie schnell man eine verschlüsselte 4-stellige PIN knacken kann, das dürfen Sie jetzt selbst einmal ausprobieren.
Schreiben Sie ein Programm zum Knacken einer 4-stelligen verschlüsselten PIN!

Konzept

Folgende Features wurden bereits in der folgenden HTML-Vorlage realisiert.
  • Das verschlüsselte Passwort soll nicht sichtbar, aber unverschlüsselt eingegeben werden.
  • Die Eingabe erfolgt in einem kleinen HTML-Formular.
  • Bei Anklicken des Buttons wird die Funktion crack() aufgerufen, welche das eingegebene Passwort übergeben bekommt.
  • Das Passwort wird mit MD5 verschlüsselt und in einer internen Variable abgespeichert.
Was müssen Sie tun?
  • Speichern Sie die Vorlage in Ihrem Ordner und zusätzlich auch die Datei md5.js.
  • Laden Sie die Vorlage in Ihrem Browser und testen Sie, ob das Programm eine eingegebene PIN nach Anklicken des Buttons verschlüsselt ausgibt.
  • Erweitern Sie die Funktion crack() um eine Schleife, welche alle möglichen Kombinationen einer PIN (0000-9999) testet und geben Sie die von Ihnen ermittelte PIN auf der Seite aus!
  • Zahlen kann man in Zeichenketten mit der Funktion String() umwandeln.
    z.B. var zahl=5; var zeichenkette = String(zahl);
  • Alle Kombinationen müssen Sie vor dem Vergleich natürlich ebenfalls mit der MD5-Funktion in ein verschlüsseltes Passwort wandeln.
Erweiterung:
  • Wenn Sie fertig sind mit dem Pincracker, dann sollten Sie das Programm auf das Knacken beliebiger 4-stelliger Zeichenfolgen erweitern.
  • Und wenn dann die erste Erweiterung fertig ist, können Sie ja mal anfangen, folgende Passwörter zu cracken durch Ausprobieren beliebiger Zeichenfolgen:
    http://www.symantec.com/connect/blogs/top-500-worst-passwords-all-time

Vorlage

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
 
<head>
 
  <title>Brute-Force PIN-Cracker</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <script type="text/javascript" src="md5.js"></script>
 
  <style type="text/css">
 
    body
    {
      font-family:          sans-serif;
      font-size:            150%;
      color:                black;
      background-color:     #00DBD5;
    }
 
    input
    {
      color:                #FD0006;
      font-size:            90%;
    }
 
    #fortschritt
    {
      background-color:     #009B95;
    }
 
    #trace
    {
      background-color:     #000000;
      color:                #FFFFFF;
      font-size:            0.5em;
    }
 
    #myButton
    {
      background:url(cracked.png) right no-repeat;
      height: 117px;
      width:  124px;
    }
 
  </style>
 
  <script type="text/javascript">
 
    var cryptedPW;
 
    function crack( pw )
    {
      // Wir werden das unverschlüsselt übergebene Passwort
      // jetzt erst einmal verschlüsseln und abspeichern in
      // der Variable cryptedPW.
      // Das verschlüsselte Passwort soll dann anschliessend
      // geknackt werden, indem alle Kombinationen einer
      // vierstelligen PIN von 0000-9999 durchprobiert werden!
 
      // 1. Schritt: Verschlüsseln mit MD5, Umwandeln des
      // Passworts in ein verschlüsseltes Passwort,
      // wie es auch in Datenbanken gespeichert wird.
      // Die Datei md5.js muss sich im gleichen Verzeichnis
      // befinden, wie diese Datei!
      cryptedPW = MD5( pw );
 
      // Ausgabe
      document.getElementById("ausgabe").innerHTML =
         "Das mit dem MD5-Algorithmus verschlüsselte Passwort lautet: "
         + cryptedPW;
    }
 
  </script>
 
</head>
 
 
<body onload="document.getElementById('eingabe').focus()">
 
  <h1>Brute Force PIN Cracker</h1>
 
  <form name="pwc">
 
    Bitte geben Sie hier Ihre 4-stellige PIN ein!
    <input type="password" id="eingabe" name="pin" size="10" maxlength="4">
 
    <p>
 
    Let's go for it!
    <input
      type    = "button"
      name    = "meinButton"
      id      = "myButton"
      value   = "C R A C K!"
      onclick = "crack( document.pwc.pin.value )"
    >
 
  </form>
 
  Status / Ihre PIN lautet:
  <div id="ausgabe"></div>
 
</body>
 
</html>