Категория > Новости > Поставщик небезопасности. Как Windows раскрывает пароль пользователя - «Новости»
Поставщик небезопасности. Как Windows раскрывает пароль пользователя - «Новости»17-03-2023, 20:35. Автор: Роза |
Privileger. SSP тоже не так прост, как кажется: мы рассмотрели его использование в клиент‑серверных процессах в прошлой статье. Он не только помогает разработчикам шифровать данные, обеспечивать целостность передаваемой информации, выстраивать контекст, но и может расширить стандартную аутентификацию. Правда, для этой цели будет использоваться не просто SSP, а SSP/AP, о котором мы поговорим позже. Компоненты безопасностиИх можно считать кирпичиками, из которых строится вся огромная система аутентификации в Windows. Отмечу, что теория из этой статьи будет распространяться и на последующий материал. Мы начнем с простейшего перехвата пароля, а затем будем понемногу усложнять себе задачу. Читайте также - Для того, чтобы поднять настроение и зарядиться положительной энергией на целый день рекомендуется смотреть красивые картинки, поделки и многое другое. Toilet Interior посмотреть. Security PackageSecurity Package (SP) — программная реализация некоего протокола безопасности. Security Package содержатся в SSP (и/или SSP/AP) в виде DLL-файлов. Например, Kerberos и NTLM находятся в SSP Работа SP SSP/AP (или же просто AP)AP — Authentication Package. Представляет собой библиотеку DLL, которая тоже содержит один или несколько SP. Главное отличие от стандартного SSP заключается в том, что SSP/AP может выступать в качестве пакета аутентификации (AP), то есть проверять подлинность введенных данных при входе пользователя в систему. Тем не менее SSP/AP выполняет и все функции стандартного SSP (выстраивать контекст, шифровать данные и прочие). Чтобы SSP/AP мог функционировать и в качестве пакета аутентификации, и в качестве обычного SSP для клиент‑серверных процессов, при запуске системы он загружается в пространство процесса Также, если требуется работать лишь с клиент‑серверными функциями конкретного SSP/AP, он без проблем может быть загружен в клиент‑серверное приложение. Например, методом динамического (функция SSP/AP в lsass.exe и клиентских процессах Security ProvidersSecurity Providers не стоит путать с Security Package. Они все‑таки различаются. Провайдеры безопасности реализованы в виде DLL и позволяют выполнить так называемую вторичную аутентификацию. То есть после того, как пользователь прошел аутентификацию на одной машине, он может пройти аутентификацию и на другой машине, например на сервере Linux. Таким образом, пользователь получает доступ к ресурсам UNIX-сервера с машины Windows без дополнительной аутентификации. Это называется Single Sign-On. Работа Security Providers Credential ProvidersПровайдеры учетных данных — COM-объекты, служащие для беспарольного доступа к системе. Реализованы тоже в виде динамических библиотек DLL. Например, для распознавания лица используется Также может использоваться сторонний поставщик учетных данных. Все доступные поставщики учетных данных перечислены здесь: Каждый ключ по этому пути реестра идентифицирует определенный класс поставщика безопасности по его Password FiltersС помощью Password Filters можно расширить стандартную парольную политику на конкретных хостах. Когда создается запрос на смену пароля, LSA вызывает все пакеты уведомлений, чтобы проверить, удовлетворяет ли новый пароль фильтрам, реализованным внутри пакета. Причем каждый пакет уведомлений вызывается дважды:
Password Filter можно считать частным случаем Notification Package. Notification Package в случае проверки пароля Как происходит вход пользователя в системуПеред тем как мы сможем перехватить пароль, следует разобраться с процессом входа пользователя в систему. В этой статье мы не будем вдаваться в подробности инициализации Winlogon, создания рабочих столов, GINA. Просто знай, что именно благодаря процессу
Эта функция ничего особенного не требует.
Возможно, у тебя сразу появилась коварная мысль: «А могу ли я сам генерировать токены?» Как бы да и как бы нет. Для успешного создания токена требуется привилегия Выполнение кода от лица группы И ставил SID = 0. Null sid
Процесс аутентификации Инициализация LSAИменно LSA играет ключевую роль в процессе аутентификации пользователя. Каким образом LSA будет инициализировать наши вредоносные SP, AP и NP? При запуске устройства LSA автоматически подгружает все зарегистрированные SP, реализованные в виде DLL, в свое адресное пространство. Все зарегистрированные DLL находятся по следующему пути: Ключ со всеми SP Если этот ключ пустой, то используется значение по умолчанию: Все эти DLL указываются без полного пути. Microsoft рекомендует помещать SP в папку SECPKG_FUNCTION_TABLE SecurityPackageFunctionTable[] = { { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, SpInitialize, SpShutDown, SpGetInfo, SpAcceptCredentials, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; NTSTATUS NTAPI SpLsaModeInitialize(ULONG LsaVersion, PULONG PackageVersion, PSECPKG_FUNCTION_TABLE * ppTables, PULONG pcTables) { *PackageVersion = SECPKG_INTERFACE_VERSION; *ppTables = SecurityPackageFunctionTable; *pcTables = 1; return 0; } Если Третьей вызывается NTSTATUS NTAPI SpGetInfo(PSecPkgInfoW PackageInfo) { PackageInfo->fCapabilities = SECPKG_FLAG_ACCEPT_WIN32_NAME | SECPKG_FLAG_CONNECTION | SECPKG_FLAG_LOGON; PackageInfo->Name = (SEC_WCHAR*)L"MishaSSP"; PackageInfo->Comment = (SEC_WCHAR*)L"SSP with a wide Russian soul"; PackageInfo->wRPCID = SECPKG_ID_NONE; PackageInfo->cbMaxToken = 0; PackageInfo->wVersion = 1337; return 0; } Далее LSA загружает все доступные пакеты аутентификации (AP). Их список извлекается из следующего ключа реестра: Ключ со всеми AP В каждом из них будет вызвана функция LSA_DISPATCH_TABLE DispatchTable; NTSTATUS LsaApInitializePackage(_In_ ULONG AuthenticationPackageId, _In_ PLSA_DISPATCH_TABLE LsaDispatchTable, _In_opt_ PLSA_STRINGDatabase, _In_opt_ PLSA_STRINGConfidentiality, _Out_ PLSA_STRING* AuthenticationPackageName) { // Сохраняем адреса функций DispatchTable.CreateLogonSession = LsaDispatchTable->CreateLogonSession; DispatchTable.DeleteLogonSession = LsaDispatchTable->DeleteLogonSession; DispatchTable.AddCredential = LsaDispatchTable->AddCredential; DispatchTable.GetCredentials = LsaDispatchTable->GetCredentials; DispatchTable.DeleteCredential = LsaDispatchTable->DeleteCredential; DispatchTable.AllocateLsaHeap = LsaDispatchTable->AllocateLsaHeap; DispatchTable.FreeLsaHeap = LsaDispatchTable->FreeLsaHeap; DispatchTable.AllocateClientBuffer = LsaDispatchTable->AllocateClientBuffer; DispatchTable.FreeClientBuffer = LsaDispatchTable->FreeClientBuffer; DispatchTable.CopyToClientBuffer = LsaDispatchTable->CopyToClientBuffer; DispatchTable.CopyFromClientBuffer = LsaDispatchTable->CopyFromClientBuffer; // Возвращаем имя нашего AP (*AuthenticationPackageName) = (LSA_STRING*)LsaDispatchTable->AllocateLsaHeap(sizeof(LSA_STRING)); if (NULL != (*AuthenticationPackageName)) { (*AuthenticationPackageName) = (LSA_STRING*) LsaDispatchTable->AllocateLsaHeap(sizeof(LSA_STRING)); (*AuthenticationPackageName)->Buffer = (char*) LsaDispatchTable->AllocateLsaHeap((ULONG)strlen ("myssp") + 1); if (NULL != (*AuthenticationPackageName)->Buffer) { (*AuthenticationPackageName)->Length = strlen("myssp"); (*AuthenticationPackageName)->MaximumLength = strlen("myssp") + 1; strcpy( (*AuthenticationPackageName)->Buffer, "myssp"); return 0x00000000L; // STATUS_SUCCESS } return 0xC0000002; // STATUS_NOT_IMPLEMENTED } } ЭксплуатацияПерейти обратно к новости |