Newsgroup: it.comp.sicurezza.varie
Titolo: Cryptaggio dati Mysql

Ciao a tutto il NG
Vediamo un po' ...
Mysql usa uno standad di encryption delle password dei DB che č a 16
caratteri ascii che dovrebbe essere password() , e sono curioso di saperne
di piů su tale standard se
esiste un programma per decrittare.
Visto che esiste per lo standard md5 che di caratteri ascii ne ha 32
dovrebbe esistere ... qualcuno ne sa di piů?
Saluti a tutti
Cla

 esiste un programma per decrittare.
Certo certo....su free.it.lamers ....ammesso che si siano un po evoluti
e sappiano cosa sia un carattere asckhi ah ah :)
-- 
PGP FP: B61A F1FA 9B99 A3BD 5D2B 6D99 8D3A 5C92 3525 3509


Hey Signor intelligenza,
guarda che non sono qui a giocare a fare l'Hacker ma sto semplicemente
facendo dei test di sicurezza sul mio server Mysql visto che il PHPMyadmin
ha qualche buchetto ...
Nel caso tu conosca la lingua inglese maggiori informazioni sul cryptaggio
dei dati Mysql li puoi trovare qui:
http://www.mysql.com/doc/M/i/Miscellaneous_functions.html
Per la cronaca, 16 Bytes sono 32 caratteri ascii (MD5) , siccome la
lunghezza della stringa di cryptaggio che usa mysql sono 16 caratteri,
dunque 8 bytes a rigor di logica dovrebbe essere più facile decrittarli, ma
magari sbaglio.
In attesa di una risposta più intelligente della prima ti saluto
Cla

 Hey Signor intelligenza,
Probabilmente è la prima volta che posti qui e non hai capito bene
come gira il fumo....ordunque faccio finta di non aver sentito....
Il fatto è che tu non hai chiesto delucidazioni sugli algoritmi di
crittazione...ma ben altro....e la tua domanda era evidentemente
tendenziosa....
Detto ciò, ripensaci e riformula la domanda


 Detto ciň, ripensaci e riformula la domanda
Non che a scuola mi piacesse fare i temi ma penso di averlo scritto in un
italiano chiaro.
Siccome non ti devo spiegazioni in quanto non abbiamo mai pranzato insieme e
non ti conosco aspetto che qualcuno piů socievole, se ne ha piacere, mi dia
delle risposte senza lasciarsi andare a inutili e stupide ironie.
Odio i Flames e odio gli OT ed odio esordire in un NG in questo modo
Saluti
Cla

  Odio i Flames 
Non si direbbe.
*PLONK*
OOPS, e' caduto.
-- 
 (o_   Su questo anello, le lettere riportate da Isildur possono essere 
 //\   ancora lette. Io l'ho fatto, ed ecco cosa vi ho letto:
 V_/_  "Ash nazg durbatuluk, ash nazg gimbatul, ash nazg thrakatuluk 
       agh burzum-ishi krimpatul."  

di piů su tale standard se esiste un programma per decrittare.
Solo a forza bruta. In pratica, provando tutte le passwords.
Come con MD5, del resto.
<canaglia>
Per una maggiore sicurezza, dopo ogni tentativo fallito mettici uno
echo '<!--' + 1K di ASCII random + '-->' e uno sleep(5) sospendendo
il controllo sulla chiusura del browser.
Chi tentasse di far bruteforcing ottiene solo (!) di sovraccaricare
il server, magari mandandolo in crash 8-))))))))))
</canaglia>
OK, il metodo vero e' memorizzare in una tabella la data e l'ora di
un login fallito. Se uno ci riprova, entro N secondi dal login, gli
dici COMUNQUE che la password e' sbagliata, anche se e' giusta. Per
essere sicuri, puoi tenere un contatore degli ultimi 3 tentativi, e
vedere se sono negli ultimi 60 secondi. Se ci sono 3 fails entro 60
secondi, prima di proseguire nel programma, sostituisci la password
con "PUPPA!!!" (che e' sempre sbagliata):
	++ SQLDo($conn, "DELETE FROM attempts WHERE user='$user'
	++		 AND when > dtime(now(), -60);");
	++ $n = SQLGet($conn, "SELECT count(*) FROM attempts
	++		 WHERE user='$user';");
	++ if ($n > 3) $password = 'puppa!!!';
	if (isValidUser($conn, $user, $password))
	{
		...
	}
	++ else
	++ 	SQLDo($conn, "INSERT INTO attempts (user,when)
	++		      VALUES('$user',now());");
Sono sei righe in tutto.
Cosi', prova tutte le combinazioni e scopre che NESSUNA va bene, o,
in alternativa, ci mette... vediamo... due milioni di anni, per una
password alfanumerica di 8 caratteri, se ha una fortuna media.
Oppure ha un c@lo pazzesco e la becca nei primi 3 tentativi 8-D
Leonardo


<cut>
Mammamia che onore ricevere la risposta da un Prof. famoso :-)
Grazie della risposta, questo mi tranquillizza.
In effetti una soluzione come quella che mi hai illustrato la ho
implementata in un mio sistema di gestione delle PWD in php.
registravo gli ultimi 5 login falliti, al 5 tentativo consecutivo da parte
dello stesso IP gli bannavo l'indirizzo.
Così facendo il tentativo di fare un bruteforce si eliminava in quanto ogni
5 tentativi il malintenzionato avrebbe dovuto riconnettersi con un altro ip.
Ma la mia domanda, forse un po' troppo vaga era relativa al fatto che il
malintenzionato la password cryptata la avessse già in mano..una roba tipo
3487f238a0934b4a, e con i programmini di decryptaggio una password md5 si
diceva di poterla ricavare in un paio di gg, in locale, su un pc qualunque
... in poche parole il phpmyadmin lasciava visibili le pass cryptate a
chiunque ... :-(
Grazie mille
Ciao
Cla

 password alfanumerica di 8 caratteri, se ha una fortuna media.
Sto schiattando dalle risate :))


 
http://www.mysql.com/doc/M/i/Miscellaneous_functions.html
grazie per il link...e' proprio quello che stavo cercando...
AMS67
--
Computer games don't affect kids; I mean if Pac-Man affected us as kids,
we'd all be running around in darkened rooms, munching magic pills and
listening to repetitive electronic music.

chiunque ... :-(
Se la password e' banale, sicuro, ci riesce eccome. E' facile: prende
tutte le parole probabili (o possibili), e ne fa un hash. Siccome MD5
e' un algoritmo veloce, puo' provare millanta parole al secondo. Come
arriva ad ottenere 3487f238a0934b4a come crittazione, ZAC, ha trovato
una password valida.
Potresti pero' fare un hash di QUALCOS'ALTRO... per esempio, prendi i
caratteri dell'md5 e li ordini in ordine alfabetico, e fai un hash di
quelli.
A quel punto, per usare una wordlist, sono costretto a RICOMPILARE il
tool di craccazione dopo aver modificato l'algoritmo. E questo riduce
il numero di crackers con le capacita' richieste. Inoltre, riordinare
le stringhe prima di fare un nuovo hash allunga i tempi.
Altra possibilita', aggiungi alla password, prima di fare l'hash, una
sequenza, che deriva dal MOMENTO in cui il tizio si e' registrato nel
database. Per sapere qual e' la mia password sapendo che il md5sum e'
   1e3ce743d17e89fbc436e8cb3d4b6de1
non ti basta piu' provare le parole banali, ma devi anche sapere, per
esempio, quando sono nato.
Oppure, con la stessa password aggiungi ore minuti secondi dell'entry
nel db. Adesso l'hash e' 
   cc1597997c71bb9ac07e92a34fc0e15f
e, se vuoi andare di wordlists, la difficolta' e' appena aumentata di
CENTOMILA VOLTE, nonostante io abbia usato una password banale. Io ti
posso mandare la parola "pippo", ma l'hash NON E' generato da "pippo"
e quindi, codando "pippo", NON ottengo quell'hash - e quindi *scarto*
la parola "pippo" ritenendo che non sia la password.
#include "puppa.h"
Leonardo
-- 
"Open Source programs are designed and developed.
 Our products are tested."
 Steve Lipner, manager, Microsoft Security Response Center

Sto schiattando dalle risate :))
Perche'? :-?



[cut]
Leonardo, cosa intendi esattamente? Che se passano da un proxy banno tutti
quelli che passano da quel Proxy (Es. Libero ecc ...) ... ho capito bene?
In effetti hai ragione ... anche se però avevo già pensato ad una lista di
Anonimizer da mettere in Black list per default ...
Secondo te come faccio a Bannare l'utente? Intendo ... usando i cookies è
relativamente facile ma anche l'aggiramento è facile. Quale è la soluzione a
cui pensavi?
Acc ... in effetti al proxy "pubblico" non ci avevo pensato ... uffi uffi
uffi ...
Ciao e Grazie
Cla

 Perche'? :-?
Mi riferivo ai due milioni di anni....


cui pensavi?
Un database. Oppure, qualcosa di questo tipo:
	1. Arriva l'utente
           N = 3600
	2. Entro nella directory "locks"
	3. Se ho meno di 20 utenti passa al punto 7
	4. Elenco tutti i files, controllando la data
	5. Se la data e' anteriore a now() di piu' di N secondi,
           cancello il file
	6. Ripeto finche' ho elaborato tutta la directory
	7. Esiste il file "$utente.last"?
	8. Se no, $TRY = array($IP, $utente, 5, now());
	9. Altrimenti, $TRY = unserialize(file($utente.failed)[0]);
       10. Se $TRY['attempts'] > 0, vai al passo 14
       12. Se $now - $TRY['lasttime'] > N secondi, vai al passo 14
       13. Location: fottiti.html
       14. $TRY['lasttime'] = now()
       15. Autentifica. Se fallito, $TRY['attempts']--.
       16. fwrite($fp, serialize($TRY));


Mi riferivo ai due milioni di anni....
Be', se ogni tentativo comporta una pausa di tot minuti, un assalto a
forza bruta a uno spazio di N possibilita' mediamente impiega N/2*tot
minuti.
Per quanto un PC possa essere potente, uno sleep(5) dura sempre quei,
vediamo... su Windows... mediamente una mezza dozzina di secondi.
Ovviamente bisogna aver cura di impedire connessioni simultanee.
Facendo du' conti... 8-D


 Facendo du' conti... 8-D
Si si il ragionamento non fa una grinza....infatti stavo pensando
ad un altra ipotesi, telnettare un server...avere le credenziali di
root in forza bruta.....installare un server ftp e cancellare i file
di log.....ahime sfiga vuole....nel frattempo arriva l'omone cattivo,
vede che ha una strana connessione aperta e fa una telefonatina ad
altri due omoni con la divisa in grissio :)) ah ah
UN Dimitry consapevole che non ne sarebbe mai capace...)


di log...
Se ho una console di root, faccio anche senza il server FTP :-)
Esistono comunque sistemi abbastanza banali per tenere fuori anche
un root illegittimo. Per esempio, in un file che non conosci e che
viene attivato al login, viene innescato il lancio (in un modo che
non conosci) di una "bomba" logica che ti buttera' fuori - e fara'
in modo che tu non possa rientrare, al limite anche disattivando a
forza la scheda di rete[1] - a meno che tu non lanci entro un dato
tempo un comando di disinnesco.
Che fai: appena loggato, parti a invocare tutti i binari esistenti
con tutti i parametri del Creato? :-)))
E se il comando fosse nascosto dentro "shutdown"? 8-D
Leonardo
[1] che ritornera' on line solo per 30 secondi, su un protocollo a
    te sconosciuto, in un momento incognito, per ricevere l'ordine
    di ripartire, formulato in un codice che ti e' sconosciuto con
    una sintassi che ignori ;-)))


 E se il comando fosse nascosto dentro "shutdown"? 8-D
In tal caso me lo prenderei nel cu*o :)
