Executive summary
Ogni applicazione software esposta a una rete pubblica rappresenta una superficie di attacco potenziale, e le conseguenze di una debolezza non individuata possono tradursi in perdite economiche, danni reputazionali e violazioni normative. Per ridurre questo rischio, la disciplina della sicurezza applicativa ha sviluppato quattro famiglie di strumenti complementari, ciascuna progettata per individuare categorie specifiche di difetti in fasi diverse del ciclo di vita del software. Questo articolo analizza in profondità tali metodologie, i loro fondamenti tecnici, i risultati misurabili ottenuti nei principali studi comparativi e il ruolo degli standard internazionali nel guidarne l'adozione sistematica. L'analisi evidenzia che nessuna singola tecnica è sufficiente a garantire una copertura adeguata: i risultati più efficaci si ottengono integrando più metodologie in modo coordinato all'interno del processo di sviluppo, con un approccio che bilanci il rigore della verifica e la sostenibilità operativa.
Background
La sicurezza applicativa si è affermata come disciplina autonoma a partire dalla fine degli anni Novanta, quando la diffusione delle applicazioni web ha reso evidente che le vulnerabilità nel codice rappresentavano un vettore di attacco almeno pari a quelli infrastrutturali. Il contributo fondazionale di McGraw [1] ha formalizzato il concetto di software security come proprietà emergente dell'intero ciclo di sviluppo, distinta dalla semplice application security intesa come protezione perimetrale a posteriori. Questa distinzione ha motivato lo sviluppo di tecniche di analisi che operano direttamente sul codice sorgente, sul comportamento runtime e sulla composizione delle dipendenze, anziché limitarsi a difese esterne.
Il panorama delle vulnerabilità applicative è stato sistematicamente catalogato dall'OWASP (Open Web Application Security Project) a partire dal 2003. La OWASP Top 10, giunta alla revisione 2025, identifica le dieci categorie di rischio più critiche sulla base di dati empirici raccolti da oltre 500.000 applicazioni testate [2]. L'evoluzione delle categorie riflette la trasformazione del panorama delle minacce: la revisione 2025 introduce la categoria "Software Supply Chain Failures" (A03), espandendo la precedente "Vulnerable and Outdated Components" per riconoscere la crescente criticità degli attacchi alla catena di fornitura software, e la categoria "Mishandling of Exceptional Conditions" (A10), interamente nuova [2]. Con 248 CWE (Common Weakness Enumeration) mappate nelle dieci categorie, rispetto alle 400 della revisione 2021 e alle 589 del dataset complessivo, la tassonomia OWASP costituisce il riferimento operativo per la progettazione di strategie di testing che coprano lo spettro delle vulnerabilità note.
Parallelamente, il NIST ha contribuito alla formalizzazione dei requisiti funzionali degli strumenti di analisi attraverso il progetto SAMATE (Software Assurance Metrics And Tool Evaluation) e la pubblicazione SP 500-268, che definisce le specifiche funzionali per gli strumenti di analisi del codice sorgente [3]. Il programma SATE (Static Analysis Tool Exposition), giunto alla quinta edizione documentata nel report SP 500-326, ha fornito evidenze empiriche sulle capacità e i limiti degli strumenti di analisi statica attraverso valutazioni controllate su codebase di riferimento [4]. Questi due filoni, la tassonomia delle vulnerabilità (OWASP) e la valutazione degli strumenti (NIST), definiscono il quadro entro cui le metodologie di Application Security Testing vengono sviluppate, valutate e adottate.
Le quattro metodologie principali (SAST, DAST, IAST e SCA) si distinguono per il punto di osservazione, la fase del ciclo di sviluppo in cui operano e la classe di vulnerabilità che individuano con maggiore efficacia. Le sezioni successive analizzano ciascuna metodologia nei suoi fondamenti formali, nelle evidenze empiriche disponibili e nei limiti intrinseci, per poi esaminare le strategie di integrazione che ne massimizzano la complementarietà.
Fondamenti formali e tassonomia delle metodologie
Le metodologie di Application Security Testing si collocano lungo due assi ortogonali: il tipo di artefatto analizzato (codice sorgente, bytecode, applicazione in esecuzione, manifesto delle dipendenze) e il grado di conoscenza del sistema interno richiesto dall'analisi (white-box, black-box, grey-box). Questa classificazione non è meramente tassonomica: determina le proprietà formali dell'analisi, in particolare il trade-off tra soundness (capacità di individuare tutte le vulnerabilità di una data classe) e precision (capacità di evitare segnalazioni errate).
L'analisi statica (SAST) opera sul codice sorgente o sul bytecode senza eseguire l'applicazione, applicando tecniche di analisi del flusso di dati, analisi del flusso di controllo e taint analysis per tracciare la propagazione di input non fidati dalle sorgenti (sources) ai punti critici (sinks) [3, 5]. Formalmente, il problema si riduce alla verifica di proprietà di sicurezza su un'astrazione del programma: dato un programma $P$, un insieme di sorgenti $S$ e un insieme di sink $K$, lo strumento SAST verifica se esiste un cammino nel grafo del flusso di dati tale che un valore originato in $s \in S$ raggiunga $k \in K$ senza attraversare un'operazione di sanitizzazione valida. Questa formulazione è riconducibile al framework IFDS (Interprocedural, Finite, Distributive, Subset) per le analisi interprocedurali [5], che garantisce decidibilità e complessità polinomiale per proprietà distributive su domini finiti, ma richiede approssimazioni conservative per feature del linguaggio come la riflessione, il binding dinamico e la generazione di codice a runtime.
L'analisi dinamica (DAST) adotta la prospettiva opposta: interagisce con l'applicazione in esecuzione attraverso la sua interfaccia esterna, inviando input malformati o strutturati secondo pattern di attacco noti e osservando le risposte per identificare comportamenti anomali indicativi di vulnerabilità [6]. Non avendo accesso al codice sorgente, DAST opera come un attaccante esterno (black-box), e la sua copertura dipende dalla completezza del crawling e dalla qualità dei vettori di attacco generati.
L'analisi interattiva (IAST) combina le due prospettive attraverso un agente di instrumentazione inserito nel runtime dell'applicazione. L'agente osserva simultaneamente il traffico HTTP in ingresso e il flusso di esecuzione interno, correlando gli input esterni con i percorsi di codice effettivamente attraversati [7]. Questo approccio grey-box consente di determinare non solo se una vulnerabilità è presente, ma il percorso esatto attraverso cui l'input non fidato raggiunge il punto critico, riducendo drasticamente il tasso di falsi positivi rispetto a SAST e fornendo indicazioni precise per la remediation.
La Software Composition Analysis (SCA) opera su un piano distinto: analizza le dipendenze di terze parti (librerie open-source, framework, componenti) confrontandole con database di vulnerabilità note (CVE, NVD) e producendo un Software Bill of Materials (SBOM) che mappa la composizione del software in termini di componenti, versioni e licenze [8]. La SCA non cerca difetti nel codice proprietario, ma identifica il rischio ereditato dall'uso di componenti con vulnerabilità già documentate.
La tabella seguente sintetizza le proprietà fondamentali delle quattro metodologie:
| Proprietà | SAST | DAST | IAST | SCA |
|---|---|---|---|---|
| Artefatto analizzato | Codice sorgente / bytecode | Applicazione in esecuzione | Applicazione instrumentata | Manifesto dipendenze |
| Prospettiva | White-box | Black-box | Grey-box | Composizione |
| Fase SDLC | Sviluppo, build | Testing, staging | Testing, QA | Build, CI/CD |
| Classe di vulnerabilità | Injection, buffer overflow, difetti logici | Injection, XSS, misconfiguration | Injection, data flow, authentication | CVE note in dipendenze |
| Falsi positivi | Elevati (40-60% non calibrato) | Bassi | Molto bassi | Bassi (ma falsi positivi per reachability) |
| Copertura codice | Potenzialmente completa | Dipendente dal crawling | Dipendente dai test eseguiti | Completa sulle dipendenze dichiarate |
Static Application Security Testing (SAST)
Architettura e tecniche di analisi
Gli strumenti SAST implementano una pipeline di analisi composta da tre fasi: parsing del codice sorgente in una rappresentazione intermedia (AST, CFG, PDG), costruzione del modello del programma attraverso analisi interprocedurali, e verifica delle proprietà di sicurezza attraverso pattern matching o analisi del flusso di dati [3, 5]. La complessità e l'efficacia dell'analisi dipendono dalla profondità con cui il modello cattura il comportamento del programma.
La taint analysis rappresenta la tecnica fondamentale per la rilevazione di vulnerabilità injection. L'analisi traccia i dati dall'ingresso nel sistema (source) attraverso le trasformazioni applicate dal codice fino al punto di utilizzo critico (sink), verificando che ogni percorso attraversi un'operazione di sanitizzazione appropriata. Le implementazioni moderne distinguono tra analisi flow-sensitive (che rispettano l'ordine delle istruzioni), context-sensitive (che distinguono i diversi siti di chiamata di una funzione) e object-sensitive (che distinguono le diverse istanze di un oggetto) [5]. L'incremento di precisione ottenuto con ciascun livello di sensibilità comporta un costo computazionale crescente: l'analisi context-sensitive e object-sensitive per linguaggi con allocazione dinamica può raggiungere complessità esponenziale nel caso peggiore, motivando l'adozione di approssimazioni pratiche come il k-limiting per la profondità del contesto di chiamata.
Evidenze empiriche: efficacia e falsi positivi
La valutazione empirica degli strumenti SAST ha prodotto risultati che evidenziano tanto le potenzialità quanto i limiti intrinseci dell'approccio. Il report SATE V del NIST, che ha analizzato le prestazioni di strumenti commerciali e open-source su codebase C/C++ e Java di dimensioni realistiche, ha documentato tassi di falsi positivi compresi tra il 3% e il 48% a seconda dello strumento e della categoria di vulnerabilità [4]. Studi più recenti condotti sull'OWASP Benchmark, un'applicazione Java contenente 2.740 casi di test con vulnerabilità note e falsi positivi noti, hanno evidenziato una variabilità ancora maggiore: strumenti non calibrati producono tassi di falsi positivi nell'intervallo 40-60%, che si riducono al 10-20% con configurazione specifica per il progetto [9, 10].
Uno studio comparativo del 2025 presentato alla International Conference on Evaluation and Assessment in Software Engineering (EASE) ha valutato l'efficacia di strumenti SAST commerciali e open-source in termini di detection rate, usabilità dei report e copertura per categoria di vulnerabilità [10]. I risultati confermano che la capacità di rilevazione varia significativamente tra le categorie CWE: le vulnerabilità injection (SQL injection, command injection, LDAP injection) vengono rilevate con tassi superiori all'80%, mentre le vulnerabilità logiche (broken access control, business logic flaws) presentano tassi di rilevazione inferiori al 30%, confermando un limite strutturale dell'analisi statica per difetti che richiedono la comprensione della semantica applicativa [10].
Un contributo recente alla riduzione dei falsi positivi proviene dall'applicazione di modelli di machine learning per la classificazione post-analisi. Feng et al. [11] hanno proposto FP-Predictor, un sistema che utilizza feature estratte dai report SAST per predire la probabilità che una segnalazione sia un falso positivo, ottenendo una riduzione del 40-60% dei falsi positivi senza degradazione significativa del tasso di rilevazione dei veri positivi. Questo approccio evidenzia una direzione promettente in cui l'analisi statica tradizionale viene augmentata da modelli predittivi per migliorare la precision senza sacrificare il recall.
Limiti strutturali
I limiti dell'analisi statica derivano dalla teoria della computabilità: il teorema di Rice implica che qualsiasi proprietà non triviale del comportamento di un programma è indecidibile nel caso generale, e gli strumenti SAST operano necessariamente su approssimazioni. Tre categorie di limiti sono particolarmente rilevanti nella pratica. La prima riguarda il codice dinamico: riflessione, eval, generazione di codice a runtime e pattern di metaprogrammazione interrompono il flusso di dati visibile allo strumento, causando falsi negativi. La seconda riguarda la configurazione: vulnerabilità che dipendono dalla configurazione dell'ambiente di deploy (permessi del file system, header HTTP, configurazione TLS) non sono rilevabili dall'analisi del solo codice sorgente. La terza riguarda la semantica applicativa: difetti nella logica di business (ad esempio, un processo di approvazione che consente di saltare uno step di autorizzazione) richiedono la comprensione del dominio applicativo, che nessuno strumento SAST è in grado di inferire automaticamente dal codice.
Dynamic Application Security Testing (DAST)
Meccanismo operativo
Gli strumenti DAST operano come scanner automatizzati che interagiscono con un'applicazione in esecuzione attraverso la sua interfaccia esterna, tipicamente HTTP/HTTPS per applicazioni web. Il processo si articola in due fasi: crawling dell'applicazione per costruire una mappa delle superfici di attacco (URL, form, parametri, header) e fuzzing sistematico con payload progettati per provocare comportamenti indicativi di vulnerabilità [6, 12].
Il crawling moderno deve gestire applicazioni single-page (SPA) con routing client-side, contenuto generato dinamicamente da framework JavaScript, e flussi di interazione multi-step con gestione dello stato (autenticazione, sessioni, workflow). La qualità del crawling determina la copertura dell'analisi: una superficie di attacco non raggiunta dal crawler non viene testata. Gli strumenti più avanzati implementano crawler basati su browser headless che eseguono il rendering completo dell'applicazione e simulano interazioni utente per esplorare gli stati raggiungibili [6, 12].
La fase di fuzzing genera varianti dei parametri di input secondo pattern di attacco noti (injection SQL, XSS, path traversal, command injection) e analizza le risposte per identificare indicatori di vulnerabilità: messaggi di errore del database, riflessione di payload nello HTML, ritardi temporali indicativi di blind injection, o codici di risposta HTTP anomali. A differenza dell'analisi statica, DAST verifica la presenza di vulnerabilità effettivamente sfruttabili nell'ambiente di deploy, includendo la configurazione del server, del framework e dei middleware.
Valutazione empirica
Uno studio comparativo del 2024 ha condotto un benchmarking sistematico di strumenti DAST su applicazioni di riferimento con vulnerabilità note, misurando il True Positive Rate (TPR) e il False Positive Rate (FPR) per categoria di vulnerabilità [12]. I risultati indicano che gli strumenti DAST raggiungono tassi di rilevazione elevati per le vulnerabilità injection classiche (SQL injection riflessa: TPR 70-90%) e Cross-Site Scripting riflesso (TPR 60-85%), ma presentano tassi significativamente inferiori per vulnerabilità stored (XSS stored: TPR 20-40%) e per difetti nella logica di autenticazione e autorizzazione [12].
L'OWASP Benchmark fornisce un framework standardizzato per la valutazione comparativa: i risultati pubblicati mostrano che gli strumenti DAST, nel complesso, rilevano una percentuale significativamente inferiore di vulnerabilità rispetto agli strumenti SAST, confermando che l'approccio black-box è intrinsecamente limitato dalla sua incapacità di osservare i percorsi di codice interni [9]. Tuttavia, i falsi positivi sono generalmente inferiori, poiché ogni vulnerabilità segnalata corrisponde a un comportamento effettivamente osservato nell'applicazione in esecuzione.
Limiti e complementarietà con SAST
Il limite principale di DAST è la dipendenza dalla copertura del crawling. Le vulnerabilità raggiungibili solo attraverso sequenze di interazione complesse, flussi condizionali rari o funzionalità protette da autenticazione multi-fattore possono non essere raggiunte dallo scanner automatizzato. Inoltre, DAST opera tipicamente in ambienti di staging o pre-produzione, introducendo un ritardo nel feedback loop rispetto all'analisi statica che opera direttamente sul codice sorgente durante lo sviluppo.
Questa complementarietà è supportata dalle evidenze empiriche: Nunes et al. [6] hanno dimostrato che la combinazione di SAST e DAST su applicazioni web Java individua un insieme di vulnerabilità significativamente più ampio rispetto a ciascuno strumento singolarmente, con un overlap tra le due tecniche inferiore al 30%, a conferma che le due metodologie intercettano classi di difetti sostanzialmente distinte.
Interactive Application Security Testing (IAST)
Architettura ad agente
L'approccio IAST supera la dicotomia SAST/DAST attraverso l'inserimento di un agente di instrumentazione direttamente nel runtime dell'applicazione. L'agente opera a livello della virtual machine (JVM per applicazioni Java, CLR per .NET, runtime V8 per Node.js) e intercetta le invocazioni di metodo, il flusso dei dati attraverso le classi dell'applicazione e le interazioni con risorse esterne (database, file system, rete) [7, 13].
Il meccanismo centrale è la taint analysis dinamica: l'agente marca i dati provenienti da sorgenti esterne (parametri HTTP, header, cookie, input da database) e ne traccia la propagazione attraverso le operazioni dell'applicazione in tempo reale. Quando un dato marcato raggiunge un sink critico (una query SQL, un'operazione di rendering HTML, una chiamata di sistema) senza essere stato sanitizzato, l'agente genera una segnalazione che include il request HTTP originale, il percorso completo del flusso di dati attraverso il codice sorgente (con file, classe, metodo e numero di riga), e la natura specifica della vulnerabilità [7, 13].
Questa architettura consente un livello di precisione irraggiungibile sia da SAST (che opera su approssimazioni del comportamento runtime) sia da DAST (che non ha visibilità sul codice interno). Il tasso di falsi positivi riportato in letteratura per gli strumenti IAST è significativamente inferiore rispetto a SAST, tipicamente nell'ordine del 2-5%, poiché ogni segnalazione corrisponde a un flusso di dati effettivamente osservato durante l'esecuzione [7, 13].
Modalità operative
Gli strumenti IAST operano in due modalità principali: passiva e attiva. Nella modalità passiva, l'agente osserva il traffico generato dalle normali attività di testing (test funzionali, test di integrazione, QA manuale) senza iniettare traffico aggiuntivo, identificando vulnerabilità nei flussi di esecuzione già percorsi. Nella modalità attiva, l'agente genera autonomamente varianti degli input osservati per esplorare percorsi di esecuzione aggiuntivi, combinando l'instrumentazione interna con una componente di fuzzing mirato [7].
La modalità passiva è particolarmente vantaggiosa in contesti DevSecOps poiché non richiede una fase di testing dedicata alla sicurezza: è sufficiente che l'agente sia attivo durante l'esecuzione della suite di test funzionali esistente per ottenere una valutazione di sicurezza contestuale. Questo modello operativo riduce il friction nell'adozione, poiché il testing di sicurezza avviene come sottoprodotto delle attività di QA già pianificate.
Limiti dell'approccio
Il limite strutturale di IAST è la dipendenza dalla copertura dei test: solo i percorsi di codice effettivamente eseguiti durante la sessione di testing vengono analizzati. Se una funzionalità vulnerabile non è coperta dai test funzionali, l'agente IAST non la rileva. Inoltre, l'instrumentazione introduce un overhead sulle prestazioni dell'applicazione (tipicamente nell'ordine del 2-5% di latenza aggiuntiva) che, sebbene accettabile in ambienti di testing, ne preclude l'uso in produzione per la maggior parte delle applicazioni [7]. Infine, la disponibilità di agenti IAST è limitata ai runtime supportati: Java (JVM), .NET (CLR) e Node.js dispongono di strumenti maturi, mentre il supporto per linguaggi come Go, Rust o Python è significativamente meno sviluppato.
Software Composition Analysis (SCA) e supply chain security
La dimensione del problema
La composizione del software moderno è dominata da componenti open-source: secondo il report OSSRA 2024 di Synopsys, basato sull'audit di oltre 1.000 codebase commerciali, l'84% dei codebase contiene almeno una vulnerabilità open-source nota, e il 74% contiene vulnerabilità classificate come high-risk, un incremento del 54% rispetto all'anno precedente [8]. Il report OSSRA 2026, l'edizione più recente, ha documentato un ulteriore deterioramento: l'87% dei codebase auditati presenta almeno una vulnerabilità, con una media di 581 vulnerabilità per codebase, un incremento del 107% [8].
La minaccia non si limita alle vulnerabilità accidentali. Il report State of the Software Supply Chain 2024 di Sonatype ha registrato un incremento del 156% nel numero di pacchetti malevoli rispetto all'anno precedente, raggiungendo oltre 704.000 pacchetti malevoli identificati complessivamente [14]. Episodi come la compromissione della libreria XZ Utils, in cui un attaccante ha operato per anni sotto copertura per inserire una backdoor in una componente critica presente nella quasi totalità dei server Linux, dimostrano che gli attacchi alla supply chain software sono condotti da attori sofisticati e dotati di risorse significative [14].
Meccanismo di funzionamento della SCA
Gli strumenti SCA operano analizzando i manifesti delle dipendenze del progetto (package.json, pom.xml, requirements.txt, Gemfile.lock, go.sum) per costruire un grafo completo delle dipendenze, includendo le dipendenze transitive che rappresentano tipicamente il 70-90% delle componenti totali. Il grafo viene confrontato con database di vulnerabilità note (principalmente il National Vulnerability Database, NVD, e database curati dai vendor) per identificare componenti con CVE associate [8, 15].
Un concetto centrale nella SCA moderna è il Software Bill of Materials (SBOM), un inventario strutturato di tutte le componenti software, le loro versioni, licenze e relazioni di dipendenza. L'Executive Order on Improving the Nation's Cybersecurity emanato dalla Casa Bianca nel 2021 ha reso l'SBOM un requisito per i contratti software con il governo federale statunitense, accelerando l'adozione di formati standardizzati come SPDX (ISO/IEC 5962:2021) e CycloneDX [15]. L'SBOM non è solo uno strumento di compliance: consente la risposta rapida alle vulnerabilità zero-day, poiché permette di determinare in minuti, anziché giorni o settimane, quali applicazioni sono affette quando viene pubblicata una nuova CVE.
Reachability analysis: oltre il vulnerability matching
Il limite principale del vulnerability matching basato su versione è il tasso elevato di falsi positivi: una dipendenza può contenere una vulnerabilità nota in una funzione che l'applicazione non utilizza mai. La reachability analysis affronta questo problema analizzando il call graph dell'applicazione per determinare se il codice vulnerabile nella dipendenza è effettivamente raggiungibile dai percorsi di esecuzione dell'applicazione [15]. Strumenti SCA di nuova generazione integrano l'analisi statica del call graph con informazioni di runtime per produrre una valutazione del rischio che distingue tra vulnerabilità teoriche (presenti nella dipendenza ma non raggiungibili) e vulnerabilità operative (raggiungibili e potenzialmente sfruttabili).
Il framework OWASP: standard, modelli di maturità e benchmark
OWASP Top 10: evoluzione e impatto operativo
La OWASP Top 10 rappresenta il riferimento de facto per la prioritizzazione delle vulnerabilità applicative. L'edizione 2025, basata sull'analisi di dati empirici provenienti da centinaia di organizzazioni e integrata con un survey della comunità per catturare rischi emergenti non ancora rappresentati nei dati di testing, introduce cambiamenti significativi nella tassonomia [2]. La promozione della supply chain security a categoria autonoma (A03: Software Supply Chain Failures) riflette l'evidenza empirica discussa nella sezione precedente sulla crescita degli attacchi alla catena di fornitura. L'introduzione di "Mishandling of Exceptional Conditions" (A10) riconosce una classe di vulnerabilità sistematicamente sottovalutata: la gestione inadeguata delle eccezioni come vettore di information disclosure, denial of service e bypass dei controlli di sicurezza [2].
L'impatto operativo della OWASP Top 10 si estende oltre la semplice consapevolezza: gli strumenti SAST e DAST utilizzano le categorie OWASP come framework di classificazione per le vulnerabilità rilevate, e le policy aziendali di sicurezza definiscono frequentemente i requisiti minimi in termini di copertura delle categorie OWASP. L'OWASP Benchmark Project fornisce un meccanismo di verifica oggettiva: un'applicazione Java contenente 2.740 casi di test (metà vulnerabilità reali, metà falsi allarmi) contro cui gli strumenti SAST, DAST e IAST possono essere valutati con metriche standardizzate di True Positive Rate e False Positive Rate [9].
OWASP ASVS: requisiti di verifica
L'Application Security Verification Standard (ASVS), giunto alla versione 5.0 rilasciata nel maggio 2025, definisce circa 350 requisiti di sicurezza organizzati in 17 capitoli e tre livelli di verifica progressivi [16]. A differenza della Top 10, che identifica le categorie di rischio più critiche, l'ASVS fornisce una checklist operativa per la verifica sistematica della sicurezza applicativa. Il livello 1 (opportunistico) è verificabile attraverso strumenti automatizzati (SAST, DAST); il livello 2 (standard) richiede la combinazione di strumenti automatizzati e revisione manuale; il livello 3 (avanzato) richiede analisi architetturale, threat modeling e penetration testing approfondito [16]. Questa stratificazione consente alle organizzazioni di calibrare lo sforzo di verifica in funzione del profilo di rischio dell'applicazione.
OWASP SAMM: il modello di maturità
Il Software Assurance Maturity Model (SAMM) fornisce un framework per la valutazione e il miglioramento progressivo delle pratiche di sicurezza software all'interno di un'organizzazione [17]. Strutturato in cinque funzioni di business (Governance, Design, Implementation, Verification, Operations), 15 pratiche di sicurezza e 30 stream, ciascuno con livelli di maturità da 0 a 3, SAMM posiziona il security testing come una componente della funzione Verification, integrata con la revisione dei requisiti e l'architettura sicura [17]. Il valore di SAMM risiede nella prospettiva organizzativa: non si limita a prescrivere strumenti, ma definisce un percorso di miglioramento che integra processi, competenze e tecnologie, consentendo alle organizzazioni di misurare il proprio progresso nel tempo attraverso assessment ripetibili.
Integrazione nel ciclo di sviluppo: architetture DevSecOps
Il paradigma shift-left
L'integrazione delle metodologie di security testing nel ciclo di sviluppo software si è evoluta dal modello tradizionale, in cui la verifica di sicurezza avveniva come fase terminale prima del rilascio, al paradigma DevSecOps, che distribuisce i controlli di sicurezza lungo l'intero ciclo di vita [18]. Il principio operativo è lo shift-left: spostare la rilevazione delle vulnerabilità il più a monte possibile nel processo, dove il costo di remediation è minimo. Uno studio empirico frequentemente citato stima che il costo di correzione di una vulnerabilità scoperta in produzione sia 30-100 volte superiore rispetto alla scoperta durante la fase di sviluppo [1].
Architettura della pipeline
Una pipeline DevSecOps matura integra le quattro metodologie in punti specifici del workflow CI/CD:
Sviluppo Build Test Staging Produzione
| | | | |
[SAST] [SCA] [IAST] [DAST] [Monitoraggio]
IDE plugin Dipendenze Agent runtime Scanner RASP / WAF
Pre-commit SBOM gen. Test funzionali Crawl + fuzz Runtime defense
Fase di sviluppo (SAST): L'analisi statica opera sul codice sorgente direttamente nell'IDE dello sviluppatore e nei hook pre-commit del sistema di version control. L'obiettivo è il feedback immediato: lo sviluppatore riceve la segnalazione nel contesto del codice che sta scrivendo, minimizzando il costo cognitivo della correzione. Strumenti come SonarQube, Semgrep e Checkmarx offrono integrazioni native con i principali IDE e piattaforme CI [10].
Fase di build (SCA): L'analisi delle dipendenze viene eseguita durante il processo di build, verificando le dipendenze dirette e transitive contro i database di vulnerabilità e generando l'SBOM. Policy automatizzate possono bloccare il build se vengono rilevate dipendenze con vulnerabilità critiche o licenze incompatibili [8, 15].
Fase di test (IAST): L'agente IAST viene attivato durante l'esecuzione della suite di test funzionali e di integrazione, analizzando i flussi di dati reali dell'applicazione senza richiedere test di sicurezza dedicati [7, 13].
Fase di staging (DAST): Lo scanner DAST viene eseguito sull'applicazione deployata in ambiente di staging, testando la superficie di attacco esposta nella configurazione reale di deploy. Questa fase cattura vulnerabilità dipendenti dalla configurazione dell'ambiente che non sono rilevabili nelle fasi precedenti [6, 12].
Orchestrazione e gestione dei risultati
L'integrazione di quattro metodologie complementari genera un volume di segnalazioni che richiede una strategia di gestione strutturata. Le piattaforme ASOC (Application Security Orchestration and Correlation) aggregano i risultati dei diversi strumenti, de-duplicano le segnalazioni che si riferiscono alla stessa vulnerabilità rilevata da strumenti diversi, assegnano priorità basate sul rischio (combinando severità della vulnerabilità, esposizione dell'applicazione e reachability) e tracciano il ciclo di vita della remediation [18]. Senza questa correlazione, i team di sviluppo ricevono centinaia o migliaia di segnalazioni non prioritizzate, generando alert fatigue e paradossalmente riducendo l'efficacia del programma di sicurezza.
Limiti, problemi aperti e direzioni future
Il gap di copertura
Nonostante la complementarietà delle quattro metodologie, categorie significative di vulnerabilità rimangono al di fuori della loro portata combinata. Le vulnerabilità nella logica di business, ad esempio un workflow di e-commerce che consente di applicare un codice sconto più volte o di modificare il prezzo di un prodotto manipolando un parametro nascosto, richiedono la comprensione della semantica del dominio applicativo e non sono rilevabili da nessuno strumento automatizzato [6, 10]. Le vulnerabilità architetturali (assenza di rate limiting, design inadeguato della gestione delle sessioni, mancanza di isolamento tra tenant in applicazioni multi-tenant) richiedono threat modeling manuale e revisione architetturale. Le vulnerabilità nelle API non documentate, nei canali di comunicazione machine-to-machine e nelle interazioni tra microservizi rappresentano superfici di attacco crescenti che gli strumenti tradizionali faticano a coprire.
Scalabilità e costo computazionale
L'esecuzione di analisi SAST context-sensitive e object-sensitive su codebase di milioni di righe di codice richiede tempi nell'ordine delle ore, limitandone l'applicabilità come gate bloccante nella pipeline CI/CD. Le strategie di mitigazione includono l'analisi incrementale (che analizza solo i file modificati rispetto al commit precedente), la configurazione selettiva delle regole (attivando solo le regole rilevanti per il linguaggio e il framework in uso) e l'esecuzione parallela distribuita [4, 10]. Tuttavia, l'analisi incrementale può perdere vulnerabilità che emergono dall'interazione tra moduli modificati e non modificati, e la riduzione del set di regole sacrifica potenzialmente la copertura.
Applicazione ai paradigmi emergenti
L'ascesa delle applicazioni basate su modelli di linguaggio (LLM), dei sistemi agentici e delle architetture serverless introduce classi di vulnerabilità per cui gli strumenti AST esistenti non sono progettati. Il prompt injection, ovvero l'inserimento di istruzioni malevole nell'input processato da un LLM, non è rilevabile attraverso la taint analysis tradizionale poiché il "sink" non è una query SQL o una chiamata di sistema, ma un'interfaccia di inferenza il cui comportamento non è determinato dal codice dell'applicazione ma dai pesi del modello [2]. L'OWASP Top 10 for Large Language Model Applications, pubblicato come progetto parallelo, rappresenta un primo tentativo di sistematizzazione di queste minacce, ma gli strumenti di testing automatizzato sono ancora in fase embrionale.
Direzioni della ricerca
Tre direzioni emergono dalla letteratura recente. La prima è l'integrazione di modelli di machine learning negli strumenti SAST per la riduzione dei falsi positivi e la prioritizzazione intelligente, come evidenziato dal lavoro su FP-Predictor [11] e dai benchmark per la valutazione di sistemi di triage agentici [10]. La seconda è l'evoluzione della SCA verso l'analisi runtime delle dipendenze, che monitora non solo le versioni dichiarate ma le funzioni effettivamente invocate in produzione, riducendo i falsi positivi della reachability analysis statica. La terza è lo sviluppo di strumenti di testing specifici per le vulnerabilità emergenti nei sistemi basati su intelligenza artificiale, un'area in cui la distanza tra la sofisticazione delle minacce e la maturità degli strumenti di difesa è ancora significativa.
Riferimenti
[1] G. McGraw, "Software Security: Building Security In," Addison-Wesley Professional, 2006.
[2] OWASP Foundation, "OWASP Top 10:2025 Introduction," 2025. https://owasp.org/Top10/2025/0x00_2025-Introduction/
[3] P. E. Black et al., "Source Code Security Analysis Tool Functional Specification Version 1.1," NIST Special Publication 500-268 v1.1, 2011. https://www.nist.gov/system/files/documents/2021/03/23/source_code_security_analysis_spec_SP500-268_v1.1.pdf
[4] V. Okun, A. Delaitre, P. E. Black, "SATE V Report: Ten Years of Static Analysis Tool Expositions," NIST Special Publication 500-326, 2018. https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.500-326.pdf
[5] T. Reps, S. Horwitz, M. Sagiv, "Precise Interprocedural Dataflow Analysis via Graph Reachability," in Proc. ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL), 1995. https://doi.org/10.1145/199448.199462
[6] P. Nunes, I. Medeiros, J. Fonseca, N. Neves, M. Correia, M. Vieira, "On Combining Static, Dynamic and Interactive Analysis Security Testing Tools to Improve OWASP Top Ten Security Vulnerability Detection in Web Applications," Applied Sciences, vol. 10, no. 24, 2020. https://www.mdpi.com/2076-3417/10/24/9119
[7] Black Duck (Synopsys), "What Is IAST and How Does It Work?," 2024. https://www.blackduck.com/glossary/what-is-iast.html
[8] Synopsys, "2024 Open Source Security and Risk Analysis (OSSRA) Report," 2024. https://www.synopsys.com/software-integrity/resources/analyst-reports/open-source-security-risk-analysis.html
[9] OWASP Foundation, "OWASP Benchmark Project," 2024. https://owasp.org/www-project-benchmark/
[10] S. Kaplan et al., "Evaluating the Effectiveness of SAST Tools: A Comparative Study on Vulnerability Detection, Reporting, and Usability," in Proc. 29th International Conference on Evaluation and Assessment in Software Engineering (EASE), 2025. https://dl.acm.org/doi/10.1145/3727967.3756836
[11] L. Feng et al., "FP-Predictor: False Positive Prediction for Static Analysis Reports," arXiv:2603.10558, 2026. https://arxiv.org/abs/2603.10558
[12] A. Alsaleh, M. Alqahtani, "A Comparative Analysis and Benchmarking of Dynamic Application Security Testing (DAST) Tools," 2024. https://www.researchgate.net/publication/385500967
[13] Contrast Security, "Interactive Application Security Testing (IAST)," 2024. https://www.contrastsecurity.com/glossary/interactive-application-security-testing
[14] Sonatype, "10th Annual State of the Software Supply Chain Report," 2024. https://www.sonatype.com/state-of-the-software-supply-chain/2024/10-year-look
[15] OWASP Foundation, "Component Analysis," 2024. https://owasp.org/www-community/Component_Analysis
[16] OWASP Foundation, "OWASP Application Security Verification Standard (ASVS) v5.0," 2025. https://owasp.org/www-project-application-security-verification-standard/
[17] OWASP Foundation, "OWASP SAMM: Software Assurance Maturity Model," 2024. https://owaspsamm.org/
[18] AWS DevOps Blog, "Building End-to-End AWS DevSecOps CI/CD Pipeline with Open Source SCA, SAST and DAST Tools," 2024. https://aws.amazon.com/blogs/devops/building-end-to-end-aws-devsecops-ci-cd-pipeline-with-open-source-sca-sast-and-dast-tools/