Lamer
Un article de Haypo.
Retour aux programmes de Victor
Lamer est un projet que j'ai écrit pour lister tous les mots de passe stockés en clair d'un ordinateur sous Linux.
Le programme est découpé en modules : chaque module s'occupe d'un programme en particulier. On peut exécuter les modules indépendement. Il existe aussi un mode "verbose" affichant plus d'informations, tapez :
VERBOSE=1 ./all.sh
Sommaire |
[modifier] Modules
| Modules | Fichier | Encodage |
|---|---|---|
| Evolution | ~/.gnome2_private/Evolution | base64 |
| Gaim / Pidgin | ~/.gaim/accounts ~/.purple/accounts | (en clair) |
| gajim | ~/.gagjim/config | (en clair) |
| gftp | ~/.gftp/bookmarks | algorithme maison de chiffrement (voir le code source de gftp) |
| ncftp | ~/.ncftp/bookmarks | base64 |
| pypi | ~/.pypirc | (en clair) |
| svn | ~/.subversion/auth/svn.simple | (en clair) |
| yafc | ~/.yafc/bookmarks | base64 |
[modifier] À faire
Informations sur Firefox :
- Les mots de passe sont stockés dans le fichier <chemin du profile>/signons.txt (texte brut)
- Le mot de passe principal est stocké dans le fichier <chemin du profile>/key3.db (format "Berkeley DB 1.85" ?)
- Autre fichier intéressant : cert7.cb (ou cert8.cb)
Les mots de passe de Firefox sont enregistré dans le format ASN1, lisible par exemple par OpenSSL :
$ echo "MDIEEP(...)gmrbQ==" | openssl asn1parse -i -inform DER 0:d=0 hl=2 l= 50 cons: SEQUENCE 2:d=1 hl=2 l= 16 prim: OCTET STRING 20:d=1 hl=2 l= 20 cons: SEQUENCE 22:d=2 hl=2 l= 8 prim: OBJECT :des-ede3-cbc 32:d=2 hl=2 l= 8 prim: OCTET STRING 42:d=1 hl=2 l= 8 prim: OCTET STRING
Les mots de passe sont donc chiffré avec en des-ede3-cbc : Triple DES EDE à trois clés en mode CBC.
Dans le code source de Mozilla Firefox :
- toolkit/components/passwordmgr/base/nsPasswordManager.cpp : => DecryptString()
- extensions/wallet/src/wallet.cpp : DecryptString() => PL_Base64Decode()
- nsprpub/lib/libc/src/base64.c : PL_Base64Decode()
- autres:
- security/nss/lib/util/quickder.c : Optimized ASN.1 DER decoder
- security/nss/lib/ssl/ssl3con.c : mode = NSS_DES_EDE3_CBC; (SSLCipher) DES_Encrypt; (SSLCipher) DES_Decrypt;
- security/nss/lib/pk11wrap/pk11sdr.c: PK11SDR_Encrypt() et PK11SDR_Decrypt()
- security/nss/lib/pk11wrap/pk11cxt.c : PK11_CipherOp()
Programme utilisant libnss (bibliothèque Mozilla) : FirePassword.
[modifier] Téléchargement
Utilisez SubVersion pour avoir la dernière version de développement :
svn co http://haypo.hachoir.org/svn/lamer
Vous pouvez également consulter le code source en ligne.
[modifier] Protocoles internets
(rien à voir)
- MSN Messenger: Utilise HTTPS (SSLv2 puis SSLv3) pour l'authentification, par contre les messages passent en clair
- Yahoo:
- Le serveur lance un challenge et le client doit y répondre
- Le code libyahoo est très obscure, mais apparemment il y a un hash MD5 avec sel qui est calculé
- ICQ (oscar): hash MD5 de « sel + mot de passe + "AOL Instant Messenger (SM)" » ... mais Ethereal me montre un hash de 8 octets (alors qu'un MD5 fait 16 octets) !?
- Il est difficile casser un hash MD5 d'un mot de passe avec sel ... faut-il encore voir la qualité du sel. Mon seul test d'authentification m'a donné un sel de 4 octets valant 0x00000001, on a déjà vu plus aléatoire
- Il est envisageable de rejouer une séquence d'authentification si le sel est identique
- Selon le site web de Gaim, une méthode d'authentification utilisant XOR existe également
- Une documentation du protocole : iserverd.khstu.ru
- Jabber: hash SHA1 « session_id + password » où session_id fait apparemment 32 bits (envoyé en hexadécimal) et bien aléatoire

