SaveSaveSaveSave ← Tutte le guide
Italiano

Guida · Rischi dei messaggi · · di Stefan Tsezarov · aggiornata il

Il testo che non vedi

Due messaggi possono sembrare identici e contenere caratteri completamente diversi.

Copi un messaggio.

Sembra normale.

Tre frasi comuni. Niente di strano.

Lo incolli in un documento, in un sito, in un wallet o in un assistente IA.

E all’improvviso succede qualcosa che il messaggio, come l’hai visto, non sembrava dire.

Come?

Perché ciò che vedi sullo schermo non è necessariamente tutto ciò che c’è nel testo.

Alcuni caratteri non occupano alcuno spazio visibile.

Ci sono comunque.

Si possono ancora copiare, incollare, salvare ed elaborare.

Solo che non li vedi.


Il tuo computer non vede le lettere come te

Quando guardi una frase, vedi forme.

Il tuo computer vede dati.

La lettera A, per esempio, è rappresentata da un carattere Unicode con un punto di codice preciso. Uno spazio è un altro carattere. Ogni lettera, numero, segno di punteggiatura e molti altri simboli hanno la propria rappresentazione.

Ma non tutti i caratteri producono una forma visibile.

Alcuni caratteri dicono al software come deve comportarsi il testo.

Possono dire a un programma:

Così puoi avere due testi che sembrano identici ma sono sequenze di caratteri diverse.

Questa differenza può contare.

Molto.

Tre tipi di testo invisibile da conoscere

I meccanismi sono diversi, ma tre sono particolarmente utili da capire.

1. Caratteri che non compaiono

Si chiamano spesso caratteri a larghezza zero.

Tra questi ci sono lo spazio a larghezza zero, il joiner a larghezza zero e il word joiner.

Occupano una posizione nel testo ma non producono pixel visibili.

Per esempio, queste due parole possono sembrare identiche:

Due parole · una non è ciò che sembra

payment

pay​ment

prima: 7 caratteriseconda: 8 caratteri

Nella seconda c’è un carattere invisibile.

Probabilmente non lo vedi.

Il tuo computer sì.

Significa che le due stringhe in realtà non sono identiche.

Può influire su ricerche, filtri, nomi utente, identificativi e altri sistemi che confrontano i caratteri sottostanti invece di ciò che vede una persona.

E c’è un motivo legittimo per cui alcuni di questi caratteri esistono.

Ci torneremo.

2. Caratteri che cambiano l’ordine che vedi

Alcuni caratteri invisibili influiscono sulla direzione del testo.

Servono perché lingue come l’arabo e l’ebraico si scrivono da destra a sinistra, mentre l’italiano si scrive da sinistra a destra.

Una frase che le contiene entrambe può aver bisogno di istruzioni che dicano al software come mostrare le varie parti.

Queste istruzioni possono essere utili.

Ma se ne può anche abusare.

Un carattere di controllo della direzione può far apparire sullo schermo in un ordine diverso i caratteri memorizzati da un computer.

Questo crea un evidente problema di sicurezza.

Un nome di file, per esempio, potrebbe sembrare terminare con un’estensione mentre la sua sequenza reale di caratteri dice altro.

Lo stesso principio può contare nel codice sorgente.

Chi revisiona vede una cosa.

Il computer ne elabora un’altra.

3. Caratteri che possono portare un messaggio invisibile

Questo è il caso insolito.

Unicode contiene un intervallo chiamato blocco Tags.

Questi caratteri sono stati pensati per contrassegnare e normalmente sono invisibili quando vengono mostrati.

La parte interessante è che ogni carattere Tag può rappresentare un normale carattere ASCII.

Mettine insieme abbastanza e possono codificare un testo.

Una frase può quindi contenere una stringa aggiuntiva di caratteri che non compare sullo schermo.

Ai tuoi occhi il messaggio può sembrare un saluto del tutto normale.

Per un software che legge i caratteri sottostanti, può esserci molto di più.

E questa differenza diventa particolarmente interessante quando la destinazione è un assistente IA.

Un’IA non vede il tuo messaggio come una foto dello schermo.

Elabora i caratteri.

Quindi qualcosa che non puoi vedere può comunque far parte dell’input.

Ecco come appare

Prendi questa frase:

Send the payment to the address below.

Sembra normale, vero?

Ora immagina che vi siano stati inseriti caratteri invisibili.

Sullo schermo può ancora apparire così, e questa è quella vera, preparata perché tu la provi:

Un esempio preparato · selezionalo, copialo, analizzalo

Send the​ payment⁠ to the​ address below.󠁨󠁩󠁤󠁤󠁥󠁮

caratteri visibili: 38caratteri reali: 47differenza: 9

Ma sotto, il computer potrebbe contenere caratteri aggiuntivi.

Per esempio:

La stessa frase, descritta

Cosa vedi:

Send the payment to the address below.

Cosa riceve il computer:

Send the invisible payment invisible … TAGS

La frase visibile non è cambiata.

La stringa sottostante sì.

È questa l’idea importante.

Stesso aspetto. Dati diversi.

Se passi l’esempio preparato in uno scanner, lo scanner può identificare quei caratteri anche se i tuoi occhi non ci riescono.

Riscrivi a mano la frase visibile e quei caratteri nascosti non vengono con lei.

È tutto il trucco.

La lettera che non è la lettera

I caratteri invisibili non sono l’unico problema.

A volte il carattere si vede benissimo.

Solo che non è il carattere che pensi.

Guarda questi due:

Stessa forma · caratteri diversi

savesavesave

sаvesavesave

seconda stringa, 2° carattere: cirillico U+0430non il latino U+0061

Sono quasi impossibili da distinguere.

Ma guarda bene il secondo.

Il secondo carattere non è la lettera latina a.

È una а cirillica.

Si somigliano.

Sono caratteri diversi.

Questa tecnica si chiama attacco con omoglifi.

La stessa idea si può usare con nomi utente, nomi di dominio, nomi di token e altri identificativi.

Un account falso può usare un carattere sosia.

Un sito falso può usare un dominio sosia.

Per una persona il nome può sembrare familiare.

Per un computer è una stringa completamente diversa.

Dove può causare problemi davvero?

Non è solo una stranezza di Unicode.

Conta ovunque un testo venga copiato, confrontato o usato per agire.

Assistenti IA

Incolli un messaggio in un assistente IA.

Vedi una domanda.

Il testo sottostante può contenere caratteri che non vedi.

Poiché l’assistente elabora il testo reale, e non solo il suo aspetto, quei caratteri diventano parte dell’input.

Per questo i controlli sui caratteri invisibili possono essere utili prima di incollare un testo non affidabile in un sistema che può agire o trattare informazioni sensibili.

Nomi utente e nomi di account

Due account possono sembrare avere lo stesso nome pur contenendo caratteri diversi.

Questo rende un’impersonificazione molto più difficile da notare.

Link e domini

Un link può contenere caratteri che somigliano a lettere familiari.

Il nome che riconosci non è necessariamente il dominio esatto che pensi.

Codice

I caratteri di controllo della direzione e altri caratteri Unicode insoliti possono rendere più difficile revisionare correttamente il codice sorgente.

Chi sviluppa vede il testo mostrato.

Il compilatore vede i caratteri reali.

Ricerca e filtri

Un filtro di solito confronta stringhe.

Inserisci un carattere invisibile e la stringa cambia.

Può influire su ricerche, blocklist, sistemi di moderazione e altri strumenti che elaborano testo.

Come puoi controllare?

Non serve diventare esperti di Unicode.

Ci sono alcuni controlli semplici.

CONTROLLO 1: analizza il testo

Incolla il testo sospetto in uno scanner di sicurezza dei caratteri.

Uno scanner utile dovrebbe dirti:

È ciò che lo scanner di questo sito è pensato per mostrare.

L’importante è che ti dica cosa ha trovato davvero, invece di darti solo una misteriosa luce verde o rossa.

CONTROLLO 2: confronta il numero di caratteri

È un rapido controllo di buon senso.

Se una frase sembra avere 38 caratteri ma un contatore ne indica 47, c’è una differenza che vale la pena indagare.

Il numero di caratteri non ti dirà quali sono quelli in più.

Ma può dirti che c’è qualcosa che non vedi.

CONTROLLO 3: riscrivi il testo quando ha senso

Se qualcuno ti manda un’istruzione breve e non ti serve mantenere la formattazione originale, scrivere a mano la parte importante può eliminare i caratteri invisibili dal testo copiato.

Ma ricorda:

Riscriverlo non rende affidabile la destinazione.

Se qualcuno ti manda un indirizzo web sospetto, per esempio, scriverlo a mano non dimostra che il sito sia legittimo.

È solo un modo per evitare caratteri nascosti nel testo che copi.

CONTROLLO 4: leggi il dominio reale

Non affidarti solo all’aspetto di un dominio.

Se un link conta, controlla il dominio reale.

Per gli account importanti, usa un segnalibro già salvato o scrivi tu l’indirizzo noto invece di seguire un link inatteso.

Lo stesso principio vale per nomi utente e indirizzi di wallet:

riconoscere la forma non è la stessa cosa che verificare i caratteri.

Niente panico se trovi un carattere invisibile

Questo è importante.

Invisibile non significa automaticamente malevolo.

Alcuni caratteri Unicode invisibili esistono perché alle persone servono davvero.

I joiner a larghezza zero, per esempio, possono influire su come si uniscono i caratteri in vari sistemi di scrittura.

Si usano anche nelle sequenze di emoji.

I caratteri di controllo della direzione servono a mostrare correttamente un testo che mescola scritture da sinistra a destra e da destra a sinistra.

Quindi trovare un carattere invisibile non significa automaticamente:

«È un attacco.»

Significa:

Qui c’è qualcosa che non vedo.

Cosa significhi dipende dal contesto.

Chi ha inviato il testo?

Cosa ti chiede di fare il testo?

Dove stai per incollarlo?

Va in un assistente IA, un wallet, un sito, un terminale o un altro sistema che agirà di conseguenza?

Queste domande contano.

Il blocco Tags merita un’attenzione particolare

I caratteri Tags sono insoliti perché il loro scopo è rappresentare informazioni restando invisibili nella normale visualizzazione del testo.

Se uno sconosciuto ti manda un messaggio che ne contiene una sequenza inattesa, vale la pena indagare.

Uno scanner può rivelare che quei caratteri esistono e, quando è il caso, decodificare il testo che rappresentano.

Ma anche così, il rilevamento non ti dice l’intenzione del mittente.

Ti dice cosa c’è nel testo.

È una risposta molto più utile e difendibile.

Cosa ti dice un’analisi pulita, e cosa no

È un altro punto in cui gli strumenti di sicurezza devono essere onesti.

Uno scanner rileva caratteri.

Non legge nel pensiero.

Se lo scanner trova caratteri invisibili, può dirti quali sono.

Non può dirti chi li ha inseriti.

Non può dimostrare perché sono stati inseriti.

E se non trova niente, non significa che il messaggio sia affidabile.

Una frase dall’aspetto del tutto normale può comunque contenere una bugia, un link malevolo o un’istruzione pericolosa.

Allo stesso modo, un messaggio con un carattere invisibile può essere del tutto innocuo.

Anche il rilevamento automatico degli omoglifi ha dei limiti. Uno scanner può controllare caratteri sosia noti e set di caratteri noti, ma nessun controllo singolo va considerato una garanzia che siano stati trovati tutti gli inganni visivi possibili.

Il risultato ti dice cosa è stato rilevato.

Resta a te decidere cosa significa il testo e se ti fidi della sua fonte.

L’abitudine semplice che vale la pena prendere

Non devi aver paura di copiare e incollare.

Rallenta solo quando il testo che copi sta per far succedere qualcosa.

Un assistente IA.

Un wallet.

Un sito.

Una riga di comando.

Un account.

Una transazione finanziaria.

Un pezzo di codice.

Se il testo non l’hai scritto tu, non sai necessariamente tutto ciò che contiene.

E non devi indovinare.

Controlla i caratteri prima di lasciarli agire.

Ci vogliono pochi secondi.

E in molti casi il controllo è gratuito.


Questo articolo ha solo scopo educativo. Spiega come caratteri Unicode invisibili, controlli della direzione del testo e caratteri sosia possono influire sul testo digitale. L’esempio di questa pagina contiene caratteri invisibili inseriti di proposito perché tu possa esaminare il meccanismo. Il testo nascosto è innocuo ed esiste solo a scopo dimostrativo.

I caratteri invisibili sopravvivono al copia e incolla, quindi lo scanner li vede comunque. Per evitare di incollare, usa il segnalibro per analizzare il testo selezionato.