sabato 29 giugno 2019

I codici a barre e gli usi insospettati


Poco tempo fa mi sono trovato a spiegare come funzionano i codici a barre ed i lettori, allora mi sono ricordato di un paio di "trucchetti" che usavo e trovo carino condividerli.


Qualche tempo fa ho appunto parlato di automatizzare alcuni processi aziendali usando dei barcode con i codici di controllo, ma ho voluto allargare un po' il discorso.

Prendiamola larga, che almeno si gettano le basi per capirci bene.

I lettori di codici a barre non sono altro che oggetti che, grazie ad un raggio laser, leggono le sequenze di spazi neri e spazi bianchi, li convertono in caratteri e li inviano al dispositivo al quale sono collegati.
La modalità di invio è quella di una tastiera, in pratica "fanno finta" di essere una tastiera.

Questo ci porta ad una considerazione molto semplice, ovvero che si possono inviare comandi.

Una volta che io ho modo di inviare comandi posso provare ad inserirmi nel sistema.
Male, molto male.

So che non sono il primo a battere questa strada, due ricercatori (Yang Yu ed Hyperchem Ma) hanno presentato un talk sull'argomento qualche anno fa, ma vediamo nel dettaglio cosa si può fare con un barcode.

Come dicevamo, sono a tutti gli effetti visti come tastiere, ogni produttore implementa una serie di protocolli di comunicazione "standard" ed alcuni "proprietari".
La maggioranza dei software, specie per le piccole e medie imprese, si basa sul banalissimo input da tastiera con protocollo standard.
Inoltre, i lettori di codici a barre vengono venduti con il loro "manuale di programmazione" che consente, tramite la lettura in sequenza di alcuni codici, di programmare il loro comportamento.

Alcune cose che permettono questi codici di programmazione:

  • settare la lingua della tastiera
  • bloccare le maiuscole
  • inserire un carattere alla fine della lettura
  • stabilire per quanto tempo lasciare acceso il laser dopo che si è premuto il grilletto
  • stabilire il suono ed il volume di esso in fase di lettura, che sia andata o meno a buon fine
  • stabilire quali codici possono essere letti
  • resettare le impostazioni di fabbrica

Solitamente i codici di programmazione sono in un libretto cartaceo, si legge prima il codice di "inizio programmazione", poi il codice del valore che si vuole impostare e dopo il codice di "fine programmazione".
Però, siccome siamo nel 2017, si trovano ovviamente anche i manuali in formato PDF.

Con un minimo di occhio, si può leggere il modello del lettore e procurarsi il manuale corrispondente. A questo punto, si stampa il codice di inizio e di fine programmazione, il codice dell'impostazione e via che si è abilitata una funzione.

Non ci vuole poi molto, un attimo di distrazione di una commessa, un magazziniere che lascia il suo terminalino incustodito, un operatore che va un momento nella stanza vicina.
Fantasia?
Io, sinceramente, per fare una cosa del genere ci metto meno di 10 secondi.

Si che uno può anche abilitare solo i codici a barre che saranno effettivamente letti, ma questo non mitiga l'attacco che ho appena descritto. Vero è che non serve tenere 10 protocolli attivi se si leggono solo dei codici EAN13, ma la strada migliore è fare degli audit costanti per vedere che i lettori siano ancora con le impostazioni volute.

Cosa ci si potrebbe fare?
Vediamo...
Magari uno decide di abilitare la lettura del CODE39, o magari gli serve leggere questo tipo di barcode.

Questo formato consente di leggere 43 caratteri (tutte le lettere, i numeri ed alcuni caratteri tipo virgola, meno, più, percento ed altri) ed è uno standard in diversi settori.
Solo che è anche pericoloso, almeno nella sua variante FULL ASCII, perché vengono letti tutti i codici ASCII (al di sotto del 128) ,vediamo nell'immagine qui sotto quali sono:

Immagine presa da Oppo

Come vedete, c'è di tutto per poter aprire una shell sia sotto Linux che sotto Windows, lettere maiuscole, minuscole, asterisco, tilde... Tutto.
Ma magari ci servono anche i caratteri di controllo, tipo ENTER, TAB, CTRL, ALT e via dicendo…

Tornando al discorso di prima, una volta che si ha il controllo fisico dello scanner, anche per pochi secondi, basta abilitare il parametro "funzione tasti emulazione" e via che si va.
Ma magari al posto del CODE39 si preferisce il CODE128, che accetta i caratteri di controllo di default.

Per vedere quali sono i caratteri di controllo, sempre in ASCII, forse è più utile questa immagine :


Immagine presa da ASCII Table
A questo punto, la fantasia è il limite!

Aprire la shell, far girare un programma (magari con diritti di amministratore), chiudere una finestra che non ha il bottone X, scegliete voi. I codici ci sono, basta solo generare il barcode.

Di generatori on line ce n'è un sacco (io preferisco usare "alla veloce" il generatore di Terry Burton) e potete fare quello che volete.

Io ho preso alcune misure "cautelative" visto che ho una cinquantina di lettori sparsi tra azienda, sedi secondarie e punti vendita:
  • non usare mai nessun codice che non sia EAN13 oppure GS1-128 con i relativi AI
  • audit casuale dei lettori, visto che sono sempre in giro in tutte le sedi la cosa non mi costa più di 10 secondi
  • cancellazione di ogni logo visibile sui lettori (specie quelli dei punti vendita)

Non sarà granché, ma è meglio che niente...

Un bellissimo video del Defcon 16 che parla di barcode dal punto di vista sicurezza è questo:




Le slide dell'intervento di Yang Yu e Hyperchem Ma sono reperibili su SlideShare
C'è un bell'articolo, anche se non approfondito, su Threat Post
Ed ora, chi si sta preoccupando?

Nessun commento:

Posta un commento

Sei davvero sicuro di voler sprecare tempo prezioso per scrivere qualcosa? Non è che preferisci andare su Google?

Cerca nel blog

I post più letti di sempre