November 7, 2021

Хакер - Картинки с секретами. Тестируем восемь утилит для сокрытия данных

https://t.me/anon_chan_by

Ес­ли ты дума­ешь, что в фот­ках с котика­ми не может скры­вать­ся ничего пос­торон­него, — спе­шу тебя разоча­ровать (или, наобо­рот, порадо­вать!). Сей­час я покажу, как внед­рить в кар­тинку, архив или пес­ню любую пос­торон­нюю информа­цию, да так, что­бы ее ник­то там не заметил. Инте­рес­но? Пог­нали!

О прин­ципах сте­ганог­рафии мы уже не раз писали — смот­ри, к при­меру, статью «Пря­чем фай­лы в кар­тинках: семь сте­ганог­рафичес­ких ути­лит для Windows». Одна­ко в ней перечис­лены далеко не все ути­литы и при­цел сде­лан на Windows. Сегод­ня мы рас­смот­рим восемь аль­тер­натив­ных ути­лит, в основном — кросс‑плат­формен­ные.

CLOAKIFY

  • Плат­форма: любая
  • Где ска­чивать: GitHub

CloakifyFactory — это боль­шая и лег­ко рас­ширя­емая прог­рамма, которая исполь­зует скрип­ты Cloakify Toolset. Осо­бен­ность ее в том, что перед мас­киров­кой наг­рузки она кодиру­ется в Base64.

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

Ра­бота­ет Cloakify на Python 2.7, который уже мораль­но и физичес­ки уста­рел, а исполь­зование Base64 для скры­тия информа­ции от нево­ору­жен­ного гла­за при­водит к силь­ному уве­личе­нию раз­мера, не давая никако­го замет­ного пре­иму­щес­тва.

Для при­мера давай обыч­ный тек­сто­вый документ внед­рим в кар­тинку фор­мата JPEG. Мой исходный файл называ­ется save.txt и лежит в одной дирек­тории с самой прог­раммой. Внед­рение фай­ла край­не прос­тое и выг­лядит при­мер­но так.

Про­пус­каем фун­кцию добав­ления шумов. Для нас они погоды не сде­лают, но, если ты хочешь допол­нитель­но замас­кировать информа­цию, могут помочь.

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

STEGHIDE

  • Плат­форма: любая
  • Где ска­чивать: GitHub

Steghide — кон­соль­ная ути­лита, написан­ная на C++. Скры­вает информа­цию в стан­дар­тных фай­лах фор­матов JPEG, BMP, WAV и AU. В арсе­нале прог­раммы пол­но шиф­ров — даже Blowfish, которо­го я у дру­гих не замечал. Теоре­тичес­ки исполь­зование такой экзо­тики может помочь запутать сле­ды еще силь­нее.

Steghide уме­ет не прос­то упа­ковы­вать дан­ные в кар­тинку или трек, а еще и шиф­ровать сек­ретную наг­рузку.

Но есть и минус: не все фотог­рафии и ауди­офай­лы подой­дут для внед­рения в них сек­ретной наг­рузки. Если файл слиш­ком малень­кий — внед­рить в него ничего нель­зя.

Да­вай поп­робу­ем объ­еди­нить кар­тинку cats.jpg и сек­ретный фай­лик save.txt.

От­кры­ваем тер­минал и пишем:

steghide embed -cf cats.jpg -ef save.txt

  • --embedfile [-ef] — файл, который мы будем встра­ивать;
  • --coverfile [-cf] — файл‑обложка, в который внед­ряет­ся сек­ретная инфа;
  • --compress [-z] — сжи­мать дан­ные перед упа­ков­кой;
  • --encryption [-e] — шиф­ровать внед­ряемые дан­ные.

Рас­паков­ка так же прос­та, как упа­ков­ка:

steghide extract -sf cats.jpg

Ключ --stegofile [-sf] поз­воля­ет выб­рать файл со скры­той информа­цией, а --passphrase [-p] ука­зыва­ет пароль.

Вот что получи­лось

Из‑за при­мене­ния сжа­тия раз­ница раз­меров до и пос­ле внед­рения минималь­на.

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

SPECTROLOGY

  • Плат­форма: любая
  • Где ска­чивать: GitHub

Наз­вание прог­раммы Spectrology говорит само за себя — она поз­воля­ет прев­ращать изоб­ражения в ауди­одо­рож­ки с «заряжен­ными» спек­трог­рамма­ми, из которых потом мож­но дос­тать кар­тинки. Зву­чит кру­то, но без проб­лем не обош­лось.

Пе­ред пер­вым запус­ком нуж­но пос­тавить модуль pillow.

python3 -m pip install --upgrade pip

python3 -m pip install --upgrade Pillow

Сра­зу бро­сает­ся в гла­за вто­рой огромный минус — край­не мед­ленная работа. Хоть он и с лих­вой перек­рыва­ется плю­сами в виде необыч­ного алго­рит­ма работы и перено­симос­ти (написа­на на Python).

Да­вай запаку­ем изоб­ражение BMP в файл WAV. Дела­ется это так:

python spectrology.py your_filename.bmp -o music.wav

  • --output [-o] — флаг, отве­чающий за наз­вание выход­ного ауди­офай­ла;
  • --botton [-b] зада­ет ниж­ний час­тотный диапа­зон;
  • --pixels [-p] поз­воля­ет уста­новить количес­тво пик­селей в секун­ду;
  • --sampling [-s] ста­вит час­тоту дис­кре­тиза­ции.

Да­вай пос­мотрим, какого раз­мера будет готовый ауди­офайл.

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

IMAGESPYER G2

  • Плат­форма: Windows
  • Где ска­чивать: где получит­ся

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

ImageSpyer пря­чет сек­ретные фай­лы толь­ко в кар­тинки и даже раз­реша­ет ста­вить пароль, что­бы зашиф­ровать дан­ные перед внед­рени­ем. Прог­рамма под­держи­вает око­ло 30 алго­рит­мов шиф­рования внед­ряемой информа­ции и 25 хеш‑фун­кций для под­писи, что­бы убе­дить­ся, что встро­енный в кар­тинку файл не побил­ся при переда­че.

Боль­шой плюс — наличие гра­фичес­кого интерфей­са с понят­ными пояс­нени­ями и мно­жес­твом нас­тро­ек. Выход­ных фор­матов все­го два: BMP и TIFF.

Пос­мотрим, нас­коль­ко силь­но уве­личил­ся объ­ем фотог­рафии.

Сле­ва — пос­ле обра­бот­ки, спра­ва — до

Как видишь, из малень­кого котика раз­мером 59,6 Кбайт мы сде­лали тол­сто­го кота на целых 1530 Кбайт. Резуль­тат неп­лохой, да и работа­ет ImageSpyer быс­тро, так что сме­ло рекомен­дуем к исполь­зованию.

REDJPEG

  • Плат­форма: Windows
  • Где ска­чивать: где получит­ся

Еще один сте­гозавр авторс­тва Алек­сан­дра Мяс­никова. На этот раз — с собс­твен­ным алго­рит­мом внед­рения изоб­ражения в кар­тинки, сжа­тием LZMA и офор­мле­нием для нос­таль­гиру­ющих по СССР.

Вождь чита­ет инс­трук­цию
Нас­трой­ки

А что у нас по объ­ему пос­ле запаков­ки тек­ста в кар­тинку?

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

OPENSTEGO

  • Плат­форма: любая
  • Где ска­чивать: GitHub

Про­ект OpenStego реали­зован на Java, име­ет под­дер­жку шиф­рования AES и край­не популя­рен сре­ди жела­ющих поз­накомить­ся со сте­ганог­рафи­ей. Под­держи­вает пла­гины, что­бы ты сам смог реали­зовать какой‑нибудь сте­ганог­рафичес­кий алго­ритм. Есть вер­сии и для Windows, и для Linux.

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

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

Прог­рамма не тре­бует уста­нов­ки, а запус­кает­ся бат­ником.

Срав­нение

Файл на выходе получил­ся куда тол­ще, чем был, — раз­мер уве­личил­ся поч­ти на 800 Кбайт.

По срав­нению с ImageSpyer OpenStego все же более богат фичами, что мне пон­равилось.

SILENTEYE

SilentEye — кросс‑плат­формен­ный софт с прос­тым интерфей­сом. Обла­дает мно­жес­твом пла­гинов и при­ятным GUI. Исполь­зует сов­ремен­ные алго­рит­мы сте­ганог­рафии и мас­киров­ки.

Из оче­вид­ных пре­иму­ществ отме­чу ввод мас­киру­емо­го тек­ста пря­мо в окне прог­раммы вмес­то заг­рузки тек­сто­вых фай­лов из сто­рон­него редак­тора. Серь­езно, фича прос­тая, а ник­то до это­го не додумал­ся. Фор­маты выход­ных фай­лов кар­тинок — BMP, JPEG, PNG, GIF, TIFF, зву­ка — толь­ко WAV.

Мож­но нас­тро­ить качес­тво выход­ного изоб­ражения — оно опре­деля­ет, сколь­ко потерь будет при кодиро­вании в JPEG.

Для шиф­рования внед­ренных дан­ных при­меня­ется AES, но нас­тро­ек куда боль­ше, чем у OpenStego.

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

Раз­мер фай­ла с кар­тинкой уве­личил­ся все­го на 13,5 Кбайт — очень хороший резуль­тат!

Ути­лита может спо­кой­но заменить ста­рич­ка OpenStego. Работа­ет она чуть мед­леннее кон­курен­тов, но зачас­тую это нек­ритич­но. Тоже рекомен­дую.

IMAGEJS

  • Плат­форма: Linux
  • Где ска­чивать: GitHub

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

ImageJS поз­воля­ет соз­дать кар­тинки, которые одновре­мен­но пред­став­ляют собой нас­тоящие JS-скрип­ты. Это нуж­но, что­бы упростить про­веде­ние более опас­ных XSS-атак, в которых иног­да тре­бует­ся под­гру­зить скрипт имен­но с ата­кован­ного домена. Вот тут на помощь при­ходит воз­можность заг­рузить туда ава­тар­ку, которая одновре­мен­но содер­жит JavaScript payload для даль­нейшей ата­ки. Прог­рамма под­держи­вает внед­рение в фор­маты BMP, GIF, WEBP, PNG и PDF.

Для сбор­ки нуж­ны пакеты build-esential и cmake. Даль­ше все прос­то:

$ git clone https://github.com/jklmnn/imagejs.git

$ cd imagejs

$ mkdir build

$ cd build

$ cmake ..

$ make

Да­вай соз­дадим script.js со сле­дующим кодом, а потом упа­куем его в image.gif:

alert("Hello, Xakep!");

./imagejs gif script.js -i image.gif

На выходе будет файл с двой­ным рас­ширени­ем, но это не беда.

Сей­час мы про­верим все в деле! Соз­давай HTML-стра­нич­ку со сле­дующим кодом и сох­раняй ее рядом с нашей заряжен­ной кар­тинкой.

<html>

<title>Knock, Knock, Neo</title>

<head>

<img src="script.js.gif" alt="Matrix">

<script src="script.js.gif"></script>

</head>

</html>

Сох­раня­ем и откры­ваем. Дол­жно получить­ся как на скрин­шоте.

Раз­мер кар­тинки поч­ти не меня­ется, что нам очень на руку.

Прог­рамма шикар­на, хоть и при­мени­ма толь­ко в очень спе­цифич­ных целях.

ВЫВОДЫ

За­менить кросс‑плат­формен­ный и богатый фичами OpenStego слож­но, но при желании мож­но. SilentEye будет неп­лохим выбором, но и ути­лит­ки Алек­сан­дра Мяс­никова тоже рекомен­дую поп­робовать, если у тебя Windows. Если же ты фанат кон­соли или мас­теришь какую‑то авто­мати­зиро­ван­ную сис­тему, то тебе может при­годить­ся один из вари­антов, написан­ных на Pyhton.

В таб­лице я свел воеди­но информа­цию об упо­мяну­тых прог­раммах и про­тес­тировал сте­ганог­рафиро­вание в кар­тинки тек­сто­вого фай­ла раз­мером 1,07 Кбайт.

https://t.me/anon_chan_by