Статья Стеганография в аудиофайлах: как малварь прячут внутри WAV и как это обнаружить

Аналитик в тёмном худи сидит спиной к камере перед монитором в полностью тёмной комнате. Экран с зелёным терминалом и визуализацией аудиоволны — единственный источник света.


Три месяца назад при разборе инцидента в финтехе я ковырял pcap трёхнедельной давности и не мог понять, как бот обновляет payload - на эндпоинте ни одного нового PE-файла, а C2-трафик шёл GET-запросами к легитимному CDN. Ответ нашёлся в WAV-файлах: шеллкод был упакован в младшие биты аудиосэмплов, а загрузчик на хосте извлекал его при каждом «скачивании». Файл воспроизводился как обычная музыка без слышимых артефактов, EDR молчал - для него это был медиафайл. Просто музыка. Ничего подозрительного.

Стеганография в аудиофайлах - не теоретическая экзотика из CTF-задач. В 2019 году Symantec зафиксировала, что группа Turla (Waterbug) использует WAV для доставки кода на заражённые хосты, а исследователи Cylance (ныне BlackBerry) в том же году нашли криптомайнеры и Metasploit-шеллы внутри аудиофайлов. С тех пор техника только развивается, а detection в большинстве организаций стоит на нуле.

Почему WAV: что делает аудиоформат удобным контейнером для малвари​

WAV (RIFF WAVE) хранит аудио в несжатом PCM-формате. Каждый сэмпл - 16-битное целое число от -32768 до 32767. Изменение младшего бита меняет амплитуду на 1/65536 от полного диапазона - это физически неразличимо на слух. Трёхминутный стерео-файл при 44.1 кГц весит около 30 МБ и содержит порядка 15.8 миллионов сэмплов. Один бит на сэмпл - почти 2 МБ ёмкости. Для шеллкода, конфигурации C2 или компактной DLL - за глаза.

С точки зрения атакующего, WAV-контейнер закрывает сразу несколько проблем.

Межсетевые экраны и DLP классифицируют аудиофайлы как безопасный медиаконтент. Скачивание WAV с публичного CDN или музыкального сервиса не генерирует алертов - для сетевого фильтра это «пользователь слушает музыку». Поведенческий анализ EDR срабатывает на исполняемые файлы и скрипты, а WAV сам по себе не исполняется - payload извлекает отдельный загрузчик, уже сидящий на хосте. В SIEM скачивание аудио тонет в общем потоке HTTP-запросов. Кто будет расследовать GET на .wav?

Согласно классификации stegomalware, техника относится к Type I (Update): стеготекст и ключ скачиваются с удалённого сервера в runtime, а алгоритм извлечения зашит в загрузчик. Атакующий может обновлять payload без изменения кода на эндпоинте - заменил WAV на CDN, и бот уже тянет свежий шеллкод.

Применимость: техника работает на второй стадии атаки (post-initial access). Initial access - через классику: фишинг, эксплуатацию уязвимостей. WAV используется для скрытного обновления payload и covert channel при C2-коммуникации. Годится и для внешних пентестов (exfiltration через легитимные сервисы), и для внутренних (передача данных через SMB-шары).

Методы встраивания payload в WAV файлы​

LSB стеганография аудио: классический и самый распространённый подход​

Метод наименее значащих битов (LSB) - рабочая лошадка сокрытия полезной нагрузки в аудио. Младший бит каждого 16-битного сэмпла заменяется битом payload. Ухо не уловит изменение амплитуды в 1 единицу из 65536 - это за пределами человеческого восприятия.

По данным Cylance (октябрь 2019), именно LSB-загрузчики были одним из трёх типов, обнаруженных в реальной кампании. Загрузчики декодировали и запускали полноценные PE-файлы из младших битов аудиоданных. При воспроизведении часть файлов звучала как обычная музыка - «that had no discernible quality issues or glitches». Без артефактов, без щелчков, без подозрений.

Ограничения для атакующего: LSB уязвим к статистическому стегоанализу (тест хи-квадрат), если payload не зашифрован перед встраиванием. В реальных кампаниях шифрование перед встраиванием - стандарт, что нейтрализует простые статистические тесты. Ещё одна проблема: метод не переживает lossy-сжатие (MP3, OGG, Opus). Если файл пройдёт через транскодер - payload разрушится. Атакующий привязан к форматам без потерь.

Детект EDR: ни CrowdStrike Falcon, ни Microsoft Defender for Endpoint, ни SentinelOne не инспектируют содержимое аудиофайлов. Поведенческий анализ сработает только на этапе исполнения извлечённого payload. Сам WAV проходит незамеченным.

Фазовое кодирование и спектральное встраивание​

Фазовое кодирование модифицирует фазу начального сегмента аудиосигнала, кодируя данные в фазовых разностях между последовательными сегментами. Ёмкость ниже, чем у LSB, зато метод устойчивее к обработке сигнала и некоторым видам сжатия.

Спектральное встраивание помещает данные в определённые частотные диапазоны - обычно выше 14–16 кГц, где человеческий слух наименее чувствителен. На спектрограмме такие данные видны как аномальные паттерны. Подход широко используется для цифровых водяных знаков в музыкальной индустрии - Nielsen People Meter встраивает идентификаторы станций и временные метки под программное аудио, что отслеживается портативными устройствами у слушателей.

Эхо-стеганография кодирует данные через введение микрозадержек эха в аудиосигнал. Самый устойчивый вариант к аналоговым искажениям, но ёмкость - единицы килобайт на минуту аудио. Для серьёзного payload не годится.

Применимость: фазовое кодирование и эхо-стеганография - для сценариев, где аудио может проходить через lossy-транскодирование (VoIP-каналы, стриминговые платформы). В малвари встречаются значительно реже LSB: сложнее в реализации, а выигрыш для атакующего невелик, если есть lossless-канал.

rand()-based loader: обфускация под видом аудио​

В кампании 2019 года, описанной Cylance, часть загрузчиков использовала не стеганографию, а декодирование на основе rand() с фиксированным seed. WAV-файл содержал данные, которые при воспроизведении звучали как белый шум (статика), но после применения PRNG-последовательности превращались в PE-файл или шеллкод. По сути - матрёшка, только вместо деревянных кукол внутри лежит Metasploit reverse shell.

Cylance классифицировала три типа загрузчиков в одной кампании:
  1. LSB-стеганография - извлечение и запуск PE-файла из младших битов легитимного аудио
  2. rand()-based PE - PRNG-декодирование полноценного исполняемого файла из данных, звучащих как шум
  3. rand()-based shellcode - PRNG-декодирование и прямое исполнение шеллкода в памяти
Оба типа payload - XMRrig (Monero CPU miner) и Metasploit reverse shell - были обнаружены в одной среде. Двойная цель: финансовая выгода от майнинга плюс persistent remote access.

Ограничение для защитника: rand()-based метод - не стеганография в строгом смысле. Стегоанализ здесь бесполезен. Файл со статикой не содержит «скрытых» данных в легитимном аудио - весь файл и есть обфусцированный payload. Детектировать можно по поведению загрузчика (процесс читает WAV, затем запускает шеллкод) или по сетевым аномалиям (регулярное скачивание WAV одинакового размера с одного источника).

Реальные кампании: аудио стеганография в кибератаках​

Turla/Waterbug: WAV как covert channel для APT​

В июне 2019 года Symantec зафиксировала, что группа Turla (Waterbug) - российская кибершпионская APT - использует WAV-файлы для передачи вредоносного кода с C2-серверов на ранее заражённые хосты. Это не initial access - WAV-стеганография применялась как covert channel для обновления payload на уже скомпрометированных машинах.

Контекст: до этого stegomalware фиксировали преимущественно в изображениях. Среди ранних примеров - Operation Shady RAT (2011), где IP-адреса C2 прятали в цифровых изображениях, и Duqu (2011), встраивавший данные жертв в JPEG перед эксфильтрацией. Zeus/Zbot, Gatak/Stegoloader, TeslaCrypt использовали PNG и JPEG для payload. Переход Turla на WAV - расширение вектора от изображений к аудио. Логичная эволюция: аудиофайлы крупнее, вмещают больше данных, и на них вообще никто не смотрит.

Для пентестера: модель Turla показывает сценарий, где initial access уже получен (через spear-phishing или watering hole), а WAV-канал обеспечивает скрытное обновление инструментария. При моделировании APT во внутреннем пентесте подобный covert channel позволяет обходить сетевой мониторинг на этапах lateral movement и privilege escalation.

Cylance 2019: три типа загрузчиков в одной инфраструктуре​

В октябре 2019 года BlackBerry Cylance опубликовала детальное исследование кампании с DLL-файлами внутри WAV. Малварь, уже сидящая на заражённом хосте, скачивала WAV-файл, извлекала DLL побитно и запускала её. Результат - установка XMRrig для майнинга Monero.

Принципиальное отличие от Turla: если Turla - nation-state шпионаж, то кампания Cylance - «run-of-the-mill crypto-mining operation», обычная финансово мотивированная атака. WAV-стеганография и сокрытие данных в медиафайлах перестали быть инструментом только APT-группировок. Техника доступна рядовым операторам малвари - порог входа снизился.

Обнаружение стеганографии в WAV: практический detection workflow​

Требования к окружению​

  • ОС: Linux (Kali 2023.x+, Ubuntu 22.04+) или Windows 10/11 с WSL2
  • Python: 3.8+, библиотеки numpy, scipy; модуль wave из стандартной библиотеки
  • Audacity: 3.x для визуального спектрального анализа
  • binwalk: 2.3+ для энтропийного анализа и поиска встроенных артефактов
  • YARA: 4.x для автоматизированного сканирования
  • RAM: минимум 4 ГБ (для анализа файлов до 100 МБ)
  • Права: обычный пользователь, root не требуется
  • Сеть: workflow полностью offline-совместим

Энтропийный анализ и первичная разведка​

Первый шаг
🔓 Часть контента скрыта: Эксклюзивный контент для зарегистрированных пользователей.

Слепые зоны: где стандартная защита не видит скрытый код в аудио​

Стандартный стек безопасности организации не рассчитан на обнаружение стеганографии в медиафайлах:

Средство защитыЧто видитЧто пропускает
EDR (CrowdStrike, MDE)Поведение загрузчика при извлечении payloadСам WAV с embedded payload
Network DLPФакт скачивания, метаданныеPayload внутри аудиоданных
Антивирус (сигнатурный)PE/shellcode в открытом видеЗашифрованный payload в LSB
SIEMСетевые события (DNS, HTTP)Нет правил для анализа энтропии файлов
SandboxИсполняемые файлыWAV не запускается - sandbox его не анализирует

Для пентестера это означает: WAV-стеганография - рабочий covert channel в средах с modern EDR (Elastic 8.x, CrowdStrike, SentinelOne), при условии, что загрузчик на хосте уже прошёл начальный детект. Beacon-периодичность маскируется под скачивание медиаконтента.

Для blue team ключевой вектор детекта - не анализ содержимого WAV (это дорого и при зашифрованном payload ненадёжно), а поведенческие индикаторы:
  • Регулярное скачивание WAV одинакового или близкого размера с одного источника (SIEM-корреляция по user-agent + URL pattern)
  • Процесс, который читает WAV-файл и в течение 60 секунд порождает дочерний процесс или исходящее сетевое соединение (EDR telemetry)
  • Аномальный объём скачанных медиафайлов для конкретного пользователя или endpoint (baseline deviation)
Концептуальное правило для SIEM: endpoint скачивает WAV более 5 МБ с некатегоризированного домена, в течение минуты тот же процесс инициирует исходящее соединение на нестандартный порт - кандидат на alert. Не идеальный детект, но значительно лучше нулевого покрытия.

Стеганография в аудио - одна из тех техник, про которые все знают, но почти никто не включает в модель угроз. За последние годы анализа инцидентов с covert channels я вижу устойчивый паттерн: SOC-команды строят детекшн вокруг исполняемых файлов, скриптов и сетевых сигнатур, а медиафайлы проходят сквозь мониторинг как фоновый шум. Инструменты есть - binwalk, YARA, Python-скрипты для стегоанализа доступны без ограничений. Проблема в приоритетах: аудиофайлы не попадают в scope, потому что «это же просто музыка».

И проблема глубже. Даже если добавить энтропийный анализ в file inspection pipeline, зашифрованный payload в LSB вы не поймаете статистикой. Спектральный анализ каждого WAV в потоке - нереалистичная задача для организации, где через прокси проходят тысячи медиафайлов в день. Единственный масштабируемый подход - поведенческий: не пытаться детектить обфускацию вредоносного кода в файле, а ловить аномалии в том, что происходит после скачивания. Процесс прочитал WAV и полез в сеть? Это уже alert. Но для этого нужно перестроить корреляционные правила, а не просто добавить ещё одну YARA-сигнатуру в сканер.

Подозреваю, что в ближайшие пару лет мы увидим рост стеганографических каналов не только в WAV, но и в видео, подкастах, стримах. Генеративные модели уже создают синтетический аудиоконтент с идеальным спектром - готовый покровный файл для payload, который не перехватит ни один WAF. Попробуйте прогнать свои SIEM-правила через описанный выше сценарий: endpoint скачивает WAV, через минуту - исходящее соединение. Если алерт не прилетит - у вас та же слепая зона, что и у 90% SOC-команд. На WAPT эту цепочку - от встраивания payload до поведенческого детекта - проходят в модулях по covert channels с лабами.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab