Tecnologia e innovazione al servizio delle aziende

Security by design

Le attuali applicazioni web, cloud e mobile consentono ad un gran numero di utenti di accedere a dati presenti sulla rete o sui server aziendali. Tali applicazioni devono essere progettate e sviluppate in modo sicuro in modo da garantire le proprietà di disponibilità, confidenzialità e integrita dei dati da esse utilizzati. Nel caso delle mobile application, i dati memorizzati sugli smatphone e sui tablet devono essere gestiti in modo tale da garantire il loro recupero in caso di smarrimento del device e il loro non utilizzo da parte di terzi in caso di furto. Le problematiche di sicurezza relative al mobile e al cloud sono differenti rispetto a quelle delle “vecchie” applicazioni web per cui è compito di chi progetta e sviluppa i software di nuova generazione provvedere a tenersi aggiornato e ad implementare tutte le funzioni necessarie per il mantenimento della sicurezza delle applicazioni, dei dati e delle applicazioni. Si tenga presente che (fonte NIST), implementare la sicurezza dopo che l’applicazione è stata rilasciata in produzione comporta dei costi fino a 30 volte superiori rispetto all’introduzione delle best practice nelle prime fasi del ciclo di sviluppo.

security01

Purtroppo, da quanto posso vedere analizzando le applicazioni presenti sui vari store e i principali siti web, questo non sempre avviene: è incredibile che, anche, alcune applicazioni critiche, come quelle bancarie o assicurative, siano, spesso, soggette a errori concettuali e di cattiva progettazione come, ad esempio, la non offuscazione del codice javascript di una mobile application di tipo ibrido, la presenza di dati di test all’interno del pacchetto di installazione e di vulnerabilità da tempo conosciute. Questo è principalmente dovuto alla fretta di uscire sul mercato che richiede  di scrivere codice rapidamente e con bassa qualità e alla riduzione dei costi di sviluppo che porta le aziende a “mettere sul pezzo” programmatori appena diplomati e laureati senza prima formarli correttamente sui principali problemi di sicurezza legati alla realizzazione delle applicazioni.

Lo sviluppo sicuro di un’applicazione inizia dalla fase di raccolta dei requisiti dove gli analisti devono conoscere le principali problematiche di sicurezza in modo tale da guidare il cliente nell’esprimere correttamente le proprie necessità. Nelle fasi di analisi e progettazione si deve tenere conto dei requisiti di sicurezza e privacy in modo da descrivere procedure e algoritmi a basso rischio. In fase di progettazione devono anche essere scelte le tecnologie più adatte per risolvere le problematiche di sicurezza emerse durante le fasi di raccolta dei requisiti e analisi. Gli sviluppatori devono conoscere le principali best practice di sicurezza in modo da implementare codice il più possibile privo di vulnerabilità. Nelle fasi di test e rilascio in produzione bisogna attuare procedure per la verifica della qualità del codice  in modo da individuare eventuali vulnerabilità sfuggite agli sviluppatori. Una volta in produzione, l’applicazione dovrà essere costantemente monitorata in modo da individuare tempestivamente eventuali problemi di sicurezza. In questo ambito le tecnologie di predictive analyticsmachine learning possono essere di aiuto.

sicurezza02

In letteratura esistono numerose best practice per lo sviluppo sicuro del codice. Personalmente mi sento di suggerire quelle rilasciate da OWASP (Open Web Application Security Project) tra le quali si trovano delle guide per la programmazione sicura, per il penetration testing e le top ten delle vulnerabilità riscontrate nelle web e mobile application.

Durante la mia attività lavorativa ho maturato una notevole esperienza in questo ambito e ho collaborato alla realizzazione dell’infrastruttura di sicurezza di diversi servizi web e cloud utilizzando standard quali OAuth, SAML e XACML. Nella progettazione delle applicazioni e dei sistemi informativi applico sempre le principali best practices. Sono, inoltre, autore di diversi seminari e corsi sull’argomento.