EVE-Symbole und Umgehung

Filter fangen Wörter ab, aber Leute, die an einem Filter vorbeiwollen, tippen selten das schlichte Wort. Sie tauschen ein lateinisches a gegen ein kyrillisches, kleiden die Buchstaben in ausgefallenem Unicode, wickeln eine Beleidigung in HTML-Entities, streuen Interpunktion zwischen jeden Buchstaben oder greifen zu Emoji statt zu Wörtern. EVE, die Mustererkennungs-Engine hinter dem Verité-Chatfilter, hat eine dedizierte Ebene, um diese Tricks rückgängig zu machen, bevor eine Nachricht überhaupt gegen eine Regel getestet wird.

Diese Seite behandelt zwei verwandte Systeme:

  • Die Symbol- und Glyphen-Behandlung, einschließlich der Verwechselbarkeitsfalttabelle, die ähnlich aussehende Zeichen zurück auf schlichte Buchstaben abbildet, und der Emoji-Symbol-Boards, die codierte Bedeutung abfangen, die vollständig in Piktogrammen getragen wird.
  • Die Umgehungsdurchläufe, die eine Nachricht vor dem Matching normalisieren: Homoglyphenfaltung, Entfernung von Entities, Deobfuskation, Segmentierung und Fingerprinting.

Für die Mustersprache selbst siehe Die EVE-Sprache. Für eine ehrliche Darstellung dessen, was diese Ebene nicht kann, lies Einschränkungen.

Wie sich die Normalisierung einfügt

Wenn eine Nachricht ankommt, matcht EVE Regeln nicht gegen den Rohtext. Es expandiert die Nachricht zuerst in einen kleinen Satz normalisierter Kandidatenstrings und testet dann die Regeln gegen diese. Eine einzelne Nachricht wird zu mehreren Lesarten: eine, die jedes verwechselbare Zeichen auf seine schlichte Form faltet, andere, die ein mehrdeutiges Zeichen unverändert lassen, und so weiter. Wenn irgendein Kandidat eine Regel trifft, wird die Nachricht abgefangen.

Dies ist der Mechanismus, der es einem verfassten Muster, das in schlichtem ASCII geschrieben ist, erlaubt, ein Wort abzufangen, das mit griechischen, kyrillischen, Fullwidth- oder mathematischen Buchstaben geschrieben ist, ohne dass der Autor diese Schreibweisen jemals aufführt.

Die Verwechselbarkeitsfalttabelle

Das Herz der Symbolbehandlung ist die Falttabelle: eine Abbildung von einer verwechselbaren Quelle auf die schlichten Interpretationen, auf die sie falten kann. Eine Quelle ist eine rohe Folge eines oder mehrerer Unicode-Codepunkte. Ein Ziel ist der schlichte String, auf den sie faltet, der ein einzelnes Zeichen, mehrere Zeichen (das scharfe s faltet zu ss) oder der leere String sein kann, was bedeutet, dass die Quelle gänzlich gelöscht wird.

Die Tabelle wird einmal aus einer Laufzeit-Datendatei geladen, die aus einem Verwechselbarkeitskorpus kompiliert wurde. Wenn keine Tabelle geladen ist, faltet eine Nachricht nur auf sich selbst unter ASCII-Kleinschreibung, sodass die Faltung sicher abbaut, statt zu scheitern.

Matching ist längstes zuerst

An jeder Position in der Nachricht sucht EVE nach der längsten Quelle in der Tabelle, die dort trifft, und bevorzugt mehr Bytes, sodass eine Mehrzeichenkonstruktion über ihr erstes Zeichen allein gewinnt. So wird ein aus mehreren Zeichen gebauter ASCII-Art-Buchstabe oder eine Mehrcodepunkt-Emoji-Folge als eine Einheit statt als ihre einzelnen Stücke erkannt.

Eine Quelle, mehrere Lesarten

Eine Verwechselbarkeit ist nicht immer eindeutig. Eine Quelle kann mehrere Ziele tragen, und jedes wird als separate Lesart behandelt. Wenn eine Quelle mehr als eine aktivierte Interpretation hat, forkt EVE einen neuen Kandidaten für jede und behält auch die ursprüngliche unberührte Lesart neben den gefalteten. Das ist wichtig: das Falten eines Zeichens zu einem Buchstaben ist eine Vermutung, und das Behalten der ursprünglichen Lesart bedeutet, dass eine unschuldige Verwendung dieses Zeichens nicht stillschweigend in einen Treffer umgeschrieben wird.

Die eine Ausnahme ist ein Zeichen, dessen kanonische Interpretation Löschung ist. Eine Quelle, die kanonisch auf den leeren String faltet, etwa ein Zero-Width-Joiner oder ein anderes unsichtbares Zeichen, wird entfernt und ihre ursprünglichen Bytes werden nicht wiederbelebt.

Herkunftsstufen

Nicht jede Faltung ist gleich vertrauenswürdig. Jedes Ziel trägt eine Stufe, die aufzeichnet, woher die Abbildung stammt, von der maßgeblichsten bis zur aggressivsten:

Stufe Bedeutung
Authoritative core Kanonische Unicode- und Sicherheitsfaltung, immer sicher anzuwenden.
Normalization Kanonische Normalisierungsfaltung, immer sicher anzuwenden.
Documented text Texttragende Symbole mit einer dokumentierten schlichten Lesart.
Recommended aggressive Lockerere Ähnlichkeiten, empfohlen für aggressive Faltung.
Aggressive visual Visuelle Ähnlichkeiten unter aggressiver Faltung.
Aggressive ASCII ASCII-Ähnlichkeiten unter aggressiver Faltung.
Legacy visual, legacy ASCII Aus einer früheren Tabelle übernommene Aliase.
Transliteration Semantische Skript-Transliteration.
Font visual (strict, standard, exploratory) Ähnlichkeiten, gefunden durch das Scannen gerenderter Schriftarten, von am engsten bis am lockersten.
Font ASCII pair (standard, exploratory) ASCII-Ähnlichkeiten, gefunden durch das Scannen gerenderter Schriftarten.

Die beiden kanonischen Stufen, Authoritative core und Normalization, werden immer angewendet. Jede andere Stufe ist bis zu einem gewissen Grad heuristisch und wird nur aktiviert, wenn die aggressive Faltung eingeschaltet ist. Eine Stufenmaske lässt die aggressiven Interpretationen unabhängig von den sicheren aktivieren oder unterdrücken.

Stufen werden auch der Reihe nach probiert, die vertrauenswürdigste zuerst. EVE begrenzt, wie weit eine einzelne Nachricht in Kandidaten auffächern darf, damit eine gezielt gestaltete Nachricht den Kandidatensatz nicht explodieren lassen kann. Wenn diese Grenze erreicht ist, bevorzugen die überlebenden Kandidaten die kanonischen Lesarten, weil diese zuerst erzeugt wurden.

Löschung ist nur eine weitere Faltung

Das Entfernen eines unsichtbaren Zeichens und das Falten einer Ähnlichkeit sind dieselbe Operation. Ein Zeichen, das auf den leeren String faltet, wird gelöscht; ein Zeichen, das auf einen schlichten Buchstaben faltet, wird umgeschrieben. Beide leben in einer Tabelle, es gibt also keine separate Liste von Zeichen, die zu entfernen sind.

Zeichenklassen in Mustern

Getrennt von der Falttabelle können EVE-Muster ihre eigenen Klassen benennen: einen benannten Satz austauschbarer Fragmente, den ein Muster per Name referenziert. Eine Klasse wird einmal definiert und wiederverwendet, sodass ein Muster zum Beispiel jeden Vokal an einer Position als austauschbar behandeln kann. So schreibt ein Autor Toleranz für Schreibvariation direkt in eine Regel, verschieden von der automatischen Verwechselbarkeitsfaltung, die oben beschrieben ist.

Das gelockerte Matching verwendet auch eine eingebaute Vokalklasse, die es einem Muster erlaubt, gängige Vokalsubstitutionen wie Leetspeak-Tausche zu tolerieren, ohne dass der Autor jede einzeln aufzählt.

Klassen sind ein Verfassungswerkzeug für Schreibvariation innerhalb einer Regel. Die Falttabelle ist ein engineweiter Durchlauf, der auf jede Nachricht läuft, bevor irgendeine Regel getestet wird. Sie ergänzen einander: die Falttabelle bildet ein ausgefallenes Zeichen auf ein schlichtes ab, und eine Klasse lässt die schlichte Regel mehrere schlichte Schreibweisen akzeptieren.

Symbol-Boards: Emoji und Ikonografie

Manche Inhalte tragen überhaupt keine Buchstaben. Ein einzelnes Emoji oder ein geordnetes Paar von Emoji kann für einen Ausdruck stehen. EVE behandelt dies mit zwei Regelarten, die in Symbol-Filterdateien verfasst werden.

Weil jedes Nicht-ASCII-Byte als Wortmaterial behandelt wird, bildet eine literale Glyphe wie ein Emoji oder ein Symbol ihr eigenes begrenztes Token. Eine mit einer solchen geschriebene Regel kann wie ein Wort beginnen, enden und begrenzt werden, ohne zu ändern, wie Buchstaben behandelt werden, und ohne reine ASCII-Nachrichten zu beeinflussen.

Ganzsymbol-Regeln

Eine Ganzsymbol-Regel feuert, wenn eine bestimmte Glyphe in der Nachricht erscheint. Sie kann mehrere austauschbare Glyphen als Aliase auflisten, sodass visuelle Varianten desselben Symbols alle die eine Regel auslösen. Diese fangen Ikonografie ab, die als codiertes Signal verwendet wird.

HEAR rule
AS
  ALIAS(卐)
  卍(WHOLE)
  NOTE(Hate symbols, swastika and Tibetan variants)

Sequence-Regeln

Eine Sequence-Regel feuert, wenn ein geordneter Satz von Glyphenschritten alle der Reihe nach irgendwo in der Nachricht erscheint, wobei beliebiger Inhalt dazwischen erlaubt ist. Sie trifft eine geordnete Teilfolge statt eines zusammenhängenden Laufs, sodass Auffüllung zwischen den Emoji sie nicht besiegt. Jeder Schritt kann einen beliebigen aus einem Satz austauschbarer Glyphen akzeptieren, sodass ein einzelner Schritt für eine ganze Familie von Symbolen mit derselben Bedeutung stehen kann.

Eine Sequence kann als gespiegelt markiert werden, in welchem Fall auch die umgekehrte Reihenfolge akzeptiert wird. So wird ein Paar, dessen Bedeutung beide Anordnungen überlebt, als eine Regel geschrieben, während eine reihenfolgesignifikante Sequenz es nicht wird.

SEQUENCE rule
AS
  MIRROR
  🍑👋
  NOTE(Appears in both orders)

Glyphen in einer Sequence werden als exakte Literale getroffen, nicht als Fuzzy-Muster, weil ein Symbol keine Schreibvarianten hat, die zu tolerieren wären.

Die Umgehungsdurchläufe

Das Plugin stellt das Normalisierungsverhalten als einen Satz von Schaltern unter chat.filter.advanced.evasion bereit. Jeder Durchlauf zielt auf eine Familie von Umgehung. Alle sind standardmäßig aktiviert. Das Deaktivieren eines Durchlaufs kann ein paar Mikrosekunden Latenz sparen, auf Kosten davon, weniger abzufangen.

evasion:
  homoglyph: true
  entity: true
  deobfuscate: true
  segmentation: true
  fingerprint: true

homoglyph

Wendet die oben beschriebene Verwechselbarkeitsfalttabelle an: Fullwidth-, kyrillische, griechische, mathematische und andere ähnlich aussehende Zeichen werden zurück auf ihre schlichten ASCII-Formen gefaltet, sodass eine in schlichten Buchstaben geschriebene Regel die gefälschte Schreibweise abfängt. Dieser Durchlauf entfernt auch die unsichtbaren und ignorierbaren Zeichen, die auf nichts falten.

entity

Entfernt HTML-Zeichenreferenzen vor dem Matching. Jede numerische Referenz (dezimal oder hexadezimal) und jede benannte Referenz, die auf ein Semikolon endet, wird durch ein einzelnes Leerzeichen ersetzt, sodass eine in Entity-Kodierung versteckte Beleidigung ihre Buchstaben nicht am Filter vorbeischmuggeln kann. Eine Nachricht ohne Ampersand bleibt unverändert.

deobfuscate

Macht zwei verwandte Tricks rückgängig. Laufreduktion reduziert eine gedehnte Schreibweise, indem sie einen Lauf desselben Buchstabens begrenzt, sodass ein übertriebener Vokallauf auf seine kurze kanonische Form reduziert wird und eine Regel jede gedehnte Variante trifft. Dense Stripping erkennt ein Wort, das mit einem einzelnen wiederholten Füllzeichen zwischen seinen Buchstaben aufgefüllt ist, etwa eine Beleidigung, die mit einem Punkt oder Bindestrich zwischen jedem Buchstaben geschrieben ist, und zieht die Buchstaben wieder zusammen. Der Dense-Durchlauf begrenzt die wiederhergestellte Länge und die Anzahl der Lücken, sodass er bei langer Eingabe nicht ausufern kann, und er wird nur angewendet, wenn der Füller mindestens zweimal erscheint.

segmentation

Behandelt ein Wort, das gegen die umgebenden Wörter auseinandergerissen oder zusammengeschrieben wurde, sodass ein Ausdruck, der als ein durchgehender Lauf geschrieben ist, oder ein einzelnes Wort, das über Leerzeichen aufgebrochen ist, dennoch als das beabsichtigte Wort getestet wird.

fingerprint

Fängt Transposition ab, bei der die inneren Buchstaben eines Worts durcheinandergebracht sind. EVE reduziert ein Wort auf eine Signatur, die aus seinem ersten Buchstaben, seinem letzten Buchstaben, seiner Länge und der sortierten Multimenge seiner inneren Buchstaben gebaut ist. Zwei Wörter, die diese teilen, erzeugen dieselbe Signatur, sodass eine Beleidigung mit ihren mittleren Buchstaben durchgemischt auf denselben Fingerprint wie das Original abbildet und abgefangen wird.

Jeder Durchlauf hat Grenzen

Diese Durchläufe machen bekannte Familien von Verschleierung rückgängig. Sie verstehen eine Nachricht nicht, und sie können eine Schreibweise oder ein Symbol nicht vorhersehen, das nicht in ihren Tabellen ist. Eine neuartige Umgehung, die die Tabellen nicht abdecken, geht unberührt durch. Siehe Einschränkungen für eine vollständige Darstellung.