Привет, Гость!
Навигация
Голосование
Ваши политические взгляды
Правые
Левые
Центристские
Другое

» » Алексей Николайчук a.k.a. Unwinder,

Алексей Николайчук a.k.a. Unwinder,

Алексей Николайчук a.k.a. Unwinder,

04 октября '16




Алексей Николайчук a.k.a. Unwinder, создатель и разработчик знаменитых программ RivaTuner, MSI Afterburner, EVGA Precision (X) и ряда других, поделился своими наблюдениями по поводу эксплойта на базе драйвера ASMMAP. «Некоторое время назад был показан забавный эксплойт на базе ASUS’овского драйвера ASMMAP. Он продемонстрировал использование интерфейсов этого драйвера для мэппинга любого диапазона адресов физической памяти к своему виртуальному адресному пространству и дампа этого блока памяти в файл. Соответственно, можно получить доступ не только к данным любого процесса, но и к внутренним структурам ОС. Несколько дней назад эту концепцию развили ещё дальше, показав использование того же самого подхода уже для поиска блоков EPROCESS в физической памяти и подмены токена своего процесса токеном любого привилегированного процесса. Уже на базе других драйверов со сходным функционалом, NTIOLib и WinIO.
Алексей Николайчук a.k.a. Unwinder,

Но авторы эксплойта, похоже, не совсем осознают, какой ящик Пандоры они открыли, так как механизм мэппинга, который они посчитали простой дырой в данных драйверах, на самом деле является абсолютно стандартным механизмом для доступа к MMIO (memory mapped IO, режим доступа к портам какого либо устройства через адресное пространство физической памяти). Соответственно, такой интерфейс присутствует в драйверах десятков разновидностей ПО, работающих под Windows с железом напрямую. Не знаю в какую гигантскую дыру в безопасности в конечном итоге выльется демонстрация данного эксплойта и как с этим будут бороться, но как минимум свой драйвер RTCore от этого хотелось бы защитить уже сейчас. Поскольку интерфейсы мэппинга физической памяти предназначены для MMIO, то концепция защиты видится в ограничении возможности мэппинга неавторизированных адресов физической памяти, не принадлежащих никаким MMIO устройствам. Представляется это пока примерно следующим образом:
в интерфейсе для мэппинга теперь помимо желаемого диапазона адресов физической памяти также нужно будет передать и локацию владельца этого адресного пространства — валидного PCI-устройства (то есть номер PCI-шины, устройства и функции) и индекс BAR-регистра;
драйвер будет считывать из BAR-регистра данного устройства базовый адрес MMIO-апертуры, мэппинг будет возможен только если желаемый диапазон адресов для мэппинга лежит внутри апертуры этого устройства;
при мэппинге будут пропускаться без валидации некоторые фиксированные диапазоны физических адресов, не принадлежащие никаким PCI-устройствам (например, теневая копия VGA BIOS в диапазоне 0xC0000 — 0xDFFFF);
поскольку теоретически злоумышленник может попытаться временно перепрограммировать BAR какого-либо устройства для создания видимости принадлежности нужного адреса этому устройству, будут заблокированы для записи адреса BAR любого PCI-устройства в интерфейсах для доступа к конфигурационному пространству PCI;
поскольку доступ к конфигурационному пространству PCI особо умные товарищи могут попытаться обойти через прямой доступ к портам PCI-контроллера, интерфейс доступа к портам также будет блокировать попытки записи в порт данных PCI-контроллера, если в порту адреса контроллера выставлен адрес BAR-регистра любого устройства.»



Также смотрите: 





Похожие новости:
Добавить коментарий
Коментарии
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.