Содержание статьи
NTLM-аутентификация
Предположим, пользователь хочет получить доступ к файловому ресурсу на другом компьютере или сервере. Аутентификация выполняется в четыре этапа:
- Пользователь отправляет серверу запрос с именем учетной записи.
- В ответ сервер отправляет ему случайное число, называемое challenge.
- Пользователь шифрует это число своим NT-хешем и отправляет обратно.
- Сервер извлекает из SAM (Security Account Manager — RPC-сервер Windows, оперирующий базой данных учетных записей) хеш пользователя и проделывает те же самые действия, что и пользователь, сравнивая полученные хеши. Если результаты совпали, то аутентификация считается успешной.
Локальная аутентификация NTLM
Рассмотрим локальную аутентификацию NTLM, которая начинается с аутентификации пользователя на самой машине.
Эта аутентификация выполняется следующим образом:
- Пользователь вводит свои учетные данные, логин и пароль, при входе на машину.
- Введенные данные передаются подсистеме локальной безопасности LSA, которая преобразует пароль в хеш.
- Далее LSA передает имя пользователя SAM, который извлекает хеш указанного пользователя.
- LSA сверяет хеши, и если они совпадают, то пользователь получает доступ к машине.
Далее срабатывает рассмотренный выше механизм, основанный на модели клиент — сервер.
Локальная аутентификация NTLM — это частный случай, она применяется, когда клиентская и серверная части работают на одной машине.
Клиент получает учетные данные вошедшего в систему пользователя и создает запрос, содержащий имя рабочей станции и домена клиента.
Сообщение типа 1. Клиент посылает это сообщение для начала соединения. Оно используется для согласования параметров аутентификации, как и раньше, но также содержит имя клиентской машины и ее домен. Сервер может проверить имя и домен клиента, и, если они совпадают с его собственными, начинается процесс локальной аутентификации.
Сообщение типа 2. Сервер создает контекст безопасности, вызывая функцию AcceptSecurityContext (
, и в этом сообщении отправляет клиенту его идентификатор. Затем клиент может использовать идентификатор контекста безопасности, чтобы связать себя с соединением.
Сообщение 3-го типа. Клиент получает токен и передает его в InitializeSecurityContext (
. Если InitializeSecurityContext (
возвращает SEC_E_OK
, то взаимная аутентификация завершена и можно начинать защищенный сеанс. Если же он возвращает код ошибки, то переговоры о взаимной аутентификации завершаются. В противном случае токен безопасности, возвращенный InitializeSecurityContext (
, отправляется клиенту и шаги 2 и 3 повторяются.
Как работает LocalPotato
LocalPotato использует недостаток в механизме локальной аутентификации NTLM. Эксплоит обманывает привилегированный процесс и заставляет аутентифицировать сеанс, запущенный хакером. В результате атакующий получает соединение, предоставляющее ему доступ к любым ресурсам с привилегиями обманутого процесса.
«Картошка» работает следующим образом:
- Хакер запускает привилегированный процесс для подключения к подконтрольному ему серверу. В принципе, это работает аналогично предыдущим Potato, когда непривилегированный пользователь заставлял ОС создавать соединения, использующие права SYSTEM.
- Сервер на машине создаст контекст безопасности А для привилегированного соединения, но не будет отправлять его сразу. Хакер запустит свой клиент, чтобы он одновременно с локальным инициировал соединение с сервером. Легитимный клиент отправляет сообщение, чтобы инициировать соединение, а сервер в ответ пошлет сообщение с идентификатором нового контекста безопасности Б.
- Злоумышленник также запускает свой сервер и меняет идентификаторы контекстов обоих соединений таким образом, чтобы привилегированный процесс получил контекст соединения с сервером злоумышленника, а не со своим собственным. В результате хакер сможет получить доступ к любому сетевому ресурсу с привилегиями SYSTEM.
StorSvc и DLL hijacking
До сих пор мы использовали LocalPotato для записи любых файлов на целевую машину. Чтобы получить привилегированную оболочку, нам нужно выяснить, как использовать произвольную запись для выполнения команды.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»