Ad Agosto ho seguito un training molto interessante sul DevSecOps erogato dal BlackHat. In questo articolo e nel successivo voglio condividere i tool che più mi hanno colpito e alcuni spunti che spero potranno essere utili a coloro che si occupano di disegnare la strategia DevSecOps. Nella prima parte affronteremo i tool per l’analisi di sicurezza statica (SAST) e dinamica (DAST), nel seguito vedremo le metodologie per la security test automation.

Analisi statica (SAST): Semgrep

Nel corso sono stati illustrati diversi strumenti per l’analisi di Security statica (SAST) ma il tool che mi ha davvero impressionato è Semgrep. Già il nome fa intuire cosa lo rende particolare infatti oltre ad utilizzare le espressioni regolari (da cui grep) Semgrep è arricchito da una parte di analisi semantica (sem).

Analisi semantica, cosa vuole dire?

Oltre a dei costrutti molto avanzati per creare le espressioni regolari in grado di intercettare singole linee o pezzi di codice vulnerabili Semgrep dispone di operatori in grado di basare le analisi sul contesto di esecuzione. Ad esempio gli operatori source, propagetor e sink rendono possibile la cosiddetta Taint analysis.

Cosa si intende per Taint analysis?

E’ un’analisi che valuta tutto il flusso di propagazione di un determinato parametro/input utente nel codice applicativo. Lo scopo è capire se immettendo un input malevolo possiamo innescare problematiche di Security esempio sql injection, xss.  Tale approccio è utilizzato da molti tool commerciali come ad esempio Checkmarx.

Che differenza c’è tra i tool SAST commerciali e i tool open source?

Gli strumenti commerciali possiedono una ventaglio di regole e dei pattern già definiti tipicamente più ampio rispetto ai tool open source. Allo stesso tempo bisogna però considerare che la vera peculiarità di un tool SAST è la flessibilità di personalizzazione delle regole e l’effort per eseguire il tuning iniziale. Sotto questi aspetti entrambe le soluzioni SAST richiedono un periodo iniziale di tuning importante necessario per inserire delle regole su misura al codice da analizzare. Allo stesso tempo non bisogna dimenticare che nell’adozione di soluzioni SAST è necessario dedicare un team a supporto dell’attività di tuning e che riesca ad eseguire una manutenzione costante dei check di sicurezza.

Semgrep mette a disposizione un registro pubblico di regole riutilizzabili nonchè uno strumento per testare in tempo reale l’efficacia di un espressione regolare.

Semgrep Autofix

Oltre alla capacità di individuare vulnerabilità applicative Semgrep dispone della facoltà di sostituire pezzi di codice. Tale funzione denominata Autofix è utilizzabile a tutti gli effetti per applicare delle patch di sicurezza.

Analisi statica (SAST): Checkov

Checkov è un tool utile per rilevare vulnerabilità in ambienti e scenari che vengono dispiegati mediante modalità IAC (infrastructure as code).

Per eseguire le valutazioni il tool ha una lista di policy e relativi check per verificare se i controlli vengono rispettati nella scrittura del codice (Policy-as-code). Checov è in grado di identificare problematiche di sicurezza su Terraform, Dockerfile, Ansible ed è assolutamente estendibile con nuove regole.

Le policy di Checkov possono valutare ad esempio se stiamo esponendo su Internet la porta del servizio ssh, pratica sconsigliata da tutti i principi di Cybersecurity. Per Bitbucket con Checkov possiamo verificare se le merge requests hanno almeno due approvatori.

Infine Checkov può rilevare la presenza di secrets nel codice.

Analisi dinamica DAST: Nuclei

Spostando il focus sulla parte DAST Nuclei mi ha davvero impressionato per la sua semplicità e duttilità.

Nuclei è a tutti gli effetti un fuzzer ideato con lo scopo di diventare un vulnerabilty scanner molto flessibile. Esegue richieste con un determinato payload e in base alla risposta ottenuta valuta se un target è vulnerabile. Supporta svariati protocolli: HTTP, DNS, SSL e comunicazioni TCP raw.

Nuclei template

Il cuore di Nuclei sono i Nuclei template dei file Yaml che descrivono le valutazioni da eseguire. Gli elementi più importanti dei template sono requests e matchers.

Template Requests

Nelle Requests descriviamo la conformazione della richiesta da eseguire. In un template Http seguendo la sintassi dei moduli possiamo indicare:

  • Metodo: (GET, POST)
  • Header: (X-Forwarded-For, X-Originating-IP)
  • Body: parametri da inserire nel body
  • Payload: paylod da inserire nella richiesta

Template Matchers

Nei Matchers specifichiamo le condizioni da valutare nelle risposte per decretare la presenza di una vulnerabilità e allo stesso tempo indichiamo in quale componente della risposta valutare l’espressione (header, body). I matchers sono di tipo:

  • word: ricerca di una stringa
  • condition: basato su una condizione

Sintetizzando quindi le peculiarità più importanti di Nuclei sono la scalabilità, la modularità e i workflows.

E’ scalabile perché i check possono essere lanciati facilmente su diversi host.

Nuclei è modulare perchè ci sono molti template sviluppati dalla community e allo stesso tempo possiamo crearne di nuovi. 

I workflows sono una sequenza di template da eseguire in serie a seconda del verificarsi di precise condizioni. 

In ambito Security ho trovato molto interessante il template Nuclei wafefficacy per testare la capacità dei waf di rilavare e bloccare attacchi.

Conclusioni

Abbiamo visto i tool DAST e SAST che mi hanno colpito nel training sul DevSecOps al BlackHat 2023. Le caratteristiche principali delle soluzioni illustrate sono la facilità di estensione dei check e la semplicità di utilizzo. Queste due peculiarità sono fondamentali per la scelta degli strumenti di Security da integrare nel processo di sviluppo del codice.

Spero che sono riuscito a fornirti degli spunti utili per migliorare le scelte e la strategia da adottare per inserire i check di Security nelle pipeline di sviluppo.

Nel prossimo articolo andremo ad analizzare i concetti e soluzioni utili per la Security test automation e la gestione delle pipeline.