8 ms·
PNG and Hidden Pixels
- tvb12 6y agoI really like the explanation of the png file format. I'm not sure I'll ever use this knowledge, but I was happy to learn it.
- est 6y agoI remember there was a similar trick that hides data in GZip streams in its FCOMMENT block. Could something similar be done with DEFLATE? Allocate some unused Huffman table? Put stuff in reserved bits?
- ekimekim 6y agoSpecifically with PNG it has a concept of "private" chunks which you can use to store arbitrary data. Conforming decoders will ignore these chunks, and may or may not drop them if the file is modified. See https://en.wikipedia.org/wiki/Portable_Network_Graphics#%22Chunks%22_within_the_file https://en.wikipedia.org/wiki/Portable_Network_Graphics#%22C...
- 082349872349872 6y agoA simple technique would be to use different block sizes.
- StavrosK 6y agoThis is very nitpicky, but does adding extra data at the bottom of the image count as steganography? I've always thought of steganography as something that is very hard to detect, like changing the LSB of each pixel to a part of your message.
- onion2k 6y agodoes adding extra data at the bottom of the image count as steganography "steganography" is simply the act of hiding messages, so I don't see why this wouldn't count. What term for hiding information outside of the bounds of the image would you propose instead?
- 082349872349872 6y agoI'd say communicating outside normal means would be "using a covert channel", and reserve "steganography" for such communication as has been whitened to resemble noise[1]. Obviously tastes may differ, so someone else might call the former "steganography" and distinguish the latter as "deniable steganography", or at least "near-noise steganography". (with a little information theory, one can even communicate reliably via sub-noise steganography) cryptography vs. steganography? [1] compare Bacon (1605): https://archive.org/details/advancementofl00baco/page/256/mode/2up?q=biliteral https://archive.org/details/advancementofl00baco/page/256/mo... "... a method of expressing and signifying one's mind to any distance by objects that are either visible or audible — provided only the objects are but capable of two differences ..."
- onion2k 6y agoI'd say communicating outside normal means would be "using a covert channel", and reserve "steganography" for such communication which has been whitened to resemble noise[1]. Ah. I think I see where the confusion is coming from. You're saying this isn't steganography because the information isn't hidden in the image data. It's there in the 'plaintext'. I thought this is steganography because the image is hidden in the file data by exploiting the fact that PNG renderers don't display it. I'm going to change my mind and say that your definition is actually better than mine. The information itself isn't hidden. You don't need a trick, or a key, or any special knowledge to view it. The fact that common PNG libraries don't display it isn't really enough to say that it's enciphered at all - you can't really say a message is definitely hidden if you assume something about the PNG library the attacker is using to view it. I don't know what the right term is, but it probably isn't steganography.
- 082349872349872 6y agosecurity per obscurity? (skotadigraphy?)
- HelloNurse 6y ago
- m463 6y agoIt's invalid to HIde a Message that way, yOu aren't perMitted to do it.
- ShaneMcGowan 6y agoSpent too long thinking "What the hell is a himom"
- kd5bjo 6y agoThe PNG format supports arbitrary data being included in private (nonstandardized) chunks, which will be ignored by decoders that don’t recognize them. It’s easier to extract and more reliably hidden, so why bother inserting the extra data as pixels? cf. https://en.wikipedia.org/wiki/Portable_Network_Graphics#"Chunks"_within_the_file https://en.wikipedia.org/wiki/Portable_Network_Graphics#"Chu...
- chrisseaton 6y ago> [you can use] private (nonstandardized) chunks ... so why bother inserting the extra data as pixels? Because these extra chunk are super-obvious? As soon as someone looks in your file they're going to wonder what you've added these for. They will likely also not survive re-encoding. The point of modern stenography is that you can't tell it's there, and it's just a part of the core image data, and that it's completely deniable. How do you deny your nonstandard chunks?
- Beldin 6y agoThe "completely deniable" part is not necessary for steganography. Otherwise, you dismiss just about any examples of steganography prior to steganography on computers. Which is fine, but as far as i know, not the commonly accepted definition.
- chrisseaton 6y agoThe question was > so why bother The answer is - because it's more deniable. You bother because more deniable is better.
- crpatino 6y agoThe threat model is that of an active attacker that is able to tamper the message,- either inserting his own malicious data in the extra chunk, or zeroing it out if you are using strong authentication,- but that does care of the quality of the cover message (the image itself). By encoding the secret message in the pixels themselves, you ensure that the attacker cannot significantly alter the secret message without degrading the quality of the image itself. One application is watermarks containing copyright notices. The idea is that the infringing party cannot render the watermark undetectable without also degrading the quality (and by proxy, the economic value) of the image they are trying to plagiarize. Of course, that goal cannot be achieved by simply storing the secret message in the least significant bit of the image. You need to have a model of what type of tampering the attacker is going to perform, and then design an encoding that will be resistant to such attack.
- deleted 6y ago[deleted]
- yodelshady 6y agoIf it's compressed (it is!) how would you know? You can't simply do width x height x depth.
- jansan 6y agoPNG's IDAT chunk, which contains actual image data, is simply all lines of data compressed with the deflate algorithm. Once you inflate (uncompress) it, you have all data and can compare if width and height match. This way it is quite easy to detect if additional data was added.
- deadalus 6y agohttps://web.archive.org/web/20200901074527/https://www.hackerfactor.com/blog/index.php?/archives/894-PNG-and-Hidden-Pixels.html https://web.archive.org/web/20200901074527/https://www.hacke...
- fenomas 6y agoSorry if this is a dumb question, but what does hiding information in images have to do with CTF-style challenges? Does that term not refer to "break into server X and retrieve file Y" sorts of tasks?
- marcan_42 6y agoCTF games come in two styles (attack and defense i.e. PvP, and jeopardy i.e. PvE), and within the jeopardy class there are many categories, one or which can be steganography, file formats, and related challenges. (Source: I run a CTF, have written over 100 challenges, and the JPEG padding trick was one of them years ago)
- fenomas 6y agoAh, I had thought they were exclusively about security/penetration/etc. Thanks!
- tenbino 6y agoThe pico8 console stores the entire game in a png file in its data area.
- Lerc 6y agoDoesn't it store it in the low bits of visible picture? That's what I do for my own virtual console project. While the methods listed in this article are pretty neat, once you go browser based you are limited to what the browser gives you access to. The only alternative is doing a request for the file and doing the entire file format decoding in JavaScript. If you go that far then you might as well use a zTXt or custom chunk.
- knolax 6y agoThanks for reminding me about pico8. What a lovely platform.
- grenoire 6y agoI actually developed a game which used this trick for an Easter egg. I added in a texture for the Companion Cube from Portal, and set the alpha to 1. In game, however, I loaded the textures with only a single bit of alpha, which meant that the alpha of 1 was the same as 255. Not entirely invisible, but was fun to do!
- jorangreef 6y agoI wrote something similar but for the ZIP format, called Pure, to detect hidden buffer bleeds outside and between and within structures, amongst other anomalies. It's also amazing what you can do with a ZIP file. Pure: https://github.com/ronomon/pure https://github.com/ronomon/pure The goal of Pure is to reduce the attack surface available for zero-days by doing the simple yet critical buffer bounds checks that most end-user application software will not, and to do this for more and more popular file formats. The vision is that one day you can deploy Pure at your email server and get much stronger guarantees on the safety of email attachments that you open... as well as on the attachments you send out... for example that your billing software is not leaking the contents of sensitive server memory into XLSX reports that you are mass mailing to clients (Pure actually found two cases of prominent investment firms that were doing just this). It's like type checking or linting but for everyday file formats.
- spicybright 6y ago"Back in the day" there was an image board where people uploaded JPGs that actually were zip archives when you renamed the extension. People would post music albums like that where the image was the cover art.
- jansan 6y agoThis is one of my favorite presentations ever: https://media.ccc.de/v/31c3_-_5930_-_en_-_saal_6_-_201412291400_-_funky_file_formats_-_ange_albertini#t=1966 https://media.ccc.de/v/31c3_-_5930_-_en_-_saal_6_-_201412291... Ange Albertini shows how a file can be a multiple files in different formats at the same time. Amazing stuff.
- jasomill 6y agoI ran into a very annoying case of this in the wild: a USB hard drive "pre-formatted for Windows and Mac". Specifically, the entire disk was pre-formatted as both NTFS and HFS+. The trick: as shipped, LBA 0 contained an MBR pointing to an NTFS-formatted partition spanning the free space of an empty HFS+ volume whose (slightly larger) partition was defined by an Apple Partition Map in LBA 1. So Windows would read the MBR and find the NTFS volume, Mac OS would read the APM and find the HFS+ volume, and all was right with the world. Right, that is, until you plugged the disk into a Mac after writing to it in Windows, because the simple act of auto-mounting the "empty" HFS+ volume caused OS X to fill enough of the volume's "free" space to corrupt the colocated NTFS filesystem beyond repair.
- userbinator 6y agoYou can do something similar with video too --- the width and height are padded to macroblock boundaries (usually 16 pixels) so there's plenty of space for extra data at the right and bottom. In the analog realm, something similar was used to add closed captioning to the video signal: https://en.wikipedia.org/wiki/EIA-608 https://en.wikipedia.org/wiki/EIA-608
- jansan 6y agoColumn padding can be done with .ico files, too. For 16 and 256 color images each line of data must be a multiple of 4 bytes. And since 16 and 256 color images are required to be included in ico images, the low color resolution does not even raise suspicion.