La Casa Bianca ha sentito la necessità di comunicare a tutti che è indispensabile sviluppare software sicuri ed in particolare si è concentrata sul definire una strategia rivolta a responsabilizzare chi sviluppa i software. Questo anche alla luce del fatto che esistono milioni di applicazioni ed è impossibile controllarle tutte. Attraverso il report “Back to the building blocks: a path toward secure and measurable software” la Casa Bianca ha individuato quali siano gli elementi fondamentali per garantire la sicurezza del software, li riassumeremo di seguito indicandoti, alla fine dell’articolo, quali possano essere soluzioni pratiche immediate da poter utilizzare.
Contattaci subito e senza impegno per garantire e/o verificare la sicurezza del tuo software.
E’ un dato di fatto la complessità che deve affrontare ogni utilizzatore di servizi IT per potersi difendere dagli attacchi hacker e, nel caso questi attacchi coinvolgano direttamente il software in uso all’interno dell’azienda o dell’organizzazione, quest’ultime devono necessariamente affidarsi a chi ha realizzato lo stesso software al fine di correggere il bug.
Pertanto gli sviluppatori sono i primi protagonisti nel garantire la sicurezza delle informazioni e dei dati degli utenti e devono farsi parte attiva, in maniera seria e con il giusto commitment, nel cercare di eliminare i bug. La strada che viene suggerita dalla Casa Bianca è quella di cercare di eliminare, attraverso opportune configurazioni, intere classi di problemi come quelle legate al concetto di memory-safe in modo da ridurre la potenziale superficie di attacco ed avere codice più affidabile.
Per garantire la sicurezza del software occorre concentrarsi su due aspetti:
Contattaci subito e senza impegno per garantire e/o verificare la sicurezza del tuo software.
Per ridurre il rischio di compromissione del software occorre cercare di eliminare categorie di vulnerabilità note. Grazie all’analisi delle passate Common Vulnerability and Exposures (CVE) è possibile individuare che uno dei problemi più importanti, e che ha un rilevante impatto, è rappresentato dalla sicurezza della memoria, cioè da come viene effettuato l’accesso, la modifica e l’allocazione degli spazi.
Programmi scritti in C e C++ sono noti per avere problemi nel garantire la sicurezza della memoria, pertanto la scelta del linguaggio di programmazione con cui sviluppare il software deve cercare di orientarsi verso quei linguaggi memory-safe come Rust. In pratica occorre scegliere linguaggi che, per loro natura, sono maggiormente sicuri di altri così da partire già con un problema in meno.
Nel caso di software già in produzione è chiaramente complesso migrare tutto il codice sorgente da un linguaggio non memory-safe verso uno memory-safe ma si può sempre partire con un approccio ibrido magari iniziando a migrare quelle funzioni critiche e che sono maggiormente esposte a rischi. Nel Whitepaper “The Case for Memory Safe Roadmaps” , CISA, NSA e l’FBI hanno fornito le indicazioni su quali siano i linguaggi memory safe da scegliere: Python, Java, C#, Go, Swift e Rust.
Affianco al linguaggio(n.d.r. che comunque non elimina qualsiasi rischio), occorre necessariamente aggiungere il “security by design“, un concetto sdoganato da tempo anche grazie a leggi come il GDPR. Attraverso il security by design occorre creare determinismo nel codice, vale a dire che deve essere sempre noto e monitorato il risultato in modo da riconoscere immediatamente comportamenti scorretti. Inoltre occorre evitare di inserire funzioni che riescono a recuperare parti di memoria allocate che non sono in uso ( il “garbage collector“) dal computer .
Tali concetti sono soprattuto importanti nei software embedded come nell’ambito industriale, dove al fine di mitigare ulteriormente i bug della memoria si stanno implementando metodi hardware specifici come il Capability Hardware Enhanced RISC Instructions (CHERI).
Contattaci subito e senza impegno per garantire e/o verificare la sicurezza del tuo software.
Nonostante si metta in campo il massimo sforzo possibile, al fine di garantire la massima sicurezza del software occorre tenere in considerazione che alcune vulnerabilità possono ancora essere presenti. Pertanto, oltre ai test( che sono il minimo elemento da inserire in ogni sviluppo), si possono utilizzare tecniche matematiche chiamate “metodi formali” per dimostrare la correttezza del software.
I metodi formali, spesso usati per verificare i risultati di un software, possono essere sfruttati in ottica cybersecurity: per esempio può essere utilizzata la tecnica di analisi statica del codice ed il testing positivo basato su asserzioni.
I metodi formali possono quindi essere integrati direttamente il tutto in ciclo di sviluppo, anche nella verifica dei fornitori al fine di garantire la sicurezza della supply chain, spesso alla cronaca per problemi di sicurezza.
Questi metodi formali, insieme ai test, mitigano ulteriormente i rischi e possono essere utilizzati anche nel caso tu stia utilizzando un linguaggio che non è memory safe.
Contattaci subito e senza impegno per garantire e/o verificare la sicurezza del tuo software.
Misurare è l’unico modo per poter migliorare, come gli sportivi cercano di migliorare i propri risultati misurandone continuamente i progressi, così, nel software occorre avere misure empiriche della qualità.
Misurare il codice vuol dire valutare continuamente il software attraverso l’osservabilità del comportamento e mettendo in campo processi di ricerca delle vulnerabilità, di disclosure delle vulnerabilità in modo ad aumentare la fiducia, di stress test, di fuzzing.
I tre elementi che la Casa Bianca suggerisce di tenere in debita considerazione sono:
In poche parole occorre, attraverso la misurazione, garantire che il software sia affidabile, resiliente e che si comporti sempre nella stessa maniera e nel caso non lo faccia che si sia in grado di individuare immediatamente il problema.
Contattaci subito e senza impegno per garantire e/o verificare la sicurezza del tuo software.
Per realizzare software sicuro occorre partire dalla pipeline di sviluppo integrando processi di DevSecOps unendo, quindi, tutte quelle metodologie di cui abbiamo parlato nell’articolo “Come garantire la qualità del software: code review, stress test, fuzzing ed analisi funzionale“. A questo occorre aggiungere revisione del codice sorgente, Behaviour Development, Chaos Engineering e guardando all’architettura anche Site Reliability Engineering(SRE).
Contattaci subito e senza impegno per garantire e/o verificare la sicurezza del tuo software.
Abbiamo realizzato applicazioni business critical impiegate in ambienti sensibili come quello energetico, medico e della sicurezza del cittadino. Gli ambienti critici in cui il nostro software opera ci hanno permesso di costruire un’importante sensibilità verso la qualità e la sicurezza del software, sensibilità che ci permette di fornirti la tua applicazione con garanzia 12 mesi da qualsiasi bug. Grazie all’esperienza maturata in tantissimi settori, con numerosi Clienti e con un solido gruppo aziendale ti forniamo le competenze per progettare, sviluppare e manutenzionare anche in maniera evolutiva le tue applicazioni. Infine ti forniamo un catalogo di servizi di CyberSecurity per qualsiasi analisi che vorrai fare sul tuo software ed anche sulla tua architettura IT. Contattaci subito e senza impegno per maggiori informazioni.