W poprzednim wpisie pokazałem, jak niebezpieczne mogą być rozszerzenia dla Azure VM. Tym razem czas na kolejną ciekawą funkcjonalność - Run Commands!
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:
- Wprowadzenie do VM Extensions
- [Ten post] 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ą Run Commands?
Run Commands to nic innego jak możliwość uruchamiania skryptów PowerShell lub Bash, jeśli jesteś pingwiniarzem 🐧 za pomocą Azure VM agent.
Brzmi znajomo? Jeśli czytałeś poprzedni wpis, to ten sam efekt możemy przecież osiągnąć za pomocą Custom Script Extension (CSE).
Run Commands vs Custom Script Extension (CSE)
Jakie są główne różnice pomiędzy Run Commands a Custom Script Extension (CSE) i z czego korzystać?
- Run Commands są nowsze i mają nawet swojego następcę - Managed Run Commands.
- Custom Script Extension nie wspierają wielu wystąpień - możesz zainstalować/wykonać tylko jedno rozszerzenie/skrypt jednocześnie.
- Managed Run Commands pozwalają uruchamiać wiele skryptów/instancji jednocześnie.
- Managed/Run Commands są konfigurowane przez inne prawa RBAC, więc jeśli Twój administrator odebrał Ci możliwość instalacji rozszerzeń do VM, nadal istnieje szansa, że nie odebrał Ci uprawnień do Run Commands.
Pełna lista nowych funkcji Managed Run Commands jest dostępna w dokumentacji Microsoft.
Oczywiście, możesz wybrać dowolne rozwiązanie, ale lepiej korzystać z Run Commands i nie komplikować sobie życia 😀
Wbudowane Run Commands
W portalu Azure mamy domyślnie kilka poleceń Run Commands, których nie możemy edytować.
Dla osób, które oszczędzają megabajty, spisałem je również w tabelce poniżej:
Name | Description |
---|---|
RunPowerShellScript | Executes a PowerShell script |
DisableNLA | Disable Network Level Authentication |
DisableWindowsUpdate | Disable Windows Update Automatic Updates |
EnableAdminAccount | Enable administrator account |
EnableEMS | Enable EMS |
EnableRemotePS | Enable remote PowerShell |
EnableWindowsUpdate | Enable Windows Update Automatic Updates |
IPConfig | List IP configuration |
RDPSettings | Verify RDP Listener Settings |
ResetRDPCert | Restore RDP Authentication mode to defaults |
SetRDPPort | Set Remote Desktop port |
Tym razem możemy jedynie włączyć konto wbudowanego administratora bez możliwości zmiany jego hasła… No cóż, trzeba będzie napisać własny skrypt, który naprawi to małe niedociągnięcie 😉
Zmiana hasła lokalnego administratora za pomocą Run Commands
Do zmiany hasła konta lokalnego administratora wykorzystamy polecenie RunPowerShellScript
oraz zmodyfikowaną wersję polecenia EnableAdminAccount
.
Skrypt możesz pobrać z blogowego repozytorium na GitHub.
Instrukcja
- Przechodzimy do naszej maszyny wirtualnej.
- Wybieramy Run command > RunPowerShellScript
- Wklejamy zawartość skryptu z GitHub - ResetAdminAccount.ps1.
- Uzupełniamy nowe hasło do konta admina w drugiej linii skryptu.
- Klikamy przycisk Run.
- Gotowe, od teraz jesteś Administratorem!
Wersja obrazkowa
PS: Wiem, że numeracja kroków się nie zgadza, ale kto to sprawdza 🙃
Weryfikacja nowych uprawnień
Jeśli skrypt nie zwrócił żadnych błędów, to w ostatniej linii powinniśmy zobaczyć nazwę wbudowanego konta administratora.
Logujemy się za pomocą RDP lub Bastion do VM i sprawdzamy, czy nasza sztuczka zadziałała - u mnie tak 🙂
Jak zablokować Run Commands?
Podobnie jak w przypadku Azure VM Extensions, wystarczy wyedytować role, z których korzystają nasi administratorzy i odebrać im uprawnienia do Run Commands.
Prawa, które musimy odebrać to:
|
|
… ale dla bezpieczeństwa usunąłem wszystkie prawa do Run Commands, włącznie z ich wyświetlaniem.
Pełną instrukcję tworzenia nowej Custom Role znajdziesz w moim poprzednim wpisie.
Gotowe szablony Custom Role znajdziesz na moim GitHub:
- Wersja Azure Portal: CustomPortal-Virtual Machine Contributor (without Run Commands).json
- Wersja Azure PowerShell: CustomPS-Virtual Machine Contributor (without Run Commands).json
Role możesz utworzyć za pomocą Azure Portal (GUI) lub Azure PowerShell (CLI).
Jak sprawdzić, czy nowe role działają?
Poczekaj kilka minut i spróbuj ponownie wykonać jakiś skrypt za pomocą Run Commands. Jeśli wszystko się udało, to powinieneś/powinnaś zobaczyć:
Błąd podczas listowania Run Commands
Błąd podczas wykonywania Run Commands
Jak widać, nic nie działa - dobra robota, zepsułeś/aś całą zabawę administratorom 🛑
Podsumowanie
Kolejny dzień przynosi kolejne pro… wyzwania! Dziś rozwiązałeś/aś kolejne z nich. Jako że w tym wpisie jeszcze nie zamieściłem żadnego mema, zostawiłem Ci go w nagrodę na koniec - gratulacje i smacznego!
Do zobaczenia w kolejnym wpisie!