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

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


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

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