In questo articolo vado ad affrontare gli aspetti fondamentali del concetto di sicurezza applicato alle soluzioni ICT (security by design) che è bene tenere in considerazione quando si affronta la progettazione e lo sviluppo di una qualsiasi applicazione informatica.
Le applicazioni espongono dati personali, per questo motivo devono verificare chi ha effettuato la richiesta e condividere solo i dati ai quali l’utente autenticato ha diritto di accedere, avendo cura di differenziare i permessi di lettura e scrittura per ogni singolo utente.
Autenticazione ed autorizzazione
Il primo concetto che viene naturale affrontare quando si parla di security by design è quello dell’autenticazione utente, in modo da verificarne i criteri di autorizzazione per poter verificare in maniera capillare le operazioni permesse sui singoli dati.
La definizione di ruoli permette di semplificare la gestione dei permessi permettendone la gestione all’interno di gruppi di utenti, questa associazione viene verificata una volta terminata correttamente l’autenticazione utente.
Per poter mettere in sicurezza gli applicativi occorre però allargare il concetto di sicurezza ponendo attenzione su tutti gli elementi che compongono l’architettura ed analizzando con attenzione tutti i possibili punti di accesso.
Sicurezza del perimetro
Nel mondo IoT gli applicativi vengono esposti sulla rete internet proprio allo scopo di rendere pubblico l’accesso ai dati, occorre però mettersi al riparo da possibili attacchi mirati a forzare l’accesso a dati protetti, proprio come uno scassinatore mira ad aprire la cassaforte di una banca.
Si inizia in questo modo ad approcciare il concetto di sicurezza a livello di disegno dell’intera architettura, non guardiamo più il singolo dato e l’applicativo che stiamo progettando, ma allarghiamo la visuale anche ai protocolli di rete ed alle componenti che la compongono.
L’utilizzo di firewall e WAF permettono di filtrare e bloccare l’accesso all’intera infrastruttura a quei client che tentino l’accesso non autorizzato ai dati o che mirino ad effettuare attacchi DDoS.
OpenAPI
Utilizzare formati e protocolli standard permette di analizzare con maggiore cura quanto si sta progettando e sviluppando, permettendo quindi un’analisi dettagliata delle eventuali falle di sicurezza.
La specifica OpenAPI mira a definire in maniera formale ed universalmente riconosciuta l’interfaccia per l’accesso ai dati che vengono condivisi dal singolo micro servizio. Ad ogni risorsa vengono assegnati uno o più scope, solo gli utenti in possesso degli scopes richiesti possono accedere alla singola risorsa.
Una volta dichiarata in maniera opportuna l’API esposta è possibile definire il flusso di autenticazione degli utenti. Il protocollo OAUTH è universalmente riconosciuto per l’autenticazione di applicativi WEB o tramite APP mobile, trattandosi di un protocollo standard viene mantenuto (attualmente è alla versione 2.0) ed evoluto (OIDC, PAR).
MFA
I tentativi di attacco mirati al data breach operano cercando di individuare le chiavi di accesso (username e password) degli utenti, il primo livello di sicurezza che possiamo attuare è la creazione di una password complessa in modo che sia difficilmente individuabile.
La Multi Factor Authentication aumenta il livello di sicurezza in quanto viene richiesta una azione ulteriore da parte dell’utente che si sta autenticando, come ade esempio una seconda autorizzazione tramite l’app mobile installata sullo smartphone o l’inserimento di un OTP inviato tramite e-mail o SMS.
Questo tipo di autenticazione può essere attuata sia in fase di prima autenticazione utente che nel caso di determinate operazioni per le quali sia richiesto un livello ulteriore di sicurezza.
Strumenti di analisi
Come si fa a capire se un sistema è sotto attacco? Purtroppo non c’è una sola risposta a questa domanda, in quanto i tentativi di attacco possono essere molteplici e chi li effettua varia la tipologia di intrusione proprio per evitare di essere riconosciuto.
Possiamo però effettuare un’analisi statistica sui tentativi di accesso, ad esempio classificando una classe di IP che tenta numerosi accessi in un lasso di tempo ristretto può identificare un attacco DDoS, diversi accessi con utente o password errati possono invece evidenziare il tentativo di furto delle credenziali di accesso.
L’integrazione quindi con strumenti di reportistica ed analisi dei dati di accesso (ad esempio l’utilizzo di ELK) possono aiutare nell’individuare potenziali attacchi ai sistemi informatici.
Sicurezza applicativa
Quando parliamo di ingegneria del software intendiamo analizzare tutti i processi produttivi dedicati allo sviluppo di applicativi efficienti e sicuri, occorre quindi porre particolare attenzione alle librerie che sono utilizzate all’interno del progetto.
Un caso che viene menzionato sovente è quello della vulnerabilità introdotta da Log4j, strumenti analisi del codice e scansione delle dipendenze sono un valido aiuto nell’individuare falle di sicurezza e notificarle a partire dallo sviluppo, tramite le pipeline di CI/CD o la verifica periodica degli ambienti produttivi.
La definizione dello SBOM (Software Bill Of Materials), aiuta i progetti a tenere sotto controllo le componenti applicative per individuare eventuali librerie che contengono potenziali falle di sicurezza e procedere alla loro sostituzione con versioni accreditate come sicure.
OWASP
L’Open Worldwide Application Security Project pone l’attenzione sulla definizione di linee guida per migliorare la sicurezza delle applicazioni web. OWASP Top 10 è un documento rivolto agli sviluppatori e che descrive i principali rischi di sicurezza.
La piattaforma 42Crunch è un valido supporto allo sviluppo di servizi web per l’esposizione dei dati tramite interfacce web o APP mobile, mette a disposizione degli sviluppatori i plugin da integrare nei tool di sviluppo per la scansione statica della definizione swagger delle API.
Una verifica costante è prevista anche nelle fasi di test delle API tramite l’invio di request verso gli endpoints dichiarati nella definizione swagger per testarne le risposte sia in caso di dati corretti che in caso di errore, a corredo dei gateway può essere installata la componente firewall per la verifica a runtime delle API pubblicate.
Tutti devono collaborare
Il security by design riguarda quindi tutti gli elementi dell’architettura, in modo da evitare falle che possono essere utilizzate dagli hackers, non è però un concetto statico ed occorre verificare periodicamente lo stato di salute di tutte le componenti.
La collaborazione all’interno del team è fondamentale, nessuno si deve sentire escluso da questo concetto, all’interno di Profesia miriamo ad avere gruppi di lavoro competenti e sensibili sulle tematiche di sicurezza che riteniamo essere alla base dello sviluppo di applicativi di successo.