Кратко: LDAP (Lightweight Directory Access Protocol) — протокол доступа к каталогам, используемый для хранения и поиска информации о пользователях, компьютерах и других объектах в сети. В Active Directory (AD) это «язык», на котором приложения общаются с каталогом. Хакеры активно используют LDAP для разведки, а при уязвимостях — для LDAP-инъекций, кражи данных или обхода аутентификации.
▫️ Что такое LDAP LDAP — открытый протокол прикладного уровня, обеспечивающий доступ к распределённым каталогам через TCP/IP. Основная задача — хранить информацию и давать к ней быстрый доступ. Это как телефонная книга компании, но намного умнее: логины, пароли, права доступа, настройки приложений. Данные организованы в иерархическое дерево — DIT (Directory Information Tree). Каждый объект имеет уникальное имя — DN (Distinguished Name): cn=Иван Иванов, ou=Отдел продаж, dc=company, dc=com. LDAP используется во всех крупных системах: Active Directory (Microsoft), OpenLDAP, Oracle Internet Directory.
▫️ Как хакеры используют LDAP для разведки Получив доступ к LDAP-запросам (через уязвимость в веб-приложении), хакер может: · Вытащить всех пользователей и группы — список сотрудников, должности, email, телефоны. · Изучить структуру компании — отделы, филиалы, группы администраторов. · Найти привилегированные учётные записи — цели для Kerberoasting. · Собрать данные для социальной инженерии — фишинг, звонки от лица сотрудников. Инструменты: BloodHound, ldapsearch, PowerShell с модулями AD.
▫️ LDAP-инъекции: SQL-инъекция для каталога Если приложение подставляет пользовательский ввод в LDAP-запрос без фильтрации, злоумышленник может изменить этот запрос.
Пример из OWASP: Логин-форма строит фильтр: searchlogin = "(&(uid=" + user + ")(userPassword=" + password + "))" Хакер вводит в user: *)(uid=*))(|(uid=* , в password: password. Фильтр превращается в: (&(uid=*)(uid=*))(|(uid=*)(userPassword=password)) Этот запрос всегда истинен. Хакер зайдёт в систему без пароля. Основные операторы LDAP-инъекций: · & — логическое И · | — логическое ИЛИ · ! — логическое НЕ · = — равно · * — любой символ (wildcard) · () — группировка
▫️ Как защититься · Экранирование и валидация ввода — экранируйте спецсимволы: (, ), \, *, /, &, |, !, =, <, >, ;, ,, +, ", '. · Allowlist — если параметр может принимать только определённые значения, проверяйте это. · Параметризованные запросы — если LDAP-библиотека поддерживает, это надёжный способ. · Минимизируйте права — учётная запись приложения должна иметь только необходимый минимум прав.
Главный вывод: LDAP — фундамент, хранящий ключи от королевства Active Directory. Валидация ввода и строгие права доступа — не опция, а обязательное требование.