Простого VBScript может быть достаточно, чтобы позволить пользователям получить административные привилегии и полностью обойти UAC в Windows 10. Из нового отчета британского исследователя безопасности PwC Wietze Beukema мы узнаем, что почти 300 исполняемых файлов Windows 10 уязвимы для кражи DLL. «Оказывается, почти 300 исполняемых файлов в вашей папке System32 уязвимы для перехвата DLL относительного пути. Знаете ли вы, что с помощью простого VBScript некоторые из этих EXE-файлов можно использовать для повышения эффективности таких исполнений, полностью минуя UAC», объяснил Бьюкем. Уязвимость, о которой здесь говорится, является перехватом DLL относительного пути, когда злоумышленник может заставить законный исполняемый файл Windows загрузить произвольную DLL по выбору злоумышленника, скорее всего, со злым умыслом. Атаки DLL-атак могут оказаться полезными для опытного злоумышленника, поскольку они предоставляют такие возможности, как выполнение произвольного кода, повышение привилегий и сохранение в целевой системе. Различные методы перехвата DLL, описанные в блоге Beukema's, включают в себя замену DLL, подмену DLL, перехват порядка поиска DLL, перехват Phantom DLL, перенаправление DLL, замена DLL WinSxS и перехват относительного пути к DLL. Как это работает Чтобы продемонстрировать перехват относительного пути к DLL на примере, Бьюкема сосредоточился на библиотеках, находящихся в папке «C: \ Windows \ System32» на компьютере с Windows 10 (v1909). Он скопировал легальный winstat.exe в папку загрузок в своей системе. Затем он запустил инструмент мониторинга процессов procmon, чтобы лучше понять, какие библиотеки ищет EXE во время выполнения. Монитор процесса, показывающий доступ к DLL Источник: wietzebeukema.nl «Это позволяет нам идентифицировать все библиотеки DLL, запрашиваемые каждым приложением, которые будут потенциальными кандидатами на перехват. Но из этого автоматически не следует, что все они также загружены (и, следовательно, выполнены) », - пояснил исследователь. «Самый надежный способ узнать, какие DLL правильно загружены, - это скомпилировать нашу собственную версию DLL и заставить ее записать в уникальный файл после успешной загрузки. Если мы затем повторим описанный выше подход для всех целевых исполняемых файлов и библиотек DLL, это приведет к набору файлов, которые сообщат нам, какие библиотеки DLL оказались уязвимыми для кражи DLL ». Тем не менее, для злоумышленника возникает проблема с компиляцией пользовательской версии DLL, которая может быть запущена исполняемым файлом без каких-либо проблем. Чтобы получить достоверное представление о законной структуре DLL, Beukema рекомендует использовать для анализа такие инструменты, как DLL Export Viewer. Этот инструмент дает представление о структуре DLL, которую мы пытаемся перекомпилировать, перечисляя все имена внешних функций, которые затем дублируются в эксплойте, подменяющем DLL. Схема поиска уязвимых исполняемых файлов Источник: wietzebeukema.nl Исследователь предоставил полный список библиотек, которые являются потенциальными кандидатами для атак. Он добавил: «Это не просто теоретические цели, они проверены и подтверждены для работы. Список состоит из 287 исполняемых файлов и 263 уникальных DLL». CSV с полным списком этих библиотек был предоставлен на GitHub. Замеченные ограничения на атаку Описываемая атака имеет некоторые особенности, например, при экплуатации уязвимости: Используются только запущенные исполняемые файлы, которые не требуют никаких аргументов Избегайте приложений с расширенным графическим интерфейсом и возможностями отчетов об ошибках Избегайте библиотек DLL, написанных на C ++ Атака может работать не со всеми сборками Windows, как это было отмечено в Twitter thread. Исследователь проверил это на 64-битной Windows 10 (сборка ОС 18362.476), но сказал: «Некоторые [библиотеки DLL] не будут работать [на 32-битной Windows.] Вы можете скомпилировать C-файл с 32-битной GCC, тогда будет работать хорошо». В обход UAC Контроль учетных записей Windows (UAC) - это функция безопасности, добавленная в Windows Vista и более поздних версиях, которая спрашивает пользователя, намеревались ли они запустить приложение с высокой степенью риска перед его выполнением. Поскольку пользователей неоднократно просят авторизовать легитимные процессы, которые могут быстро раздражать (многие UAC вообще отключают, чтобы избавиться от всплывающих окон), начиная с Windows 7, Microsoft ввела встроенные «исключения» в рамках UAC. По сути, это позволяет доверенным системным DLL-библиотекам автоматически повышать привилегии, не беспокоя пользователей о запросах UAC. «Имея это в виду, вы можете попробовать запустить произвольный код с повышенными привилегиями, используя исполняемый файл, помеченный для автоматического повышения, который также уязвим для перехвата DLL. Существует около 35 таких исполняемых файлов, как видно из предыдущего раздела», - пояснил Бьюкем. В случае успешного использования исполняемые вредоносные библиотеки DLL можно использовать для создания командных строк с повышенными правами, которые дают полный доступ к компьютеру с правами администратора. Однако здесь наступает первая проблема. Перед «автоматическим повышением» привилегий любой библиотеки DLL ОС ожидает, что эти библиотеки DLL будут находиться в доверенном каталоге, который недоступен для записи пользователем. «Проблема, которую необходимо решить, - это проблема доверенного каталога: и исполняемый файл с автоматическим подъемом, и настраиваемая DLL должны находиться в доверенном каталоге, но ни один из них не доступен для записи пользователем». Здесь пригодятся некоторые методы имитации, такие как создание фиктивного каталога «C:\windows \system32» (с завершающим пробелом сразу после windows). Эта папка с необычным именем может заставить исполняемый файл трактовать созданный злоумышленником каталог как «надежное расположение». Ведутся споры о том, следует ли рассматривать возможность создания таких каталогов как уязвимость системы безопасности, поскольку она предоставляет злоумышленнику возможность использовать уязвимости, связанные с захватом DLL. «Это спорно, является ли это собственно уязвимостью системы безопасности - Microsoft утверждают, что это не так, но это, по крайней мере большой недостаток, учитывая, что большинство (не корпоративных) компьютеров для Windows используют учетные записи администратора по умолчанию. В любом случае, это дает нам отличные средства, с помощью которых угон DLL может стать гораздо более обширным», - сказал исследователь. DLL Hijacking запускает командную строку с повышенными правами Источник: Wietze Beukema А при чем тут VBScript? Одна из причин, по которой автор предлагает использовать VBScript, заключается в том, что создание каталогов Windows, имена которых содержат завершающий пробел, не может быть достигнуто с помощью «традиционных средств». «Для этого вы можете скомпилировать несколько строк в C, как это сделал первоначальный исследователь, но оказывается, что VBScript действительно может сделать это и для нас. Следующее подтверждение концепции показывает, что с помощью всего лишь нескольких строк кода вы можете заставить это работать:» PoC, написанный на VBScript, который создает фиктивные «доверенные каталоги» Источник: Wietze Beukema Отвечая на вопрос пользователя, Бьюкема объяснил, почему он выбрал VBScript при использовании исполняемых файлов, уязвимых для перехвата DLL. «Я знаю ... это просто потому, что PowerShell не позволит вам сделать это, в то время как VBScript это сделает. А поскольку это VBScript, вам не нужно будет использовать свои собственные скомпилированные двоичные файлы, чтобы использовать этот трюк, а это означает, что помимо вашей пользовательской DLL вы можете делать все с помощью Living of the Land + скрипт» Методы обнаружения и профилактики атаки Beukema представляет несколько решений, которые можно использовать для предотвращения таких атак, например, поиск активности в папке mock windows \, если таковой имеется на вашем компьютере. Кроме того, настройка параметров UAC для «всегда уведомлять» может помочь предотвратить подобные атаки, если пользователь будет достаточно опытным, чтобы понять, что должно быть выполнено. Другой стратегией является мониторинг экземпляров создания и загрузки DLL из непредвиденных путей к файлам: «Вы могли бы охотиться за созданием или загрузкой любой из библиотек DLL, упомянутых ранее, по неожиданным путям, особенно во временных местоположениях, таких как %appdata%. В конце концов, имя (легального) приложения, загружающего библиотеки DLL, можно изменить, но имена файлов DLL всегда фиксированы». По словам Бьюкема, при создании приложений разработчикам следует применять абсолютные, а не относительные пути для загрузки DLL, среди нескольких других методов. Ни один из них не может быть достаточно надежным. Тем не менее, при правильном применении в сочетании предупредительные меры, подобные тем, которые были объяснены исследователем, могут сдерживать атаки с использованием DLL продолжительное время. Источник: https://www.bleepingcomputer.com/ne...s-10-executables-vulnerable-to-dll-hijacking/