Creare un Unix password cracker in Python

Per chi non l’ha mai letto, o conosciuto, esiste un libro, parecchio interessante dal titolo “Violent Python: A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers”. In questo libro vengono spiegati molti modi per sfruttare il linguaggio di programmazione Python, per creare utility e script di sicurezza, tecniche di analisi di vulnerabilità e quantaltro, di modo da poterne studiare il funzionamento.

In questo post vediamo come, con un esempio semplice, si può tramutare in concretezza. Noi tutti sappiamo che le password di accesso in un sistema Unix vengono memorizzate all’interno del file /etc/shadow, leggibile solo dall’utente root. Ora sicuramente starete pensando: “Posso quindi scaricare il file e quindi leggerlo? In questo modo posso trovare tutte le password degli utenti e accedere al pc della vittima per esplorarne tutto il contenuto? Ehm… No. Fortunatamente non è così immediata la situazione. Il concetto è questo: quel file è criptato di modo che non è sufficiente aprirlo per leggerne il contenuto.

Quindi è così? Non c’è un modo per ottenere le password ora? Beh in realtà, è possibile realizzare la vostra missione in un sacco di altri modi!

La password viene criptata con un sale e l’hash della password stessa. Fondamentalmente il sale è una stringa di 2 caratteri che verrà utilizzata per selezionare una delle 4096 variazioni di DES (Data Encryption Standard), un vecchio sistema di criptazione. Lasciate che vi faccia un esempio di come questo sistema funziona! Aprire il vostro IDE, Gedit o qualunque tipo di programma di scrittura che usate abitualmente.

import crypt
crypt.crypt(“turtle”,”HX”)

“HX.t7090XWhTI” Come si può notare HX è il sale e il resto è esattamente l’hash della password. Capite ora come funziona? Se si utilizza un attacco di tipo dizionario, confrontando l’hash di ogni parola nel dizionario con l’hash di una password data tramite /etc/shadow. Cominciamo a scrivere codice.

  • Iniziamo con la definizione di una funzione che chiamiamo Testpass, che accetta un argomento/variabile chiamato CryptPass.
  • Dopo di che ci assicuriamo che il sale siano effettivamente i primi due di CryptPass.
  • Ora apriamo il file dizionario che intendiamo utilizzare, la “r” sta per sola lettura.

  • Creiamo una nuova variabile  che chiamiamo Cryptword alla quale passiamo la crittografia dei termini nel dizionario.
  • Quindi se Cryptword è uguale a CryptPass significa che sia il sale che l’hash coincidono perfettamente e dunque abbiamo trovato la nostra password.

  • Aggiungiamo una seconda funzione main, che richiama la precedente e inizializza tutto il processo fornendo anche un output comprensibile.

E con questo abbiamo tutto ciò che occorre per creare un UNIX DES password cracker! Solo testando e provando le tecniche assodate dagli hacker, possiamo comprenderne i meccanismi veri e propri, per capire anche come difendere i nostri sistemi.

Avvia una discussione su questo tema per coinvolgere i lettori con le tue opinioni