Secure SDLC: Integrazione della Sicurezza nel Ciclo di Sviluppo del Software

Con l’avanzare della tecnologia e l’incremento dell’utilizzo di applicazioni connesse a Internet, emerge una domanda sempre più pressante di sicurezza nei software e nelle applicazioni. In particolare, le applicazioni critiche, come quelle impiegate nel settore bancario, medico e della pubblica amministrazione, che trattano dati sensibili degli utenti, sono particolarmente vulnerabili ad attacchi e interruzioni di servizio, i quali potrebbero causare danni irreparabili. Il rapporto del Clusit di Marzo 2024 fa cenno ad alcuni dei possibili attacchi facilitati dalle vulnerabilità non gestite di un software, in cui ad esempio troviamo vulnerabilità nelle API che causano l’esposizione di dati personali, l’accesso non autorizzato alle repository di sviluppo che porta a data breach e all’esecuzione di codice malevolo e attacchi Dos dovute a vulnerabilità generiche del software.

La sicurezza delle applicazioni, per evitare questi attacchi, deve garantire la non compromissione dei dati e il rispetto dei principi di sicurezza informatica, ovvero la riservatezza, integrità e disponibilità dei dati e delle informazioni (CIA – Confidentiality, Integrity, and Availability).

Gli approcci tradizionali alla sicurezza del software si concentrano principalmente sulla protezione del perimetro, degli host e delle reti, facendo uso di sistemi di rilevamento e prevenzione delle intrusioni, firewall e anti-malware. Tuttavia, tali approcci si focalizzano principalmente sulla fase di test dell’applicazione, il che comporta il rischio di scoprire eventuali problemi solo nelle fasi avanzate dello sviluppo, con il rischio che costi e tempi aumentino.
È evidente che tali metodologie non garantiscono una protezione adeguata: c’è la necessità di passare ad un approccio che integra la sicurezza in ogni fase del processo di sviluppo. Questo approccio è comunemente noto come Secure SDLC o SSDLC.

I principi dell’SSDLC

I principi dello sviluppo sicuro del software aiutano gli sviluppatori a comprendere come integrare la sicurezza in ogni fase dello sviluppo.

  • Security by Design. Questo principio sottolinea l’importanza di pensare alla sicurezza dall’inizio del progetto di sviluppo e significa proprio includere requisiti di sicurezza dalle fasi iniziali di progettazione.
  • Monitoraggio continuo: si tratta di controllare continuamente lo stato di sicurezza del software. Il monitoraggio non è un evento isolato, ma un processo continuo volto a individuare e correggere le vulnerabilità per l’intera durata del ciclo di sviluppo.
  • Valutazione dei rischi: coinvolge l’identificazione e la comprensione dei potenziali rischi di sicurezza all’inizio del processo di sviluppo. Questo implica individuare le vulnerabilità e valutare quale rischio richieda particolare attenzione, oltre a definire azioni immediate per mitigare le minacce potenziali.
  • Formazione. La formazione è essenziale per assicurare che tutti i professionisti coinvolti nello sviluppo del software, specialmente gli sviluppatori, siano consapevoli dei problemi legati alla sicurezza e siano in grado di seguire e implementare le migliori pratiche per lo sviluppo sicuro, al fine di ridurre al minimo le minacce.
    > Scopri la formazione in sicurezza informatica
  • Collaborazione tra i team. Questo principio sottolinea l’importanza della collaborazione tra sviluppatori, sistemisti e team di sicurezza. Lavorare insieme, condividendo conoscenze e coordinando gli sforzi, è fondamentale per raggiungere obiettivi comuni e garantire un software sicuro e affidabile.

Integrare la sicurezza nel ciclo di sviluppo

L’integrazione della sicurezza nel ciclo di sviluppo del software è fondamentale per garantire la fiducia e l’affidabilità delle applicazioni, indipendentemente dalla loro dimensione e complessità. Inoltre, riduce significativamente le vulnerabilità del software, garantendo una maggiore resilienza agli attacchi.

  1. Pianificazione
    Nella fase di pianificazione, si valutano il profilo e gli obiettivi di sicurezza del progetto. Si adotta un framework di gestione del rischio e si conducono attività preliminari di risk management per informare gli stakeholder sui rischi legati alla sicurezza del software. In questa fase si eroga anche la formazione in sicurezza informatica personalizzata e specifica per ogni figura.
  2. Definizione dei Requisiti
    In questa fase si definiscono e documentano i requisiti di sicurezza, tra cui riservatezza, integrità, disponibilità, autenticazione, autorizzazioni, gestione delle sessioni e configurazione. I requisiti si ottengono da attività di threat modeling, casi d’uso, politiche di sicurezza e esigenze degli stakeholder. Per ogni requisito si definiscono e si simulano i potenziali attacchi, per definire il comportamento atteso del software in tali circostanze.

    Questa fase è anche la più problematica e presenta una serie di sfide. In primo luogo, la sicurezza non viene considerata funzionale e di conseguenza non viene data priorità ai requisiti di sicurezza. In secondo luogo, spesso non viene prestata attenzione alla definizione dei requisiti di sicurezza, rischiando di non soddisfarli a causa di una gestione impropria. Infine, spesso non sono validati e si rischia di implementare requisiti non necessari.

  3. Progettazione
    L’obiettivo di questa fase è garantire che il progetto possa gestire efficacemente le questioni di sicurezza, in conformità con i requisiti definiti nella fase precedente. È consigliabile sottoporre la progettazione a una revisione esterna e continuare a valutare e testare la superficie di attacco fino a quando il design non soddisfa un livello accettabile di rischio residuo.

    Durante questa fase, si riscontrano principalmente due problemi legati alla sicurezza: la mancanza di threat modeling e la non aderenza ai principi di security by design.

  4. Sviluppo
    In questa fase si sceglie un linguaggio di programmazione sicuro in cui viene scritto il progetto. Gli sviluppatori possono scegliere se seguire linee guida generali per la scrittura del codice sicuro, come quelle fornite da OWASP (link esterno), o affidarsi a quelle specifiche per il linguaggio di programmazione di riferimento. Esempi di linee guida specifiche per linguaggi di programmazione sono MISRA-C e CERT SEI-C per il linguaggio di programmazione C, MISRA-C++ per C++, e CERT SEI-Java per Java. Durante la fase di sviluppo viene eseguita e automatizzata l’analisi e la revisione del codice.

    Questa fase è particolarmente delicata e si incontrano spesso minacce alla sicurezza come il tampering, le SQL injection e il cross-site scripting.

    > Leggi anche: Code Review: standard, checklist e strumenti

  5. Test
    In questa fase vengono eseguiti i test di sicurezza, per verificare la resilienza del software sotto attacco e assicurarsi che riesca a gestire le minacce. Questa operazione viene anche chiamata “attack surface validation”. I test di sicurezza includono i Dynamic Application Security Testing (DAST), Interactive Application Security Testing (IAST), fuzzing, scansione delle vulnerabilità e Penetration test.
  6. Deployment e Manutenzione
    In questa fase ci si assicura che il processo di deployment sia sicuro e vengono prese precauzioni in modo da minimizzare gli eventuali problemi e minacce alla sicurezza. Inoltre, viene eseguita un’ultima revisione della sicurezza del software prima della distribuzione. È possibile coinvolgere tester terzi certificati per audit approfonditi, specialmente quando il software deve soddisfare requisiti di certificazione esterni e normativi.

    Il software viene rilasciato se la revisione finale della sicurezza è superata o fallisce con un rischio residuo accettabile. La gestione delle vulnerabilità, i premi per la segnalazione di bug e i flussi di lavoro DevOps sicuri vengono implementati e aggiornati in questa fase. Dopo il deploy ci si assicura di monitorare la sicurezza in modo costante, aggiornando il software per mantenerlo sicuro nel tempo.

> Leggi anche: DevSecOps: principi e strumenti per la sicurezza integrata

ISO27001 e SDLC

L’integrazione della sicurezza nell’SDLC è un elemento chiave anche nell’ultima versione dello standard ISO 27001, che riorganizza diversi controlli granulari all’interno del ciclo di sviluppo del software.
Numerosi nuovi requisiti di controllo sono stati introdotti in risposta alle evoluzioni sia nella tecnologia, sia negli attacchi informatici verificatisi nell’ultimo decennio. Ad esempio, tra i nuovi requisiti dello standard vi è la definizione delle responsabilità di sicurezza tra un fornitore di servizi cloud e un’organizzazione. ISO 27001 richiede inoltre l’adozione di una politica di sicurezza informatica completa, che includa requisiti di sicurezza, valutazioni dei rischi e azioni correttive.

La nuova edizione dell’ISO 27001 mette in rilievo il coinvolgimento degli sviluppatori e la loro formazione in materia di sicurezza del codice, nonché l’integrazione della sicurezza in ogni fase dell’SDLC. Si sottolinea l’importanza della gestione e del controllo degli accessi, insieme al monitoraggio costante per individuare malware e intrusioni. Lo standard enfatizza che l’attuazione delle politiche di sicurezza deve essere un processo dinamico, adeguatamente comunicato, attuato e aggiornato. In altre parole, si promuove la sicurezza come parte integrante della cultura aziendale e della qualità del software, in un contesto in cui i team di sviluppo sono pienamente supportati.

> Scopri il servizio di consulenza sullo Standard ISO/IEC 27001:2022

Il futuro del ciclo di sviluppo del software non si limita però alla sicurezza, ma si estende anche all’integrazione di pratiche di sviluppo agile, automazione dei processi e applicazione di tecniche avanzate di analisi per identificare e mitigare le minacce in tempo reale.

Fonti: 

Application security according to ISO 27001. Invicti. (2023). https://www.invicti.com/white-papers/application-security-according-to-iso-27001-invicti-ebook/

Chun, T. J., En, L. J., Xuen, M. T., Xuan, Y. M., & Muzafar, S. (2023). Secured Software Development and Importance of Secure Software Development Life Cycle. https://doi.org/10.36227/techrxiv.24548416.v1

GfG. (2024). What is Secure Software Development Life Cycle (SSDLC )?. GeeksforGeeks. https://www.geeksforgeeks.org/what-is-secure-software-development-life-cycle-ssdlc/#key-principles-of-secure-sdlc%20secure-software-development-life-cycle

Rapporto clusit 2024. Clusit. (2024). https://clusit.it/rapporto-clusit/

Umeugo, W. (2023). Secure Software Development Lifecycle: A case for adoption in software smes. International Journal of Advanced Research in Computer Science, 14(01), 5–12. https://doi.org/10.26483/ijarcs.v14i1.6949