The book of Magnus

IT-заметки и знания

Основы пентеста. Стеганография: Полное руководство

Tags = [ Stegano, Pentest_base ]

Стеганография (от греч. στεγανός — скрытый + γράφω — пишу) — практика сокрытия информации внутри других, на первый взгляд безобидных, данных.

Стеганография vs Криптография

ХарактеристикаСтеганографияКриптография
ЦельСкрыть факт передачи сообщенияСкрыть содержание сообщения
ВидимостьСообщение незаметноЗашифрованный текст виден
ОбнаружениеСложно обнаружитьЛегко обнаружить, сложно расшифровать
ПрименениеСкрытая передача данныхЗащита данных

Идеальный вариант: Комбинация стеганографии и криптографии — сначала зашифровать данные, затем скрыть их в контейнере.

Основные термины

  • Контейнер (Cover) — файл, в который встраивается скрытое сообщение
  • Стего-объект (Stego) — контейнер со встроенным сообщением
  • Полезная нагрузка (Payload) — скрытое сообщение
  • Ключ (Key) — пароль для извлечения данных
  • LSB (Least Significant Bit) — метод встраивания данных в младшие биты

Применение стеганографии

Легитимное использование:

  • Цифровые водяные знаки (watermarking)
  • Защита авторских прав
  • Скрытая передача конфиденциальной информации
  • Forensics и расследования

Вредоносное использование:

  • Эксфильтрация данных
  • Command & Control коммуникации в малware
  • Обход DLP систем
  • Распространение запрещенного контента

Типы стеганографии

1. По типу контейнера

  • Изображения (PNG, JPG, BMP, GIF)
  • Аудио (WAV, MP3, FLAC)
  • Видео (MP4, AVI, MKV)
  • Текст (TXT, DOCX, PDF)
  • Файловые системы (неиспользуемое пространство, метаданные)
  • Сетевой трафик (заголовки пакетов, тайминги)

2. По методу встраивания

  • LSB (Least Significant Bit) — замена младших битов
  • DCT (Discrete Cosine Transform) — для JPEG
  • Echo hiding — для аудио
  • Spread spectrum — распределение по частотному спектру
  • Linguistic steganography — скрытие в тексте

Стеганография в изображениях

LSB метод

Принцип работы: Изображение состоит из пикселей, каждый пиксель кодируется числами (RGB):

  • RGB(255, 0, 0) — красный
  • RGB(0, 255, 0) — зеленый
  • RGB(0, 0, 255) — синий

Изменение младшего бита почти незаметно для глаза:

  • RGB(255, 0, 0) → RGB(254, 0, 0) — визуально идентично

Пример:

Оригинальный пиксель: 11010101 (213)
Изменённый пиксель:   11010100 (212) — последний бит изменён
Визуальное отличие: минимальное

Инструменты для работы с изображениями

1. Steghide

Установка:

# Linux
sudo apt install steghide

# macOS
brew install steghide

# Windows
# Скачать с https://steghide.sourceforge.net/

Встраивание данных:

# Скрыть файл secret.txt в image.jpg
steghide embed -cf image.jpg -ef secret.txt

# С паролем
steghide embed -cf image.jpg -ef secret.txt -p mypassword

# С дополнительными опциями
steghide embed -cf image.jpg -ef secret.txt -p mypass -e rijndael-128 -z 9
# -e: алгоритм шифрования
# -z: уровень сжатия (1-9)

Извлечение данных:

# Извлечь данные из изображения
steghide extract -sf stego_image.jpg

# С паролем
steghide extract -sf stego_image.jpg -p mypassword

# Узнать информацию без извлечения
steghide info stego_image.jpg

Поддерживаемые форматы:

  • JPEG
  • BMP
  • WAV
  • AU

2. Stegsolve

Описание: Java-приложение для анализа изображений

Установка:

# Требуется Java
sudo apt install default-jre

# Скачать Stegsolve.jar
wget http://www.caesum.com/handbook/Stegsolve.jar

# Запуск
java -jar Stegsolve.jar

Использование:

  1. File → Open — загрузить изображение
  2. Анализ через различные фильтры:
    • Red/Green/Blue plane 0-7 — просмотр отдельных битовых плоскостей
    • Alpha plane — проверка альфа-канала
    • Random colour map — случайная палитра
  3. Analyse → Data Extract — извлечение данных из битовых плоскостей
  4. Analyse → Stereo Analysis — сравнение двух изображений

Основные функции:

  • Просмотр различных цветовых каналов
  • Анализ LSB
  • Извлечение данных
  • Сравнение изображений

3. Zsteg

Описание: Детектор стеганографии для PNG и BMP

Установка:

# Требуется Ruby
gem install zsteg

Использование:

# Базовый анализ
zsteg image.png

# Полный анализ (медленно, но тщательно)
zsteg -a image.png

# Поиск только LSB
zsteg --lsb image.png

# Извлечение данных
zsteg -E "b1,rgb,lsb,xy" image.png > output.txt

# Параметры извлечения:
# b1 = 1 бит
# rgb = все каналы
# lsb = младшие биты
# xy = порядок сканирования

Примеры вывода:

$ zsteg challenge.png
b1,r,lsb,xy         .. text: "flag{hidden_message}"
b2,g,msb,xy         .. file: PGP Secret Key
b4,bgr,lsb,xy       .. zlib compressed data

4. StegCracker

Описание: Инструмент для брутфорса паролей Steghide

Установка:

pip3 install stegcracker

Использование:

# Брутфорс с wordlist
stegcracker image.jpg wordlist.txt

# С rockyou.txt
stegcracker image.jpg /usr/share/wordlists/rockyou.txt

# Указать выходной файл
stegcracker image.jpg wordlist.txt -o output.txt

5. OpenStego

Описание: GUI инструмент для стеганографии и watermarking

Установка:

# Скачать с https://www.openstego.com/
# Запуск (требуется Java)
java -jar openstego.jar

Использование через GUI:

  1. Data Hiding → Embed
  2. Выбрать Message File (файл для скрытия)
  3. Выбрать Cover File (контейнер)
  4. Ввести пароль (опционально)
  5. Выбрать Output Stego File
  6. Нажать Embed

Для извлечения:

  1. Data Hiding → Extract
  2. Выбрать Stego File
  3. Ввести пароль
  4. Указать Output Folder
  5. Нажать Extract

6. StegOnline

Описание: Онлайн-инструмент для стеганоанализа

URL: https://stegonline.georgeom.net/

Возможности:

  • LSB анализ
  • Просмотр цветовых каналов
  • Извлечение битовых плоскостей
  • Инверсия, зеркалирование
  • Bruteforce LSB комбинаций
  • Скачивание результатов

Использование:

  1. Upload Image
  2. Go → Browse Bit Planes
  3. Переключение между каналами (R, G, B, A)
  4. Extract Data → настройка параметров
  5. Download результата

7. Outguess

Установка:

sudo apt install outguess

Использование:

# Встраивание
outguess -k "password" -d secret.txt image.jpg stego.jpg

# Извлечение
outguess -k "password" -r stego.jpg output.txt

# Без пароля
outguess -d secret.txt image.jpg stego.jpg
outguess -r stego.jpg output.txt

8. Python - stegano

Установка:

pip install stegano

Использование LSB:

from stegano import lsb

# Скрыть сообщение
secret = lsb.hide("image.png", "Secret message here")
secret.save("stego.png")

# Извлечь сообщение
clear_message = lsb.reveal("stego.png")
print(clear_message)

# Скрыть файл
from stegano.lsbset import generators

secret = lsb.hide("image.png", 
                  message=open("secret.txt", "r").read(),
                  generator=generators.eratosthenes())
secret.save("stego.png")

Генераторы для LSB:

# Различные последовательности для встраивания
from stegano.lsbset import generators

# Fibonacci
secret = lsb.hide("img.png", "message", generator=generators.fibonacci())

# Eratosthenes (простые числа)
secret = lsb.hide("img.png", "message", generator=generators.eratosthenes())

# Identity (последовательно)
secret = lsb.hide("img.png", "message", generator=generators.identity())

Специфичные методы для форматов

PNG стеганография

Особенности PNG:

  • Без потерь
  • Поддержка прозрачности (alpha channel)
  • Метаданные в чанках

Анализ PNG chunks:

# pngcheck - проверка структуры PNG
pngcheck -v image.png

# tweakpng - GUI редактор chunks
# Скачать с https://entropymine.com/jason/tweakpng/

# Извлечение метаданных
exiftool image.png

# Поиск скрытых данных в chunks
pnginfo image.png

Скрытие данных в PNG chunks:

# Используя PIL
from PIL import Image
from PIL.PngImagePlugin import PngInfo

# Создание метаданных
metadata = PngInfo()
metadata.add_text("Comment", "Secret message here")

# Сохранение с метаданными
image = Image.open("original.png")
image.save("stego.png", pnginfo=metadata)

JPEG стеганография

Особенности JPEG:

  • Сжатие с потерями
  • DCT коэффициенты
  • Quantization tables

Инструменты:

jsteg:

# Установка
go get lukechampine.com/jsteg

# Скрытие
jsteg hide input.jpg secret.txt output.jpg

# Извлечение
jsteg reveal input.jpg output.txt

F5 Algorithm:

# Скачать F5.jar
# Встраивание
java -jar F5.jar e -e secret.txt -p password image.jpg output.jpg

# Извлечение
java -jar F5.jar x -p password -e output.txt stego.jpg

Стеганография в аудио

Методы скрытия в аудио

  1. LSB — аналогично изображениям
  2. Echo Hiding — добавление эха с закодированными данными
  3. Phase Coding — изменение фазы
  4. Spread Spectrum — распределение по спектру

Инструменты для аудио

1. Steghide (поддерживает WAV, AU)

# Встраивание в WAV
steghide embed -cf audio.wav -ef secret.txt -p password

# Извлечение
steghide extract -sf stego.wav -p password

2. DeepSound

Описание: GUI инструмент для Windows

Скачать: http://jpinsoft.net/deepsound/

Использование:

  1. Открыть аудио файл
  2. Drag & Drop файлов для скрытия
  3. Установить пароль (опционально)
  4. Указать выходной файл
  5. Encode Secret Files

Извлечение:

  1. Открыть stego-файл
  2. Ввести пароль
  3. Extract Secret Files

3. Sonic Visualiser

Установка:

sudo apt install sonic-visualiser

Использование:

  1. File → Open → выбрать аудио
  2. Layer → Add Spectrogram
  3. Анализ спектрограммы на наличие аномалий
  4. Регулировка параметров:
    • Window size
    • Colour scheme
    • Threshold

Поиск скрытых данных:

  • Визуальные паттерны в спектрограмме
  • Необычные частоты
  • SSTV сигналы
  • Morse code в амплитуде

4. Audacity

Установка:

sudo apt install audacity

Анализ аудио:

  1. Открыть файл
  2. Analyze → Plot Spectrum
  3. Analyze → Spectrogram
  4. Изменение скорости: Effect → Change Speed
  5. Реверс: Effect → Reverse
  6. Изоляция каналов: Split Stereo Track

Приёмы анализа:

  • Проверка на наличие LSB шума
  • Спектральный анализ
  • Просмотр waveform на аномалии
  • Изоляция левого/правого канала

5. WavSteg (Python)

Установка:

pip install WavSteg

Использование:

from WavSteg import WavSteg

# Встраивание
WavSteg.hide_data("input.wav", "secret.txt", "output.wav", 2)
# 2 - количество LSB битов

# Извлечение
WavSteg.recover_data("output.wav", "recovered.txt", 2)

CLI:

# Встраивание
python3 -m WavSteg encode -i input.wav -s secret.txt -o output.wav -n 2

# Извлечение
python3 -m WavSteg decode -i output.wav -o recovered.txt -n 2

6. Спектрограмма анализ

SSTV (Slow Scan Television):

# qsstv - декодер SSTV
sudo apt install qsstv

# Запуск
qsstv

# Воспроизвести аудио в микрофон
pactl load-module module-loopback

Анализ morse code:

# Использовать CWget
sudo apt install cwget

# Декодирование
cwget -i audio.wav

Стеганография в видео

Особенности видео-стеганографии

  • Большой объём контейнера
  • Множество кадров для встраивания
  • Аудио + видео дорожки
  • Высокая сложность детектирования

Инструменты

1. OmniHide PRO

Описание: Коммерческий инструмент для видео

Возможности:

  • Скрытие в AVI, MP4
  • Шифрование AES-256
  • Множественные файлы

2. MSU StegoVideo

Описание: Набор инструментов от МГУ

Скачать: http://www.compression.ru/video/stego_video/

Методы:

  • Замена LSB в кадрах
  • Встраивание в DCT коэффициенты
  • Модификация motion vectors

3. FFmpeg анализ

# Извлечение кадров
ffmpeg -i video.mp4 frame%04d.png

# Извлечение аудио
ffmpeg -i video.mp4 -vn -acodec copy audio.wav

# Анализ каждого кадра с zsteg
for file in *.png; do
    echo "Analyzing $file"
    zsteg "$file"
done

# Метаданные
ffprobe -v error -show_format -show_streams video.mp4
exiftool video.mp4

4. FrameSteg (концепт)

import cv2
from stegano import lsb

# Извлечение кадров
video = cv2.VideoCapture('video.mp4')
frame_count = 0

while True:
    ret, frame = video.read()
    if not ret:
        break
    
    # Сохранить кадр
    cv2.imwrite(f'frame_{frame_count}.png', frame)
    
    # Проанализировать на стего
    try:
        message = lsb.reveal(f'frame_{frame_count}.png')
        if message:
            print(f"Frame {frame_count}: {message}")
    except:
        pass
    
    frame_count += 1

video.release()

Стеганография в текстах

Методы текстовой стеганографии

  1. Whitespace — использование пробелов и табуляций
  2. Zero-width characters — невидимые символы Unicode
  3. Linguistic — синонимы, структура предложений
  4. Format-based — шрифты, размеры, цвета

Инструменты

1. stegsnow

Установка:

sudo apt install stegsnow

Использование:

# Встраивание (использует whitespace)
stegsnow -C -p "password" -m "Secret message" input.txt output.txt

# Извлечение
stegsnow -C -p "password" output.txt

# Без пароля
stegsnow -C -m "Secret" input.txt output.txt
stegsnow -C output.txt

Принцип: Добавляет пробелы и табуляции в конце строк

2. Unicode Steganography

Zero-Width Characters:

# Использование невидимых символов
def hide_in_text(cover_text, secret):
    # Zero-width characters
    ZWSP = '\u200B'  # Zero Width Space
    ZWNJ = '\u200C'  # Zero Width Non-Joiner
    ZWJ = '\u200D'   # Zero Width Joiner
    
    # Бинарное представление
    binary = ''.join(format(ord(c), '08b') for c in secret)
    
    # Замена 0 и 1 на невидимые символы
    hidden = ''
    for bit in binary:
        if bit == '0':
            hidden += ZWSP
        else:
            hidden += ZWNJ
    
    # Вставка в середину текста
    mid = len(cover_text) // 2
    return cover_text[:mid] + hidden + cover_text[mid:]

def reveal_from_text(stego_text):
    ZWSP = '\u200B'
    ZWNJ = '\u200C'
    
    # Извлечение невидимых символов
    binary = ''
    for char in stego_text:
        if char == ZWSP:
            binary += '0'
        elif char == ZWNJ:
            binary += '1'
    
    # Декодирование
    chars = []
    for i in range(0, len(binary), 8):
        byte = binary[i:i+8]
        if len(byte) == 8:
            chars.append(chr(int(byte, 2)))
    
    return ''.join(chars)

# Использование
cover = "This is a normal looking text message."
secret = "FLAG"
stego = hide_in_text(cover, secret)
recovered = reveal_from_text(stego)
print(f"Original: {cover}")
print(f"Stego (looks same): {stego}")
print(f"Recovered: {recovered}")

3. Homoglyph Steganography

Использование похожих символов:

# Русская 'а' vs латинская 'a'
# Киррилица 'о' vs латинская 'o'

def hide_with_homoglyphs(text, secret):
    # Конвертация секрета в бинарный
    binary = ''.join(format(ord(c), '08b') for c in secret)
    
    replacements = {
        'a': ('a', 'а'),  # latin, cyrillic
        'e': ('e', 'е'),
        'o': ('o', 'о'),
        'p': ('p', 'р'),
        'c': ('c', 'с'),
    }
    
    result = list(text)
    bit_idx = 0
    
    for i, char in enumerate(result):
        if char.lower() in replacements and bit_idx < len(binary):
            if binary[bit_idx] == '1':
                result[i] = replacements[char.lower()][1]  # cyrillic
            bit_idx += 1
    
    return ''.join(result)

4. Spam Mimic

Онлайн инструмент: http://www.spammimic.com/

Принцип: Кодирует сообщение в виде спам-текста

Пример:

Input: "Secret message"
Output: "Dear Friend, I am a businessman in Nigeria..."

Инструменты и софт

Универсальные наборы

1. StegSuite

Компоненты:

  • Steghide
  • Stegsolve
  • Zsteg
  • StegCracker
  • Binwalk
  • Foremost
  • Exiftool

Установка всего набора:

# Create install script
cat > install_steg_tools.sh << 'EOF'
#!/bin/bash

# Update system
sudo apt update

# Image tools
sudo apt install -y steghide stegsnow exiftool
gem install zsteg
pip3 install stegcracker stegano

# Analysis tools
sudo apt install -y binwalk foremost hexedit
sudo apt install -y sonic-visualiser audacity

# Python tools
pip3 install pillow opencv-python numpy

# Java tools (for Stegsolve)
sudo apt install -y default-jre
wget http://www.caesum.com/handbook/Stegsolve.jar

# Additional
sudo apt install -y pngcheck outguess
pip3 install WavSteg

echo "Installation complete!"
EOF

chmod +x install_steg_tools.sh
./install_steg_tools.sh

2. Aperi'Solve

Онлайн инструмент: https://www.aperisolve.com/

Возможности:

  • Автоматический анализ изображений
  • Запуск множества инструментов
  • Zsteg, Steghide, Outguess, Exiftool
  • Strings, Binwalk
  • Результаты в одном месте

Использование:

  1. Upload изображение
  2. Автоматический анализ всеми инструментами
  3. Просмотр результатов по категориям
  4. Download найденных файлов

Анализаторы файлов

Binwalk

Описание: Поиск встроенных файлов и исполняемого кода

Установка:

sudo apt install binwalk

Использование:

# Базовый анализ
binwalk file.jpg

# Извлечение найденных файлов
binwalk -e file.jpg

# Рекурсивное извлечение
binwalk -Me file.jpg

# Сигнатуры
binwalk --signature file.jpg

# С декомпрессией
binwalk --dd='.*' file.jpg

# Карта энтропии (поиск зашифрованных данных)
binwalk -E file.jpg

Примеры вывода:

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 1920 x 1080
41            0x29            Zlib compressed data
153845        0x25905         ZIP archive data

Foremost

Описание: Восстановление файлов по заголовкам

Установка:

sudo apt install foremost

Использование:

# Извлечение всех файлов
foremost -i file.jpg

# Конкретные типы
foremost -t jpg,png,zip -i file.dat

# Вывод в конкретную папку
foremost -i file.jpg -o output_dir

# Verbose режим
foremost -v -i file.jpg

Exiftool

Описание: Анализ метаданных

Использование:

# Просмотр всех метаданных
exiftool file.jpg

# Конкретное поле
exiftool -Comment file.jpg

# Все файлы в директории
exiftool *.jpg

# Экспорт в CSV
exiftool -csv *.jpg > metadata.csv

# Удаление метаданных
exiftool -all= file.jpg

Strings

Описание: Извлечение текстовых строк

Использование:

# Базовое использование
strings file.jpg

# Минимальная длина строки
strings -n 10 file.jpg

# Поиск конкретного паттерна
strings file.jpg | grep -i "flag"
strings file.jpg | grep -E "flag{.*}"

# С указанием кодировки
strings -e l file.jpg  # 16-bit little-endian
strings -e b file.jpg  # 16-bit big-endian

# В hex режиме
strings -t x file.jpg  # показывает offset в hex

Hexedit / xxd

Просмотр hex:

# xxd - hex dump
xxd file.jpg | less

# Поиск magic bytes
xxd file.jpg | head -n 20

# hexedit - интерактивный редактор
hexedit file.jpg
# Tab - переключение ASCII/Hex
# Ctrl+S - поиск
# Ctrl+X - выход

Стеганоанализ

Методология анализа

1. Первичный осмотр

# Тип файла
file image.jpg

# Размер
ls -lh image.jpg

# Метаданные
exiftool image.jpg

# Текстовые строки
strings image.jpg | less

2. Структурный анализ

# Поиск встроенных файлов
binwalk image.jpg
foremost -i image.jpg

# Проверка целостности (для PNG)
pngcheck image.png

# Hex анализ
xxd image.jpg | head -n 50

3. Специализированный анализ

# Автоматические инструменты
zsteg -a image.png
stegsolve image.jpg

# Попытка извлечения
steghide extract -sf image.jpg
outguess -r image.jpg output.txt

# Брутфорс пароля
stegcracker image.jpg rockyou.txt

4. Визуальный анализ

  • Stegsolve - различные битовые плоскости
  • StegOnline - онлайн анализ
  • Проверка аномалий в спектрограмме (для аудио)

Статистический анализ

Chi-square атака

import numpy as np
from PIL import Image
from scipy import stats

def chi_square_test(image_path):
    """Определение LSB стеганографии через Chi-square"""
    img = Image.open(image_path)
    pixels = np.array(img)
    
    # Анализ распределения LSB
    lsb_values = pixels & 1  # Младшие биты
    
    # Ожидаемое равномерное распределение
    total = lsb_values.size
    expected = total / 2
    
    # Chi-square тест
    observed = [np.sum(lsb_values == 0), np.sum(lsb_values == 1)]
    chi2, p_value = stats.chisquare(observed, [expected, expected])
    
    print(f"Chi-square: {chi2}")
    print(f"P-value: {p_value}")
    
    if p_value < 0.05:
        print("Вероятно содержит LSB стеганографию")
    else:
        print("Скорее всего чистое изображение")
    
    return chi2, p_value

# Использование
chi_square_test("suspicious_image.png")

Визуализация LSB

from PIL import Image
import numpy as np

def visualize_lsb(image_path, output_path):
    """Визуализация младших битов"""
    img = Image.open(image_path)
    pixels = np.array(img)
    
    # Извлечение LSB
    lsb = (pixels & 1) * 255  # Умножаем на 255 для видимости
    
    # Сохранение
    Image.fromarray(lsb.astype('uint8')).save(output_path)
    print(f"LSB визуализация сохранена в {output_path}")

visualize_lsb("image.png", "lsb_visual.png")

Автоматизация

Скрипт для массового анализа

#!/bin/bash
# steg_analyzer.sh

FILE=$1
OUTPUT_DIR="analysis_results"
mkdir -p $OUTPUT_DIR

echo "[*] Analyzing: $FILE"

# 1. File info
echo -e "\n=== File Information ===" | tee $OUTPUT_DIR/report.txt
file $FILE | tee -a $OUTPUT_DIR/report.txt
ls -lh $FILE | tee -a $OUTPUT_DIR/report.txt

# 2. Metadata
echo -e "\n=== Metadata ===" | tee -a $OUTPUT_DIR/report.txt
exiftool $FILE | tee -a $OUTPUT_DIR/report.txt

# 3. Strings
echo -e "\n=== Strings ===" | tee -a $OUTPUT_DIR/report.txt
strings $FILE | tee $OUTPUT_DIR/strings.txt
grep -i "flag\|password\|secret" $OUTPUT_DIR/strings.txt | tee -a $OUTPUT_DIR/report.txt

# 4. Binwalk
echo -e "\n=== Binwalk ===" | tee -a $OUTPUT_DIR/report.txt
binwalk $FILE | tee -a $OUTPUT_DIR/report.txt
binwalk -e $FILE -C $OUTPUT_DIR/

# 5. Image-specific
if [[ $FILE =~ \.(png|PNG)$ ]]; then
    echo -e "\n=== Zsteg ===" | tee -a $OUTPUT_DIR/report.txt
    zsteg $FILE | tee -a $OUTPUT_DIR/report.txt
    
    pngcheck -v $FILE | tee -a $OUTPUT_DIR/report.txt
fi

# 6. Steghide
echo -e "\n=== Steghide Info ===" | tee -a $OUTPUT_DIR/report.txt
steghide info $FILE 2>&1 | tee -a $OUTPUT_DIR/report.txt

# 7. Outguess
echo -e "\n=== Outguess ===" | tee -a $OUTPUT_DIR/report.txt
outguess -r $FILE $OUTPUT_DIR/outguess_output.txt 2>&1 | tee -a $OUTPUT_DIR/report.txt

echo -e "\n[+] Analysis complete! Check $OUTPUT_DIR/"

CTF и практические задачи

Типичные CTF челленджи

1. Базовый LSB

Сценарий: Флаг встроен в LSB PNG изображения

Решение:

zsteg image.png
# или
python3 -c "from stegano import lsb; print(lsb.reveal('image.png'))"

2. Steghide с паролем

Сценарий: Данные спрятаны через steghide с паролем из wordlist

Решение:

stegcracker image.jpg /usr/share/wordlists/rockyou.txt

3. Многослойная стеганография

Сценарий: ZIP в изображении, в ZIP еще одно изображение с данными

Решение:

binwalk -e image.jpg
cd _image.jpg.extracted
unzip *.zip
zsteg hidden_image.png

4. Спектрограмма

Сценарий: Флаг записан визуально в спектрограмме аудио

Решение:

# Открыть в Sonic Visualiser или Audacity
audacity audio.wav
# Add spectrogram
# Прочитать визуально флаг

5. Whitespace стеганография

Сценарий: Секрет в пробелах/табуляциях текстового файла

Решение:

stegsnow -C file.txt

# или визуализация
cat -A file.txt  # Покажет табы как ^I

6. PNG chunks

Сценарий: Данные в дополнительном PNG chunk

Решение:

pngcheck -v image.png
# Искать необычные chunks

# Извлечение с помощью Python
python3 << EOF
from PIL import Image
img = Image.open('image.png')
print(img.info)
EOF

7. Homoglyph / Unicode

Сценарий: Флаг закодирован невидимыми Unicode символами

Решение:

with open('text.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    
# Поиск zero-width символов
for char in content:
    if char in ['\u200B', '\u200C', '\u200D']:
        print(repr(char))

8. QR code в изображении

Сценарий: QR код спрятан в одном из цветовых каналов

Решение:

  • Открыть в Stegsolve
  • Переключать plane 0-7 для каждого канала
  • Найти QR код
  • Декодировать через zbarimg или онлайн
# Если QR виден в файле
zbarimg image.png

Платформы для практики

  1. picoCTF - https://picoctf.org/
  2. CTFtime - https://ctftime.org/
  3. CryptoPals - https://cryptopals.com/
  4. Root-Me - https://www.root-me.org/
  5. TryHackMe - https://tryhackme.com/
  6. HackTheBox - https://www.hackthebox.com/

Защита от стеганографии

Детектирование

1. Превентивные меры

Для организаций:

- DLP системы с стеганоанализом
- Блокировка/санитизация метаданных
- Ограничение типов файлов
- Мониторинг необычного трафика

2. Технические меры

Sanitization:

# Удаление метаданных
exiftool -all= file.jpg

# Переконвертация (уничтожит LSB стего)
convert original.png -quality 100 cleaned.png

# Для PDF
qpdf --linearize input.pdf output.pdf

Детекторы:

  • StegExpose - ML детектор стеганографии
  • Chi-square анализ
  • Статистический анализ распределения битов

3. Организационные меры

  • Политики безопасности
  • Обучение персонала
  • Аудит передаваемых файлов
  • Использование DLP
  • Мониторинг аномалий

Рекомендации

Для синих команд (защита):

  1. Мониторинг размеров файлов (стего файлы часто больше)
  2. Анализ энтропии файлов
  3. Baseline обычного трафика
  4. Проверка метаданных
  5. Использование стеганоанализа для критичных данных

Для красных команд (атака):

  1. Использовать распространенные изображения
  2. Минимальное изменение размера файла
  3. Комбинировать со сжатием
  4. Использовать шифрование перед встраиванием
  5. Имитировать нормальное поведение

Дополнительные ресурсы

Обучающие материалы

Курсы:

  • Coursera - "Cryptography and Steganography"
  • Udemy - "Digital Forensics and Steganography"

Книги:

  • "Hiding in Plain Sight: Steganography and the Art of Covert Communication"
  • "Information Hiding: Steganography and Watermarking"

Статьи:

  • SANS Reading Room - Steganography papers
  • ArXiv - новые исследования в стеганографии

Инструменты - полный список

Изображения:

  • Steghide, Stegsolve, Zsteg, OpenStego
  • StegOnline, Outguess, jsteg
  • stegano (Python), LSBSteg

Аудио:

  • DeepSound, WavSteg, Steghide
  • Sonic Visualiser, Audacity

Видео:

  • OmniHide PRO, MSU StegoVideo
  • FFmpeg (анализ)

Текст:

  • stegsnow, SpamMimic
  • Unicode стеганография (custom scripts)

Анализ:

  • Binwalk, Foremost, Exiftool
  • Strings, Hexedit
  • Aperi'Solve, StegExpose

Автоматизация:

  • StegCracker (брутфорс)
  • Скрипты для массового анализа

Сообщества

  • r/steganography
  • r/crypto
  • Discord: CTF сообщества
  • GitHub: awesome-steganography

Практические задания

Задание 1: Базовое LSB

  1. Скачайте любое изображение
  2. Используйте stegano для встраивания текста
  3. Проверьте с помощью zsteg
  4. Визуализируйте LSB через Python

Задание 2: Steghide

  1. Создайте текстовый файл с секретом
  2. Встройте в JPEG с паролем
  3. Попробуйте извлечь без пароля
  4. Используйте stegcracker с маленьким wordlist

Задание 3: Аудио стеганография

  1. Найдите WAV файл
  2. Используйте WavSteg для встраивания
  3. Проанализируйте в Sonic Visualiser
  4. Извлеките данные

Задание 4: Многослойный CTF

  1. Создайте ZIP архив с текстом
  2. Встройте ZIP в изображение с binwalk
  3. Скройте это изображение в другом через LSB
  4. Попробуйте извлечь весь путь

Задание 5: Стеганоанализ

  1. Возьмите несколько изображений
  2. В некоторые встройте данные
  3. Используйте chi-square анализ
  4. Определите, какие содержат стего

Заключение

Стеганография — мощный инструмент как для защиты, так и для атаки. Ключевые моменты:

Для пентестеров:

  • Всегда проверяйте файлы на скрытые данные
  • Используйте комплексный подход (автоматика + ручной анализ)
  • Изучайте новые техники и инструменты

Для защитников:

  • Внедряйте DLP с стеганоанализом
  • Обучайте персонал рискам
  • Мониторьте аномалии в файлах

Этические аспекты:

  • Используйте только с разрешением
  • Уважайте privacy
  • Не распространяйте вредоносный контент

Развитие навыков:

  • Участвуйте в CTF
  • Практикуйтесь на легальных платформах
  • Изучайте новые методы и инструменты

Быстрый чеклист анализа

[ ] file, exiftool, strings
[ ] binwalk -e, foremost
[ ] zsteg -a (для PNG)
[ ] steghide info / extract
[ ] stegsolve (визуальный анализ)
[ ] Audacity/Sonic Visualiser (для аудио)
[ ] Проверка спектрограммы
[ ] Анализ метаданных
[ ] Проверка необычных chunks/секций
[ ] Брутфорс паролей (stegcracker)
[ ] Hexdump анализ
[ ] Статистический анализ

Удачи в изучении стеганографии! 🔍🖼️🔊