W dzisiejszym artykule opiszemy i pokażemy praktyczne sposoby na znalezienie nazwy obiektu na podstawie jego identyfikatora SID (Security Identifier). Dowiesz się także, jak można sobie poradzić w sytuacji, kiedy na uprawnieniach do zasobu znajduje się nierozwiązany SID, obiekt został skasowany i chcesz się dowiedzieć do jakiego obiektu on wcześniej należał.
Często w środowiskach IT wśród osób zajmujących się bezpieczeństwem oraz administrujących systemami pojawia się potrzeba odnalezienia nazwy obiektu, dla którego posiadamy jedynie jego identyfikator SID (np. z logów z SIEM lub innego systemu). W szczególności w sytuacji, kiedy taki obiekt (np. użytkownik bądź grupa) posiadała wcześniej przypisane uprawnienia do zasobu na liście DACL lecz został skasowany w systemie lub w usłudze katalogowej Active Directory. Wówczas na zasobie widzimy jedynie numer (tzw. nieprzypisany SID), który mało jest nam w stanie powiedzieć. Jak go rozszyfrować i sprawdzić do jakiego obiektu należy? Dowiesz się z artykułu poniżej.
Czym jest SID?
Identyfikator SID (z ang. Security Identifier) unikalna reprezentacja obiektu (unikalny numer identyfikacyjny), którego komputer lub kontroler domeny AD używa do jednoznacznej identyfikacji obiektu (np. użytkownika). Zbudowany jest z ciągu znaków alfanumerycznych przypisanych do każdego użytkownika na komputerze z systemem Windows lub do każdego użytkownika, grupy i komputera w sieci kontrolowanej przez domenę Active Directory. Identyfikator ten pozwala na jednoznaczną identyfikację obiektu w systemie.
System Windows, na podstawowym poziomie, używa identyfikatorów SID zamiast nazw użytkowników. Za każdym razem, gdy wprowadzamy nazwę użytkownika i hasło, system najpierw sprawdza, czy wprowadzone dla nazwy użytkownika hasło jest zgodne z tym, co zostało zapisane w Active Directory lub w lokalnej bazie SAM na komputerze. Następnie sprawdza w rejestrze systemu Windows, jaki identyfikator SID jest powiązany z tą nazwą użytkownika. Od tego momentu dla każdej akcji użytkownika wymagającej sprawdzenia uprawnień system Windows używa identyfikatora SID zamiast nazwy użytkownika, aby sprawdzić, czy jest to dozwolone (czy mamy odpowiednie uprawnienia). Na przykład, jeśli klikniemy dwukrotnie na folder, system Windows sprawdzi identyfikator SID naszego użytkownika, czy ten ma dostęp do klikanego folderu.
Identyfikatory SID są kluczowe, ponieważ identyfikują jednoznacznie konta na poziomie systemu operacyjnego. Na przykład po usunięciu konta w systemie Windows lub Active Directory, w celu uzyskania dostępu do tych samych zasobów sieciowych co na starym koncie, nie pomoże utworzenie przez administratora nowego konta ze starą nazwą użytkownika. Będzie on miał różny SID. Jedynym pomocnym rozwiązaniem jest w tym przypadku odtworzenia go z kosza w AD (Recycled Bin) lub backup’u.
Jakie informacje możemy odczytać z identyfikatora SID?
System Windows zezwala lub zabrania na dostęp do zasobów na podstawie listy ACL, która używa SID’a do identyfikowania użytkowników i ich przynależności do grup.
Na przykład chcąc sprawdzić jaki SID posiada nasze konto użytkownika wpisujemy w wierszu linii poleceń komendę:
„whoami / user”
Tak więc numerem SID naszego konta o nazwie „KapitanHack.pl” jest
„S-1-5-21-3497261938-2581715043-3983387359-1103”
Poniżej wyjaśniamy jego budowę.
Znane SID’y
Istnieje lista znanych SIDów po to, aby pewne konta systemowe mogły być zawsze znalezione. Microsoft opisuję pełną listę SIDów w tym artykule. Poniżej w tabeli zamieściliśmy wybrane:
Jak znaleźć nazwę obiektu posiadając jedynie jego SID?
Jeśli aktywowałeś Kosz (Recycled Bin) w Active Directory przed usunięciem, nadal możesz znaleźć pasujące konto, dopóki obiekt nie zostanie całkowicie usunięty z Active Directory. Przy czym należy pamiętać, że domyślnie okres istnienia „reliktu” (obiektu z podstawowymi atrybutami) w koszu Active Directory wynosi 180 dni
Zwykle, aby przetłumaczyć identyfikator SID na nazwę użytkownika, wystarczy użyć polecenia cmdlet w PowerShell „Get-ADUser” (jeśli szukamy nazwy użytkownika), bądź „Get-ADGroup” (jeśli szukamy nazwy grupy)
– Get-ADUser —Identity „S-1-5-21-3497261938-2581715043-3983387359-1103”
Po parametrze “Identity” podajemy SID, dla którego chcemy rozwiązać nazwę użytkownika.
Inne narzędzia do szukania obiektów po SID
WMIC.EXE
Ewentualnie do wyszukania użytkownika możemy posłużyć się komendą „wmic”:
– wmic useraccount where sid=”S-1-5-21-3497261938-2581715043-3983387359-1103″ get name
DSQUERY.EXE
Komenda dsquery: – dsquery user “dc=kapitan,dc=hack” |dsget user -samid -sid |find ” S-1-5-21-3497261938-2581715043-3983387359-1103″
PsGetSID
Ciekawym narzędziem z zestawu Sysinternals pozwalającym na odszukanie obiektu (jeśli nie wiemy czy jest to użytkownik, grupa czy komputer) po SID jest PsGetSid.
– PsGetsid.exe S-1-5-21-3497261938-2581715043-3983387359-500
Co zrobić, jeśli obiekt został skasowany i posiadamy jego SID?
Wszystko pięknie, lecz problem może się pojawić w sytuacji, gdy konto zostało już usunięte. Wówczas powyższe polecenia cmdlet oraz narzędzia nam nie pomogą. Skasowanie obiektu w AD lub lokalnie na komputerze skutkuje tym, że na zasobach lokalnych (np. uprawnienia na folderze) pozostają nierozwiązane wpisy (tzw. śmieci). Są to nierozwiązane identyfikatory SID obiektów, które wcześniej miały przypisane uprawnienia.
W takiej sytuacji, jeśli obiekt (użytkownik, komputer, grupa itp.) został skasowany z Active Directory w celu odszukania jego nazwy mamy do dyspozycji 3 możliwości:
1. Przeszukanie kosza (skasowanych obiektów)
W tym celu możemy użyć polecenia cmdlet: Get-ADObject. Są jednak tutaj dwie trudności:
- W przeciwieństwie do polecenia cmdlet Get-ADUser, cmdlet Get-ADObject nie ma właściwości SID i zamiast tego należy użyć właściwości objectSID
- Dodatkowo należy określić parametr IncludeDeletedObjects (szukanie w koszu)
Polecenie w PowerShell wygląda następująco:
– get-adobject -Filter ‘isdeleted -eq $true -and name -ne “Deleted Objects” -and objectSID -like “S-1-5-21-3497261938-2581715043-3983387359-1103″‘ –
IncludeDeletedObjects -Properties samaccountname,displayname,objectsid
Zaś jego wynik wykonania wygląda prezentuje poniższy zrzut ekranu:
2. Przeszukanie logów Security po identyfikatorze SID
Może się zdarzyć sytuacja, że nasz kosz nie zawiera już skasowanego obiektu, który chcemy odszukać po SID. Pomocna w celu odnalezienie użytkownika/grupy/komputera z pewnością jest inspekcja zdarzeń (audyt Microsoft), a konkretniej log Security. Jeśli oczywiście przechowujemy odpowiednio długą historię logów, wówczas możemy spróbować przeszukać je po określonym atrybucie SID i spróbować znaleźć odpowiednik nazwy użytkownika, która zwykle towarzyszy informacji o SID w tych logach. Mamy tutaj dostępne przeróżne zdarzenia w logach zawierające powyższe informacje. Te które zawsze powinny na pewno zawierać SID oraz nazwę konta (Account Name) to logi o identyfikatorach 4624 – udane logowanie oraz 4726 – skasowanie konta użytkownika,
– Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4726} | Select-Object -Property * | findstr “S-1-5-21-3497261938-2581715043-3983387359-1103”
Lub
– Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4624} | Select-Object -Property * | findstr “S-1-5-21-3497261938-2581715043-3983387359-1103”
3. Przeszukanie profili na komputerach
Ten przypadek należy do najtrudniejszych do wykonania, ponieważ w celu odnalezienia nazwy użytkownika musimy przeskanować lokalnie rejestr systemowy na każdym z komputerów w infrastrukturze, do których mógł się zalogować użytkownik. Opisywana metoda pozwoli nam jedynie znaleźć nazwę użytkownika.
W celu odpytania rejestr o nazwę konta dla podanego identyfikatora SID musimy posłużyć się komendą:
– reg query “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3497261938-2581715043-3983387359-1103” /v ProfileImagePath
lub sprawdzić ręcznie za pomocą konsoli edytora rejestru – narzędzie regedit.exe
Podsumowanie
Dysponując numerem SID obiektu możemy się o nim bardzo dużo dowiedzieć. Przede wszystkim, w jakiej domenie AD został on utworzony, który w kolejności, czy należy on do wbudowanego (utworzonego przez system) obiektu Windows. Możemy także za jego pomocą odnaleźć nazwę obiektu, którego reprezentuje, a jeśli został skasowany możemy odszukać ją w obiektach w koszu lub logach Security, a nawet w rejestrze systemowym. Pamiętajmy, że SID użytkownika jest unikalnym identyfikatorem i jest wrażliwą informacją. Dla atakujących może być przydatny w procesie ataku np. wykorzystującego atrybut SID History, ale o tym napiszemy w przyszłości.