• XSS.stack #1 – первый литературный журнал от юзеров форума

Патчдифф для Windows в 2025 году

varwar

El Diff
Забанен
Регистрация
12.11.2020
Сообщения
1 383
Решения
5
Реакции
1 537
Пожалуйста, обратите внимание, что пользователь заблокирован
Тема не новая и наметки на обсуждение уже были. Почему до сих пор не обсуждался вопрос автоматизации и создания какого-то достойного инструмента для ресерчеров оставим за скобками. Под спойлером информация для тех, кто не в теме.

Учитывая аудиторию, можно сказать, что патчдиффинг служит инструментом для создания 1-day эксплойтов, освоения инструментов и обучения.
Отдельной целью можно выделить поиск вариантов уязвимостей или байпасов в качестве 0-day.
Что делает среднестатистический ресерчер сегодня? Общий алгоритм выглядит следующим образом:

  • Анализ списка уязвимостей и подбор таргета
  • Поиск старой и новой версий бинаря
  • Открытие бинарей в IDA Pro (или другой популярный дизассемблер)
  • Создание BinExport баз для каждой базы IDA
  • Открытие BinExport баз в BinDiff
  • Первичный анализ патчей
  • Углубленный анализ патчей и создание PoC (триггер уязвимости)
  • Выполнение какой-либо полезной нагрузки (LPE, RCE, etc.)

Этот алгоритм вполне себе рабочий, но требует улучшения т.к. имеет место быть избыточное время манипуляций с бинарями до первичного анализа. Это отнимает фокус.

В конечном итоге ресерчеру необходимо как можно быстрее решить техническую задачу. На это могут влиять:
  • Персональный опыт эксплуатации
  • Наличие информации по эксплуатации таргета и исследуемой теме
  • Кол-во человек, решающих задачу
  • Железо
  • Скорость работы с необходимыми инструментами
  • Сложность исследуемой темы

Существенно сократить время до эксплуатации можно за счет автоматизации этапов, связанных с обработкой бинарей. В идеале система для патчдиффинга должна обеспечивать доступ к первичному анализу в два клика за счет маппинга уязвимостей и бинарных файлов их содержащих.


eldiff3.gif

Рисунок 1. Воркфлоу El Diff

Тут стоит уточнить, что на раннем этапе это инструмент для первичного анализа. Глубокий анализ по-прежнему придется делать ручками в вашем любимом дизасемблере и отладчике.
Для этого предусмотрена загрузка набора файлов - баз IDA (8.3), .BinExport, .BinDiff.
eldiff3.png

Рисунок 2. Окно с информацией о патченных файлах и набором действий

Функциональность
На данный момент приложение:
  1. Автоматически загружает информацию обо всех CVE для Windows 23H2
  2. Загружает и распаковывает архив обновлений
  3. Получает старую и новую версию для .sys* файлов
  4. Для каждого файла создается по две базы IDA, .BinExport (для старой и новой версии) и одна база .BinDiff с информацией о патченных функциях
  5. Каждая патченная функция декомпилируется и создается unified diff для последующего отображения
  6. Добавляется маппинг между уязвимостью и бинарным файлом (на Рисунке 1 это показано)
*Отдельно поясню за .sys файлы. Пока это приоритетное направление, но потом добавятся еще .exe и .dll и возможность отдельно запускать анализ для выбранного файла (например, каких-то тяжелых файлов). Когда маппинг будет реализован, то все дложно быть просто и удобно. Грубо говоря, по имени компонента будет искаться соответствующий бинарный файл в KB и уже дальше обрабатываться. В любом случае задача не покрыть ВСЁ, но существенно сократить временные затраты.

Что я сам еще хотел бы реализовать по функциональности:
  1. Улучшение декомпилированного вывода за счет обработки скриптами (проставление типов функций, переменных и т.д.)
  2. Улучшение вывода посредством ИИ (опционально)
  3. Удобный и приятный глазу граф с дизасмом (пока хз как это сделать)
  4. Добавление информации по другим продуктам (браузер, офис, дефендер) т.к. их нужно отдельно парсить (не буду вдаваться в подробности)
  5. Сбор данных по появившемся ресерчам, PoC в паблике (некий элемент Vuln Intel), чтобы многое было в приложухе и не нужно было далеко ходить
  6. Глобальный поиск (названия файлов, версии, даты обновлений, KB и т.д.)
  7. Отображение удаленных и новых функций в бинарнике (вроде просто, но пока не понял как это сделать, .BinDiff база не хранит явно таких данных)
Т.к. я декомпилирую только патченные функции, то в целом весь процессинг получается очень шустрым. На самом деле не понимаю зачем декомпилировать весь бинарь. Максимум может быть стоит декомпилировать функции внутри функции на глубину 1 для уточнения контекста, что та или иная функция делает, а остальное потом смотреть уже непосредственно в IDA детально. Хотя для какой-нибудь функции ExpQuerySystemInformation это уже будет существенная нагрузка ибо в ней уже сотни вызовов. И подобных функций немало. В общем тут стоит найти баланс не в ущерб производительности.

Вроде ничего не забыл, а если забыл, то дополню. За фронтенд строго не судите, я - обезьяна.
 
Последнее редактирование:
Удобный и приятный глазу граф с дизасмом (пока хз как это сделать)
I'm thinking piggybacking on IDA's existing flow graphs/scripts + quickly embed them in a web based viewer(Viz.js with graphviz whatever).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
I'm thinking piggybacking on IDA's existing flow graphs/scripts + quickly embed them in a web based viewer(Viz.js with graphviz whatever).
Yes, looks like this is the only way. At least for a graph representation. To add a diff support for line by line representation is much simpler for assembly.
 
Тема не новая и наметки на обсуждение уже были. Почему до сих пор не обсуждался вопрос автоматизации и создания какого-то достойного инструмента для ресерчеров оставим за скобками. Под спойлером информация для тех, кто не в теме.

Учитывая аудиторию, можно сказать, что патчдиффинг служит инструментом для создания 1-day эксплойтов, освоения инструментов и обучения.
Отдельной целью можно выделить поиск вариантов уязвимостей или байпасов в качестве 0-day.
Что делает среднестатистический ресерчер сегодня? Общий алгоритм выглядит следующим образом:

  • Анализ списка уязвимостей и подбор таргета
  • Поиск старой и новой версий бинаря
  • Открытие бинарей в IDA Pro (или другой популярный дизассемблер)
  • Создание BinExport баз для каждой базы IDA
  • Открытие BinExport баз в BinDiff
  • Первичный анализ патчей
  • Углубленный анализ патчей и создание PoC (триггер уязвимости)
  • Выполнение какой-либо полезной нагрузки (LPE, RCE, etc.)

Этот алгоритм вполне себе рабочий, но требует улучшения т.к. имеет место быть избыточное время манипуляций с бинарями до первичного анализа. Это отнимает фокус.

В конечном итоге ресерчеру необходимо как можно быстрее решить техническую задачу. На это могут влиять:
  • Персональный опыт эксплуатации
  • Наличие информации по эксплуатации таргета и исследуемой теме
  • Кол-во человек, решающих задачу
  • Железо
  • Скорость работы с необходимыми инструментами
  • Сложность исследуемой темы

Существенно сократить время до эксплуатации можно за счет автоматизации этапов, связанных с обработкой бинарей. В идеале система для патчдиффинга должна обеспечивать доступ к первичному анализу в два клика за счет маппинга уязвимостей и бинарных файлов их содержащих.


Посмотреть вложение 105928
Рисунок 1. Воркфлоу El Diff

Тут стоит уточнить, что на раннем этапе это инструмент для первичного анализа. Глубокий анализ по-прежнему придется делать ручками в вашем любимом дизасемблере и отладчике.
Для этого предусмотрена загрузка набора файлов - баз IDA (8.3), .BinExport, .BinDiff.
Посмотреть вложение 105927
Рисунок 2. Окно с информацией о патченных файлах и набором действий

Функциональность
На данный момент приложение:
  1. Автоматически загружает информацию обо всех CVE для Windows 23H2
  2. Загружает и распаковывает архив обновлений
  3. Получает старую и новую версию для .sys* файлов
  4. Для каждого файла создается по две базы IDA, .BinExport (для старой и новой версии) и одна база .BinDiff с информацией о патченных функциях
  5. Каждая патченная функция декомпилируется и создается unified diff для последующего отображения
  6. Добавляется маппинг между уязвимостью и бинарным файлом (на Рисунке 1 это показано)
*Отдельно поясню за .sys файлы. Пока это приоритетное направление, но потом добавятся еще .exe и .dll и возможность отдельно запускать анализ для выбранного файла (например, каких-то тяжелых файлов). Когда маппинг будет реализован, то все дложно быть просто и удобно. Грубо говоря, по имени компонента будет искаться соответствующий бинарный файл в KB и уже дальше обрабатываться. В любом случае задача не покрыть ВСЁ, но существенно сократить временные затраты.

Что я сам еще хотел бы реализовать по функциональности:
  1. Улучшение декомпилированного вывода за счет обработки скриптами (проставление типов функций, переменных и т.д.)
  2. Улучшение вывода посредством ИИ (опционально)
  3. Удобный и приятный глазу граф с дизасмом (пока хз как это сделать)
  4. Добавление информации по другим продуктам (браузер, офис, дефендер) т.к. их нужно отдельно парсить (не буду вдаваться в подробности)
  5. Сбор данных по появившемся ресерчам, PoC в паблике (некий элемент Vuln Intel), чтобы многое было в приложухе и не нужно было далеко ходить
  6. Глобальный поиск (названия файлов, версии, даты обновлений, KB и т.д.)
  7. Отображение удаленных и новых функций в бинарнике (вроде просто, но пока не понял как это сделать, .BinDiff база не хранит явно таких данных)
Т.к. я декомпилирую только патченные функции, то в целом весь процессинг получается очень шустрым. На самом деле не понимаю зачем декомпилировать весь бинарь. Максимум может быть стоит декомпилировать функции внутри функции на глубину 1 для уточнения контекста, что та или иная функция делает, а остальное потом смотреть уже непосредственно в IDA детально. Хотя для какой-нибудь функции ExpQuerySystemInformation это уже будет существенная нагрузка ибо в ней уже сотни вызовов. И подобных функций немало. В общем тут стоит найти баланс не в ущерб производительности.

Вроде ничего не забыл, а если забыл, то дополню. За фронтенд строго не судите, я - обезьяна.
А когда выйдет в свет?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Загружает и распаковывает архив обновлений
Не сильно понял это, мб из-за того, что я вижу другой подход. Ты именно обновление качаешь и раскатываешь на условном хосте, а затем собираешь бинари?
ИМХО, как раз один из правильных подходов, на винбиндексе в лучшем случае патченные бинари через день появляются (кроме основных модулей Hyper-V (hvix, hvax), эти как правило вообще не появляются).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не сильно понял это, мб из-за того, что я вижу другой подход. Ты именно обновление качаешь и раскатываешь на условном хосте, а затем собираешь бинари?
Да, так и есть. Правда там есть подводные камни. Например, версия базового файла должна быть < forward delta файла. В некоторых случаях все это может поломаться и ApplyDeltaB вываливается с ошибкой. Например, когда подсасываешь старые KB.

эти как правило вообще не появляются).
Есть маза, что не включены фичи - поэтому и нет всего скоупа бинарей, т.к. собрать патченный бинарь без базового файла не получится. В идеале надо все это дело включить.
В общем собрать все и ничего не потерять - отдельная задача.

1744861946016.png
 
Последнее редактирование:
Wait, so if ApplyDeltaB bombs out because we’re missing the base file for that feature, you’re planning to grab it from some colossal, everything enabled reference image? I mean, is that really the failsafe / risk overkill if try to maintain that ‘kitchen sink' env long term?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Wait, so if ApplyDeltaB bombs out because we’re missing the base file for that feature, you’re planning to grab it from some colossal, everything enabled reference image? I mean, is that really the failsafe / risk overkill if try to maintain that ‘kitchen sink' env long term?
I don't see another options. So yes, all features must be enabled to grab msmq, hyper-v and other stuff, which is not present in the default Windows configuration. That's why I work on the limited amount of data to look at how it works and what issues appear.

Not too much binaries to process for each security update though (multiple CVE's may relate to the same binary). The problem is can you or your team to diff all that shit and write exploits before next security update, lol.

1744872050656.png
 
Последнее редактирование:
Шикарная тема, лично мне в таком софте хотелось бы универсальности (дифать обнавления чего угодно). Понимаю что цель другая. Разумеется здорово было-бы иметь возможность комментировать правки.
Что показывают тесты на прошлых патчах? Насколько эффективно/наглядно/понятно становится?
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Разумеется здорово было-бы иметь возможность комментировать правки.
В смысле редактировать вывод в модальном окне диффа? Такая мысль была, но нужно подумать над реализацией. Я храню диффы как сжатый BLOB в базе и на лету распаковываю.

Что показывают тесты на прошлых патчах? Насколько эффективно/наглядно/понятно становится?
Да вывод такой же как в diaphora, либа под капотом та же самая используется. Иногда функции не декомпилируются, но это бывает очень редко и относится к самой IDA. Возможно на 9 версии такого уже не будет, но пока использую 8.3 на бэке.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
эти как правило вообще не появляются
Можешь скинуть пример названия такого бинарника?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
hvix64.exe/hvax64.exe. Но насколько я помню, у тебя пока не парсятся exe/dll
Так они есть на винбиндексе. Интересно чего нет.
Несколько версий (в данном случае из последних трех monthly security update) еще можно найти в C:\Windows\WinSxS вместе с dll.
1744945712278.png

Код:
C:\Windows\WinSxS>dir /s /b | findstr /i "hvix64.exe"
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.4601_none_10215ec0e12c65d2\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.4601_none_10215ec0e12c65d2\f\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.4601_none_10215ec0e12c65d2\r\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5037_none_1064b85ce0f9a11e\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5037_none_1064b85ce0f9a11e\f\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5037_none_1064b85ce0f9a11e\r\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5185_none_105f1772e0fd0880\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5185_none_105f1772e0fd0880\f\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5185_none_105f1772e0fd0880\r\hvix64.exe
 
Так они есть на винбиндексе. Интересно чего нет.
Несколько версий (в данном случае из последних трех monthly security update) еще можно найти в C:\Windows\WinSxS вместе с dll.
Посмотреть вложение 106039
Код:
C:\Windows\WinSxS>dir /s /b | findstr /i "hvix64.exe"
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.4601_none_10215ec0e12c65d2\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.4601_none_10215ec0e12c65d2\f\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.4601_none_10215ec0e12c65d2\r\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5037_none_1064b85ce0f9a11e\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5037_none_1064b85ce0f9a11e\f\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5037_none_1064b85ce0f9a11e\r\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5185_none_105f1772e0fd0880\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5185_none_105f1772e0fd0880\f\hvix64.exe
C:\Windows\WinSxS\amd64_microsoft-hyper-v-drivers-hypervisor_31bf3856ad364e35_10.0.22621.5185_none_105f1772e0fd0880\r\hvix64.exe
Хм, у меня с винбиндекса их не качает, интересно. Поробую ещё варианты.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А где-то можно это попробовать уже?
Нигде. Автор ведь varwar. (Если он захочет он выложит инструмент)


Кстати из перспективных направлений так же Patch Gapping для Android хорош, там очень большое окно, некоторым производителям требуется до 3 месяцев, чтобы внести исправления в свои кодовые базы и донести патчи до юзеров.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Хм, у меня с винбиндекса их не качает, интересно. Поробую ещё варианты.
Ты прав - их нет. Я просто не жмакнул на загрузку.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Когда думал, что Major Version 11 не существует и наловил кучу фолзов.
meme.jpg
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Добавил генерацию простенького репорта для обнов.
Пока 4 таблички.

1. Топ-10 CWE
2. Топ-8 высокорисковых уязвимостей (c приоритетом для эксплуатируемых in the wild и с публик эксплойтами)
3. Таблица компонент-бинарь-cve
4. Кол-во патченных функций для бинарей
1.png

2.png

3.png
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх