Indica un sistema di password errate per impedire determinati caratteri nelle password?

14

Quando crea un account al gioco League of Legends , la password dell'utente deve rispettare alcune regole.

Quellodicuisonopreoccupatoèil"Non deve contenere barre o spazi" uno. Gli altri sono requisiti di password sensati (beh, eccetto la lunghezza massima), ma disabilitare le barre o gli spazi sembra strano.

Non riesco a trovare altre spiegazioni delle password che vengono inviate o salvate in testo normale con i caratteri suddetti che incasinano il formato, poiché in un hash tali caratteri scomparirebbero. Sembra strano anche solo non consentire a questi di impedire ad es. SQL injection o altre cose simili, soprattutto perché dovrebbero essere gestite normalmente con tutti i dati.

Quindi, oltre a ridurre l'entropia riducendo il set di caratteri disponibile, questo potrebbe indicare un problema più profondo. Cosa ne pensi?

    
posta user64611 03.01.2015 - 21:54
fonte

4 risposte

14

Divieto a certi caratteri non indica di per sé che il sistema password è danneggiato, ma è un brutto segno e suggerisce che lo sviluppatore ha scarsa conoscenza o una cattiva comprensione del proprio sistema di elaborazione dati . La spiegazione più probabile è che lo sviluppatore teme un qualche tipo di attacco per iniezione: iniezione SQL, o cross-site scripting, o qualcosa del genere. Anche le barre e gli spazi sono i caratteri più probabili qui, ma forse anche ' , < e > sono proibiti, o forse sono ri-codificati (ma allora perché non reencodificare / e spazio?).

La password deve essere inviata in chiaro al server e cancellata lì, o almeno una codifica della password deve essere sottoposta a hashing sul server (se la password è stata sottoposta a hashing sul client, l'hash della password sarebbe effettivamente il password, che non sarebbe un bene se un intercettatore l'avesse ottenuta).

Potrebbe essere il caso in cui l'infrastruttura web non sia buona (piena di SQL injection, XSS, ecc.) ma il codice di hashing della password capita di richiamare la funzione di libreria corretta e memorizza un hash salato e lento della password. Oppure potrebbe essere il caso in cui la password è memorizzata in uno pseudo-database di strano formato ed è per questo che alcuni caratteri sono proibiti.

Potrebbe anche darsi che questo sia un requisito dell'esperienza utente, che può o non può essere stato interpretato come previsto dallo sviluppatore. Alcuni siti limitano i caratteri speciali nelle password in modo da impedire agli utenti di scegliere password che non saranno in grado di digitare facilmente su alcuni dispositivi. Dato che questo è per un gioco, forse c'è un'interfaccia di gioco che richiede all'utente di inserire la propria password, ma non consente spazi o barre (o barre inverse, che sono anche vietate). Se è così, probabilmente dovrebbero anche vietare i caratteri non ASCII.

Guardando le istruzioni per il recupero della password di League of Legends, sembra che non memorizzano la password in chiaro, ma per fornire un collegamento per la reimpostazione della password standard del settore inviato all'indirizzo e-mail associato all'account. Un annuncio sulla sicurezza menziona che il database delle password contiene "hash delle password salate", quindi sembrano sapere come fare le cose correttamente. Almeno hanno alcune nozioni di base giuste - la pagina a cui si collegano spiega salt ma non dice che l'hash della password deve essere lento. Tuttavia, dati questi indizi, non sono eccessivamente preoccupato: probabilmente non stanno facendo qualcosa di estremamente brutto (nel peggiore dei casi usano un hash veloce ma salato). Sospetto che la spiegazione delle restrizioni sia un'interfaccia ristretta per digitare una password in alcune versioni del gioco.

    
risposta data 03.01.2015 - 22:27
fonte
3

Potresti contattare i proprietari del sito e chiedere loro specificamente cosa succede con il requisito arbitrario. In realtà, chiedi loro in particolare quale algoritmo di hashing della password stanno utilizzando per creare un digest della tua password e come stanno calcolando e memorizzando il sale.

Forse sto esagerando un po ', ma il mio punto è che se il loro sistema è sicuro perché è oscuro, allora non è sicuro.

Non userò la stessa password per quel sistema che usi per il tuo banking online, ma questo è un buon consiglio su tutta la linea (password diverse per siti diversi).

Per quanto riguarda la lunghezza massima, gli algoritmi di hashing primitivi accettati come gli algoritmi SHA non si preoccupano della lunghezza dell'input e la lunghezza dell'output da quelle funzioni è costante indipendentemente dalla dimensione dell'ingresso, sia che l'input sia tre caratteri o intera Enciclopedia Britannica.

Se vuoi una password di 100 caratteri, dovresti averne una.

La limitazione della password a 16 caratteri mi dice (giusto o sbagliato) che probabilmente stanno memorizzando la tua password in chiaro e il campo in cui lo memorizzano è lungo 16 caratteri.

EDIT: Oppure potrebbe essere un segno che stanno facendo qualcosa sulla falsariga del vecchio algoritmo di hash delle password di LanManager, usando la tua password, o parti tagliate della tua password, come chiavi per un cifrario simmetrico come DES o AES per generare hash di password di dimensioni fisse. Questo potrebbe essere fatto bene o fatto male. Stanno usando del sale? Preferiscono un algoritmo di hash veloce (NON un buon segno se lo sono) sugli algoritmi progettati per l'hashing delle password, come scrypt / bcrypt / pbkdf2? Ecc.

Inoltre, gli spazi e le barre non sono diversi da altri caratteri, a meno che non stiano facendo qualcosa di simile a usare il valore della password per un nome di file (forse un nome di file temporaneo) o passarlo incorporato in qualcosa come SQL o JSON, nel qual caso si preoccuperebbero di dover correttamente scappare da quei valori nella stringa o interrompere il loro software.

Quello che dovrebbe fare è gestire la password come dati binari, codificandola come necessaria se devono passarla da un componente a un altro (ad esempio Base64), e mai mantenendo la password effettiva non modificata circa anche nella RAM più a lungo del necessario, quindi memorizzando l'hash. Nel caso di SHA-1 (teoricamente rotto ora), l'hash è lungo 160 bit, anche se ci sono dei sostenitori del troncamento dell'hash prima della memorizzazione (non sono del tutto sicuro di trovarmi in quel campo, ma è probabilmente va bene e questo è un altro problema).

La sicurezza è difficile da fare bene, spesso fatta male, spesso trascurata o trattata alla leggera e questo sistema suona fragile, per me, oltre a tutto questo. Penso che tu abbia ragione di esserne sospettoso.

    
risposta data 03.01.2015 - 22:24
fonte
1

Potrebbero esserci motivi legittimi per limitare l'insieme di caratteri consentiti nelle password. Ad esempio, se la password conteneva un carattere che non era un carattere ASCII stampabile, i problemi di codifica potrebbero potenzialmente causare il rifiuto di una password corretta in determinate circostanze.

Inoltre, se un utente può, in momenti diversi, dover digitare la stessa password su diversi layout di tastiera, può essere problematico utilizzare caratteri che si trovano in modo diverso su quei layout di tastiera.

Un avversario potrebbe essere in grado di capire quali utenti sono interessati dai suddetti problemi e in questo modo ottenere una certa conoscenza dei caratteri che gli utenti hanno usato nella loro password.

Limitare l'insieme di caratteri consentiti per i motivi sopra indicati non deve indebolire la forza delle password. Tutto quello che devi fare è rendere la password leggermente più lunga. (Nel caso estremo, se passassi dal consentire a tutti gli ASCII stampabili di consentire solo lettere minuscole, dovresti aumentare la lunghezza della password del 40% per avere la stessa entropia.)

Ci sono anche cattive ragioni per limitare il set di caratteri consentiti. Ad esempio, se un sistema limita l'insieme di caratteri consentiti per prevenire attacchi di SQL injection, ti dirà due difetti di sicurezza nel sistema. Prima di tutto, non usa la corretta escaping per le query SQL. In secondo luogo, chiaramente non usa alcun hashing delle password.

Per la lunghezza della password una limitazione può essere una buona idea solo per evitare problemi nel caso in cui alcuni client impongono limitazioni arbitrarie sui campi di input. Ad esempio, se qualcuno ha pensato che fosse una buona idea usare un carattere firmato per indicare la lunghezza di un campo, allora non avrebbe più di 127 caratteri al massimo. Ho realizzato sistemi in cui ho imposto una lunghezza massima di 125 caratteri sulle password come precauzione contro tali possibilità (e forse un paio di errori off-by-one).

L'applicazione di una lunghezza massima alle password riduce la sicurezza se la lunghezza massima è troppo breve. Dovresti confrontare con le primitive crittografiche simmetriche che potresti usare. Ciò significa che dovremmo confrontarci con le dimensioni dei blocchi e delle chiavi dei codici a blocchi e con l'output delle funzioni di hash. Ciò significa che normalmente ci aspetteremmo da 128 a 512 bit di sicurezza dai nostri primitivi crittografici. Disabilitare le password che potrebbero corrispondere a quei livelli di sicurezza sarebbe controproducente. A seconda dell'insieme di caratteri consentito, potrebbero esserci da 4.7 (solo lettere minuscole) a 6.57 (tutti ASCII stampabili) bit di entropia per carattere in una password complessa. Con un po 'di matematica vediamo che se non permettiamo almeno 20 caratteri, imposteremo sicuramente il limite troppo basso e se consentiremo 109 caratteri dovremmo essere molto al sicuro.

È improbabile che uno dei limiti superiori a 100 o 125 abbia un impatto reale sulla sicurezza, perché molto probabilmente nessun utente sta per arrivare così in alto.

Quando si menziona una lunghezza massima di 16 caratteri che viene applicata, indica che probabilmente i progettisti hanno introdotto tale limite per una cattiva ragione. Una cattiva ragione potrebbe essere che la password viene archiviata come testo normale e solo 16 caratteri sono stati allocati per la memorizzazione. Un altro motivo non altrettanto negativo sarebbe che la password è utilizzata direttamente come chiave per una primitiva crittografica (come AES).

La combinazione delle due restrizioni (non consentendo due caratteri specifici e un piccolo limite massimo) è un segnale di avviso, poiché ciascuna di esse potrebbe essere una scelta fatta a causa della memorizzazione delle password come testo normale.

Che la coppia specifica di personaggi che hanno deciso di non accettare sono spazi e tagli di suoni spaventosi, perché le ragioni che potrei immaginare per quei due caratteri specifici che non sono consentiti è che potrebbero voler mettere la password in testo in chiaro nel nome di un file o una riga di comando. Speriamo che sia solo una questione di me che manca un po 'di immaginazione.

    
risposta data 04.01.2015 - 01:07
fonte
1

Di solito dico alle persone che un sito è importante, "Se ci sono dei personaggi proibiti, stanno memorizzando la password in chiaro". Non necessariamente vero; tuttavia viene detto quanto segue quando l'altra estremità cerca di affermare non così: "Vedere i caratteri ristretti urla all'ingegnere 'Memorizzo le password in chiaro' molto più di qualsiasi documentazione, e se non è vero, la restrizione può essere facilmente rimossa."

A causa di questa pressione generale che viene applicata per un po 'di tempo, possiamo ragionevolmente supporre che i restanti siano quelli che conservano le password in chiaro e risolverlo è un modo economico per dire "non noi".

Upshot: se non puoi essere disturbato a non limitare il campo della password non sei degno della mia fiducia, e porterò la mia attività altrove.

    
risposta data 04.01.2015 - 05:24
fonte

Leggi altre domande sui tag