Non esiste un modo per trovare le vulnerabilità. Ma ecco alcuni passi che puoi seguire.
Target
Per prima cosa devi scegliere una piattaforma e un pezzo di software da attaccare. Per iniziare vorrei scegliere qualcosa che sia open source. Ci sono molti vantaggi a questo; il principale è che puoi guardare il codice sorgente. Devi quindi scegliere un aspetto che vorresti attaccare. Ad esempio, potresti voler attaccare l'implementazione UDP dello stack di rete Linux.
Esecuzione di un'analisi su un software a sorgente chiuso significa che stai smontando il binario, eseguendo il rooting delle istruzioni e eseguendo il debug del processo. Questo è lungo e noioso. È meglio capire cosa rompe il codice con il codice sorgente prima di andare a cercarlo nello smontaggio.
Essendo specifico nel tuo target ti permette di analizzare sistematicamente un pezzo di software.
Analizzare
Con il tuo obiettivo in mente inizia la tua analisi della parte del software che vuoi trovare vulnerabilità.
- Determina quali file del codice sorgente influenzano il tuo target.
- Con l'open source puoi inserire i messaggi di debug per assicurarti di comprendere il flusso del codice. Questo può essere estremamente importante. Sapendo quali sezioni di codice sono chiamate e le variabili che portano a quel risultato sono fondamentali per capire cosa sta succedendo.
- Eseguire gli strumenti di analisi del codice sul progetto. A seconda del progetto, questo potrebbe essere un punto controverso, ma possono essere utili e rilevare errori di programmazione comuni.
- Abilita tutti i flag di compilazione del compilatore . Il tuo obiettivo è trovare errori di programmazione. Quale modo migliore di avere il compilatore che ti dice dove pensa che il codice sia cattivo.
Queste sono solo alcune delle cose che puoi fare per analizzare il software. Crea un elenco di possibili errori di codifica.
Triggering
Ora con un elenco di possibili errori di codifica è necessario determinare se è possibile attivarli. Ancora una volta, i messaggi di debug ti aiuteranno. Torna al codice sorgente e determina cosa esattamente deve accadere per ogni difetto di codifica per rompere il software. Non stai cercando il pieno sfruttamento, vuoi solo che il codice si blocchi, o fare qualcosa di inaspettato. È necessario determinare cosa potrebbe innescare un difetto di codifica. Questo potrebbe essere qualsiasi cosa che influisce su una variabile di lunghezza, ingannare una funzione per prendere un percorso per elaborare i dati in modo errato, ecc. Alcuni difetti di codifica non sono attivabili, ma questa è la natura dell'analisi di vulnerabilità.
A questo punto hai una lista di difetti e un elenco di idee per ogni difetto su cosa potrebbe far sì che faccia qualcosa di inaspettato.
Fuzzing
Ora scrivi il codice. Usando praticamente qualsiasi linguaggio di programmazione è conveniente per il software che stai attaccando. Potresti scrivere codice Python per lanciare pacchetti specifici sui dispositivi di rete per tentare di rimuovere l'implementazione UDP di un dispositivo basato su Linux.
L'obiettivo è implementare i trigger e sperare che il codice funzioni nel modo in cui pensi. I tuoi messaggi di debug saranno utili qui.
- Possono dirti se il percorso del codice è anormale.
- Possono mostrare le variabili che stai tentando di manipolare
- Assicurano che l'innesco stia facendo ciò che ti aspetti, e puoi regolarlo di conseguenza.
Con un po 'di fortuna sei in grado di far accadere qualcosa di diverso. Forse questo può portare all'esecuzione del codice, forse no. È un cavallo di un colore diverso.
Reality
L'analisi della vulnerabilità richiede tempo. Molto tempo. Non trascorrerai un giorno ad analizzare il software e a trovare 10 vulnerabilità. La media non ufficiale per l'analisi della vulnerabilità è 1 vulnerabilità per 3 mesi di analisi. Puoi raddoppiare quella volta se stai analizzando un progetto non open source.