[Перевод] Подмена 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, применив фильтр, указанный ниже:

8c2li-1qfj3csw3bfytkej1bzri.png
Фильтры Procmon для поиска процессов, загружающих отсутствующие DLL

Process Monitor определит отсутствующие DLL, которые приложение пытается загрузить, и покажет фактический путь, по которому осуществляется поиск этой DLL.

bkgl0_q1eomsgzemfqprbkcfqfg.png
Процесс с отсутствующей DLL

В данном примере для процесса Bginfo.exe отсутствует несколько DLL-файлов, которые могут быть использованы для повышения привилегий.

Шаг 2 — Разрешения на папки


Если программное обеспечение установлено в каталог C:\ вместо C:\Program Files, то по умолчанию у аутентифицированных пользователей будет доступ на запись в этот каталог. Кроме того, такое программное обеспечение как Perl, Python, Ruby и т. п. обычно добавляется в переменную PATH. Это дает возможность повышения привилегий, так как пользователь может записать в данный каталог вредоносную DLL, которая будет загружена при следующем запуске процесса и получить права этого процесса.

8xam4k5sv5rcxouitfhoerzqjni.png
Слабые разрешения на папку

Шаг 3 — Подмена DLL


С помощью Metasploit можно сгенерировать DLL с полезной нагрузкой в виде сеанса с привилегиями службы.

s3kkapxllhprqdd9mk8fveeywgi.png
Генерация вредоносной DLL

Процесс Bginfo.exe запущен под SYSTEM, поэтому после перезапуска у вредоносной DLL будут такие же привилегии, так как DLL загружается и выполняется этим процессом.

wqw7xz-pd3l_8r8axlnbt_yitss.png
Процесс запущен под SYSTEM

Как было указано выше, процесс не может найти Riched32.dll, поэтому pentestlab.dll необходимо переименовать в Riched32.dll. Это запутает приложение, и оно попытается загрузить DLL, поскольку думает, что это легитимная DLL. Вредоносную DLL необходимо поместить в одну из папок, в которых Windows ищет DLL-файлы.

snlamsjl0ixkfbzvibb8i3tpcsy.png
Вредоносная DLL переименована и размещена

Как видно ниже, при перезапуске службы с помощью подмены DLL открывается сессия Meterpreter с привилегиями SYSTEM.

baj_r9sstyxrajtkimosaxgvwgo.png
Metasploit — Эскалация привилегий через подмену DLL

PowerSploit


Процесс подмены DLL можно сделать через PowerSploit, в котором есть три модуля, которые помогут в поиске служб с отсутствующими DLL, в обнаружении папок с правами на модификацию и в генерации DLL.

Модуль Find-ProcessDLLHijack найдет все процессы в системе, которые пытаются загрузить отсутствующие DLL.

gyhgdveyv97iumk-g5h7jgif6w8.png
PowerSploit — Обнаружение процессов с отсутствующими DLL

Следующим шагом будет определение папок, в которых пользователь может изменять содержимое. Будут найдены папки, в которые необходимо подбросить вредоносные DLL.

j7ui3hwcu2v-syisqovozbz9z4g.png
Обнаружение папок с правами на изменение

Последний шаг заключается в создании зловредной DLL в одной из папок с Modify (M) — разрешениями.

1ails9hsqecemlskuuuefzov8ak.png
Создаем DLL в папке со слабыми разрешениями

Заключение


Для возможности повышения привилегий через подмену DLL должны быть выполнены следующие условия:

  • Разрешения на запись в системную папку
  • Установка программного обеспечения в каталог, отличающийся от каталога по умолчанию
  • Служба, которая работает под SYSTEM и пытается загрузить отсутствующую DLL
  • Перезапуск службы


В обнаружении приложений, которые не установлены в Program Files, нет ничего сложного, поскольку, кроме приложений сторонних производителей, которые не устанавливаются принудительно по этому пути, существует различное заказное программное обеспечение, располагаемое вне этих защищенных папок. Кроме того, существует ряд служб Windows, таких как IKEEXT (IKE and AuthIP IPsec Keying Modules) с отсутствующими DLL (wlbsctrl.dll), которые можно использовать как вручную, так и автоматически. Для IKEEXT существует специальный модуль Metasploit:

exploit/windows/local/ikeext_service



Записаться на бесплатный урок.

© Habrahabr.ru