Come creare una Honeypot su Raspberry Pi

Quel giorno in cui conobbi Raspberry Pi…

Raspberry Pi Honeypot

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

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!


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

Honeypot Statistiche

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!