Articoli Manifesto Tools Links Canali Libri Contatti ?
Sicurezza

Appunti per aspiranti Penetration Tester

Abstract
Questo documento è una guida introduttiva alla pratica del penetration testing (d'ora in poi semplicemente pen-test).
Particolare attenzione sarà data alle varie tipologie e agli aspetti critici dei pen-test, in modo da metterne in evidenza la particolare natura.
Data di stesura: 04/08/2003
Data di pubblicazione: 08/09/2003
Ultima modifica: 04/04/2006
di Gianluigi Spagnuolo Discuti sul forum   Stampa

Questa non è una guida pratica al pen-test, non saranno descritte tecniche e strumenti, ne' saranno approfondite le varie metodologie di attacco.

Questo testo è rivolto sia a coloro che vogliono intraprendere la carriera di pen-tester, sia alle aziende che hanno intenzione di commissionare un penetration test e vogliono vederci chiaro.

Introduzione

Un pen-test consiste nel testare la sicurezza di un sistema cercando di violarlo sottoponendolo ad una grande varietà di attacchi informatici e non. L'obiettivo è quello di individuare eventuali vulnerabilità sfruttabili da terzi per ottenere accessi non autorizzati ai servizi e ai sistemi analizzati.

Oltre ai problemi di sicurezza, devono essere rilevati, quali possibili punti deboli, i problemi relativi alla configurazione, che incidono sulla robustezza e le performance del sistema, e gli errori di progettazione della rete. A volte una cattiva configurazione è più pericolosa di un bug.

Schematicamente i test devono individuare:

  • bug, vulnerabilità e security hole nel software presente;
  • punti deboli nella progettazione della rete;
  • punti deboli di firewall e router;
  • punti deboli negli script dei web-server;
  • errori nella configurazione dei principali servizi in esecuzione;
  • problemi relativi l'accesso fisico alle macchine.

Tipologie

Ogni aspetto del pen-test ne determina una particolare tipologia.

In base al punto di partenza dell'attacco un pen-test può essere effettuato esternamente e/o internamente alla rete da valutare.
Un pen-test dall'esterno è condotto da una macchina remota per rilevare eventuali vulnerabilità sfruttabili attraverso internet.
I test condotti dall'interno hanno tra l'altro lo scopo di rilevare le possibilità di accedere a file e a dispositivi in modo inappropriato, ovvero migliorando i propri permessi.

Si distinguono vari livelli tecnici dei test.
Il livello tecnico del test rispecchia le varie tipologie di attacker, si va dallo script kiddie al cracker, dall'organizzazione criminale ai servizi segreti. A grandi linee si possono delineare tre grandi categorie:

  • livello basso: questo è il test che in genere fanno i tool di auditing automatici, a la Nessus per intenderci. Si controlla solo se ci sono servizi in esecuzione con vulnerabilità note, in genere vengono rilevate solo grosse falle e misconfigurazioni macroscopiche.
  • livello medio: oltre a controllare i servizi in esecuzione, viene testata, come illustrato in precedenza, la rete, i firewall, i router, etc. Si fa spesso ricorso anche a tecniche di social engineering.
  • livello alto: qui siamo a livelli paranoici, si può arrivare a controllare i sorgenti (se disponibili) dei programmi alla ricerca di nuove vulnerabilità, o ad esercitare la "nobile arte" del trashing.
In base alle informazioni preliminari ricevute dal committente si distinguono tre tipi di pen-test:
  • zero knowledge (black box): si fa il test senza conoscere niente dell'host bersaglio, il tester si mette in pratica nelle stesse condizioni dell'attaccante. In questo caso il primo passo è la raccolta di informazioni.
  • partial knowledge: vengono fornite dal committente alcune informazioni per indirizzare l'attacco verso un bersaglio preciso o anche per diminuire i tempi di testing e quindi le spese.
    Le informazioni fornite riguardano in genere la topologia della rete, le politiche di sicurezza adottate, etc.
  • full knowledge (white box): in questo caso chi esegue il pen-test ha a disposizione tutte, o quasi, le informazioni possibili. In questo caso, in genere, si simula il comportamento di un "attaccante interno", ad esempio un dipendente.
Oltre a testare le macchine un pen-test può essere utile anche per valutare le persone addette a tali macchine. Avremo di conseguenza un test di tipo overt e uno di tipo covert:
  • overt o evidente (Blue team): gli impiegati dell'organizzazione, e in particolare lo staff IT, sono a conoscenza del pen-test. Ovviamente in queste circostanze non ha senso usare metodi riconducibili al social engineering.
  • covert o nascosto (Red team): si esegue il pen-test con il permesso delle "alte cariche", e all'insaputa dello staff IT. Questo tipo di test è utile per testare, oltre alla sicurezza della rete, anche le capacità e l'affidabilità degli addetti alla sicurezza durante una emergenza e la reale validità delle politiche di sicurezza dell'azienda.
Il pen-test per sua natura non passa inosservato, le macchine che lo subiscono sono sottoposte ad uno stress non indifferente, e non è remota la possibilità di causare danni anche gravi ai sistemi testati.
In genere è preferibile usare metodi non-distruttivi in modo da non compromettere, nei limiti del possibile, il normale funzionamento della macchina.
In un pen-test non distruttivo il tester non deve usare metodi e tecniche che potrebbero portare alla perdita o al danneggiamento dei dati, e all'interruzione dei servizi forniti dalle macchine esaminate.
Ad esempio in questo tipo di pen-test è sconsigliato portare attacchi di tipo DoS e simili.

Metodologia

La metodologia dipende dal livello di dettaglio che si vuole raggiungere.
Durante le fasi di attacco si opera essenzialmente su due livelli, uno passivo e uno attivo. Diremo attacco passivo quello che non interagisce direttamente con il bersaglio, e quindi tutta la fase di raccolta delle informazioni. Mentre un attacco è attivo quando si eseguono azioni dirette contro il bersaglio.
Di seguito è illustrata a grandi linee una tipologia d'attacco, per maggiori dettagli rimando all'"OpenSource Security Testing Methodology Manual"[1].
  • Ricognizione di base: informazioni dal sito, informazioni sul dominio e sull'amministratore. A volte basta visitare il sito per raccogliere importanti notizie sul software presente sul server, spesso infatti in fondo all'home page i webmaster inseriscono notizie sul sistema operativo, webserver, etc. (Ad esempio Powered by Apache, Linux Inside...).
  • Ricostruzione della struttura interna della rete.
  • Una volta identificata la struttura della rete e il numero di macchine bisogna raccogliere il maggior numero di informazioni su ognuna di esse. Quindi occorre ricercare i servizi in esecuzione, identificare i sistemi operativi, la versione dei servizi, il tipo di processore, i nomi utente (standard e non), le risorse condivise, etc.
  • Ricerca di eventuali misconfigurazioni.
  • Dopo aver determinato i tipi di servizi attivi sull'host bersaglio si deve tracciare una mappa delle vulnerabilità, e occorre ricercare (o scrivere) gli exploit applicabili contro i servizi bersaglio.
  • Analisi della topologia della rete.
  • Applicazione degli exploit.
  • Verifica della possibilità di sniffing e tentativi di DOS.
  • Test su router e firewall.
  • Pulizia delle tracce dell'attacco.
  • Stesura del report.

Risultati

Un sistema può dirsi vulnerabile se è possibile:
  • accedere a risorse interne;
  • leggere e modificare file riservati;
  • controllare il traffico in entrata e/o uscita;
  • eseguire programmi senza averne i permessi;
  • accedere alla macchina con i permessi di amministratore (root) da parte di utenti non privilegiati;
  • controllare la configurazione della rete e dei servizi.
Il valore di un pen-test è strettamente legato alle capacità del tester. Inoltre perde di validità non appena si apportano modifiche (anche minime) alla configurazione di una macchina interessata al test, quindi è consigliabile eseguire un pen-test poco prima di mettere in produzione la rete.
Inoltre anche lasciando inalterate le macchine testate, il pen-test dovrebbe essere ripetuto periodicamente, poiché vengono trovate quotidianamente nuove vulnerabilità e nuovi exploit.

Report

Il report è il documento che il team che esegue il test presenta al committente alla fine della valutazione.

Il report deve indicare per ogni vulnerabilità riscontrata:

  • Software/dispositivo affetto dalla vulnerabilità (Nome e versione);
  • Tipo di vulnerabilità riscontrata;
  • Gravità del bug (Bassa, Media, Alta);
  • Esistenza, diffusione e applicabilità dell'exploit relativo alla vulnerabilità;
  • Causa (bug, configurazione, etc.);
  • Macchine/dispositivi interessati;
  • Conseguenze;
  • Esistenza e complessità della soluzione del problema;
  • Descrizione dettagliata del problema e dei metodi utilizzati per individuarlo;
  • Suggerimenti e note.
Bisogna anche fornire una descrizione dettagliata dell'intero processo di auditing effettuato.
È consigliabile tenere durante i lavori un dettagliato "diario di bordo", dove riportare scrupolosamente ogni azione intrapresa e ogni effetto prodotto. Tale diario risulterà utile sia in fase di stesura del report finale sia per distinguere le attività del tester da eventuali anomalie verificatesi durante i lavori.

Aspetti Legali e Punti Critici

Questo paragrafo tratta di tutti quegli aspetti, qui definiti "punti critici", che hanno pesanti risvolti legali e che di conseguenza devono essere previsti e trattati adeguatamente in fase di stipula del contratto-liberatoria.

Punti critici

I punti critici da prendere in considerazioni sono: trattamento dei dati raccolti, salvaguardia dei sistemi e dei dati, riservatezza riguardo le vulnerabilità emerse durante il pen-test.
Durante il penetration test potrebbero verificarsi dei disagi dovuti al lavoro del tester, si potrebbero avere perdite o danni ai dati o ancora una momentanea perdita di accessibilità.
Ad esempio una macchina dedicata all'e-commerce potrebbe rimanere inaccessibile a causa di una simulazione di DoS, con conseguenze economiche dirette. O ancora, una azienda che fornisce servizi a terzi, potrebbe vedere i propri servizi interrotti con evidente disagio per i clienti.
Prima di cominciare il test bisogna concordare quale livello di rischio il committente è disposto a correre, invitandolo anche a fare un backup dei dati prima di effettuare il pen-test.
Bisogna prevedere tali evenienze in fase di stipula del contratto, declinando per quanto possibile le responsabilità e garantendo però, allo stesso tempo, adeguate misure per il recupero del sistema.

Contratto (Regole di comportamento)

Il contratto deve indicare l'elenco dei test che verranno effettuati, lo scopo del penetration test e i rischi.
Può tornare utile indicare anche i limiti entro i quali il tester deve muoversi, per limiti si intende: range di IP da testare, metodi e tool da usare, i tempi e le condizioni di avvio e completamento dei test.
In alcuni casi, e per le tecniche che lo permettono, è utile indicare anche gli indirizzi IP delle macchine dalle quali partiranno gli attacchi, per isolare eventuali intrusioni da parte di terzi.
È fondamentale, inoltre, regolare il trattamento delle informazioni raccolte durante il pen-test. La società esecutrice deve impegnarsi a a non divulgare a terzi le informazioni raccolte durante le attività relative ai test.
Da parte sua il committente deve dare pieno assenso alle attività di testing. Deve garantire inoltre il proprio impegno a mantenere la società esecutrice del test sollevata da tutte le responsabilità legali, nel caso in cui terzi dovessero considerarsi danneggiati dalle attività svolte durante i test.

Q&A

  1. Basta individuare una vulnerabilità oppure bisogna cercare di sfruttarla per ottenere un acceso non autorizzato?
    Dipende dal livello di dettaglio prefissato. Vedi il paragrafo "Tipologie".
  2. Quale figura professionale è autorizzata ad eseguire un penetration test?
    Chiunque sia in possesso delle capacità tecniche necessarie può effettuare un penetration test. Maggiori sono le capacità del tester maggiore è il valore del test stesso.
  3. Quali informazioni bisogna farsi dare dal committente?
    Poiché bisogna simulare le condizioni in cui si trova un eventuale attaccante ci basta conoscere solo l'indirizzo della macchina da analizzare, non dobbiamo dimenticarci che chi fa un penetration test si mette nei panni dell'attaccante, che generalmente non ottiene direttamente (e consciamente) dati dall'amministratore del sistema.
    Come illustrato prima in determinate condizioni vengono fornite varie informazioni al pen-tester.
  4. Ho già delle buone basi, voglio diventare un pen-tester, da dove devo cominciare?
    Periodicamente le società che si occupano di Sicurezza Informatica organizzano corsi e stage sull'argomento.
    È facile intuire però che, data la particolarità dell'argomento, si impara molto più dalla pratica che da qualsiasi corso, quindi è consigliabile mettere in piedi un piccolo laboratorio con 5-6 macchine (va bene anche dell'hardware datato) in modo da simulare diverse situazioni con i relativi test.

Informazioni sull'autore

Gianluigi Spagnuolo, studente. Si interessa di programmazione, sicurezza informatica, buddismo zen, reti e sistemi operativi liberi.
È tra i fondatori dell' Italian Ruby User Group e dell'Irpinia Linux User Group e moderatore della mailing list Security4Dummies.
Home page: http://kirash.interfree.it

È possibile consultare l'elenco degli articoli scritti da Gianluigi Spagnuolo.

Altri articoli sul tema Sicurezza.

Risorse

  1. OpenSource Security Testing Methodology Manual.
    http://www.isecom.info/
  2. SANS Info Sec Reading Room.
    http://www.sans.org/rr/catindex.php?cat_id=42
  3. SecurityFocus sezione Penetration Test.
    http://www.securityfocus.com/pen-test
  4. Archivio Pen-Test Mailing List su SecurityFocus.
    http://www.securityfocus.com/archive/101
  5. Pen Test Mailing List su YahooGroups.
    http://groups.yahoo.com/group/pentest/
Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.