Image Steganography

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

Most CTF image stego reduces to one of these buckets:

  • LSB/bit-planes (PNG/BMP)
  • Metadata/comment payloads
  • PNG chunk weirdness / corruption repair
  • JPEG DCT-domain tools (OutGuess, etc)
  • Frame-based (GIF/APNG)

๋น ๋ฅธ ์ดˆ๊ธฐ ๋ถ„์„

์‹ฌ์ธต ์ฝ˜ํ…์ธ  ๋ถ„์„ ์ „์— ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์˜ ์ฆ๊ฑฐ๋ฅผ ์šฐ์„ ํ•˜์„ธ์š”:

  • ํŒŒ์ผ์„ ๊ฒ€์ฆํ•˜๊ณ  ๊ตฌ์กฐ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”: file, magick identify -verbose, format validators (e.g., pngcheck).
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๊ฐ€์‹œ์  ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜์„ธ์š”: exiftool -a -u -g1, strings.
  • ํฌํ•จ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ง๋ถ™์—ฌ์ง„ ์ฝ˜ํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”: binwalk ๋ฐ ํŒŒ์ผ ๋ ๊ฒ€์‚ฌ (tail | xxd).
  • ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฅ˜๋ณ„๋กœ ๋ถ„๊ธฐ:
  • PNG/BMP: bit-planes/LSB ๋ฐ chunk-level ์ด์ƒ ์ง•ํ›„.
  • JPEG: metadata + DCT-domain ๋„๊ตฌ (OutGuess/F5-style families).
  • GIF/APNG: ํ”„๋ ˆ์ž„ ์ถ”์ถœ, ํ”„๋ ˆ์ž„ ์ฐจ๋ถ„, ํŒ”๋ ˆํŠธ ํŠธ๋ฆญ.

Bit-planes / LSB

๊ธฐ๋ฒ•

PNG/BMP๋Š” ํ”ฝ์…€์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์— CTF์—์„œ ์ธ๊ธฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ๋น„ํŠธ ์ˆ˜์ค€ ์กฐ์ž‘์ด ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ „ํ˜•์ ์ธ ์ˆจ๊น€/์ถ”์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€:

  • ๊ฐ ํ”ฝ์…€ ์ฑ„๋„(R/G/B/A)์€ ์—ฌ๋Ÿฌ ๋น„ํŠธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ๊ฐ ์ฑ„๋„์˜ ์ตœํ•˜์œ„ ๋น„ํŠธ(LSB)๋Š” ์ด๋ฏธ์ง€์— ๊ฑฐ์˜ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ณต๊ฒฉ์ž๋Š” ์ด๋Ÿฌํ•œ ์ €์œ„์น˜ ๋น„ํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ธฐ๋ฉฐ, ๋•Œ๋กœ๋Š” stride, permutation ๋˜๋Š” ์ฑ„๋„๋ณ„ ์„ ํƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์—์„œ ๊ธฐ๋Œ€ํ•  ๊ฒƒ:

  • ํŽ˜์ด๋กœ๋“œ๋Š” ํ•˜๋‚˜์˜ ์ฑ„๋„์—๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: R LSB).
  • ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์•ŒํŒŒ ์ฑ„๋„์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”์ถœ ํ›„ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์••์ถ•๋˜๊ฑฐ๋‚˜ ์ธ์ฝ”๋”ฉ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ plane์— ๋ถ„์‚ฐ๋˜๊ฑฐ๋‚˜ plane๋“ค ๊ฐ„ XOR์œผ๋กœ ์ˆจ๊ฒจ์ ธ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ๋ณ€ํ˜•๋“ค(๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„):

  • LSB matching (๋‹จ์ˆœํžˆ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชฉํ‘œ ๋น„ํŠธ์— ๋งž์ถ”๊ธฐ ์œ„ํ•ด +/-1 ์กฐ์ •์„ ํ•จ)
  • Palette/index-based hiding (indexed PNG/GIF: ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์›์‹œ RGB๊ฐ€ ์•„๋‹Œ ์ƒ‰ ์ธ๋ฑ์Šค์— ์ €์žฅ๋จ)
  • Alpha-only payloads (RGB ๋ณด๊ธฐ์—์„œ๋Š” ์™„์ „ํžˆ ๋ณด์ด์ง€ ์•Š์Œ)

๋„๊ตฌ

zsteg

zsteg๋Š” PNG/BMP์˜ ๋‹ค์–‘ํ•œ LSB/bit-plane ์ถ”์ถœ ํŒจํ„ด์„ ์—ด๊ฑฐํ•ฉ๋‹ˆ๋‹ค:

zsteg -a file.png

Repo: https://github.com/zed-0xff/zsteg

StegoVeritas / Stegsolve

  • stegoVeritas: ๋‹ค์–‘ํ•œ ๋ณ€ํ™˜(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ด๋ฏธ์ง€ ๋ณ€ํ™˜, LSB ๋ณ€ํ˜•์— ๋Œ€ํ•œ brute forcing)์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • stegsolve: ์ˆ˜๋™ ์‹œ๊ฐ ํ•„ํ„ฐ(์ฑ„๋„ ๋ถ„๋ฆฌ, plane inspection, XOR ๋“ฑ).

Stegsolve ๋‹ค์šด๋กœ๋“œ: https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve

FFT-based visibility tricks

FFT๋Š” LSB extraction์ด ์•„๋‹™๋‹ˆ๋‹ค; ์ฃผ๋กœ ์ฝ˜ํ…์ธ ๊ฐ€ ์ฃผํŒŒ์ˆ˜ ๊ณต๊ฐ„์ด๋‚˜ ๋ฏธ๋ฌ˜ํ•œ ํŒจํ„ด์— ์˜๋„์ ์œผ๋กœ ์ˆจ๊ฒจ์ง„ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • EPFL demo: http://bigwww.epfl.ch/demo/ip/demos/FFT/
  • Fourifier: https://www.ejectamenta.com/Fourifier-fullscreen/
  • FFTStegPic: https://github.com/0xcomposure/FFTStegPic

CTF์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์›น ๊ธฐ๋ฐ˜ ๋„๊ตฌ:

  • Aperiโ€™Solve: https://aperisolve.com/
  • StegOnline: https://stegonline.georgeom.net/

PNG internals: chunks, corruption, and hidden data

Technique

PNG์€ ์ฒญํฌ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์ฑŒ๋ฆฐ์ง€์—์„œ ํŽ˜์ด๋กœ๋“œ๋Š” ํ”ฝ์…€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์ปจํ…Œ์ด๋„ˆ/์ฒญํฌ ๋ ˆ๋ฒจ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:

  • IEND ์ดํ›„์˜ ์ถ”๊ฐ€ ๋ฐ”์ดํŠธ (๋งŽ์€ ๋ทฐ์–ด๋Š” ํ›„ํ–‰ ๋ฐ”์ดํŠธ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค)
  • ๋น„ํ‘œ์ค€ ancillary ์ฒญํฌ์— ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋“ค์–ด์žˆ์Œ
  • ์†์ƒ๋œ ํ—ค๋”๋Š” ํฌ๊ธฐ๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ํŒŒ์„œ๋ฅผ ๊ณ ์žฅ๋‚ด์–ด ์ˆ˜์ •ํ•  ๋•Œ๊นŒ์ง€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค

๊ฒ€ํ† ํ•  ์ฃผ์š” ์ฒญํฌ ์œ„์น˜:

  • tEXt / iTXt / zTXt (ํ…์ŠคํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋•Œ๋กœ๋Š” ์••์ถ•๋จ)
  • iCCP (ICC ํ”„๋กœํŒŒ์ผ) ๋ฐ ๋‹ค๋ฅธ ancillary ์ฒญํฌ๋“ค์ด ์บ๋ฆฌ์–ด๋กœ ์‚ฌ์šฉ๋จ
  • eXIf (PNG์˜ EXIF ๋ฐ์ดํ„ฐ)

Triage commands

magick identify -verbose file.png
pngcheck -v file.png

ํ™•์ธํ•  ํ•ญ๋ชฉ:

  • ์ด์ƒํ•œ width/height/bit-depth/colour-type ์กฐํ•ฉ
  • CRC/chunk ์˜ค๋ฅ˜ (pngcheck๋Š” ๋ณดํ†ต ์ •ํ™•ํ•œ ์˜คํ”„์…‹์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค)
  • IEND ์ดํ›„ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 

๋” ์ž์„ธํ•œ chunk ๋ณด๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด:

pngcheck -vp file.png
exiftool -a -u -g1 file.png

์œ ์šฉํ•œ ์ฐธ๊ณ ์ž๋ฃŒ:

  • PNG specification (structure, chunks): https://www.w3.org/TR/PNG/
  • ํŒŒ์ผ ํฌ๋งท ํŒ (PNG/JPEG/GIF corner cases): https://github.com/corkami/docs

JPEG: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, DCT-domain ๋„๊ตฌ, ๊ทธ๋ฆฌ๊ณ  ELA์˜ ํ•œ๊ณ„

๊ธฐ๋ฒ•

JPEG์€ raw ํ”ฝ์…€๋กœ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ DCT ๋„๋ฉ”์ธ์—์„œ ์••์ถ•๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ JPEG stego ๋„๊ตฌ๋Š” PNG LSB ๋„๊ตฌ์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค:

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ/์ฝ”๋ฉ˜ํŠธ ํŽ˜์ด๋กœ๋“œ๋Š” ํŒŒ์ผ ์ˆ˜์ค€(์‹ ํ˜ธ ์„ธ๊ธฐ๊ฐ€ ๋†’๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ)
  • DCT-domain stego ๋„๊ตฌ๋Š” ์ฃผํŒŒ์ˆ˜ ๊ณ„์ˆ˜์— ๋น„ํŠธ๋ฅผ ์‚ฝ์ž…

์šด์˜์ƒ์œผ๋กœ๋Š”, JPEG์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ทจ๊ธ‰ํ•œ๋‹ค:

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ(์‹ ํ˜ธ ๊ฐ•๋„ ๋†’์Œ, ๋น ๋ฅด๊ฒŒ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ)
  • ํŠน์ˆ˜ํ•œ stego ๋„๊ตฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ์••์ถ•๋œ ์‹ ํ˜ธ ๋„๋ฉ”์ธ(DCT ๊ณ„์ˆ˜)

๋น ๋ฅธ ํ™•์ธ

exiftool file.jpg
strings -n 6 file.jpg | head
binwalk file.jpg

์œ ์˜๋ฏธํ•œ ์œ„์น˜:

  • EXIF/XMP/IPTC metadata
  • JPEG ์ฝ”๋ฉ˜ํŠธ ์„ธ๊ทธ๋จผํŠธ (COM)
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ธ๊ทธ๋จผํŠธ (APP1 for EXIF, APPn for vendor data)

์ผ๋ฐ˜ ๋„๊ตฌ

  • OutGuess: https://github.com/resurrecting-open-source-projects/outguess
  • OpenStego: https://www.openstego.com/

JPEG์—์„œ steghide ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ, stegseek ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•˜์„ธ์š” (๊ธฐ์กด ์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๋” ๋น ๋ฅธ bruteforce):

Error Level Analysis

ELA๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์žฌ์••์ถ• ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค; ํŽธ์ง‘๋œ ์˜์—ญ์„ ์ง€์ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž์ฒด์ ์œผ๋กœ stego detector๋Š” ์•„๋‹™๋‹ˆ๋‹ค:

์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด๋ฏธ์ง€

๊ธฐ๋ฒ•

์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ, ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์„ธ์š”:

  • ๋‹จ์ผ ํ”„๋ ˆ์ž„์— ์žˆ์Œ(์‰ฌ์›€), ๋˜๋Š”
  • ํ”„๋ ˆ์ž„์— ๊ฑธ์ณ ๋ถ„์‚ฐ๋จ(์ˆœ์„œ ์ค‘์š”), ๋˜๋Š”
  • ์—ฐ์†๋œ ํ”„๋ ˆ์ž„์„ diffํ•  ๋•Œ๋งŒ ๋ณด์ž„

ํ”„๋ ˆ์ž„ ์ถ”์ถœ

ffmpeg -i anim.gif frame_%04d.png

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋ ˆ์ž„์„ ์ผ๋ฐ˜ PNG์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜์„ธ์š”: zsteg, pngcheck, channel isolation.

Alternative tooling:

  • gifsicle --explode anim.gif (fast frame extraction)
  • imagemagick/magick for per-frame transforms

Frame differencing์€ ์ข…์ข… ๊ฒฐ์ •์ ์ž…๋‹ˆ๋‹ค:

magick frame_0001.png frame_0002.png -compose difference -composite diff.png

APNG pixel-count encoding

  • APNG ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ง€: exiftool -a -G1 file.png | grep -i animation or file.
  • ํ”„๋ ˆ์ž„์„ ์žฌํƒ€์ด๋ฐ ์—†์ด ์ถ”์ถœ: ffmpeg -i file.png -vsync 0 frames/frame_%03d.png.
  • ํ”„๋ ˆ์ž„๋ณ„ ํ”ฝ์…€ ์ˆ˜๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ๋ณต๊ตฌ:
from PIL import Image
import glob
out = []
for f in sorted(glob.glob('frames/frame_*.png')):
counts = Image.open(f).getcolors()
target = dict(counts).get((255, 0, 255, 255))  # adjust the target color
out.append(target or 0)
print(bytes(out).decode('latin1'))

์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฑŒ๋ฆฐ์ง€์—์„œ๋Š” ๊ฐ ํ”„๋ ˆ์ž„์—์„œ ํŠน์ • ์ƒ‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ ๋ฐ”์ดํŠธ๋กœ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฐœ์ˆ˜๋“ค์„ ์ด์–ด๋ถ™์ด๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์žฌ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณดํ˜ธ๋œ ์ž„๋ฒ ๋”ฉ

ํ”ฝ์…€ ์ˆ˜์ค€์˜ ์กฐ์ž‘์ด ์•„๋‹ˆ๋ผ passphrase๋กœ ๋ณดํ˜ธ๋œ embedding์ด๋ผ๊ณ  ์˜์‹ฌ๋œ๋‹ค๋ฉด, ๋ณดํ†ต ์ด๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

steghide

๋‹ค์Œ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค: JPEG, BMP, WAV, AU. ๋˜ํ•œ embed/extract encrypted payloads๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

steghide info file
steghide extract -sf file --passphrase 'password'

I donโ€™t have access to the repository files. Please paste the contents of src/stego/images/README.md (or attach it) and I will translate the relevant English text to Korean while preserving all markdown/html tags, links, paths and code exactly as requested.

stegcracker file.jpg wordlist.txt

์ €์žฅ์†Œ: https://github.com/Paradoxis/StegCracker

stegpy

์ง€์›: PNG/BMP/GIF/WebP/WAV.

์ €์žฅ์†Œ: https://github.com/dhsdshdhk/stegpy

์ฐธ๊ณ ์ž๋ฃŒ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ