Возможность скрывать одни данные внутри других может позволить злоумышленнику скрытно украсть массу конфиденциальной информации.
Проблема сокрытия данных волнует человечество с древних времен. Для защиты информации обычно используют шифры. Надежность их может быть разной, но к тому моменту, когда врагу все же удастся его взломать, информация будет уже старой.
В эпоху цифровых технологий положение несколько изменилось: вычислительные возможности компьютеров непрерывно увеличиваются, а, кроме того, появилось огромное количество каналов связи, по которым можно передавать информацию. При этом красть данные стало значительно легче.
Если раньше не совсем честному работнику, чтобы вынести какой-нибудь секретный чертеж или документ, нужно было скрывать бумажную копию, то в эпоху цифровых технологий выносить секреты стало намного легче. Зашифрованный файл можно отослать по сети, а можно скинуть на съемный носитель, флешку и скрытно вынести в кармашке.
В первом случае все относительно просто, есть очень много решений по контролю трафика. Для борьбы с копированием на флешки тоже существуют средства предотвращения вторжений DLP (Data Leak Prevention). Вообще большая часть DLP-решений контролирует все каналы утечки данных на компьютере, как сетевые, так и периферию. Так что правильно настроенная система предотвращения утечек данных может не только создать злоумышленнику проблемы при хищении информации, но и даст возможность администраторам контролировать все его действия, тем самым выявляя, какими секретами он интересуется и какие средства и способы применяет для кражи информации.
Следующим очевидным шагом в этом «соревновании брони и снаряда» должно было бы стать шифрование выносимой информации с дальнейшей передачей по каналам, описанным выше. Но сама попытка передать наружу файл, который невозможно прочитать, должна вызывать у безопасников серьезные подозрения и блокироваться соответствующим программным обеспечением. Но можно попробовать скрыть зашифрованные данные внутри другого контента. Вот мы и плавно подошли к главной теме данной статьи — стеганографии.
Стеганография, а не стенография
Статья в Википедии говорит нам, что стеганография (буквально переводится с греческого как «тайнопись») -это наука о скрытой передаче информации путем сохранения в тайне самого факта передачи. В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает сам факт его существования. Хотя обычно эти две технологии используют совместно.
Стеганографию используют для всевозможных целей. Нередко ее используют не для воровства, а для борьбы с похитителями. Например, при защите авторского права, когда в документе прячут некую скрытую закладку, позволяющую определять того, кому принадлежит данная копия файла. В случае если такая метка будет затем обнаружена где-либо на торрентах, правообладатели смогут найти, кто именно его выложил, и предъявить ему соответствующие претензии.
Но в статье я буду описывать использование стеганографии именно как средства хищения данных. Начнем с рассмотрения некоторых теоретических вопросов. Сразу оговорюсь, что, рассказывая о технических способах реализации стеганографии, буду затрагивать только цифровой стеганографии, то есть сокрытия информации внутри других цифровых данных. При этом не стану касаться способов, основанных на использовании различными файловыми системами зарезервированных разделов жесткого или гибкого диска, или методик, связанных с особенностями функционирования всевозможных аппаратных платформ и операционных систем. В данной статье нас будут интересовать только файлы различных форматов и возможности создания тайников в них.
Стеганография в теории
Прежде всего предлагаю рассмотреть основные алгоритмы, которые используются для стеганографии.
Методы типа LSB (Least Significiant Bit, наименьший значащий бит) и аналогичные. Их суть заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Возьмем в качестве примера графический файл. Наглядно это выглядит следующим образом: мы меняем младшие биты в коде цвета пикселя на картинке. Если считать, что код цвета имеет 32-битное значение, то замена 0 на 1 или наоборот не приведет к сколько-нибудь существенному искажению картинки, ощутимому для органов восприятия человека. А между тем в этих битах для большой картинки можно что-то спрятать.
Рассмотрим небольшой пример. Допустим, имеется 8-битное изображение в градациях серого. 00h (00000000Ь) обозначает черный цвет, FFh (11111111Ь) — белый. Всего имеется 256 градаций ( ). Также предположим, что сообщение состоит из 1 байта — например, 01101011Ь. При использовании двух младших бит в описаниях пикселей нам потребуется 4 пикселя. Допустим, они черного цвета. Тогда пиксели, содержащие скрытое сообщение, будут выглядеть следующим образом: 00000001 00000010 00000010 00000011. Тогда цвет пикселей изменится: первого — на 1/255, второго и третьего — на 2/255 и четвертого — на 3/255. Такие градации, мало того, что незаметны для человека, могут вообще не отобразиться при использовании низкокачественных устройств вывода.

Стоит отметить, что методы LSB являются неустойчивыми к разного рода «шуму». Например, в случае если на передаваемый контент накладываются какие-либо «мусорные» биты, это искажает как исходный контент, так и (что для нас особенно важно) скрытое сообщение. Иногда оно даже становится нечитаемым. Аналогичная методика используется и для других форматов.
Еще один метод заключается в так называемом впаивании скрытой информации. В данном случае происходит наложение скрываемого изображения (звука, иногда текста) поверх оригинала. Простейший пример — надпись белым цветом на белом же фоне в PDF-документе. Злоумышленники обычно не используют данный метод по причине относительной простоты обнаружения автоматическими методами. Однако данный метод зачастую применяется при создании «водяных знаков» для защиты авторства контента. В этом случае данные знаки, как правило, не скрываются.
И третий метод — использование особенностей форматов файлов. К примеру, это может быть запись информации в метаданные, используемые данным форматом файла, или в различные другие, не используемые зарезервированные поля. Например, это может быть документ Microsoft Word, внутри которого будет спрятана информация, никак не отображаемая при открытии данного документа.
Аудио стеганография
Еще один способ сокрытия информации применим только к аудиофайлам — это эхо-метод. Он использует неравномерные промежутки между эхо-сигналами для кодирования последовательности значений. В общем случае возможно создание условий, при которых данные сигналы будут незаметны для человеческого восприятия. Эхо-сигнал характеризуется тремя параметрами: начальной амплитудой, степенью затухания и задержкой. При достижении некоего порога между сигналом и эхом они смешиваются. В этой точке человеческое ухо не может уже отличить эти два сигнала. Для обозначения логического нуля и единицы используется две различных задержки. Они обе должны быть меньше, чем порог чувствительности уха слушателя к получаемому эху.
Однако на практике этот метод тоже не слишком надежен, так как не всегда можно точно определить, когда был передан ноль, а когда единица, и в результате велика вероятность искажения скрытых данных.
Другой вариант использования стеганографии в аудиофайлах — фазовое кодирование (phase coding). Происходит замена исходного звукового элемента на относительную фазу, которая и является секретным сообщением. Фаза подряд идущих элементов должна быть добавлена таким образом, чтобы сохранить относительную фазу между исходными элементами, в противном случае возникнет искажение, заметное для человеческого уха.
На сегодняшний день фазовое кодирование является одним из самых эффективных методов скрытия информации.
Программы для стеганографии
На этом, я думаю, с теорией можно закончить и надо перейти к практическим аспектам реализации стеганографии. Я не буду описывать коммерческие решения, а ограничусь рассказом о небольших бесплатных утилитах, которые злоумышленник может легко использовать, даже не имея административных прав в системе.
В качестве файла для хранения данных я использовал изображение 1680х1050, сохраненное в различных форматах: ВМР, PNG, JPEG. Скрываемым документом выступал текстовый файл размером порядка 40 Кб. Все описанные программы справились с поставленной задачей: текстовый файл был успешно сохранен и затем извлечен из исходного файла. При этом сколько-нибудь заметных искажений картинки обнаружено не было. Представленные далее утилиты можно скачать с сайта.
Автором всех рассмотренных в данном обзоре программ, является Александр Мясников.
ImageSpyer G2
Утилита для сокрытия информации в графических файлах с использованием криптографии. При этом поддерживается около 30 алгоритмов шифрования и 25 хеш-функций для шифрования контейнера. Скрывает объем, равный числу пикселей изображения. Опционально доступна компрессия скрываемых данных.

Утилита совместима с Windows 8. В качестве исходных графических файлов могут использоваться форматы ВМР, JPEG, WMF, EMF, TIFF.
Это одна из древних утилит, когда‑то написанных Александром Мясниковым и ныне встречающаяся лишь на просторах файлопомоек. Официальный сайт у нее если когда‑то и был, то давно не работает. Тем не менее программа заслуживает внимания.
ImageSpyer прячет секретные файлы только в картинки и даже разрешает ставить пароль, чтобы зашифровать данные перед внедрением. Программа поддерживает около 30 алгоритмов шифрования внедряемой информации и 25 хеш‑функций для подписи, чтобы убедиться, что встроенный в картинку файл не побился при передаче.
Большой плюс — наличие графического интерфейса с понятными пояснениями и множеством настроек. Выходных форматов всего два: BMP и TIFF.
Посмотрим, насколько сильно увеличился объем фотографии.

Как видишь, из маленького котика с размером 59,6 Кбайт мы сделали толстого кота на целых 1530 Кбайт. Результат неплохой, да и работает ImageSpyer быстро, так что смело рекомендуем к использованию.
Скачать бесплатно ImageSpyer G2, вы можете по этой ссылке.
RedJPEG
Интерфейс этой программы, как и следует из названия, выполнен в красном стиле. Эта простая в использовании утилита предназначена для сокрытия любых данных в JPEG в изображении (фото, картинка) с помощью авторского стеганографического метода. Использует открытые алгоритмы шифрования, поточный шифр AMPRNG и Cartman II DDP4 в режиме хеш-функции, LZMA-компрессию.

Профессиональная расширенная версия RedJPEG ХТ дополнена маскировкой факта внедрения и усиленной процедурой инициализации поточного шифра на основе характеристик изображения. Включены х86 и х86-64 сборки.

А что у нас по объему после запаковки текста в картинку?
Впечатления исключительно позитивные. Программа позволяет хорошо спрятать и зашифровать любую нужную информацию. Подходит для постоянного использования.
Также имеется RedJPEG ХТ for ТС WCX плагин Total Comanderг, обладающий аналогичным функционалом.
Скачать бесплатно RedJPEG, вы можете по этой ссылке.
DarkCryptTC и Проект «Заря»
Эту программу, можно назвать наиболее мощным стеганографическим решением. Она поддерживает более сотни различных симметричных и асимметричных криптоалгоритмов. Включает в себя поддержку собственной системы плагинов, предназначенной для блочных шифров (BlockAPI), текстовую, аудио и графическую стеганографию (включая реальную стеганографию JPEG), мощный генератор паролей и систему уничтожения информации и ключей.

Список поддерживаемых форматов действительно впечатляет: *.txt, *.html, *.xml, *.docx, *. odt, *.bmp, *jpg, *.tiff, *.png, *.jp2, *.psd, tga, *.mng, *.wav, *.ехе, *.dll.
Набор программ для стеганографии не слишком большой, но он вполне достаточен для того, чтобы эффективно скрывать информацию в файлах различных форматов.
Скачать бесплатно DarkCryptTC, вы можете по этой ссылке.
OpenStego
Проект OpenStego реализован на Java, имеет поддержку шифрования AES и крайне популярен среди желающих познакомиться со стеганографией. Поддерживает плагины, чтобы ты сам смог реализовать какой‑нибудь стеганографический алгоритм. Есть версии и для Windows, и для Linux.

Как и ImageSpyer, OpenStego значительно раздувает размеры файла, хоть и не настолько сильно. Поддерживается также всего один способ упаковки, но это легко поправить плагинами. Выходные файлы могут быть только в формате PNG, но это нельзя назвать совсем уж большим минусом, тем более что на вход можно подавать почти любой формат.
Есть и интересная функция, которой я не нашел у конкурентов, — Digital Watermarking. Она позволяет тайком пометить фотографию, чтобы легко найти вора. Для этого программа внедряет в картинку незаметный идентификатор, который в дальнейшем можно будет достать и проверить, кто взял картинку без спроса.
Программа не требует установки, а запускается батником.

Файл на выходе получился куда толще, чем был, — размер увеличился почти на 800 Кбайт.
По сравнению с ImageSpyer OpenStego все же более богат фичами, что мне понравилось.
Скачать OpenStego с GitHub
SilentEye
SilentEye — кросс‑платформенный софт с простым интерфейсом. Обладает множеством плагинов и приятным GUI. Использует современные алгоритмы стеганографии и маскировки.

Из очевидных преимуществ отмечу ввод маскируемого текста прямо в окне программы вместо загрузки текстовых файлов из стороннего редактора. Серьезно, фича простая, а никто до этого не додумался. Форматы выходных файлов картинок — BMP, JPEG, PNG, GIF, TIFF, звука — только WAV.

Можно настроить качество выходного изображения — оно определяет, сколько потерь будет при кодировании в JPEG.
Для шифрования внедренных данных применяется AES, но настроек куда больше, чем у OpenStego.

При проверке увеличения объема пришлось использовать другую картинку в качестве исходной, но видно, что объем почти не изменился, то есть программа работает эффективно.
Размер файла с картинкой увеличился всего на 13,5 Кбайт — очень хороший результат!
Утилита может спокойно заменить старичка OpenStego. Работает она чуть медленнее конкурентов, но зачастую это некритично. Тоже рекомендую.
ImageJS
ImageJS — Linux утилита, которая предназначена не совсем для сокрытия информации от людей. Вместо этого она помогает обманывать браузеры, которые совершенно обоснованно предполагают, что в валидных картинках ничего постороннего быть не должно.
ImageJS позволяет создать картинки, которые одновременно представляют собой настоящие JS-скрипты. Это нужно, чтобы упростить проведение более опасных XSS-атак, в которых иногда требуется подгрузить скрипт именно с атакованного домена. Вот тут на помощь приходит возможность загрузить туда аватарку, которая одновременно содержит JavaScript payload для дальнейшей атаки. Программа поддерживает внедрение в форматы BMP, GIF, WEBP, PNG и PDF.
Для сборки нужны пакеты build-esential и cmake. Дальше все просто:
1 2 3 4 5 6 |
$ git clone https://github.com/jklmnn/imagejs.git $ cd imagejs $ mkdir build $ cd build $ cmake .. $ make |
Давай создадим script.js со следующим кодом, а потом упакуем его в image.gif:
1 2 |
alert("Hello, XAXA!"); ./imagejs gif script.js -i image.gif |
На выходе будет файл с двойным расширением, но это не беда.
Сейчас мы проверим все в деле! Создавай HTML-страничку со следующим кодом и сохраняй ее рядом с нашей заряженной картинкой.
Сохраняем и открываем. Должно получиться как на скриншоте.
Размер картинки почти не меняется, что нам очень на руку.

Программа шикарна, хоть и применима только в очень специфичных целях.
Скачать ImageJS с GitHub
StegoTC G2 TC
Стеганографический архиваторный плагин (wcx) для Total Comander позволяет скрывать данные в любом изображении, при этом поддерживаются форматы ВМР, TIFF и PNG.
Скачать бесплатно StegoTC G2, вы можете по этой ссылке.
Стеганография своими руками
Для тех, кто хорошо знаком с программированием, в частности, с Visual Studio и С#, могу порекомендовать также довольно интересный сайт, в котором можно найти исходные тексты стеганографических утилит для различных форматов данных: для работы с графическими форматами и для сокрытия информации, например, в ZIP-архивах. Общий принцип такого преобразования заключается в использовании заголовков архивируемых файлов. Фрагмент исходного кода для работы с ZIP-архивами выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
private void ZipFiles(string destinationFileName, ↵ string password) { FileStream outputFileStream = ↵ new FileStream(destinationFileName, ↵ FileMode.Create); ZipOutputStream zipStream = ↵ new ZipOutputStream(outputFileStream); bool isCrypted = false; if (password != null && password.Length > 0) { //encrypt the zip file, if password is given zipStream.Password = password; isCrypted = true; } foreach(ListViewItem viewItem in lvAll.Items) { inputStream = new FileStream(viewItem.Text, ↵ FileMode.Open); zipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry( ↵ Path.GetFileName(viewItem.Text)); zipEntry.IsVisible = viewItem.Checked; zipEntry.IsCrypted = isCrypted; zipEntry.CompressionMethod = ↵ CompressionMethod.Deflated; zipStream.PutNextEntry(zipEntry); CopyStream(inputStream, zipStream); inputStream.Close(); zipStream.CloseEntry(); } zipStream.Finish(); zipStream.Close(); } |
На указанном сайте можно найти множество примеров исходных кодов любой сложности, так что изучение практических реализаций стеганографии для желающих не составит большого труда.
Заключение
Заменить кросс‑платформенный и богатый фичами OpenStego сложно, но при желании можно. SilentEye будет неплохим выбором, но и утилитки Александра Мясникова тоже рекомендую попробовать, если у тебя Windows. Если же ты фанат консоли или мастеришь какую‑то автоматизированную систему, то тебе может пригодиться один из вариантов, написанных на Pyhton.
Также, на нашем сайте представлены и другие материалы касающиеся Стеганографии. Для поиска всех программ и книг, сделайте поиск по слову «Стеганография».
а как запустить darkcrypt?
в darckcrypt`e файл xdc.exe антивирус kingsoft показует наличие Win32.TrojDownloader.Banload.(kcloud)
дарккрипт внедряет трояны, крадет данные , нормально ничего не работает — не устанавливайте никогда. Есть нормальные программы, но не эта
Пруфы пожалуйста!
подскажите в какой проге можно скрыть .exe в фотографии.Заранее спасибо!