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
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
Prendiamo l'ultima versione da git e lanciamo il setup:
cd /opt
git clone https://github.com/glastopf/glastopf.git
cd glastopf
python setup.py install
Configurazione di glastopf
Creiamo una directory sotto /opt
dove glastopf lavorerà e lanciamolo per la prima volta tramite l'eseguibile glastopf-runner:
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!