Limitations du filtre EVE

EVE est un matcheur de motifs. Il décide si le texte d’un message correspond à une règle. Il est bon à cela, et la couche de symboles et d’évitement le rend tolérant à un large éventail d’astuces. Mais un matcheur de motifs a des limites dures et structurelles, et il est important d’être honnête à leur sujet avant de vous fier au filtre.

Cette page est délibérément sans détour. Un filtre survendu est un filtre auquel on fait confiance dans des situations qu’il ne peut pas gérer.

EVE correspond au texte de surface, pas au sens

La chose la plus importante à comprendre : EVE n’a aucune compréhension de ce qu’une personne a voulu dire. Il compare les caractères d’un message à des motifs. Il ne sait pas qui parle, de quoi porte la conversation, si un mot est cité, réapproprié, condamné ou employé sincèrement. Il voit du texte, et il décide si ce texte correspond à une règle.

Tout ce qui suit découle de ce seul fait.

Une correspondance est un blocage dur

Lorsqu’un message correspond à une règle, le résultat est binaire. Le filtre rapporte l’un d’un petit ensemble de résultats, et tout résultat autre que CLEAN bloque le message. Il n’y a pas de score, pas de « probablement », pas de crédit partiel qu’un système en aval puisse pondérer. Un message déclenche une règle ou non.

C’est une conception délibérée. Un filtre de chat doit prendre une décision instantanée et automatique sur chaque message, et un blocage dur est prévisible et rapide. Mais cela signifie aussi que le filtre n’a aucune marge pour la nuance au moment de la décision. Il ne peut pas laisser passer un message limite avec un avertissement, ni le retenir pour examen, de lui-même. Il bloque, ou non.

Il n’y a pas de terrain d’entente dans la correspondance elle-même

Une correspondance de règle est tout ou rien. Le filtre ne peut pas distinguer une véritable attaque d’un message innocent qui contient par hasard les mêmes lettres. Les deux déclenchent la règle, et les deux sont bloqués. Toute nuance doit venir de la manière dont votre serveur répond à un blocage, non de la correspondance.

Les deux conséquences d’un blocage dur et aveugle au sens sont les faux positifs et l’évitement. Ce sont les deux faces d’une même pièce : le filtre trace une ligne dans le texte, et toute ligne tracée dans le texte seul attrapera à la fois des messages innocents d’un côté et manquera des coupables de l’autre.

Faux positifs : le problème de Scunthorpe

Parce qu’EVE correspond aux lettres et non à l’intention, un message innocent qui contient par hasard une séquence de lettres interdite est bloqué exactement comme s’il s’agissait d’une attaque.

L’exemple classique donne son nom au problème. La ville anglaise de Scunthorpe contient en son milieu une séquence grossière de quatre lettres. Un filtre naïf qui cherche cette séquence bloque le nom de la ville, et par extension chaque lieu, patronyme ou mot qui la contient par hasard. Le mot est innocent ; les lettres ne le sont pas ; le filtre ne peut pas faire la différence, car il ne voit que les lettres.

Ce n’est pas un bug qui peut être entièrement corrigé. C’est le résultat direct de la correspondance de texte de surface. Chaque motif interdit est une affirmation qu’une suite de caractères est toujours mauvaise, et pour presque toute suite de ce genre, il existe un mot, un nom ou une phrase innocent qui la contient.

EVE réduit les faux positifs avec des outils ciblés :

  • Les listes never permettent à un motif d’exclure des mots innocents spécifiques qui le déclencheraient autrement. Une règle pour une insulte peut lister les mots inoffensifs qui partagent ses lettres et refuser de les faire correspondre.
  • Le conditionnement garde un motif agressif inerte à moins qu’une phrase déclencheuse ne soit présente à proximité, ou que le mot lui-même corresponde clairement, de sorte que le motif ne se déclenche que dans un contexte où une véritable correspondance est probable.
  • Les vetos permettent à un motif de se retirer lorsqu’une phrase qui signale un usage innocent est présente dans la ligne.

Ceux-ci aident, et ils sont utilisés abondamment dans les filtres livrés. Mais ce sont des rustines sur des motifs individuels, écrites à la main, un cas innocent à la fois. Ils ne peuvent pas anticiper chaque message innocent, et une liste never ne peut exclure que les mots auxquels son auteur a pensé. Les faux positifs sont réduits, non éliminés.

Les faux positifs sont inévitables

Tout filtre qui bloque du texte bloquera parfois du texte innocent. Les passes d’évitement agressives aggravent la chose, au lieu de l’améliorer : plus un motif est disposé à accepter d’orthographes, plus de mots innocents tombent dans son filet. Le réglage arbitre entre faux positifs et évitement, et aucun paramètre ne supprime les deux.

Évitement : orthographes et symboles inédits

L’autre face de la pièce. Les passes d’évitement défont des familles connues d’obfuscation : caractères sosies, entités HTML, orthographes étirées et ponctuées, transpositions, et mots scindés ou accolés. Au sein de ces familles, elles fonctionnent bien.

Mais elles ne peuvent défaire que les astuces que les tables et les règles connaissent déjà. Elles ne peuvent pas déduire l’intention, de sorte qu’un évitement véritablement inédit passe tout droit :

  • Une nouvelle orthographe qu’aucun motif ne couvre. Le langage, et l’argot en particulier, invente constamment de nouvelles orthographes. Un motif écrit aujourd’hui ne connaît pas le néologisme de demain.
  • Un sosie ou symbole absent de la table de repli. La table de confusables est vaste mais finie. Un caractère qu’elle ne liste pas n’est pas replié, et un emoji codé absent d’un tableau de symboles n’est pas attrapé.
  • Une substitution que les motifs n’anticipent pas. L’évitement est adversarial. Une fois qu’une astuce est connue et ajoutée, les utilisateurs passent à la suivante, et le filtre répond toujours à la dernière technique plutôt qu’à la prochaine.

C’est une course aux armements permanente, non un problème résolu. La couche d’évitement élève l’effort requis pour passer le filtre. Elle ne ferme pas, et ne peut pas fermer, chaque brèche, car fermer une brèche exige de connaître l’astuce spécifique à l’avance, et la correspondance de texte sans intention ne peut pas savoir cela.

Le filtre peut être contourné

Un utilisateur déterminé qui invente une orthographe ou un symbole que les motifs ne couvrent pas fera passer un message. Les passes d’évitement réduisent l’évitement occasionnel ; elles n’arrêtent pas une tentative inédite et délibérée. Ne traitez pas un résultat propre comme une preuve qu’un message est sûr.

Ce que cela signifie pour votre serveur

Utilisez le filtre pour ce qu’il est : une première ligne rapide et automatique qui attrape le courant et l’évident, et une grande partie de l’obfusqué. Ne le traitez pas comme un juge de l’intention ni comme une garantie complète.

  • Un blocage n’est pas une preuve de malveillance. Un message innocent peut déclencher une règle. Réfléchissez à la manière dont votre serveur répond à un blocage plutôt que de supposer que chaque blocage est une infraction sanctionnable.
  • Un résultat propre n’est pas une preuve de sécurité. Un message nuisible peut utiliser une orthographe ou un symbole que le filtre ne couvre pas. La modération humaine importe toujours.
  • Certaines catégories méritent de l’attention, non une sanction. Le filtre sépare les résultats qui peuvent indiquer un utilisateur en crise ou victime des infractions ordinaires aux règles, précisément pour qu’un serveur ne sanctionne pas automatiquement une personne qui pourrait avoir besoin d’aide. Honorez cette séparation.

Le filtre est un outil. Il gère le volume afin que les gens n’aient pas à lire chaque message, et il élimine les cas faciles. Les cas difficiles, ceux qui dépendent de ce qu’une personne a réellement voulu dire, restent l’affaire des humains, car juger l’intention est exactement ce qu’un matcheur de texte ne peut pas faire.