adv

Il futuro è paperless. Da anni aziende, uffici, ospedali, scorgendo in quest’idea notevoli benefici, investono, acquistano apparecchiature e maturano competenze per fare a meno del cartaceo. Nel frattempo, tuttavia, le stampanti restano uno dei dispositivi fondamentali per il lavoro di ogni giorno. Ma quanto sono sicure?

Un rischio per la sicurezza?

Nonostante siano spesso date per scontate e considerate dispositivi secondari rispetto a monitor, dispositivi di rete etc., le stampanti si sono sempre più evolute: si connettono al network, alla rete telefonica fungendo da fax, incorporano scanner. Per fare ciò sono diventate sempre più potenti, con sistemi interni sempre più complessi, memorie, hanno perfino dei web-server per la gestione tramite internet browser.

E per quanto riguarda la sicurezza? Non sono in molti a soffermarsi su cosa passa attraverso una stampante: statini paga, documenti riservati, liste di nomi e credenziali sono solo alcuni esempi. Tali informazioni non sempre svaniscono una volta prodotto il documento.

Come i router ed i dispositivi IoT, anche le stampanti possono essere, quindi, una ghiotta preda per chi volesse rubare informazioni e, come essi, risultano di frequente scarsamente protetti.

L’anello debole della catena

Si considera la forza della catena pari a quella del suo anello più debole perché, rotto quello, anche se gli altri anelli sono indistruttibili, la catena non serve più al suo scopo.

Analogamente, firewall impenetrabili, antivirus aggiornati, politiche di restrizione sui software e precauzioni simili risultano comunque insufficienti se si può accedere con facilità ad una componente di rete come la stampante ed inserirsi nel sistema.

Le stampanti collegate direttamente al PC risentono anch’esse delle falle che verranno presentate, specie se condivise o se, comunque, il PC è compromesso e connesso alla rete. Al fine di dare un panorama più ampio dei rischi, tuttavia, ci concentreremo su stampanti di rete, largamente diffuse negli uffici e, oggi giorno, anche nelle utenze domestiche.

Cosa riceve una stampante?

La stampante riceve documenti di vari formati, PDF, JPG, TXT, DOCX, sono tra quelli più noti, e sono costruiti in modo differente.

Questi vengono incapsulati da diversi protocolli, ciascuno che adempie ad una fase specifica della comunicazione, come da schema seguente

stampante1

Esisteranno, dunque, oltre a diversi formati di comunicazione con la stampante, diversi interpreti di formato.

stampante2

Come si vede dallo schema precedente, la stampante può utilizzare vari protocolli per ricevere i dati, ognuno dei quali gestirà, in modo peculiare, funzionalità come il management delle code di stampa, etc. Tra questi i più comuni sono:

  • IPP: Internet Printing Protocol
  • LPD: Line Printer Daemon
  • SMB: Server Message Block
  • RAW: non è un vero protocollo perché i dati “grezzi” sono processati direttamente dal dispositivo di stampa. Esso funziona, quindi, sulla porta 9100 come una porta seriale che sfrutta TCP invece del cavo. Questo è il protocollo usato di default dai sistemi Windows e CUPS (Common UNIX Printing System).

Tali interfacce non saranno i bersagli ma verranno tipicamente utilizzate come vettori per condurre l’attacco che si rivolgerà agli interpreti. Questi ultimi, infatti, possono restituire informazioni direttamente al client, creando un canale bidirezionale che, originariamente usato per il debugging (leggasi analisi per la ricerca di errori) del codice, può dare anche accesso al risultato degli script malevoli che si lanciano. Gli script saranno lanciati dal linguaggio di controllo per agire sulla costruzione delle pagine.

Abbiamo detto che gli attacchi, almeno alcuni tra quelli studiati, usano i linguaggi di controllo per agire sugli interpreti. Cosa sono quindi questi linguaggi?

Linguaggi di controllo stampante / job (lavori di stampa)

Tipicamente tali linguaggi risiedono in un livello opzionale, pertanto, alcune funzioni possono sovrapporsi con quelle dei livelli limitrofi. Tali funzioni sono molteplici, ad esempio, la scelta del cassetto di uscita nel job in esecuzione. I linguaggi di controllo sono, tuttavia, disegnati per avere effetto non solo sul singolo lavoro ma su tutto il dispositivo. Sebbene ogni casa possa svilupparne uno proprietario o customizzarne (modificare in base alle proprie esigenze) uno esistente, esistono alcuni linguaggi generalmente supportati da tutti i vendor.

  • PJL: Printer Job Language, inizialmente introdotto da HP è diventato, poi, uno standard de facto, supportato dalla maggior parte delle case produttrici. Altri linguaggi sono “dialetti” di questo che ne inglobano gran parte delle funzioni. Può essere usato per modifiche permanenti, cambio del display della stampante, del formato di carta, del numero di copie e veicolare verso l’interprete PostScript il lavoro.
  • PML: Printer Management Language è un linguaggio proprietario HP che ingloba PJL e SNMP. Tale peculiarità è comoda per l’esecuzione di un attacco, in quanto, qualora ci sia un firewall che blocchi i comandi SNMP, questi potranno essere eseguiti via PJL. SNMP dispone di comandi come il reset alle impostazioni di fabbrica della stampante con conseguente DoS (Denial of Service: interruzione di servizio).

Linguaggi di descrizioni di pagina (PDL)

I PDL descrivono l’aspetto della pagina, talvolta sono proprietari. Le stampanti si avvalgono di driver per la trasformazione del documento in un formato PDL ad esse comprensibile. I formati più comuni hanno, comunque, supporti specifici per l’elaborazione, come PDF e XPS (XML paper specification).

PostScript è un linguaggio sviluppato da Adobe nei primi anni 80. Esso è andato progressivamente scomparendo come linguaggio di publishing desktop ma è rimasto come linguaggio nelle stampanti. L’interprete PostScript è un vero e proprio code executor perché tale linguaggio permette l’implementazione di qualunque tipo di algoritmo.

Tipologie di attacco

I tipi di attacco possibili sono noti in letteratura e possono essere intrapresi da persone fisicamente vicine alla stampante o da remoto, attacchi tecnicamente più complessi. Non tutti gli attacchi sono applicabili a tutte le stampanti.

  • DoS (Denial of Service): consiste nell’inibire le funzionalità di stampa, può avvenire tenendo occupata la memoria inviando innumerevoli job o, più elegantemente, inviando un loop infinito che non fa nulla tramite script PostScript

%!

{} loop

Tramite lo stesso linguaggio è possibile anche ridefinire la funzione di showpage, sostituendo quella originale con una che non fa nulla

%!

serverdict begin 0 exitserver

/ showpage {} def

Con PJL è possibile anche mandare offline la stampante

@PJL OPMSG DISPLAY = “PAPER JAM”

Oppure provocare un danno fisico forzando con un loop la riscrittura di una memoria NVRAM, destinata a memorizzare variabili che cambiano di rado e, quindi, ad essere riscritta un numero di volte limitato.

  • Bypass delle protezioni: usando i comandi SNMP è possibile resettare la stampante ai valori di fabbrica

#snmpset -v1 -c public [stampante] 1.3.6.1.2.1.4.3.5.1.1.3.1 i 6

Tale comando può anche essere incapsulato come ASCII in un’istruzione PJL

  • Estrapolazione delle informazioni: tramite appositi script PJL è possibile accedere ad aree di memoria o del file system per scovare password (eventualmente di proxy etc.) ed intercettare i job per trascriverli e restituirli come risultato dell’attacco.

Altre tipologie di attacco sono possibili ed interessante è l’approccio del cross-site printing, che forza il browser web ad inoltrare comandi o job alla stampante.

Stato dell’arte

Gli esiti di diversi studi su questo argomento sono stati inviati alle compagnie produttrici di stampanti ed i risultati cominciano a vedersi:

L’HP, ad esempio, ha sviluppato alcune funzionalità di protezione:

  • Secure boot: si verifica l’integrità del codice di boot (avvio) con un meccanismo di firma digitale. Se il codice è stato compromesso la stampante va in recovery mode con funzionalità limitate finché non viene installato un codice autentico.
  • Firmware integrity validation: come per il codice di boot anche il firmware (sistema operativo della stampante) dev’essere validato con firma digitale
  • Runtime code integrity: le aree di memoria contenenti il codice eseguibile sono protette da scrittura, ond’evitare l’introduzione di codice malevolo. La memoria dati è configurata come non eseguibile.
  • Manage printer security settings: sistema di gestione per garantire agli amministratori di sistema che il dispositivo sia conforme alle policy aziendali.

A corredo delle precedenti, è stato implementato anche un sistema d’identificazione delle intrusioni e delle chiamate di rete che, in caso di anomalie, blocca i processi e riavvia il sistema.

Epson, dal canto suo, propone soluzioni che consentono la consegna del documento solo una volta che l’utente è stato identificato, tramite EpsonNet Authentication Print, con una scheda personale o con un PIN. Tra l’altro è possibile definire una lista di accesso basata su indirizzi IP che consentirà o negherà il servizio a seconda di quanto configurato.

Il sistema uniFlow di Canon è una sorta di gateway che gestisce al meglio un pool di stampanti, mirando più a non lasciare incustoditi i dati che alla sicurezza del dispositivo stampante stesso.

In sostanza i vendor di stampanti, per anni scarsamente sensibili alle problematiche di sicurezza, si stanno ora impegnando a rendere i loro prodotti, e di conseguenza gli ambienti ove essi verranno installati, più sicuri.