Leggerai questo articolo in: 4 minuti

Oggi voglio inaugurare la nuova sezione sicurezza, campo di cui sono profondamente innamorato e spero diventi la mia occupazione principale nel mio futuro lavorativo. In questa prima fase vorrei fare un introduzione alla sicurezza delle applicazioni seguendo come linea guida gli argomenti trattati da un ente di riferimento di questo settore ovvero l’OWASP (Open Web Application Security Project).

Il quale gestisce diversi progetti per quel che riguarda la sicurezza delle applicazioni web come ad esempio OWASP AppSensor e OWASP Esapi oggetto della mia tesi di laurea.

Statistiche e dati alla mano evidenziano che programmatori e developer (spesse volte) ignorano completamente l’esistenza di vulnerabilità (anche banali da risolvere) nel loro codice. E’ impensabile a mio parere sviluppare applicazioni web senza avere una minima conoscenza/competenza nel campo della sicurezza.

Parto subito con un affermazione abbastanza forte LA SICUREZZA ASSOLUTA NON ESISTE. Spero di riuscire a convincerti avvalendomi dei prossimi articoli che pubblicherò in questa sezione.

Cosa si intende per sicurezza?

Senza scendere nel dettaglio la definizione di sicurezza che meglio rende l’idea a mio parere è: “Una applicazione è sicura se fa quello per cui è stata progettata“. Una definizione ad altissimo livello che ti permette di comprenderne il significato più profondo.

Come ti dicevo la sicurezza assoluta non esiste, possiamo parlare di diversi livelli di sicurezza. Un’ applizazione potrà essere sempre insicura, ragionevolmente sicura ma mai sicura al 100%. Ricorda che quello che può essere oggi “ragionevolmente sicuro” non lo potrebbe essere domani.

Cosa bisogna garantire?

Parlare di sicurezza ad altissimo livello significa garantire fondamentalmente tre requisiti fondamentali, facili da ricordare se ci si ricorda dell’acronimo CIA (Confidentiality, Integrity, Availability). Nel dettaglio:

Confidentiality (Confidenzialità): Comunemente, la più grande esigenza è quella di mantenere alcune informazioni private. Sistemi crittografici sono stati sviluppati per far fronte a questa necessità. Che si tratti di password inviate nel corso di una procedura di accesso, o la memorizzazione di dati medici riservati in un database, la crittografia è in grado di garantire che solo gli utenti autorizzati abbiano accesso ai dati.

Integrity (Integrità): Si può utilizzare la crittografia per fornire un mezzo a garanzia dei dati, in modo da assicurare l’integrità degli stessi sia durante la conservazione che durante la trasmissione. Hash crittografici (md5,sha) ad esempio, sono impiegati a tale scopo.

Availability (Disponibilità): Requisito in un certo senso indispensabile è garantire il servizio agli utenti. Quindi la nostra applicazione dovrà essere quanto più resistente ai cosiddetti attacchi DOS (Denial of service) volti appunto a creare disservizio. Per convincervi dell’importanza di questo requisito pensate ad applicazioni sensibili come quelle finanziarie o ancora peggio ad esempio applicazioni che gestiscono parametri vitali di un paziente.

A questi si sommano naturalmente un’altra infinità di requisiti, voglio citarne altri due in particolare Authenticity (Autenticità), Non-repudiation (Non-repudiabilità) che vengono garantiti fondamentalmente dalle tecniche di firma digitale che analizzerò in futuro.

Pensare fuori dagli schemi:

Molto spesso quando si produce software si è soliti produrre e analizzare degli use-case-diagrams, se vogliamo incominciare a porci qualche domanda di sicurezza è buona norma considerare non solo le azioni legittime che un utente può compiere sulla nostra applicazione (use-cases), ma anche le eventuali azioni “malevole” che un Attacker potrebbe compiere (misuse-cases).

Sicurezza Web introduzione ad OWASP - Quello che i developer dovrebbero sapere

Quindi considerare non solo un uso corretto della nostra applicazione, ma iniziare a porsi il problema o meglio una ragionevole consapevolezza che qualcuno lo utilizzerà in modo scorretto (volontariamente o meno).

Ci sono numerose vie che possono essere sfruttate:

E’ importante essere consapevoli che non esiste solo un modo per attaccare una applicazione web vulnerabile ma esistono vie (più o meno complicate) che un attaccante esperto potrebbe sfruttare per utilizzare in modo illegittimo la nostra applicazione.

Sicurezza Web introduzione ad OWASP - Quello che i developer dovrebbero sapere

Le tre regole fondamentali:

1. Ci sono centinaia di problematiche che possono riguardare la sicurezza di un’applicazione web nel suo complesso, pensa a quelle che vorresti assolutamente evitare (o potrebbero avere conseguenze devastanti).

2. Cambia mentalità. Non scrivere codice “sicuro” pensando di esserlo. Non ti preoccupare solo di come evitare una vulnerabilità banale e nota. Dai per scontato che prima o poi potrà essere sfruttata una vulnerabilità sulla tua applicazione (che oggi nessuno conosce).

3. L’evoluzine è continua. Chi si occupa di sicurezza ha ben chiaro il problema del testing del software, in modo molto diretto INUTILE (immagina 30 milioni di righe di codice che si interfacciano con n-mila altre applicazioni). Testare il software nella sua interezza è impossibile. Inizia a convincerti di questo.

Con questo concludo questa parte introduttiva alla sicurezza delle applicazioni web. Spero di essere riuscito a fornirti qualche informazione utile e ad averti incuriosito. Nel prossimi articoli andrò ad analizzare in modo dettagliato (con esempi e contromisure) le 10 principali vulnerabilità alle quali le applicazioni web sono maggiormente esposte.

Se ti è piaciuto questo articolo, hai qualche dubbio, richiesta o curiosità non esitare a lasciarmi un commento.
Nella speranza di riaverti presto qui ti auguro una splendida giornata!

Non dimenticare di condividere l’articolo su Facebook, Twitter, Google+.

[adsense]