Sprawdź, czy dany użytkownik ma określone uprawnienia

16

Biorąc pod uwagę parę użytkowników i uprawnienia , muszę ustalić, czy użytkownik ma uprawnienia na serwerze. W mojej konfiguracji są spełnione następujące warunki:

  • Serwer jest częścią domeny, ale nie kontrolerem domeny
  • Istnieje kilka domen z relacjami zaufania w infrastrukturze
  • Czasami użytkownicy (lokalni, domena lub z innej domeny) mogą należeć do grupy lokalnej, ponieważ należą do innej grupy (domeny lub lokalnej), która należy do grupy lokalnej, w przeciwieństwie do przynależności do tej grupy.

Przykładowy scenariusz dla ostatniego punktu:

  • Użytkownik1 należy do grupy TeamA w domenieA
  • DomaimA \ TeamA jest członkiem DomainB \ SpecialAccess
  • Domena B \ SpecialAccess jest członkiem DomainB \ DomainAdmins
  • Wreszcie DomainB \ DomainAdmins należy do lokalnej grupy administratorów
  • Lokalna grupa administratorów ma przywilej SeRemoteInteractiveLogonRight

Teraz, jeśli mam na wejściu DomainA \ User1 i SeRemoteInteractiveLogonRight, muszę dotrzeć do odpowiedzi Tak lub Nie. Otwieram więc zasady lokalne na komputerze, zauważam, które grupy są wyświetlane wbrew prawu, jestem również zainteresowany, następnie udaj się do menedżerów serwerów i zobacz, co u członków grupy, a następnie muszę zobaczyć, którzy członkowie którejkolwiek grupy w tych grupach i tak dalej.

Mam przeczucie, że może być łatwiej. Byłem naprawdę podekscytowany, gdy znalazłem narzędzie AccessChk. Trwało to całe trzy minuty, zanim odkryłem, że zawiera on tylko bezpośrednie relacje, więc użytkownik w grupie nie zostanie wymieniony.

Teraz zgaduję, że możliwe byłoby połączenie wyników z AccessChk, aby móc sprawdzić, czy użytkownik należy do którejkolwiek z grup, które zwraca AccessChk, ale biorąc pod uwagę, że nie jest to jedna domena, ale kilka z nich nie jestem pewien, jak do tego podejść. Również dane wyjściowe AccessChk nie rozróżniają grupy od użytkownika.

EDYCJA : W duchu nie wpadania w pułapkę problemów XY, muszę naprawdę upewnić się, że na grupie serwerów żadne określone konta użytkowników używane jako tożsamości puli aplikacji IIS nie mają uprawnień SeInteractiveLogonRight lub SeRemoteInteractiveLogonRight. Nie mam problemu z częścią IIS, ale ostatnim krokiem do sprawdzenia konta pod kątem przywileju jest coś, o co staram się znaleźć prosty sposób na sprawdzenie. Chciałbym również zautomatyzować sprawdzanie, ponieważ należy to robić regularnie.

Andrew Savinykh
źródło
6
To brzmi jak zadanie dla ... Wynikowy zestaw zasad (RSoP)! technet.microsoft.com/en-us/library/cc758010%28v=WS.10%29.aspx
Davidw
1
@zespri - Moja odpowiedź była śmieciowa i usunąłem ją. Prawa użytkownika SeInteractiveLogonRight i SeRemoteInteractiveLogonRight są obsługiwane inaczej niż „normalne” uprawnienia i wygląda na to, że zgłaszanie ich będzie problematyczne. Jeśli wymyślę dla ciebie rozwiązanie, opublikuję inną odpowiedź, ale na razie nic nie mam.
Evan Anderson
1
@Davidw - RSoP jest problematyczny, ponieważ domyślne ustawienia Lokalnej Polityki Bezpieczeństwa nie zostaną odzwierciedlone w danych wyjściowych. W związku z tym wszelkie wpisy „Nieskonfigurowane” pojawią się jako „Nieskonfigurowane” i faktycznie nie zobaczysz, jakich zleceniodawców przyznaje prawo na podstawie lokalnych zasad bezpieczeństwa. Wreszcie, nawet jeśli dostaniesz listę podmiotów głównych z Zasad grupy, utkniesz w rozszerzaniu członkostwa w grupach (również potencjalnie między domenami) w celu replikacji funkcjonalności systemu operacyjnego. Okazało się, że jest to o wiele trudniejsze pytanie, niż się spodziewałem.
Evan Anderson
1
@EvanAnderson Dokładnie! Kiedy poproszono mnie o oszacowanie, jak długo to zajmie, wydawało się to prostym zadaniem. A po kilku dniach googlowania i próbowania różnych rzeczy ... nic. Obecnie moim planem jest pinvoke GetTokenInformation za pomocą klasy informacji o tokenie TokenPrivileges Oczywiście muszę najpierw dowiedzieć się, jak zdobyć sam token. Ta trasa wydaje się obecnie najbardziej obiecująca.
Andrew Savinykh
@zespri - NtOpenProcessToken () jest prawdopodobnie najlepszym sposobem na uzyskanie tokena. (Spójrz na leeholmes.com/blog/2006/07/21/... )
Evan Anderson

Odpowiedzi:

1

Tokeny dostępu nie mają informacji o prawach, tylko o uprawnieniach.

Co musisz zrobić, to:

  • Znajdź proces roboczy IIS, który odpowiada twojej puli aplikacji. Ponieważ znasz tożsamość puli aplikacji, powinno to być łatwe, wyliczając wszystkie procesy za pomocą nazwy procesu roboczego i filtrując ten, który ma tę tożsamość. Jeśli jest ich więcej, możesz użyć dowolnego.
  • Użyj GetTokenInformation z klasą informacji TokenGroup, a nie TokenPrivilege na tokenie procesu. Wynik da ci wszystkie grupy przechodnie, do których należy również tożsamość. Oznacza to nawet pośrednie.
  • Teraz możesz zapętlać te grupy i wywoływać LsaEnumerateAccountRights na każdej z nich i zestawiać informacje. To da ci to, czego chcesz.

Powyższe opiera się na istnieniu procesu (i tokena) odpowiadającego tożsamości konta. W twoim scenariuszu nie powinno to stanowić problemu. W scenariuszach, w których jest to problem, możesz spróbować wyszukać w usłudze Active Directory atrybut obliczony Token-Groups . W tym artykule wymieniono kilka podejść, jak to zrobić.

Andrew Savinykh
źródło