# Penetration test

In informatica, il penetration test, colloquialmente noto come pentest ("test di penetrazione"); è un attacco informatico simulato autorizzato su un sistema informatico o una rete, eseguito per valutare la protezione del sistema.
Condotto su più fasi dal punto di vista di un potenziale attaccante simulando l'attacco informatico di un utente malintenzionato, esso consiste nello sfruttamento delle vulnerabilità rilevate, allo scopo di aiutare a determinare se le difese del sistema sono sufficienti, o se invece sono presenti vulnerabilità, elencando in questo caso quali difese il test ha sconfitto. Il test ha dunque come obiettivo quello di evidenziare le debolezze della piattaforma fornendo il maggior numero di informazioni sulle vulnerabilità che hanno permesso l'accesso non autorizzato, fornendo una stima chiara sulle capacità di difesa e del livello di penetrazione raggiunto nei confronti:
* delle difese interne al sistema;
* delle difese esterne al sistema;
* della sicurezza fisica.
Tutti i problemi di sicurezza rilevati vengono quindi presentati al cliente, assieme a una valutazione del loro impatto sul sistema nello scenario del business aziendale, fornendo inoltre una soluzione tecnica o proposta di mitigazione o migrazione del sistema.

## Storia

Verso la metà degli anni ‘60, nascono nuovi problemi per la sicurezza dei dati, causati dalla crescente popolarità dei sistemi informatici time-sharing, i quali rendevano le risorse accessibili tramite le linee di comunicazione. Come spiegano gli studiosi Deborah Russell e G.T. Gangemi "Il 1960 segnò il vero inizio dell'era della sicurezza informatica." Nel giugno del 1965, per esempio, molti dei maggiori esperti di sicurezza informatica del paese tennero una delle prime importanti conferenze sui sistemi di sicurezza, il System Development Corporation (SDC). Durante la conferenza, qualcuno fece notare che un dipendente della SDC era stato in grado di superare facilmente diverse misure di sicurezza del AN/FSQ-32 della SDC, un computer utilizzato in ambito militare. Nella speranza che gli studi sui sistemi di sicurezza tornassero utili, i partecipanti alla conferenza richiesero formalmente per la prima volta di utilizzare la computer penetration come strumento per studiare i sistemi di sicurezza.
Alla Spring 1967 Joint Computer Conference, molti specialisti del computer si riuniscono di nuovo per discutere della sicurezza dei sistemi informatici. Durante questa conferenza, gli esperti di sicurezza informatica Willis Ware, Harold Petersen, Rein Tern, Bernard Peters della National Security Agency (NSA) e tutta la RAND Corporation utilizzano il termine "penetrazione" per descrivere un attacco contro un sistema informatico. In un documento, Ware avvertì che era importante eseguire dei tentativi di penetrazione sui sistemi informatici, riferendosi ai sistemi time-sharing militari. I suoi colleghi Petersen e Turn condivisero lo stesso concetto, osservando che i sistemi di comunicazione on-line "... sono vulnerabili alle minacce riguardanti la privacy". Bernard Peters dell'NSA rimarcò lo stesso punto, insistendo che l'input e l'output di un computer "... potrebbero fornire grandi quantità di informazioni a seguito di una penetrazione." Nel corso della conferenza, la computer penetration viene formalmente identificata come una grave minaccia per i sistemi informatici on-line.
La minaccia della computer penetration fu sottolineata in un importante rapporto organizzato dal Dipartimento della Difesa statunitense (DoD) alla fine del 1967. In sostanza, i funzionari del Dipartimento della Difesa si rivolsero a Willis Ware per condurre una task force di esperti proveniente da NSA, CIA, DoD, mondo accademico e industria per valutare formalmente la sicurezza dei sistemi informatici time-sharing. Facendo affidamento su molti documenti presentati nel corso dello Spring 1967 Joint Computer Conference, la task force confermò largamente che la computer penetration era una minaccia alla sicurezza del sistema informatico. Il rapporto di Ware era inizialmente classificato, ma molti dei maggiori esperti informatici del paese identificarono lo studio come documento decisivo sulla sicurezza informatica. Jeffrey R. Yost del Charles Babbage Institute ha più recentemente descritto il rapporto di Ware come "... di gran lunga lo studio più importante e approfondito su questioni tecniche e operative in materia di sicurezza dei sistemi informatici del suo tempo". In effetti, il rapporto Ware ha ribadito la grave minaccia rappresentata dalla computer penetration per i nuovi sistemi time-sharing online.
Per capire meglio le debolezze del sistema, il governo federale e dei suoi finanziatori ben presto cominciarono a organizzare squadre di penetratori, conosciute come tiger teams, per usare la computer penetration come test della sicurezza dei sistemi. Deborah Russell e G.T. Gangemi hanno dichiarato che nel corso del 1970 nacquero i primi tiger teams: squadre di crackers finanziati dal governo e dalle industrie per tentare di abbattere le difese dei sistemi informatici nel tentativo di scoprire, ed eventualmente correggere, buchi di sicurezza ".
Donald MacKenzie, studioso della storia della sicurezza informatica, sottolinea che "RAND aveva fatto alcuni studi di penetrazione (esperimenti per eludere i controlli di sicurezza informatica) dei primi sistemi time-sharing per conto del governo". Jeffrey R. Yost del Charles Babbage Institute, nel suo lavoro sulla storia della sicurezza informatica, riconosce anche che sia la RAND Corporation che la SDC avevano "svolto alcuni dei primi studi di penetrazione provando a infiltrarsi nei sistemi time-sharing al fine di testare la loro vulnerabilità ". In quasi tutti questi primi studi, i tiger team sono riusciti a infiltrarsi in tutti i sistemi informatici presi come obiettivo, visto che le difese dei sistemi time-sharing del paese erano deboli.
Le azioni dei primi tiger team e gli sforzi della RAND Corporation hanno dimostrato l'utilità dei penetration test come strumento per la valutazione della sicurezza del sistema. A quel tempo, un analista RAND notò che i test avevano "... dimostrato la praticità della system-penetration come strumento per valutare l'efficacia e l'adeguatezza delle difese per la sicurezza dei dati." Inoltre, un certo numero di analisti RAND affermarono che gli esercizi di penetration test offrivano diversi vantaggi che erano sufficienti per giustificarne l’uso.
Forse il principale esperto di computer penetration durante questi primi anni è stato James P. Anderson, che ha lavorato per NSA, RAND e altre agenzie governative per studiare la sicurezza dei sistemi informatici. All’inizio del 1971, la U.S. Air Force assume la società privata di Anderson per studiare la sicurezza del suo sistema di time-sharing al Pentagono. Nel suo studio, Anderson ha delineato una serie di importanti fattori coinvolti nella computer penetration. Anderson ha descritto un attacco generale come sequenza dei seguenti passi:
* Trovare una vulnerabilità sfruttabile
* Progettare un attacco intorno a essa
* Testare l'attacco
* Impadronirsi di una linea in uso
* Eseguire l'attacco
* Sfruttare ingresso per recupero delle informazioni
Nel corso del tempo, la sequenza di Anderson ha contribuito a guidare molti altri esperti di sicurezza, che si sono basati su questa tecnica per valutare la sicurezza dei sistemi time-sharing.
Negli anni successivi, la computer penetration come strumento per la valutazione della sicurezza è diventata più raffinata e sofisticata. Nei primi anni 1980, il giornalista William Broad riassunse brevemente i continui sforzi dei tiger teams per valutare la sicurezza del sistema. Come riportato da Broad, il rapporto di Ware finanziato dal DoD aveva “...mostrato come le spie potessero introdursi nei computer, rubare o copiare i file e sovvertire i dispositivi che normalmente proteggono le informazioni top secret”.
Mentre questi studi suggerivano che la sicurezza informatica negli Stati Uniti era un problema importante, lo studioso Edward Hunt ha di recente fatto una riflessione più ampia sullo studio della computer-penetration come strumento di sicurezza. Hunt, in un recente documento sulla storia del penetration test, suggerisce che le istituzioni per la difesa degli Stati Uniti “... hanno creato molti degli strumenti utilizzati nella moderna guerra cibernetica”.

## Procedimenti di analisi

L'analisi viene svolta a fronte di un accordo commerciale/tecnico. Chi svolge questa attività è chiamato penetration tester o auditor e oggi anche con il più moderno nome ethical hacker, visto che si tenta di aggredire il sistema con le stesse logiche utilizzate da un hacker. Un gruppo di penetration tester è chiamato anche tiger team.
I processi di penetration test possono essere effettuati in diverse modalità. La differenza consiste sulla quantità e qualità delle informazioni disponibili agli analisti riguardo ai sistemi analizzati. I test Black Box non presuppongono precedente conoscenza dell'infrastruttura oggetto di analisi e gli esaminatori necessitano di determinare architettura e servizi dei sistemi prima di iniziare l'analisi.
Nei test White Box sono invece fornite conoscenze dettagliate dell'infrastruttura da esaminare, spesso comprensive di schemi di rete, codice sorgente delle applicazioni e liste di indirizzi IP presenti nella rete. Esistono anche varianti a queste metodologie definibili Grey Box. I risultati dei penetration test possono valutare gli impatti di un attacco e suggerire contromisure per ridurre i rischi.
I processi di analisi che vengono condotti in un penetration test hanno diversi tempi di azione in cui sono alternate fasi manuali e fasi automatiche. Vengono acquisite inizialmente le informazioni principali sull'architettura della piattaforma e sui servizi offerti. Dall'analisi di questi dati deriva la scelta di come condurre il passo successivo, consistente in un'enumerazione dei principali errori e problemi. Software automatizzati uniti all'esperienza manuale dell'analista permettono quindi di evidenziare tutte le possibili vulnerabilità, incluse quelle più recenti e alcune ancora non di pubblico dominio. I problemi riscontrati sono quindi manualmente verificati e sono prese le evidenze, o prove, che certificano l'esistenza delle problematiche stesse.
L'attività si conclude nello sviluppo della reportistica composta dal report di analisi sommaria dedicato al management o executive summary, contenente l'analisi dell'impatto di rischio di quanto riscontrato e tempistiche per l'azione di rientro o mitigazione delle problematiche riscontrate, e dal report tecnico, contenente l'analisi dettagliata dei problemi e la soluzione tecnica. Il penetration test va effettuato su sistemi esposti su Internet e comunque sulle piattaforme sensibili collegate a grosse reti, prima di entrare in esercizio, per avere una prova pratica della sicurezza di ciò che si espone.
È importante capire che la probabilità che un pen-tester riesca a trovare tutti i problemi di sicurezza è molto bassa. Ad esempio: ieri è stato fatto un penetration test che ha messo in evidenza l'assenza di vulnerabilità nel sistema; oggi Microsoft rilascia una patch atta a correggere alcuni errori di sistema contenente una nuova vulnerabilità di alcuni server di posta che in precedenza erano considerati sicuri; questo significa che il pen-test di ieri non è più valido visto che naturalmente non può mettere in luce la nuova vulnerabilità. Lo stesso esempio può essere applicato a ogni modifica attuata sul sistema. Mantenere una rete sicura richiede quindi una vigilanza costante.

## Tipologie di Penetration Test
### Penetration Test Infrastrutturale

Noto anche come Network Penetration Test è un tipo di attività che si sofferma principalmente sulle componenti di rete. Il test mira ad analizzare Porte (TCP/UDP) e servizi potenzialmente vulnerabili per effettuare attacchi.

### Web Application Penetration Test

Il Penetration Test di applicazioni web (spesso abbreviato in WAPT) tende a valutare specificatamente vulnerabilità della logica applicativa di applicazioni web, limitando il perimetro di test alle stesse. Il test di applicazioni web spesse utilizza come riferimento la OWASP Top 10 rilasciata dalla stessa OWASP. Per effettuare i test vengono spesso utilizzati strumenti quali: Burpsuite, Acunetix, Zap etc.

## Strumenti

Sono disponibili una vasta gamma di strumenti di pen-test per la valutazione della sicurezza del nostro sistema, sia software liberi che commerciali.

### Distribuzioni di sistemi operativi specializzati

Diverse distribuzioni di sistemi operativi sono orientate verso il penetration test. Tali distribuzioni di solito contengono una serie di strumenti preconfigurati. Il penetration tester non deve però cercare ogni singolo strumento visto che questo potrebbe portare a complicazioni come ad esempio errori di compilazione, problemi di dipendenze o errori di configurazione. Inoltre, l'acquisizione di strumenti aggiuntivi può essere poco pratica dal punto di vista del tester.
Alcuni dei più famosi sistemi operativi orientati al pen test sono:
* Kali Linux basato sulla distribuzione Debian GNU/Linux
* Parrot Security basato su Debian
* Pentoo basato su Gentoo Linux
* BackBox basato su Ubuntu
* WHAX basato su Slackware
Un certo numero di sistemi operativi includono vulnerabilità di sistema o applicative conosciute, e possono essere utilizzate come bersagli. Tali sistemi aiutano i nuovi professionisti della sicurezza a provare gli ultimi strumenti di sicurezza in un ambiente di laboratorio. Alcuni di questi sono:
* Damn Vulnerable Linux (DVL)
* OWASP Web Testing Environment (WTW)
* Metasploit Project

### Software frameworks Penetration Test

* Core Impact
* Immunity Canvas
* INFRA Security scanner
* Metasploit
* Nmap
* SQLmap
* W3af
* Slowloris
* Burp suite
* OWASP ZAP

## Strumenti di test automatizzati

Il processo di penetration test può essere semplificato in due parti:
* Scoperta delle vulnerabilità, cioè una combinazione di operazioni valide che permettono al tester di eseguire operazioni non valide
* Descrizione dell'operazione non valida

### Vulnerabilità

Operazioni valide che consentono al tester di eseguire un'operazione non valida includono comandi unescaped SQL, rapporti umani e funzioni crittografiche ormai obsolete. Una sola vulnerabilità potrebbe non essere sufficiente per permettere un exploit. È spesso richiesto di utilizzare più di una vulnerabilità nota e modellare il payload in modo da farlo apparire valido. Metasploit fornisce una libreria Ruby per le attività più comuni e mantiene un database di exploit noti.
Il fuzzing è una tecnica molto diffusa per scoprire le vulnerabilità di un sistema. Ha lo scopo di ottenere un errore non gestito attraverso un input casuale. Il tester utilizza input casuali per accedere a porzioni di codice poco utilizzate visto che quelle più frequenti sono solitamente esenti da errori. Gli errori sono utili perché o espongono ulteriori informazioni, come ad esempio crash del server HTTP, o sono direttamente utilizzabili, ad esempio il buffer overflow.
Immaginate un sito che dispone di 100 caselle di testo. Alcune saranno vulnerabili a SQL injection attraverso l'uso di determinate stringhe. L'invio continuo di stringhe casuali arriverà prima o poi a trovare un buco nella sicurezza. L'errore risulta evidente presentandosi come una pagina HTML non corretta a causa di un errore SQL. In questo caso, solo le caselle di testo sono utilizzate come input. Tuttavia, i sistemi software hanno solitamente molti tipi di input, come i cookie, il flusso di un file in upload o canali RPC. Gli errori possono presentarsi in tutti questi tipi di input. L'obiettivo è quello di ottenere prima un errore non gestito e quindi comprendere la falla basandosi sul test che ha portato al fallimento. Il tester progetta uno strumento automatizzato per testare la sua conoscenza della falla finché non la comprende a pieno. In seguito, diventa evidente come creare il payload in modo che il sistema vittima lo esegua. Se questa via non è percorribile si può sperare che un altro errore prodotto dal fuzzer produca più frutti. L'uso di un fuzzer consente di risparmiare tempo in modo da non dover controllare le porzioni di codice in cui è improbabile trovare delle vulnerabilità.

### Payload

L'operazione non valida, o payload nella terminologia Metasploit, può comportare controllo remoto del mouse, comparsa di popup pubblicitari, furti della password o altro. Alcune aziende mantengono grandi database di exploit noti e forniscono prodotti che mettono alla prova automaticamente i sistemi per conoscerne le vulnerabilità:
* Metasploit
* Nessus
* Nmap
* OpenVAS
* W3af

## Standard e certificazioni professionali

Nell'ambito del penetration test è possibile acquisire certificazioni rilasciate da enti preposti a garantire le dovute caratteristiche tecniche e di affidabilità degli operatori, nonché quello di fornire una metodologia che renda il test di per sé replicabile, valutabile e misurabile nel tempo:
* OffSec - OffSec Security Certified Professional (OSCP)
* OffSec - OffSec Experienced Penetration Tester (OSEP)
* eCPPT - eLearnSecurity Certified Professional Penetration Tester " Professional v3 in Italiano - Patrocinata da AIPSI, Associazione Italiana Professionisti della Sicurezza Informatica(AIPSI)
* ISECOM - OSSTMM Professional Security Tester (OPST)
* International Council of E-Commerce Consultants - Certified Ethical Hacker (CEH)
La IACRB (Information Assurance Certification Review Board) fornisce una certificazione per penetration tester nota come Certified Penetration Tester (CPT). Il CPT richiede che il candidato superi un esame a scelta multipla tradizionale e un esame pratico che richiede al candidato di eseguire un pen test su di un server.

## Discordanze rispetto al Red Teaming

Sebbene Penetration Testing e Red Teaming appartengano entrambi alla branca della Offensive Security, vengono spesso usati come sinonimi. Tuttavia ci sono delle profonde differenze sia per modalità di attività, sia per obiettivi prefissati.
Il Penetration Testing ha un perimetro di intervento ben definito, sia in termini di scope, che può essere una rete (Network PT), un sito web (Web Application PT), che di finestra temporale (solitamente nell'ordine delle settimane) e il suo scopo è valutare quante più vulnerabilità possibili per permettere di applicare le relative mitigazioni. Spesso per permettere un approccio full coverage, i sistemi difensivi vengono temporaneamente disattivati per permettere all'attaccante di avere una piena visibilità e contezza rispetto alle vulnerabilità presenti.
Contestualmente il Red Teaming è un'attività svolta in una finestra temporale molto estesa (solitamente nell'ordine dei mesi) dove non è presente un vero e proprio perimetro di intervento. L'obiettivo è di penetrare all'interno dell'azienda per verificare l'efficacia dei sistemi di sicurezza, ma soprattutto i tempi di risposta del personale posto alla difesa dell'infrastruttura (blue team).