La sicurezza informatica deve essere il punto cardine del processo di sviluppo del codice software. Risulta di fondamentale importanza, infatti, garantire i requisiti di sicurezza in ogni fase del suo ciclo di vita. Fin dalla fase embrionale del progetto bisogna intraprendere un percorso che abbia come filo conduttore la sicurezza delle informazioni.
Secondo questo modus operandi occorre applicare delle regole di sviluppo ed avvalersi di professionisti con specifiche competenze. È necessaria una valutazione dei rischi per la sicurezza delle informazioni e una valutazione d’impatto per garantire la privacy dei dati sensibili trattati dall’applicativo in progetto.
È indispensabile, infine, un test ripetuto nel tempo in tutte le fasi del ciclo di vita del software.
Indice degli argomenti
La sicurezza informatica nello sviluppo del software: i rischi
Prestare attenzione alla sicurezza informatica in fase di sviluppo è importante per ridurre al minimo le vulnerabilità, legate a possibili errori di programmazione, che possono essere sfruttate dai sempre più efficaci ed in costante aumento attacchi informatici, ma anche inficiare la qualità del prodotto finale.
Proteggere il codice e i dati gestiti dall’applicativo in sviluppo nonché garantire i parametri di protezione della sicurezza informatica (integrità, riservatezza e autenticazione) devono rappresentare gli obiettivi principali della sicurezza software.
Sicurezza informatica nello sviluppo del software: le fasi
Descriveremo, di seguito, le varie fasi del ciclo di vita del software, secondo un comune denominatore: garantire i requisiti di sicurezza del dato, delle funzioni e del linguaggio di programmazione.
Ciò non toglie che ciascuna fase possa essere rivista per essere eventualmente revisionata e corretta: esistono infatti modelli alternativi e meno rigidi di quello proposto, per rendere più affidabile l’intero processo di produzione e di gestione del software.
Ciascuna fase dovrà essere verificata ed approvata nel rispetto di determinate linee guida coerenti con i principali standard di sicurezza.
Studio di fattibilità
È la fase in cui si valutano possibili costi e benefici del prodotto da sviluppare. Viene prodotto un documento che deve contenere:
- la definizione del progetto;
- le possibili soluzioni e le relative motivazioni;
- per ognuna delle soluzioni proposte, la stima dei benefici, dei costi, delle risorse richieste e dei tempi di consegna.
Analisi e specifica dei requisiti
Questa fase ha lo scopo di determinare le funzionalità richieste dal cliente e le proprietà del software in termini di performance, sicurezza, facilità d’uso, portabilità e manutenzione.
La raccolta dei requisiti deve tenere conto del contesto tecnologico e di quello normativo. Anche queste proprietà vengono verbalizzate in un documento, che permetterà al cliente di verificare le caratteristiche specificate e consentirà al progettista di procedere allo sviluppo dell’architettura del software. In questa fase si può prevedere di stilare un manuale d’uso ed una definizione delle modalità di test del sistema.
L’analisi e la specifica dei requisiti di sicurezza rappresenta un elemento importante e condizionante per la soluzione che si deciderà di adottare.
Particolare attenzione bisognerà prestare per quanto concerne la scelta delle modalità di sicurezza operative dell’applicazione, dell’infrastruttura e dell’ambiente di sviluppo.
Progetto dell’architettura del sistema
Scopo di questa fase è la produzione di un documento contenente una descrizione dell’architettura del software sia a livello globale che a livello dei singoli moduli integrati e interagenti.
Andranno analizzate le funzioni e le soluzioni proposte in fase di fattibilità, pianificati tempi e risorse per l’attuazione dei requisiti e la conduzione dei test, e stabilire le regole di sicurezza definendo con gli sviluppatori il linguaggio di programmazione da usare e le caratteristiche dell’applicativo.
È questo il momento in cui svolgere delle istruttorie per la stesura di un documento di valutazione dei rischi a cui l’applicazione è esposta, e di valutazione d’impatto sul trattamento dei dati, per la salvaguardia rispettivamente della sicurezza delle informazioni (ISO 27034, ISO 29151) e della protezione dei dati personali (GDPR – General Data Protection Regulation, regolamento EU 679/2016).
Realizzazione delle singole componenti e loro verifica
È la fase in cui i programmi vengono effettivamente realizzati applicando regole di buona pratica per la stesura sicura del codice ed effettuando test di funzionalità e di ricerca di eventuali vulnerabilità.
Per ogni componente si fornisce:
- codifica
- documentazione
- specifica dei test effettuati
Ai fini della sicurezza, occorre che gli ambienti di sviluppo siano dotati di sistemi di audit, backup, controllo accessi e mantenuti aggiornati e protetti da appositi moduli di sicurezza software sulla base di linee guida condivise e impartite da soggetti erogatori di servizi di supporto, formazione e informazione.
Integrazione e verifica del sistema
Questa fase ha lo scopo di assemblare il codice prodotto, verificarne l’effettiva compatibilità, risolvendo eventuali errori d’interazione e sicurezza, e potrebbe non essere considerata concettualmente distinta dalla fase precedente.
È consigliabile predisporre un piano di testing con casi di prova e relativi criteri di accettabilità, simulando intrusioni con vari scenari di attacco, tenendo separato l’ambiente di test rispetto a quello di sviluppo.
Gli obiettivi dei test devono consentire di evidenziare il grado di esposizione del software alle vulnerabilità note e di riesaminare il codice sorgente alla ricerca di anomalie nel corretto funzionamento dei controlli di sicurezza e delle specifiche operazionali.
Consegna
In questa fase, il sistema viene distribuito agli utenti che ne verificano il funzionamento, individuando eventuali anomalie o dissimilarità rispetto alle specifiche di progetto. Per il rilascio del software in produzione occorre aver superato un acceptance test per la verifica del rispetto dei requisiti funzionali e di sicurezza, aver realizzato una documentazione di sistema e pianificata una formazione destinata agli utenti utilizzatori.
La consegna avviene in due fasi:
- Beta test: il sistema viene distribuito ad un selezionato insieme di utenti allo scopo di effettuare test in casi reali. Gli errori riscontrati dovrebbero essere corretti prima della distribuzione effettiva del prodotto.
- Distribuzione: il software viene definitivamente rilasciato agli utenti. Gli errori che vengono riscontrati dopo tale rilascio vengono solitamente corretti nelle versioni successive o tramite l’utilizzo di appositi software correttivi.
Manutenzione
Questa fase racchiude in sé tutta l’evoluzione del sistema dalla consegna in poi. Essa comprende perciò modifiche ed evoluzioni di vario tipo. Inoltre la fase di manutenzione, racchiudendo ogni attività che segue la consegna del prodotto, può incidere per ben più della metà dei costi complessivi dell’intero ciclo di vita.
Conclusioni
Il costo per la correzione di una vulnerabilità o errore è tanto più alto quanto più tardi viene rilevato nel ciclo di vita. Per tale motivo i requisiti di sicurezza andrebbero acquisiti e verificati prima dello sviluppo e messa in produzione.
Un test pianificato, verificando la completezza e la coerenza delle funzioni, la qualità, la sicurezza e la funzionalità del software, può aiutare infatti ad individuare eventuali anomalie quando il costo per la correzione non incide in modo significativo.
Anche nella fase di post consegna (manutenzione) i test periodici possono essere utili. Infatti possono prevenire gli esiti di eventuali nuove vulnerabilità e/o tecniche di attacco e monitorare la funzionalità applicativa in seguito a cambiamenti significativi del prodotto consegnato.
Fondamentale per ottenere un buon risultato è quello di strutturare un team di progetto definendo con chiarezza ruoli e responsabilità quali il responsabile di progetto, il responsabile della sicurezza, i programmatori, i sistemisti, i collaudatori, i clienti, i fornitori e gli utenti finali.
In taluni casi potrebbe essere necessario prevedere una formazione preventiva per tutto il personale preposto allo sviluppo specificando 5 macro aree:
- politiche e linee guida per la sicurezza nel ciclo di vita del software;
- best practice per la compilazione sicura del codice;
- problematiche della sicurezza in funzione delle tecnologie utilizzate;
- vulnerabilità del codice che potrebbero essere sfruttate da attacchi informatici;
- standard di riferimento sulla sicurezza del software.
Qualora si decidesse di optare per fornitori e professionisti esterni questi andranno scelti sulla base di competenze specifiche ed affidabilità formalizzando contratti che prevedano vincoli di sicurezza e requisiti di protezione dei dati sensibili secondo le normative al momento in vigore.