2 Punkte von GN⁺ 2025-02-13 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2025-02-13
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

    • Die meisten Systeme und Bibliotheken sind so ausgelegt, dass sie diese unverändert durchreichen
    • Das kann ein potenzieller Kanal für Datenabfluss sein
    • Die meisten Entwickler wissen darüber kaum mehr als „verwende immer Unicode, um Internationalisierungsprobleme zu vermeiden“
  • Unicode zu missbrauchen ist nur die Spitze des Eisbergs

    • In Systemen, die Unicode-Strings akzeptieren, kann man damit Buffer Overflows auslösen
    • Meist führt das zu Fehlern oder Abstürzen, manchmal aber auch zu unerwartet interessanten Ergebnissen
  • Aus früheren Penetrationstests erinnere ich mich daran, mit einfachen diakritischen Zeichen den Buffer eines Backend-Webservers zum Überlaufen gebracht zu haben

    • Meist brachte das den Server zum Absturz, worauf er automatisch neu startete, aber mit genug Feintuning ließen sich bestimmte Systeme oder Software womöglich ausnutzen
  • Sanity verwendet diese Technik, um Content Source Maps in den tatsächlichen Text einer Webseite zu kodieren

    • Dadurch können Editoren auf Text klicken und die Content-Struktur leicht zurückverfolgen
    • Bei Dingen wie Datum, URL oder ID, die geparst werden müssen, sollte man es besser nicht hinzufügen
  • Die Idee, diese Technik zum Watermarking von LLM-Ausgaben zu verwenden, gefällt mir

    • Damit ließen sich 99 % der Copy-paste-Generatoren leicht erkennen
    • Ich frage mich, wie viele Informationen man pro Zeichen oder Token einbetten kann
  • 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

    • Man könnte Wahrscheinlichkeitsinformationen für jedes Token einbetten, um Transparenz über den Generierungsprozess zu schaffen
    • Das ist Teil der OpenAI-API-Spezifikation und wird auch von anderen Engines unterstützt
  • Der Titel ist etwas irreführend

    • Das Basiszeichen muss kein Emoji sein, und Variation Selectors werden bei normalen Zeichen genauso behandelt
    • Mit Emojis macht es nur mehr Spaß
  • 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

    • Ich wollte nicht 9 MB herunterladen müssen, nur um andere Nutzer zu durchsuchen
  • Unicode-Tag-Zeichen spiegeln ASCII wider und sind in UI-Elementen oft unsichtbar

    • Manche LLMs interpretieren versteckten Text als ASCII und folgen den Anweisungen, sie können ihn sogar selbst schreiben
  • Es gibt einen realen Exploit-Fall, den Microsoft in Copilot behoben hat