A cura di Vincenzo Digilio – Cyber Security Specialist

Deploy a Honeypot

 Capitolo IV – Let There Be Darkness

Che cos’è un Honeypot?

Per spiegarlo vi cito un estratto del manifesto/libro/racconto: The Fallen Dreams:

“Immaginate una creatura disgustosa e repellente, coloratela di un bianco candido e cospargetela con delizioso miele. Così, vi apparirà la nostra gloriosa società: superficialmente candida e dolce, ma all’interno una gora di pus ed aberranti forme che si contorcono voluttuosamente nel tentativo di fagocitare ogni cosa. […]”

L’honeypot non è nient’altro che un’esca: un “barattolo di miele” reso particolarmente appetibile tramite l’esposizione di vulnerabilità. Esso viene implementato appositamente per ingannare l’attaccante, in modo da poterne studiarne il comportamento. Difatti, con le informazioni ottenute monitorando l’honeypot è possibile migliorare la sicurezza della propria rete aziendale. Nello specifico, analizzando il traffico in entrata nel sistema è possibile capire:

  • Le minacce
  • La resilienza delle attuali misure di sicurezza
  • I dati d’interesse
  • La sorgente dell’attacco
  • La criticità della minaccia

Passiamo adesso alla sua creazione.

Configurazione di un Server Honeypot “Non-interattivo”
[ Torna all’indice ]

Come primo esempio, ipotizzeremo di voler creare il nostro honeypot usando come esca una connessione SSH, non sufficientemente protetta.

Prima di tutto, è necessario preparare la nostra trappola in modo che l’attenzione dell’attaccante venga indirizzata esattamente dove desideriamo.

Nel caso avessimo due schede di rete potrebbe essere necessario bloccare tutto il traffico in uscita, ad esempio dall’interfaccia eth0, utilizzando il comando:

iptables -A OUTPUT -o eth0 -j DROP

Il comando iptables è integrato nel Kernel di Linux e permette di configurare le regole di filtraggio dei pacchetti, alla stregua dell’implementazione delle regole su un Firewall.

Nel caso in cui non fosse installato, sarà sufficiente il comando:

sudo apt-get install iptables
  • Iptables : comando
  • -A : concatena una o più regole
  • OUTPUT : tutto il traffico in uscita
  • -o : interfaccia network
  • eth0 : il nome della nostra interfaccia
  • -j : Salta alla “destinazione” specificata quando un pacchetto soddisfa una particolare regola
  • DROP : scarta, “non accettare”

Durante la scansione di ricognizione dell’attaccante, il nostro honeypot (dall’interfaccia eth0) non restituirà alcuna informazione.

Nel caso invece di una singola interfaccia di rete (sempre eth0), configuriamo la default port per il nostro “daemon” ssh /etc/ssh/sshd_config , su una porta “non-standard”, ad esempio la 44444 (solitamente il servizio SSH utilizza la porta 22).

Per cambiare la “default-port” del servizio SSH sarà sufficiente editare il file di configurazione sshd_config. Se non conosciamo il percorso del file di configurazione (solitamente /etc/ssh/sshd_config), digitiamo:

locate sshd_config

A questo punto, utilizzando un editor di testo, abilitiamo l’opzione “Port”, rimuovendo il cancelletto e sostituendo al posto di 22 la nostra porta 44444.

Adesso attiriamo l’attenzione dell’attaccante, abilitando esclusivamente il traffico TCP, attraverso la porta 44444.

Il seguente comando “droppa” (nega/vieta) tutte le connessioni verso l’interfaccia di rete eth0, eccetto per il traffico TCP sulla porta 44444.

iptables -A OUTPUT -o eth0 -p tcp ! –dport 44444 -j DROP
  • Il parametro –p specifica il protocollo (ICMP, TCP, UDP, o all) : tcp nel nostro caso
  • -dport : specifica la porta 44444

Adesso avremo bisogno di un “Packet Sniffer”, cioè di un programma che sia in grado di raccogliere le informazioni che viaggiano lungo la nostra network.

Ne esistono di diversi tipi, ma nel nostro esempio utilizzeremo Wireshark. Per scaricarlo utilizzeremo il comando:

sudo apt-get install tshark

“tshark” è la versione di Wireshark, meno nota, da riga di comando.

Vediamo ora come funziona. Se volessimo sniffare tutto il traffico in uscita da una determinata interfaccia di rete, sarebbe sufficiente utilizzare il comando:

tshark -i eth0
  • tshark: evochiamo il comando
  • -i : specifichiamo l’interfaccia di rete di cui desideriamo effettuare la cattura
  • eth0 : è la nostra interfaccia di rete

Per ottenere la lista delle interfacce disponibili sulla nostra macchina, basterà eseguire il comando:

tshark -D

Qualora volessimo visualizzare il contenuto effettivo dei pacchetti, utilizzeremo l’opzione –V:

tshark -i eth0 -V

Tornando al nostro esempio, per monitorare tutto il traffico sulla nostra interfaccia eth0 (che passa attraverso la porta 44444), dovremo utilizzare il seguente comando:

tshark -i eth0 –Y tcp.port==44444 -V
  • L’opzione –Y applica il filtro specificato
  • port==44444 : filtro sulla connessione TCP porta 44444

L’ultima cosa che ci resta da fare è indirizzare il nostro output su un file di testo, ad esempio output.txt

tshark -i eth0 –Y tcp.port==44444 -Y > output.txt

 Ora, analizzando l’output ottenuto, potremo studiare il comportamento del nostro attaccante:

Settare un Honeypot con Kali Linux
[ Torna all’indice ]

Adesso che abbiamo studiato un po’ di “teoria”, possiamo utilizzare il tool “PentaBox” (scritto in ruby) e creare il nostro honeypot.

Come al solito, occorrerà scaricare il tool disponibile su github all’ indirizzo: https://www.github.com/technicaldada/pentbox

Utilizzando il comando:

git clone https://www.github.com/technicaldada/pentbox

Entriamo nella cartella appena creata utilizzando

cd pentabox

Adesso estraiamo il file .tar con il comando:

tar -xzvf pentbox.tar.gz
  • tar: comando
  • x : estrazione file da un archivio
  • z : compressione con gzip
  • v : verbose (per aggiungere più informazioni all’output del comando, mostrando l’elaborazione)
  • f : nome del file archivio
  • tar.gz : il nome dell’archivio

Una volta estratto, potremo spostarci all’interno della cartella pentabox:

cd pentabox

E lanciare il tool digitando:

./pentbox.rb   

Nota: è necessario lanciare il tool con i privilegi root.

Selezioniamo l’opzione 2- Network tools

Procediamo scegliendo l’opzione 3- Honeypot

A questo punto, selezioniamo l’opzione 2- Manual Configuration, per configurare manualmente il nostro honeypot.

Inseriamo la porta che verrà esposta dal nostro honeypot, ad esempio la porta 80.

Digitiamo un falso messaggio:

Salviamo tutto in un file di log e attiviamo la notifica sonora, che ci avviserà al verificarsi di una potenziale intrusione.

A questo punto il nostro honeypot sarà attivo, esponendo la porta 80 ad un ipotetico attaccante.

Verifichiamone l’effettiva attivazione. Ipotizziamo che il nostro attaccante trovi la porta 80 disponibile sul nostro honeypot (magari attraverso una scansione con nmap) e decida di utilizzare un browser per investigare sulla porta appena scovata. Nel momento in cui digiterà l’indirizzo, apparirà il messaggio che abbiamo precedentemente impostato sul nostro honeypot.

In questo modo, mentre il nostro attaccante crederà di aver trovato un potenziale punto di accesso, tutte le sue attività verranno registrate dal nostro honeypot.

Settare un Honeypot per i sistemi SCADA
[ Torna all’indice ]

I sistemi Supervisory Control And Data Acquisition (SCADA), composti da componenti hardware o software, vengono utilizzati per controllare e monitorare i processi industriali. Un sistema SCADA permette di raccogliere ed analizzare i dati di un ambiente di produzione in tempo reale, ma anche di monitorare e gestire gli allarmi, programmando le risposte di controllo automatico attivate da determinati eventi o parametri di sistema.

I sistemi SCADA gestiscono infrastrutture di criticità elevata, come ad esempio i sistemi di controllo di una diga, la trasmissione di energia elettrica, il trasporto di gas e petrolio, i semafori, gli strumenti di distribuzione dell’acqua e così via. Per questo motivo, risultano essere obiettivi molto ambiti da Cyber-Criminali e Hacker (per scopi differenti). Un “honeypot-SCADA” potrebbe quindi rivelarsi un’ottima esca.

In questo specifico caso, andremo a simulare l’interfaccia di un Technodrome della Siemens, modello S7-200, utilizzato nel monitoraggio e nell’automatizzazione di processi industriali (come ad esempio catene di montaggio e macchinari per la produzione in serie di beni di consumo e strumentali).

Per il nostro test configureremo l’honeypot su una macchina virtuale con sistema operativo Ubuntu. L’ultima versione è disponibile al seguente link: https://www.ubuntu-it.org/download . Nel mio caso specifico, la versione che del Sistema Operativo utilizzato è la 20.04 LTS (Long Term Support) – Desktop (l’ultima attualmente disponibile).

Per prima cosa, procediamo con l’aggiornamento della nostra release.

Scarichiamo la lista aggiornata dei pacchetti e delle nuove versioni disponibili nei repository:

sudo apt-get update

Scarichiamo ed installiamo le ultime versioni dei pacchetti

sudo apt-get upgrade

Infine, controlliamo l’eventuale presenza di altre release di Ubuntu ed installiamole:

sudo do-release-upgrade

 Il tool che andremo ad installare per simulare il nostro controller SCADA è conpot. Per permettere la sua esecuzione, avremo bisogno di installare alcune “dipendenze”, cioè dei programmi a package aggiuntivi.

La lista delle nostre “dependencies” è la seguente:

sudo apt-get install libsmi2ldbl
sudo apt-get install libmysqlclient-dev
sudo apt-get install python-dev

 

sudo apt-get install git

 

sudo apt-get install cython
Nel caso volessimo installare conpot su una versione di Ubuntu meno recente:

sudo apt-get install python-pip

 

Per le versioni più recenti di Ubuntu:

sudo apt install python3-pip

Nel caso volessimo installare conpot su una versione di Ubuntu meno recente:

sudo apt-get install build-essential

Nel caso volessimo installare conpot su una versione di Ubuntu meno recente:

sudo apt-get install libxm12-devc

sudo apt-get install libxslt1-dev
sudo apt-get install libevent-dev

 

sudo apt-get install snmp-mibs-downloader

A questo punto, possiamo procedere con l’installazione del nostro tool:

sudo pip3 install conpot

La versione attuale di conpot potrebbe necessitare di alcuni permessi al seguente folder

/usr/local/lib/python3.8/dist-packages/conpot/

Quindi, impostiamo i permessi con il commando:

chmod -R 777 /usr/local/lib/python3.8/dist-packages/conpot/

Infine disabilitiamo il Firewall, che potrebbe interferire coi nostri scopi.

sudo ufw disable

A questo punto, siamo pronti per eseguire conpot.

Come prima cosa diamo un’occhiata alle opzioni, utilizzando il comando:

conpot –help

Il sistema SCADA che andremmo ad utilizzare come esempio, è uno dei template presenti all’interno del programma. Diamogli un’occhiata…

Per listare tutti template disponibili, utilizziamo il comando:

sudo conpot -f

Il parametro –f forza l’esecuzione del tool.

Il nostro template è quello di “default”: sistema SCADA Siemens, modello S7-200.

Non ci rimane che lanciarlo con il comando:

sudo conpot -f -t default
  • sudo : utilizza i privilegi di root
  • conpot: nome del tool
  • -f : forza l’esecuzione
  • -t : specifica il template
  • default : nome del template

Una volta che tutti i servizi conpot per la simulazione saranno avviati, potremo vedere quali connessioni ha aperto sulla nostra macchina, utilizzando il comando netstat.

 Solitamente, nell’installazione “basic” di Ubuntu il comando non è presente, occorrerà quindi installarlo:

apt install net-tools

Vediamo quindi da vicino quali connessioni sono aperte, in stato di “ascolto”:

netstat -tulpn | grep LISTEN
  • netstat : nome del comando
  • -t : socket TCP
  • -u: socket UDP
  • -l : mostra le connessioni in stato di “Listening”
  • -p : mostra il processo associato alla connessione
  • -n : nessuna risoluzione dei nomi
  • | grep LISTEN : una volta generato l’output del comando, mostra solamente le connessioni in stato “LISTEN”

Come visibile dall’immagine sopra riportata, il nostro honeypot ha aperto diverse porte. Quella che andiamo a verificare è 0.0.0.0:8800.
Ovviamente in questo esercizio non abbiamo un IP pubblico che espone il nostro honeypot.

Vediamo ora cosa succederà quando un ipotetico attaccante visiterà la pagina del nostro sistema SCADA fasullo. Apriamo il browser di Mozilla preinstallato su Ubuntu e navighiamo all’indirizzo 0.0.0.0:8800.

Nel riquadro in alto a sinistra il nostro tool (conpot) mostra, fra le diverse informazioni, le richieste http provenienti dal nostro browser.
A destra, troveremo la pagina web aperta che punta all’honeypot (la quale simula il nostro sistema SCADA) che l’attaccante visiterà.
In basso a sinistra, troviamo le connessioni aperte in stato “LISTEN”.

In questo modo, abbiamo verificato che il nostro honeypot SCADA sia pronto e non rimane che attendere la nostra “vittima”.