Quel giorno in cui conobbi Raspberry Pi…
Il piccolo capolavoro di ingegneria che prende il nome di Raspberry Pi, consente di avere a disposizione ad un prezzo assai economico (45€ in Italia) un vero e proprio server, seppur dalle risorse limitate comunque dal consumo energetico irrisorio, sul quale possiamo installare quasi tutto ciò che vogliamo.
Qualche tempo fa, spinto dalla curiosità di provare sia le potenzialità di Raspberry Pi, sia le funzionalità fornite dalle più diffuse Honeypot per SSH e WEB (kippo/cowrie e glastopf), decisi di acquistare uno di questi piccoli gioiellini tecnologici per mettere in piedi la mia Honeypot personale.
Cos’è una Honeypot
In informatica, una honeypot (letteralmente: “barattolo di miele“) consiste in un sistema o componente hardware/software utilizzato come esca al fine di studiare ed analizzare gli attacchi informatici in tempo reale.
E’ composta solitamente da uno o più siti o servizi di vario tipo che sembrano far parte della rete e che contengono informazioni preziose per un attaccante, ma che in realtà sono ben isolati e non contegono dati reali, ma forniscono a chi li amministra tutti i dettagli tecnici degli attacchi subiti.
Vediamo quindi insieme quali sono i passi da fare per avere la nostra trappola digitale funzionante!
Preparazione del sistema e installazione
Prima di tutto dobbiamo installare sul nostro serverino le due applicazioni che consentiranno di emulare i servizi di SSH e WEB.
Nello specifico utilizziamo Kippo e Glastopf.
NB: è possibile sostituire senza problemi il nuovo fork di kippo chiamato Cowrie, che aggiunge alcune nuove funzionalità ma ne utilizza la struttura, il procedimento da seguire è lo stesso!
Il Raspberry Pi utilizzato monta un’immagine di Raspbian, la distribuzione Linux del progetto, che è possibile installare seguendo questa guida ufficiale.
Installiamo le dipendenze
Per glastopf:
sudo apt-get update
sudo apt-get install python python-openssl python-gevent libevent-dev python-dev build-essential make sudo apt-get install python-argparse python-chardet python-requests python-sqlalchemy python-lxml sudo apt-get install python-beautifulsoup python-pip python-dev python-setuptools sudo apt-get install g++ git php5-fpm php5-dev liblapack-dev gfortran cython sudo apt-get install libxml2-dev libxslt-dev sudo apt-get install libmysqlclient-dev sudo pip install –upgrade distribute
Per kippo:
sudo apt-
get
install build-essential python-dev libmysqlclient-dev python-pip git python-twisted
Installiamo Kippo
Creiamo un utente locale non privilegiato, con il quale verrà eseguito Kippo e utilizziamo git per effettuare il download dei sorgenti da github, dopodichè copiamo il file di configurazione di esempio in quello che sarà il nostro effettivo e che dovremo editare secondo le nostre necessità:
sudo adduser --disabled-password kippo
sudo su - kippo
git clone https://github.com/desaster/kippo.git
cd kippo
cp kippo.cfg.dist kippo.cfg
Kippo si mette in ascolto in maniera predefinita sulla porta 2222. Questo può essere modificato nel file di configurazione, ma non è comunque possibile utilizzare porte minori di 1024 per via dei permessi con il quale verrà eseguito.
In ogni caso, farlo girare sulla porta 22 non è raccomandato.
Per ottenere lo stesso risultato, possiamo utilizzare una regola di iptables che dirotti il traffico in entrata dalla porta 22 alla 2222:
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
Oppure, metodo che utilizzo anche io, implementare una regola direttamente sul router casalingo, che mappi la porta 22 dell’indirizzo di rete esterno sulla porta 2222 dell’indirizzo IP interno assegnato al nostro Raspberry Pi.
File di init per kippo
Creiamo ora un file di init sotto /etc/init.d dal nome kippo che esegua il servizio della honeypot SSH ad ogni avvio:
#!/bin/bash # /etc/init.d/kippo ### BEGIN INIT INFO # Provides: kippo # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: kippo initscript # Description: This service is used to manage kippo ### END INIT INFO case "$1" in start) echo "Starting kippo" cd /home/kippo/kippo sudo -u kippo /home/kippo/kippo/start.sh & ;; stop) echo "Stopping kippo" cd /home/kippo/kippo sudo -u kippo /home/kippo/kippo/stop.sh ;; *) echo "Usage: /etc/init.d/kippo start|stop" exit 1 ;; esac exit 0
E per renderlo attivo non dimentichiamo di aggiornare l’ambiente di init:
sudo update-rc.d kippo defaults
Preparazione all’installazione di Glastopf
L’installazione di Glastopf richiede alcuni punti in più per via delle dipendenze, vediamo quali.
BFR
Prima di installare la honeypot WEB vera e propria installiamo BFR (Better Function Replacer) per PHP:
cd /opt sudo su git clone git://github.com/glastopf/BFR.git cd BFR phpize ./configure --enable-bfr make && make install
L’installazione ci restituirà una stringa che dovremo andare ad inserire all’interno del file di configurazione di PHP-cli, precisamente nel file /etc/php5/cli/php.ini
Aggiungiamo quindi questa riga alla fine del file (la vostra potrebbe essere leggermente diversa):
zend_extension = /usr/lib/php5/20100525+lfs/bfr.so
Pylibinjection
Ora abbiamo bisogno di installare Pylibinjection.
Questa è la procedura attualmente funzionante da seguire, quella indicata nella guida ufficiale non è più valida a causa di alcune recenti modifiche nel codice:
cd /opt sudo su git clone
https://github.com/glastopf/pylibinjection.git
rm /opt/pylibinjection/src/pylibinjection.c cd /opt/pylibinjection/submodules git clone
https://github.com/client9/libinjection.git
cd /opt/pylibinjection/submodules/libinjection ln -s src c cd /opt/pylibinjection/ python setup.py build
Siamo pronti adesso per installare Glastopf!
Intallazione di glastopf
cd /opt git clone https://github.com/glastopf/glastopf.git cd glastopf python setup.py install
Configurazione di glastopf
cd /opt mkdir myhoneypot cd myhoneypot glastopf-runner
Verranno creati dei file all’interno della directory di esecuzione, tra i quali il file di configurazione vero e proprio, che potremo modificare secondo le nostre preferenze!
File di init per glastopf
Creiamo anche per glastopf un file init sotto /etc/init.d dal nome glastopf per attivare lo start del servizio ad ogni avvio:
#!/bin/bash ### BEGIN INIT INFO # Provides: glastopf # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: glastopd initscript # Description: glastopf ### END INIT INFO case "$1" in start) echo "Starting Glastopf Honeypot" cd /opt/myhoneypot /usr/local/bin/glastopf-runner --workdir /opt/myhoneypot 2>&1 >/dev/null & ;; stop) echo "Stopping Glastopf Honeypot" kill -9 `ps aux | grep glastopf-runner | grep -v grep | awk '{ print $2 }'` 2>&1 >/dev/null ;; restart) echo "Restarting Glastopf Honeypot: " /etc/init.d/glastopf stop > /dev/null /etc/init.d/glastopf start > /dev/null ;; status) value=`ps aux | grep glastopf-runner | grep -v grep | wc -l` if [ $value -eq 0 ]; then echo "Glastopf is stopped." else echo "Glastopf is running." fi ;; *) echo "Usage: /etc/init.d/glastopf {start|stop|restart|status}" exit 1 esac
E per renderlo attivo non dimentichiamo anche in questo caso di aggiornare l’ambiente di init:
sudo update-rc.d glastopf defaults
Ecco pronti i nostri servizi esca, che consentiranno di attirare gran parte del traffico malevolo di bot e smaliziati curiosoni e che potremo analizzare comodamente attraverso i log che i due servizi ci metteranno a disposizione!
Note finali
Personalmente utilizzo il database MySQL per loggare tutto il traffico ricevuto; è possibile farlo facilmente poichè entrambi i software prevedono già all’interno del file di configurazione la possibilità di modificare l’ambiente di logging.
Questo sarà però argomento di un prossimo articolo, assieme alle indicazioni su come installare il piccolo framework che ho scritto personalmente per estrarre i dati più significativi dai rispettivi database e integrarli in un sito web dedicato, ne trovate una testimonianza sul mio sito personale: www.purificato.org
Perciò vi invito a seguirmi, sia su questa piattaforma che sui principali social network, potete trovare tutti i riferimenti in fondo alla pagina e se pensate che queste mie righe vi siano state utili, condividete l’articolo attraverso i link qui sotto!