- Es ist möglich, beliebige Daten in einem einzelnen Emoji zu kodieren
- Unicode stellt Text als Sequenz von Codepoints dar, wobei jeder Codepoint eine Zahl ist, der das Unicode-Konsortium eine Bedeutung zuweist.
- Bei einfachem lateinischem Alphabettext gibt es eine Eins-zu-eins-Zuordnung zwischen Unicode-Codepoints und den auf dem Bildschirm angezeigten Zeichen.
- In anderen Schriftsystemen kann ein auf dem Bildschirm angezeigtes Zeichen durch mehrere Codepoints dargestellt werden.
- Variantenselektoren
- Unicode definiert 256 Codepoints, die als "Variantenselektoren" bezeichnet werden. Sie erscheinen für sich genommen nicht auf dem Bildschirm, werden aber verwendet, um die Darstellung des vorhergehenden Zeichens zu verändern.
- Die meisten Unicode-Zeichen haben keine Varianten, und Variantenselektoren sollten auch bei Umwandlungen erhalten bleiben.
- Die 256 Variantenselektoren bieten eine Möglichkeit, ein einzelnes Byte zu verstecken.
- Datenkodierung
- Durch das Aneinanderhängen von Variantenselektor-Sequenzen lassen sich beliebige Bytefolgen darstellen.
- So kann man zum Beispiel die Daten
[0x68, 0x65, 0x6c, 0x6c, 0x6f], die den Text "hello" repräsentieren, kodieren.
- Dazu werden Bytes in Variantenselektoren umgewandelt und dann an ein Basiszeichen angehängt.
- Datendekodierung
- Das Dekodieren ist ähnlich einfach wie das Kodieren.
- Durch die Umwandlung der Variantenselektoren zurück in Bytes lassen sich die ursprünglichen Daten wiederherstellen.
- Missbrauchspotenzial
- Da dies eine Zweckentfremdung von Unicode ist, wird es nicht empfohlen.
- Es könnte für bösartige Zwecke verwendet werden, etwa um menschliche Inhaltsfilter zu umgehen oder Wasserzeichen in Text einzubetten.
- Fazit
- Es wird erklärt, wie sich mit Emojis beliebige Daten verstecken lassen, indem Unicode-Variantenselektoren genutzt werden.
- Die Methode ist unterhaltsam, könnte für den praktischen Einsatz jedoch ungeeignet sein.
1 Kommentare
Hacker-News-Kommentare
Die PUA (Private Use Area) von Unicode ist für interne und benutzerdefinierte Zwecke gedacht und wird nicht an externe Systeme weitergegeben
Unicode zu missbrauchen ist nur die Spitze des Eisbergs
Aus früheren Penetrationstests erinnere ich mich daran, mit einfachen diakritischen Zeichen den Buffer eines Backend-Webservers zum Überlaufen gebracht zu haben
Sanity verwendet diese Technik, um Content Source Maps in den tatsächlichen Text einer Webseite zu kodieren
Die Idee, diese Technik zum Watermarking von LLM-Ausgaben zu verwenden, gefällt mir
StegCloak treibt diese Idee noch einen Schritt weiter, indem es den versteckten Payload mit AES-256-CTR verschlüsselt
Neben dem Watermarking von LLM-Ausgaben könnte man sie auch zum Verpacken von Log-Probability-Daten verwenden
Der Titel ist etwas irreführend
Der Tokenizer erkennt das
Bei einem früheren Arbeitgeber mussten wir wegen mehrerer Missbrauchsfälle Code Points verwenden, um die „Zeichen“ in Benutzernamen und Statusmeldungen zu zählen
Unicode-Tag-Zeichen spiegeln ASCII wider und sind in UI-Elementen oft unsichtbar
Es gibt einen realen Exploit-Fall, den Microsoft in Copilot behoben hat