Il Security Dataflow di CAST

By on
 

Introduzione

La piattaforma CAST Imaging permette di eseguire l'analisi approfondita di un’applicazione eseguendo una scansione statica del suo codice sorgente.

In questa analisi delle applicazioni è possibile impostare l'opzione ‘Security Dataflow’ che permette di rilevare le vulnerabilità di tipo User Input Security. A questo scopo infatti, è stato implementato un apposito algoritmo che genera un flusso di dati utilizzato per rilevare le variabili, che vanno dall’utente fino alle risorse, senza essere prima sanificate; ovvero le situazioni che permettono a malintenzionati di ‘iniettare’ dati che possono danneggiare le applicazioni.

Vulnerabilità ‘User Input Security’ - Chi le definisce

Le vulnerabilità di tipo ‘User Input Security’ sono considerate di rilevanza grave (CWE – Common Weakness Enumeration) dai principali istituti internazionali che lavorano per la sicurezza del sw, ovvero ad esempio:

Security Dataflow – Metriche rilevate

La funzionalità di Security Dataflow consente di rilevare le seguenti vulnerabilità di sicurezza (vedi Ref. 1):

  • SQL Injection (CWE-89)
  • Cross-Site Scripting (CWE-79)
  • LDAP Injection (CWE-90)
  • OS Command Injection (CWE-78)
  • XPath Injection (CWE-91)
  • Path Manipulation (CWE-99)
  • Avoid Log forging vulnerabilities (CWE-117)
  • Avoid uncontrolled format string (CWE-134)
  • Trust Boundary Violation (CWE-501)
  • Sensitive Cookie in HTTPS Session Without 'Secure' Attribute (CWE-614)
  • Use of hard-coded credential (java, C#, VB.Net languages) (CWE-798)

Al momento le tecnologie supportate sono JEE e .NET.

Come funziona il Security Dataflow 

Questa funzionalità ha un meccanismo interno, il “Dataflow Engine”, che si attiva durante la fase di analisi; l’ engine di CAST Imaging genera una variabile ‘contaminata’ che è utilizzata per tracciare l’input dell’utente non sanificato. Quindi il motore traccia le vulnerabilità tramite dati contaminati che fluiscono dal punto d’ingresso (input utente) fino ai metodi destinazione. Nella figura seguente viene mostrato un possibile scenario di “SQL Injection”

SQL InjectionMetodi e Librerie Predefiniti

Alcuni noti metodi di input/target sono già predefiniti e presi in considerazione da CAST per rilevare le vulnerabilità di User Input. Ne riportiamo qui alcuni esempi:
(per il dettaglio completo
https://doc.castsoftware.com/display/AIPCONSOLE/User+Input+Security+-+predefined+methods).

Tecnologia JEE

               Metodi di Input

                    [rt.jar]java.io.Console.readLine()

[rt.jar]java.io.Console.readLine([rt.jar]java.lang.String,[rt.jar]java.lang.Object[])

[rt.jar]java.io.Console.readPassword()

[rt.jar]java.io.Console.readPassword([rt.jar]java.lang.String,[rt.jar]java.lang.Object[])

[rt.jar]java.applet.Applet.getParameter([rt.jar]java.lang.String)

….

               Metodi Target (es. di Command Injection)

                    [rt.jar]java.lang.Runtime.exec([rt.jar]java.lang.String)

[rt.jar]java.lang.Runtime.exec([rt.jar]java.lang.String)

[rt.jar]java.lang.Runtime.exec([rt.jar]java.lang.String,[rt.jar]java.lang.String[])

[rt.jar]java.lang.Runtime.exec([rt.jar]java.lang.String,[rt.jar]java.lang.String[])

[rt.jar]java.lang.Runtime.exec([rt.jar]java.lang.String,[rt.jar]java.lang.String[],[rt.jar]java.io.File)

Tecnologia .NET

               Metodi di Input

                    [System.Windows.Forms]System.Windows.Forms.Control.get_Text()

[System.Windows.Forms]System.Windows.Forms.ScrollableControl.get_Text()

[System.Windows.Forms]System.Windows.Forms.ContainerControl.get_Text()

[System.Windows.Forms]System.Windows.Forms.AxHost.get_Text()

….

               Metodi Target (es. di Command Injection)

                    [System]System.Diagnostics.Process.Start()

[System]System.Diagnostics.Process.Start([mscorlib]System.String,[mscorlib]System.String,[mscorlib]System.Security.SecureString,[mscorlib]System.String)

[System]System.Diagnostics.Process.Start([mscorlib]System.String,[mscorlib]System.String,[mscorlib]System.Security.SecureString,[mscorlib]System.String)

[System]System.Diagnostics.Process.Start([mscorlib]System.String)

Oltre i metodi vengono prese in considerazione anche alcune note librerie per il controllo della sicurezza.

Librerie

OWASP ESAPI

OWASP Java Encoder Project

OWASP Java HTML Sanitizer

Microsoft Anti-XSS

Apache Commons StringEscapeUtils

Spring HtmlUtils

Tutte le SQL parameter binding

Risultati prodotti

Vengono prodotti due tipi di risultati.

1) Risultati intermedi

Sono presentati nella Console di prodotto e forniscono una panoramica di base dei risultati

Risultati intermedi vulnerabilità di User Input

Rispetto alle vulnerabilità di sicurezza rilevate sono riportati:

  • Rule: la vulnerabilità
  • Targets, riporta il numero di chiamate ai metodi che accedono alle risorse considerate per la regola violata
  • Sources, indica il numero di chiamate a metodi in cui le variabili vengono popolate con l'input dell'utente
  • Detected Flaws, è numero di flussi, non preventivamente sanificato, che dai metodi con input dell'utente arriva fino ai metodi che accedono alle risorse
  • Black-boxes, è il numero di Black-box file caricato per la regola.  E' creato automaticamente (ma può anche essere creato e aggiunto manualmente) per generare codice sorgente ‘esterno’ che venga anch’esso scansionato e quindi preso in considerazione, dall’analizzatore in fase di analisi del codice.

 2) Risultati finali

Sono presentati nella Engineering Dashboard di prodotto. Qui viene riportata la lista di tutte le violazioni di Sicurezza rilevate. La lista delle violazione può essere esportata in formato .xls.

Lista delle violazioniNavigando le interfacce della Dashboard si arriva al dettaglio del file e della singola riga in cui è stata rilevata la violazione.

Dettaglio violazione