Решение задания "Hidden Flag" с CyBRICS CTF Quals 2019
На прошлых выходных проходил CyBRICS CTF Quals 2019. Задания всё ещё доступны - https://cybrics.net/tasks/ Ссылка на событие - https://ctftime.org/event/836
Задание было на Reverse (обратную разработку) и было отмечено организаторами как сложное (категория Hard была самой сложной по задумке).
По условию задания нам нужно найти спрятанные флаг в дампе памяти. Дан торрент-файл. Скачиваем его и получаем архив.
Распакуем архив и получи 2 Гб дамп памяти.
Отлично, начинается фаза исследования дампа.
Этап 1 - Исследование дампа (форензика).
По сути этот этап представляет из себя стнадратный набор действий при компьютерной криминалистики.
Нам надо определить следующее:
Для начала определим версию ОС.
команда:
Windows 10. Это не очень хорошо, потому что не все функции volatility работают для 10-ки корректно (если вообще работают). При этом в начале нужно было "поиграться" с профилем, т.к. при установке первого профиля (Win2016x64_14393) дампы были не совсем корректными. В итоге рекомендуемый профиль - Win10x64_16299.
Далее пробуем дампить процессы, историю браузера (не вышло), файлы, сетевые подключения и всё остальное. В дампах ищем что-то за что можем зацепиться, ведь прямой задачи у нас нет, нам просто надо найти флаг спрятанный в памяти.
К сожалению ничего интересного в процессах, подключениях найдено не было. В автозапуске тоже не было ничего подозрительного. Директория пользователя (в дампе filescan) не содержала ничего интересного. На всё это исследование ушло около 2 часов и таск уже начинал казаться не особо решаемым.
Однако, после очередного просмотра сдампленных данных в дампе драйверов был обнаружен странный драйвер "FlagStor".
команда:
При этом он явно был не системный, т.к. путь к нему содержал папку "t4est", которая со 100% вероятностью не была создана системой.
Отлично, мы нашли за что зацепиться, теперь нужно сдампить этот драйвер. Для этого можно использовать функцию дампа всех драйверов "moddump".
команда:
Этап 2 - Исследование драйвера (ревёрс).
Откроем драйвер в IDA и удивимся небольшому количеству функций.
Имена функций были даны в ходе анализа, при первой загрузке имён не будет, т.к. символьной информации у нас нет (хотя где-то лежала PDB, но при таком количестве функций - нет смысла возиться с её получением).
Почти сразу можно найти функцию загрузки драйвера.
Перед выводом на экран сообщения о загрузке, она вызывает ещё одну функцию. Посмотрим, что эта за функция.
Данная функция вызывает ещё одну с некоторыми аргументами, первый аргумент вполне читаемая строка, а второй и третий равны между собой и являются указателями на некоторые данные в секции данных.
Можно предположить, что это какое-то шифрование по ключу.
Функция вызывает ещё 2 функции. Первая работает только с ключом и генерирует "расширенный ключ", а вторая производит шифрование.
Немного взглянув на алгоритм "расширения ключа" можно понять, что он очень похож на RC4. А функция шифрования подтверждает наши догадки.
Даже если мы ошиблись, попробовать взять готовую реализацию RC4 и подставить туда наши данные - дело 5 минут.
Найдём готовый RC4 скрипт на Python - https://raw.githubusercontent.com/bozhu/RC4-Python/master/rc4.py
И поменяем ключи и текст.
Теперь просто запустим скрипт.
В итоге получим флаг.
авторство - Telegram-канал "Убежище Хакера"
На прошлых выходных проходил CyBRICS CTF Quals 2019. Задания всё ещё доступны - https://cybrics.net/tasks/ Ссылка на событие - https://ctftime.org/event/836
Задание было на Reverse (обратную разработку) и было отмечено организаторами как сложное (категория Hard была самой сложной по задумке).
По условию задания нам нужно найти спрятанные флаг в дампе памяти. Дан торрент-файл. Скачиваем его и получаем архив.
Распакуем архив и получи 2 Гб дамп памяти.
Отлично, начинается фаза исследования дампа.
Этап 1 - Исследование дампа (форензика).
По сути этот этап представляет из себя стнадратный набор действий при компьютерной криминалистики.
Нам надо определить следующее:
- версию ОС, с которой был снят дамп
- Запущенные процессы
- Активные подключения
- Историю браузера
- Получить список доступных файлов
- Сдампить интересные ключи реестра
- Получить список драйверов
Для начала определим версию ОС.
команда:
volatility imageinfo -f 20190717.mem
Windows 10. Это не очень хорошо, потому что не все функции volatility работают для 10-ки корректно (если вообще работают). При этом в начале нужно было "поиграться" с профилем, т.к. при установке первого профиля (Win2016x64_14393) дампы были не совсем корректными. В итоге рекомендуемый профиль - Win10x64_16299.
Далее пробуем дампить процессы, историю браузера (не вышло), файлы, сетевые подключения и всё остальное. В дампах ищем что-то за что можем зацепиться, ведь прямой задачи у нас нет, нам просто надо найти флаг спрятанный в памяти.
К сожалению ничего интересного в процессах, подключениях найдено не было. В автозапуске тоже не было ничего подозрительного. Директория пользователя (в дампе filescan) не содержала ничего интересного. На всё это исследование ушло около 2 часов и таск уже начинал казаться не особо решаемым.
Однако, после очередного просмотра сдампленных данных в дампе драйверов был обнаружен странный драйвер "FlagStor".
команда:
volatility modules --profile Win10x64_16299 -f 20190717.mem
При этом он явно был не системный, т.к. путь к нему содержал папку "t4est", которая со 100% вероятностью не была создана системой.
Отлично, мы нашли за что зацепиться, теперь нужно сдампить этот драйвер. Для этого можно использовать функцию дампа всех драйверов "moddump".
команда:
volatility moddump -d drivers/ --profile Win10x64_16299 -f 20190717.mem
Копируем необходимый нам драйвер (просто найдём его по адресу, который был получен при дампе модулей). И теперь начинается второй этап, а именно исследование драйвера.Вывод команды у вас будет отличаться, т.к. в данному случае команда уже была запущена ранее и в кеше сохранилась информация о сдампленных драйверах.
Этап 2 - Исследование драйвера (ревёрс).
Откроем драйвер в IDA и удивимся небольшому количеству функций.
Имена функций были даны в ходе анализа, при первой загрузке имён не будет, т.к. символьной информации у нас нет (хотя где-то лежала PDB, но при таком количестве функций - нет смысла возиться с её получением).
Почти сразу можно найти функцию загрузки драйвера.
Перед выводом на экран сообщения о загрузке, она вызывает ещё одну функцию. Посмотрим, что эта за функция.
Данная функция вызывает ещё одну с некоторыми аргументами, первый аргумент вполне читаемая строка, а второй и третий равны между собой и являются указателями на некоторые данные в секции данных.
Можно предположить, что это какое-то шифрование по ключу.
Функция вызывает ещё 2 функции. Первая работает только с ключом и генерирует "расширенный ключ", а вторая производит шифрование.
Немного взглянув на алгоритм "расширения ключа" можно понять, что он очень похож на RC4. А функция шифрования подтверждает наши догадки.
Даже если мы ошиблись, попробовать взять готовую реализацию RC4 и подставить туда наши данные - дело 5 минут.
Найдём готовый RC4 скрипт на Python - https://raw.githubusercontent.com/bozhu/RC4-Python/master/rc4.py
И поменяем ключи и текст.
Теперь просто запустим скрипт.
В итоге получим флаг.
авторство - Telegram-канал "Убежище Хакера"