Fortify SCA overview
Fortify SCA, per chi non lo conoscesse, è un cosiddetto Static Code Analyzer, o anche Source Code Analyzer. E' uno strumento professionale, dal costo non proprio abbordabile, che può essere utilizzato in analisi di sicurezza sul codice sorgente di applicazioni grandi e complesse.
Il software in questione analizza il codice sorgente creando una rappresentazione intermedia utile per le analisi di sicurezza. Come i normali compilatori creano gli alberi astratti della sintassi, che servono per effettuare l'analisi della semantica e poi la conversione in codice macchina, la rappresentazione astratta e intermedia di Fortify serve principalmente a ricondurre diversi linguaggi di programmazione alla stessa rappresentazione, appunto astratta.
Fortify permette di analizzare codice sorgente di diversi linguaggi come Java, C, C++, PHP ed altri. E' composto sostanzialmente da un motore di analisi (eseguibile anche in CLI) coadiuvato da una GUI chiamata "Audit Workbench" e realizzata attraverso la piattaforma Eclipse RCP. Poi vi sono a corredo prodotti di reporting, di raccolta dei diversi report in rete, di analisi remota delle analisi condotte in rete, e tutto quello che necessita ad una applicazione del genere per essere utilizzata a livello "enterprise". Insomma tutto quello che serve per assolvere le diverse fasi del Ciclo di Vita Sicuro del Software (ricordate?).
Vediamo quindi di osservare più da vicino l'Audit Workbench, che tipicamente verrà utilizzato dall'esperto di sicurezza del software in una analisi di un codice sorgente complesso.
L'analisi
Iniziamo col dire che l'interfaccia utente non è delle migliori. Si vede "troppo" Eclipse RCP e l'usabilità non è il massimo: da un prodotto che costa circa 20.000€ ci si aspetterebbe di più, anche come GUI.
Però noi siamo rudi Security Man e della GUI spesso ce ne disinteressiamo (qui si potrebbero fare diverse considerazioni su quanto una GUI usabile e comprensibile aumenti il livello di sicurezza...) e quindi cominciamo a dare in pasto a Fortify SCA il codice sorgente da analizzare.
Ma prima dobbiamo aggiornare le regole nel DB di Fortify SCA: procedura manuale e fuori dalla UI che si rende necessaria per un'analisi accurata e aggiornata. Ok, adesso siamo davvero pronti per scansionare il nostro codice, prendendo per esempio un portale in PHP come Joomla o Mambo. Diamo in pasto a SCA il portale suddetto e dopo un tempo considerevole (ricordate gli alberi astratti), non è improbabile veder campeggiare un bell'errore di overflow della memoria. Niente paura, la configurazione di SCA per la vostra JVM richiede più memoria; basta aumentarla (ma per capire dove agire dovrete spulciare i manuali) e non dovreste avere più questo errore.
Alla fine dell'analisi si apre in tutto lo splendore la Eclipse-like-interface dell'Audit Workbench di SCA. La parte centrale, in alto, offre una serie di statistiche dal sapore un po' commerciale, che non ritengo molto utili. Ma è pur sempre una questione di gusti!
Nel menù di sinistra invece campeggiano le vulnerabilità rilevate da SCA differenziate per gradi: Hot,Warning, Info, All. La classificazione delle vulnerabilità utilizzata è configurabile e potete scegliere se raggrupparle secondo la OWASP Top Ten 2004 o 2007, i Seven Pernicious Kingdom oppure se creare una nuova classificazione basata su quelle esistenti. Insomma è altamente configurabile, in modo che possiate adattare l'analisi al contesto di classificazione che vi è più congeniale.

Scegliendo una delle potenziali vulnerabilità segnalate, nel pannello centrale comparirà la porzione di codice sorgente incriminata con: la riga di codice vulnerabile con il digramma di flusso che esplica il motivo per cui SCA ha considerato vulnerabile tale riga; un breve summary sulla vulnerabilità; dei suggerimenti su come ovviare a tale vulnerabilità ed infine un pannello per classificare la vulnerabilità.
Tipicamente quello che si fa è analizzare il diagramma di flusso, dare un'occhiata più o meno estesa al codice sorgente, leggere la spiegazione della vulnerabilità e se serve le raccomandazioni su come risolverla. Poi infine si classifica la presunta vulnerabilità, oppure la si lascia per una seconda fase (classificandola al momento con "unknown").
Ma perché classificare le vulnerabilità?
Perché stiamo conducendo un Audit di sicurezza su del codice sorgente e le vulnerabilità segnalate da SCA sono in realtà delle potenziali vulnerabilità. Toccherà a noi decidere se sono o meno dei "falsi positivi", oppure se necessitano di ulteriori analisi. Tutto questo viene tracciato in modo da fornire poi nel report finale tutta l'attività anche cronologica che hanno portato ad una certa classificazione.
Si comprende quindi che il lavoro di analisi è lungo e richiede estrema attenzione ed esperienza anche da sviluppatore. Con cicli e ricicli che avvengono in un intervallo di tempo anche di mesi. Insomma un prodotto da vivere con passione e fatica!
Ma attenzione perché SCA, ovviamente, non potrà mai segnalare i cosiddetti "falsi negativi". Se esiste un falso negativo questo è tale, proprio perché non è evidenziato dall'analisi di sicurezza. Purtroppo i falsi negativi sono unicamente a carico di un'analisi manuale.
Le conclusioni
SCA è un prodotto che aiuta sicuramente in una prima fase di scrematura perché permette di identificare le vere vulnerabilità ed eliminare invece tutti i falsi positivi. Tutto questo in modo documentato e tracciato. Ovviamente però l'aiuto che dà nel caso di falsi negativi è invece minimo. Quest'ultimo tipo di analisi è infatti totalmente a carico dell'auditor e non potrebbe essere altrimenti. Guai a pensare che analizzatori statici di codice sorgente esauriscano l'analisi con le loro segnalazioni. Aiutano, ma non risolvono di certo il problema da soli.
Un prodotto complesso e utile, ma alla fine del lavoro la domanda che ci si pone è: ma senza SCA ci avremmo messo davvero più tempo?
Le note dolenti
Fortify SCA, per quanto raffinato, ha dei tempi di esecuzione elevati, un tuning non facile e un numero di falsi positivi spesso eccessivo. Per 10 vulnerabilità effettive, il numero di vulnerabilità potenziali può raggiungere anche le 1000 segnalazioni: due ordini di grandezza forse non sono giustificabili.
E qui viene il dubbio: quanto questi prodotti aiutano veramente e quanto invece servono per vendere servizi di analisi statica di codice sorgente alle aziende private o alle pubbliche amministrazioni?
Considerando quante società, di sicurezza e non, ultimamente vendono servizi di Software Security, pur non avendo particolari skill, propendo più per la metafora del "cuneo di legno". Ovvero vendere o proporre un servizio per entrare nelle "grazie" e poi continuare a lucrare...
Ecco un video riepilogativo sul prodotto:
Commenti
Posta un commento