Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
RELATORE
Prof. Alberto Bartoli
CORRELATORE LAUREANDO
Ing. Eric Medvet Enrico Sorio
1 Introduzione 5
2 Scenario 7
2.1 Scopo del progetto . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Web Defacement . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Denzione e tipologia . . . . . . . . . . . . . . . . 7
2.2.2 Tipologie di attacchi . . . . . . . . . . . . . . . . . 9
2.2.3 Motivazioni . . . . . . . . . . . . . . . . . . . . . . 11
2.2.4 Statistiche sulla diusione . . . . . . . . . . . . . . 11
2.3 Struttura del progetto . . . . . . . . . . . . . . . . . . . . 13
3 Tecnologia e architettura 15
3.1 Tecnologie utilizzate . . . . . . . . . . . . . . . . . . . . . 15
3.1.1 Enterprise Java Beans . . . . . . . . . . . . . . . . 15
3.1.2 Java Persistence API . . . . . . . . . . . . . . . . . 16
3.1.3 Shoal . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.4 Ehcache . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.5 Implementazioni utilizzate . . . . . . . . . . . . . . 17
3.2 Entità utilizzate . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Struttura del controllore . . . . . . . . . . . . . . . . . . . 18
3.3.1 Gestione delle istanze . . . . . . . . . . . . . . . . 18
3.3.2 Gestione degli utenti e dei proli . . . . . . . . . . 19
3.3.3 Gestione degli alert . . . . . . . . . . . . . . . . . . 19
3.3.4 Repair Thread . . . . . . . . . . . . . . . . . . . . 19
1
INDICE 2
6 Conclusioni 63
6.1 Obiettivi raggiunti . . . . . . . . . . . . . . . . . . . . . . 63
6.2 Conclusioni soggettive . . . . . . . . . . . . . . . . . . . . 64
6.3 Sviluppo futuro . . . . . . . . . . . . . . . . . . . . . . . . 64
Appendices 67
A Congurazione di Glasssh 67
A.1 Risorse JDBC . . . . . . . . . . . . . . . . . . . . . . . . . 67
A.2 Risorse JMS . . . . . . . . . . . . . . . . . . . . . . . . . 67
A.3 Congurazione JavaMail . . . . . . . . . . . . . . . . . . . 68
A.4 Congurazione dell'ip di ascolto . . . . . . . . . . . . . . . 68
A.5 Backup della congurazione . . . . . . . . . . . . . . . . . 69
B Speciche e Requisiti 71
B.1 Requisiti Goldrake . . . . . . . . . . . . . . . . . . . . . . 71
B.1.1 Denizioni . . . . . . . . . . . . . . . . . . . . . . 71
B.1.2 Generale . . . . . . . . . . . . . . . . . . . . . . . 72
B.1.3 Scalabilità . . . . . . . . . . . . . . . . . . . . . . 72
B.1.4 Istanze . . . . . . . . . . . . . . . . . . . . . . . . 72
B.1.5 Controllore . . . . . . . . . . . . . . . . . . . . . . 73
B.1.6 Utenti . . . . . . . . . . . . . . . . . . . . . . . . . 74
B.1.7 Task . . . . . . . . . . . . . . . . . . . . . . . . . . 74
B.1.8 Task simulati . . . . . . . . . . . . . . . . . . . . . 77
B.1.9 Aggregator . . . . . . . . . . . . . . . . . . . . . . 77
B.1.10 Alert . . . . . . . . . . . . . . . . . . . . . . . . . 78
B.1.11 Alert e utenti . . . . . . . . . . . . . . . . . . . . . 78
B.1.12 Feedback degli utenti . . . . . . . . . . . . . . . . . 79
B.1.13 Interfaccia graca . . . . . . . . . . . . . . . . . . . 79
B.2 Speciche Goldrake . . . . . . . . . . . . . . . . . . . . . . 81
B.2.1 Generali . . . . . . . . . . . . . . . . . . . . . . . 81
B.2.2 Database del controllore . . . . . . . . . . . . . . 82
B.2.3 Controllore . . . . . . . . . . . . . . . . . . . . . . 85
B.2.4 Istanze . . . . . . . . . . . . . . . . . . . . . . . . . 87
Capitolo 1
Introduzione
L'impatto negativo che un defacement, cioè l'accesso non autorizzato e
la possibile conseguente modica di un sito internet, può avere su una
organizzazione è reso evidente dalla grande rilevanza del web nella vi-
ta quotidiana di imprese e persone. Il defacement consiste nella sosti-
tuzione della home page originale di un sito web con un contenuto arbi-
trario, molto spesso di rivendicazione o di propaganda politico/religiosa.
Questo viene fatto nella maggior parte dei casi per puro divertimento,
come dimostrano le indagini statistiche annuali di Zone-h, archivio on-
line di web-defacement. Recentemente questo tipo di attacchi è diventato
inoltre parte di una più ampia strategia volta alla realizzazione di true
on-line o phising.
5
1. Introduzione 6
7
2. Scenario 8
• Trua
Nei primi punti di questo elenco si parla di defacement nella sua ac-
cezione più classica ( defacement sostitutivo ), e cioè la sostituzione dei
contenuti originari del sito con testi e/o immagini di varia natura, con
l'obbiettivo di minare la credibilità del sito colpito, che dimostra così di
essere vulnerabile.
1 ’pippo’ or 1=1
• DNS poisoning (2%): ancor più dicile del Man in the Middle,
è comunque una strada a volte percorribile; lo si eettua convin-
cendo un DNS ad indirizzare i richiedenti la pagina attaccata ver-
so un indirizzo IP diverso da quello lecitamente registrato. Per
la denizione data tale operazione non è propriamente un deface-
ment, in accordo con quanto stabilito dagli stessi gestori di Zone-H
(i quali, comunque, tempo fa sono stati soggetti ad un attacco di
questo tipo. . . ).
11 Web Defacement
2.2.3 Motivazioni
Zone-H è un web site nato nel 2002 come un semplice mirror per i deface-
ment rilevati, nel tempo ha aumentato le sue funzionalità, diventando
punto di riferimento mondiale per tale tipologia di crimine informati-
co. Ogni anno pubblica delle statistiche sull'evoluzione dei defacement
fornendo dati utili sia a livello tecnico, sia per indagare l'aspetto cul-
turale del fenomeno; interessante ad esempio è analizzare quali siano le
motivazioni che portano alla realizzazione di defacement.
Come sopra accennato, Zone-H è una strumento molto utile per analiz-
zare, l'evoluzione del fenomeno defacement. Attraverso i suoi resocon-
ti annuali è possibile ottenere delle statistiche sull'evoluzione di questo
fenomeno che fanno capire come il suo rilievo sia in costante crescita.
2. Scenario 12
15
3. Tecnologia e architettura 16
3.1.3 Shoal
Shaol è un framework Java open source per il clustering, può essere
utilizzato per aggiungere ad un sistema esistente funzionalità di load
balancing e fault tolerance; le applicazioni che usano Shoal possono con-
dividere dati, comunicare attraverso messaggi con altri nodi e noticare
17 Entità utilizzate
3.1.4 Ehcache
E' una libreria scritta in java utilizzata per realizzare il caching di oggetti,
utilizzabile in ambiente Java EE
Vedi http://ehcache.sourceforge.net/
stesso, anche interfaccia graca (che è uno dei due moduli del control-
lore) non può colloquiare direttamente con le istanze ma solo attraverso
la sua mediazione.
21
4. Funzionamento del controllore 22
1. ogni nodo, facente parte dello stesso gruppo shoal, riceva le noti-
che di join e leave (concretamente accensione e spegnimento, o
in caso guasto) in modo da mantenere una lista dei nodi operativi
costantemente aggiornata
• Data degli ultimi alert ricevuti: per ogni istanza viene memorizzata
la data dell'ultimo allarme ricevuto di ogni tipologia. Sarà poi
utilizzata per il reperimento dei successivi alert.
Ci sono invece alcuni dati che sono caratteristici di ogni tipo di istanza:
Per quanto riguarda l'istanza singola semplicemente uno username e
una password che possono venire utilizzati per fare in modo che il con-
trollore si autentichi sul nodo, evitando così collegamenti non autorizzati
(attualmente non implementato).
Per quanto riguarda l'istanza facente parte di un gruppo invece ven-
gono solamente fornite le cosiddette informazioni di bootstrap, e cioè
l'indirizzo ip e la porta di un nodo sicuramente attivo da usare come
punto di partenza, oltre a questo vengono fornite anche qui una coppia
username e password (in questo caso condivise a livello di gruppo) per
autenticare il controllore su ogni singola istanza.
• Last alert date: informazioni relative alla data degli ultimi alert di
entrambi i tipi rilevati (network e content)
E' interessante notare che l'id del task non identica il task univocamente
solo nel database del controllore, ma sull'intero sistema (controllore e
istanze) per fare questo bisogna garantire che i task creati sull'istanza
utilizzino il medesimo id del controllore per evitare situazioni di conitto.
Gli attributi di un task sono immutabili, qualora sorgesse la neces-
sità di variare alcuni attributi di un task (ad esempio il sampling period),
occorre terminare il task e crearne un altro con valori opportuni per gli
attributi.
lato istanza (ad esempio un'istanza può decidere che sia preferibile uti-
lizzare un certo algoritmo di rendering per la generazione dei thumbnail
della pagina e quindi salvare tale congurazione fra le proprietà aggiun-
tive) . Questa possibilità di modica delle informazioni da ambo i lati
rende più complicata la gestione dell'aggiornamento dei dati, si è scelto
quindi di procedere in questo modo:
Bisogna notare che le property del task vengono caricate dall'istanza solo
alla prima richiesta di visualizzazione da parte del client, per limitare le
connessioni superue verso le istanze
4.3 Utenti
Gli utenti sono un elemento noto solamente al controllore, le istanza lo
ignorano completamente, quindi l'associazione task-utente, o più corret-
tamente task-warden-utente (come sarà meglio esplicitato in seguito) è
mantenuta dal controllore.
2. Customer user: sono gli utenti nali del sistema, decidono quali
risorse vogliono monitorare, con che frequenza, con che modalità e
di quali vogliono ricevere le notiche degli allarmi.
Fra i warden esiste una relazione di parentela, infatti ogni warden deve
possedere un riferimento ad un altro warden (detto parent), mentre quel-
li che non possiedono un tale riferimento vengono detti root-warden,
i warden invece che sono collegati ad un root-warden vengono detti
warden-sons.
WP Big 30 15 mail
WP Little1 20 20 mail
WP Little2 10 20 mail
WP Little3 10 10 mail
WP Little4 10 20 mail, sms
4.5 Alert
Elemento fondamentale del sistema è l'alert; l'obiettivo di fondo del sis-
tema è la corretta generazione ed invio di alert che permettono di venire
a conoscenza di situazioni anomale e consentono all'utente di prendere
gli opportuni provvedimenti.
Content alert Questo alert viene invece generato quando l'istanza cat-
aloga un reading come anomalo, cosa che potrebbe indicare un deface-
ment. Le informazioni contenute sono: la data dell'errore, il messaggio
di errore stesso, il task che l'ha generato, lo snapshot dello stato del-
la risorsa nel momento in cui è stato generato l'errore e l'identicativo
dell'istanza su cui tale errore è stato generato.
4. Funzionamento del controllore 32
Instance alert Questo alert riguarda invece degli errori dovuti, non alle
risorse monitorate, ma allo stesso nodo di elaborazione; per ora l'unico
tipo di alert che può essere inviato riguarda l'incapacità di eseguire l'anal-
isi di una risorsa, secondo la cadenza prevista, dovuto, ad esempio, ad un
sovraccarico dell'istanza stessa. Le informazioni qui contenute sono: la
data dell'errore, il messaggio di errore stesso e l'identicativo dell'istanza
su cui tale errore è stato generato.
Queste tipologie di alert possono venire immediatamente divise in due
gruppi: quelle di pertinenza degli utenti nali (user customer o customer
administrator che siano) e quelle di pertinenza degli amministratori del
sistema; risulta chiaro che gli alert di tipo network e content interessano
gli utenti nali, che possono recepire informazioni relative allo stato delle
risorse da loro monitorate, mentre gli alert di istanza sono di interesse
solo degli amministratori del sistema.
• dal punto di vista del sistema, poichè è l'elemento che viene analiz-
zato dai sensori e dall'aggregatore per valutare la presenza o meno
di un defacement
Snapshot Light
Si è deciso di permettere da parte dell'istanza l'invio di due tipologie di
snapshot, una completa di tutti gli elementi che compongono la pagina
(l'albero degli elementi) e una invece senza queste informazioni aggiun-
tive, con solo gli elementi di base e la rappresentazione graca in versione
thumbnail; così facendo nella maggior parte dei casi (costruzione delle
pagine di sommario) vengono richiesti gli snapshot in versione light e,
solo e unicamente quando necessario, quelli full. Visto che una pagina,
a seconda della sua complessità, può risultare molto pesante in termini
di sottoelementi la dierenza risulta evidente.
• Complessità:
43
5. Implementazione del Controllore 44
invece che per riferimento come di solito con gli oggetti Java; se però
i dati passati appartengono ad un tipo nativo di Java o ad un oggetto
immutabile, come ad esempio le stringhe, la dierenza diventa nulla.
che questi metodi non distinguono lo stato in cui si trova l'istanza (attivo,
fallito, fermata).
Sono le varie modalità con cui gli snapshot sono accessibili: o at-
traverso l'id, o recuperando l'ultimo rilevato dall'istanza per un dato
task, o reperendo tutti gli snapshot rilevati in una tale data, o recu-
perando le n istantanee rilevate prima o dopo di un dato snapshot.
1 public List<AlertWithTaskAbstractCtrl>
getPendingAlertsOfTask(TaskDescriptorCtrl task);
Metodi generici
1 public void save(Object o) throws Exception;
1 @Timeout
2 public void checkAltertTimerTimeout(Timer t){
3 TimerService tmrSrv = sessionCtx.getTimerService();
4 int numberOfTimers = Configuration.getNumberOfThread()
;
51 Task Periodici
5 if (t.getInfo() == null)
6 {
7 //Main timer
8 ArrayList<ArrayList<InstanceCtrl>> instanceDivision
= instanceLocal.getDividedInstances(
numberOfTimers);
9 for (int j=0; j<numberOfTimers; j++ )
10 if (instanceDivision.get(j).size()>0)
11 tmrSrv.createTimer(0, instanceDivision.get(j));
12 }
13 else
14 {
15 ArrayList<InstanceCtrl> instList = (ArrayList<
InstanceCtrl>) t.getInfo();
16 for (InstanceCtrl ic : instList) {
17 dispatchTaskAlert(ic, ContentAlertCtrl.class);
18 dispatchTaskAlert(ic, NetworkAlertCtrl.class);
19 dispatchInstanceAlert(ic);
20 }
21 }
22 }
5.2.1 InstanceTimerBean
Questo task periodico contiene al suo interno una serie di funzionalità:
sia il controllo della presenza di nuovi nodi nei gruppi di istanze (at-
traverso il sistema dell'auto-discovery implementato attraverso il frame-
work Shoal), sia il reperimento degli indici di carico necessario per le
logiche di scelta dell'istanza di esecuzione.
La logica di esecuzione procede quindi in questo modo:
5.2.2 AlertTimerBean
Come sopra spiegato, questo algoritmo cerca di avviare un certo numero
(precongurato) di thread paralleli, utilizzando il sistema dei timer one-
shot, che si occupano di contattare tutte le istanze presenti nel sistema
e quindi riceve e inoltrare gli alert di ogni tipologia presenti.
5.2.3 RepairThreadBean
Il repair thread invece, per denizione, si limita a controllare la coerenza
di una istanza per ogni esecuzione, anche per limitare l'insorgere di prob-
lemi legati alla concorrenza. In questo caso quindi non vi sono problemi
di parallelizzazione delle esecuzioni. In realtà, però, viene ugualmente
utilizzato un timer one-shot per meglio gestire gli errori di connessione,
come verrà meglio spiegato in seguito.
1 @MessageDriven(mappedName = "jms/MailQueue",
activationConfig = {
2 @ActivationConfigProperty(propertyName = "
acknowledgeMode", propertyValue = "Auto-acknowledge
"),
3 @ActivationConfigProperty(propertyName = "
destinationType", propertyValue = "javax.jms.Queue"
)
4 })
5 public class MailerBean implements MessageListener...
1 @Resource(name = "jms/MailQueue)
2 private Queue mailQueue;
3 @Resource(name = "jms/MailQueueFactory")
4 private ConnectionFactory mailQueueFactory;
che sono state utilizzate per ottenre una connessione alla coda e per
poter inserirvi nuovi elementi.
Come si può notare dalla gura 5.1 si sono create delle classi per la
gestione degli alert, delle sottoscrizioni a questi, per i task e i warden.
Nel caso degli alert si è deciso di denire una classe base (astratta),
che implementa le informazioni di base relative agli allarmi, (la data,
l'errore che l'ha causato, il fatto se sia pendente o meno) poi si è cre-
ata una classe che la estende, aggiungendo le caratteristiche necessarie,
(snapshot e task per gli alert content e network) e inne una classe per
ogni tipologia di alert (network, content, instance) che aggiunge le query
necessarie per ottenere le informazioni desiderate.
Per le alertSubscription si è seguito il medesimo approccio, in modo
da permettere l'implementazione di varie tipologie di sottoscrizione.
5. Implementazione del Controllore 54
Nella gura 5.2 il graco delle classi presenta invece la gestione delle
informazioni relative alle istanze, in cui viene sempre usato l'approc-
cio di creare una classe astratta e le sottoclassi relative alle due tipolo-
gie (single e grouped). Ad ogni istanza di tipo gruppo è associata una
InstanceGroup e ad ogni InstanceGroup sono associato da 0 a n istanze.
1 @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
1 @GeneratedValue(strategy = GenerationType.IDENTITY)
task_create: crea un task sulla base dei parametri (url, sampling pe-
riod, warden)
In ambo i casi nella fase di lookup del metodo remoto, sembra che glass-
sh catturi delle eccezioni che diventano non più intercettabili in maniera
programmatica.
Nel primo caso vengono generate a cadenza regolare delle connection
time out, nel secondo caso viene invece generata una runtime exception,
sempre non intercettabile.
Se ciò avviene durante una normale chiamate ad uno stateless ejb il
problema è relativamente poco grave, in quanto nonostante l'eccezione
di più basso livello non sia catturabile viene intercettata una NamingEx-
ception e il resto del codice può essere correttamente eseguito.
Quando però il codice di connessione si trova all'interno del metodo
di timeout di un timer, questo può provocare la morte del timer stesso,
visto che, per specica, quando il container riceve dal timer due eccezioni
non gestite viene automaticamente eliminato (come si può vedere dal log
seguente).
Socket
Per evitare la generazione a cadenza regolare di un gran numero di con-
necion time out si è deciso di aprire, preventivamente ad un tentativo di
lookup, un socket in direzione dell'ip e porta selezionato; se l'apertura
avviene senza alcun problema la procedura di lookup continua normal-
mente, se invece viene catturata una eccezione (in questo caso gestibile)
viene abortita la procedura e incrementato il contatore dei fallimenti di
connessione dell'istanza.
Questa logica, insieme alle altre logiche di fallimento delle connes-
sioni e conteggio degli errori, è stata inserita in un metodo del bean
CommonMethod in modo tale da uniformare il comportamento in tutto
il sistema.
61 Problemi incontrati e soluzioni adottate
Timer one-shot
Il secondo approccio adottato riguarda invece le connessioni create all'in-
terno di procedure temporizzate; per evitare che un qualsiasi problema
di connessione possa far terminare il processo temporizzato (con tutto
ciò che ne consegue) si è scelto di avviare, ogniqualvolta si vogliano con-
tattare delle istanze, un timer one-shot creato dal timer principale che si
occupa di avviare eettivamente la connessione.
Questo approccio rende le eccezioni non gestibili secondarie, visto che
il timer one-shot è sacricabile, dato che verrebbe ugualmente terminato
anche dopo una esecuzione senza errori.
1 TaskDescriptorCtrl t = taskBean.getTaskById(id);
2 t.setTaskBean(taskBean);
3 return t;
12 }
13 ...
63
6. Conclusioni 64
67
A. Congurazione di Glasssh 68
71
B. Speciche e Requisiti 72
B.1.2 Generale
1. Non deve essere legato ad alcun sistema operativo.
3. Consiste di:
• un controllore.
B.1.3 Scalabilità
1. Istanze: Alcune centinaia.
3. Warden: Migliaia
B.1.4 Istanze
1. Ogni istanza funziona in modo del tutto autonomo, indipendente-
mente dalla presenza o meno di altre istanze o di controllori.
B.1.5 Controllore
1. Il controllore costituisce l'unica modalità di interazione con il sis-
tema per gli utenti.
B.1.6 Utenti
1. Sono divisi in tre categorie disgiunte:
B.1.7 Task
1. Un task consiste di un descrittore e dati, come segue:
• descrittore:
≻ samplingPeriod,
≻ setOfAggregators.
• dati:
· outcome: normal/anomalous;
· values of sensorList
∗ descrizione dell'alert
∗ descrizione dell'alert
(a) creazione.
(b) terminazione
(c) checkpoint
(d) modica
B.1.9 Aggregator
1. Un aggregator consiste delle seguenti informazioni:
• Nome
• ClasseCheImplementaAlgoritmo
• VersioneAlgoritmo
• EventualiParametri
• SensorList
• unique-ID
B.1.10 Alert
1. Un'istanza può generare varie tipologie di alert:
4. Il controllore deve:
• Gestione Utenti
B. Speciche e Requisiti 80
• Gestione Warden
• Gestione WardenProle
• Gestione Istanze
∗ attività/inattività
• Gestione Alert
∗ Globale
∗ Per istanza
2. Alert
≻ per warden
≻ per task
3. Warden
• Come sopra, ristretto ai soli task con alert "non ancora visti"
81 Speciche Goldrake
5. Task simulati
6. Reading
4. Controllore:
• Complessità:
B.2.2.2 Tabelle
• Schema da denire in maggiore dettaglio
≻ task id
85 Speciche Goldrake
≻ URL
≻ info di ACL
≻ instance id
Da notare che gli alert risiedono sui DB delle istanze. Sul DB del control-
lore ci sono solo le informazioni necessarie per sincronizzare controllore
e istanze, per permettere cioè al controllore di prelevare dalle istanze
solo gli alert ancora non prelevati (ricordare che le istanze non possono
contattare il controllore ma sono contattate da quest'ultimo, ad istanti
ssati dall'interfaccia graca).
B.2.3 Controllore
B.2.3.1 Breve nota realizzativa sull'interfaccia graca
1. Il controllore può mostrare l'elenco dei Task, comprendente il solo
URL, rapidamente in quanto è disponibile nel DB locale.
B.2.3.2 Rappresentazione
1. Un task consiste di un descrittore e dati (vedi requisiti).
B. Speciche e Requisiti 86
B.2.3.3 Migrazione
La migrazione di un Task da un'istanza A ad un'istanza B deve essere
implementata sul controllore come segue:
1. su A: preleva descrittore
2. su B: crea descrittore
3. su A: termina e collega a B
87 Speciche Goldrake
4. su B: collega ad A
B.2.4 Istanze
B.2.4.1 Operazioni esportate
Ogni operazione viene eseguita in modo sincrono (il chiamante si blocca
sino alla ricezione della risposta).
Da incapsulare in stateless bean
Da ranare i parametri, in particolare quelli di ritorno e le eventuali
eccezioni
• terminateTask(IN task_id)
• getAllWardens(OUT setOfWardenIds)
[2] Alberto Bartoli Giorgio Davanzo Eric Medvet, On the Reaction Time
to Web Site Defacements 2008
89