Содержание статьи
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 для записи любых файлов на целевую машину. Чтобы получить привилегированную оболочку, нам нужно выяснить, как использовать произвольную запись для выполнения команды.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее