Warum wird dieses zufällige Passwort als zu simpel / systematisch gekennzeichnet?

37

Wie wird die zufällige Zeichenfolge M1uG*xgRCthKWwjIjWc*010iSthY9bucals zu einfach / systematisch für ein Kennwort gemäß passwd und cracklib-check erkannt ? Probieren Sie es auf Ihrem Computer und sehen Sie

echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check

Beachten Sie, dass dies nicht mein Kennwort ist, sondern eine andere zufällig generierte Zeichenfolge aus demselben Generator für zufällige Kennwörter, die dasselbe Ergebnis liefert.

BeowulfNode42
quelle
3
Es heißtM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici
Es stellt sich heraus, dass nur einige Versionen dies als einfach erkennen. Weitere Informationen hierzu finden Sie in der Antwort von slm.
BeowulfNode42
Warum /dev/urandomgenerierst du nicht stattdessen ein Passwort?
Devnull
@devnull - nicht sicher, was Sie im Sinn hatten, aber 2 Methoden zu meinem A hinzugefügt, wie man Passwörter erzeugt.
SLM

Antworten:

59

Da es sich bei cracklib um Open Source handelt, finden Sie die Antwort im Quellcode .

"Zu simpel / systematisch" bedeutet, dass zu viele Zeichen von einem ihrer alphabetischen Nachbarn vorangestellt werden. Daher werden "ab" oder "ba" als schlecht angesehen, aber "ac" oder "ca" sind in Ordnung, da das b weggelassen wird.

Vor diesem Patch vom 02.03.2010 sind maximal vier Zeichen zulässig , die dieses Merkmal aufweisen. Beispielsweise würde "bar12345" fehlschlagen, da die Zeichen "a", "2", "3", "4" und "5" alphabetische Nachbarn der vorhergehenden Zeichen sind.

slm fand in seiner antwort heraus, dass M1uG*xgRCthKWwjIjWc*010iSdas ok ist, während M1uG*xgRCthKWwjIjWc*010iStnicht. Lassen Sie uns analysieren. Hier sind die Zeichen, die cracklib-check für ein systematisches Passwort hält:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

was unter dem Maximum von vier liegt, aber das t hinzufügt:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

schiebt es über die Grenze, da T S folgt (es scheint, der Test ist case-unempfindlich).

Der Patch ändert das maximale Limit, sodass es von der Gesamtlänge des Passworts abhängt, um solche Fehlalarme zu vermeiden.

Seidenschwanz
quelle
1
Sollte 010 nicht schon als 3 zählen? Tolle Antwort.
John V.
1
Tolle Antwort und vielen Dank für die Bereitstellung des genauen Quellcode-Unterschieds. Gibt es übrigens einen Grund, warum diese Datei fascist.c heißt?
Laurent
@ this.lau_ - Ich vermute: en.wikipedia.org/wiki/Fascism
slm
Etwas komisch, in Bezug auf Charaktere von "kleiner" und "größer" zu sprechen, nein? Nun, obwohl ich weiß, dass es sich um ASCII-Werte handelt, ist dies möglicherweise nicht zu offensichtlich. - Warum also nicht einfacher erklären? Kein Charakter darf von seinem direkten Nachbarn oder Vorgänger gefolgt werden. Daher ist weder "ab" noch "ba" zulässig, sondern "ac" oder "ca", da das b weggelassen wird.
Syntaxfehler
Gibt es einen Grund, warum es nicht kleiner oder höher sein kann, aber es kann dasselbe sein ( Ww)?
Jeroen Vannevel
31

Auf Fedora 19

Wenn ich es laufen lasse, bekomme ich OK. Ich bin auf Fedora 19.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK

Hier ist die Versionsinfo:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.22
Release     : 3.fc19

ANMERKUNG: Ich würde es auch mit einfachen Anführungszeichen anstelle von doppelten Qutos versuchen, da Sie es mit *'s zu tun haben , die auf seltsame Weise auf Sie erweitert werden könnten.

CentOS 5 & 6

Es war in Ordnung, Ihr Beispiel unter CentOS 6 zu testen. Sie haben ein OK erhalten, aber es ist fehlgeschlagen, wie Sie es unter CentOS 5.9 beschrieben haben.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: it is too simplistic/systematic

Versions Information:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.9                  
Release     : 3.3

Ein Käfer?

Was Sie gestolpert sind, scheint ein Fehler zu sein. Wenn Sie Ihre Zeichenkette nehmen und mehr und mehr in Ihre Zeichenkette einführen, werden cracklib-checkSie feststellen, dass sie beim 26. Zeichen anfängt zu scheitern:

# 25    
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iS"
M1uG*xgRCthKWwjIjWc*010iS: OK

# 26
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSt"
M1uG*xgRCthKWwjIjWc*010iSt: it is too simplistic/systematic

Wenn ich das letzte Zeichen von a ändere, um tzu sagen, dass ves weiterhin funktioniert, gehe ich näher darauf ein .

$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSvhY9b"
M1uG*xgRCthKWwjIjWc*010iSvhY9b: OK

Es scheint also, dass in der Version von cracklib-checkauf dem Teilstring aufgehängt wird Sth.

Es ist definitiv etwas Seltsames an den Stücken der Schnur, die Sie zur Verfügung gestellt haben. Wenn ich das hintere Endstück nehme und den vorderen Teil weglasse, kann auch dieser Teil versagen.

$ cracklib-check <<<"jIjc*010Sth"
jIjc*010Sth: it is too simplistic/systematic

Dieselbe Saite führt auch unter Fedora 19 und CentOS 6 zu Problemen!

UPDATE # 1

Basierend auf @ waxwings sehr nettem Sleuthing wissen wir jetzt, dass die verwendete Heuristik ausgelöst wurde, wenn> 4 Zeichen zu nahe beieinander lagen. Es wurde ein Patch eingeführt , der diese Heuristik so änderte, dass die Gesamtlänge des betrachteten Passworts berücksichtigt wurde, um diese Fehlalarme zu beseitigen.

Schlussfolgerungen

Basierend auf einigen meiner begrenzten Tests scheint es, dass hier einige seltsame Heuristiken im Spiel sind. Bestimmte Zeichenfolgen, die anscheinend in Ordnung sind, lösen sie aus.

Wenn Sie versuchen, dies zu kodifizieren, würde ich vorschlagen, die Generierung und Auswertung eines Passworts zu verpacken und dann die Schleife zu verlassen, sobald ein Passwort generiert wurde, das beschwichtigt cracklib-check.

Zumindest würde ich vorschlagen, auf eine neuere Version zu aktualisieren, die die von @maxwing in seiner Antwort erwähnten Korrekturen enthält.

Passwort Gen Alternativen

pwgen

Ich werde auch hinzufügen, dass ich normalerweise pwgenzum Generieren von Passwörtern verwende. Das könnte Ihnen auch hier weiterhelfen.

$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
urandom

Sie können auch ein wenig Skriptmagie mit tr, /dev/urandomund verwenden fold, um ein extrem hochwertiges Zufallspasswort zu erhalten.

$ tr -dc '[:graph:]' </dev/urandom | fold -w 32 | head -n 1
;>$7\`Hl$=zn}R.b3h/uf7mY54xp}zSF

Der foldBefehl kann die Länge steuern. Alternativ können Sie dies auch tun:

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr
slm
quelle
Ich habe es auf CentOS 5.5 mit cracklib-2.8.9-3.1.src.rpm ausgeführt. Wie kann eine so lange zufällige Zeichenfolge zu einfach sein?
BeowulfNode42
@ BeowulfNode42 - ist es nicht. Sieht so aus, als hätten Sie einen Fehler oder zumindest eine Einschränkung der Implementierung gefunden.
SLM
Seltsam. Dennoch ist eine Saite wie diese Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6auf derselben Maschine vollkommen in Ordnung.
BeowulfNode42
1
Doppelte Anführungszeichen tun glob Expansion verhindern. Einfache Anführungszeichen sind jedoch immer noch eine bessere Idee, falls die Zeichenfolge Dollarzeichen, Backticks usw. enthält.
Dennis
2
"Ein Patch wurde eingeführt ..." Es sollte auch beachtet werden, dass der betreffende Patch keineswegs neu ist (anders als es sich
anhört