Sicurezza delle applicazioni:
cos’è, tipologie e best practices

Ogni anno gli sviluppatori distribuiscono milioni di applicazioni software. Assicurare la loro sicurezza è diventato un imperativo categorico a qualsiasi livello di business.

Che si tratti di un software commerciale, sviluppato e distribuito da un ISV, oppure di un’applicazione utile a supportare un processo interno all’azienda.

Oggi, parlare di sicurezza delle applicazioni significa considerare l’intero ciclo di vita, dalla progettazione al mantenimento.

Nel caso del software moderno, basato su microservizi, tla sicurezza è ancora più cruciale, considerando che la metodologia di sviluppo più diffusa, DevOps, ha rapidamente adottato una variante specifica: DevSecOps.

Quel “Sec”, identificativo di security, integra appositamente, in fase di design, tutti gli aspetti relativi alla sicurezza delle applicazioni.

La sicurezza delle applicazioni offre numerose tipologie e strumenti disponibili sul mercato.

Le aziende devono scegliere in maniera consapevole sulla base delle loro rispettive esigenze.

Grazie all’esperienza di IFIConsulting in questo ambito, vediamo cosa si intende per sicurezza delle applicazioni e quali sono le best practice da adottare.

Sicurezza delle applicazioni

La sicurezza delle applicazioni (appsec) è una disciplina complessa, che prevede l’impiego di software, hardware, metodologie, procedure e best practice utili a garantire la protezione delle applicazioni informatica dalle minacce alla loro sicurezza.

La sicurezza è ora parte integrante dello sviluppo del software per affrontare l’aumento delle minacce che sfruttano le vulnerabilità.

A maggior ragione, i cyber criminali sfruttano in maniera decisamente efficace le capacità analitiche dell’intelligenza artificiale.

Per offrire un quadro di riferimento sulla sicurezza delle applicazioni è utile richiamare i sette livelli che convenzionalmente la caratterizzano:

  • Livello della sicurezza fisica: riguarda la sicurezza dei server e dei data center che eseguono gli ambienti di esecuzione delle applicazioni stesse. Rientra nell’azione dei piani di continuità di business (business continuity plan).
  • Livello della rete: riguarda i sistemi di rete e tutti i loro componenti applicativi (router, switch, hub, firewall, ecc.). Oggetto di una disciplina specifica come la network security.
  • Livello del sistema operativo: riguarda le interfacce tra utenti e applicazioni, probabilmente il layer più critico a causa della loro esposizione alle minacce informatiche.
  • Livello del web server: riguarda il software che fa da host all’applicazione web e il sistema operativo del server che lo esegue. Deve essere isolato correttamente, in modo che le eventuali vulnerabilità non risultino facilmente scansionabili dall’esterno.
  • Livello del database: riguarda i dati a cui le applicazioni si connettono attraverso specifiche query. A sua volta, si compone di vari sottolivelli come il database management system, un middleware che ha lo scopo di gestire il database stesso. I dati sono solitamente protetti mediante tecniche basate sulla crittografia.
  • Livello della logica: l’applicazione è definibile mediante una serie di istruzioni in codice, che agiscono secondo una logica sequenziale, dietro il controllo di un algoritmo. L’ingegneria del software ha compiuto significativi progressi nel rendere più sicuro il codice. Non è tuttavia possibile escludere del tutto la presenza di vulnerabilità, soprattutto nel contesto delle fasi di deploy. È la ragione per cui sentiamo spesso parlare di patch e aggiornamenti di sicurezza delle applicazioni.
  • Livello delle terze parti: riguarda i rischi derivanti dai plugin e script di terze parti integrati nell’applicazione principale per aggiungere funzioni specifiche (es. pagamento elettronico, autenticazione multifattoriale, ecc.). La differenza tecnologica innesca una connessione che può costituire il proverbiale anello debole della catena della sicurezza informatica.

Nel corso degli anni, molte procedure di testing hanno garantito la sicurezza delle applicazioni.

Vediamo una rapida rassegna delle più diffuse:

  • Test dinamici di sicurezza delle applicazioni (DAST): sono procedure automatizzate utilizzate nei contesti a rischio basso e moderato per soddisfare la maggior parte delle esigenze applicative. Su questa base operativa interviene una componente di manualità da parte degli specialisti della sicurezza, soprattutto nei contesti più critici.
  • Test statici di sicurezza delle applicazioni (SAST): combinano tecniche automatizzate e manuali per identificare bug senza eseguire l’applicazione negli ambienti di produzione. È il caso della scansione del codice sorgente e del relativo debug.
  • Test interattivi di sicurezza delle applicazioni (IAST): molto diffusi nell’ambito delle pipeline DevOps, sono test automatici delle vulnerabilità presenti nelle applicazioni. Si tratta di un’evoluzione dei tradizionali test dinamici e consentono di avere una visibilità in tempo reale del codice in fase di esecuzione.
  • Penetration test: segue solitamente un vulnerability assessment, in cui si effettua una scansione alla ricerca delle possibili vulnerabilità, con lo scopo di approfondirne la conoscenza e la loro potenziale criticità. In altri termini, si tratta di simulare il comportamento degli attaccanti, anticipando di fatto la loro azione, in modo da neutralizzarla prima che possa verificarsi un attacco concreto.
  • Test di sicurezza delle applicazioni mobili (MAST): come il nome stesso suggerisce, si tratta di strumenti di sicurezza utilizzati per il test delle applicazioni mobile. Sono caratterizzati da analisi statiche e dinamiche, pianificate per identificare problemi specifici nel contesto mobile, come gli attacchi in-the-middle sulle reti wi-fi e i jailbreak.
  • Analisi della composizione del software (SCA): molto diffuso nell’ambito della sicurezza dei container ed altre tecnologie open source per gli ambienti di sviluppo delle applicazioni, con lo scopo di valutare i rischi di sicurezza, qualità e conformità delle licenze che ne regolano l’utilizzo.

Bisogna identificare almeno tre principali tipologie di strumenti utilizzati per il test della sicurezza delle applicazioni: piattaforme di sviluppo, strumenti di test e strumenti di protezione delle applicazioni.

Le piattaforme di sviluppo sicure (secure development tools) sono concepite per suggerire ai programmatori gli standard e le best practice da applicare, con tool di scansione del codice in grado di scongiurare sul nascere l’insorgere di eventuali vulnerabilità.

Gli strumenti di test automatizzano i controlli sul codice e possono essere utilizzate sia per il software in fase di sviluppo che per ispezionare parti già in produzione. Si impiegano in tutti i contesti per analisi statiche, dinamiche, interattive e per i sistemi mobile.

I sistemi di protezione comprendono una pluralità di tool:

  • strumenti per il rilevamento delle minacce di rete e degli ambienti di esecuzione;
  • strumenti di crittografia;
  • strumenti di offuscamento del codice sorgente.

Un ambito specifico è inoltre costituito dall’autoprotezione delle applicazioni runtime (RASP).

Gli strumenti RASP (Runtime Application Self Protection) sono moduli funzionali inclusi nell’applicazione stessa, con lo scopo di effettuare controlli continuativi e applicare automaticamente misure di risposta nel caso di presunte violazioni, che in genere coincidono con la generazione di alert utili all’intervento diretto degli specialisti della sicurezza.

Per valutare la sicurezza delle applicazioni sono stati definiti molti framework, che hanno in comune almeno le seguenti fasi, utili a identificare, mitigare e prevenire le vulnerabilità del software:

  • Valutazione del rischio e pianificazione;
  • Progettazione e sviluppo con criteri di sicurezza;
  • Revisione e test del codice;
  • Test e valutazione della sicurezza;
  • Distribuzione e monitoraggio.

La best practice per implementare la sicurezza delle applicazioni consiste nel dare una risposta ad una serie di domande ricorrenti quando si tratta di sviluppare un software e mantenerlo lungo l’intero ciclo di vita:

  • Cosa deve essere protetto? In questa sede occorre porre l’attenzione sulla mappatura di tutti i sistemi IT, hardware e software, in cloud e on-premise, in qualche modo coinvolti dal funzionamento dell’applicazione.
  • Qual è lo scenario peggiore? Occorre valutare nel dettaglio i rischi e comprendere le criticità nel caso in cui una minaccia alla sicurezza delle applicazioni dovesse tradursi in un effettivo attacco, in modo da adottare in maniera proattiva le azioni utili a mitigarlo.
  • Come potrebbe verificarsi un attacco? La risposta a questa domanda deriva da azioni mirate come il vulnerability assessment e il penetration test, che consentono di avere una visibilità efficace sulle potenziali vulnerabilità, anticipando di fatto l’azione dell’attaccante.

Un buon punto di partenza consiste nell’adottare un framework di sicurezza delle applicazioni che consenta alle organizzazioni di avere sotto controllo le procedure in atto, coordinando il lavoro di tutte le parti in causa, dagli sviluppatori agli specialisti della sicurezza, senza dimenticare l’importanza di un progetto di formazione continua utile a responsabilizzare tutti gli stakeholder.