Dirottare Un Drone Sfruttando Un Exploit MAVLink!

Eccoci al secondo articolo della rubrica #HackWithDrones! Se vi siete persi il primo articolo in cui abbiamo parlato di come violare stampanti Wi-Fi cliccate qui.

In questo articolo parleremo di come hackerare un drone dirottandolo sfruttando un exploit MAVLink.

hackerare droni

Hackerare un drone!

Cos’è un exploit?

Citando Wikipedia:

Un exploit è un termine per identificare un codice che sfruttando un bug o una vulnerabilità porta all’esecuzione di codice non previsto, il cui risultato può portare all’acquisizione di privilegi maggiormente elevati di una macchina informatica. Lo scopo di molti exploit è quello di acquisire i privilegi diroot su un sistema. È comunque possibile usare exploit che dapprima acquisiscono un accesso con i minimi privilegi e che poi li alzano fino ad arrivare a root. Normalmente un exploit può sfruttare solo una specifica falla, e quando questa falla viene riparata, l’exploit diventa inutile per le nuove versioni del programma. Per questo motivo alcuni hacker non divulgano gli exploit trovati ma li tengono riservati per loro o per la loro comunità. Questi exploit sono chiamati zero day exploit, e scoprire il loro contenuto è il più grande desiderio per gli attacker. Gli exploit più sfruttati sono scritti in Perl, C e PHP.

L’Exploit MAVLink

Desiderate che nessuno si possa avvicinare a casa vostra con un drone? Avete paura di essere spiati dal drone del vicino? Ora vi spiegheremo passo passo come hackerare un drone con solamente una radio da 100€, un Raspberry P e poche linee di codice.

Codice originale:


    
    // decodifica dell'header
    errcount = golay_decode(6, buf, gout);
    if (gout[0] != netid[0] || gout[1] != netid[1]) {
        // Non è il nostro ID
        debug("netid %x %x\n",
               (unsigned)gout[0],
               (unsigned)gout[1]);
        goto failed;
    }

Codice Modificato:


    // decodifica dell'header
    errcount = golay_decode(6, buf, gout);
        if (gout[0] != netid[0] || gout[1] != netid[1]) {
                // Non è il nostro ID 

                /* Modifica di __int128 */
        
                // Imposta la radio per usare il NetID intercettato
                param_set(PARAM_NETID, gout[0]))  
                // Salva i parametri in memoria
                param_save(); 
                 // Reboot per usare i nuovi dati
                RSTSRC |= (1 < < 4);

                /* fine della modifica di __int128*/
        }

L’exploit di cui parliamo coinvolge tutti i droni che fanno uso di MAVLink (Micro Air Vehicle Link) e cioè il protocollo che si occupa della comunicazione usato per piccoli veivoli senza pilota, in particolare tra l’operatore a terra (Ground Control Station) ed il veivolo ma anche per i sistemi all’interno dei veivolo. Con il protocollo vengono trasmesse informazioni fondamentali per un drone come l’orientamento, la posizione GPS e la velocità. Ecco una piccola lista dei droni vulnerabili: Parrot AR.drone, ArduPilot, PX4FMU, pxIMU, SmartAP, MatrixPilot, Armazila 10dM3UOP88, Hexo+, TauLabs e AutoQuad.

L’exploit usa una funzione del protocollo MAVLink e cioè il canale (NetID) per inviare i comandi al drone: questo NetID viene utilizzato affinchè in presenza di più trasmettitori non avvengano interferenze. Il problema sorge nel caso in cui avvenga una doppia trasmissione con lo stesso NetID, nascerà infatti un conflitto che farà schiantare il vostro drone! Chiunque con una radio MAVLink che utilizzi lo stesso NetID può violare la sicurezza del vostro drone! Vi starete chiedendo “come fa l’hacker a sapere il canale che sto usando con il mio drone?” I ragazzi di ShellIntel hanno osservato che il NetID viene inserito nei pacchetti durante la trasmissione dei pacchetti al drone: quando impartite un comando al vostro drone, il pacchetto di informazioni contiene oltre al comando scelto (gira, accelera ecc) il numero del NetID in chiaro, non crittografato questo vuol dire che chiunque intercettando un vostro pacchetto può sapere il vostro NetID e quindi violare il vostro drone! Probabilmente il protocollo MAVLink non supporta la crittografia del NetID per mancanza di risorse hardware o per i troppi calcoli che la crittografia richiederebbe. Se siete interessati a dirottare un drone vi basterà solamente compilare il codice che trovate sopra, flashare questa radio usata da ShellIntel in quanto si può modificare il Firmware (guida qui) ed inserire il codice modificato!

Commenta