Un Honeypot SSH con Kippo
Chiunque abbia un minimo di esperienza nel mettere a punto server rivolti verso Internet conosce bene la quantità di scansioni e di attacchi automatizzati che si possono ricevere in brevissimo tempo, a volte nel momento stesso in cui ci si collega in Rete.
Molti scanner non sono sofisticati e si limitano a cercare porte ssh aperte per tentare un bruteforce e, in caso di successo, passare il controllo ad un attaccante umano (un cracker non un hacker).
Come descritto in un precedente articolo “Sicurezza con il PortKnocking” , i passi da fare per mettersi al sicuro non sono mai abbastanza ed inparticolare alcuni servizi vanno completamente blindati anche solo per evitare enormi moli di log del firewall, solo per i tentativi di login al servizio SSH; proprio per questi motivi un ottimo esercizio e’ quello di creare un honeypot partendo da quest’ultimo servizio.
In questo contesto si colloca Kippo: un honeypot che simula un server ssh vulnerabile il cui obiettivo è quello di impegnare un attaccante e registrarne i movimenti. E’ un tool open source scritto in Python progettato quindi per registrare attacchi di tipo bruteforce e, soprattutto, l’intera interazione shell effettuata dall’ attaccante. In pratica quando un utente malintenzionato cercherà di entrare nel vostro sistema si troverà davanti un finto sistema che registrerà tutte le sue attività.
Kippo nel tempo si è guadagnato una certa popolarità dovuta alla sua semplicità d’uso, portabilità e al fatto che permette di riprodurre i log degli attacchi registrati.
Installazione
Kippo è programmato in Python e si basa sul framework Twisted, è necessario quindi un interprete python almeno alla versione 2.5.
I requisiti sono i seguenti:
- Python 2.5+
- Twisted 8.0+
- PyCrypto
- Zope Interface
come prima cosa bisogna cambiare la porta del server SSH per fare questo basta aprire e modificare il file sshd_config:
# vim /etc/ssh/sshd_config
e sostituire la porta 22 con un’altra a vostra scelta,
Dopo aver modificato il parametro Port 22 con un altro (es. 2443) riavviare il servizio con il commando:
# /etc/init.d/ssh restart
Una volta sistemato questo piccolo dettaglio, bisogna installare tutti i pacchetti necessari per il corretto funzionamento di Kippo:
Prima di mettere in esecuzione l’ honeypot occorre configurarlo agendo sui parametri nel file kippo.cfg
.
Le principali opzioni sono le seguenti:
ssh_addr
: l’indirizzo dell’interfaccia su cui vogliamo mettere kippo in ascolto (di default su tutte)ssh_port
: il numero della portapassword
: la password per collegarsi all’ honeypot, di default è123456
che statisticamente è la password più comune che si può trovare. Se impostiamo una password difficile rischiamo di far fallire un attacco brute force! e ci perdiamo il bello del divertimento.[database_mysql]
: parametri per loggare tutta l’attività di kippo su un db mysql. Di default questa opzione non è attiva.
Su Linux per motivi di sicurezza kippo non può essere eseguita come root e quindi non può mettersi direttamente in ascolto sulle porte basse del sistema (< 1024) tra cui anche quella di default del server ssh (la porta 22).
Per reindirizzare la porta 22 sulla porta in cui abbiamo messo in ascolto la honeypot dobbiamo impostare un reindirizzamento con il firewall di sistema. L’impostazione corretta dipende dal firewall che state usando sul vostro server e dalla tipologia della rete.
Ad esempio con iptables:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j REDIRECT --to-port 2443
oppure usando l’ottimo tool rinetd, come spiegato enll’articolo “Catturare il traffico di rete“.
Installiamo i pacchetti
# apt-get install python-dev openssl python-openssl python-pyasn1 python-twisted
Visto che la porta 22 (che kippo dovrà monitorare) può essere utilizzata solo dall’ utente root e per ragioni di sicurezza non è consigliato usare kippo come utente root bisogna installare un altra piccola applicazione, Authbind, che ci permetterà di eseguire kippo sulla porta 22:
# apt-get install authbind
Ora creiamo un altro utente (non-root) che useremmo per eseguire kippo (non è vietato eseguire kippo come root ma per ragioni di sicurezza è consigliato usare un utente apposito):
# adduser kippo
e aggiungiamolo alla lista dei sudoers:
# vim /etc/sudoers
aggiungendo la seguente stringa nel file:
kippo ALL=(ALL:ALL) ALL
(sotto l’utente root)
Non ci resta che dare all’ utente kippo i privilegi per usare la porta 22:
# touch /etc/authbind/byport/22
# chown kippo:kippo /etc/authbind/byport/22
# chmod 777 /etc/authbind/byport/22
Ora non ci resta che cambiare utente ed entrare nel sistema con l’utente kippo, una volta cambiato utente siamo pronti a scaricare kippo (verificare sul sito del progetto per nuove versioni):
# wget https://kippo.googlecode.com/files/kippo-0.8.tar.gz /home/<utente xxx>/Downloads/
estraiamo i file:
# tar -zxvf kippo-0.8.tar.gz -C /opt/
ora ci spostiamo nella cartella del programma e modifichiamo il file kippo.cfg inserendo la porta 22 come target (di default è impostata la 2222) con la porta da voi prescelta, tipo la 2443.
# vim kippo.cfg
ed in fine modifichiamo il file start.sh:
# vim start.sh
sostituendo la stringa:
twistd -y kippo.tac -l log/kippo.log –pidfile kippo.pid
con:
authbind –deep twistd -y kippo.tac -l log/kippo.log –pidfile kippo.pid
ora non ci resta che eseguire il programma con:
# ./start.sh
…… e qualsiasi tentativo di connettersi alla porta 22 del sistema sarà registrato da Kippo e file di log verranno archiviati nella cartella corrispondente. Kippo rimane in esecuzione in background e aspetta che qualche attaccante si faccia vivo.
Quando finalmente riusciremo a registrare un attacco (e solitamente è questione di solo poche ore!) l’honeypot si occuperà di registrare ogni movimento.
Nella cartella log/
verranno salvati i log interattivi delle sessioni registrate e in quella dl/
verranno salvati i file e gli eseguibili che gli ignari attaccanti tenteranno di scaricare sul server (di solito rootkit, malware generici, etc)
Il divertimento, una volta collezionati un po di log interattivi, è quello di riprodurli con il playlog
che è una utilità che permette di riprodurre i log come se fossero un video.
Il programma si trova nella cartella utils/
, per eseguirlo (da linea di comando):
python playlog.py /path/to/xxx.log
Statistiche
Quando si ha una honeypot funzionante a pieno regime può risultare scomodo controllare periodicamente i log per capire il numero di attacchi ricevuti, la durata e altre informazioni utili.
Per facilitarci le cose possiamo affidarci a un programma come Kippo Graph che si occupa di generare statistiche dettagliate e farci risparmiare del tempo prezioso.
Pingback: Firewall apriamo un passaggio segreto | Tutti per Linux