
Laboratorio educativo basato su Docker che dimostra il bug Heartbleed (CVE-2014-0160) con contenitori hacker, vittima e server per lo sfruttamento pratico e l'estrazione di cookie di sessione.
Il bug Heartbleed è un esempio di attacco informatico che sfrutta una vulnerabilità nella libreria OpenSSL. In breve, un passaggio di validazione mancante nella libreria OpenSSL potrebbe consentire a un hacker di accedere a informazioni sensibili su un server che utilizza la libreria vulnerabile. Nell'ambito del protocollo di handshake per stabilire una connessione SSL tra client e server, un messaggio heartbeat viene inviato dal client e poi rinviato dal server. Il client è anche responsabile dell'invio della lunghezza del proprio messaggio heartbeat, che il server utilizza per determinare il numero di byte di memoria da restituire. Un valore di lunghezza fittizio, non validato dal server, può indurlo a restituire byte adiacenti alla posizione di memoria in cui è memorizzato il messaggio heartbeat del client.
Questa repository contiene una dimostrazione di come il bug Heartbleed possa essere sfruttato per estrarre cookie di sessione da un server web, consentendo a un hacker di accedere alla parte protetta e ad accesso controllato di un sito web.
Se sei un docente che insegna concetti di sicurezza informatica e codifica sicura, puoi usare questo esempio per offrire un'esperienza pratica con il bug Heartbleed e dimostrare la facilità con cui è possibile recuperare informazioni privilegiate.
Se sei uno studente in un corso di sicurezza informatica, o un programmatore alle prime armi, è istruttivo capire come piccoli errori nel codice possano portare a grandi vulnerabilità di sicurezza. Se stai attualmente studiando l'attacco Heartbleed in classe, puoi acquisire ulteriore esperienza pratica su come operano questi attacchi e su cosa si può fare per prevenirli.
Questa dimostrazione è progettata utilizzando tre container Docker, uno per il server, uno per l'hacker e uno per la vittima. Sul container del server è ospitato un semplice sito web basato su Python Flask che restituisce un messaggio di benvenuto dopo un accesso riuscito. Il container del server esegue una versione non aggiornata della libreria OpenSSL che presenta la vulnerabilità Heartbleed. Sia il container dell'hacker che quello della vittima forniscono un'interfaccia VNC verso una macchina Ubuntu. Il container dell'hacker contiene anche uno script Python che sfrutta il bug Heartbleed per inviare una lunghezza del messaggio errata per un messaggio heartbeat e analizza i dati restituiti dal server alla ricerca di cookie di sessione. Le istruzioni sono fornite in un documento HTML sul desktop del container dell'hacker.
L'approccio consigliato per eseguire questo set di container è su CHEESEHub, una piattaforma web per dimostrazioni di sicurezza informatica. CHEESEHub fornisce le risorse necessarie per orchestrare ed eseguire container su richiesta. Per configurare questa applicazione per l'esecuzione su CHEESEHub, è necessario creare una specifica dell'applicazione che configuri l'immagine Docker da utilizzare, i requisiti di memoria e CPU e le porte da esporre per ciascuno dei tre container. La spec JSON per questa dimostrazione Heartbleed può essere trovata qui.
CHEESEHub utilizza Kubernetes per orchestrare i suoi container applicativi. Puoi anche eseguire questa applicazione su una tua installazione Kubernetes. Per istruzioni su come configurare un cluster Kubernetes minimale sulla tua macchina locale, fai riferimento a Minikube.
Prima di poter eseguire l'applicazione su CHEESEHub o Kubernetes, è necessario creare le immagini Docker per i tre container applicativi. Le definizioni dei container per hacker, vittima e server si trovano rispettivamente nelle directory heartbleed-hacker, heartbleed-victim e heartbleed-server. Per creare questi container, esegui:
cd heartbleed-hacker
docker build -t <hacker image tag of your choice> .
cd heartbleed-victim
docker build -t <victim image tag of your choice> .
cd heartbleed-server
docker build -t <server image tag of your choice> .
Una volta create le immagini Docker, puoi eseguire i container utilizzando semplicemente il motore Docker.
docker run -d -p 80 <hacker image tag from above>
docker run -d -p 80 <victim image tag from above>
docker run -d <server image tag from above>
Poiché l'interfaccia utente dei container dell'hacker e della vittima è l'interfaccia VNC, esponiamo la porta 80 per renderla accessibile dalla macchina host. Poiché accederemo al sito web del server solo dall'interno dei container dell'hacker e della vittima, non ci preoccupiamo di mappare alcuna delle porte esposte del container del server.
Navigando all'URL del container dell'hacker nel tuo browser, ti verrà presentata un'interfaccia desktop Linux. Fai doppio clic sul file Instructions.html sul desktop per rivedere le istruzioni passo-passo per seguire questa dimostrazione. Una nuova finestra del browser o del terminale può essere avviata sui container dell'hacker e della vittima selezionando il menu dei programmi nell'angolo inferiore sinistro. L'indirizzo IP del server che l'hacker e la vittima useranno per accedere al sito web ospitato dal server può essere ottenuto avviando una console sul container del server dalla pagina di elenco dei container di CHEESEHub.
Per segnalare problemi o contribuire con miglioramenti a questa applicazione, apri una issue su GitHub.