Категория > Новости > Sad guard. Ищем и эксплуатируем уязвимость в драйвере AdGuard для Windows - «Новости»
Sad guard. Ищем и эксплуатируем уязвимость в драйвере AdGuard для Windows - «Новости»30-01-2023, 00:00. Автор: Маланья |
@Denis_Skvortcov. В его блоге крутые статьи на тему эксплуатации уязвимостей в антивирусах для Windows. Сейчас взгляд Дениса пал на Avast.warningСтатья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону. Читайте также - лаза и область вокруг глаз - первая зона на лице, которая привлекает внимание. Из-за особенностей кожи в этой области, она одна из первых выдает возрастные изменения, морщины вокруг глаз убрать в домашних условиях по доступным ценам. Как все начиналосьЯ мало что понимал в виндовых драйверах до того, как прочитал книгу Павла Йосифовича Windows Kernel Programming. В книге все начинается с простого драйвера в духе Hello World и заканчивается сложным драйвером‑фильтром. Также рассказывается про отладку драйверов в виртуальной машине с WinDbg на хосте и про типичные ошибки программирования драйверов. После прочтения, конечно же, хочется применить знания на практике и разобрать какой‑нибудь драйвер. Может, нам повезет и мы найдем уязвимость? infoСтатья рассчитана на тех, кто немного разбирается в реверс‑инжиниринге сишного кода. В ней не будет подробного разбора процесса реверса. За более детальным описанием реверса обратись к моей первой статье «Разборки на куче. Эксплуатируем хип уязвимого SOAP-сервера на Linux». Почему AdGuardAdGuard — классный блокировщик рекламы, поддерживающий шифрованный DNS (DoH, DoT, DoQ). Чтобы блокировать рекламные запросы всех приложений, а не только браузера, используется WDM-драйвер. Давай установим AdGuard на Windows 10 в виртуальной машине и начнем его изучать. Так получилось, что я установил сборку для x86, поэтому исследовать мы будем 32-битный драйвер. Поверхность атакиПервым делом нужно убедиться, что драйвер находится на поверхности атаки. То есть непривилегированное приложение может открыть драйвер для взаимодействия — чтения, записи и отправки IOCTL. В этом нам поможет пара строк на PowerShell с библиотекой NtObjectManager за авторством Джеймса Форшоу. Для определения артефактов (файлов, ключей реестра) исследуемого продукта прекрасно подходит утилита от Microsoft Attack Surface Analyzer. С ее помощью нужно собрать два снапшота ОС: до установки исследуемой программы и после, а также создать дифф, который покажет установленные артефакты. Таким образом можно определить путь девайса в Object-Manager: Ошибка при открытии девайса драйвера Драйвер открыть не получилось. Ошибка 0xC000010 Первое место — инициализирующий код драйвера в функции Функция создания девайса драйвера Функция infoРекомендуется использовать Аргумент Флаг Здесь тоже все нормально, двигаемся дальше. Второе место — функция — обработчик открытия девайса драйвера. Найти ее просто. В коде инициализации драйвера необходимо явно назначить обработчики функций Обработчики usermode-запросов в коде драйвера На скриншотах IDA ты видишь названия переменных и функций, придуманных мной во время реверса. Конечно же, символа от бинаря нам никто не даст. OSR Online IOCTL DecoderФлаг Без труда находим обработчик открытия девайса. Обработчик IRP_MJ_CREATE Здесь реализован кастомный эксклюзивный доступ к драйверу — PID открывшего его процесса сохраняется в глобальную переменную И что это за PID? Кто открыл драйвер раньше всех? Это сервисный процесс Диалоговое окно отключения AdGuard Когда процесс Get-NtFile() с теми же аргументами возвращает другой результат Получаем права на чтение, запись и отправку IOCTL от непривилегированного пользователя. Отлично! Поверхность атаки определена. На данном этапе исследования можно отметить две ошибки.
Исследование можно было заканчивать после неудачной попытки открыть девайс драйвера, но мы внимательно отнеслись к коду ошибки и получили первую зацепку. Кстати, проверить DACL девайса ты можешь и с помощью такой команды: Либо: В дизассемблерном листинге мы заметили большое количество обработчиков IOCTL. Что можно сделать вместо того, чтобы реверсить каждый? ФаззингФаззинг драйверов несколько сложнее фаззинга юзермодных приложений, потому что работа происходит не с виртуальным пространством единственного процесса, а со всей ОС целиком. Отсюда усложнение инфраструктуры — установка агента в виртуальную машину и запуск ее в QEMU/KVM, как, например, в фаззере kAFL. Перейти обратно к новости |