Come gli hacker sfruttano le webcam come backdoor
Sono in aumento le segnalazioni di attacchi hacker riusciti contro dispositivi Internet of Things (IoT). La maggior parte di questi tentativi ha riguardato la dimostrazione di come ottenere l'accesso a tali dispositivi o superare le loro barriere di sicurezza. La maggior parte di questi attacchi è considerata relativamente irrilevante perché i dispositivi stessi non contengono dati realmente preziosi (come numeri di carte di credito o informazioni personali identificabili). I dispositivi in questione generalmente non offrono molto valore ai proprietari di botnet, poiché tendono ad avere accesso a molta larghezza di banda, ma hanno pochissima CPU e RAM.
However these devices get more interesting to sophisticated attackers when they can be used to establish a persistent point of access in a network. Putting a callback backdoor into a webcam, for example, gives a hacker full-time access to the network without having to rely on infecting a laptop, workstation or a server, all of which are usually under high scrutiny and may often be patched. On a tiny device, there is no anti-virus and no endpoint protection. In fact, no one thinks of the device as having software on it at all. This makes these devices potentially inviting for persistent attackers who rely on stealthy channels of command-and-control to manage their attacks.
Lo svantaggio per l'autore dell'attacco è che questa classe di dispositivi solitamente non dispone di alcuna memoria persistente realmente utilizzabile. Utilizzano invece la nvram per memorizzare la configurazione e la flash ROM per memorizzare il codice in esecuzione. Pertanto, la speranza dell'autore dell'attacco di ottenere una reale persistenza si basa sulla possibilità di controllare il contenuto della flash ROM. In questo blog, esploreremo quanto sia difficile creare una nuova immagine flash che possa contenere tutti gli strumenti necessari per avere una backdoor realmente persistente alla rete su cui è installato il dispositivo. Una volta ottenuta tale immagine flash, la sua implementazione potrebbe comportare l'"aggiornamento" di un dispositivo già distribuito o l'installazione della backdoor sul dispositivo in un punto qualsiasi della catena di distribuzione, ovvero prima che venga ricevuto e installato dal cliente finale. Affinché questo esperimento sia significativo, è fondamentale che il dispositivo continui a svolgere la sua normale funzione, altrimenti solleverebbe immediatamente sospetti o indurrebbe il cliente a sostituirlo con una versione funzionante.
Guida introduttiva all'exploit della webcam
In questo scenario, il team di Vectra Threat Labs ha acquistato una webcam WiFi D-Link di fascia consumer per circa 30 dollari*. Aprire quel piccolo e meraviglioso involucro di plastica è stata un'esperienza incredibile, che ci ha ricordato che un Leatherman non è lo strumento giusto per ogni lavoro...

Una rapida occhiata al circuito stampato mostra:
- Antenna WiFi
- Ralink RT5350F
- SDram M12L2561616a-6t
- Flash ROM MX25L3205
Passaggio 1: scaricare la memoria flash
Data la presenza del chip di memoria flash sul PCB, ipotizziamo che sia qui che vengono conservati i dati/codici per garantirne la persistenza. Quindi la prima cosa da fare è scaricare il contenuto di quel chip per vedere cosa è memorizzato al suo interno.
Dopo aver collegato un Bus Pirate alla scheda, possiamo usare flashrom per scaricare il contenuto.

#flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1Mflashrom v0.9.7-r1782 su Linux 4.0.0-kali1-amd64 (x86_64)flashrom è un software gratuito, scarica il codice sorgente, Calibrazione del loop di ritardo... OK. Trovato chip flash Macronix "MX25L3205(A)" (4096 kB, SPI) su buspirate_spi. Trovato chip flash Macronix "MX25L3205D/MX25L3208D" (4096 kB, SPI) su buspirate_spi.Trovato chip flash Macronix "MX25L3206E" (4096 kB, SPI) su buspirate_spi. Più definizioni di chip flash corrispondono ai chip rilevati: "MX25L3205(A)", "MX25L3205D/MX25L3208D", "MX25L3206E" Specificare quale definizione del chip utilizzare con l'opzione -c .
Ora possiamo scaricare il contenuto dei chip flash per ulteriori analisi.
#flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -c 'MX25L3205(A)' -r MX25L3205-A
Fase 2: Analisi del dump flash
Una volta ottenuto un buon dump della memoria flash, possiamo usare binwalk per determinare cosa contiene.
#binwalk -Me MX25L3205-A DECIMALE ESADECIMALE DESCRIZIONE--------------------------------------------------------------------------------0 0x0 intestazione uImage, dimensione intestazione: 64 byte, CRC intestazione: 0x11BEF629, creato: martedì 3 febbraio 11:07:53 2015, dimensione immagine: 111116 byte, indirizzo dati: 0x80200000, Punto di ingresso: 0x80200000, CRC dati: 0xCD95F789, Sistema operativo: Linux, CPU: MIPS, tipo di immagine: Programma autonomo, tipo di compressione: nessuno, nome immagine: "SPI Flash Image"91040 0x163A0 Stringa versione U-Boot, "U-Boot 1.1.3"105424 0x19BD0 Intestazione documento HTML105777 0x19D31 Piè di pagina documento HTML105780 0x19D34 Intestazione documento HTML105979 0x19DFB Piè di pagina documento HTML106140 0x19E9C Intestazione documento HTML106840 0x1A158 piè di pagina del documento HTML210495 0x3363F certificato PEM211671 0x33AD7 chiave privata RSA PEM327680 0x50000 intestazione uImage, dimensione intestazione: 64 byte, CRC intestazione: 0xABF213A9, creato: Tue Feb 3 11:07:48 2015, dimensione immagine: 3730981 byte, Indirizzo dati: 0x80000000, Punto di ingresso: 0x8038B000, CRC dati: 0x2829F3C1, OS: Linux, CPU: MIPS, tipo di immagine: immagine del kernel del sistema operativo, tipo di compressione: lzma, nome dell'immagine: "Linux Kernel Image"327744 0x50040 dati compressi LZMA, proprietà: 0x5D, dimensione del dizionario: 33554432 byte, dimensione non compressa: 6394309 byte327744 0x50040 Dati compressi LZMA, proprietà: 0x5D, dimensione del dizionario: 33554432 byte, dimensione non compressa: 6394309 byte
Quindi il formato di questo firmware è composto da un u-boot, un kernel Linux e un'immagine.
Avremmo potuto usare dd, lzma o cpio per estrarre il contenuto del firmware oppure lasciare che fosse binwalk a farlo. Dobbiamo ancora estrarre l'ultimo passaggio dell'immagine cpio per vedere il contenuto dell'immagine.
#cpio -ivd --no-absolute-filenames -F. 0.cpio Una volta completato quest'ultimo passaggio, possiamo accedere al filesystem dell'immagine Linux.
Un file binario interessante nel filesystem è /bin/upgradefw, che sembra essere l'eseguibile utilizzato per eseguire la verifica e l'aggiornamento del firmware.
#file ./bin/upgradefw./bin/upgradefw: eseguibile ELF a 32 bit LSB, MIPS, MIPS-II versione 1 (SYSV), collegato dinamicamente, interprete /lib/ld-uClibc.so.0, stripped
Passaggio 3: Analisi del binario upgradefw
Per questa sezione utilizzeremo IDA Pro come strumento preferito per il reverse engineering del binario di aggiornamento.
IDA è in grado di eseguire un ottimo primo passaggio sul binario, rendendo l'analisi molto più semplice. Seguendo il percorso del codice dalla funzione principale, si arriva rapidamente a una funzione denominata "check" che svolge la maggior parte del lavoro di verifica della validità dell'immagine flash prima di inviarla a mtd_write.
La convalida eseguita dal binario upgradefw sembra includere alcuni controlli crc32, controlli memmem/strstr e alcuni loop che calcolano un valore e lo confrontano con uno o due valori fissi.
Il flusso logico della funzione di controllo tra il punto di ingresso e un ritorno di successo è approssimativamente il seguente:
1. Controllare che il file sia stato aperto correttamente.
2. Controllare la dimensione del file
3. Caricare il file e verificare che la lettura abbia funzionato
4. Controlla la "Firma: "

5. Controllare "Rilascio: "

6. Confronta la versione con quella attuale

7. Routine di controllo Uboot/uimage

passaggio a x86 qui per il checksum 55AA55AA.

Passaggio 4: aggiunta di una backdoor nella webcam
A questo punto, aggiungere una backdoor equivale grosso modo ad aggiungere un servizio all'interno di un sistema Linux: nel nostro caso, tutto ciò che vogliamo è un semplice proxy Socks con connessione di ritorno. Ciò può essere ottenuto con uno srelay e netcat nello script di avvio o con un codice C più ottimizzato, oppure si potrebbe optare per una semplice backdoor di callback con una shell utilizzando netcat e busybox, già presenti nel sistema.
È sempre una buona idea aggiungere il minor numero possibile di funzionalità: dopotutto, non abbiamo a disposizione un laptop completo, ma solo una piccola webcam con 4 MB di ROM. Aggiungere troppe funzionalità comprometterebbe il funzionamento del software. Durante la modifica, possiamo anche rimuovere la possibilità di riflashare il dispositivo in futuro. Ciò impedirebbe un aggiornamento del firmware avviato dall'amministratore che rimuoverebbe la nostra backdoor.
Passaggio 5: Ricomposizione dello script
Dopo aver dedicato un po' di tempo alla creazione di uno script di ricompressione, abbiamo trovato uno script molto utile sul sito web di Ralink.
utilizzarlo con:
make -f Makefile.4M
Dopodiché, è sufficiente correggere il checksum nel file. Ciò può essere ottenuto utilizzando l'utilità RaLink denominata addchecksum oppure correggendo manualmente il checksum. L'offset/intervallo utilizzato dal checksum può essere individuato sia nel file binario upgradefw che in quello addchecksum. E come al solito... controllate l'endianness.
Passaggio 6: Testare una riconnessione
Utilizzando telnetd / busybox / netcat possiamo riportare un socket telnet su un host esterno per ottenere una persistenza remota sulla webcam. Con la webcam che funge da proxy, l'autore dell'attacco può ora inviare traffico di controllo nella rete per portare avanti il suo attacco e, allo stesso modo, utilizzare la webcam per sottrarre i dati rubati.
Il carattere di escape è '^]'.(nessuno) login: adminPassword:BusyBox v1.12.1 (2015-11-11 05:41:04 UTC) shell integrata (ash)Digitare 'help' per un elenco dei comandi integrati.# ls /biniwpriv pcmcmd nvram_daemon ntpclient sounddb ipush touch pwd ls cpov7740 switch mii_mgr mtd_write notifystream schedule sync ps login chmoduvc_stream gpio ated msmtp mydlinkevent lanconfig sleep ping kill catmail nvram_set reg mDNSResponder imagetp iperf sh mount grep ashi2c nvram_get pppoecd lld2d upgradefw inadyn sed mknod echo busyboxswing ralink_init openssl disablebonjour audiopush umount rm mkdir date alphapd
Conclusione: protezione contro le backdoor delle webcam
So does all this mean that D-Link's web camera has a major security issue? Not necessarily—we get what we pay for, and asking a vendor who sells a webcam on Amazon for $30 to provide safe firmware update features which would require a TPM or a specialized chip to verify the content and signature of a software update is not very realistic. Rather the point of this demonstration is to highlight the real impact that IoT devices pose to the attack surface of a network. As we've shown, the barriers to hacking these devices are relatively low, and even the most basic devices can provide the plumbing for a persistent command-and-control channel. While these devices are low-value in terms of hard costs, they still matter to the security of the network, and teams need to keep an eye on them to reveal any signs of malicious behavior.
*Vectra ha segnalato il problema a D-Link all'inizio di dicembre 2015. Al 7 gennaio 2016, l'azienda non ha ancora fornito una soluzione.
