Perché questa password casuale viene contrassegnata dicendo che è troppo semplicistica / sistematica?


37

In che modo la stringa casuale M1uG*xgRCthKWwjIjWc*010iSthY9bucviene rilevata come troppo semplicistica / sistematica per una password in base a passwd e cracklib-check ? Provalo sulla tua macchina e vedi

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

Nota che questa non è la mia password, ma un'altra stringa generata casualmente dallo stesso generatore di password casuali che produce lo stesso risultato.


3
DiceM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici,

Risulta che solo alcune versioni lo rilevano come semplice. Vedi la risposta di slm per maggiori informazioni al riguardo.
BeowulfNode42,

Perché non usi invece /dev/urandomper generare una password?
Devnull

@devnull - non sono sicuro di ciò che avevi in ​​mente, ma ho aggiunto 2 metodi alla mia A su come generare password.
slm

Risposte:


59

Poiché cracklib è open source, la risposta può essere trovata nel codice sorgente .

"Troppo semplicistico / sistematico" significa che ci sono troppi personaggi che sono preceduti da uno dei loro vicini alfabetici. Quindi "ab" o "ba" sono considerati cattivi, ma "ac" o "ca" sono OK poiché la b è omessa.

Prima di questa patch del 02-03-2010 , consente al massimo quattro caratteri che presentano questo tratto. Ad esempio, "bar12345" fallirebbe, perché i caratteri "a", "2", "3", "4" e "5" sono vicini alfabetici dei caratteri precedenti.

slm ha scoperto nella sua risposta che M1uG*xgRCthKWwjIjWc*010iSera OK, mentre M1uG*xgRCthKWwjIjWc*010iStnon lo è. Analizziamo. Ecco i caratteri che pensa cracklib-check sono indicazioni di una password sistematica:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

che è inferiore al massimo di quattro, ma aggiungendo la t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

lo spinge oltre il limite, poiché T segue S (sembra che il test non faccia distinzione tra maiuscole e minuscole).

La patch modifica il limite massimo, quindi dipende dalla lunghezza totale della password, per evitare falsi positivi come questo.


1
010 non dovrebbe già contare come 3? Ottima risposta però.
John V.

1
Ottima risposta e grazie per aver fornito il codice sorgente esatto diff. A proposito, c'è qualche motivo per cui questo file si chiama fascist.c?
laurent

@ this.lau_ - Sto indovinando: en.wikipedia.org/wiki/Fascism
slm

Un po 'divertente parlare di "più piccolo" e "più grande" rispetto ai personaggi, no? Bene, anche se so che si tratta di valori ASCII, potrebbe non essere troppo ovvio. - Allora perché non spiegarlo in un modo più semplicistico? Nessun personaggio deve essere seguito dal suo vicino diretto né dal suo predecessore. Quindi né "ab" né "ba" sono permessi, ma "ac" o "ca" lo farebbero poiché la b viene omessa.
syntaxerror

C'è un motivo per cui non può essere uno più piccolo o più alto ma può essere lo stesso ( Ww)?
Jeroen Vannevel,

31

Su Fedora 19

Quando lo eseguo ottengo OK. Sono su Fedora 19.

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

Ecco le informazioni sulla versione:

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

NOTA: lo proverei con virgolette singole invece che con doppi quto, poiché hai a che fare con *loro potrebbero essere espansi in modi strani su di te.

CentOS 5 e 6

Provare il tuo esempio su CentOS 6 è andato bene, ho ottenuto un OK, ma non è riuscito come descritto su CentOS 5.9.

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

Informazioni sulla versione:

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

Un insetto?

Ciò in cui ti sei imbattuto sembrerebbe essere un bug. Se prendi la tua stringa e la esegui sempre di più cracklib-check, noterai che quando arrivi al 26 ° carattere inizia a fallire:

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

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

Scavando più a fondo su questo se cambio l'ultimo personaggio da a tper dire vche continua a funzionare.

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

Quindi sembrerebbe che nella versione di cracklib-checksia appeso sulla sottostringa Sth.

C'è sicuramente qualcosa di strano nei pezzi della stringa che hai fornito. Se prendo il pezzo di coda e ometto la parte anteriore, posso far fallire anche questa parte.

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

La stessa stringa causa problemi anche su Fedora 19 e CentOS 6!

AGGIORNAMENTO N. 1

Basandoci sulla simpaticissima investigazione di @ waxwing , ora sappiamo che l'euristico usato si sarebbe fatto inciampare se> 4 personaggi fossero troppo vicini l'uno all'altro. È stata introdotta una patch che ha modificato questa euristica in modo da tenere conto della lunghezza complessiva della password in esame per eliminare questi falsi positivi.

Conclusioni?

Sulla base di alcuni dei miei test limitati sembrerebbe che qui ci siano delle strane euristiche. Alcune stringhe che sembrano andare bene lo stanno facendo scattare.

Se stai cercando di codificare questo, suggerirei di racchiudere la generazione e la valutazione di una password e di uscire dal ciclo una volta che è stata generata una password che appaga cracklib-check.

O almeno suggerirei di passare a una versione più recente che includa le correzioni che @maxwing menziona nella sua risposta.

Password Gen Alternative

pwgen

Aggiungerò anche che di solito uso pwgenper generare password. Potrebbe esserti utile anche qui.

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

È inoltre possibile utilizzare un po 'di magia di scripting con tr, /dev/urandome foldper ottenere una password casuale di qualità estremamente elevata.

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

Il foldcomando può controllare la lunghezza. In alternativa puoi fare anche questo:

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr

Lo stavo eseguendo su CentOS 5.5 con cracklib-2.8.9-3.1.src.rpm. In entrambi i casi, però, come può una stringa casuale così lunga essere troppo semplice?
BeowulfNode42,

@ BeowulfNode42 - non lo è. Sembra che tu abbia trovato un bug o almeno una limitazione dell'implementazione.
slm

Strano. Eppure una stringa come Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6è perfettamente OK sulla stessa macchina.
BeowulfNode42

1
Le doppie virgolette fanno prevenire l'espansione glob. Le virgolette singole sono comunque un'idea migliore, nel caso in cui la stringa contenga segni di dollaro, backtick, ecc.
Dennis

2
"È stata introdotta una patch ..." Va anche notato che la patch in questione non è affatto recente (a differenza di come potrebbe sembrare), ma è già stata inviata nel 2010 :)
syntaxerror
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.