ASCII-smuggling: eerst populair voor AI-aanvallen, nu omarmd door spammers

Een slimme techniek die werd gebruikt om kwaadaardige prompts te verbergen in aanvallen op AI-agenten, is overgenomen door spammers. Zij gebruiken het om filters op e-mailplatforms te omzeilen die zijn ontworpen om ongewenste berichten in massacampagnes te markeren.

De techniek staat breed bekend als ASCII smuggling. Het trok twee jaar geleden de aandacht als een middel om een klasse AI-aanvallen, bekend als prompt injections, stealthiger te maken. Kwaadaardige instructies die in e-mails of andere onbetrouwbare inhoud worden ingebed om door een Large Language Model (LLM) te worden verwerkt, worden niet geschreven in gewone tekst. In plaats daarvan worden ze weergegeven door een speciaal bereik van Unicode-tags. Zo spiegelt de tag U+E0041 de letter "A", en U+E0061 spiegelt de letter "a".

Niet langer alleen voor prompt-injecties

Dit blok van 128 tags bootst een deel van de American Standard Code for Information Interchange (ASCII) bijna perfect na, met één groot verschil: de tekens die ze coderen zijn leesbaar voor computers, maar zijn per ontwerp bijna volledig onzichtbaar voor mensen. Door de kwaadaardige prompts in deze tags uit te drukken, detecteren LLM's de instructies, terwijl mensen die de e-mail lezen ze nooit zien.

Begin dit jaar zag Microsoft een enorme toename in spam berichten die deze techniek gebruikten. Op één dag in februari schoot het aantal gedetecteerde ASCII-smuggling-signatures door Microsoft Defender for Office omhoog van ongeveer 21.000 per dag naar meer dan 1,3 miljoen. Binnen vier dagen sprong dit aantal naar 2,5 miljoen. Deze vloedgolf hield maanden aan en nam vervolgens halverwege mei scherp af.

Microsoft legde afgelopen donderdag uit: "Omdat tag-tekens onzichtbaar zijn voor mensen maar bestaan op het niveau van tekstverwerking, maakt dezelfde eigenschap die ze nuttig maakt voor het smokkelen van instructies in een model, ze ook nuttig voor het maskeren van trefwoorden voordat een detector ze evalueert. De intentie is omgekeerd, maar het mechanisme is vergelijkbaar, waardoor de argwaan van een gebruiker niet wordt gewekt."

Hoe maskering werkt

Spammers bedden Unicode in een poging filters te omzeilen die zoeken naar specifieke tekst, zoals bedragen in dollars en woorden als "credit" en "term" die veel voorkomen in massale e-mails. Door onzichtbare tekst in het midden van een woord te plaatsen — bijvoorbeeld het woord "funding" — kunnen filters het woord lezen als "fun" en "ding". De ontvanger ziet echter gewoon het woord "funding".

Het gebruik van speciale tekst om bepaalde triggerwoorden te camoufleren is niet nieuw. Spammers maken al decennia gebruik van zero-width spaces en non-breaking spaces om vergelijkbare resultaten te bereiken. Deze tekens kunnen zoekopdrachten die matchen op een letterlijke string dwarsbomen en de bytevolgorde veranderen waar regex-filters naar zoeken.

De spammers hebben waarschijnlijk de verborgen Unicode-tags overgenomen omdat sommige spamfilters nog niet waren geprogrammeerd om deze te detecteren. Een belangrijkere reden is waarschijnlijk het tegengaan van de voordelen die mogelijk zijn gemaakt door machine learning (ML) en natural language processing (NLP) LLM's die worden ingezet voor spamdetectie.

Microsoft legt dit als volgt uit:

"De grootste prijs voor de aanvaller is echter niet het voorkomen van letterlijke string-matches; het zijn de ML- en NLP-gebaseerde modellen die moderne spam- en phishing-classificatie steeds vaker aansturen. Tenzij een filtersysteem een afbeelding van een bericht maakt en OCR-extractie uitvoert over het visuele beeld, kan het dit type aanval missen. Een standaard e-mailclassifier redeneert mogelijk niet over hele woorden precies zoals een mens dat doet; voor de efficiëntie splitsen ze tekst eerst in tokens of sub-woorddelen. Een schone lokterm zoals 'funding' kan worden weergegeven als een bekend token of een bekende reeks sub-tokens. Voeg echter een onzichtbare U+E0020 in het midden in, en de tokenizer ziet mogelijk datzelfde bekende onderdeel niet meer. Het zou de tekst kunnen splitsen in 'fun', een onverwacht tag-teken, en 'ding'; het zou zeldzame of onbekende sub-tokens kunnen produceren; of, als normalisatie eerst wordt uitgevoerd, verwijdert het simpelweg het U+E0020-teken, waardoor 'funding' overblijft."

Technische achtergrond: Het Unicode Tags-blok

De Unicode-standaard definieert binaire codepunten voor ongeveer 150.000 tekens uit talen over de hele wereld. Binnen dit enorme repertoire bevindt zich een blok van 128 tekens die parallel lopen aan ASCII-tekens, algemeen bekend als het Tags-blok.

Dit blok heeft een bewogen geschiedenis:

  • Taaltags: In een vroege versie van de Unicode-standaard was het bedoeld voor het maken van taaltags (zoals "en" voor Engels of "jp" voor Japans) om aan te geven in welke taal een tekst geschreven was. Alle codepunten in dit blok waren per ontwerp onzichtbaar. Dit plan werd later verlaten.
  • Regionale vlaggen: Later was er een plan om deze tekens te hergebruiken voor het representeren van landen (bijvoorbeeld "us" voor de Verenigde Staten). Deze tags konden worden toegevoegd aan een generieke vlag-emoji (🏴) om deze automatisch om te zetten in de officiële vlag van dat land (bijv. 🇺🇲 of 🇯🇵). Hoewel dit officieel is vastgelegd in Unicode 9.0 en Emoji 5.0, is deze functionaliteit niet breed geïmplementeerd op alle platforms.

Onderzoeker en prompt-engineer Riley Goodside ontdekte dat wanneer deze tags niet vergezeld gaan van een vlag-emoji, ze in de meeste gebruikersinterfaces helemaal niet worden weergegeven, maar nog steeds als tekst kunnen worden begrepen door sommige LLM's.