Di Tomasz Andrzej Nidecki, Acunetix Technical Content Writer – 30 Luglio 2019

 

Analisi del codice

 

Esistono due approcci principali per l’analisi della sicurezza delle applicazioni Web: analisi dinamica del programma (DAST), noto anche come black-box test e analisi del codice statico (test di sicurezza statica dell’applicazione – SAST), noto anche come white-box test. Entrambi gli approcci hanno i loro vantaggi e svantaggi e uno non può essere visto come un sostituto per l’altro. Pertanto, ti consigliamo di utilizzare entrambe le tecniche per rafforzare le tue applicazioni web. Tuttavia, se disponi di risorse limitate e non puoi permetterle entrambe, l’analisi dinamica del programma viene spesso percepita come una soluzione migliore.

Analisi del codice statico

Gli analizzatori di codice statico eseguono la scansione del codice sorgente dell’applicazione Web e vengono utilizzati come parte del processo di revisione del codice. Non tengono conto dell’ambiente operativo, del server Web o del contenuto del database. D’altra parte, gli strumenti di analisi statica hanno pieno accesso al codice, quindi coprono frammenti di codice nascosti / non collegati (ad esempio, nuovo codice che è in fase di sviluppo ma non ancora utilizzato) e possono individuare la riga esatta del codice problematico. Coprono anche tutti i possibili percorsi di esecuzione, contemporaneamente.

Ad esempio, se si utilizza una soluzione di analisi del codice statico per analizzare il codice per Iniezioni SQL , lo strumento esegue la scansione del codice sorgente per tutte le funzioni che interrogano il database. Verifica quindi se queste funzioni accedono al database in modo sicuro. In caso contrario, fornisce la posizione esatta dell’errore, ad esempio la pagina e la riga in cui lo sviluppatore ha utilizzato l’input dell’utente direttamente nella query. D’altra parte, se si desidera testare l’applicazione Web per password deboli, un analizzatore statico sarebbe inutile. Non sarebbe inoltre in grado di coprire i problemi di sicurezza causati, ad esempio, da un’errata configurazione di Apache o da problemi relativi ai flussi di dati.

L’altro grande svantaggio degli strumenti di analisi del codice statico è la loro piena dipendenza dal linguaggio di programmazione. Se si seleziona uno strumento di analisi del codice sorgente per la propria attività e si decide di scrivere alcune applicazioni in un linguaggio diverso, potrebbe essere necessario acquistare uno strumento SAST aggiuntivo. Mentre sul mercato ci sono diversi strumenti multilinguaggio, questi si concentrano principalmente su PHP, Java e JavaScript. Pochi di essi coprono più linguaggi esotici contemporaneamente, ad esempio Python, Objective-C, Scala, Swift, ColdFusion o linguaggi legacy come COBOL.

Analisi dinamica del programma

Nel caso dell’analisi dinamica, lo strumento non necessita affatto dell’accesso al codice sorgente. Uno strumento DAST simula un utente finale e ha accesso esattamente alle stesse che questo avrebbe. Analizza la sicurezza delle applicazioni Web a runtime utilizzando richieste HTTP, collegamenti, moduli, ecc. Ciò significa che uno strumento DAST è completamente indipendente dai linguaggi di programmazione utilizzati dalle applicazioni e deve solo supportare le tecnologie lato client. Tuttavia, può solo analizzare le parti accessibili all’utente.

Ad esempio, quando si esegue la scansione di un’applicazione Web per iniezioni SQL utilizzando l’analisi dinamica, lo strumento si comporta come un penetration tester automatizzato. Immette i dati nei moduli Web e crea richieste non valide per tentare di sfruttare l’applicazione. Quando ha successo, ti mostra come è stato fatto. Il rovescio della medaglia è che non può mostrarti l’esatta riga di codice che ha causato la vulnerabilità della sicurezza, quindi uno sviluppatore potrebbe aver bisogno di più tempo per trovare l’errore. Se uno strumento di analisi dinamica non viene creato utilizzando tecnologie efficienti, potrebbe essergli necessario del tempo per funzionare perché deve analizzare più percorsi di esecuzione. Inoltre non ti aiuterà in alcun modo con gli standard di codifica e la qualità del codice in generale.

Il problema dei falsi positivi

Gli strumenti di analisi dinamica all’avanguardia sono riusciti a trovare modi per ridurre notevolmente i loro falsi positivi. Sfortunatamente, gli strumenti di analisi del codice statico presentano ancora questo problema. Alcuni dei principali strumenti SAST affermano che il loro tasso di falsi positivi è di circa il 5 percento. Questo è un tasso molto alto rispetto ai migliori strumenti DAST.

In superficie, i falsi positivi potrebbero non sembrare così importanti. Tuttavia, introducono due grandi problemi. Innanzitutto, l’analisi di falsi positivi richiede molto più tempo del team di sviluppo rispetto all’analisi di errori reali. Questo perché lo sviluppatore deve trovare modi per dimostrare che il codice è sicuro e deve assumersi la responsabilità di decidere contro lo strumento. Pertanto, alcuni sviluppatori ricorrono persino a modificare il proprio codice solo per evitare falsi positivi. Dopo tali modifiche, il codice potrebbe diventare meno efficiente o meno leggibile.

Il secondo problema principale è che uno strumento che segnala molti falsi positivi fa perdere all’utente la fiducia nello strumento. Con il tempo, gli utenti iniziano a ignorare gli avvisi di vulnerabilità o semplicemente smettono di utilizzare completamente lo scanner difettoso.

Se non puoi avere entrambi

Se non vuoi investire in strumenti SAST per tutte i tuoi linguaggi e decidi di utilizzare solo uno strumento DAST, hai un’altra opzione da considerare. Gli scanner dinamici di livello aziendale utilizzano meccanismi aggiuntivi che non sono esattamente un’analisi del codice statico ma che si avvicinano ad esso. Questa tecnologia viene spesso chiamata test interattivo di sicurezza delle applicazioni (IAST) o gray-box test. Ad esempio, Acunetix utilizza la tecnologia AcuSensor che intercetta le chiamate al codice sorgente o al bytecode (a seconda della lingua). Ciò consente di accedere a funzioni nascoste e fornisce maggiori dettagli sulla posizione della vulnerabilità nel codice sorgente.