Quando un server risponde a una richiesta, a volte comunica più informazioni di quelle strettamente necessarie per utilizzare il servizio.
Potrebbe indicare il software in esecuzione, una versione, il protocollo supportato oppure alcune caratteristiche della configurazione.
La raccolta e l'analisi di queste informazioni vengono spesso indicate con il termine banner grabbing.
Si tratta di una tecnica utilizzata anche durante le attività legittime di inventario e verifica della sicurezza, perché può aiutare a capire quali tecnologie siano raggiungibili dall'esterno.
Il punto importante è che un banner può fornire indizi utili, ma non rappresenta una prova definitiva dello stato di sicurezza di un sistema.
Che cos'è il banner grabbing?
Il banner grabbing consiste nel raccogliere le informazioni che un servizio rende disponibili quando viene contattato.
Alcuni servizi inviano spontaneamente un messaggio iniziale. Altri restituiscono informazioni soltanto dopo aver ricevuto una richiesta specifica.
La quantità di dettagli varia in base al protocollo, al software e alla configurazione.
Per esempio, un servizio potrebbe comunicare:
SSH-2.0-OpenSSH_9.x
Questo esempio è illustrativo e non identifica un server reale.
Il banner suggerisce che il servizio utilizza il protocollo SSH e dichiara una versione del software. Per stabilire se esistano problemi di sicurezza, però, occorre verificare l'esatta versione, le patch applicate e la configurazione.
Quali servizi possono fornire banner?
Server web
Un server HTTP può restituire header che identificano il software o altre caratteristiche della risposta.
Per esempio:
HTTP/1.1 200 OK
Server: esempio-server
Content-Type: text/html
Il valore esempio-server è puramente dimostrativo.
Alcuni server nascondono queste informazioni, altri le riducono, mentre altri ancora le espongono in modo più dettagliato.
Servizi SSH
I server SSH possono comunicare informazioni relative al protocollo e all'implementazione utilizzata.
Questi dati possono aiutare gli amministratori a verificare che i servizi esposti corrispondano all'inventario e che le versioni siano supportate.
Servizi di posta elettronica
Alcuni server SMTP forniscono un messaggio iniziale quando viene stabilita una connessione.
A seconda della configurazione, possono comparire un hostname, un identificativo del software o altri dettagli.
Altri servizi di rete
Anche database e altri servizi possono fornire risposte che aiutano a riconoscere il software in esecuzione.
Tuttavia, il comportamento varia molto: non tutti i servizi restituiscono un banner e non tutte le risposte permettono di identificare con precisione il componente.
Perché queste informazioni sono importanti?
Supponiamo che un'organizzazione abbia diversi server pubblici.
L'inventario indica soltanto:
web.example.com
api.example.com
mail.example.com
L'osservazione dei servizi potrebbe aggiungere informazioni come:
web.example.com
→ HTTPS
api.example.com
→ HTTPS
mail.example.com
→ SMTP
Se vengono rilevati anche dettagli sul software, l'organizzazione può confrontarli con quanto documentato internamente.
Questo è utile soprattutto quando si devono individuare servizi inattesi, tecnologie non più supportate o differenze tra configurazione prevista e situazione osservata.
Il rischio delle versioni obsolete
Uno dei motivi per cui si raccolgono i banner è la ricerca di software che potrebbe essere interessato da vulnerabilità note.
Immaginiamo che un servizio dichiari una versione molto vecchia.
Il dato può essere un segnale da approfondire, ma non basta per concludere che il sistema sia vulnerabile.
Ci sono diverse possibilità:
- la versione è effettivamente obsoleta;
- il fornitore ha applicato patch senza modificare il numero di versione mostrato;
- un proxy sta rispondendo al posto del server originale;
- il banner è stato personalizzato;
- il componente dichiarato non corrisponde esattamente a quello in uso.
Per questo è necessario verificare le informazioni prima di assegnare una vulnerabilità.
Un esempio di interpretazione corretta
Supponiamo di osservare:
Server: esempio-server/1.2
La conclusione corretta è:
Il servizio dichiara un'identificazione che potrebbe corrispondere a una determinata versione del software.
Non è corretto concludere immediatamente:
Il server è vulnerabile.
Per arrivare a una conclusione affidabile bisogna identificare il componente, verificare la versione effettiva e confrontarla con le vulnerabilità pertinenti.
Questa distinzione è importante anche quando si utilizzano strumenti automatici: i risultati devono essere interpretati nel loro contesto.
Come raccogliere queste informazioni?
Per un sito che si è autorizzati a controllare, si possono osservare gli header HTTP con un comando semplice:
curl -sS -D - -o /dev/null https://example.com/
Il comando visualizza gli header della risposta senza stampare il contenuto della pagina.
Per un inventario più ampio è possibile utilizzare strumenti di analisi dei servizi, purché siano configurati con un perimetro autorizzato e con un'intensità di scansione appropriata.
Non è necessario eseguire verifiche aggressive per ogni controllo: spesso l'osservazione delle risposte già disponibili è sufficiente a individuare alcuni dettagli da approfondire.
È utile nascondere i banner?
Ridurre le informazioni superflue può essere una buona misura di igiene della sicurezza.
Per esempio, un server web potrebbe essere configurato per non mostrare una versione precisa del software.
Questo può rendere meno immediata l'identificazione della tecnologia, ma non rende il servizio sicuro da solo.
Un attaccante può utilizzare altri indizi, mentre una vulnerabilità può essere sfruttata anche senza conoscere esattamente la versione del software.
Le priorità restano:
- mantenere aggiornati i componenti;
- rimuovere i servizi non necessari;
- limitare l'accesso alle interfacce amministrative;
- utilizzare configurazioni sicure;
- monitorare i servizi esposti;
- verificare i risultati delle scansioni.
Nascondere una versione non equivale a correggere una vulnerabilità.
Banner grabbing e gestione dell'attack surface
La raccolta dei banner diventa più utile quando viene collegata all'inventario degli asset.
Per ogni servizio si possono registrare informazioni come:
| Campo | Esempio | | -------------------------------- | ------------------- | | Hostname | web.example.com | | Porta | 443 | | Protocollo | HTTPS | | Software dichiarato | Da verificare | | Proprietario | Team Web | | Versione verificata internamente | Da completare | | Ultimo controllo | Data della verifica |
Questo permette di confrontare le informazioni osservate dall'esterno con quelle disponibili internamente.
Se un servizio non è riconosciuto, dichiara una tecnologia inattesa o sembra utilizzare una versione non supportata, si può aprire una verifica specifica.
Limiti del banner grabbing
La tecnica non permette di vedere tutto ciò che succede dentro un server.
Non può garantire, da sola, che:
- il software sia aggiornato;
- non esistano vulnerabilità;
- l'autenticazione sia robusta;
- i dati siano protetti;
- le autorizzazioni siano corrette.
Un servizio può esporre poche informazioni e avere comunque problemi di sicurezza. Al contrario, un banner dettagliato non significa necessariamente che sia vulnerabile.
In sintesi
Il banner grabbing aiuta a raccogliere informazioni sui servizi pubblicamente raggiungibili e sulle tecnologie che dichiarano di utilizzare.
È utile per l'inventario, la verifica delle versioni e l'individuazione di servizi inattesi, ma i risultati devono essere confermati prima di attribuire una vulnerabilità.
MiHakero può supportare l'osservazione dei servizi pubblici e l'identificazione di informazioni tecniche utili per decidere quali asset approfondire durante una verifica di sicurezza.