Dzisiaj opiszemy kolejną metodę pobierania plików Windows Background Intelligent Transfer (w skrócie BITS). Jej wykorzystanie możemy spotkać w zaawansowanym, złośliwym oprogramowaniu używanym przez atakujących w komunikacji z serwerami C2. Udowodnimy, że jej użycie potrafi ominąć zabezpieczenia wbudowanego w Windows antywirusa- Defendera oraz pokażemy, jak można wykryć podejrzane transfery danych.
Na Kapitanie wielokrotnie pisaliśmy o różnych wbudowanych w system operacyjny Windows programach pozwalających cyberprzestępcom na niezauważalne pobieranie plików z Internetu oraz wysyłanie danych. Przykłady znajdziecie tutaj. (tzw. LOLBIN)
Krótko o BITS i zastosowaniu w serwerach C2
Część teorii i przykłady na temat BITS znajdziesz w naszym poprzednim artykule, w którym opisywaliśmy sposób pobierania malware za pomocą wbudowanego w Windows narzędzia „bitsadmin”.
Z usługi inteligentnego transferu w tle (BITS) korzystają najczęściej programiści i administratorzy systemu Windows, aby przesyłać pliki z serwerów WWW HTTP i udziałów plików SMB. Zaletą w stosowaniu przez nich BITS’a jest optymalizacja transferu, a także wykorzystanie sieci, tak aby miała ona jak najmniejszy wpływ na pracę użytkownika (jak najmniejsze obciążenie łącza). BITS radzi sobie również z przerwami w sieci, wstrzymywaniem i automatycznym wznawianiem transferów, nawet po ponownym uruchomieniu, co czyni go bardzo dobrym kandydatem do standardowych zadań związanych serwerami C2 (Command and Control) takimi jak: pobieranie, przesyłanie i eksfiltracja danych.
Oprócz narzędzia uruchamianego z wiersza linii poleceń – „bitsadmin.exe”, BITS oferuje także polecenie w PowerShell. W systemie Windows możemy także odnaleźć inne programy, które również wykorzystują BITS. Dobrym przykładem jest Desktop Image Downloader (plik DESKTOPIMGDOWNLDR.EXE) – służący do pobierania obrazów okna logowania Windows. Inne programy Windows wykorzystujące BITS znajdujące się w katalogu „c:\Windows\” to:
- c:\Windows\SysWOW64\bitsadmin.exe
- c:\Windows\System32\MDMAppInstaller.exe
- c:\Windows\System32\DeviceEnroller.exe
- c:\Windows\SysWOW64\OneDriveSetup.exe
- c:\Windows\System32\ofdeploy.exe
- c:\Windows\System32\directxdatabaseupdater.exe
- c:\Windows\System32\MRT.exe
- c:\Windows\System32\aitstatic.exe
- c:\Windows\System32\desktopimgdownldr.exe
- c:\Windows\System32\Speech_OneCore\common\SpeechModelDownload.exe
- c:\Windows\System32\RecoveryDrive.exe
- c:\Windows\System32\svchost.exe (BITS service)
Monitorowanie użycia powyższych plików wykonywalnych w systemie również powinno należeć do zadań bezpieczeństwa.
Z technicznego punktu widzenia podczas uruchomienia klienta usługi BITS ładują się w systemie biblioteki Bitsproxy.dll, qmgrprxy.dll lub Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll.
Serwer zaś używa procesu „svchost.exe” z wartością wiersza polecenia procesu zawierającą słowo kluczowe „BITS”) i hosting biblioteki DLL usługi qmgr.dll. Komunikacja odbywa się po protokole RPC. Szczegóły techniczne możecie znaleźć tutaj.
Jak użyć BITS w Powershell?
W celu pobrania plików z Internetu przy użyciu BITS i PowerShell możemy wykorzystać metodę Powershell „Start-BitsTransfer”. W parametrach jej wywołania podajemy link skąd mamy pobrać dane i nazwę pliku oraz ścieżkę i nazwę pliku, do której ma być zapisany pobrany plik. Poniżej przykład pobrania i uruchomienia programu 7zip.exe
Ciekawostką jest, że za każdym razem, gdy pobierany jest do docelowej lokalizacji plik (w naszym przypadku „7zip.exe”), usługa BITS tworzy jego tymczasowy odpowiednik o nazwie „BITXXX.tmp”. Dopiero po ukończeniu transferu zmienia jego nazwę na właściwą. Może to być jeden z artefaktów wykorzystania przez system BITS w monitorowaniu (oczywiście trzeba mieć włączony odpowiedni audyt plików)
Audyt aktywności usługi BITS
Dobrą informacją jest, że system Windows domyślnie posiada włączony audyt aktywności usługi BITS. W celu zapoznania się jak on wygląda musimy sięgnąć do logu „Operational” znajdującego się w źródle (Bits-Client) – Microsoft-Windows-Bits-Client:
Najważniejsze zdarzenia to:
- EventID 3 – usługa BITS utworzyła nowe zadanie
- EventID 4 – zadanie transferu zostało zakończone
- EventID 5 – zadanie anulowane
-
EventID 59 – usługa BITS rozpoczęła zadanie transferu
, które jest skojarzone z adresem URL http://example.com -
EventID 60 – usługa BITS przestała przesyłać zadanie transferu
, które jest skojarzone z adresem URL http://example.com. Kod stanu to 0xxxx.
Inne zdarzenia związane z wydajnością i błędami przesyłania:
Zdarzenia, takie jak 59, 60 i 61, zawierają adres URL pobierania / wysyłania (bardzo przydatne do analizy śledczej i wykrywania), a zdarzenie 3 zawiera szczegóły ścieżki procesu klienta BITS i nazwę zadania (bardzo przydatne do wykrywania nietypowych klientów BITS).
Poniżej prezentujemy przykłady zdarzeń:
Ominięcie zabezpieczeń Windows Defender
Poniżej zamieszczamy przykład z próbą pobranie przez BITS narzędzia Mimikatz, które domyślnie Windows Defender zblokował podczas pobierania przez przeglądarkę Microsoft Edge, natomiast zezwolił przez BITS z poziomu PowerShell:
Wynik pobrania Mimikatz w logu BITS:
Podsumowanie
Usługa BITS stwarza ogromne możliwości pracy na transferach plików zarówno dla programistów, administratorów, ale także dla atakujących. Korzystają z niej wbudowane aplikacje Windows oraz usługi (np. Windows Update). Monitorowanie jej powinno należeć do stałych zadań Działów Bezpieczeństwa IT, ponieważ niekontrolowane jej użycie może przyczynić się do pobierania, przesyłania i ex-filtracji danych w firmie. Zalecamy dodać reguły monitorowania BITS do systemów bezpieczeństwa. Od strony sieciowej możemy także monitorować/zaobserwować aktywność BITS objawiającą się w nagłówku żądania HTTP w polu User-Agent w postaci wartości „Microsoft BITS/(numer wersji)”.
Szczegóły znajdziesz w naszym artykule tutaj.