Какой метод применяется в стеганографии для сокрытия текста внутри файла изображения
За последние несколько лет активность спецслужб значительно возросла. Увеличились также их права относительно методов добычи информации, теперь они имеют право на чтение твоей личной переписки.
Хорошо если ты общаешься только с тетками или корешами из чата. А что будет, когда анализируя твою переписку они наткнутся на пароль от
какого-нибудь забугорного сервачка или прочитают как ты хвастаешься знакомому о последнем дефейсе? Эти письма могут стать уликой преступления и послужить
прекрасной причиной для возбуждения криминального дела. Ну как
перспектива? Не очень. Поэтому следует
тщательно прятать содержимое такой переписки. Именно этим и занимается стеганография, а если она используется с элементами криптографии, прочитать письмо сможет только адресат, знающий схему извлечения защищенного
текста.
Но в наше время никто таким методом уже не пользуется (или
все же пользуются?), современные стеганографы применяют невидимые чернила, которые можно
увидеть только после определенной химической обработки, микропленки, условное расположение знаков в письме, тайные каналы связи и многое другое.
Компьютерные технологии сокрытия информации тоже не стоят на месте и активно развиваются. Текст или даже файл может быть спрятан в безобидном письме, изображении, мелодии, и вообще во всех передаваемых данных. Для понимания данного процесса разберемся как скрыть информацию
информацию так, что бы даже не увидели ее
наличия.
Текстовый документ.txt
Использование стеганографии для передачи информации посредством текстовых данных достаточно затруднительно.
Реализовать это можно двумя способами (хотя идея одна для обеих случаев):
1. Использовать регистр букв.
2. Использовать пробелы.
Как вы могли убедится, сокрытие информации в текстовых документах не надежно, поскольку может быть легко замечено. Поэтому используются другие, более продвинутые технологии.
GIF, JPG и PNG
Более надежно можно прятать текст в изображении. Все происходит по принципу замены цвета в изображении, на близкий к нему. Программа заменяет некоторые пиксели, положение которых вычисляет сама. Этот подход очень хороший, потому что определить технологию скрытия текста более сложно чем в прошлом примере. Этот подход работает не только с текстовой информацией, но и с изображениями. Это значит, что можно без особых проблем в изображении nastya.jpg можно поместить
pentаgon_shema.jpg, естественно если этого позволяют их размеры.
MP3 и все, что ты слышишь
Другие решения
Стеганография достаточно мощный инструмент, для сохранения конфиденциальности данных. Ее использование давно признано эффективным при защите авторских прав, а также любой другой информации, которую можно
считать интеллектуальной собственностью. Но особенно
эффективно использование стеганографии с элементами криптографии. Такой подход создает
двух уровневую защиту, взлом который составляет большую трудность, если
вообще является возможным.
Однако прогресс не стоит на месте — и в последнее время всё чаще используются другие способы скрытия данных, например, PNG-наполнение. Посмотрим, как это делается.
Начнём с небольшого теоретического введения по «невидимым» частям PNG.
На экране компьютера при отображении картинки цвета создаются сочетанием красного, зелёного и синего компонентов. Эти три цветовые плоскости называются каналами. Обычно они записываются как RGB.
Кроме этих трёх каналов, в PNG может быть ещё четвёртый канал, называемый альфа (обозначается буквой А) для определения уровня прозрачности. Полученное изображение RGBA определяет видимые цвета и степень прозрачности.
В большинстве графических форматов альфа-канал является значением от 0% до 100% (или от 0 до 255 в байтах). Значение 0% (чёрный) обозначает место на изображении, где должна быть полная прозрачность — тут значение RGB игнорируется, и полностью виден фон под картинкой. Значение альфа-канала 100% (белый) означает, что каналы RGB полностью непрозрачны. Промежуточные значения определяют, насколько нужно смешать фон со значением RGB-пикселя.
Альфа-градиент в PNG
Значения альфа-градиента обычно используются для наложения изображения на другое изображение или на веб-страницу. Альфа-градиенты есть в PNG, WebP, ICO, ICN и других растровых форматах. Формат GIF поддерживает только логическое значение (пиксель либо прозрачен, либо нет).
Альфа-канал — только один из вариантов для размещения скрытого текста. Переходим к PNG-наполнению (padding) для прямой записи данных в бинарный файл.
Формат PNG достаточно прост. Каждый файл начинается с восьми стандартных байт подписи, вот её десятичные значения: 137 80 78 71 13 10 26 10 . Первый байт выбран за пределами ASCII, чтобы никакой редактор случайно не принял изображение за текстовый файл. Следующие три байта соответствуют буквам P, N, G. Затем разрыв строки DOS (13 10), маркер DOS окончания файла (26), чтобы программа type не выдавала весь бинарный мусор, и маркер Unix новой строки.
После заголовка начинаются блоки данных (chunks) со стандартной структурой. Сначала идёт блок IHDR с указанием ширины и высоты изображения, цветового пространства, количества бит на пиксель, методом сжатия, методом фильтрации и указанием наличия/отсутствия чересстрочного кодирования. Для ширины и высоты выделено по четыре байта, для остальных параметров — по одному байту.
Затем следует опциональный блок tEXt с текстовыми метаданными, например, с названием программы, которая сгенерировала данный файл PNG. В текстовые блоки можно записывать текстовую информацию в открытом виде.
За IHDR и tEXt следуют блоки IDAT со сжатыми значениями RGB или RGBA для растровых пикселей. При рендеринге PNG обрабатывается IHDR, выделяется буфер в памяти для изображения, данные извлекаются из сжатого формата и попиксельно записываются в буфер. Файл PNG завершается блоком IEND.
В конце каждого блока записана контрольная сумма CRC для этого блока, которая вычисляется по стандартному алгоритму.
Обычно изображения PNG содержат 8 или 16 бит информации на каждый канал RGB или RGBA, то есть выходит от трёх до восьми байт на пиксель. В таком формате все байты заняты полезной информацией о цвете и прозрачности, так что в конце каждой строки графического изображения у нас нет места для записи произвольных данных.
Но для задач стеганографии нужно знать, что PNG поддерживает и меньшую глубину цвета: 1 бит (2 цвета), 2 бита (4 цвета) и 4 бита (16 цветов). В такой ситуации получается, что в одном байте хранится информация о нескольких пикселях. Вот здесь и появляется теоретическая возможность для «горизонтального» наполнения PNG посторонними данными. Если ширина картинки в пикселях не кратна восьми, то в последнем байте строки остаётся неиспользуемые биты, которые все вместе формируют целый неиспользуемый «столбец пикселей».
В случае 1-битного изображения в конце каждой строки может остаться до 7 свободных бит, которые не будут обработаны парсером. В случае 2-битного изображения в последнем байте остаётся до 3 свободных бит. Онлайновый инструмент FotoForensics находит такие неиспользуемые «столбцы пикселей» в изображениях PNG.
Впрочем, PNG-картинки с малой глубиной цвета встречаются очень редко, поэтому и данный метод стеганографии можно считать экзотикой. Если вам попалось PNG-изображение с 2, 4 или 16 цветами, один этот факт уже вызывает подозрение и может инициировать проверку PNG-наполнения по столбцам.
Совсем другое дело — PNG-наполнение за границами картинки. Это более простой метод стеганографии, который позволяет спрятать в изображении гораздо больше информации.
PNG-наполнение за границами картинки (post-pixel padding) часто используется в различных играх, головоломках и конкурсах, не только хакерских. Вот как работает этот метод:
-
Берём изображение PNG (с любой глубиной цвета).
Несложно догадаться, что в «секретной» части картинки можно спрятать не только текстовую надпись, но и произвольные данные. Например, мы можем записать туда запароленный архив RAR. Картинка с секретным посланием может быть опубликована на Habrastorage или любом другом общедоступном хостинге. Послание получит только тот человек, с которым вы заранее договорились о способе передачи информации и согласовали пароль. Таким способом вредоносные программы могут передавать полезную нагрузку через Хабр и другие общедоступные хостинги.
На правах рекламы
VDS для размещения сайтов — это про наши эпичные! Все серверы «из коробки» защищены от DDoS-атак, автоматическая установка удобной панели управления VestaCP. Лучше один раз попробовать ;)
Сегодня снова поворошим старое гнездо и поговорим о том, как скрыть кучку бит в картинке с котиком, посмотрим на несколько доступных инструментов и разберем самые популярные атаки. И казалось бы, при чем тут сингулярность?
Как говорится, если хочешь в чем-то разобраться, то напиши об этом статью на Хабр! (Осторожно, много текста и картинок)
А мест всего два: метаданные и само изображение. Последнее совсем простое, достаточно набрать в гугле «exif». Так что начнем, пожалуй, сразу со второго.
Хи-хи-хи
Много вещей ломается статистикой, знаете ли.
Изменяя что-то в картинке, мы меняем её статистические свойства. Аналитику достаточно найти способ эти изменения зафиксировать.
Старый добрый хи-квадрат для этого начали использовать Андреас Весфилд и Андреас Пфитцманн из Университета Дрездена в своей работе «Attacks on Steganographic Systems», которую можно найти здесь.
Здесь и далее будем говорить об атаках в рамках одной цветовой плоскости, или в контексте RGB об атаках на один канал. Результаты каждой атаки можно привести к среднему и получить результат для «собранного» изображения.
Итак, атака «Хи-квадрат» основывается на том предположении, что вероятность одновременного появления соседних (отличных на наименее значащий бит) цветов (pair of values) в незаполненном стегоконтейнере крайне мала. Это действительно так, можешь поверить. Если говорить другими словами, то количество пикселей двух соседних цветов существенно отличается для пустого контейнера. Все, что нам нужно сделать, это посчитать количество пикселей каждого цвета и применить пару формул. На самом деле, это простая задачка на проверку гипотезы с использованием критерия хи-квадрат.
Пусть h — массив, на i-ом месте содержащий количество пикселей i-ого цвета в исследуемом изображении.
-
Измеренная частота появления цвета :
У многих возникнет вопрос: почему мы берем такой индекс? Почему именно 2k?
Нужно держать в голове, что мы работаем с соседними цветами, то есть с цветами (числами), различающимися только наименее значащим битом. Они идут парами последовательно:
Если количество пикселей цвета 2k и 2k+1 будет сильно различаться, то различаться будут измеренная частота и теоретически ожидаемая, что нормально для незаполненного стегоконтейнера.
Переводя это на Python получится что-то вроде этого:
Где histogram — количество пикселей цвета i в изображении,
Хи-квадрат критерий для количества степеней свободы k-1 рассчитывается следующим образом (k — количество различных цветов, то есть 256):
И, наконец, P — это вероятность того, что распределения и при этих условиях равны (вероятность того, что перед нами заполненый стегоконтейнер). Она рассчитывается при помощи интегрирования функции гладкости:
Эффективнее всего применять хи-квадрат не ко всему изображению, а только к его частям, например, к строкам. Если посчитанная вероятность для строки больше 0.5, то строку в оригинальном изображении закрасим красным. Если меньше, то зеленым. Для котика с 30% заполненностью, картина будет выглядеть следующим образом:
Весьма точно, неправда ли?
Ну вот мы и обзавелись математически обоснованной атакой, математику-то не обманешь! Или…??
Как используют цифровую стеганографию?
Применений стеганографии в компьютерных технологиях немало. Прятать текст в картинку, видео или музыкальный трек можно и развлечения ради, и, скажем, для защиты файла от нелегального копирования — как в приведенном выше примере с апострофами в текстах песен.
Да, скрытые водяные знаки — это тоже вполне себе пример стеганографии. Однако первое, что приходит в голову, когда речь заходит о тайных посланиях как в физической, так и в цифровой форме, — это разнообразная тайная переписка и шпионаж.
Но не менее значимый
Представим, что все, что мы видели на последней картинке, это наше и мы в праве делать с этим все, что угодно. Тогда возьмем это как поток битов, откуда мы можем читать и куда мы можем записывать.
Берем данные, которые мы хотим вкрапить в изображение, представляем их в виде битов и последовательно записываем на место уже существующих.
Нужно отметить, что примерно в 50% случаев бит, который мы хотим записать, и бит в картинке будут совпадать и изменять нам ничего не придется.
Вот и все, на этом метод заканчивается.
Самые тонкие мемы
Очутившись на компьютере жертвы, зловред открывал опубликованный злоумышленниками пост и выуживал из смешной картинки инструкцию для дальнейших действий. Среди команд, к примеру, были такие:
- сделать скриншот рабочего стола;
- собрать информацию о запущенных процессах;
- скопировать данные из буфера обмена;
- записать имена файлов из указанной папки.
Shuffle Dance
Котик (32% заполнености):
Картинка выглядит шумной, но не подозрительной для неопытного аналитика. А что говорит Хи-квадрат?
Кажется, black hat победили!? Как бы не так…
Код в картинке
Вслед за шпионами к стеганографии стали чаще прибегать и другие киберпреступники: ведь в медиафайле можно спрятать не просто текст, а кусок вредоносного кода. Это не превращает картинку, музыку или видео в полноценного зловреда, однако позволяет скрыть от антивируса полезную нагрузку.
Так, в январе злоумышленники распространяли через рекламные сети занятный баннер. Собственно рекламы на нем не было, он выглядел как небольшой белый прямоугольник. Зато он содержал скрипт, который выполнялся в браузере. Да, в рекламный слот можно загружать скрипты, например, чтобы компании могли собирать статистику о просмотре объявления.
Баннер со скрытым кодом. Источник: блог компании Confiant
В случае киберпреступников скрипт распознавал цвет пикселей на картинке и записывал его в виде набора букв и цифр. Казалось бы, довольно бессмысленная задача: помните, там был просто белый прямоугольник? Однако в глазах программы пиксели были почти белыми, и это «почти» она преобразовывала во вредоносный код, который тут же и исполняла.
Извлеченный из картинки код перенаправлял пользователя на сайт злоумышленников. Там жертву уже ждал троян, притворяющийся обновлением Adobe Flash Player, который затем скачивал другие гадости, в частности рекламное ПО.
Обнаружить стеганографию очень трудно
Однако, как мы уже упоминали, информацию — в том числе код — из изображений и видео извлекают при помощи специальной программы. То есть сами по себе медиафайлы ничего с вашего компьютера не украдут и на него не загрузят. Так что вы можете обезопасить свое устройство, защитив его от компонентов зловреда, которые прячут текст в медиафайлы и извлекают его из них:
Как работает цифровая стеганография?
Однако один из самых удобных «контейнеров» — медиафайлы (картинки, аудио, видео и так далее). Они обычно достаточно большие сами по себе, а значит, и «довесок» может быть не таким маленьким, как в случае, скажем, с документом Word.
Секретную информацию можно записать в метаданные файла или же прямиком в основное содержимое. Возьмем, например, картинку. С точки зрения компьютера она представляет собой набор из сотен тысяч точек-пикселей. У каждого пикселя есть «описание» — информация о его цвете.
Для формата RGB, который используется в большинстве цветных картинок, это описание занимает в памяти 24 бита. Если в описании некоторых или даже всех точек 1–3 бита будет занято секретной информацией, на картинке в целом изменения будут неразличимы. А за счет огромного числа пикселей всего в изображение вписать можно довольно много данных.
В большинстве случаев прячут информацию в пиксели и извлекают ее оттуда при помощи специальных утилит. Иногда для этой цели пишут собственные скрипты или добавляют нужную функциональность в программы другого назначения. А иногда пользуются готовыми кодами, которых в сети немало.
Вместо заключения
Еще одна весьма неплохая попытка использовать статистику против LSB-стеганографии была предпринята в методе под названием Sample Pairs. Найти его можно здесь. Его присутствие здесь сделало бы статью слишком академичной, поэтому заинтересованным оставляю это для внеклассного чтения. Но предвосхищая вопросы аудитории, отвечу сразу: нет, он не ловит ±1 кодирование.
И конечно машинное обучение. Современные методы на основе ML дают очень хорошие результаты. Об этом можно почитать тут и тут.
По мотивам этой статьи была написана (пока) небольшая тулза. Она может генерировать данные, осуществлять визуальную атаку раздельно по каналам, подсчитывать RS-, SPA-оценку и визуализировать результаты Хи-квадрат. И она не собирается на этом останавливаться.
Подводя черту, хочется дать пару советов:
P.S. Хочу выразить особую благодарность PavelMSTU за консультации и мотивационные пинки.
В настоящее время, темой номер один в компаниях стала кибербезопасность. Принимаются стратегические и инфраструктурные меры по обеспечению безопасности при работе с данными. В связи с этим, невозможно обойти стороной такую важную тему в кибербезопасности, как криптография и стеганография.
Существует множество секретных средств связи, которые можно отнести к методам стенографии, от достаточно древних (невидимые чернила, особое расположение знаков в письме, узелки на нитках, надписи на боковой стороне колоды карт или внутри варёного яйца, тайные каналы передачи) до современных, используемых в, так называемой, компьютерной стеганографии (метод наименьшее значащего бита, метод Куттера-Джордана-Боссена, алгоритм Брайндокса или Коха и так далее). В этой статье мы рассмотрим метод наименьшее значащего бита или 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 ```0:b>
Наглядно работа алгоритма видна на представленных примерах изображений — в первом случае изображение не содержит стего контейнер и виден лишь наложенный шум, во втором же случае, проявляются отличительные признаки стего контейнера – неравномерные области наложения шума в каждом из трех каналов.
Рассказываем об одном из самых креативных способов спрятать информацию.
Least Significant Bit
Наиболее популярной цветовой моделью является RGB, где цвет представляется в виде трех составляющих: красного, зеленого и голубого. Каждая компонента кодируется в классическом варианте с помощью 8 бит, то есть может принимать значение от 0
до 255. Именно здесь и прячется наименее значащий бит. Важно понять, что на один RGB-цвет приходится приходится аж три таких бита.
Чтобы представить их более наглядно, проделаем пару небольших манипуляций.
Как и было обещано, возьмем картинку с котиком в png формате.
Разобьем её на три канала и в каждом канале возьмем наименее значащий бит. Создадим три новых изображения, где каждый пиксель обозначает НЗБ. Ноль — пиксель белый, единица соответственно черный.
Получаем вот что.
Но, как правило, изображение встречается в «собранном виде». Чтобы представить НЗБ трех компонент в одном изображении, достаточно компоненту в пикселе, где НЗБ равен единице, заменить на 255, и в обратном случае заменить на 0.
Может засунем сюда что-нибудь?
Регулярность-сингулярность
Еще один статистический метод был Джессикой Фридрих, Мирославом Гольяном и Андреасом Пфитцманом в 2001 году. Он был назван как RS-метод. Оригинальную статью можно взять здесь.
Метод содержит несколько подготовительных этапов.
Изображение разделяется на группы из n пикселей. К примеру, 4 последовательных пикселя в строке. Как правило, такие группы содержат рядом стоящие пиксели.
Для нашего котика с последовательным заполнением в красном канале первыми пятью группами будут:
- [78, 78, 79, 78]
- [78, 78, 78, 78]
- [78, 79, 78, 79]
- [79, 76, 79, 76]
- [76, 76, 76, 77]
Значения функции гладкости для группы пикселей из нашего примера:
- f(78, 78, 79, 78) = 2
- f(78, 78, 78, 78) = 0
- f(78, 79, 78, 79) = 3
- f(79, 76, 79, 76) = 9
- f(76, 76, 76, 77) = 1
Они должны обладать некоторыми свойствами.
Где — любая функция из одного класса, — прямая функция флиппинга, а — обратная. В дополнение обычно обозначается тождественная функция флиппинга , которая не меняет пиксель.
Функции флиппинга на python могут выглядеть примерно вот так:
К каждой группе пикселей мы применяем одну из функций флиппинга и на основании значения функции-дескриминанта до и после флиппинга, мы определяем тип группы пикселей: обычный (Regular), единичный/необычный (Singular), и бесполезный непригодный (unusable). Так как последний тип в дальнейшем не используется, метод был назван по первым буквам ключевых типов. Вот и весь секрет названия, сингулярность здесь ни при чем :)
Мы можем захотеть применить разный флиппинг к разным пикселям, для этого определяют маску М с n значениями -1, 0 или 1.
Пусть маска для нашего примера будет классическая — [1, 0, 0, 1]. Опытным путем было обнаружено, что лучше всего для этого метода подходят симметричные маски, не содержащие . Также удачными вариантами будут: [0, 1, 0, 1], [0, 1, 1, 0], [1, 0, 1, 0]. Применим флиппинг для групп из примера, подсчитаем значение гладкости и определим тип группы пикселей:
-
(78, 78, 79, 78) = [79, 78, 79, 79];
f(79, 78, 79, 79) = 2 = 2 = f(78, 78, 79, 78)
Unusable группа
Тогда и , для отрицательной маски (все компоненты маски умножены на -1), т.к. , при этом может быть пустой. Аналогично для отрицательной маски.
Основная статистическая гипотеза состоит в том, что в типичном изображении ожидаемое значение равно значению , и то же самое верно для и . Это доказывают экспериментальные данные и некоторые танцы с бубном вокруг последнего свойства функции флиппинга.
Проверим это на нашем маленьком примере? Учитывая небольшой размер выборки, мы можем не подтвердить данную гипотезу. Посмотрим, что же будет с инвертированной маской: [-1, 0, 0, -1].
-
F_M(78, 78, 79, 78) = [77, 78, 79, 77];
f(77, 78, 79, 77) = 4 > 2 = f(77, 78, 79, 77)
Regular группа
Вот график , , и в зависимости от количества пикселей с инвертированными LSB, его называют RS-диаграммой. Ось x представляет собой процент пикселей с инвертированными LSB, ось y — относительное число регулярных и сингулярных групп с масками M и -M, .
Если мы инвертируем LSB всех пикселей на изображении и вычислим количество R и S групп, мы получим четыре точки , , и . Поскольку эти две точки зависят от конкретной рандомизации LSB, мы должны многократно повторять этот процесс и оценивать и из статистических выборок.
Мы можем условно провести прямые через точки , и , .
Чтобы избежать долгой статистической оценки средних точек RM(1/2) и SM(1/2), можно принять еще пару соображений:
- Точка пересечения кривых и имеет ту же координату x, что и точка пересечения для кривых и . Это по существу более строгая версия нашей статистической гипотезы. (см. выше)
- Кривые RM и SM пересекаются при m = 50%, или .
Тут на сцену выходит наш котик. (Не пора ли дать ему имя?)
Итак, у нас имеется:
- Regular групп RM(p/2): 23121 шт.
- Singular групп SM(p/2): 14124 шт.
- Regular групп с инвертированной маской R-M(p/2): 37191 шт.
- Singular групп с инвертированной маской S-M(p/2): 8440 шт.
- Regular групп с инвертированными LSB RM(1-p/2): 20298 шт.
- Singular групп с инвертированными LSB SM(1-p/2): 16206 шт.
- Regular групп с инвертированными LSB и с инвертированной маской R-M(1-p/2): 40603 шт.
- Singular групп с инвертированными LSB и с инвертированной маской S-M(1-p/2): 6947 шт.
На повестке дня у нас осталась одна голая математика. Все же помнят, как решать квадратные уравнения?
Подставив все d в формулу выше, получим квадратное уравнение, которое решим, как учили в школе.
Почему это работает?
Посмотрите на изображения ниже.
Это незаполненный стегоконтейнер:
А это заполненный на 95%:
Видите разницу? А она есть. Почему так?
Посмотрим на два цвета: (0, 0, 0) и (1, 1, 1), то есть на цвета, различные только НЗБ в каждой компоненте.
Небольшие различия в пикселях при первом, втором и третьем взгляде, заметны не будут. Дело в том, что наш глаз может различить около 10 миллионов цветов, а мозг всего лишь около 150. Модель RGB же содержит 16 777 216 цветов. Попробовать различить их все можно здесь.
Из командной строки
Существует не так много работающих command line тулз в открытом доступе, представляющих LSB-стеганографию.
Самые популярные можно найти в таблице внизу.
Плюс-минус
Чтобы не попасться, надо быть неожиданным и использовать ±1 кодирование. Вместо того чтобы изменять наименьший значащий бит в байте цвета, мы будем весь байт либо увеличивать, либо уменьшать на единицу. Есть только два исключения:
- мы не можем уменьшить ноль, поэтому мы будем его увеличивать,
- мы также не можем увеличить 255, так что это значение мы всегда будем уменьшать.
Вот наш друг котик:
Внешне внедрение незаметно ровно по той же причине, почему не было видны разницы между (0, 0, 0) и (1, 1, 1).
Срез LSB остается просто шумным из-за записи в случайные места.
Хи-квадрат по-прежнему слеп, а RS-метод дает приблизительную оценку 0.0036.
Чтобы не очень сильно радоваться, прочтите вот эту статью.
Стеганография — находка для кибершпиона
Всплеск интереса злоумышленников к стеганографии наши эксперты заметили полтора года назад. Тогда в их поле зрения попали по меньшей мере три шпионских кампании, в которых данные жертв отправлялись на командные серверы под видом фото и видео.
С точки зрения систем безопасности и сотрудников, следящих за исходящим трафиком, ничего подозрительного в том, что в Сеть загружают медиафайлы, не было. На это и рассчитывали преступники.
А где котик?
И первой в списке атак на LSB-стеганографию выступает визуальная атака. Звучит странно, не правда ли? Ведь котик с секретом никак не выдавал себя как заполненный стегоконтейнер на первый взгляд. Хммм… Нужно всего лишь знать, куда смотреть. Несложно догадаться, что нашего пристального внимания заслуживают только НЗБ.
У заполненого стегоконтейнера изображение с НЗБ выглядит так:
Не верите? Вот вам НЗБ со всех трех каналов отдельно:
~70% котика осталось неизменным.
Тут стоит сделать небольшое отступление и поговорить о размерах. Что такое 30% котика? Размер котика 603х433 пикселей. 30% от этого размера равны 78459 пикселям. В каждый пиксель помещается 3 бита информации. Итого 78459 3 = 235377 бит или чуть меньше, чем 30 килобайт помещается в 30% котика. А в целого котика поместится около 100 килобайт. Такие дела.
Прикладывая небольшое усилие, мы все-таки можем различить знакомую структуру. Не теряем надежды, господа!
Читайте также: