Appunti digitali

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
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!