Uzyskiwanie informacji o domenie za pomocą programu PowerShell

https://chacker.pl/

Musimy znać podstawy domeny. Część z nich poznaliśmy wcześniej w tym rozdziale, omawiając profilowanie użytkownika i komputera. Chociaż moduł ActiveDirectory PowerShell może być pomocny, często nie jest instalowany, więc przyjrzyjmy się, jak to zrobić, korzystając z interfejsów API usługi Active Directory w programie PowerShell. Te interfejsy API są dostępne we wszystkich systemach Windows i nie wymagają instalowania dodatkowych modułów, które mogłyby nas zdradzić. Na początek przyjrzyjmy się informacjom o domenie:

Tutaj możemy zobaczyć kilka krytycznych danych. Nazwa domeny to ghh.local, a jeden kontroler domeny (DC) jest również wymieniony, EC2AMAZTBKC0DJ. ghh.local. DomainModeLevel wynosi 7, co odpowiada poziomowi funkcjonalnemu systemu Windows 2016. Poziom funkcjonalny jest ważny, ponieważ funkcje bezpieczeństwa mogą działać inaczej na różnych poziomach funkcjonalnych. Następnie weźmy informacje, które uzyskaliśmy z polecenia whoami /user i sprawdźmy, jakie informacje o naszym użytkowniku znajdują się w AD:

Na podstawie tych wyników możemy zobaczyć grupy, do których należy nasz użytkownik, a także obiekty, którymi zarządza. Da nam to dodatkowy wgląd w typy rzeczy, do których użytkownik otrzymał uprawnienia na podstawie członkostwa w grupie, a zarządzane przez niego obiekty pomagają zidentyfikować dostęp, jaki może zapewnić innym kontom. Mając podstawową wiedzę o naszym użytkowniku i właściwościach domeny, przyjrzyjmy się bliżej układowi, uzyskując listę jednostek organizacyjnych (OU), które tworzą AD. Są one często opisowe i pomogą nam zrozumieć, gdzie szukać interesujących obiektów.

Stąd widzimy wbudowaną jednostkę organizacyjną kontrolerów domeny, ale widzimy również szereg jednostek organizacyjnych administratora i zagnieżdżonych jednostek organizacyjnych pod nimi. To są rzeczy, które zazwyczaj chcielibyśmy lepiej zrozumieć. Przyjrzyjmy się korzeniowi jednostek organizacyjnych administratora za pomocą programu PowerShell.

Widzimy, że oprócz Domain Admins i SYSTEM, grupa SC-266-distlist ma również prawa do tej grupy. Więc jeśli znajdziemy użytkownika w tej grupie, możemy użyć tego użytkownika do manipulowania obiektami w tej OU. Zobaczmy, kto jest w tej grupie:

UWAGA Ponieważ informacje dla każdego wdrożenia AD zostały losowo zmanipulowane przez BadBlood, Twoje grupy, użytkownicy i członkostwo mogą się różnić.

Zaczynamy od użycia System.DirectoryServices, aby uzyskać domenę (1), w której obecnie się znajdujemy. Musimy utworzyć obiekt DirectorySearcher (2), aby przeszukać Active Directory. Ten obiekt ma wszystkie metody, których będziemy potrzebować do wykonania naszego wyszukiwania. Następnie musimy wygenerować wyszukiwanie Lightweight Directory Access Protocol (LDAP), które będzie zawierało nasze informacje. Wyszukiwanie (3) używa operatora &, aby połączyć dwa różne terminy wyszukiwania: typ obiektu i nazwę wspólną (CN) obiektu, którego szukamy. Na koniec, po uzyskaniu elementu, którego szukamy, możemy przejrzeć właściwości (4) tego elementu, aby uzyskać członków grupy. Pomoże nam to w określeniu, kogo szukać później w celu eskalacji. Chociaż wykonywanie wszystkich tych zapytań bez użycia dodatkowych modułów jest przydatną umiejętnością, moduł PowerView w PowerSploit ma pomocnicze polecenia cmdlet, które mogą znacznie to ułatwić. Ponadto moduł PowerView ma dodatkowe polecenia cmdlet, które wyszukują luki w zabezpieczeniach.

UWAGA PowerSploit nie jest już utrzymywany, ale wielu testerów nadal go używa. Gdy aspekty modułów przestaną działać, prawdopodobnie nie zostaną naprawione, ale nie wszystkie funkcje modułów w PowerSploit zostały w pełni zintegrowane w porównywalnym module.

Rozpoznanie domeny

https://chacker.pl/

Prawie wszystkie systemy, które są częścią środowiska przedsiębiorstwa, będą częścią usługi Active Directory (AD). AD to usługa katalogowa, która śledzi użytkowników, grupy, komputery, zasady, witryny, struktury organizacyjne i wiele innych. Każdy obiekt ma atrybuty i informacje o zabezpieczeniach, które definiują obiekt i kto może z nim wchodzić w interakcje. Ten katalog jest podstawą domen AD (grupowania tych obiektów przechowywane na zestawie serwerów) i lasów (wiele domen, które mają między sobą relacje interoperacyjności i zaufania).

WSKAZÓWKA Active Directory (AD) ma wiele komponentów i może być trudne do zrozumienia. Jeśli nie znasz AD, Microsoft ma dobry odnośnik, który pomoże Ci zacząć: https://docs.microsoft.com/en-us/windowsserver/identity/ad-ds/get-started/virtual-dc/active- directory-domainservices- overview. Gdy już zapoznasz się z podstawami, wróć, a zagłębimy się w to, jak wchodzić w interakcję z AD za pomocą programu PowerShell i innych narzędzi.

Gdy wchodzimy do środowiska, musimy wiedzieć kilka ważnych rzeczy. Musimy wiedzieć, kim jesteśmy w środowisku i jakie są nasze grupy. Musimy również wiedzieć, kim są administratorzy. Możemy chcieć wiedzieć, jak duże jest środowisko, czy jest podzielone na witryny i jak wygląda struktura organizacyjna. Na koniec możemy chcieć wiedzieć, jakie obiekty zasad grupy (GPO) istnieją i gdzie są połączone. Te elementy pozwolą nam lepiej zrozumieć, jak skonfigurowana jest domena AD i gdzie powinniśmy szukać opcji eskalacji i trwałości.

System Recon z Seatbelt

https://chacker.pl/

Seatbelt może również zbierać informacje o opcjach konfiguracji hosta. Kwestie, które nas często interesują, to niektóre z tych, które zostały omówione wcześniej, takie jak konfiguracje programu PowerShell, status AMSI, informacje o systemie operacyjnym i konfiguracja. Chcemy jednak również wiedzieć, jakie kontrolki obronne są włączone, jakie interesujące procesy są uruchomione, jakie sesje logowania są obecne, abyśmy wiedzieli, czy nie jesteśmy sami w systemie, oraz inne obszary, które Seatbelt określa jako mogące zawierać interesujące dane. Wcześniej uruchomiliśmy grupę poleceń użytkownika. Tym razem uruchomimy grupę poleceń systemowych:

Widzimy tutaj wiele danych o stanie systemu, z których część widzieliśmy już bez Seatbelt. Jednak Seatbelt dostarcza te informacje w jednym miejscu, zamiast wymagać od nas zagłębiania się w różne miejsca za pomocą programu PowerShell. Możemy również przyjrzeć się konkretnym elementom. Jednym z aspektów, który jest pomocny w poznaniu systemu, jest to, czy UserAccountControl (UAC) jest włączony i jakie są jego ustawienia. Pomoże nam to określić, czy uprzywilejowani użytkownicy wymagają dodatkowych obejść w celu wykonania kodu, takich jak dodawanie usług lub użytkowników lub eskalacja do systemu:

Widzimy, że UAC jest włączony. Jeśli ktoś spróbuje uruchomić plik binarny inny niż Windows, system Windows poprosi użytkownika o zezwolenie na uruchomienie pliku binarnego. Gdybyśmy używali kanału C2 do dostępu do tego systemu, nie bylibyśmy w stanie zobaczyć tych monitów. To mówi nam, że musimy znaleźć sposób na eskalację uprawnień, aby uniknąć monitowania. Teraz, gdy mamy pewne zrozumienie tego, czym jest postawa hosta, przyjrzyjmy się, aby określić, gdzie jesteśmy w usłudze Active Directory.

Rozpoznanie systemu za pomocą programu PowerShell

https://chacker.pl/

Pierwszą rzeczą, którą chcemy sprawdzić, jest to, czy włączony jest moduł AMSI. Będzie to dobry wskaźnik tego, czy możemy używać dodatkowych narzędzi w pamięci bez ich zauważenia. Z poziomu wiersza poleceń programu PowerShell jako nasz użytkownik docelowy wydajemy następujące polecenia:

Pierwszy wiersz używa polecenia cmdlet Get-ChildItem, aby uzyskać dostawców z listy rejestru dostawców AMSI. Zawiera ona listę identyfikatorów klas (CLSID), które zarejestrowały się jako dostawcy AMSI. Kiedy sprawdzamy identyfikatory CLSID w rejestrze CLSID klas, widzimy, że identyfikator CLSID kończący się na 7AFE jest dostawcą dla programu Windows Defender. Poprzez zapytanie o identyfikatory CLSID, które zarejestrowały się jako dostawcy AMSI, możemy stwierdzić, czy cokolwiek korzysta z AMSI. Ponieważ otrzymujemy wynik (w tym przypadku program Windows Defender), oznacza to, że AMSI jest włączone. Następnie sprawdźmy, jakie zasady mogą być wdrożone. Zasady takie jak ScriptBlockLogging, która rejestruje zawartość uruchamianych przez nas poleceń, ModuleLogging, która rejestruje moduły ładowane przez program PowerShell, i TranscriptionLogging, która rejestruje wszystko, co dzieje się w sesji, oraz ciągi wyjściowe do pliku mogą zdradzić naszą obecność. Sprawdzając je, możemy od razu zobaczyć, co jest bezpieczne do uruchomienia, a co wymaga skonfigurowania obejść:

Gdy uruchamiamy polecenie, nie otrzymujemy żadnych informacji zwrotnych. To dobry znak, że nie ma żadnych specjalnych ustawień rejestrowania i że używane są domyślne opcje. Gdyby klucze rejestru istniały w tej lokalizacji, musielibyśmy ustalić, które z nich zostały ustawione, ale najbezpieczniejszą rzeczą do zrobienia w tym momencie byłby atak downgrade przy użyciu programu PowerShell 2.0 lub technika obejścia. Aby ustalić, czy możemy downgrade, sprawdźmy, jakie wersje programu PowerShell są zainstalowane:

Gdy uruchamiamy polecenie, nie otrzymujemy żadnych informacji zwrotnych. To dobry znak, że nie ma żadnych specjalnych ustawień rejestrowania i że używane są domyślne opcje. Gdyby klucze rejestru istniały w tej lokalizacji, musielibyśmy ustalić, które z nich zostały ustawione, ale najbezpieczniejszą rzeczą do zrobienia w tym momencie byłby atak downgrade przy użyciu programu PowerShell 2.0 lub technika obejścia. Aby ustalić, czy możemy downgrade, sprawdźmy, jakie wersje programu PowerShell są zainstalowane:

Widzimy, że jedyną lokalizacją, która ma prawidłowy system.dll do załadowania, co oznacza, że ​​jest to jedyna pełna instalacja, jest v4 frameworka. Oznacza to, że nie możemy obniżyć wersji do 2.0, aby pominąć rejestrowanie. Gdyby rejestrowanie było włączone, musielibyśmy użyć techniki obejścia, aby je wyłączyć. Teraz, gdy wiemy, że dodatkowe rozpoznanie nie wywoła wykrywania opartego na rejestrowaniu, przyjrzyjmy się niektórym podstawowym informacjom o systemie operacyjnym. Aby wyświetlić informacje o samym komputerze, możemy użyć polecenia cmdlet Get-ComputerInfo. Zawiera ono wiele danych, ale najpierw przyjrzyjmy się informacjom o systemie Windows:

Pokazuje nam to, że używamy trybu Windows 2016 Datacenter i jesteśmy zarejestrowani w Amazon EC2. Mamy również datę instalacji systemu i lokalizację katalogu Windows. Daje nam to trochę świadomości sytuacyjnej, ponieważ wiemy, że jesteśmy w chmurze, a nie w lokalizacji lokalnej. Kolejną rzeczą, którą będziemy chcieli sprawdzić, jest to, czy DeviceGuard jest włączony. DeviceGuard to funkcja systemu Windows, która pomaga zapobiegać złośliwemu oprogramowaniu, zapewniając, że tylko znany dobry kod może być uruchamiany w systemie. Oznacza to, że każdy kod, który wykonamy, będzie musiał być binarnymi plikami Living-Off-The-Land (LOLBins). Na szczęście polecenie cmdlet Get-ComputerInfo może nam ponownie pomóc:

Widzimy, że DeviceGuard jest wyłączony, więc jeśli możemy ominąć AV, powinniśmy być w stanie uruchomić binaria nienatywne w systemie. Teraz, gdy mamy pewną świadomość tego, co możemy, a czego nie możemy zrobić, zdobądźmy więcej informacji o Seatbelt.

Rozpoznanie systemu

https://chacker.pl/

Teraz, gdy mamy informacje o użytkowniku, powinniśmy przyjrzeć się samemu hostowi. Hosty często mają dane, które mogą pomóc zidentyfikować ogólną postawę bezpieczeństwa systemów w sieci. Ponadto zainstalowane pakiety oprogramowania mogą dać nam potencjalne ścieżki eskalacji i ruchu bocznego. Używane elementy postawy, takie jak oprogramowanie antywirusowe, produkty EDR, stan zapory, stan UAC itd., dadzą nam pojęcie o tym, co musimy zrobić, aby uniknąć w całej sieci. Możemy zacząć od podstawowej świadomości sytuacyjnej za pomocą programu PowerShell, a następnie przejść do bardziej zaawansowanych narzędzi. Pozwoli nam to zachować jak największą ciszę, a następnie, gdy dowiemy się więcej o systemie, będziemy mogli stać się głośniejsi w oparciu o widoczne elementy sterujące.

Korzystanie z Seatbelt w celu znalezienia informacji o użytkowniku

https://chacker.pl/

Teraz, gdy wiemy, jakie są uprawnienia użytkownika w kontekście systemu, możemy sprawdzić, jakie inne informacje możemy znaleźć w systemie na temat użytkownika. Może to być wszystko, od treści internetowych po klucze SSH. Część z nich możemy znaleźć, przeglądając system, co jest zdecydowanie zalecane, ale część z nich wymaga przejrzenia rejestru i innych plików. Byłoby to czasochłonne, gdyby zrobić to ręcznie, ale na szczęście narzędzie Seatbelt jest dostępne, aby pomóc znaleźć dodatkowe informacje. Na początek, pozostając połączonym z systemem docelowym, otwórz połączenie SSH z serwerem Kali. Skonfigurujemy serwer internetowy, aby pomóc nam uruchomić narzędzia. Po nawiązaniu połączenia wykonaj następujące kroki:

W systemie docelowym załadujemy program PowerShell i dołączymy moduł Invoke-Seatbelt.ps1 z repozytorium SharpPack sklonowanego w katalogu domowym:

Ładuje moduł Invoke-Seatbelt, który pozwoli nam uruchomić binarny plik C# Seatbelt z PowerShell. Narzędzie Seatbelt pomaga nam uzyskać dodatkowe informacje na temat tego, co jest zainstalowane w systemie i jak jest skonfigurowane. Następnie uruchomimy Seatbelt i poprosimy go o profilowanie informacji o użytkowniku. Dodamy również flagę -q, aby poprosić go o niewyświetlanie informacji o banerze.

Seatbelt przechodzi przez różne obszary profilu użytkownika i pomaga zidentyfikować ostatnio otwierane pliki, adresy URL, które zostały dodane do zakładek, foldery w katalogu domowym użytkownika, a następnie na koniec jego dane uwierzytelniające netNTLMv2, aby złamać je w trybie offline, jeśli nie znasz jeszcze jego hasła. Jest tu o wiele więcej, ale oto niektóre z najważniejszych punktów. Te elementy dadzą ci pewien wgląd w kontekst użytkownika oraz jego uprawnienia, członkostwo i dostęp. Zrozumienie praw i uprawnień użytkownika może pomóc ci ustalić, czy masz dostęp, którego potrzebujesz, aby korzystać z danych lub systemów docelowych.

Używanie whoami do identyfikacji uprawnień

https://chacker.pl/

W tym laboratorium użyjemy polecenia whoami do identyfikacji uprawnień i uprawnień użytkownika. Zacznij od połączenia się z maszyną docelową jako użytkownik GHH\target z hasłem Winter2021!. Po zalogowaniu otwórz wiersz poleceń cmd.exe. Następnie wpisz whoami i naciśnij ENTER.

W tym laboratorium użyjemy polecenia whoami do identyfikacji uprawnień i uprawnień użytkownika. Zacznij od połączenia się z maszyną docelową jako użytkownik GHH\target z hasłem Winter2021!. Po zalogowaniu otwórz wiersz poleceń cmd.exe. Następnie wpisz whoami i naciśnij ENTER.

SID użytkownika mówi nam kilka rzeczy: pierwszą jest SID domeny, który będzie przydatny w atakach takich jak ataki typu złoty bilet Kerberos. Część domeny to cały ciąg SID aż do ostatniej kreski. W tym przypadku SID domeny to -1-5-21-3262898812-2511208411-1049563518, a ID użytkownika to 1111. Użytkownicy poniżej 1000 są ograniczeni do użytkowników uprzywilejowanych, a użytkownicy powyżej 1000 to normalni użytkownicy. Ci użytkownicy mogą mieć dodatkowe uprawnienia, ale ten użytkownik nie jest częścią wbudowanych grup użytkowników uprzywilejowanych w domenie. Możemy również spojrzeć na wyróżniającą nazwę użytkownika (DN), która jest tożsamością, która czyni go unikalnym w usłudze Active Directory. Da nam to w pełni kwalifikowaną nazwę DN domeny, a także sposób, w jaki użytkownik jest umieszczony w organizacji:

Tutaj możemy zobaczyć, że domena użytkownika to DC=ghh,DC=local (lub w skrócie ghh.local). Możemy również zobaczyć, że użytkownik znajduje się w kontenerze Users w domenie. Użytkownik nie jest zorganizowany w kontenerze privileged users ani w niczym innym, więc ten użytkownik może być po prostu zwykłym użytkownikiem domeny. Przyjrzyjmy się teraz grupom:

Przyglądając się tym grupom, widzimy zarówno grupy lokalne, jak i grupy domenowe. Widzimy jednak kilka różnych typów grup. Dobrze znane grupy (1) to grupy, które mapują się na udokumentowane identyfikatory SID w środowisku. Grupy takie jak grupa WSZYSCY i grupa Administratorzy, które mają ten sam identyfikator SID we wszystkich systemach, należą do tego typu grupy. Drugim typem grupy, który widzimy, jest Alias ​​(2). Typy grup Alias ​​są zazwyczaj mapowane na uprawnienia w systemie i są aliasami identyfikatora SID używanego do ich przyznawania. Użytkownicy pulpitu zdalnego, zdalnego zarządzania i inne elementy, które przyznają określone prawa systemowe według członkostwa w grupie, zazwyczaj należą do tego typu grupy. Trzecim typem grupy jest Grupa (3). Jest to zazwyczaj grupa lokalna lub grupa usługi Active Directory, która może być grupą zabezpieczeń lub dystrybucyjną. Widzimy, że grupy domen są poprzedzone krótką nazwą domeny (GHH) wraz z nazwą grupy i identyfikatorem SID. Jeśli użytkownik ma grupy w różnych domenach, posiadanie SID pomoże zmapować SID domeny dla każdej domeny, do której użytkownik ma uprawnienia. Następnym krokiem jest przyjrzenie się uprawnieniom, jakie użytkownik ma w systemie. Uprawnienia te wskazują, w jaki sposób użytkownik może wchodzić w interakcję z systemem. Możliwość debugowania programów, wykonywania zadań administracyjnych i innych zadań można określić za pomocą flagi /priv:

Tutaj widzimy, że użytkownik ma tylko dwa uprawnienia. SeChangeNotifyPrivilege jest włączony, a drugi przywilej jest wyłączony. Włączony przywilej oznacza, że ​​użytkownik może poruszać się po systemie plików bez sprawdzania każdego folderu, aby ustalić, czy ma specjalne uprawnienia „Traverse Folder”; zamiast tego system sprawdza tylko, czy użytkownik ma dostęp do odczytu katalogu przed kontynuowaniem. Ten użytkownik ma bardzo ograniczone uprawnienia, więc wiele sztuczek dotyczących eskalacji uprawnień może być trudnych do wykonania.

UWAGA Istnieje ogromna lista potencjalnych uprawnień. Przyjrzymy się niektórym z nich później w tym rozdziale. Kiedy oceniasz, dlaczego coś działa lub nie, pomocne może być sprawdzenie uprawnień przypisanych użytkownikowi i zapoznanie się z ich znaczeniem tutaj: https://docs.microsoft.com/enus/windows/security/threat-protection/security-policy-settings/user-rights-assignment.

Rozpoznanie użytkownika

https://chacker.pl/

Po uzyskaniu dostępu do systemu, pierwszym krokiem jest zazwyczaj ustalenie, jako kto jesteś w systemie. Istnieje kilka sposobów, aby to zrobić, ale najprostszym jest polecenie whoami. To polecenie ma wiele różnych opcji wyświetlania danych. Przeanalizujmy je.

UWAGA Lab 1 używa chmury AWS z konfiguracją . Aby uzyskać dostęp do tego laboratorium, sklonuj repozytorium git na https://github.com/GrayHatHacking/GHHv6/, postępuj zgodnie z instrukcjami konfiguracji w katalogu cloudsetup, a następnie postępuj zgodnie z instrukcjami w folderze ch17, aby skonfigurować laboratorium. Po wykonaniu tej czynności adresy IP systemów będą znajdować się w katalogu ansible w folderze inventory.

Rozpoznanie hosta

https://chacker.pl/

Po początkowym dostępie do celu, pierwszym krokiem jest zazwyczaj uzyskanie pewnej świadomości sytuacyjnej. Ważne jest, aby określić, jako użytkownik jesteś w systemie, jakie uprawnienia ma ten użytkownik i jakie są potencjalne opcje eskalacji i trwałości. Rozpoznanie to może również dostarczyć informacji o tym, do czego użytkownicy mają dostęp. Jednym z błędów, jakie popełnia wielu hakerów, jest przejście bezpośrednio do administratora domeny w środowisku. Ta wysoce uprzywilejowana grupa Active Directory jest świetna, ale często jest również ściśle monitorowana. Nie jest niczym niezwykłym, że użytkownik, do którego uzyskujesz początkowy dostęp, ma wystarczające uprawnienia, aby kierować do innych systemów i innych danych lub zapewnić dodatkowe możliwości ruchu bocznego, ale bez wcześniejszego profilowania hosta i użytkownika, te rzeczy mogą zostać przeoczone.

 

Eksploatacja po awarii

https://chacker.pl/

Wcześniej omówiliśmy kilka sposobów dostania się do systemów, teraz musimy omówić, co zrobić po odniesieniu sukcesu. Eksploatacja po awarii obejmuje wszystkie kroki po początkowej eksploatacji. Obejmuje to dodatkowe rozpoznanie, dodatkową eksploatację, eksploatację uprawnień i wiele innych. Wiele dostępnych informacji pokazuje, jak eskalować, zrzucać skróty i poruszać się bocznie w środowiskach, które nie wykorzystują niektórych nowoczesnych technologii dostępnych dla przedsiębiorstw. Narzędzia takie jak Local Administrator Password Solution (LAPS) firmy Microsoft pomagają losowo ustalać hasła administratorów, a większość środowisk nie pozwala już użytkownikom być administratorami na ich komputerach stacjonarnych. Wiedząc o tym, musimy zrozumieć, jak obsługiwać niektóre z kluczowych elementów eksploatacji po awarii: lokalny rozpoznanie i rozpoznanie usługi Active Directory (AD), eskalowanie uprawnień zarówno w systemie lokalnym, jak i w domenie oraz uzyskiwanie trwałości zarówno na komputerze lokalnym, jak i w samym AD. Aby to zrobić, użyjemy kombinacji plików binarnych PowerShell i C#, aby zidentyfikować podatne usługi, uprawnienia i konfiguracje.