Puoi provare a cercare classi di vulnerabilità, ma la complessità del codice probabilmente ti sposserà prima di esaurire anche il più piccolo spazio possibile. Questo è il motivo per cui esistono fuzzer di apprendimento automatico del compilatore.
Dai un'occhiata a fuzzy american lop: link
Costruisci un piccolo programma di test che chiama la tua logica di rete direttamente con i "dati di rete" forniti dal fuzzer. Il fuzzer manipolerà uno 'zoo' di campioni (file di dati in una directory) modificando gli esempi e chiamando la logica. È meglio acquisire manualmente (wireshark) alcuni test ed estrarre i pacchetti client per ogni risposta in un file di esempio per il fuzzer. È abbastanza intelligente da riconoscere un nonce fornito negli esempi.
Ho trovato un ciclo infinito 1 su 4.4 miliardi per me in pochi secondi.
Con le giuste opzioni e un po 'di ingegneria può persino trovare la tua lettura oltre gli errori del buffer.
Aiuta se la logica di risposta è già ben incapsulata e non raggiunge i servizi lenti (come la rete) su ogni messaggio.
Non vuoi che scriva sul tuo DB.
Ciò richiederà probabilmente un'inizializzazione speciale del tuo stato per accettare lo stesso codice nonce per la durata di un'esecuzione di test o dovresti forzatamente impostare un nonce valido nei dati per ogni chiamata. Fortunatamente una delle funzionalità del fuzzer è copiare il tuo stato e resettarlo prima di ogni variazione. Se il nonce viene impostato durante l'inizializzazione della sessione prima di qualsiasi dato di risposta del client, questa opzione sulle prestazioni ti renderà libero.
Se non fosse ovvio, devi bypassare la funzionalità SSL per questo eseguibile di test.
Ovviamente esistono altre soluzioni di test, come il Selenium, ma l'attenzione è diversa. Vuoi trovare tutte le vulnerabilità con il minimo sforzo di generazione di test e ottenere una riproduzione affidabile? American fuzzy lop.