Nell’articolo precedente abbiamo eseguito le operazioni base per poter costruire un laboratorio ed esercitarci ad eseguire i penetration test. Nei prossimi post andremo a creare i playbook Ansible necessari per creare i singoli nodi del nostro laboratorio. Nel seguito andremo a realizzare la macchina che ci permetterà di sperimentare gli attacchi verso le applicazioni web.

Per tale scopo utilizzeremo Owasp Mutillidae una web application sviluppata da Owasp nella quale vengono riprodotte un numero considerevole di vulnerabilità applicative.

La macchina sulla quale eseguiremo l’installazione è denominata server1 nello schema di copertina e ha indirizzo IP 192.168.56.103. Per eseguire il processo di installazione e configurazione partiremo da una vm già disponibile all’interno del laboratorio e con a bordo il sistema operativo Xubuntu.

Una volta descritte le operazioni e i file essenziali per poter lanciare il playbook analizzeremo e descriveremo la struttura del playbook stesso.

Per eseguire tutte le operazioni utilizzeremo l’utente provision creato in precedenza su tutte le macchine. I file necessari per eseguire le istruzioni saranno creati nella cartella /home/provision/mutillidae di cui sotto è possibile vedere il contenuto.

Per gestire i parametri relativi alla configurazione di Ansible esistono diverse modalità e la più utilizzata è sicuramente il file ansible.cfg.

Ansible configuration file

Nel nostro caso il file ansible.cfg conterrà semplicemente la variabile inventory mediante la quale specifichiamo il path dove è localizzato il file di inventory.ini.

Ansible Playbook Mutillidae

Di seguito il contenuto del playbook mutillidae.yaml

Hosts: 192.168.56.103

In questo punto dichiariamo su quale delle macchine indicate nel file di inventory dovrà essere lanciato il playbook.

Become: yes

Specifichiamo che i comandi dovranno essere eseguiti usando l’utente root.

Vars

All’interno dei playbook possiamo dichiarare delle variabili. Nel nostro playbook esse vengono dichiarate e allo stesso tempo inizializzate all’interno del codice. Per ottenere maggiore flessibilità potremmo adoperare le variabili di input dei playbook Ansible mediante i quali si possono ricevere i valori per inizializzare i valori di: server_root, mutillidae_relative_path, mutillidae_path, add_redirect.

Dopo aver dichiarato una variabile per utilizzarle è necessario usare la seguente notazione: {{nome variabile}}.

Ansible Module

Nel playbook usiamo diversi moduli.

Apt: modulo per gestire le installazioni dei pacchetti su macchine Linux con distribuzione Ubuntu/Debian o derivate.

Blockinfile: per inserire modificare e rimuovere blocchi di codice all’interno di un file. Mediante il parametro create stiamo indicando che nel caso in cui il file non esiste dovrà essere creato.

Mysql_db: modulo per effettuare connessioni a database mysql remoti ma nel nostro caso è stato adattato per gestire un db locale.

Mysql_user: il modulo permette di gestire (inserire, eliminare) gli utenti associati ad un database.

Unarchive: modulo che permette l’estrazione di un archivio.

File: gestisce file e cartelle e relative proprietà. Ad esempio è possibile creare un file, rimuoverlo, gestire i permessi associati. Nel nostro caso abbiamo usato il parametro state con valore absent per eseguire l’eliminazione di un file.

Command: modulo che permette l’esecuzione di comandi di shell sulla macchina. Esiste una versione adatta a sistemi operativi Windows denominata win_command.

Ansible Template

Un template è un file che al suo interno può contenere delle variabili i cui valori saranno popolati solo quando il playbook viene lanciato. I template sono utili quando è necessario effettuare delle manipolazioni articolate del contenuto di un file (ad esempio file di configurazione). All’interno dei template sono supportate operazioni che permettono una flessibilità di movimento avanzata come la gestione di condizioni mediante if e while, gestire escaping di caratteri, effettuare filtri. Il file relativo al template deve essere presente nella cartella in cui risiede il playbook. Nel nostro caso un template è stato utilizzato per generare il file di configurazione per Apache di Mutillidae.

Lanciare il playbook

Una volta capito come è strutturato il playbook lo possiamo lanciare da linea di comando digitando:

Se al termine del playbook non si verificano errori digitando nel browser dalla macchine Ansible  192.168.56.103 vedremo la seguente schermata che attesta la corretta installazione di Mutillidae.

Il vantaggio di usare un playbook Ansible per  installare Mutillidae o altri servizi è che in qualsiasi momento, effettuando esclusivamente piccole operazioni preliminari indicate nel post precedente, possiamo ricreare o riconfigurare facilmente un’intera macchina o servizio. L’automation in sostanza ci evita di eseguire operazioni ripetitive e che se effettuate da umani possono dar luogo ad errori.

Conclusioni

Abbiamo creato una macchina bersaglio su cui esercitare le nostre doti di penetration tester.  Nel prossimo post vedremo, partendo da una macchina con a bordo Xubuntu, mediante Ansible installeremo una selezione di tool per creare una distribuzione Linux con a bordo gli strumenti necessari per attaccare i bersagli del nostro laboratorio.