Существует место для ввода кода между приложением и его внешними библиотеками. Это не плохо по своей сути, но это отличный способ причинить вред.
Когда разработчикам необходимо расширить функциональность программы, для которой у них нет исходного кода, они часто обращаются к перехвату DLL. Это неортодоксальный способ заставить программу делать то, для чего она не предназначена.
Дело в том, что хакеры также используют эту технику по совершенно неправильным причинам, например, превращая в оружие безобидные приложения или взламывая программное обеспечение. Так что же такое перехват DLL и как он на самом деле работает?
Что такое DLL?
Каждое приложение зависит от некоторых файлов за пределами его базового кода для запуска. Эти внешние файлы содержат код и данные, необходимые программе для правильной работы. Когда какой-либо из этих внешних файлов пропадает, у программы могут возникнуть проблемы со стабильностью или полный отказ от запуска.
В операционной системе Windows эти внешние файлы называются DLL или библиотеками динамической компоновки. Библиотеки динамической компоновки являются важными компонентами операционной системы Windows, предоставляя повторно используемый код и ресурсы, которые можно использовать в нескольких приложениях.
Внешние файлы в Windows называются библиотеками. Есть два типа библиотек: динамические и статические. Динамические библиотеки загружаются во время выполнения, а статические библиотеки загружаются во время компиляции. DLL - это динамическая библиотека.
Что такое перехват DLL?
Перехват DLL — это метод, который включает в себя перехват и изменение вызовов функций, которые программы или процессы направляют в DLL. По сути установка «Человек посередине» устанавливается там, где хук находится между программой и вызываемыми ею библиотеками DLL. Затем все или целевые вызовы функций отслеживаются и изменяются.
Вот пример рабочего процесса атаки с перехватом DLL:
- Злоумышленник анализирует вызовы функций, сделанные программой, и DLL-файлы, от которых она зависит.
- Злоумышленник создает ловушку, используя один из многих методов реализации, таких как перехват IAT, встроенный перехват, перехват COM и т. д.
- Происходит выполнение произвольного кода.
- Исходное выполнение вызова функции может произойти, а может и не произойти.
- Злоумышленник заметает следы, удаляя крючок и отменяя все сделанные изменения.
Перехват DLL — это сложный метод, который можно использовать как во благо (например, для расширения функциональности программы, отладки и ведение журнала) или плохие (такие как обход мер безопасности, кража конфиденциальных данных, выполнение произвольного кода и написание видеоигр). взломы).
Как работает перехват DLL?
Прежде чем углубиться в реализацию перехвата DLL, важно прояснить основы. Давайте сделаем шаг назад и поймем, что происходит, когда программа вызывает функцию из DLL.
Когда программа вызывает функцию в DLL, операционная система сначала ищет имя функции в таблицы адресов импорта программы и получает адрес функции из адреса экспорта DLL Стол.
Как только адрес функции разрешен, программа может перейти к адресу функции, чтобы получить к ней доступ и выполнить ее. Перехват DLL вращается вокруг перехвата этого процесса и перенаправления вызова функции на другую функцию. Существует несколько способов реализации перехвата DLL. Рассмотрим наиболее часто используемые приемы его реализации.
Это может быть довольно техническим, так что это может помочь, если вы являетесь опытным пользователем Windows или иным образом иметь четкое представление о внутреннем устройстве Windows.
IAT перехват
Перехват IAT — это эффективная техника, широко используемая авторами вредоносных программ для обхода мер безопасности и уклонения от обнаружения. Таблица адресов импорта (IAT) — это структура данных, которая загружается в память всякий раз, когда создается новый процесс. IAT содержит имена всех импортированных вызовов функций и их адреса памяти.
Когда программа вызывает функцию в DLL, имя функции сначала ищется в IAT, и если адрес памяти указанной функции не найден в IAT, тогда он устанавливается из адреса экспорта DLL Стол.
Это структура данных, в которой все функции, экспортируемые DLL, сопоставляются с их адресами в памяти. При перехвате IAT злоумышленник может изменить IAT процесса и заменить законные сопоставления функций. с вредоносными, тем самым нарушая намеченную операцию и заставляя программу выполняться произвольно код.
Вот как выглядит общий поток атак при перехвате IAT:
- Программа делает вызов функции.
- Адрес функции находится в IAT.
- Так как IAT был зацеплен; адрес функции был изменен, и загружена область памяти вредоносной функции.
- Программа переходит к местоположению вредоносной функции, и выполняется произвольный код.
- Наконец, выполняется исходный вызов функции.
Встроенный хук
Встроенная перехватка — это метод перехвата DLL, который включает в себя изменение исходного кода целевой функции, чтобы направить ее выполнение на специальную функцию. Встроенная перехватка, в отличие от перехвата IAT, напрямую изменяет код целевой функции, предоставляя злоумышленнику более точный контроль над тем, как ведет себя целевая функция.
На приведенной выше диаграмме обратите внимание на то, как законная функция была изменена, чтобы указать на вредоносную функцию. Как только все инструкции вредоносной функции выполнены, выполняется инструкция перехода, чтобы вернуться к легитимной функции для завершения ее выполнения.
Злоумышленники используют встроенные перехватчики для внесения долговременных изменений в программу, таких как изменение параметров или возвращаемого значения функции.
Обходные пути Майкрософт
Microsoft Research разработала собственный пакет перехвата DLL, Detours. Это позволяет программистам отслеживать и изменять вызовы функций, сделанные программой. Обходы можно использовать для различных задач, включая, помимо прочего, инструментирование, тестирование и исправление ошибок.
Злоумышленники используют Detours для выполнения атак с внедрением DLL и перехватом, а разработчики часто используют его для расширения функциональности своих приложений. Вы можете узнать больше о пакете Detours на странице официальный репозиторий GitHub.
Теперь вы знаете, как работает перехват DLL
Перехват DLL — это сложный метод, который при правильном использовании может расширить возможности вашего приложения или помочь вам отлаживать и оптимизировать программное обеспечение. К сожалению, ловушки чаще используются как состязательная техника, а не как развивающая. Поэтому важно, чтобы вы применяли и придерживались передовых методов обеспечения безопасности, гарантирующих безопасность ваших приложений и отсутствие таких атак, как перехваты и инъекции.