viernes, 8 de junio de 2012

Leak linkedin

Sabiendo que hay muchas personas ágiles con linkedin, pienso que amerita dedicarle un ratito. Sólo hay que bajar el dump de http://bit.ly/KGTusG y ejecutar el programa, que he sacado de https://gist.github.com/2884354, pero agregándole el segundo if, para verificar si está el password de uno está pero no habia sido aun descifrado.


Parece que linkedin no usa salts en sus passwords, lo cual facilita enormemente hacer ataques de diccionario y rainbow tables.

El archivo consiste en 6.5 millones de hashes, de los cuales más de la mitad tienen reemplazados los primeros caracteres por 000000. Si se prueba con los passwords comunes, se hallan, lo cual suguiere que quien perdió este archivo ya rompió esos hashes.

La prueba del autor original es verificar si el password de uno ha sido descifrado o no. Es altamente probable que si lo encuentra, sea, pero tambien puede ser una colisión producida por los ceros, difícil, muy difícil.

La prueba que agrego es por si el password de uno es bueno y no ha sido roto, está en la lista, esperando a ser roto por alguien con más tiempo.

Asi que, a ejecutar y cambiar el password si hace falta.

Agradeceré que cualquiera que encuentre su password en la lista deje un comentario, sobre todo si es detectado por la segunda prueba. Tambien mencionar si es un password que es sólo de linkedin.


En caso de que sea un password que sea compartible, por favor dejarlo tambien, asi puedo verificar si la prueba es correcta. Mientras voy a correr mis crackers, a ver si encuentro algo.

Con "compartible" me refiero a que no tenga relación con otros passwords.


"""
Check if your password is in the linkedin password dump.
You'll need to download the dump from here: http://bit.ly/KGTusG and unzip it to combo_not.txt
"""

import hashlib
import getpass

pw = getpass.getpass('Enter your LinkedIn password: ')
sha1 = hashlib.sha1(pw).hexdigest()
hash = '00000' + sha1[5:]

found = False
with open('combo_not.txt') as f:
    for i, line in enumerate(f):
        h = line.strip()
        if hash == h:
            print "Found it decrypted on line %d" % i
            found = True
        if sha1 == h:
            print "Found it but encrypted on line %d" % i
if not found:
    print "password %s not found" % (pw)



Además acá hay un lindo análisis:

http://cyberarms.wordpress.com/2012/06/07/analysis-of-passwords-dumped-from-linkedin/

No hay comentarios:

Publicar un comentario