Тема публикации — стеганография
Стеганография — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (Википедия), проще говоря, стеганография — сокрытие наличия/существования самого тайного послания без привлечения лишнего внимания.
В прошлом, я обнаружил в приложении на Android «PixelKnoot» уязвимость, которая сводила на «нет» весь замысел ПО. Приложение «PixelKnoot» — это разработка The Guardian Project. TGP — популярная контора с мировым именем в области параноидальных мобильных разработок. Orbot/Orweb/Orfox и др. разработки — это их рук дело.
Ребята из Guardianproject описали свое приложение в GP, как
«★ НЕВИДИМЫЕ ПЕРЕМЕНЫ: Даже опытный аналитик не должен быть в состоянии обнаружить любое сообщение. Байты изображение должно казаться неискаженным.»
на оф.сайте так
ATTACK RESISTANT: We’ve tested discovery on images with messages hidden in them using a specialized version of stegdetect, an automated tool for detecting steganographic content in images.
Высокопарное описание приложения Pixelknot, которое не обновлялось 3 года, да, в эпоху цифры — это «пропасть».
Провёл Стегоанализ и нашёл способ: определять — существует ли наличие самого тайного послания в картинке или нет, закодированное с помощью PixelKnot. Время на анализ данных: на разбор таких альбомов-картинок, где тайна, а где её нет, уходит на «слабой машине» ~ 1с/1картинку.
Обратился в техподдержку The Guardian Project со своими «мыслями» по поводу того, что все не так гладко с технической точки зрения, как заявлено у них в описании PixelKnot в GP и на оф.сайте. Некоторые разработчики, как и политики — любят скуку: ни программы bug bounty, ни своевременной обратной связи. Получил несколько «медленных ответов» с просьбой не раскрывать детали уязвимости для общественности, а в теле одного из писем такое пожелание The Guardian Project»: опубликовать проблему PixelKnot на Github-e. Хм… ммм… вот такие мысленные звуки.
Тогда мне казалась логика письма противоречивой: «не раскрывать уязвимость для общественности, но опубликовать её на Github-е». При этом «они» не обновляли PixelKnot (на тот момент) два года (PixelKnot v1.0.1 от 17/02/2017г., кол-во загрузок из GP > 100к.). Представляете, что такое промежуток два года в ИБ в эпоху цифры? В теле письма имелись ссылки на open source и пд. (одна из таких совестных).
Подобная политика не всегда является таковой и разница от программы к программе (баг баунти), даже несмотря на то, что проекты The Guardian — это Open Source Project-ы.
Уязвимость в Android приложении PixelKnot
С помощью Android-приложения PixelKnot спрятал тайное послание в картинке. Обработанная картинка, как картинка, на глаз — в ней ничего не изменилось, и MAT/2 никаких аспектов метаданных обработанного фото не выявил.
Сравнил бинарно с оригиналом — ничего «такого», кроме обработки формата JPEG.
Сброшенный файл на ПК, посмотрел разным программами на GNU/Linux/Windows 7: GIMP-ом/Photoshop-ом и стандартными прогами ОС для просмотра и редактирования изображения — ничего.
Пропустил оригинал фото через стеганографию Steghide/Stegosuite и сравнил все экземпляры в binwalk (GNU/Linux) — есть зацепка. Картинка Оригинал и картинки, обработанные в Steghide и Stegosuite, определились по исполняемому коду, а картинка PixelKnot — нет (проверил еще десяток картинок, обработанных в PixelKnot, — ни одна «не прошла» binwalk, но этого недостаточно…).
Картинка, обработанная в PixelKnot, — binwalk don’t define.
Попробовал брутфос атаку Stegcracker — ничего (SC — брутит фото, обработанные только в Steghide)
Провёл брутфос атаку Stegbreak — ничего (инструмент очень древний, брутит, но не понимает стеганографию PixelKnot/Steghide/Stegosuite).
Задействовал «лёгкую пехоту»: модифицированный инструмент 15-и летней давности — Stegdetect
Из результатов анализа вижу, что из 5 фото, обработанных в PixelKnot, две фото успешно обфусцировали инструмент, а также одна картинка, обработанная в Steghide, проскользнула незамеченной.
Подёргал коэф. яркости и компоненты цветности изображения (так как вся информация об изображении для глаза, в том числе секрет, содержится либо в коэф., либо в компонентах). Эмпирично кое-что выделяется: явные артефакты в «голубом цвете» в картинке PixelKnot , но это анализ фото вручную, при автоматическом стегоанализе, например фотоальбомов, так «лихо» нужные коэф/копм. яркости и цветности для выявления хаотичной пикселизации не подобрать.
фрагмент исследуемого фото, обработанного в PixelKnot.
Тогда я реализовал, пришедшую на ум, совершенно случайную вещь: переименовал файл, откинув расширение картинки (.jpg/.png. PixelKnot.jpg > PixelKnot). Открывал файл картинки без расширения с помощью KDE/Mate/Windows/Android стандартными просмотрщиками изображений — ничего, но в Photoshop-е она не открылась — ошибка! Думаю, вот он, нашёл «Cibola»! Но нет, Photoshop сердится и не открывает фото без расширения (.jpg/…) и у обычных фотографий.
Продолжил стегоанализ, открыл картинку без расширения в GIMP-е и получил аналогичную ошибку, как и в Photoshop-е. Но! GIMP в отличие от Photoshop-а обычные картинки с откинутым расширением открывает! То есть GIMP «стопорится» на изображениях, обработанных в PixelKnot (при условии, что у обработанного в PixelKnot файла, откинуто расширение, иначе всё хорошо/открывается).
Провёл ещё ряд разных и подобных экспериментов/манипуляций с «тайными посланиями в картинках» в Stegosuite (GUI) и Steghide (CLI). Эти «друзья» не подвели. В фотоальбоме картинку с тайным посланием не всегда возможно было вычислить (не имея оригинала), то есть проблема «вскрытия факта о наличии тайного послания в картинке» оставалась только у PixelKnot.
А как же проводить Стегоанализ PixelKnot, если картинок десятки и сотни с разным расширением и тд (как искать «ту единственную в стоге сена»)?
Раскачиваю найденную уязвимость: действенный способ стегоанализа фотографий обработанных в PixelKnot на GNU/Linux.
1) Открываю Double Commander > групповое переименование файлов > выбираю фотоальбом > откидываю расширение файлов (.jpg/.png/…) это почти мгновенная операция над файлами.
2) Открываю GIMP > файл > открыть как слои > выбираю любой фотоальбом с предварительно откинутыми расширениями фоток. Жду. Если среди картинок попадутся обработанные фото в PixelKnot, то ПО GIMP выдаст, по завершению обработки всех файлов, имена всех фотографий, которые содержат в себе наличие тайного послания. На разбор таких фото уходит ~1с/1 картинку (это на Intel 2х CPU прошлого десятилетия).
Эпилог
Согласно стеганографическому алгоритму F5, который использует The Guardian Project, PixelKnot скрывает тайное послание в теле картинки (не в имени и не в метаданных), например, если картинка будет содержать одно слово на однородном фоне, этого будет недостаточно для обработки фото в PixelKnot. При нескольких словах на однородном фоне, обработка фото PixelKnot будет успешной, но так же будет и видна невооруженным глазом.
Система считается взломанной, если аналитику удалось доказать хотя бы наличие скрытого сообщения (задача выполнена успешно).
Других технических претензий к PixelKnot не имею, на свободных Android-прошивках Resurrection Remix или LineageOS — софт PixelKnot работает без каких-либо сбоев, однако, из-за продемонстрированной уязвимости, приложение PixelKnot полностью теряет свой смысл.
p/s/ Следующей статьей, еще невышедшей в печать, будет уязвимость по программе «Охота за ошибками» от Яндекс (зал славы + финансы). Уязвимость будет интересна своей масштабной практичностью, «фиксами» и немного подноготной в рамках этики…
ссылка на оригинал статьи https://habr.com/ru/post/523928/
Добавить комментарий