
Un penetration test (o pen test, in italiano test di penetrazione) è una simulazione controllata di un attacco informatico condotta per identificare e valutare le vulnerabilità di un sistema informatico, come server, reti, applicazioni web, dispositivi o intere infrastrutture IT.
Cosa è un penetration test
Un penetration test ha l’obiettivo di:
Individuare falle di sicurezza prima che lo facciano veri attaccanti.
Valutare l’efficacia delle contromisure di sicurezza.
Simulare comportamenti reali di attacco per capire fino a dove può arrivare un attaccante.
Fornire un report dettagliato con le vulnerabilità scoperte e le raccomandazioni per mitigarle.
Come si esegue un penetration test
1. Pianificazione e Scoping
Si definisce cosa testare: rete, web app, server, dispositivi mobili, ecc.
Si stabiliscono limiti, orari, autorizzazioni e modalità (white-box, black-box, grey-box).
White-box = si hanno informazioni interne
Black-box = si simula un attaccante esterno senza informazioni
Grey-box = si ha accesso parziale a informazioni/documentazione
2. Raccolta delle informazioni (Reconnaissance)
Scansione DNS, whois, informazioni pubbliche.
Scansione porte e servizi (con strumenti come
nmap
).Ricerca di dipendenze, software utilizzati, versioni, configurazioni errate.
3. Scansione e analisi delle vulnerabilità
Uso di scanner automatici (es.
OpenVAS
,Nessus
,Nikto
,Wapiti
) per identificare potenziali vulnerabilità.Analisi manuale dei risultati per evitare falsi positivi.
4. Sfruttamento (Exploitation)
Tentativi controllati di sfruttare le vulnerabilità trovate (es. injection SQL, XSS, accessi non autorizzati).
Uso di strumenti come
Metasploit
,sqlmap
,Burp Suite
,Hydra
,John the Ripper
.
5. Post-exploitation
Analisi di cosa può fare un attaccante una volta entrato (accesso a dati sensibili, movimenti laterali, escalation di privilegi).
Verifica dell’impatto reale delle vulnerabilità.
6. Reporting
Creazione di un documento dettagliato con:
Vulnerabilità identificate (con livelli di gravità).
Modalità di attacco usate.
Rischi per il sistema.
Suggerimenti per la mitigazione o correzione.
Strumenti comuni
Nmap – scansione di rete
Metasploit – framework per exploit
Burp Suite – test web
Nikto – scanner web
sqlmap – injection SQL
Hydra – brute force
John the Ripper – cracking password
Penetration test vs Vulnerability Assessment
Vulnerability Assessment | Penetration Test |
---|---|
Automatizzato | Manuale + tool |
Identifica vulnerabilità | Le sfrutta |
Non compromette sistemi | Simula un attacco reale |
Rapido | Più lungo e complesso |
Esempio pratico simulato di penetration test su un'applicazione web
Immaginiamo una semplice web app in PHP con un form di login che potrebbe essere vulnerabile a SQL Injection.
URL: http://ilmiosito-vulnerabile.local/login.php
Fase 1: Ricognizione (Recon)
Apriamo il sito e osserviamo:
C'è un form di login con
username
epassword
Il codice HTML mostra:
<form action="login.php" method="POST">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Login">
</form>
Fase 2: Test per SQL Injection
Inseriamo nel campo username:
admin' OR '1'='1
E nel campo password:
qualsiasi_valore
Se il sito ci fa entrare comunque, è vulnerabile a SQL Injection. Probabilmente il backend ha qualcosa del genere:
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
Con admin' OR '1'='1
, la query diventa:
SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'qualsiasi_valore';
Risultato: bypass dell'autenticazione.
Fase 3: Uso di sqlmap
(strumento automatico)
Se vogliamo testare automaticamente:
sqlmap -u "http://vulnerable-website.local/login.php" --data "username=admin&password=123" --level=2 --risk=2 --batch
Questo analizza i parametri e cerca vulnerabilità SQL.
Fase 4: Reporting
Il report finale potrebbe indicare:
Vulnerabilità | Gravità | Descrizione | Fix suggerito |
---|---|---|---|
SQL Injection | Alta | Il login è vulnerabile a SQL injection | Usare query preparate (PDO, mysqli) |
Autenticazione debole | Media | Nessun controllo su tentativi di login | Introdurre rate limiting e CAPTCHA |
💡 Fix consigliato (in PHP con PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute([
'username' => $_POST['username'],
'password' => $_POST['password']
]);
TESTIAMO SU UNO SPAZIO SICURO
Obiettivo: creare un laboratorio di test locale
Strumenti consigliati:
Sistema operativo: Debian, Kali Linux o qualsiasi distro Linux (tu usi Debian 12 👍).
Macchine virtuali: con VirtualBox o QEMU/KVM.
Ambienti vulnerabili preconfezionati:
VulnHub (raccolta di VM con vulnerabilità)
Configurazione passo-passo con DVWA su Debian
1. Installa i pacchetti necessari
sudo apt update
sudo apt install apache2 php php-mysqli mariadb-server git
2. Clona DVWA
cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo chown -R www-data:www-data DVWA
3. Configura il database
sudo mysql -u root
Poi nel prompt MySQL:
CREATE DATABASE dvwa;
CREATE USER 'dvwauser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwauser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
4. Configura DVWA
cd /var/www/html/DVWA/config
sudo cp config.inc.php.dist config.inc.php
sudo nano config.inc.php
Modifica così:
$_DVWA[ 'db_user' ] = 'dvwauser';
$_DVWA[ 'db_password' ] = 'password';
5. Avvia Apache e MariaDB
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl start mariadb
sudo systemctl enable mariadb
6. Accedi via browser
Login di default:
Username:
admin
Password:
password
Poi clicca su "Create / Reset Database".
IMPORTANTISSIMO
Consigli per la sicurezza
Non esporre queste app su internet! Usale solo in locale o su rete isolata.
Puoi usare una VM dedicata oppure un container Docker.
Blocca le VM sulla rete NAT o Host-Only.
Se vuoi andare oltre, isola il laboratorio con VirtualBox Internal Network o bridge con firewall.
Ora sei pronto per testare
Puoi iniziare a usare strumenti come:
Burp Suite
per test web manualisqlmap
per SQL injectionNikto
per scansioni webwpscan
per WordPresshydra
per brute force su login