private-property-rightsstruktura AD to żywy organizm, który ewoluuje, ulegając ciągłym modyfikacją – nowi użytkownicy, wycofanie kont… ale również nowi administratorzy i delegacje do poszczególnych gałęzi etc. jak każde środowisko – i to ulega zaśmieceniu. jak każdy bałagan – może to stanowić osłabienie bezpieczeństwa, głównie z powodu jakiś zapomnianych uprawnień. ktoś-gdzieś-kiedyś nadał uprawnienia kontu serwisowemu lub grupie do modyfikacji obiektów, czas leci, a AD nie daje możliwości łatwej weryfikacji nadanych uprawnień. przy złożonej strukturze drzewa, często zostają dziury w postaci niekontrolowanego dostępu na podwyższonych przywilejach.

jak zatem to szybko odczytać? SOA#1 czyli – PowerShellem. podstawowy skrypt jest dość trywialny, ponieważ PS dysponuje możliwością łatwego odpytania się o jednostki organizacyjne oraz odczytanie uprawnień. co więcej – cały kod można uruchomić jako najzwyklejszy user [oczywiście w standardowej konfiguracji]. jedyne, co trzeba na stacji doinstalować to moduł ActiveDirectory [RSAT]. cały problem natomiast, sprowadza się do wyszukania uprawnień, które nie są dziedziczone tylko nadane niezależnie – bo na tym przecież polega delegacja:

$OUList=(Get-ADOrganizationalUnit -Filter *).distinguishedName

foreach( $ou in $OUList) {
    $NonInheritedACEs=(Get-Acl "ad:\$ou").Access| Where-Object {$_.inheritanceflags -eq 'none'}
    Write-Host $ou
    $NonInheritedACEs|group IdentityReference|%{[PSCustomObject]@{'count'=$_.count;'name'=$_.name;'group'=([string]$_.group.ActiveDirectoryRights -join ';')}}
}

to oczywiście zarys, skrypt napisany 'na kolanie’. diabeł leży w szczegółach, więc aby przygotować całe narzędzie trochę walki będzie. a ten diabeł to głównie filtrowanie wyników:

  • w AD jest spora grupa uprawnień niedziedziczonych, nadawanych podczas promocji DC – nazwijmy je 'standardowymi’. mamy więc dwa wyjścia – albo sobie obrobić plik po wypluciu, albo napisać kawałek kodu, który te uprawnienia przefiltruje. może nie jest to super-trudne, ale przyjemne do napisania na pewno też nie jest.
  • z takich 'standardowych uprawnień’, po testach w kilq domenach zauważyłem, że powtarzają się:
1 NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS    GenericRead
1 NT AUTHORITY\Authenticated Users              GenericRead
1 NT AUTHORITY\SYSTEM                           GenericAll
1 LOGICUNION\Domain Admins                      GenericAll
4 S-1-5-32-548                                  CreateChild, DeleteChild CreateChild, DeleteChild CreateChild, D...
1 S-1-5-32-550                                  CreateChild, DeleteChild
  • grupy, których SIDy się tutaj nie rozwiązują to Account Operators i Print Operators. warto zwrócić, że to SIDy lokalne a nie domenowe.
  • w niektórych domenach, potrafił te SIDy rozwiązać O_o
  • output powinien być w postaci ładnego obiektu, żeby wyexportować do CSV do dalszej prezentacji i obróbki.
  • get-acl nie ma opcji NIE-rozwiązywania SIDów na nazwy więc trzeba je z powrotem sprawdzać przy porównaniach /:

eN.

 

 

 

-o((:: sprEad the l0ve ::))o-

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.