Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Стеганография - средство скрытия информации : Программирование

24.11.2024 7:47


05.01.2019 16:26
Уже с древних времен человек прибегает к скрытию информации от посторонних глаз. Для защиты информации обычно используют шифры. Надежность их может быть разной, но, если врагу удается заполучить сообщение, то к тому моменту, когда врагу все же удастся его взломать его шифр, информация может стать неактуальной.

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

1-е это криптография - наука о шифрах и методах обеспечения конфеденциальности и целостности информации. Второе же будет являться стеганографией.

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

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

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

Методы типа LSB (Least Significiant Bit, наименьший значащий бит) и аналогичные. Их суть заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Возьмем в качестве примера графический файл. Наглядно это выглядит следующим образом: мы меняем младшие биты в коде цвета пикселя на картинке. Если считать, что код цвета имеет 32-битное значение, то замена 0 на 1 или наоборот не приведет к сколько-нибудь существенному искажению картинки, ощутимому для органов восприятия человека. А между тем в этих битах для большой картинки можно что-то спрятать.

Рассмотрим небольшой пример. Допустим, имеется 8-битное изображение в градациях серого. 00 (00000000) обозначает черный цвет, FF (11111111) — белый. Всего имеется 256 градаций. Также предположим, что сообщение состоит из 1 байта — например, 01101011. При использовании двух младших бит в описаниях пикселей нам потребуется 4 пикселя. Допустим, они черного цвета. Тогда пиксели, содержащие скрытое сообщение, будут выглядеть следующим образом: 00000001 00000010 00000010 00000011. Тогда цвет пикселей изменится: первый — на 1/255, второй и третий — на 2/255 и четвертый — на 3/255. Такие градации, мало того, что незаметны для человека, могут вообще не отобразиться при использовании низкокачественных устройств вывода.

Стоит отметить, что методы LSB являются неустойчивыми к разного рода «шуму». Например, в случае если на передаваемый контент накладываются какие-либо «мусорные» биты, это искажает как исходный контент, так и (что для нас особенно важно) скрытое сообщение. Иногда оно даже становится нечитаемым. Аналогичная методика используется и для других форматов.

Еще один метод заключается в так называемом впаивании скрытой информации. В данном случае происходит наложение скрываемого изображения (звука, иногда текста) поверх оригинала. Простейший пример — надпись белым цветом на белом же фоне в PDF-документе. Злоумышленники обычно не используют данный метод по причине относительной простоты обнаружения автоматическими методами. Однако данный метод зачастую применяется при создании «водных знаков» для авторского контента. В этом случае данные знаки, как правило, не скрываются.

И третий метод — использование особенностей форматов файлов. К примеру, это может быть запись информации в метаданные, используемые данным форматом файла, или в различные другие, не используемые зарезервированные поля. Например, это может быть документ Microsoft Word, внутри которого будет спрятана информация, никак не отображаемая при открытии данного документа.

Аудио стеганография
Еще один способ сокрытия информации применим только к аудиофайлам — это эхо-метод. Он использует неравномерные промежутки между эхо-сигналами для кодирования последовательности значений. В общем случае возможно создание условий, при которых данные сигналы будут незаметны для человеческого восприятия. Эхо-сигнал характеризуется тремя параметрами: начальной амплитудой, степенью затухания и задержкой. При достижении некоего порога между сигналом и эхом они смешиваются. В этой точке человеческое ухо не может уже отличить эти два сигнала. Для обозначения логического нуля и единицы используется две различных задержки. Они обе должны быть меньше, чем порог чувствительности уха слушателя к получаемому эху.

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

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

На сегодняшний день фазовое кодирование является одним из самых эффективных методов скрытия информации.

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

Обычно файлы организованы в несколько разных частях.

Например, файлы изображений начинаются с уведомления о текущем типе файла образа изображения. Файлы GIF начинаются с GIF87a или GIF89a, если рассматривать их как кодировку ISO 8859-1, начиная с шестнадцатеричного числа «47 49 46 38 37 61».

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

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

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

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

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

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

JavaScript может содержать файлы cookie для проверки подлинности, быть уязвимыми для escape-последовательностей XSS для запуска большего количества JavaScript, загрузки программы в браузер и загрузки запросов или даже для кражи информации или кражи файлов cookie с других веб-сайтов, посещенных пользователем.

Дальнее рассмотрим на примере простую проверку встроенного JavaScript. Буду дальнейшие действия будут произведены на kali...

Итак, загрузим и установим Imagejs(утилита по упаковке JavaScript в файл изображения).

Открываем терминал и прописываем команду.

Код:
git clone https://github.com/jklmnn/imagejs
После загрузки пишем команду cd imagejs для перехода в каталог.

И затем уже компилируем саму нашу программу:

для этого прописываем последовательно команды
Код:
mkdir build
cd build
make
Далее создаем наш Javascript файл, который мы прикрепим к картинке.

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

echo 'window.alert("TEST ALERT");'

Сохраняем файл как script.js

Код JavaScript может быть встроен в файлы gif, bmp, webp, pnm, pgf (только эти!). Однако, мы должны учитывать размеры изображения, чтобы оно не было очень большим.

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

После того, как вы нашли изображение, которое хотите вставить, нам нужно его склеить с нашим кодом, используя следующие параметры. Пример скрипта называется «script.js», а образ «image.gif» - лучше чтобы оба находились в том же каталоге, что и imagejs.

Прописываем команду: gif script.js -i image.gif

Имя выходного файла в этом случае получится «Script.js.gif». Но мы можем переименовать естественно.

Для того, чтобы протестировать полученное пропишем html-код

Код:
<html>
<img src= "script.js.gif">
<script src= "script.js.gif"></script>
</html>
Сохраняем как index.html.

И открываем его.

Будет выведена надпись "TEST ALERT"

Таким образом, чтобы обеспечить защиту от такой атаки на стороне пользователя, решение может быть таким же простым, как загрузка NoScript. Однако трудно отличить хорошие и плохие сценарии. И ответственность за предотвращение вредоносных инъекций JavaScript лежит на плечах веб-разработчиков. Если любой пользователь имеет возможность удаленно выполнять код, то это уже не его вина)
Часовой пояс GMT +3, время: 07:47.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.