Come potrei addestrare un sistema ML per identificare vulnerabilità nel codice? [chiuso]

5

Chiedo scusa se questa non è tanto una "domanda" quanto una discussione. Ci ho pensato per un po '.

Come posso addestrare un sistema di machine learning per identificare (nuove) vulnerabilità nelle basi di codice open source? O anche i binari chiusi? È possibile?

Ecco la mia soluzione proposta ... Sono curioso di sapere se qualcuno ha familiarità con il lavoro in questo senso o se hai qualche idea sulla sua fattibilità.

Requisiti:

Un database CVE con le seguenti proprietà:

1) The source diff of the patch applied to fix the vulnerability, i.e. the "before/after" of the critical section of code

2) The bindiff of the binary before and after patching the vulnerability

Obiettivo

Usa il codice di vulnerabilità precedentemente identificate per addestrare il sistema ML a riconoscere il codice "vulnerabile" e poi applicarlo a sezioni critiche di codice in progetti open source.

Sembrerebbe qualcosa del genere ...

FASE RACCOLTA DATI

1) Collect the before/after code of all previous vulnerabilities

2) Use the before/after code to identify the "critical section" that caused the vulnerability

3) Convert the "critical section" to its AST representation

FASE FORMAZIONE:

1) Determine the best ML algorithms to use for comparing AST representations

2) Using labeled inputs of "vulnerable" and "safe" AST representations, train the ML system to recognize a "vulnerable" AST

IDENTIFICAZIONE DELLA NUOVA FASE DI VULNERABILITÀ:

1) Download open source code bases

2) Somehow prioritize which code to convert to AST

3) Convert code to AST and feed to ML system to determine likelihood of "vulnerability"

4) Apply some combination of static and manual analysis to verify the vulnerability

5) Use results as further feedback to train the ML system

Quindi, di nuovo, mi rendo conto che questa non è strettamente una "domanda", ma spero che possa favorire qualche discussione interessante. È un'idea con cui ho giocato per un po 'nella mia testa, ma la maggior parte di essa non rientra nelle mie competenze.

Ci sono sicuramente molte sfide con esso, principalmente i falsi positivi (per esempio forse un doppio ciclo annidato con una dozzina di condizionali sembra un AST vulnerabile, ma si trova in una porzione di codice non critica). Ma penso che l'idea centrale di addestrare algoritmi ML basati su vulnerabilità esistenti porterebbe a un modo molto efficiente di trovare NUOVE vulnerabilità. Per lo meno, potrebbe fornire un aumento di efficienza a strumenti come i fuzzer, indirizzandoli verso le parti critiche del codice. Inoltre, non deve necessariamente lavorare solo sul codice open source. Potrebbe anche smontare il binario vulnerabile e il binario con patch e confrontare le loro istruzioni ASM. In effetti, questo potrebbe persino portare a un segnale più alto rispetto al metodo AST.

posta pandemic 26.04.2016 - 20:31
fonte

0 risposte

Leggi altre domande sui tag