понедельник, 30 июля 2012 г.

Исследование: Как модифицирует картинку BMP метод LSB

Эта статья посвящена практическому изучению метода замены наименее значащего бита (LSB) на действующих примерах программ для стеганографии. Исследование их работы ведется по принципу "черного ящика" - исследуемой программе на вход поступает изображение-контейнер и скрываемое сообщение, на выходе мы получаем изображение, сожержащее в сбе скрытое сообщение. Суть исследования заключается в сравнении
Поскольку метод замены наименее значимого бита ныне практически не встречается из-за своей низкой стойкости к обнаружению и разрушающим воздействиям, программы реализующие его пришлось поискать. Как уже упоминалось ранее, методику можно встретить исключительно в студенческих поделках и приравненному к нему программному обеспечению. Начать я решил с ископаемого формата BMP, структура которого наиболее легка для понимания. В качестве примера я взял код реализующий метод, написанный на языке С++.

Для более простого анализа для исходного изображения контейнера я создал изображение размером 100 х100 пикселей, залитое белым цветом. Тут меня ожидал сюрприз - размер изображения увеличился с 30,1 кБ до 40,1 кБ, что не должно быть при использовании метода LSB в общем получилось совсем не то, что я ожидал увидеть!
Для побайтного сравнения файлов я использую бесплатную программу AptDiff для Windows, скачать ее можно например тут.
Изучив при помощи утилиты изменения в структуре заголовка фала BMP, я обнаружил, что было изменено поле со смещением 0x1Ch с 0x18h на 0x20h, то есть изменена глубина цвета с 24 бит на 32 бита.
При анализе изображения не забывайте что программа может самовольно изменить его формат!
То есть приложение загрузило изображение-контейнер и в процессе работы изменило настройки изображения под свои. Отсюда и увеличение размера!
Поэтому, при самостоятельном анализе результатов работы программ для стеганографии всегда следует помнить, что изменения в файле могут быть вызваны не только работой программы сокрытия данных, но и сменой формата изображения.
Разобравшись с этим недоразумением, и пересоздав BMP изображение с глубиной цвета 32 бита, я запустил программу и скрыл в изображении сообщение
TEST STEGANOGRAPHY MESSAGE. LSB METHOD.
повторенное 4 раза.
После работы программы сравнил два получившихся файла. Размер файлов не изменился. Заголовок не пострадал, изменений в нем на этот раз нет, что видно на приведенном ниже рисунке.
Заголовок исследуемого файла

Оценим различия в файлах. Как мы видим, в файле осуществляются переходы:
00 - 01
FF - FE 
Это означает, что программа модифицирует только последний бит изображения. Согласно каноничному определению методики LSB, программа, реализующая этот метод, ставит в соответствие сброшенному младшему биту биту 0 сообщения и  установленный младший бит биту 1 сообщения. Тогда мы имеем таблицу соответствия между байтами файла котейнера и битами скрытого сообщения. 
00 - 0
01 - 1
FF - 1
FE - 0
Учитем что стоки в BMP файле идут снизу вверх, а пикселы cлева направо. Поэтому битовую последовательность надо снимать в прямом порядке, то есть в порядке увеличения смещения. Также учтем, что длина битовой последовательности, передающей сообщение может выходить за пределы измененной зоны, поскольку если требуемая последовательность изменения пикселов внутри файла контейнера совпадает с тем, что нужно для передачи  скрытого сообщения, контейнер не модифицируется. 
Перейдем к первому различию в содержимом двух файлов. Для более полного понимания выясним как используются биты. Перепишем согласно таблице соответствия последовательность закодированных бит.
Изменения, вносимые стегопрограммой
Определим местоположение модифицированных пикселей в исследуемом изображении. Для получения номера строки (координаты у) используется формула:
где h – высота изображения в пикселах, в исследуемом изображении равен 84,
offset –смещение измененного байта относительно начала файла (в байтах),
w – ширина изображения в пикселах, в исследуемом изображении равна 100
quality – качество изображения, количество байтов в пикселе (в исследуемом изображении равно 4).
Функция abs отбрасывает дробную часть в полученном значении.
Результат работы утилиты complare
Тогда, зная что начальное смещение равно, как видно из рисунка 0x94A9 и подставив значения получим(в шестнадцатеричном выражении):
y= 0x64 - abs(0x94A9 - 0x436)/64*4 -1 = 0x64 - 0x5B=9
То есть, в изображении модифицированы верхние 9 строк.
Проверим эти данные, для чего сравним изображения до и после модификации стегоалгоритмом попиксельно.
Для этого воспользуемся помощью утилит, предназначенных для этих целей. Для этого можно воспользоваться условно-бесплатной  программой ImageDiscerner под Windows или бесплатной утилитой complare под Linux. На рисунке, расположенном ниже приведен результат работы утилиты complare.
Как видно из приведенного рисунка, искажения наблюдаются в 9 верхних строках изображения


Комментариев нет:

Отправить комментарий