Пожалуйста, обратите внимание, что пользователь заблокирован
Тема не новая и наметки на обсуждение уже были. Почему до сих пор не обсуждался вопрос автоматизации и создания какого-то достойного инструмента для ресерчеров оставим за скобками. Под спойлером информация для тех, кто не в теме.
Рисунок 1. Воркфлоу El Diff
Тут стоит уточнить, что на раннем этапе это инструмент для первичного анализа. Глубокий анализ по-прежнему придется делать ручками в вашем любимом дизасемблере и отладчике.
Для этого предусмотрена загрузка набора файлов - баз IDA (8.3), .BinExport, .BinDiff.
Рисунок 2. Окно с информацией о патченных файлах и набором действий
Функциональность
На данный момент приложение:
Что я сам еще хотел бы реализовать по функциональности:
Вроде ничего не забыл, а если забыл, то дополню. За фронтенд строго не судите, я - обезьяна.
Учитывая аудиторию, можно сказать, что патчдиффинг служит инструментом для создания 1-day эксплойтов, освоения инструментов и обучения.
Отдельной целью можно выделить поиск вариантов уязвимостей или байпасов в качестве 0-day.
Что делает среднестатистический ресерчер сегодня? Общий алгоритм выглядит следующим образом:
Этот алгоритм вполне себе рабочий, но требует улучшения т.к. имеет место быть избыточное время манипуляций с бинарями до первичного анализа. Это отнимает фокус.
В конечном итоге ресерчеру необходимо как можно быстрее решить техническую задачу. На это могут влиять:
Существенно сократить время до эксплуатации можно за счет автоматизации этапов, связанных с обработкой бинарей. В идеале система для патчдиффинга должна обеспечивать доступ к первичному анализу в два клика за счет маппинга уязвимостей и бинарных файлов их содержащих.
Отдельной целью можно выделить поиск вариантов уязвимостей или байпасов в качестве 0-day.
Что делает среднестатистический ресерчер сегодня? Общий алгоритм выглядит следующим образом:
- Анализ списка уязвимостей и подбор таргета
- Поиск старой и новой версий бинаря
- Открытие бинарей в IDA Pro (или другой популярный дизассемблер)
- Создание BinExport баз для каждой базы IDA
- Открытие BinExport баз в BinDiff
- Первичный анализ патчей
- Углубленный анализ патчей и создание PoC (триггер уязвимости)
- Выполнение какой-либо полезной нагрузки (LPE, RCE, etc.)
Этот алгоритм вполне себе рабочий, но требует улучшения т.к. имеет место быть избыточное время манипуляций с бинарями до первичного анализа. Это отнимает фокус.
В конечном итоге ресерчеру необходимо как можно быстрее решить техническую задачу. На это могут влиять:
- Персональный опыт эксплуатации
- Наличие информации по эксплуатации таргета и исследуемой теме
- Кол-во человек, решающих задачу
- Железо
- Скорость работы с необходимыми инструментами
- Сложность исследуемой темы
Существенно сократить время до эксплуатации можно за счет автоматизации этапов, связанных с обработкой бинарей. В идеале система для патчдиффинга должна обеспечивать доступ к первичному анализу в два клика за счет маппинга уязвимостей и бинарных файлов их содержащих.
Рисунок 1. Воркфлоу El Diff
Тут стоит уточнить, что на раннем этапе это инструмент для первичного анализа. Глубокий анализ по-прежнему придется делать ручками в вашем любимом дизасемблере и отладчике.
Для этого предусмотрена загрузка набора файлов - баз IDA (8.3), .BinExport, .BinDiff.
Рисунок 2. Окно с информацией о патченных файлах и набором действий
Функциональность
На данный момент приложение:
- Автоматически загружает информацию обо всех CVE для Windows 23H2
- Загружает и распаковывает архив обновлений
- Получает старую и новую версию для .sys* файлов
- Для каждого файла создается по две базы IDA, .BinExport (для старой и новой версии) и одна база .BinDiff с информацией о патченных функциях
- Каждая патченная функция декомпилируется и создается unified diff для последующего отображения
- Добавляется маппинг между уязвимостью и бинарным файлом (на Рисунке 1 это показано)
Что я сам еще хотел бы реализовать по функциональности:
- Улучшение декомпилированного вывода за счет обработки скриптами (проставление типов функций, переменных и т.д.)
- Улучшение вывода посредством ИИ (опционально)
- Удобный и приятный глазу граф с дизасмом (пока хз как это сделать)
- Добавление информации по другим продуктам (браузер, офис, дефендер) т.к. их нужно отдельно парсить (не буду вдаваться в подробности)
- Сбор данных по появившемся ресерчам, PoC в паблике (некий элемент Vuln Intel), чтобы многое было в приложухе и не нужно было далеко ходить
- Глобальный поиск (названия файлов, версии, даты обновлений, KB и т.д.)
- Отображение удаленных и новых функций в бинарнике (вроде просто, но пока не понял как это сделать, .BinDiff база не хранит явно таких данных)
ExpQuerySystemInformation это уже будет существенная нагрузка ибо в ней уже сотни вызовов. И подобных функций немало. В общем тут стоит найти баланс не в ущерб производительности.Вроде ничего не забыл, а если забыл, то дополню. За фронтенд строго не судите, я - обезьяна.
Последнее редактирование: