Categories
Privacy Security

Encore un mot de passe en moins à retenir

Je ne connais plus le mot de passe de mon compte Google. L’accès à ce compte est maintenant également géré avec pass et ma Yubikey. Comme pour tous les autres services Web que j’utilise. pass permet donc de gérer les mots de passe (génération, modification, suppression, recherche, etc.) en ligne de commande. Lorsque j’ai besoin d’un mot de passe, il est stocké dans le presse-papier pendant 45 secondes. Je n’ai donc pas besoin de voir le mot de passe. Cela signifie que si je n’ai pas accès à mon ordinateur, je ne pourrai pas me connecter à tout une flopée de services Web (pour Google, mon téléphone y est toujours connecté…). Il est assez rare que je n’ai pas accès à mon téléphone ou à ma Yubikey.

Cela fait maintenant pratiquement un an que j’utilise l’authentification à deux facteurs avec une clé Yubikey Neo pour tous les services le permettant. Je trouve ceci plutôt pratique d’usage. J’en suis réellement satisfait.

J’augmente ainsi progressivement la sécurité de mes comptes liés à des services Web. Mon compte Google était le dernier à ne pas être géré avec pass. De nombreux autres comptes sont déjà gérés de la même manière depuis quelques temps (sans que je ne me soucis de retenir le mot de passe). Pour les identifiants moins importants comme par exemple ceux de ma banque ou de mon compte MesLacets.com. Et évidemment les plus importants comme ceux de Gandi et GitHub.

Categories
Security

Gestion de mots de passe

Mon fichier chiffré contenant l’ensemble de mes mots de passe est compliqué à maintenir. Je vais donc construire mon propre outil de gestion de mots de passe qui sera inspiré de Password Safe. Vos contributions sont les bienvenues.

Categories
Security

Extraire les mots de passe de Firefox

#!/usr/bin/env python
# ffpwdcracker - Crack the passwords stored using Firefox browser. The script currently works only on Linux.
#
# usage: ffpwdcracker [paths_to_location_of_files]
# Run it with no paramters to extract the standard Passwords from all Profiles of the current
# logged in User.
# Required files:
#    + key3.db
#    + signongs.sqlite 
#    + cert8.db 
# are used and needed to collect the passwords.
from ctypes import *
import struct
import sys
import os
import glob
import re
import time
import base64

 structures
class SECItem(Structure):
    _fields_ = [('type', c_uint),('data', c_void_p),('len', c_uint)]
        
class secuPWData(Structure):
    _fields_ = [('source', c_ubyte),('data', c_char_p)]

(SECWouldBlock, SECFailure, SECSuccess) = (-2, -1, 0)
(PW_NONE, PW_FROMFILE, PW_PLAINTEXT, PW_EXTERNAL) = (0, 1, 2, 3)

def errorlog(row,path):
    print("----[-]Error while Decoding! writting error.log:")
    print(libnss.PORT_GetError())
    try:
        f = open('error.log','a')
        f.write("-------------------\n")
        f.write("#ERROR in: %s at %s\n" %(path,time.ctime()))
        f.write("Site: %s\n"%row[1])
        f.write("Username: %s\n"%row[6])
        f.write("Password: %s\n"%row[7])
        f.write("-------------------\n")
        f.close()
    except IOError:
        print("Error while writing logfile - No log created!")

#reads the signons.sqlite which is a sqlite3 Database (>Firefox 3)
def readsignonDB(userpath,dbname):
    if libnss.NSS_Init(userpath)!=0:
        print("""Error Initalizing NSS_Init,\n
                propably no usefull results""")
    print("Dirname: %s" % os.path.split(userpath)[-1])
    import sqlite3
    conn = sqlite3.connect(userpath + os.sep + dbname)
    c = conn.cursor()
    c.execute("SELECT * FROM moz_logins;")
    for row in c:
        print("Site: %s" % row[1])
        uname.data  = cast(c_char_p(base64.b64decode(row[6])), c_void_p)
        uname.len = len(base64.b64decode(row[6]))
        passwd.data = cast(c_char_p(base64.b64decode(row[7])), c_void_p)
        passwd.len = len(base64.b64decode(row[7]))
        if libnss.PK11SDR_Decrypt(byref(uname), byref(dectext), byref(pwdata)) == -1:
            errorlog(row, userpath + os.sep + dbname)
        print("Username: %s" % string_at(dectext.data, dectext.len))
        if libnss.PK11SDR_Decrypt(byref(passwd), byref(dectext), byref(pwdata)) == -1:
            errorlog(row, userpath + os.sep + dbname)
        print("Password: %s" % string_at(dectext.data, dectext.len))
        print("")
    c.close()
    conn.close()
    libnss.NSS_Shutdown()

if __name__ == "__main__":
    # Point of entry in execution mode.
    ordner = sys.argv[1:]
    #Load the libnss3 linked file
    libnss = CDLL("libnss3.so")

    pwdata = secuPWData()
    pwdata.source = PW_NONE
    pwdata.data=0

    uname = SECItem()
    passwd = SECItem()
    dectext = SECItem()

    for user in ordner:
        signonfiles = glob.glob(user+os.sep+"signons*.*")
        for signonfile in signonfiles:
            (filepath,filename) = os.path.split(signonfile)
            filetype = re.findall('\.(.*)',filename)[0]
            if filetype.lower() == "sqlite":
                readsignonDB(filepath,filename)
            else:
                print("Unhandled Signons File: %s" % filename)
                print("Skipping") 

J’ai trouvé ce script sur Internet et je n’ai pas modifié grand chose. Il est pratique si vous voulez récupérer vos mots de passe rapidement. Certaines personnes reposent uniquement sur la fonctionalité d’enregistrement de mots de passe de Firefox, ce qui peut vite devenir embêtant avec un grand nombre d’identifiants si par mégarde vous perdez le fichier signongs.sqlite. De plus comme on peut le voir ici, il n’est pas très compliqué de récupérer ces informations.

Pour moi les meilleures solutions (certes contraignantes) pour stocker vos identifiants en sécurité sont:

  • dans un simple fichier texte chiffré avec votre clé privée. Le fichier reste chez vous, de préférence pas sur la même machine que la clé;
  • sur une feuille de papier. La feuille reste chez vous. Accessoirement le masochiste pourra par exemple appliquer un petit ROT13 à la main;
  • avec un logiciel comme KDE Wallet. Certainement la solution la moins contraignante.

Si un cambrioleur est attiré par votre maison pour ces informations vous avez d’autres problèmes que moi.

Categories
Privacy Security

Les comptes de messagerie sont plus précieux que les comptes bancaires

C’est bien pour cette raison que ça me fait toujours sourire de voir que la plupart des personnes stockent le mot de passe de leur messagerie (ou comptes Google Plus, Dropbox, etc.) dans le navigateur, mais pas le mot de passe pour le site de la banque.
Ce qui montre bien qu’il n’est pas si simple d’évaluer la criticité d’un contexte ainsi que l’impact (direct ou indirect) d’une attaque (comme l’usurpation d’identité).