Simboli EVE ed evasione
I filtri catturano le parole, ma le persone che vogliono aggirare un filtro raramente digitano la parola semplice. Scambiano una a latina con una cirillica, agghindano le lettere con Unicode elaborato, avvolgono un insulto in entità HTML, spargono punteggiatura tra ogni lettera, o ricorrono agli emoji al posto delle parole. EVE, il motore di pattern matching dietro il filtro chat di Verité, ha un livello dedicato per annullare questi trucchi prima ancora che un messaggio venga testato contro una regola.
Questa pagina copre due sistemi correlati:
- La gestione dei simboli e dei glifi, inclusa la tabella di ripiegamento dei confondibili che mappa i caratteri simili a lettere semplici, e i tabelloni di simboli emoji che catturano significati codificati portati interamente da pittogrammi.
- I passaggi anti-evasione che normalizzano un messaggio prima del matching: ripiegamento degli omoglifi, rimozione delle entità, deoffuscamento, segmentazione e fingerprinting.
Per il linguaggio dei pattern in sé, vedi Il linguaggio EVE. Per un resoconto onesto di ciò che questo livello non può fare, leggi Limitazioni.
Come si inserisce la normalizzazione
Quando un messaggio arriva, EVE non fa il matching delle regole contro il testo grezzo. Prima espande il messaggio in un piccolo insieme di stringhe candidate normalizzate, poi testa le regole contro quelle. Un singolo messaggio diventa diverse letture: una che ripiega ogni carattere confondibile alla sua forma semplice, altre che mantengono un carattere ambiguo così com'è, e così via. Se un qualsiasi candidato corrisponde a una regola, il messaggio viene catturato.
Questo è il meccanismo che permette a un pattern scritto, redatto in semplice ASCII, di catturare una parola scritta con lettere greche, cirilliche, a larghezza intera o matematiche, senza che l'autore elenchi mai quelle grafie.
La tabella di ripiegamento dei confondibili
Il cuore della gestione dei simboli è la tabella di ripiegamento: una mappatura da una sorgente confondibile alle interpretazioni semplici in cui può ripiegarsi. Una sorgente è una sequenza grezza di uno o più code point Unicode. Un target è la stringa semplice in cui si ripiega, che può essere un singolo carattere, diversi caratteri (la sharp s si ripiega in ss) o la stringa vuota, che significa che la sorgente viene eliminata del tutto.
La tabella viene caricata una volta da un file di dati di runtime compilato da un corpus di confondibili. Quando nessuna tabella è caricata, un messaggio si ripiega solo su se stesso sotto la minuscolizzazione ASCII, quindi il ripiegamento degrada in modo sicuro anziché fallire.
Il matching è prima il più lungo
In ogni posizione del messaggio, EVE cerca la sorgente più lunga nella tabella che corrisponde in quel punto, preferendo più byte così che una costruzione multi-carattere prevalga sul suo primo carattere da solo. Questo è il modo in cui una lettera in ASCII-art costruita da diversi caratteri, o una sequenza emoji multi-code-point, viene riconosciuta come un'unità anziché come i suoi singoli pezzi.
Una sorgente, diverse letture
Un confondibile non è sempre univoco. Una sorgente può portare diversi target, e ciascuno è trattato come una lettura separata. Quando una sorgente ha più di un'interpretazione abilitata, EVE dirama un nuovo candidato per ciascuna, e mantiene anche la lettura originale intatta insieme a quelle ripiegate. Questo è importante: ripiegare un carattere in una lettera è un'ipotesi, e mantenere la lettura originale significa che un uso innocente di quel carattere non viene silenziosamente riscritto in una corrispondenza.
L'unica eccezione è un carattere la cui interpretazione canonica è la cancellazione. Una sorgente che canonicamente si ripiega nella stringa vuota, come un joiner a larghezza zero o un altro carattere invisibile, viene rimossa e i suoi byte originali non vengono risuscitati.
Livelli di provenienza
Non ogni ripiegamento è ugualmente affidabile. Ogni target porta con sé un livello che registra da dove proviene la mappatura, dal più autorevole al più aggressivo:
| Livello | Significato |
|---|---|
| Core autorevole | Ripiegamento canonico Unicode e di sicurezza, sempre sicuro da applicare. |
| Normalizzazione | Ripiegamento di normalizzazione canonica, sempre sicuro da applicare. |
| Testo documentato | Simboli che portano testo con una lettura semplice documentata. |
| Aggressivo raccomandato | Somiglianze più larghe raccomandate per il ripiegamento aggressivo. |
| Visivo aggressivo | Somiglianze visive sotto ripiegamento aggressivo. |
| ASCII aggressivo | Somiglianze ASCII sotto ripiegamento aggressivo. |
| Visivo legacy, ASCII legacy | Alias trasportati da una tabella precedente. |
| Traslitterazione | Traslitterazione semantica tra scritture. |
| Visivo da font (strict, standard, esplorativo) | Somiglianze trovate scansionando i font renderizzati, dalla più stretta alla più larga. |
| Coppia ASCII da font (standard, esplorativo) | Somiglianze ASCII trovate scansionando i font renderizzati. |
I due livelli canonici, core autorevole e normalizzazione, vengono sempre applicati. Ogni altro livello è euristico in qualche misura ed è abilitato solo quando il ripiegamento aggressivo è attivato. Una maschera di livello permette alle interpretazioni aggressive di essere abilitate o soppresse indipendentemente da quelle sicure.
I livelli vengono anche provati in ordine, prima il più affidabile. EVE limita quanto un singolo messaggio possa diramarsi in candidati così che un messaggio costruito ad arte non possa far esplodere l'insieme dei candidati. Quando quel limite viene raggiunto, i candidati sopravvissuti favoriscono le letture canoniche, perché quelle sono state generate per prime.
La cancellazione è solo un altro ripiegamento
Rimuovere un carattere invisibile e ripiegare una somiglianza sono la stessa operazione. Un carattere che si ripiega nella stringa vuota viene eliminato; un carattere che si ripiega in una lettera semplice viene riscritto. Entrambi vivono in una sola tabella, quindi non c'è un elenco separato di caratteri da rimuovere.
Classi di caratteri nei pattern
Separatamente dalla tabella di ripiegamento, i pattern EVE possono nominare le proprie classi: un insieme con nome di frammenti intercambiabili che un pattern referenzia per nome. Una classe viene definita una volta e riutilizzata, quindi un pattern può, per esempio, trattare qualsiasi vocale come intercambiabile in una posizione. Questo è il modo in cui un autore scrive la tolleranza alla variazione di grafia direttamente in una regola, distinta dal ripiegamento automatico dei confondibili descritto sopra.
Il matching rilassato usa anche una classe di vocali integrata, permettendo a un pattern di tollerare sostituzioni comuni di vocali come gli scambi leetspeak senza che l'autore ne enumeri ciascuno.
Le classi sono uno strumento di scrittura per la variazione di grafia all'interno di una regola. La tabella di ripiegamento è un passaggio a livello di motore che viene eseguito su ogni messaggio prima che qualsiasi regola venga testata. Si completano a vicenda: la tabella di ripiegamento mappa un carattere elaborato in uno semplice, e una classe permette alla regola semplice di accettare diverse grafie semplici.
Tabelloni di simboli: emoji e iconografia
Alcuni contenuti non portano lettere affatto. Un singolo emoji, o una coppia ordinata di emoji, può stare al posto di una frase. EVE gestisce questo con due tipi di regola scritti nei file di filtro dei simboli.
Poiché qualsiasi byte non ASCII è trattato come materiale di parola, un glifo letterale come un emoji o un simbolo forma il proprio token delimitato. Una regola scritta con uno può iniziare, terminare ed essere delimitata come una parola, senza cambiare il modo in cui le lettere vengono gestite e senza influenzare i messaggi ASCII semplici.
Regole a simbolo intero
Una regola a simbolo intero si attiva quando un glifo specifico appare nel messaggio. Può elencare diversi glifi intercambiabili come alias, così che le varianti visive dello stesso simbolo attivino tutte l'unica regola. Queste catturano l'iconografia usata come segnale codificato.
HEAR rule
AS
ALIAS(卐)
卍(WHOLE)
NOTE(Hate symbols, swastika and Tibetan variants)Regole di sequenza
Una regola di sequenza si attiva quando un insieme ordinato di passaggi di glifi appare tutto, in ordine, da qualche parte nel messaggio, con qualsiasi contenuto permesso tra di essi. Corrisponde a una sottosequenza ordinata anziché a una serie contigua, quindi il riempimento tra gli emoji non la sconfigge. Ogni passaggio può accettare uno qualsiasi di un insieme di glifi intercambiabili, permettendo a un singolo passaggio di stare al posto di un'intera famiglia di simboli con lo stesso significato.
Una sequenza può essere marcata come mirrored, nel qual caso viene accettato anche l'ordine inverso. Questo è il modo in cui una coppia il cui significato sopravvive in entrambe le disposizioni viene scritta come una regola, mentre una sequenza sensibile all'ordine non lo è.
SEQUENCE rule
AS
MIRROR
🍑👋
NOTE(Appears in both orders)I glifi in una sequenza vengono corrisposti come letterali esatti, non come pattern fuzzy, perché un simbolo non ha varianti di grafia da tollerare.
I passaggi anti-evasione
Il plugin espone il comportamento di normalizzazione come un insieme di interruttori sotto chat.filter.advanced.evasion. Ogni passaggio prende di mira una famiglia di evasione. Tutti sono abilitati per impostazione predefinita. Disabilitare un passaggio può risparmiare qualche microsecondo di latenza al costo di catturare meno.
evasion:
homoglyph: true
entity: true
deobfuscate: true
segmentation: true
fingerprint: truehomoglyph
Applica la tabella di ripiegamento dei confondibili descritta sopra: caratteri a larghezza intera, cirillici, greci, matematici e altri simili vengono ripiegati alle loro forme ASCII semplici così che una regola scritta in lettere semplici catturi la grafia contraffatta. Questo passaggio rimuove anche i caratteri invisibili e ignorabili che si ripiegano nel nulla.
entity
Rimuove i riferimenti di carattere HTML prima del matching. Ogni riferimento numerico (decimale o esadecimale) e ogni riferimento con nome che termina con un punto e virgola viene sostituito con un singolo spazio, così che un insulto nascosto dentro una codifica di entità non possa far passare le sue lettere oltre il filtro. Un messaggio senza ampersand viene lasciato invariato.
deobfuscate
Annulla due trucchi correlati. La riduzione delle serie comprime una grafia allungata, limitando una serie della stessa lettera così che una serie di vocali esagerata si riduca alla sua forma canonica breve e una regola corrisponda a ogni variante allungata. La rimozione densa rileva una parola imbottita con un singolo carattere riempitivo ripetuto tra le sue lettere, come un insulto scritto con un punto o un trattino tra ogni lettera, e ricompatta le lettere. Il passaggio denso limita la lunghezza recuperata e il numero di spazi così che non possa scappare su input lunghi, e si applica solo quando il riempitivo appare almeno due volte.
segmentation
Gestisce una parola che è stata divisa o unita alle parole circostanti, così che una frase scritta come un'unica serie solida, o una singola parola spezzata tra spazi, venga comunque testata come la parola voluta.
fingerprint
Cattura la trasposizione, dove le lettere interne di una parola sono mescolate. EVE riduce una parola a una firma costruita dalla sua prima lettera, dalla sua ultima lettera, dalla sua lunghezza e dal multiinsieme ordinato delle sue lettere interne. Due parole che condividono questi producono la stessa firma, quindi un insulto con le lettere centrali mescolate si mappa allo stesso fingerprint dell'originale e viene catturato.
Ogni passaggio ha limiti
Questi passaggi annullano famiglie note di offuscamento. Non comprendono un messaggio, e non possono anticipare una grafia o un simbolo che non è nelle loro tabelle. Un'evasione nuova che le tabelle non coprono passa intatta. Vedi Limitazioni per un resoconto completo.