niskopoziomowa zmiana w uprawnieniach do usług na Windows, dzięki której możemy w każdym momencie wykonywać podniesienie uprawnień (LPE)

Tytuł może clickbaitowy, ale ma skłonić do wgłębienia się w szczegóły niskopoziomowej architektury nadawania uprawnień. W poniższym artykule opiszemy niskopoziomową zmianę w uprawnieniach do usług na Windows, dzięki której możemy w każdym momencie wykonywać podniesienie uprawnień (LPE) ze zwykłego konta użytkownika do najwyższych w systemie (Administrators).

Techniki pozwalające hakerom ukrywać się w systemie – LotL

O takich technikach pisaliśmy wielokrotnie na Kapitanie, a teksty te możesz znaleźć tutaj. Dla przypomnienia, LotL (Living of the Land) wykorzystuje „naturalne zasoby” systemu operacyjnego – wbudowane w niego narzędzia systemowe używane do tworzenia backdoorów. Opisywana poniżej metoda na pewno jest jedną z ulubionych stosowanych przez złośliwych aktorów.

Jak można stworzyć backdoor w systemie?

O ciekawym sposobie wspomina na Twitterze Grzegorz Tworek.

Aby można było skutecznie stworzyć backdoor, wymagana jest wcześniejsza kompromitacja systemu (zdobycie uprawnień administracyjnych). Ale jak to? Po co w takim razie go tworzyć, skoro i tak mamy dostęp administracyjny? Odpowiedź jest prosta – żeby nikt się nie zorientował, że możemy ponownie przydzielić sobie taki dostęp w każdym momencie – i to z normalnego konta użytkownika!

Inną okazją do wykorzystania tej metody może być sytuacja, w której użytkownik pracujący na komputerze używa konta z lokalnymi uprawnieniami administracyjnymi. Podrzucając mu skrypt lub inny ciekawy ładunek, możemy tak zmodyfikować ustawienia, że zdobycie w późniejszym czasie takiego dostępu administracyjnego będzie dla atakującego bułką z masłem.

Na czym polega sekret opisywanej metody?

Wszystko opiera się o Menedżera Kontroli Usług (z ang. Service Control Manager) a konkretnie modyfikację jego uprawnień do systemu (listy ACL) za pomocą przełącznika w komendzie „sc.exe” o nazwie „sdset”.

Dzięki temu udostępniamy dowolnemu użytkownikowi niebędącemu administratorem stałe pełne uprawnienia SYSTEM na komputerze.

Jak wygląda komenda tworząca backdoor?

W celu przeprowadzenia modyfikacji w systemie potrzebujemy uprawnień konta uprzywilejowanego (uprawnienia administracyjne). Uruchamiając poniższą komendę na Windows, zmienimy listę uprawnień dla SCMAnagera, umożliwiając wszystkim użytkownikom tworzenie nowych usług w systemie.

sc.exe sdset scmanager D:(A;;KA;;;WD) 
zmiana listy uprawnień dla SCMAnagera

Zanim zademonstrujemy atak, warto wyjaśnić, co oznaczają te dziwne wpisy w linii komend, w szczególności te w nawiasie. To nic innego jak podane w odpowiedniej kolejności pola ACE wyrażenia określającego uprawnienia, do których możemy się odwoływać w ciągu SDDL.

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute)

Pełny opis znajdziesz na stronie Microsoftu.

Po rozszyfrowaniu powyższego wpisu otrzymujemy:

  • D: – uznaniowa lista ACL (DACL). Skrót od „Discretionary”.

Lista DACL identyfikuje użytkowników i grupy, którym przyznano lub odmówiono dostępu do obiektu,

  • A; – dozwolony dostęp (ace_type), skrót od „Allowed”.

Ten pierwszy segment reprezentuje początek wpisu kontroli dostępu (ACE). Lista ACL zawiera listę wpisów ACE. Pozycja ACE definiuje dostęp do obiektu dla określonego użytkownika lub grupy albo definiuje typy dostępu generujące komunikaty lub alarmy administrowania systemem dla określonego użytkownika lub grupy. Użytkownik lub grupa jest identyfikowana przez identyfikator zabezpieczeń (SID),

  • ace_flags – w naszym przypadku pozostaje puste,
  • KA; KEY_ALL_ACCESS (prawa dostępu)

Ten token może również odnosić się do administratorów poświadczeń klucza domeny, jeśli jest używany w kontekście identyfikatora SID, co wcale nie jest mylące. Wszystko, co musimy wiedzieć, to że daje to dostęp do wszystkich kluczy rejestru związanych z SDDL,

  • object_guid – w naszym przypadku pozostaje pusty,
  • inherit_object_guid – w naszym przypadku pozostaje pusty,
  • WD – symbol grupy Everyone – wszyscy użytkownicy.

Tłumacząc na prostszy język, modyfikujemy uprawnienia SCManagera tak, aby każdy użytkownik miał pełną kontrolę nad usługami systemowymi, w tym dodawanie, kasowanie itp. Aktualne uprawnienia możemy sprawdzić parametrem „sdshow” w komendzie sc.exe:

modyfikacja uprawnień SCManagera

Do czego można wykorzystać powyższy backdoor?

Ponieważ Service Control Manager działa na uprawnieniach SYSTEM, a my poprzez powyższą modyfikację uzyskaliśmy możliwość dodawania nowych usług, to wszystko, co przez taką nową usługę uruchomimy w systemie, będzie wykonywane na najwyższych poświadczeniach.

Taki przypadek może zostać niezauważony w systemach bezpieczeństwa, np. monitorowania logów SIEM, gdyż często tego typu zmiany są odfiltrowywane w regułach (ponieważ są kojarzone z normalną pracą systemu).

Jeśli chodzi o sposoby wykorzystania danego backdoora w systemie, sky is the limit. Pamiętajmy, że zmiany są wykonywane na koncie SYSTEM, więc mamy tutaj pełną dowolność!

Z najciekawszych zastosowań, jakie tutaj widzimy:

Możemy za pomocą nowo utworzonej usługi uruchamiać dowolne binarki w systemie Windows, np. cmd.exe lub inne odpowiadające za komendy, np. net.exe.

Przykład – dodanie naszego konta użytkownika do lokalnych administratorów

Najprostszym przykładem na użycie backdoora, jaki możemy zademonstrować, i takim, który nawiązywałby do tytułu artykułu, jest utworzenie usługi dodającej zwykłe konto do lokalnych administratorów. Wykorzystamy do tego wbudowaną w Windows komendę „net.exe” z odpowiednimi parametrami. Pamiętajmy, że całą operację wykonujemy już na zwykłym użytkowniku (bo mamy uprawnienia do tworzenia usług). W naszym przypadku jest to konto o nazwie „normal”.

Składnia polecenia jest następująca:

sc create KAPITANHACK displayName="KAPITANHACK" binPath= "C:\Windows\System32\net.exe localgroup Administrators normal /add" start=auto
utworzenie usługi dodającej zwykłe konto do lokalnych administratorów

Powyższa komenda utworzy w Windows serwis o nazwie „KAPITANHACK”, który będzie w trybie automatycznym uruchamiał przy każdym starcie systemu komendę „net.exe”. Ta zaś będzie dodawać do lokalnych administratorów zwykłe konto użytkownika o nazwie „normal”. Aby taka zmiana weszła w życie, musimy poczekać do ponownego restartu systemu.

uruchamianie przy każdym starcie systemu komendy „net.exe”

Jak wykryć utworzenie backdoora w systemie?

Sposobów na wykrycie opisywanego przez nas backdoora może być kilka.

Pierwszy to na pewno monitorowanie zmian w uprawnieniach do usług (wszystkie operacje). Inną drogą jest przeprowadzenie usługi audytu tych uprawnień i sprawdzenie podejrzanych wpisów. Notabene polecamy wykonanie tego ćwiczenia w Waszym środowisku. Możecie się zdziwić, ile producentów firm trzecich zmienia te uprawnienia.

Najciekawszym według nas miejscem na dowiedzenie się, że lista uprawnień została zmieniona, jest jednak odpowiedni wpis w rejestrze systemowym (ślad zmiany).

W momencie gdy zmieniamy standardowe uprawnienia do SCManagera w systemie Windows, w rejestrze systemowym powstaje specjalna gałąź o nazwie „Security”.

HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\Security

W środku, w kluczu o nazwie Security, zapisane są wartości binarne tych uprawnień.

Wskazówka:

Jeśli popełniłeś błąd podczas przygotowywania łańcucha SDDL, możesz usunąć tę gałąź i ponownie uruchomić komputer, aby zresetować obecne uprawnienia do domyślnych.

Podziel się z innymi tym artykułem!