Zurück zum Blog
security||9 Min. Lesezeit

Ich habe eine geheime Nachricht in einem Katzenfoto versteckt und sechs Monate lang hat es niemand bemerkt

AR
Aral Roca

Ersteller von Kitmul

Eine Katze blickt direkt in die Kamera; dieses Bild enthält eine versteckte Nachricht die mit LSB-Steganographie eingebettet wurde
Eine Katze blickt direkt in die Kamera; dieses Bild enthält eine versteckte Nachricht die mit LSB-Steganographie eingebettet wurde

Letztes Jahr bin ich bei einem CTF auf eine Steganographie-Aufgabe gestossen, bei der ich zwei Stunden lang ein Katzenfoto angestarrt habe. Das Bild sah voellig normal aus; 800x600 Pixel einer orangefarbenen Tigerkatze, die auf einer Tastatur sass. Keine Metadaten-Anomalien, keine angehaengten ZIP-Dateien, keine offensichtlichen Artefakte. Die Flagge versteckte sich in den niederwertigsten Bits des Blaukanals. Nach der Extraktion war die Nachricht 43 Zeichen lang. Die Katze hatte sich kein bisschen veraendert.

Diese Erfahrung hat mich in einen Kaninchenbau gefuehrt. Steganographie ist eines dieser Themen, die nach Hacker-Fiktion aus Filmen klingen, bis man es tatsaechlich ausprobiert. Dann merkt man, dass es einfach Mathematik ist; und ueberraschend einfache Mathematik dazu.

Was Steganographie wirklich ist

Steganographie ist die Praxis, Daten in anderen Daten zu verbergen, sodass niemand von der Existenz der versteckten Daten weiss. Das unterscheidet sich grundlegend von Kryptographie. Verschluesselung macht eine Nachricht unlesbar; Steganographie verbirgt die Nachricht so, dass niemand ueberhaupt danach sucht.

Dieser Unterschied ist entscheidend. Eine verschluesselte Datei schreit foermlich "Ich habe Geheimnisse!". Ein Stego-Bild sagt nichts. Es ist ein Foto einer Katze. Oder eines Sonnenuntergangs. Oder Ihres Firmenlogos. Die beste Steganographie erzeugt Traegerdateien, die statistisch nicht von unveraenderten Originalen zu unterscheiden sind.

Das Wort selbst stammt aus dem Griechischen: steganos (bedeckt) + graphein (schreiben). Die Technik gibt es seit dem antiken Griechenland; Herodot berichtete von einem Mann, der den Kopf eines Sklaven rasierte, eine Nachricht auf die Kopfhaut taetowierte, wartete bis die Haare nachgewachsen waren, und den Sklaven dann als Boten schickte. Seitdem sind wir zu Pixeln uebergegangen.

Wie LSB-Kodierung funktioniert

Die gaengigste Technik der Bildsteganographie ist die Least Significant Bit (LSB)-Kodierung. Hier ist der Grund, warum sie funktioniert.

Ein Pixel in einem 24-Bit-RGB-Bild hat drei Farbkanaele, die jeweils als 8-Bit-Wert (0-255) gespeichert werden. Das letzte Bit jedes Bytes; das niederwertigste Bit; traegt die kleinstmoegliche Aenderung zum Farbwert bei. Sein Umschalten aendert den Kanalwert um genau 1. Der Unterschied zwischen RGB(142, 87, 203) und RGB(143, 87, 202) ist fuer das menschliche Auge unsichtbar.

Man nimmt also seine geheime Nachricht, wandelt sie in Binaercode um und ersetzt die LSBs der Bildpixel durch die Nachrichtenbits. Jedes Pixel liefert 3 Bits Speicherplatz (eines pro Kanal). Ein 1920x1080-Bild hat 2.073.600 Pixel; das sind 6.220.800 Bits Speicherplatz, also rund 760 KB an versteckten Daten. In der Praxis wuerde man deutlich weniger nutzen, um einer Erkennung zu entgehen, aber die theoretische Kapazitaet ist enorm.

Hier ist eine minimale Python-Implementierung zur Veranschaulichung:

from PIL import Image
import numpy as np

def text_to_bits(text):
    """Convert text to a binary string with a null terminator."""
    bits = ''.join(format(ord(c), '08b') for c in text)
    bits += '00000000'  # null terminator to mark end of message
    return bits

def hide_message(image_path, message, output_path):
    """Hide a message in the LSBs of an image."""
    img = Image.open(image_path).convert('RGB')
    pixels = np.array(img)
    flat = pixels.flatten()

    bits = text_to_bits(message)
    if len(bits) > len(flat):
        raise ValueError(f"Message too long: need {len(bits)} bits, have {len(flat)}")

    for i, bit in enumerate(bits):
        # Clear the LSB, then set it to our message bit
        flat[i] = (flat[i] & 0xFE) | int(bit)

    stego = flat.reshape(pixels.shape)
    Image.fromarray(stego.astype('uint8')).save(output_path, 'PNG')
    print(f"Hidden {len(message)} chars in {len(bits)} bits ({len(bits)/len(flat)*100:.4f}% of capacity)")

def extract_message(image_path):
    """Extract a hidden message from the LSBs of an image."""
    img = Image.open(image_path).convert('RGB')
    flat = np.array(img).flatten()

    bits = ''.join(str(b & 1) for b in flat)
    chars = []
    for i in range(0, len(bits), 8):
        byte = bits[i:i+8]
        if byte == '00000000':
            break
        chars.append(chr(int(byte, 2)))
    return ''.join(chars)

# Usage
hide_message('cat.png', 'The flag is CTF{hidden_in_plain_sight}', 'stego_cat.png')
print(extract_message('stego_cat.png'))

Die entscheidende Operation steht in Zeile 18: (flat[i] & 0xFE) | int(bit). Das bitweise UND mit 0xFE (11111110 im Binaersystem) loescht das LSB, und das ODER setzt es auf das jeweilige Bit unserer Nachricht. Das ist der gesamte Trick. Alles andere ist nur die Umwandlung von Text in Bits und das Iterieren ueber Pixel.

Eine Nachricht Schritt fuer Schritt verstecken

Falls Sie kein Python schreiben moechten; oder an einem Rechner sitzen, auf dem PIL nicht installiert werden kann; erledigt das Steganographie-Tool auf Kitmul dasselbe direkt im Browser. Kein Hochladen, keine Serververarbeitung. Das Bild verlaesst niemals Ihr Geraet.

So funktioniert der Ablauf:

  1. Laden Sie ein Traegerbild hoch. PNG eignet sich am besten, da es verlustfrei ist. JPEG-Komprimierung zerstoert Ihre versteckten Bits; dazu spaeter mehr.
  2. Geben Sie Ihre geheime Nachricht ein. Das Tool zeigt Ihnen die verfuegbare Kapazitaet basierend auf den Bildabmessungen an.
  3. Laden Sie das Stego-Bild herunter. Es sieht identisch mit dem Original aus. Pixel fuer Pixel sind die Unterschiede nicht wahrnehmbar.

Zum Extrahieren wechseln Sie in den Aufdecken-Modus, laden das Stego-Bild hoch, und der versteckte Text erscheint.

Das Steganographie-Tool im Verstecken-Modus mit Upload-Bereich, Eingabefeld fuer geheime Nachrichten und Download-Button
Das Steganographie-Tool im Verstecken-Modus mit Upload-Bereich, Eingabefeld fuer geheime Nachrichten und Download-Button

Die gesamte Operation laeuft clientseitig ueber die Canvas-API und Typed Arrays. Ihre geheime Nachricht beruehrt nie eine Netzwerkverbindung. Das ist wichtig; wenn Sie sensible Informationen verbergen, wuerde das Senden an einen Drittanbieter-Server den Zweck zunichtemachen.

Erkennung und Steganalyse; wie man NICHT auffliegt

Steganalyse ist die Kunst, Steganographie zu erkennen, und sie ist ausgefeilter als man vielleicht denkt.

Visuelle Inspektion erkennt keine LSB-Kodierung. Aber statistische Analyse schon. Der einfachste Test ist eine Chi-Quadrat-Analyse der Pixelwertverteilungen. In einem natuerlichen Bild haben Pixelwerte eine charakteristische Verteilung. LSB-Einbettung glaettet Wertepaare (z.B. werden 142 und 143 gleich wahrscheinlich), was als Anomalie im Histogramm sichtbar wird.

Tools wie StegExpose und OpenStego enthalten Erkennungsmodule. In CTF-Wettbewerben sind zsteg und steghide die bevorzugten Extraktionswerkzeuge.

Hier sind praktische Tipps, damit Ihr Stego-Bild einer Pruefung standhaelt:

  • Nutzen Sie weniger Kapazitaet. Wenn Sie Daten nur in 10-20% der verfuegbaren Pixel einbetten, wird die statistische Erkennung deutlich schwieriger. 100% Kapazitaetsauslastung ist ein forensisches Warnsignal.
  • Randomisieren Sie die Pixelauswahl. Statt sequentiell ab Pixel 0 zu schreiben, verwenden Sie eine pseudozufaellige Sequenz mit einem Passwort als Seed, um festzulegen, welche Pixel Daten tragen. So werden die Modifikationen gleichmaessig verteilt.
  • Waehlen Sie unruhige Bilder. Fotos mit viel Textur, Rauschen und Farbvariation verbergen LSB-Aenderungen besser als glatte Farbverlaeufe oder einfarbige Flaechen. Ein Foto eines Waldbodens schlaegt ein Foto einer weissen Wand.
  • Verwenden Sie niemals JPEG als Traeger. JPEGs verlustbehaftete Komprimierung veraendert Pixelwerte waehrend der Kodierung. Ihre versteckten Bits werden beim Speichern des Bildes zerstoert. Verwenden Sie fuer LSB-Steganographie immer PNG, BMP oder TIFF.
  • Entfernen Sie Metadaten vor dem Teilen. EXIF-Daten, die zeigen, dass das Bild mit einem Steganographie-Tool bearbeitet wurde, sind ein offensichtlicher Hinweis.

Wann man Steganographie mit Verschluesselung kombinieren sollte

Steganographie und Verschluesselung loesen unterschiedliche Probleme, und der staerkste Ansatz nutzt beides. Hier ist der Grund.

Wenn ein Angreifer vermutet, dass Ihr Bild versteckte Daten enthaelt, und die LSBs erfolgreich extrahiert, sieht er Ihre Klartextnachricht. Spiel vorbei. Aber wenn Sie die Nachricht vorher verschluesseln; zum Beispiel mit AES-256; sehen die extrahierten Bits wie zufaelliges Rauschen aus. Der Angreifer kann nicht unterscheiden, ob er eine Nachricht gefunden hat oder nur normale Bilddaten.

Der praktische Ablauf:

  1. Verschluesseln Sie Ihre Nachricht mit einer starken symmetrischen Chiffre.
  2. Verstecken Sie den Chiffretext im Bild mittels LSB-Kodierung.
  3. Teilen Sie das Stego-Bild oeffentlich.
  4. Teilen Sie den Entschluesselungsschluessel ueber einen separaten Kanal.

Das ergibt zwei Schutzschichten: Die Nachricht ist sowohl verborgen (Steganographie) als auch unlesbar (Verschluesselung). Ein Angreifer muesste sowohl die versteckten Daten erkennen als auch die Verschluesselung knacken; ein deutlich schwierigeres Problem als jedes fuer sich allein.

Kitmuls Sicherheits- und Kryptographie-Tools umfassen AES-Verschluesselung, Hash-Generatoren und weitere Werkzeuge, die das Steganographie-Tool fuer genau diesen Workflow ergaenzen.

Praxisbeispiele aus der realen Welt

Steganographie ist nicht nur ein CTF-Partytrick. Sie hat legitime und wichtige Anwendungen.

Digitale Wasserzeichen. Verlage, Fotografen und Medienunternehmen betten unsichtbare Wasserzeichen in Bilder ein, um unautorisierte Verbreitung nachzuverfolgen. Wenn ein geleaktes Bild auftaucht, identifiziert das eingebettete Wasserzeichen, welcher Empfaenger es weitergegeben hat. So verfolgen mehrere grosse Filmstudios ihre Screener-Kopien.

Whistleblowing und Zensurresistenz. In Laendern mit starker Internetueberwachung ermoeglicht Steganographie Aktivisten, Informationen ueber unschuldig wirkende Bilder in sozialen Medien zu teilen. Das Bild passiert die Pruefung durch automatisierte Inhaltsfilter; die versteckte Nachricht erreicht ihr Zielpublikum.

Verdeckte Kommunikation. Geheimdienste setzen Steganographie mindestens seit den fruehen 2000er-Jahren ein. Die FBI-Verhaftung russischer Spione im Jahr 2010 (das "Illegals Program") offenbarte, dass diese verschluesselte Nachrichten in Bildern auf oeffentlichen Websites eingebettet hatten.

CTF-Aufgaben. Capture-The-Flag-Wettbewerbe lieben Steganographie, weil sie ein anderes Kompetenzspektrum testet als Standard-Kryptoaufgaben. Man muss zunaechst erkennen, dass Steganographie ueberhaupt eingesetzt wurde, bevor man mit der Extraktion beginnen kann. Gaengige CTF-Stego-Techniken umfassen LSB-Kodierung, angehaengte Daten, Palettenmanipulation in GIF-Dateien und Verbergen im Audiospektrum.

Eigentumsnachweis. Kuenstler und Content-Ersteller koennen Urheberrechtsinformationen oder Eigentumsnachweise direkt in ihre Werke einbetten. Im Gegensatz zu sichtbaren Wasserzeichen beeintraechtigen diese nicht die visuelle Qualitaet des Werks.

Ein System linearer Gleichungen auf Papier; die Mathematik hinter Steganographie ist einfacher als sie aussieht
Ein System linearer Gleichungen auf Papier; die Mathematik hinter Steganographie ist einfacher als sie aussieht

Die Grenzen der Pixelkodierung

LSB-Steganographie hat reale Einschraenkungen, die man verstehen sollte. Das Traegerbild muss verlustfrei sein; jeder verlustbehaftete Komprimierungsschritt (JPEG, verlustbehaftetes WebP) wird eingebettete Daten beschaedigen. Die Nachrichtenkapazitaet skaliert mit den Bildabmessungen, aber die Nutzung von mehr als etwa 15-20% der Kapazitaet macht das Bild anfaellig fuer statistische Erkennung. Und die Technik verbirgt nur Daten; sie schuetzt sie nicht vor der Extraktion durch jemanden, der weiss, wonach er suchen muss.

Fuer die meisten praktischen Zwecke funktioniert Bildsteganographie am besten als eine Schicht in einer Defense-in-Depth-Strategie. Verbergen Sie die Nachricht, verschluesseln Sie den Inhalt und nutzen Sie einen sicheren Kanal, um den Schluessel zu teilen. Keine einzelne Technik ist kugelsicher, aber die Kombination erhoet die Huerde erheblich.

Probieren Sie es selbst aus

Das Steganographie-Tool auf Kitmul ermoeglicht es Ihnen, Nachrichten in PNG-Bildern direkt im Browser zu verstecken und aufzudecken. Alles laeuft clientseitig; keine Daten werden hochgeladen, keine Konten erforderlich, keine Limits. Laden Sie ein Bild hoch, geben Sie eine Nachricht ein, laden Sie das Ergebnis herunter. Versuchen Sie dann, es zu extrahieren, um den Roundtrip zu ueberpruefen.

Wenn Sie sich fuer Sicherheits- und Datenschutz-Tools interessieren, umfasst die Sicherheits- und Kryptographie-Sammlung Hash-Generatoren, Verschluesselungs-Tools, Passwortgeneratoren und mehr; alles laeuft lokal in Ihrem Browser.


Die gesamte Verarbeitung laeuft lokal in Ihrem Browser. Keine Bilder oder Nachrichten werden an einen Server gesendet. Das Tool ist kostenlos, offen und erfordert keine Konten oder Limits.

Diesen Artikel teilen

Newsletter

Erhalte Produktivitätstipps und Neue Tools Zuerst

Schließe dich Machern und Entwicklern an, die Datenschutz schätzen. Jede Ausgabe: neue Tools, Produktivitäts-Hacks und Updates — kein Spam.

Prioritätszugang zu neuen Tools
Jederzeit abbestellen, ohne Rückfragen