In Italia, nell’ultimo anno gli attacchi informatici sono aumentati del 15% (Clusit). La superficie di attacco è cresciuta esponenzialmente nel corso del tempo, i dati hanno acquisito valore strategico e gli attaccanti sono diventati sempre più rapidi e organizzati. Per questo, la difesa non può basarsi su approcci tradizionali e deve essere integrata in tutto il ciclo di sviluppo del software. È qui che entra in gioco il concetto di secure code.
È evidente che la sicurezza non possa essere un pensiero accessorio o qualcosa da gestire al termine di un progetto software. Al contrario, deve essere parte integrante dell'intero Software Development LifeCycle (SDLC) e, possibilmente, fondarsi su metodologie moderne come DevSecOps, che mirano a integrare la sicurezza in ogni fase dello sviluppo, dalla progettazione al rilascio.
Per affrontare correttamente questo tema, bisogna però chiarire cosa si intenda con l’espressione secure code. In senso assoluto, un codice privo di qualsiasi vulnerabilità presente o futura è poco più di un’utopia perché il software vive in un ecosistema in continua evoluzione. Nuove vulnerabilità vengono scoperte ogni giorno, il software va aggiornato (operazione che potrebbe favorire ulteriori minacce), mutano i requisiti normativi e gli attaccanti diventano sempre più competenti e smart.
In un progetto di sviluppo software, inoltre, bisogna anche considerare l’equilibrio tra sicurezza, performance e costi. Applicare ogni misura di sicurezza possibile al codice renderebbe molte applicazioni lente, troppo costose o impossibili da rilasciare nei tempi richiesti dal business. In altri termini, un approccio all-in alla sicurezza del codice non è sostenibile.
Parlare di secure code significa costruire applicazioni sicure in modo ragionato, ovvero in funzione del contesto in cui il software andrà a operare. Un’applicazione interna o con dati a bassa sensibilità, per esempio, avrà esigenze di protezione ben diverse rispetto a un gestionale sanitario o a un sistema di pagamento online.
Integrare misure di sicurezza nel codice applicativo è dunque una parte di un processo più ampio, che potremmo sintetizzare in questo modo:
Quando questo processo viene integrato senza attriti nei workflow di sviluppo (con strumenti, policy e cultura condivisa) si ottiene un modello virtuoso e, soprattutto, un applicativo che, con tutte le premesse del caso, si può definire sicuro.
Completate l’analisi dei requisiti, la modellazione delle minacce e la selezione delle misure più adatte, arriva il momento in cui bisogna tradurre le decisioni in codice. Qui non basta il buon senso del singolo sviluppatore, le sue competenze o la sensibilità del team: serve un metodo condiviso, strutturato e coerente nel tempo.
Per integrare le misure di sicurezza nel codice, ogni team (interno o esterno) deve seguire una base di best practice comuni. Questo non solo aiuta a evitare vulnerabilità note, ma garantisce uniformità tra i progetti aziendali.
In assenza di riferimenti precisi, ogni applicazione rischia di essere un caso a sé, e se dovessero emergere nuove minacce (si pensi a una dipendenza comune compromessa), l’azienda non potrebbe avere una visione chiara di quali software siano esposti e quali no. Ogni verifica diventerebbe un’indagine a sé, con dispendio di tempo, risorse e attenzione, anche solo per l’assessment preliminare.
Fortunatamente, le aziende non sono obbligate a sviluppare un loro framework di secure coding. Nel tempo, sono nati diversi riferimenti internazionali proprio su questo tema, tra cui:
Avere una guida o uno standard di riferimento è fondamentale, ma tradurre i principi in attività concrete richiede il loro adattamento alla realtà aziendale, ovvero ai processi, ai ruoli e agli strumenti di cui dispone. In termini pratici, ciò significa:
Se volete trasformare i principi del secure coding in pratiche operative, il nostro team è pronto ad affiancarvi con servizi di sviluppo software sicuro e integrazione DevSecOps: contattateci per valutare insieme la soluzione migliore per la vostra realtà.