Создание прокси-dll для проверок эксплуатации dll hijack
Когда я исследую безопасность ПО, то одним из пунктов проверки является работа с динамическими библиотеками. Атаки типа DLL hijack («подмена dll» или «перехват dll») встречаются очень редко. Скорее всего, это связано с тем, что и разработчики Windows добавляют механизмы безопасности для предотвращения атак, и разработчики софта аккуратнее относятся к безопасности. Но тем интереснее ситуации, когда целевое ПО уязвимо.
Если описать атаку коротко, то DLL hijack — это создание ситуации, в которой некоторый исполняемый файл пытается загрузить dll, но атакующий вмешивается в этот процесс, и вместо ожидаемой библиотеки происходит работа со специально подготовленной dll с полезной нагрузкой от атакующего. В результате код из dll будет исполнен с правами запускаемого приложения, поэтому в качестве цели обычно выбираются приложения с более высокими правами.
Чтобы загрузка библиотеки прошла корректно, необходимо выполнить ряд условий: битность исполняемого файла и библиотеки должна совпадать и, если библиотека загружается при старте приложения, то dll должна экспортировать все те функции, которые это приложение ожидает импортировать. Часто одного импорта мало — очень желательно, чтобы приложение продолжило свою работу после загрузки dll. Для этого необходимо, чтобы у подготовленной библиотеки функции работали так же, как и у оригинальной. Реализовать это проще всего, просто передавая вызовы функций из одной библиотеки в другую. Вот именно такие dll называют прокси-dll.
Под катом будет несколько вариантов создания таких библиотек — как в виде кода, так и утилитами.
Читать дальше →
Если описать атаку коротко, то DLL hijack — это создание ситуации, в которой некоторый исполняемый файл пытается загрузить dll, но атакующий вмешивается в этот процесс, и вместо ожидаемой библиотеки происходит работа со специально подготовленной dll с полезной нагрузкой от атакующего. В результате код из dll будет исполнен с правами запускаемого приложения, поэтому в качестве цели обычно выбираются приложения с более высокими правами.
Чтобы загрузка библиотеки прошла корректно, необходимо выполнить ряд условий: битность исполняемого файла и библиотеки должна совпадать и, если библиотека загружается при старте приложения, то dll должна экспортировать все те функции, которые это приложение ожидает импортировать. Часто одного импорта мало — очень желательно, чтобы приложение продолжило свою работу после загрузки dll. Для этого необходимо, чтобы у подготовленной библиотеки функции работали так же, как и у оригинальной. Реализовать это проще всего, просто передавая вызовы функций из одной библиотеки в другую. Вот именно такие dll называют прокси-dll.
Под катом будет несколько вариантов создания таких библиотек — как в виде кода, так и утилитами.
Читать дальше →
Источник: Хабрахабр
Похожие новости
- AlinaTen: DeepRoute.ai заявила о более чем 300 тысячах автомобилей с её системой автопилота
- AlinaTen: Суд в США отклонил обвинения Илона Маска в мошенничестве против OpenAI перед началом разбирательства
- О создании в России центральной базы данных идентификаторов пользовательского оборудования (оконечного оборудования)
- Почему у тиранозавра маленькие ручки?
- ONLYAPPS: Как самостоятельно сделать инфографику для маркетплейсов
- MarketingNews: Getblogger добавил возможность размещения рекламы в мессенджере «Макс»
- Блог ленивого инвестора: Итоги недели: рост на ожиданиях, падение на факте
- Это — все что вам надо знать о белых списках: ресерч, сканы, обход
- Краткая история биометрии: как ПЦР-метод изменил идентификацию по ДНК
- Права в Linux: chown/chmod, SELinux context, символьная/восьмеричная нотация, DAC/MAC/RBAC/ABAC