Ricerca di vulnerabilità tramite confronto di codice simile. È un vettore di attacco attuabile?

7

Considera il seguente scenario:

  1. l'utente malintenzionato analizza (in modo ottimale automaticamente) le codebase aperte (ad esempio GitHub) per i frammenti di codice vulnerabili controllando segnalazioni di bug e patch.
  2. l'utente malintenzionato esegue la scansione di frammenti di codice simili nelle altre fonti. (ad esempio, altri software che utilizzano lo stesso modello, ma non contengono la patch.)
  3. l'utente malintenzionato cerca il software identificato e sfrutta le vulnerabilità.

La domanda è:

  • è un metodo di attacco attuabile?
  • se lo è, ha qualche nome?
  • ci sono delle ricerche esistenti considerando questo problema o qualsiasi esempio documentato?

Sappiamo che la duplicazione del codice (la forgiatura, l'uso di snippet, persino il copia-incolla) è comune nel mondo dell'open source. L'abbinamento può essere realizzato con metodi esistenti come semplici ricerche sull'espressione regolare o analisi AST (Abstract-syntax trees). Sembra essere un attacco efficace contro l'OSS o il software che utilizza l'OSS (o contro qualsiasi software la cui fonte è ottenibile dall'attaccante), ma non riesco a trovarne alcun esempio. Da qui la domanda.

    
posta goteguru 14.09.2015 - 23:29
fonte

2 risposte

2

Per la cronaca, la risposta è principalmente sì.

Il problema è ampiamente analizzato da diversi ricercatori come Hongzhe Li et al. in "Un approccio scalabile per la scoperta delle vulnerabilità Basato su Security Patches "(Springer, 2014) e Silvio Cesare, Yang Xiang e Jun Zhang:" Clonewise - Rilevamento dei cloni a livello di pacchetto con l'apprendimento automatico "(Springer, 2013).

Il primo documento mostra che si tratta di un metodo di lavoro, il secondo suggerisce che può essere anche semi-automatizzato tramite l'apprendimento automatico.

Argomento strettamente correlato discusso in Amir H. Moin e Mohammad Khansari: "Localizzazione dei bug utilizzando l'analisi del registro delle revisioni e la categorizzazione dei testi dei repository aperti dei bug" (Springer, 2010)

Quindi la risposta è:

  • sì, è un vettore di attacco valido,
  • no, non ha un nome (ancora),
  • e, sì, ci sono alcune ricerche esistenti che spiegano l'argomento (vedi sopra).
risposta data 15.12.2015 - 17:00
fonte
3

In teoria, sì, questo è possibile e ci sono stati alcuni tentativi per farlo. Tuttavia, la tecnica non è del tutto pratica perché ci sono troppe variabili coinvolte per generalizzare l'approccio. Quello di cui stai parlando è in realtà solo un sottogruppo di anlsisi di codice statico ed è stato usato per lungo tempo. Il problema è che ha un sacco di limitazioni

  1. Di solito è un linguaggio specifico. Cercare di sviluppare una soluzione per tutti i codici software è troppo complesso
  2. Spesso hai bisogno di lavorare a livello AST per eliminare nomi di variabili, stile di codice, ecc. Hai bisogno di rappresentazioni astratte di alto livello, che lo rendono lento
  3. Può essere difficile identificare problemi che non sono localizzati nel codice. ad esempio, un buco di sicurezza può esistere solo se esiste una serie di precondizioni distribuite su più file di codice o moduli
  4. Spesso fornisce un numero elevato di falsi positivi che devono essere verificati manualmente.

Detto questo, ci sono una serie di strumenti di analisi statica che possono aiutare a restringere lo spazio di ricerca per potenziali buchi di sicurezza. Questi si concentrano spesso su un tipo specifico di problema di sicurezza, come le vulnerabilità SQL injection o XSS e sono generalmente limitati a una lingua specifica. Molti di quelli migliori sono molto costosi.

Il potenziale di tale analisi è certamente aumentato a causa della crescita degli archivi disponibili, come github. Definire esattamente lo scopo da utilizzare può anche significare che tali approcci possono essere utili. Ciò è particolarmente vero a causa della crescita nell'uso di librerie e framework open source. Ad esempio, se si è a conoscenza di una vulnerabilità in una libreria o framework comune, non è troppo difficile identificare il codice che utilizza tali framework o ibridi come possibili candidati per una ricerca più intensiva. Allo stesso modo, la crescita nell'uso della programmazione in stile "taglia e incolla" potrebbe avere alcune potenzialità - se trovi un esempio popolare di come implementare qualche schema / algoritmo che ha un difetto, potresti essere in grado di trovare quel modello nei repository pubblici ecc.

Questo tipo di analisi statica non automatizza il processo, ma certamente potrebbe aiutare a ridurre lo spazio di ricerca per il codice con problemi di sicurezza. Tuttavia, alla fine della giornata, normalmente richiederà che qualcuno prenda i risultati ed esegua analisi e ispezioni manuali.

    
risposta data 17.09.2015 - 23:00
fonte

Leggi altre domande sui tag