[Перевод] Подмена DLL (DLL hijacking)
Всем привет. Прямо сейчас в OTUS открыт набор на апрельский запуск обновленного курса «Реверс-инжиниринг». В преддверии старта курса мы традиционно подготовили перевод интересного материала.
В операционной системе Windows приложения и службы при запуске ищут DLL, необходимые для их правильного функционирования. Если эти DLL не найдены или их загрузка реализована небезопасным способом (DLL вызываются без использования полного пути), то можно повысить привилегии, заставив приложение загрузить и выполнить вредоносный DLL-файл.
Следует отметить, что когда приложению необходимо загрузить DLL, то ее поиск осуществляется в следующем порядке:
- Каталог, из которого загружается приложение
- C:\Windows\System32
- C:\Windows\System
- C:\Windows
- Текущий рабочий каталог
- Каталоги в пользовательской переменной окружения PATH
- Каталоги в системной переменной окружения PATH
Шаг 1 — Процессы с отсутствующими DLL
На первом этапе необходимо найти процессы, которые работают от SYSTEM и пытаются загрузить отсутствующие DLL. Это можно сделать с помощью Process Monitor от Sysinternals, применив фильтр, указанный ниже:
Фильтры Procmon для поиска процессов, загружающих отсутствующие DLL
Process Monitor определит отсутствующие DLL, которые приложение пытается загрузить, и покажет фактический путь, по которому осуществляется поиск этой DLL.
Процесс с отсутствующей DLL
В данном примере для процесса Bginfo.exe
отсутствует несколько DLL-файлов, которые могут быть использованы для повышения привилегий.
Шаг 2 — Разрешения на папки
Если программное обеспечение установлено в каталог C:\
вместо C:\Program Files
, то по умолчанию у аутентифицированных пользователей будет доступ на запись в этот каталог. Кроме того, такое программное обеспечение как Perl, Python, Ruby и т. п. обычно добавляется в переменную PATH. Это дает возможность повышения привилегий, так как пользователь может записать в данный каталог вредоносную DLL, которая будет загружена при следующем запуске процесса и получить права этого процесса.
Слабые разрешения на папку
Шаг 3 — Подмена DLL
С помощью Metasploit можно сгенерировать DLL с полезной нагрузкой в виде сеанса с привилегиями службы.
Генерация вредоносной DLL
Процесс Bginfo.exe
запущен под SYSTEM, поэтому после перезапуска у вредоносной DLL будут такие же привилегии, так как DLL загружается и выполняется этим процессом.
Процесс запущен под SYSTEM
Как было указано выше, процесс не может найти Riched32.dll
, поэтому pentestlab.dll
необходимо переименовать в Riched32.dll
. Это запутает приложение, и оно попытается загрузить DLL, поскольку думает, что это легитимная DLL. Вредоносную DLL необходимо поместить в одну из папок, в которых Windows ищет DLL-файлы.
Вредоносная DLL переименована и размещена
Как видно ниже, при перезапуске службы с помощью подмены DLL открывается сессия Meterpreter с привилегиями SYSTEM.
Metasploit — Эскалация привилегий через подмену DLL
PowerSploit
Процесс подмены DLL можно сделать через PowerSploit, в котором есть три модуля, которые помогут в поиске служб с отсутствующими DLL, в обнаружении папок с правами на модификацию и в генерации DLL.
Модуль Find-ProcessDLLHijack
найдет все процессы в системе, которые пытаются загрузить отсутствующие DLL.
PowerSploit — Обнаружение процессов с отсутствующими DLL
Следующим шагом будет определение папок, в которых пользователь может изменять содержимое. Будут найдены папки, в которые необходимо подбросить вредоносные DLL.
Обнаружение папок с правами на изменение
Последний шаг заключается в создании зловредной DLL в одной из папок с Modify (M) — разрешениями.
Создаем DLL в папке со слабыми разрешениями
Заключение
Для возможности повышения привилегий через подмену DLL должны быть выполнены следующие условия:
- Разрешения на запись в системную папку
- Установка программного обеспечения в каталог, отличающийся от каталога по умолчанию
- Служба, которая работает под SYSTEM и пытается загрузить отсутствующую DLL
- Перезапуск службы
В обнаружении приложений, которые не установлены в Program Files
, нет ничего сложного, поскольку, кроме приложений сторонних производителей, которые не устанавливаются принудительно по этому пути, существует различное заказное программное обеспечение, располагаемое вне этих защищенных папок. Кроме того, существует ряд служб Windows, таких как IKEEXT (IKE and AuthIP IPsec Keying Modules) с отсутствующими DLL (wlbsctrl.dll
), которые можно использовать как вручную, так и автоматически. Для IKEEXT существует специальный модуль Metasploit:
exploit/windows/local/ikeext_service
Записаться на бесплатный урок.