Способы сокрытия информации внутри файлов изображений

Обновлено: 05.07.2024

Рассказываем об одном из самых креативных способов спрятать информацию.

Как работает цифровая стеганография?

Для формата RGB, который используется в большинстве цветных картинок, это описание занимает в памяти 24 бита. Если в описании некоторых или даже всех точек 1–3 бита будет занято секретной информацией, на картинке в целом изменения будут неразличимы. А за счет огромного числа пикселей всего в изображение вписать можно довольно много данных.

В большинстве случаев прячут информацию в пиксели и извлекают ее оттуда при помощи специальных утилит. Иногда для этой цели пишут собственные скрипты или добавляют нужную функциональность в программы другого назначения. А иногда пользуются готовыми кодами, которых в сети немало.

Как используют цифровую стеганографию?

Применений стеганографии в компьютерных технологиях немало. Прятать текст в картинку, видео или музыкальный трек можно и развлечения ради, и, скажем, для защиты файла от нелегального копирования — как в приведенном выше примере с апострофами в текстах песен.

Да, скрытые водяные знаки — это тоже вполне себе пример стеганографии. Однако первое, что приходит в голову, когда речь заходит о тайных посланиях как в физической, так и в цифровой форме, — это разнообразная тайная переписка и шпионаж.

Стеганография — находка для кибершпиона

Всплеск интереса злоумышленников к стеганографии наши эксперты заметили полтора года назад. Тогда в их поле зрения попали по меньшей мере три шпионских кампании, в которых данные жертв отправлялись на командные серверы под видом фото и видео.

С точки зрения систем безопасности и сотрудников, следящих за исходящим трафиком, ничего подозрительного в том, что в Сеть загружают медиафайлы, не было. На это и рассчитывали преступники.

Самые тонкие мемы

Очутившись на компьютере жертвы, зловред открывал опубликованный злоумышленниками пост и выуживал из смешной картинки инструкцию для дальнейших действий. Среди команд, к примеру, были такие:

  • сделать скриншот рабочего стола;
  • собрать информацию о запущенных процессах;
  • скопировать данные из буфера обмена;
  • записать имена файлов из указанной папки.

Код в картинке

Вслед за шпионами к стеганографии стали чаще прибегать и другие киберпреступники: ведь в медиафайле можно спрятать не просто текст, а кусок вредоносного кода. Это не превращает картинку, музыку или видео в полноценного зловреда, однако позволяет скрыть от антивируса полезную нагрузку.

Так, в январе злоумышленники распространяли через рекламные сети занятный баннер. Собственно рекламы на нем не было, он выглядел как небольшой белый прямоугольник. Зато он содержал скрипт, который выполнялся в браузере. Да, в рекламный слот можно загружать скрипты, например, чтобы компании могли собирать статистику о просмотре объявления.

Баннер со скрытым кодом

Баннер со скрытым кодом. Источник: блог компании Confiant

Извлеченный из картинки код перенаправлял пользователя на сайт злоумышленников. Там жертву уже ждал троян, притворяющийся обновлением Adobe Flash Player, который затем скачивал другие гадости, в частности рекламное ПО.

Обнаружить стеганографию очень трудно

Однако, как мы уже упоминали, информацию — в том числе код — из изображений и видео извлекают при помощи специальной программы. То есть сами по себе медиафайлы ничего с вашего компьютера не украдут и на него не загрузят. Так что вы можете обезопасить свое устройство, защитив его от компонентов зловреда, которые прячут текст в медиафайлы и извлекают его из них:

В настоящее время, темой номер один в компаниях стала кибербезопасность. Принимаются стратегические и инфраструктурные меры по обеспечению безопасности при работе с данными. В связи с этим, невозможно обойти стороной такую важную тему в кибербезопасности, как криптография и стеганография.

Существует множество секретных средств связи, которые можно отнести к методам стенографии, от достаточно древних (невидимые чернила, особое расположение знаков в письме, узелки на нитках, надписи на боковой стороне колоды карт или внутри варёного яйца, тайные каналы передачи) до современных, используемых в, так называемой, компьютерной стеганографии (метод наименьшее значащего бита, метод Куттера-Джордана-Боссена, алгоритм Брайндокса или Коха и так далее). В этой статье мы рассмотрим метод наименьшее значащего бита или Least Significant Bit method (LSB).

Для понимания происходящего, нам понадобится ввести некоторые определения.

Теперь, когда у нас есть базовое понимание принципов организации стегосистемы и работы алгоритма LSB, рассмотрим один из способов распознавания факта передачи информации в изображении. Основным инструментом будет Python, библиотеки numpy, matplotlib, pillow и openCV.

Для начала, импортируем необходимые библиотеки.

``` import numpy as np import matplotlib.image as img import matplotlib.pyplot as plt from PIL import Image import cv2 ```

Прочитаем тестовое изображение, скопируем его и сформируем изображение той же размерности, что исходное.

``` image_name = "test1" image = img.imread("images/" + image_name + ".jpg") image_check = np.copy(image) image[0, 0] ```

Далее приступим к написанию основной распознающей функции.

``` def check_lsb_channel(input_im, channel): output_im = np.copy(input_im) for x in range(0, input_im.shape[0]): for y in range(0, input_im.shape[1]): r = input_im[x,y][0] g = input_im[x,y][1] b = input_im[x,y][2] rgb = (r, g, b) binary = '<0:b>'.format(rgb[channel]) if(list(str(binary))[-1] == '1'): output_im[x,y] = (0, 0, 0) return output_im ```

Наглядно работа алгоритма видна на представленных примерах изображений — в первом случае изображение не содержит стего контейнер и виден лишь наложенный шум, во втором же случае, проявляются отличительные признаки стего контейнера – неравномерные области наложения шума в каждом из трех каналов.


Все методы, предназначенные для сокрытия данных, можно разделить по принципам, лежащим в их основе, на форматные и неформатные.

Форматные методы сокрытия (форматные стеганографические системы) — это такие методы (системы), которые основываются на особенностях формата хранения графических данных.

Разработка таких методов сводится к анализу формата с целью поиска служебных полей формата, изменение которых в конкретных условиях не скажется на работе с графическим изображением. Например, для сокрытия можно использовать служебные поля формата, которые присутствуют в графических файлах, но не используются в настоящее время. Однако все форматные методы обладают общим недостатком - для них возможно построение полностью автоматического алгоритма, направленного на обнаружение факта сокрытия (с учетом принципа общеизвестности стеганографической системы). Поэтому их стойкость к атакам пассивных противников крайне низка.

Неформатные методы — это методы, использующие непосредственно сами данные, которыми изображение представлено в этом формате.

Применение неформатных методов неизбежно приводит к появлению искажений, вносимых стеганографической системой, однако при этом они являются более стойкими к атакам как пассивных, так и активных противников.

Содержание

Неформатные методы сокрытия в графических изображениях

Неформатные методы сокрытия в JPEG

В результате детального анализа алгоритма сжатия с потерями JPEG, режимов его работы и промежуточных этапов (таких как преобразование изображения в оптимальное цветовое пространство, субдискретизация, дискретное косинусное преобразование, квантование и кодирование) были разработаны методы, позволяющие производить неформатное сокрытие данных в файлы, форматы которых построены в соответствии со спецификацией JPEG.

Метод сокрытия в исходных данных изображения

Стандарт JPEG позволяет производить сжатие изображений без потерь (режим Lossless JPEG), этот режим существенно отличается от режима с потерями, основанного на базе квантования коэффициентов дискретного косинусного преобразования (ДКП). Lossless JPEG представляет собой кодирование с предсказанием (использующего схему двумерной дифференциальной импульсно-кодовой модуляции — ДИКМ), когда значение каждого пикселя объединяется со значениями соседних с ним для формирования величины прогнозирующего параметра. Затем полученный результат вычитается из исходного значения. Сформированные после обработки подобным образом всех точек изображения результирующие величины сжимаются посредством арифметического кодирования или кодирования по методу Хаффмана.

Поэтому в случае использования Lossless JPEG можно говорить о сокрытии информации непосредственно в данных самого изображения. При этом сокрытие может осуществляться при помощи основного метода компьютерной стеганографии — метода сокрытия в младших битах и его модификаций.

Однако Lossless JPEG применяется крайне редко на практике, а использовать формат JPEG в режиме сжатия с потерями при сокрытии информации данным методом нельзя, так как она будет потеряна в силу особенностей используемого алгоритма, таких как субдискретизация, ДКП, квантование.

Метод сокрытия с использованием таблиц квантования

Данный метод является одним из часто используемых на сегодня методов сокрытия данных файлов JPEG. Идея состоит в использовании для сокрытия младших битов чисел, представляющих коэффициенты квантования. Достоинство метода состоит в том, что он не нарушает типичную структуру потока JPEG и, следовательно, является полностью неформатным. К недостаткам можно отнести то, что обычно файлы JPEG содержат одну или две таблицы квантования (размер одной таблицы квантования равен 64 байтам), поэтому объем скрываемых данных невелик (сокрытие во всех младших битах одной таблицы квантования позволяет скрыть всего лишь 8 байт). Помимо этого изменение младших бит коэффициентов квантования вносит изменения в статистические характеристики сжимаемых блоков, тем самым отрицательно влияя на эффективность последующего кодирования, и, как следствие, ведет к увеличению размеров файла.

Метод использования ложных таблиц квантования

Метод является дальнейшим развитием предыдущего метода. Он состоит в создании дополнительных ложных таблиц квантования. Это позволяет в несколько раз увеличить объем скрываемых данных по сравнению с предыдущим методом. В стандарте JPEG учтена возможность использования нескольких таблиц квантования, т.е. это не нарушает внутреннюю организацию формата. Однако помимо того, что для данного метода сохраняются отмеченные выше недостатки, он становится отчасти форматным, так как используется особенность формата, которая является допустимой, но не типичной. Вообще говоря, на практике применяются две разновидности метода использования ложных таблиц квантования.

Первая разновидность добавляет таблицы так, чтобы увеличить эффективность сжатия и уменьшить потери при сжатии, как это и подразумевалось в спецификации алгоритма JPEG. Однако в таком случае для большинства изображений число ложных таблиц невелико.

Метод сокрытия в спектре изображения после квантования

Метод основан на использовании частот блоков изображения после их квантования, но перед этапом кодирования. При этом сокрытие может осуществляться при помощи классических методов компьютерной стеганографии. Данный метод позволяет скрывать намного большее число бит, чем приведенные выше методы, и не является форматным, поэтому его стойкость к атаке пассивного противника может значительно (в зависимости от реализации) превышать уровень стойкости приведенных ранее методов. При использовании данного метода объем скрываемых данных пропорционален объему сжатого изображения, при этом увеличение объема внедряемой информации может приводить к изменениям исходного изображения и снижению эффективности последующего этапа кодирования. Однако возможность варьировать качество сжатого изображения в широком диапазоне не позволяет легко установить, являются возникающие в результате сжатия погрешности следствием сокрытия данных или использования больших коэффициентов квантования.

Методы сокрытия в графических изображениях с палитрой цветов

Использование палитры (еще говорят — отображения цветов) в графических форматах связано с попыткой уменьшить размер хранимой информации. Вообще говоря, палитра впервые была применена в графических адаптерах для упрощения их устройства и обеспечения большего разрешения при меньшем объеме оперативной памяти графического адаптера. Вслед за этим появились форматы хранения растровых графических изображений, основанные на использовании палитры, некоторые из которых активно используются и в наши дни. Ярким примером такого формата может служить GIF, который получил широкое распространение в сети Интернет и является неотъемлемой частью дизайна современных веб-страниц и Интернет-рекламы. Количество передаваемых по сети файлов в формате GIF более чем в два раза превышает количество передаваемых страниц и писем (на смену устаревающего формата был разработан формат PNG, также позволяющий использовать палитру цветов, однако он еще не получил большого распространения).

Каждая точка обычного растрового графического изображения задает интенсивность цветовых составляющих в каком-либо фиксированном цветовом пространстве (RGB, CMY, CMYK и т.д.). Если же формат хранения изображений использует палитру, то точки изображения могут принимать лишь один цвет из имеющихся в палитре. Палитра цветов — это набор из элементов, каждый из которых задает (как и точка обычного изображения) интенсивность цветовых составляющих в каком-либо фиксированном цветовом пространстве (обычно RGB), при этом каждая точка изображения содержит лишь номер цвета из палитры, а не информацию о ее цвете в цветовом пространстве.

(0,255,0) (0,0,255) (0,255,0) (0,0,255)
(0,0,255) (0,255,0) (0,0,255) (0,255,0)
(0,255,0) (0,0,255) (0,255,0) (0,0,255)
(0,0,255) (0,255,0) (0,0,255) (0,255,0)

Для хранения такой матрицы необходимо 384 бита памяти.

Если использовать изображение с палитрой, то для данного изображения потребуется палитра, состоящая из двух цветов:

Тогда в этой палитре изображение примет вид

0 1 0 1
1 0 1 0
0 1 0 1
1 0 1 0

Таким образом, в памяти необходимо 48 бит для хранения информации об используемой палитре и 16 бит для хранения самого изображения.

Метод сокрытия с использованием младших бит данных изображения

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

Метод сокрытия с использованием младших бит элементов палитры

Метод сокрытия, основанный на наличии одинаковых элементов палитры

Ясно, что в случае, когда палитра содержит два или более одинаковых элемента, не важно, какой из них будет присвоен точке изображения, так как при просмотре она будет выглядеть одинаково. Эту особенность можно использовать для сокрытия, не внося никаких искажений в само изображение. Отметим, что с точки зрения кодирования графических изображений использование одинаковых элементов палитры не только лишено смысла, но и нежелательно, так как может приводить к увеличению размера изображения. С точки зрения стеганографии метод, основанный на использовании одинаковых цветов палитры, является форматным, так как базируется на использовании особенности, которой обладают все графические форматы, поддерживающие палитру цветов.

и изображение имеет вид

0 1 0 1
1 0 1 0
0 1 0 1
1 0 1 0

2 1 0 1
1 0 1 2
0 1 2 1
1 2 1 0

Этот метод можно легко продолжить на случай добавления нескольких одинаковых цветов, однако при этом уменьшится его стойкость.

Метод сокрытия путем перестановки элементов палитры

Форматные методы сокрытия в графических изображениях

Форматные методы сокрытия основываются на особенностях формата хранения графических данных. Если проанализировать назначение и содержание полей формата с целью поиска таких полей, изменение которых не влияет на качество изображения, например, зарезервированные поля, которые не используются (либо не полностью используются) в настоящее время, то в них можно разместить скрываемую информацию. Это наиболее простой метод сокрытия, но недостатком является то, что все такие включения легко обнаружить, зная истинное назначение и типовое содержание таких полей, предусмотренное стандартом данного формата. Поэтому для форматных методов, как правило, оказывается возможным построение полностью автоматизированного алгоритма для обнаружения факта сокрытия.

Форматные методы сокрытия в файлах BMP

Метод дописывания данных в конец BMP-файла

В случаях, когда в BMP-файле хранится 16-битное изображение без сжатия, для сокрытия можно воспользоваться фактом, что цветовые интенсивности RGB в этом режиме кодируются при помощи 5 бит на канал. В результате старший бит каждого 16-битного отсчета не содержит информацию о цвете и может быть использован для сокрытия.

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

Данный метод основан на том, что каждый элемент палитры состоит из четырех байт, первые три из которых используются для кодирования цвета, а последний обычно равен 0 и не используется. Таким способом возможно скрыть не больше 256 байтов, не изменив размер исходного BMP-файла.

Заголовок BMP-файла содержит четыре байта, которые равны 0 и пока не используются в формате, их использование для сокрытия также не приводит к увеличению размеров контейнера. Кроме того, длина любой байтовой последовательности, кодирующей горизонтальную линию пикселей изображения должна быть кратной 4. В случае если это не выполнено, она дополняется нулевыми байтами до размера, кратного 4. На этой особенности формата BMP базируется метод сокрытия в нулевых байтах.

Существует множество секретных средств связи, которые можно отнести к методам стенографии, от достаточно древних (невидимые чернила, особое расположение знаков в письме, узелки на нитках, надписи на боковой стороне колоды карт или внутри варёного яйца, тайные каналы передачи) до современных, используемых в, так называемой, компьютерной стеганографии (метод наименьшее значащего бита, метод Куттера-Джордана-Боссена, алгоритм Брайндокса или Коха и так далее).

В этой статье мы рассмотрим метод наименьшее значащего бита или Least Significant Bit method (LSB).

Для понимания происходящего, нам понадобится ввести некоторые определения.


Теперь, когда у нас есть базовое понимание принципов организации стегосистемы и работы алгоритма LSB, рассмотрим один из способов распознавания факта передачи информации в изображении. Основным инструментом будет Python, библиотеки numpy, matplotlib, pillow и openCV.

Для начала, импортируем необходимые библиотеки:

Прочитаем тестовое изображение, скопируем его и сформируем изображение той же размерности, что исходное:

Далее приступим к написанию основной распознающей функции:

Первый случай, стего контейнер отсутствует:


Второй случай, стего контейнер присутствует, видны неравномерные области наложения шума:


Данный метод не является универсальным, однако, он с высокой эффективностью позволяет обнаруживать LSB стеганографию в изображениях, что может быть полезно для быстрой проверки на наличие заполненного контейнера в передаваемых файлах. Знание и применение данного метода проверки может помочь при улучшении уровня кибербезопасности и позволит предотвратить возможные случаи утечки данных.

Сегодня мы поговорим о стеганографии – науке о сокрытии информации в других данных вместо обычного шифрования.

image

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

В большинстве случаев этого можно достичь благодаря изменению нескольких байтов в файле, который содержит данные. Это может быть изображение или звуковой файл.

Для пояснения давайте посмотрим на образец.



На следующей картинке наше изображение открыто в шестнадцатеричном редакторе (вы можете использовать Hex Workshop в Windows, GHex или Bless Hex Editor в Linux):


В любом случае у меня появилась новая идея, и я не знаю, применял ли это кто-нибудь раньше или нет. Что мы собираемся сделать, так это спрятать информацию внутри так называемых неиспользуемых полей, поэтому давайте сначала поговорим о том, что такое неиспользуемые поля (вы можете пропустить эту часть, если вам уже знакомо это понятие).

Что такое неиспользуемые поля?

Это несколько байтов, добавляемых к файлу или сетевому пакету для группировки по 4 байта. Эти байты добавляются, потому что компьютер может обрабатывать данные кратные 4 байтам быстрее, т.к. регистры и шины являются 32-битными (для 32-х битных компьютеров). Еще одним очевидным примером является ваша видеокарта. Кадры отправляются сгруппировано, по 4 байта.

Давайте изучим простой bmp файл и увидим неиспользуемые поля (образец был взят из спецификаций bmp файла в wikipedia):


а эта таблица показывает, каким образом изображение хранится в файле:



цвета, как мы видим, не поменялись. На следующей картинке, открытой в GHex, вы можете видеть слово "test".


Как рассчитать доступное место в неиспользуемых полях?

вы можете рассчитать доступное место в неиспользуемых полях по следующей формуле (для 32-х битного компьютера):

(количество пикселей в строке * количество байтов на каждый пиксель)%4

Для чего я могу использовать это?

Это может быть использовано для сокрытия информации. Также это может быть использовано червями для загрузки шелл-кода на веб-сайты, которые разрешают загрузку изображений, вместо загрузки шелл-кода на сервер.

Определит ли антивирус, если я сохранил шелл-код таким образом?

Я думаю, что антивирус не сможет определить, т.к. сигнатура файла будет изменена только в случае изменения самого изображения или его размеров.

Читайте также: