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
- Di solito è un linguaggio specifico. Cercare di sviluppare una soluzione per tutti i codici software è troppo complesso
- 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
- 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
- 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.