Announcement

Collapse
No announcement yet.

Pam-mysql und OX: Password Hash Rätselraten

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Pam-mysql und OX: Password Hash Rätselraten

    Hallo Forum,
    ich versuche gerade OX mal wieder zu evaluieren. In der Vergangenheit hatte ich damit mässig Glück weil in vergangenen Zeiten das Calendaring oft Zeitzonenprobleme hatte mit ical Clients, etc. Jetzt könnte ja alles besser sein und versuch macht kluch

    Also ran ans Werk: Ubuntu 8.10 in eine virtuelle Box, die OX Pakete drauf, Datenbank eingerichtet und Probelogin mit einem angelegten User. Alles bestens.
    Die Authenfizierung via Sasl wollte aber überhaupt nicht. Anstatt den Passwort Mech auf Crypt herunterzusetzen hab ich pam-mysql neugebaut mit openssl-support und hab damit ein Paket mit SHA-1 Hash Unterstützung. Die fehlt, es gibt einen alten Debian Bugreport aber da passiert derzeit anscheinend sonst nicht viel.
    Also Pam-Mysql neu aber Sasl will aber immernoch nicht. Wenn ich in pam-mysql crypt=0 setze und das Passwort für den User im Klartext eintrage funktioniert eine Authentifizierung, getestet mit testsaslauthd. Generelle Config also heil.
    Wenn ich mir auf der Console oder per Webgenerator (z.B. http://www.ideaspace.net/misc/hash/ ) einen SHA-1 Hash über mein Passwort erzeuge und den in die OX Datenbank einsetze und pam-mysql auf SHA-1 umstelle (crypt=4) funktioniert der Login auch. Allerdings nicht mehr im Webinterface.
    Der Hash unterscheidet sich auch von dem den OX erzeugt hat. Setze ich den von OX erzeugten Hash wieder ein, versagt saslauthd wieder die Authentifizierung.
    Jetzt frage ich mich natürlich: Wo liegt der Unterschied ? Warum unterscheiden sich die Hashes ? Warum ist SHA-1 hier anscheinend nicht gleich SHA-1 ? Wie untersuche ich das mal näher ?

    Jemand eine Idee ? Bin für jeden Tipp dankbar.

    Grüz
    Hibbelharry

  • #2
    Nur nochmal ums festzuhalten:

    Ich hab mir das ganze nocheinmal angesehen und bin inzwischen der festen Ansicht das OX hier noch einen Salt benutzt um das ganze besser Rainbowtable immun zu machen. Evidenz hab ich allerdings keine weil ich noch nix entsprechendes gefunden hab. Damit wäre dann aber eh pam-mysql hinfällig weil es dort anscheinend keine Möglichkeit gibt einen Salt hinzu zufügen. Also gebe ich erstmal murrend auf und nutze auch vorläufig Crypthashes bis mir was besseres einfällt

    Grüz
    Hibbelharry

    Comment


    • #3
      Hallo Hibbelharry,
      ich hänge mich hier mal ran, da ich vor dem gleichen Problem stehe. Es scheint kein normaler SHA Hash zu sein.

      Mein SHA1 Hash ist viel größer als der vom OX. Vieleicht hat ja einer eine Idee.

      MFG
      exchange

      Comment


      • #4
        Passwort-Laenge

        Kann es was damit zu tun haben, dass das Passwort bei crypt auf 8 Zeichen begrenzt wird (d.h. ein 10-Zeichen-passwort funktioniert auch, wenn man nur die ersten 8 Stellen eingibt).

        Probiert es mal mit kuerzeren Passwortern aus. Waere aber irgendwie schon schraeg...

        Comment


        • #5
          Hi,

          korrekt - crypt() nutzt nur die ersten 8 Buchstaben des Passworts. Deshalb sollte man aus Sicherheitsgründen auch SHA bevorzugen. Soweit ich weiss speichert crypt auch nur die ersten 8 Buchstaben des Passworts im Hash.

          Gruß

          Comment


          • #6
            SHA ist schön und gut, jedoch gebe ich zu bedenken, das für SHA Support pam-mysql 0.7 erforderlich ist.
            Diese ist meines Wissens nach die erste Version die SHA unterstützt.
            Auf den meissten Systemen wird noch Version 0.62 verwendet, da es seit 2006 keinen Relase der 0.7er Version gibt.

            Somit ist für alle die Imap und SMTP Auth an Mysql anbinden wollen und sich nicht einen preRelease von pam-mysql selber compilieren wollen Crypt obligatorisch.

            Ich habe dieses Problem schon seit einiger Zeit, anscheinend wird wohl SHA nicht sehr dringend benötigt, sonst hätte sich bestimmt schonmal jmd erbarmt und die 07er Version fertig gemacht.

            Es ist mir auch schleierhaft, warum Crypt und SHA unterstützt werden, MD5 aber nicht.
            MD5 läuft zb. mit der 0.62er Version.

            Vielleicht gibt es auch Distributionen die schon die 0.7 als Paket einsetzen, zumindest Debian nicht.

            Hier mal die Optionen die unterstützt werden aus dem README:
            crypt (plain)

            The method to encrypt the user's password:

            0 (or "plain") = No encryption. Passwords stored in plaintext.
            HIGHLY DISCOURAGED.

            1 (or "Y") = Use crypt(3) function.

            2 (or "mysql") = Use MySQL PASSWORD() function. It is possible
            that the encryption function used by PAM-MySQL
            is different from that of the MySQL server, as
            PAM-MySQL uses the function defined in MySQL's
            C-client API instead of using PASSWORD() SQL function
            in the query.

            3 (or "md5") = Use plain hex MD5

            Zu der crypt funktion 8 Zeichen und salt. Wie ich gesehen habe werden die ersten beiden Stellen des gehashten Passwortes als Salt genommen. Ich musste extern an die Datenbank, hatte da ne Pinnwand programmiert und musste das Passwort überprüfen, was der User eingibt.

            Also das Plaintext Passwort ist zb. foobar gecryptet sieht es dann in der Datenbank so aus: rtD.ggz2
            wenn man nun von extern fragen will ob das Passwort korrekt ist muss man den salt "rt" verwenden, damit man auf das richtige Passwort beim crypten kommt.
            wo die ersten beiden Zeichen, also der Salt herkommen, entzieht sich meiner Kenntnis. Zumindest wird er nicht zufällig generiert, denn wenn man zb. im OX sein Passwort ändert und es auf den gleichen Wert setzt, kommt immer der gleiche Salt raus. Ursprünglich meine ich mich zu erinnern, das man beim salt im Zusammenhang mit crypt die ersten beiden Buchstaben des pliantext Passwortes verwendet, ob das Standard ist weiss ich nicht. Jedenfalls scheint es so bei OX nicht zu sein und ist wohl generell auch Geschmacksache.


            mein crypt call in php so aus:
            PHP Code:
            //$user_password=...mysql_fetch_row["userPassword"].....

                
            $salt=substr($user_password,0,2);
                
             if (
            $user_password_from_html_form==crypt($user_password,$salt)){
            //passwort stimmt
            }
            else{
            //passwort ist falsch!

            Last edited by evildead; 10-09-2009, 07:25 PM.

            Comment


            • #7
              Hi,

              hast du eine Lösung für dein Problem gefunden?

              Ich versuche ebenfalls den salt der durch OX verwendet wird zu finden.

              Ich benutze eine Shell Script um das Userpassword ändern zu lassen da ich das ganze dem user nicht so einfach machen will, soll heißen min. 8 Zeichen klein Buchstaben Groß Buchstaben und evtl. Sonderzeichen.

              Alles Funktioniert bis auf das Hashen des Passwortes da mir hier der salt fehlt.

              für eine Info diesbezüglich wäre ich dir dankbar

              MfG

              outlow

              Comment


              • #8
                Habes es heraus gefunden. Wenn ich wem damit helfen kann bitte melden.

                MfG

                outlow

                Comment

                Working...
                X