[Восстановленная статья] Уязвимость в Pixelknot

Некоторые известные уязвимости не фиксятся годами…

Тема публикации — стеганография


Стеганография — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (Википедия), проще говоря, стеганография — сокрытие наличия/существования самого тайного послания без привлечения лишнего внимания.

В прошлом, я обнаружил в приложении на 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.
1mabqiuwgmegjqtofke5rrsql1k.jpeg

Сброшенный файл на ПК, посмотрел разным программами на GNU/Linux/Windows 7: GIMP-ом/Photoshop-ом и стандартными прогами ОС для просмотра и редактирования изображения — ничего.
Пропустил оригинал фото через стеганографию Steghide/Stegosuite и сравнил все экземпляры в binwalk (GNU/Linux) — есть зацепка. Картинка Оригинал и картинки, обработанные в Steghide и Stegosuite, определились по исполняемому коду, а картинка PixelKnot — нет (проверил еще десяток картинок, обработанных в PixelKnot, — ни одна «не прошла» binwalk, но этого недостаточно...).
dkwqfpozjded3q-h68ljnvs531u.png
Картинка, обработанная в PixelKnot, — binwalk don't define.

Попробовал брутфос атаку Stegcracker — ничего (SC — брутит фото, обработанные только в Steghide)
Провёл брутфос атаку Stegbreak — ничего (инструмент очень древний, брутит, но не понимает стеганографию PixelKnot/Steghide/Stegosuite).

Задействовал «лёгкую пехоту»: модифицированный инструмент 15-и летней давности — Stegdetect
wtdwgzmisb071zfrwznjjin3rva.png
Из результатов анализа вижу, что из 5 фото, обработанных в PixelKnot, две фото успешно обфусцировали инструмент, а также одна картинка, обработанная в Steghide, проскользнула незамеченной.

Подёргал коэф. яркости и компоненты цветности изображения (так как вся информация об изображении для глаза, в том числе секрет, содержится либо в коэф., либо в компонентах). Эмпирично кое-что выделяется: явные артефакты в «голубом цвете» в картинке PixelKnot , но это анализ фото вручную, при автоматическом стегоанализе, например фотоальбомов, так «лихо» нужные коэф/копм. яркости и цветности для выявления хаотичной пикселизации не подобрать.
0zdf8tddtfotd_3jonmmm8tdd3q.png
фрагмент исследуемого фото, обработанного в 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/...) это почти мгновенная операция над файлами.

q5wlxircf5xhhj-gf6vnjvipd7c.jpeg

2) Открываю GIMP > файл > открыть как слои > выбираю любой фотоальбом с предварительно откинутыми расширениями фоток. Жду. Если среди картинок попадутся обработанные фото в PixelKnot, то ПО GIMP выдаст, по завершению обработки всех файлов, имена всех фотографий, которые содержат в себе наличие тайного послания. На разбор таких фото уходит ~1с/1 картинку (это на Intel 2х CPU прошлого десятилетия).

aakmmgw4_fyzgxmrxd74jnfdjhs.jpeg


Эпилог


Согласно стеганографическому алгоритму F5, который использует The Guardian Project, PixelKnot скрывает тайное послание в теле картинки (не в имени и не в метаданных), например, если картинка будет содержать одно слово на однородном фоне, этого будет недостаточно для обработки фото в PixelKnot. При нескольких словах на однородном фоне, обработка фото PixelKnot будет успешной, но так же будет и видна невооруженным глазом.
Пример
olhyehrnbmqu6jgbvxcvzgyupuo.jpeg

Система считается взломанной, если аналитику удалось доказать хотя бы наличие скрытого сообщения (задача выполнена успешно).
Других технических претензий к PixelKnot не имею, на свободных Android-прошивках Resurrection Remix или LineageOS — софт PixelKnot работает без каких-либо сбоев, однако, из-за продемонстрированной уязвимости, приложение PixelKnot полностью теряет свой смысл.

Следующей статьей, еще невышедшей в печать, будет уязвимость по программе «Охота за ошибками» от Яндекс (зал славы + финансы). Уязвимость будет интересна своей масштабной практичностью, «фиксами» и немного подноготной в рамках этики…

Дата: 2020-10-18 06:57:11

Источник: https://habr.com/ru/post/523928/