Por que essa senha aleatória é sinalizada dizendo que é muito simplista / sistemático?

37

Como a sequência aleatória M1uG*xgRCthKWwjIjWc*010iSthY9bucestá sendo detectada como simplista / sistemática demais para uma senha de acordo com a senha passwd e cracklib-check ? Experimente na sua máquina e veja

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

Observe que essa não é minha senha, mas outra sequência gerada aleatoriamente a partir do mesmo gerador de senhas aleatórias que produz o mesmo resultado.

BeowulfNode42
fonte
3
Ele dizM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici
Acontece que apenas algumas versões detectam isso como simples. Veja a resposta do slm para mais informações sobre isso.
BeowulfNode42
Por que você não usa /dev/urandompara gerar uma senha?
585 devnull
@ devnull - não tenho certeza do que você tinha em mente, mas adicionou 2 métodos ao meu A sobre como gerar senhas.
slm

Respostas:

59

Como o cracklib é de código aberto, a resposta pode ser encontrada no código-fonte .

"Simplista / sistemático demais" significa que há muitos caracteres precedidos por um de seus vizinhos alfabéticos. Portanto, "ab" ou "ba" são considerados ruins, mas "ac" ou "ca" são válidos, pois o b é omitido.

Antes deste patch, de 02/03/2010 , ele permite no máximo quatro caracteres que apresentam essa característica. Por exemplo, "bar12345" falharia, porque os caracteres "a", "2", "3", "4" e "5" são vizinhos alfabéticos dos caracteres anteriores.

slm descobriu em sua resposta que M1uG*xgRCthKWwjIjWc*010iSestava tudo bem, enquanto M1uG*xgRCthKWwjIjWc*010iStnão estava. Vamos analisar. Aqui estão os caracteres que o cracklib-check acha que são indicações de uma senha sistemática:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

que está abaixo do máximo de quatro, mas adicionando t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

empurra-o acima do limite, pois T segue S (parece que o teste não diferencia maiúsculas de minúsculas).

O patch altera o limite máximo, portanto depende do tamanho total da senha, para evitar falsos positivos como esse.

waxwing
fonte
11
010 não deveria contar como 3 já? Ótima resposta embora.
John V.
11
Ótima resposta e obrigado por fornecer o código exato da fonte diff. A propósito, existe alguma razão para esse arquivo ser chamado fascist.c?
laurent
@ this.lau_ - Estou supondo: en.wikipedia.org/wiki/Fascism
slm
Um tanto engraçado falar de "menor" e "maior" em relação aos personagens, não? Bem, embora eu saiba que é sobre valores ASCII, pode não ser muito óbvio. - Então, por que não explicar de uma maneira mais simplista? Nenhum personagem deve ser seguido por seu vizinho direto ou predecessor. Portanto, nem "ab" nem "ba" são permitidos, mas "ac" ou "ca" seriam, uma vez que om b é omitido.
SyntaxError
Existe uma razão pela qual não pode ser menor ou maior, mas pode ser o mesmo ( Ww)?
Jeroen Vannevel
31

No Fedora 19

Quando eu corro, eu fico bem. Estou no Fedora 19.

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

Aqui estão as informações da versão:

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

NOTA: Eu tentaria com aspas simples, em vez de aspas duplas, já que você está lidando com *elas. Elas podem estar sendo expandidas de maneiras estranhas para você.

CentOS 5 e 6

Tentar o seu exemplo no CentOS 6 foi bom, tudo bem, mas falhou como você descreveu no CentOS 5.9.

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

Informação da versão:

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

Um inseto?

O que você encontrou parece um bug. Se você pegar sua string e executar cada vez mais, cracklib-checkverá que, quando chegar ao 26º caractere, começa a falhar:

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

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

Aprofundando isso se eu mudar o último caractere de a tpara dizer vque continua funcionando.

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

Então, parece que na versão cracklib-checkestá ficando pendurado na substring Sth.

Definitivamente, há algo estranho nos pedaços da corda que você forneceu. Se eu pegar a parte final da cauda e omitir a parte frontal, também posso fazer com que essa parte falhe.

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

Essa mesma string também causa problemas no Fedora 19 e no CentOS 6!

ATUALIZAÇÃO # 1

Com base no excelente detalhamento do @ waxwing , agora sabemos que a heurística usada estava sendo disparada se> 4 caracteres estivessem muito próximos um do outro. Foi introduzido um patch que alterava essa heurística para que o comprimento total da senha em consideração fosse levado em consideração para eliminar esses falsos positivos.

Conclusões?

Com base em alguns dos meus testes limitados, parece que existem algumas heurísticas estranhas em jogo aqui. Certas seqüências de caracteres que aparentemente seriam boas estão tropeçando.

Se você estiver tentando codificar isso, sugiro agrupar a geração e a avaliação de uma senha e interromper o ciclo assim que uma senha for gerada e apaziguar cracklib-check.

Ou, pelo menos, sugiro atualizar para uma versão mais recente que inclua as correções mencionadas pelo @maxwing em sua resposta.

Alternativas de geração de senha

pwgen

Também acrescentarei que costumo usar pwgenpara gerar senhas. Isso pode ser útil para você aqui também.

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

Você também pode usar um pouco de magia scripting com tr, /dev/urandome foldpara obter uma senha aleatória de altíssima qualidade.

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

O foldcomando pode controlar o comprimento. Como alternativa, você também pode fazer isso:

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr
slm
fonte
Eu estava executando-o no CentOS 5.5 com cracklib-2.8.9-3.1.src.rpm. Em ambos os casos, porém, como uma sequência aleatória tão longa pode ser simples demais?
BeowulfNode42
@ BeowulfNode42 - não é. Parece que você encontrou um bug ou, pelo menos, uma limitação da implementação.
slm
Estranho. No entanto, uma string como Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6está perfeitamente correta na mesma máquina.
BeowulfNode42
11
Aspas duplas fazer evitar a expansão glob. Porém, aspas simples ainda são uma idéia melhor, caso a string contenha cifrões, reticulares etc.
Dennis
2
"Um patch foi introduzido ..." Também deve ser observado que o patch em questão não é de modo algum recente (diferente da maneira como pode parecer), mas já foi enviado em 2010 :)
syntaxerror