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:

Zablokowane pobieranie Mimikatz przez Microsoft Edge
Udane pobranie Mimikatz przez klienta BITS w 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.

Podziel się z innymi tym artykułem!