W dzisiejszym artykule pokażemy sposób na przechwycenie loginów i skrótów haseł użytkowników z systemu operacyjnego Microsoft Windows (w różnych wersjach)!
W Świecie Cybersecurity istnieje wiele metod na kradzież/przechwycenie haseł użytkowników. W ostatnim czasie pisaliśmy sporo o metodach poznawania haseł użytkowników logujących się do systemu operacyjnego Windows. Robimy to, ponieważ zabezpieczenie haseł i dostępów do infrastruktury stanowi poważne wyzwanie dla wszystkich organizacji.
Część z opisywanych metod kradzieży uwzględniała lokalny dostęp atakującego do komputera ofiary (przykład znajdziesz tutaj), inne polegały na wykorzystaniu słabości uwierzytelniania do protokołów sieciowych (przykład znajdziesz tutaj) i przejmowania haseł za pomaca tzw. ataków MITM (Man-In The-Middle). Istnieje jeszcze metoda podsłuchiwania ruchu sieciowego (surowych pakietów) i dekodowania z nich haseł, którą opisaliśmy tutaj. I pewnie pojawią się inne, o których na pewno będziemy pisać.
Dzisiejsza metoda, którą wzięliśmy na warsztat ma dużo wspólnego z opisywaną przez nas wcześniej metodą ataku MITM bazującą na NTLM Relay – czyli ataku przekaźnikowym. Tym razem pokażemy, jak można przechwycić hasła użytkowników po sieci ze zdalnego komputera wykorzystując narzędzie „ntlmrelayx” (moduł narzędzia Impacket) oraz słabości niezabezpieczonego protokół komunikacyjnego SMB, używanego na szeroką skalę w środowiskach informatycznych.
Co to jest SMB?
Zapewne pamiętacie takie ataki jak NotPetya, czy eksploity EthernalBlue używane w słynnych incydentach w 2017 roku. Były to pierwsze uderzenia, które wykorzystywały słabości w mechanizmie uwierzytelniania NTLM w protokole SMB v1 (wersji 1), publicznie eksploitowane wśród wielu firm na Świecie poprzez malware. Nie będziemy się rozpisać zbytnio o SMB, bo już to robiliśmy, ale wyjaśnimy tylko, że SMB (z ang. Server Message Block) to protokół służący udostępnianiu zasobów komputerowych, m.in. drukarek czy plików. Znany również jako CIFS (z ang. Common Internet File System). Jest on nieodzownym składnikiem każdej sieci komputerowej w firmach. Wykorzystuje port 445/TCP oraz opcjonalne (NetBIOS) 137/UDP, 138/UDP, 139/TCP. SMB występuję w 3 wersjach (implementacjach). SMBv1 – słabości opisaliśmy tutaj, SMBv2 i SMBv3 (o słabości pisaliśmy tutaj). Kilka zaleceń i informacji na temat tych protokołów i zabezpieczeń znajdziecie w Microsoft tutaj. Razem z premierą systemów Windows 8 i Windows Server 2012 pojawił się SMBv3, który pozwala na kompleksowe szyfrowanie komunikacji end-to-end.
Scenariusz ataku przechwycenia haseł po SMB v2/v3
Scenariusz ataku zakłada, że atakujący zdobył przyczółek w sieci i posiada dostęp do serwera/stacji roboczej, na której może zainstalować narzędzie Impacket. W naszym przypadku posłużyliśmy się serwerem Linux, na którym zainstalowaliśmy to narzędzie oraz dodatkowo narzędzie CrackMapExec (szwajcarski scyzoryk dla pentesterów), które pomoże nam w przeprowadzeniu rekonesansu w sieci. W naszym środowisku oprócz serwera Linux znajduję się także serwer Windows 2016 ze wszystkimi możliwymi aktualizacjami (którego będziemy chcieli zaatakować), kontroler domeny Windows 2016 oraz jedna stacja robocza Windows 10.
Krok 1. Wykonanie rekonesansu w sieci
Przed wykonaniem samego ataku warto jest rozpoznać, które komputery w sieci udostępniają zasoby po SMB lub mają włączony otwarty port SMB. Doskonałym narzędziem do przeprowadzenia tego etapu będzie CrackMapExec.
Używając w nim polecenia:
Crackmapexec smb 172.16.215.0/24 –-gen-relay-list /home/kapitan/targets.txt
przeskanujemy całą podsieć „172.16.215.xxx” pod kątem podatnych usług SMB na atak przekaźnikowy (Relay). Wynik w postaci listy adresów IP podatnych hostów zostanie zapisany do pliku „targets.txt”.
Odpowiedź zwrócona przez skaner sugeruje, że serwer W2016 będzie podatny na nasz atak.
Krok 2. Skonfigurowanie NTLM Relay na maszynie atakującego
Nadszedł czas, aby skonfigurować nasz serwer Linux w sieci do nasłuchiwania zapytań sieciowych po SMB oraz uwierzytelnieniu NTLM i przekazywania ich dalej do innego serwera, w naszym przypadku podatnego serwera Windows 2016 o adresie IP 172.16.215.160.
Wykonamy to poleceniem:
Ntlmrelayx.py -t 172.16.215.160 -smb2support
Celowo użyliśmy modułu ze wsparciem SMBv2, ponieważ nasz Windows 2016, którego chcemy zaatakować właśnie go używa.
Krok 3. Wykonanie połączenia po SMB do serwera atakującego
Jedyne co teraz musimy wykonać, to wymusić połączenie na protokole SMB z innego serwera (w naszym przypadku o adresie IP 172.16.215.100) na nieistniejący udział sieciowy na serwerze atakującego (adres IP 172.16.215.129). Wykonać to możemy wbudowaną w Windows komendą „net.exe”
Net use \\172.16.215.129
W tym momencie serwer atakującego (172.16.215.129) przejął NTLM hash użytkownika zalogowanego na serwerze 172.16.215.100 (Administrator) i wykorzystał go do przechwycenia po sieci lokalnej bazy skrótów haseł (hashy) użytkowników na serwerze 172.16.215.160 (Windows 2016). Wynik możecie zobaczyć na ekranie poniżej.
Warto tutaj wspomnieć o jednej bardzo ważnej kwestii. Użytkownik zalogowany na komputerze o IP 172.16.215.100 posiadał lokalne uprawnienia administracyjne na serwerze, którego atakowaliśmy (172.16.215.160). NTLM Relay, przekazał tylko jego poświadczenia (nie znając ich) do serwera docelowego i wykorzystał do przeskanowania na nim lokalnej bazy haseł. Wynik zwrotny otrzymamy na serwerze Linux atakującego:
Co to dla nas oznacza?
Powyższy atak NTML Relay na usługę SMB uświadamia nas i przestrzega przed możliwościami jakie mają atakujący w sieci, jeśli oczywiście znajdą w niej przyczółek. Jak widzimy podatne mogą być wszystkie wersje SMB, jeśli oczywiście odpowiednio ich nie zabezpieczymy. Powinniśmy odpowiednio chronić infrastrukturę i zabezpieczyć przed tego typu atakiem. Dlatego polecamy zapoznać się poradami z wyżej wymienionych artykułów i stosowanie się do nich.