15.08.2011

Прячем информацию в неиспользуемых полях файлов и пакетов

image

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

Fady Mohammed Osman
fady.mohamed.osman@gmail.com

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

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

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

Одно из этих изображений содержит сообщение: "My secret message". Можете ли вы сказать, какое из них содержит это сообщение?

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

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

Теперь вы можете увидеть наше сообщение.

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

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

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

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

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

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

Вот bmp файл:

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

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

В качестве примера рассмотрим это изображение и сохраним слово “test” в этих байтах. Посмотрим, поменялись ли цвета. Одно из этих изображений содержит сообщение, а другое не содержит ничего:

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

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

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

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

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

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

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

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