Come posso controllare il mio programma di vulnerabilità su TCP?

3

Ho creato un programma che gira costantemente su un server Linux (Program A ). Ho anche creato un altro programma che funge da interfaccia utente per A (Programma B ). A ascolta le connessioni in arrivo su TCP. Dopo che B si connette a A e si autentica da solo usando una password, A invia aggiornamenti a B ogni pochi secondi. La connessione è crittografata SSL. Sto anche utilizzando un nonce in ogni messaggio per evitare attacchi di riproduzione.

Dato che sono molto nuovo nella programmazione dei socket, vorrei controllare A per vulnerabilità / exploit su TCP (ad es. buffer overflow). Non voglio che gli estranei siano in grado di estrarre i dati da A usando gli exploit.

Quali vulnerabilità dovrei controllare?

    
posta thesys 14.01.2017 - 15:26
fonte

1 risposta

3

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.

    
risposta data 24.02.2017 - 08:24
fonte

Leggi altre domande sui tag