Niektóre interfejsy API systemu Windows zwracają token podstawowy, a niektóre zwracają token personifikacji. Niektóre interfejsy API wymagają tokena podstawowego, a inne wymagają tokena personifikacji.Jaka jest różnica między tokenem podstawowym a tokenem podszywania się?
Na przykład LogonUser
zwykle zwraca podstawowy znak, z wyjątkiem przypadku korzystania LOGON32_LOGON_NETWORK
jako typ logowania (dwLogonType
):
W większości przypadków zwracane Uchwyt jest podstawowym tokenu, którego można użyć w wywołań funkcja CreateProcessAsUser. Jeśli jednak podasz flagę LOGON32_LOGON_NETWORK, LogonUser zwróci token personifikacji, którego nie możesz użyć w CreateProcessAsUser, chyba że wywołasz DuplicateTokenEx w celu przekonwertowania go na token podstawowy.
SetThreadToken
wymaga tokenu personifikacji while ImpersonateLoggedOnUser
które wydaje się zrobić całkiem dużo samo trwa jedn.
CreateProcessAsUser
i CreateProcessWithTokenW
oba wymagają podstawowej żeton i oba pamiętać podstawowym żeton można nabyć z tokenem personifikacji wywołując DuplicateTokenEx
, ale czego typy tokenów oznaczać?
Słowniczek mówi co następuje:
tokenu dostępu zawiera informacje o zabezpieczeniach dla sesji logowania. System tworzy token dostępu, gdy użytkownik loguje się, a każdy proces wykonywany w imieniu użytkownika ma kopię tokena. Token identyfikuje użytkownika, grupy użytkowników i uprawnienia użytkownika. System wykorzystuje token do kontrolowania dostępu do zabezpieczanych obiektów i kontrolowania zdolności użytkownika do wykonywania różnych operacji związanych z systemem na komputerze lokalnym. Istnieją dwa rodzaje tokenu dostępu, podstawowe i podszywanie się.
tokenu dostępu, które są zwykle tworzone wyłącznie przez jądro systemu Windows. Może być przypisany do procesu reprezentującego domyślne informacje bezpieczeństwa dla tego procesu.
tokenu dostępu, który został stworzony w celu przechwytywania informacji o zabezpieczeniach procesu klienta, co pozwala serwerowi „podszywać” procesu klienta w operacjach zabezpieczeń.
Ale to nie jest całkiem przydatne. Wygląda na to, że ktoś chciał użyć słów big boya, takich jak "jądro", ale służy to tylko do zadawania więcej pytań, na przykład, co jeszcze (oprócz przypisania do procesu) może być użyty token podstawowy i kto oprócz jądra może utworzyć dostęp tokeny?
(Czy mają na myśli sens Microsoftu, w którym jądro jest tylko częścią tego, co działa w trybie jądra, jest też Executive itd. Czy to znaczy, że kod trybu użytkownika może również tworzyć tokeny? Bez względu na to, nawet jeśli kod trybu użytkownika może tworzyć tokeny, będzie musiał to zrobić poprzez wywołanie systemowe, tak jak w każdym obiekcie Object Manager, tak więc token będzie faktycznie tworzony w trybie jądra.)
W każdym razie to nie robi t odpowiedź na podstawowe pytanie: Jaka jest różnica między typami żetonów?Nie jakie mogą być używane dla lub jak są one tworzone zwykle.
Możesz również tworzyć tokeny z trybu użytkownika z udokumentowanymi funkcjami CreateToken i CreateTokenEx, ale potrzebujesz dużej ilości infrastruktury, aby to zrobić, ponieważ te funkcje mogą być wywoływane tylko z SSP/AP ("dostawca/autoryzacja bezpieczeństwa" pakiet"). –
Dobra uwaga. Zauważ, że nie tylko wymagają one implementacji całego interfejsu SSP/AP (funkcje "SpLsaModeInitialize" powinny powrócić w tabeli funkcji itp.), W przeciwieństwie do "zwykłych" SSP, SSP/AP działają jako część LSASS, więc działa pod kontem 'NT AUTHORITY \ SYSTEM' i ma w dalszym ciągu' SeCreateTokenPrivilege', 'SeTcbPrivilege' itd. Tak więc pod względem bezpieczeństwa mają te same wymagania (możesz nawet powiedzieć, że "ZwCreateToken" jest mniej wymagający), chociaż masz rację, zauważając, że są one udokumentowane, co jest plusem. – conio
Co stanie się z wątkiem po usunięciu żetonów podszywania się? – Dolev