Nie wszystkie ustawienia i funkcjonalności udostępniane przez Microsoft w Azure Portal są odpowiednio skonfigurowane i zabezpieczone out-of-the-box. Czasami zdarzają się perełki, takie jak Azure VM Extensions, które w skrajnych przypadkach mogą doprowadzić do przejęcia kontroli nad Twoją infrastrukturą i całą domeną! W jaki sposób? Dowiesz się o tym z tego wpisu.
Inne wpisy z serii
Ten post jest częścią serii “Przejmij władzę nad dowolną Azure VM”.
W skład tej serii wchodzą następujące posty:
- [Ten post] Wprowadzenie do VM Extensions
- Wprowadzenie do Run Commands
- Demo Run Commands i VM Extensions
- Audytowanie Run Commands i VM Extensions
- Zabezpieczenie przed Run Commands i VM Extensions
Pssst: Część z nich jeszcze nie powstała, ale jak tylko je ukończę, to zostaną podlinkowane powyżej.
Czym są Azure VM Extensions?
Zacznijmy od wyjaśnienia, czym są Azure VM Extensions. Są to aplikacje/pakiety udostępnione w Azure, służące do dodatkowej konfiguracji naszej maszyny wirtualnej po jej wdrożeniu. Przykładem może być automatyczna instalacja agenta Log Analytics lub onboarding Defender for Servers. Poza wbudowanymi rozszerzeniami mamy również możliwość stworzenia własnego VM Extension - Custom Script Extension, czyli skryptu PowerShell lub Bash z dowolnymi poleceniami/cmdletami.
Poradnik hakowania kontrolera domeny za pomocą Custom Script Extension umieszczę w innym poście na blogu. Gdy tylko go napiszę, znajdziesz tutaj link do tego wpisu 😉
Reset password
Interesującym przykładem VM Extensions jest rozszerzenie VMAccess. Umożliwia ono zresetowanie hasła do konta lokalnego administratora lub reset konfiguracji dostępu zdalnego RDP/SSH. Jest to też opcja dla leniwych, którym nie chce się tworzyć własnych rozszerzeń do hacku na ich Azure VM 😫 Gotowy kreator zmiany hasła konta local admina dostępny jest w Azure Portal, w widoku VM w zakładce Help > Reset password
Wbudowana opcja jest jednak dość problematyczna, ponieważ:
- Użytkownik musi istnieć na komputerze.
- Rozszerzenie nie zadziała, jeśli nasza maszyna wirtualna jest kontrolerem domeny.
- Jeśli konto użytkownika jest zablokowane, zmiana hasła nic nam nie da i nie uzyskamy dostępu do Azure VM.
Dużo tych ograniczeń, ale przynajmniej wbrew opisowi z portal Azure możemy zmieniać hasło wszystkich lokalnych kont, a nie tylko tego wbudowanego administratora 😀
Halo RBAC?
Mogłeś/aś pewnie sobie pomyśleć, że u nas na pewno jest wyłączone. Dokładnie tak powinno być, ale jeśli korzystasz wyłącznie z domyślnych ról w Azure, Twoja firma mogła to przeoczyć.
Zakładając, że nie masz uprawnień Owner lub Contributor, kolejną rolą, którą mogłeś/aś uzyskać jest Virtual Machine Contributor. Ktoś musi w końcu tworzyć, usuwać oraz włączać/wyłączać chmurowe maszyny wirtualne. Zgodnie z dokumentacją, rola Virtual Machine Contributor ma prawo do:
Create and manage virtual machines, manage disks, install and run software, reset password of the root user of the virtual machine using VM extensions, and manage local user accounts using VM extensions. This role does not grant you management access to the virtual network or storage account the virtual machines are connected to. This role does not allow you to assign roles in Azure RBAC.
— Azure built-in roles - License requirements - Virtual Machine Contributor
…czyli w skrócie do Azure VM extensions!
Gdzie ukrywają się nasze uprawnienia? Dokładniej tutaj:
|
|
Możemy wykonywać wszystkie działania w ramach Microsoft.Compute/virtualMachines
, co oznacza, że mamy uprawnienia do Microsoft.Compute/virtualMachines/extensions/write
, czyli wdrażania i uruchamiania VM Extensions.
Naprawa problemu
Jak najszybciej rozwiązać nasz problem? Stworzyć nową custom role z kopii definicji Virtual Machine Contributor i ograniczyć jej uprawnienia do zapisu/wykonania VM Extensions. Po jej utworzeniu powinniśmy objąć nią zasoby, które są dla nas krytyczne np. kontrolery domeny.
Gotowe szablony Custom Role znajdziesz na moim GitHub:
- Wersja Azure Portal: CustomPortal-Virtual Machine Contributor (without VM Extension).json
- Wersja Azure PowerShell: CustomPS-Virtual Machine Contributor (without VM Extension).json
Role możesz utworzyć za pomocą Portalu Azure lub za Azure PowerShell.
Dostępne metody:
Uruchom Windows PowerShell i połącz się ze swoją subskrypcją Azure. Następnie utwórz nową rolę z pobranej wcześniej definicji custom role. Gotowe - nasza rola została poprawnie utworzona!Metoda 2 - Azure PowerShell - kliknij, aby rozwinąć
1
2
Connect-AzAccount
Select-AzSubscription -SubscriptionId "Your_subscription_ID"
1
New-AzRoleDefinition -InputFile "Custom_Role_FilePath.json"
Testy nowej roli
Rola została utworzona, czas na testy. Przypisałem rolę do testowego użytkownika i spróbowałem ponownie zresetować hasło na maszynie wirtualnej.
Efekt? Próba została zablokowana przez brak uprawnień 🛑
To nie tak miało być…
Niestety, odebranie uprawnień dla VM Extensions ma również negatywne skutki. Na przykład, jeśli będziemy chcieli zaszyfrować dysk Azure VM za pomocą Azure Disk Encryption, to zostaniemy zablokowani, ponieważ proces szyfrowania dysków wymaga skorzystania z VM Extensions, a dokładniej rozszerzenia AzureDiskEncryption.
W takiej sytuacji musimy poprosić innego administratora posiadającego pełne uprawnienia Virtual Machine Contributor o zaszyfrowanie maszyny lub zamiast odbierać uprawnienia do VM Extensions, możemy utworzyć Azure Policy, które dopuści wyłącznie rozszerzenia z whitelist.
Więcej na ten temat przeczytasz w nadchodzącym poście na blogu 🙃
Podsumowanie
Gratulacje, jak zawsze udało Ci się dotrzeć do końca wpisu. Teraz już wiesz, jak niebezpieczne są Azure VM Extensions oraz że nie można zresetować hasła lokalnego administratora na kontrolerze domeny za pomocą opcji Reset password.
Mogłeś/aś zauważyć, że ten wpis jest krótszy niż poprzednie. Dobre spostrzeżenie! W tym roku postanowiłem dzielić dłuższe tematy na krótsze wpisy. Nie każdy ma przecież 15 minut wolnego czasu na czytanie nudnego, długiego monologu…
Zobaczymy, co z tego wyjdzie 🤡