Внут­ри Windows кро­ется огромное количес­тво инте­рес­ных и неоче­вид­ных воз­можнос­тей. В этой статье я покажу, как зас­тавить опе­раци­онку заг­рузить нашу биб­лиоте­ку в любой про­цесс!

Од­на из самых популяр­ных атак, нап­равлен­ных на повыше­ние при­виле­гий, — это DLL Hijacking. Что­бы ее про­вес­ти, ата­кующий помеща­ет свою вре­донос­ную биб­лиоте­ку на пути поис­ка легитим­ной DLL. Это при­водит к тому, что целевое при­ложе­ние под­гру­жает сто­рон­нюю либу и выпол­няет вре­донос­ный код.

На пер­вый взгляд такая ата­ка кажет­ся очень прос­той. Я бы даже ска­зал при­митив­ной. Тем не менее, сущес­тву­ет нес­коль­ко под­водных кам­ней, которые час­то упус­кают из вида ата­кующие.

Во‑пер­вых, мно­гие забыва­ют сде­лать DLL Proxying до целевой биб­лиоте­ки, что при­водит к полом­ке все­го при­ложе­ния. Оно кра­шит­ся, так как пыта­ется выз­вать фун­кцию из биб­лиоте­ки, в которой нуж­ного кода нет.

Во‑вто­рых, иног­да вызов фун­кций вро­де LoadLibrary(), CreateProcess() и CreateThread() помеща­ют в фун­кцию DllMain(), что при­водит к дед­локу (Dead Lock) из‑за механиз­ма Loader Lock. Loader Lock выс­тупа­ет в качес­тве кри­тичес­кой сек­ции (при­митив син­хро­низа­ции потоков про­цес­са). Фак­тичес­ки выпол­нение потока прог­раммы бло­киру­ется до момен­та сня­тия Loader Lock.

www

Под­робнее о Loader Lock — в бло­ге Elliot on Security: Perfect DLL Hijacking, What is Loader Lock.

В‑треть­их, сущес­тву­ют некото­рые фак­торы, вли­яющие на порядок поис­ка DLL. Стан­дар­тные пути поис­ка изоб­ражены ниже.

Где Windows ищет DLL
Где Windows ищет DLL

Это так называ­емый SafeDllSearchOrder. Если он отклю­чен, то пос­ле Application Directory фун­кция LoadLibrary*() смот­рит Current Directory. Отклю­чить SafeDllSearchMode мож­но, выс­тавив в ноль зна­чение по это­му пути:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode

Еще один фак­тор, вли­яющий на поиск — это фун­кция LoadLibraryEx(), выз­ванная со зна­чени­ем LOAD_WITH_ALTERED_SEARCH_PATH. В таком слу­чае пер­вым делом DLL ищут­ся по пути, ука­зан­ному внут­ри этой фун­кции.

По­мимо про­чего сущес­тву­ют встро­енные механиз­мы Windows, которые поз­воля­ют внед­рить нашу биб­лиоте­ку в целевой про­цесс. В до­кумен­тации Microsoft есть упо­мина­ние некото­рых из них. Давай изу­чим их под­робнее.

 

DLL Redirection

 

Для обычных исполняемых файлов

DLL Redirection — спе­циаль­ный механизм, поз­воля­ющий прог­раммам исполь­зовать раз­ные вер­сии DLL для сво­их задач, при­чем не зат­рагивая обыч­ные сис­темные биб­лиоте­ки. Дей­ствие рас­простра­няет­ся толь­ко на фун­кции LoadLibrary*().

Фак­тичес­ки, незави­симо от того, ука­зан ли в ней пол­ный путь (C:\Windows\System32\dll.dll) или корот­кий (dll.dll), фун­кция про­верит, при­сутс­тву­ет ли в текущей дирек­тории (в которой находит­ся при­ложе­ние, которое выз­вало эту фун­кцию) файл с рас­ширени­ем .local. И если при­сутс­тву­ет, то фун­кция LoadLibrary*() в любом слу­чае заг­рузит в пер­вую оче­редь DLL из текущей дирек­тории при­ложе­ния.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии