Bei Hacker-Wettbewerben und CTF-Spielen (Capture The Flag) treten manchmal Steganografie-Rätsel auf: Sie erhalten ein Bild, in dem Sie eine versteckte Nachricht finden müssen . Der wahrscheinlich einfachste Weg, Text in einem PNG-Bild auszublenden, besteht darin, ihn in einen der Farbkanäle oder in den Alphakanal (Transparenzkanal) zu schreiben. Um solche "Lesezeichen" zu identifizieren, gibt es spezielle Tools wie stegsolve , pngcheck und stegdetect . Manchmal müssen Teilnehmer manuell an Filtern in GIMP oder Photoshop basteln.
Der Fortschritt steht jedoch nicht still - und in letzter Zeit werden zunehmend andere Methoden zum Ausblenden von Daten verwendet, beispielsweise das Füllen von PNG. Mal sehen, wie das gemacht wird.
Beginnen wir mit einer kleinen theoretischen Einführung in die "unsichtbaren" Teile von PNG.
Alpha-Kanal
Wenn ein Bild auf einem Computerbildschirm angezeigt wird, werden Farben durch Kombinieren von roten, grünen und blauen Komponenten erstellt. Diese drei Farbebenen werden als Kanäle bezeichnet. Sie werden normalerweise als RGB geschrieben.
Zusätzlich zu diesen drei Kanälen kann PNG einen vierten Kanal namens Alpha (bezeichnet mit dem Buchstaben A) haben, um den Transparenzgrad zu bestimmen. Das resultierende RGBA-Bild bestimmt die sichtbaren Farben und den Transparenzgrad.
In den meisten Grafikformaten ist der Alphakanal ein Wert von 0% bis 100% (oder 0 bis 255 in Byte). Ein Wert von 0% (schwarz) gibt die Stelle im Bild an, an der die vollständige Transparenz erfolgen soll. Hier wird der RGB-Wert ignoriert und der Hintergrund unter dem Bild ist vollständig sichtbar. Ein Alpha-Wert von 100% (weiß) bedeutet, dass die RGB-Kanäle vollständig undurchsichtig sind. Zwischenwerte bestimmen, wie stark der Hintergrund mit dem RGB-Pixelwert gemischt werden soll.
PNG-Alpha-Verlauf
Die Alpha-Verlaufswerte werden normalerweise verwendet, um ein Bild auf ein anderes Bild oder eine andere Webseite zu mischen. Alpha-Verläufe sind in den Formaten PNG, WebP, ICO, ICN und anderen Raster verfügbar. Das GIF-Format unterstützt nur Boolesche Werte (ein Pixel ist entweder transparent oder nicht).
Der Alphakanal ist nur eine der Optionen zum Platzieren von verstecktem Text. Fahren wir mit dem PNG-Auffüllen fort, um Daten direkt in eine Binärdatei zu schreiben.
PNG-Inhalt nach Spalten
Das PNG-Format ist recht einfach . Jede Datei beginnt mit einer Standard-8-Byte-Signatur, hier mit Dezimalwerten
137 80 78 71 13 10 26 10. Das erste Byte wird außerhalb von ASCII ausgewählt, damit kein Editor das Bild versehentlich mit einer Textdatei verwechselt. Die nächsten drei Bytes entsprechen den Buchstaben P, N, G. Dann ein DOS-Zeilenumbruch (13-10), ein DOS-Dateiende-Marker (26), um zu verhindern, dass das Typprogramm den gesamten binären Müll druckt, und ein Unix-Zeilenumbruch-Marker.
Nach dem Header beginnen Chunks mit einer Standardstruktur. Zuerst kommt der IHDR-Block, der die Breite und Höhe des Bildes, den Farbraum, die Anzahl der Bits pro Pixel, das Komprimierungsverfahren, das Filterverfahren und das Vorhandensein / Fehlen einer Interlaced-Codierung angibt. Für die Breite und Höhe werden vier Bytes zugewiesen, für die anderen Parameter ein Byte.
Darauf folgt ein optionaler tEXt-Block mit Textmetadaten, z. B. dem Namen des Programms, das die PNG-Datei generiert hat. Sie können Klartextinformationen in Textblöcke schreiben.
Auf IHDR und tEXt folgen IDAT-Blöcke mit komprimierten RGB- oder RGBA-Werten für Bitmap-Pixel. Beim Rendern von PNGs wird es von IHDR verarbeitet, ein Puffer wird im Speicher für das Bild zugewiesen, die Daten werden aus dem komprimierten Format extrahiert und Pixel für Pixel in den Puffer geschrieben. Die PNG-Datei endet mit einem IEND-Block.
Am Ende jedes Blocks befindet sich eine CRC-Prüfsumme für diesen Block, die mit dem Standardalgorithmus berechnet wird .
Normalerweise enthalten PNG-Bilder 8 oder 16 Informationsbits pro RGB- oder RGBA-Kanal, dh drei bis acht Bytes pro Pixel werden ausgegeben. In diesem Format sind alle Bytes mit nützlichen Informationen zu Farbe und Transparenz belegt, sodass wir am Ende jeder Zeile des Grafikbildes keinen Platz zum Schreiben beliebiger Daten haben.
Für Steganografieaufgaben müssen Sie jedoch wissen, dass PNG auch eine geringere Farbtiefe unterstützt: 1 Bit (2 Farben), 2 Bit (4 Farben) und 4 Bit (16 Farben). In einer solchen Situation stellt sich heraus, dass Informationen über mehrere Pixel in einem Byte gespeichert sind. Hier erscheint die theoretische Möglichkeit für die "horizontale" Befüllung von PNGs mit fremden Daten. Wenn die Breite des Bildes in Pixel kein Vielfaches von acht ist, enthält das letzte Byte der Zeile nicht verwendete Bits, die zusammen eine ganze nicht verwendete "Pixelspalte" bilden.
Im Fall eines 1-Bit-Bildes können am Ende jeder Zeile bis zu 7 freie Bits verbleiben, die vom Parser nicht verarbeitet werden. Bei einem 2-Bit-Bild befinden sich im letzten Byte bis zu 3 freie Bits. FotoForensics Online-Toolfindet solche nicht verwendeten "Pixelspalten" in PNG-Bildern .
PNG-Bilder mit geringer Farbtiefe sind jedoch sehr selten, so dass diese Methode der Steganographie als exotisch angesehen werden kann. Wenn Sie auf ein PNG-Bild mit 2, 4 oder 16 Farben stoßen, ist allein diese Tatsache verdächtig und kann eine Überprüfung des PNG-Inhalts nach Spalten einleiten.
Eine ganz andere Sache ist die PNG-Füllung außerhalb der Bildränder. Dies ist eine einfachere Methode der Steganographie, mit der Sie viel mehr Informationen im Bild verbergen können.
PNG-Füllung über die Bildgrenzen hinaus
PNG-Post-Pixel-Padding wird häufig in verschiedenen Spielen, Rätseln und Wettbewerben verwendet, nicht nur beim Hacken. So funktioniert diese Methode:
- Nehmen Sie ein PNG-Bild auf (mit beliebiger Farbtiefe).
- .
- PNG, .
- hex-.
- IHDR. IHDR.
- IHDR — , — . c
00 00 01 9D(413 ), ,00 00 01 7E(382 ).
- CRC ( PNG CRC , IHDR), . CRC , PNG- IHDR.
.

Bitte beachten Sie, dass die geheimen Daten am unteren Rand des Bildes verbleiben. Die Dateigröße hat sich nicht geändert: 335.906 Bytes. Es ist nur so, dass der Parser diese Pixel jetzt nicht verarbeitet - und der untere Teil des Bildes nicht auf dem Bildschirm angezeigt wird.
Es ist leicht zu erraten, dass Sie im "geheimen" Teil des Bildes nicht nur eine Textinschrift, sondern auch beliebige Daten verbergen können. Zum Beispiel können wir dort ein passwortgeschütztes RAR-Archiv schreiben. Das Bild der geheimen Nachricht kann auf Habrastorage oder einem anderen gemeinsamen Hosting veröffentlicht werden. Die Nachricht wird nur von der Person empfangen, mit der Sie zuvor die Methode zur Übermittlung von Informationen vereinbart und ein Passwort vereinbart haben. Auf diese Weise kann Malware Nutzdaten über Habr und andere öffentliche Hosting-Dienste übertragen.
Werbung
VDS für Hosting-Sites handelt von unserem Epos ! Alle Server "out of the box" sind vor DDoS-Angriffen geschützt. Die automatische Installation eines praktischen VestaCP-Bedienfelds erfolgt automatisch. Versuchen Sie es besser einmal;)
