Стеганография (от греч. στεγανός — скрытый + γράφω — пишу) — практика сокрытия информации внутри других, на первый взгляд безобидных, данных.
Стеганография 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
Использование:
- File → Open — загрузить изображение
- Анализ через различные фильтры:
- Red/Green/Blue plane 0-7 — просмотр отдельных битовых плоскостей
- Alpha plane — проверка альфа-канала
- Random colour map — случайная палитра
- Analyse → Data Extract — извлечение данных из битовых плоскостей
- 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:
- Data Hiding → Embed
- Выбрать Message File (файл для скрытия)
- Выбрать Cover File (контейнер)
- Ввести пароль (опционально)
- Выбрать Output Stego File
- Нажать Embed
Для извлечения:
- Data Hiding → Extract
- Выбрать Stego File
- Ввести пароль
- Указать Output Folder
- Нажать Extract
6. StegOnline
Описание: Онлайн-инструмент для стеганоанализа
URL: https://stegonline.georgeom.net/
Возможности:
- LSB анализ
- Просмотр цветовых каналов
- Извлечение битовых плоскостей
- Инверсия, зеркалирование
- Bruteforce LSB комбинаций
- Скачивание результатов
Использование:
- Upload Image
- Go → Browse Bit Planes
- Переключение между каналами (R, G, B, A)
- Extract Data → настройка параметров
- 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
Стеганография в аудио
Методы скрытия в аудио
- LSB — аналогично изображениям
- Echo Hiding — добавление эха с закодированными данными
- Phase Coding — изменение фазы
- 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/
Использование:
- Открыть аудио файл
- Drag & Drop файлов для скрытия
- Установить пароль (опционально)
- Указать выходной файл
- Encode Secret Files
Извлечение:
- Открыть stego-файл
- Ввести пароль
- Extract Secret Files
3. Sonic Visualiser
Установка:
sudo apt install sonic-visualiser
Использование:
- File → Open → выбрать аудио
- Layer → Add Spectrogram
- Анализ спектрограммы на наличие аномалий
- Регулировка параметров:
- Window size
- Colour scheme
- Threshold
Поиск скрытых данных:
- Визуальные паттерны в спектрограмме
- Необычные частоты
- SSTV сигналы
- Morse code в амплитуде
4. Audacity
Установка:
sudo apt install audacity
Анализ аудио:
- Открыть файл
- Analyze → Plot Spectrum
- Analyze → Spectrogram
- Изменение скорости: Effect → Change Speed
- Реверс: Effect → Reverse
- Изоляция каналов: 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()
Стеганография в текстах
Методы текстовой стеганографии
- Whitespace — использование пробелов и табуляций
- Zero-width characters — невидимые символы Unicode
- Linguistic — синонимы, структура предложений
- 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
- Результаты в одном месте
Использование:
- Upload изображение
- Автоматический анализ всеми инструментами
- Просмотр результатов по категориям
- 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
Платформы для практики
- picoCTF - https://picoctf.org/
- CTFtime - https://ctftime.org/
- CryptoPals - https://cryptopals.com/
- Root-Me - https://www.root-me.org/
- TryHackMe - https://tryhackme.com/
- 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
- Мониторинг аномалий
Рекомендации
Для синих команд (защита):
- Мониторинг размеров файлов (стего файлы часто больше)
- Анализ энтропии файлов
- Baseline обычного трафика
- Проверка метаданных
- Использование стеганоанализа для критичных данных
Для красных команд (атака):
- Использовать распространенные изображения
- Минимальное изменение размера файла
- Комбинировать со сжатием
- Использовать шифрование перед встраиванием
- Имитировать нормальное поведение
Дополнительные ресурсы
Обучающие материалы
Курсы:
- 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
- Скачайте любое изображение
- Используйте stegano для встраивания текста
- Проверьте с помощью zsteg
- Визуализируйте LSB через Python
Задание 2: Steghide
- Создайте текстовый файл с секретом
- Встройте в JPEG с паролем
- Попробуйте извлечь без пароля
- Используйте stegcracker с маленьким wordlist
Задание 3: Аудио стеганография
- Найдите WAV файл
- Используйте WavSteg для встраивания
- Проанализируйте в Sonic Visualiser
- Извлеките данные
Задание 4: Многослойный CTF
- Создайте ZIP архив с текстом
- Встройте ZIP в изображение с binwalk
- Скройте это изображение в другом через LSB
- Попробуйте извлечь весь путь
Задание 5: Стеганоанализ
- Возьмите несколько изображений
- В некоторые встройте данные
- Используйте chi-square анализ
- Определите, какие содержат стего
Заключение
Стеганография — мощный инструмент как для защиты, так и для атаки. Ключевые моменты:
Для пентестеров:
- Всегда проверяйте файлы на скрытые данные
- Используйте комплексный подход (автоматика + ручной анализ)
- Изучайте новые техники и инструменты
Для защитников:
- Внедряйте DLP с стеганоанализом
- Обучайте персонал рискам
- Мониторьте аномалии в файлах
Этические аспекты:
- Используйте только с разрешением
- Уважайте privacy
- Не распространяйте вредоносный контент
Развитие навыков:
- Участвуйте в CTF
- Практикуйтесь на легальных платформах
- Изучайте новые методы и инструменты
Быстрый чеклист анализа
[ ] file, exiftool, strings
[ ] binwalk -e, foremost
[ ] zsteg -a (для PNG)
[ ] steghide info / extract
[ ] stegsolve (визуальный анализ)
[ ] Audacity/Sonic Visualiser (для аудио)
[ ] Проверка спектрограммы
[ ] Анализ метаданных
[ ] Проверка необычных chunks/секций
[ ] Брутфорс паролей (stegcracker)
[ ] Hexdump анализ
[ ] Статистический анализ
Удачи в изучении стеганографии! 🔍🖼️🔊