W dzisiejszym wpisie pokażę, jak w prosty sposób napisać malware klasy „Credential Stealer” i dokonać ekstrakcji zdobytych poświadczeń za pomocą zaufanego kanału komunikacji. Spróbujemy ominąć powszechnie znane oprogramowania antywirusowe oraz powiemy sobie dlaczego napisanie takiego programu wraz z ominięciem detekcji jest względnie proste. Zapraszam!
Co to jest Credential Stealer?
Na początek odrobina teorii. Credential Stealer to rodzaj malware, którego głównym zadaniem jest kradzież wrażliwych danych użytkowników przechowywanych na systemie operacyjnym. Co może „kraść” stealer? Mogą być to między innymi:
- Hasła zapisane w przeglądarkach
- Ciasteczka sesyjne
- Dane z managerów haseł, pliki .kdbx itp.
- Pliki konfiguracyjne np. do urządzeń sieciowych
- Pliki konfiguracyjne zawierające secrety, klucze API
- Dane z portfeli walutowych
- Dane zapisanych kart kredytowych
- Hasła Wi-Fi

Działalnośc Stealerów współcześnie stanowi bardzo duży problem z punktu widzenia cybersecurity. Wycieki danych różnych użytkowników, zawierających URLe do różnych usług (np. aplikacje bankowe, giełdy tradycyjne i giełdy kryptowalut, poczty itp.) oraz hasła w większości pochodzą najczęściej z kampanii wykorzystujących Stealery. Tylko takie kampanie zapewniają masowy napływ informacji o użytkownikach i ich hasłach z całego świata.
Znane stealery
Stealery to bardzo popularny rodzaj malware, ponieważ dostarczają one wymierne korzyści dla cyberprzestępców. Za ich pomocą można w względnie łatwy i szybki sposób pozyskać informacje pozwalające na osiągnięcie korzyści finansowych. Jeżeli zebrane dane nie wystarczają do przejęcia środków pieniężnych, mogą zostać sprzedane. Do najbardziej znanych stealerów należą:
- Redline Stealer
- Lumma Stealer – dystrybuowany między innymi za pomocą fałszywej CAPTCHY
- Pozostałe stealery Open Source dostępne na Github.com

Działanie współczesnych EDR/AV
Kilka ostatnich projektów nauczyło mnie jednego – współczesne EDRy i oprogramowanie antywirusowe mocno skupia się na bardzo zaawansowanych technikach omijania mechanizmów zabezpieczeń takich jak:
- Indirect i direct Syscalls
- Hell`s Gate
- Early Cascade
- Patchowanie AMSI/ETW
Powyższe podejście doprowadziło do bardzo ciekawej sytuacji – współczesne oprogramowania EDR/AV dość dobrze radzą sobie z tymi technikami, nadal jednak mają problem z malware napisanym „od zera”, bez wykorzystania powyższych technik. Skupienie się na detekcji zaawansowanych technik spowodowało „przymknięcie oka” na programy, które ich nie stosują.
Spróbowałem więc napisać własny stealer wykorzystujący webhook Discord do eksfiltracji danych.
Własny Credential Stealer – ProBackup
Zasada działania stealera ProBackup jest prosta – ma on znaleźć wszystkie zainstalowane przeglądarki użytkownika, zarchiwizować pliki przechowujące hasła i przesłać na serwer Discord z wykorzystaniem WebHooka. Na potrzeby testów wykorzystano przeglądarkę Firefox, która nie korzysta z zabezpieczeń DPAPI w celu ochrony haseł (tak jak Chrome czy Edge).

Proces tworzenia oprogramowania był dosyć prosty, ponieważ znane są miejsca w których Firefox przechowuje hasła oraz klucz do ich odszyfrowania:
- logins.json – plik, który przechowuje informacje o zapisanych hasłach oraz hasła w formie zaszyfrowanej
- key4.db – plik, który przechowuje klucz do szyfrowania haseł
Po uzyskaniu dostępu do ww. plików można w prosty sposób odzyskać hasła w formie jawnej za pomocą jednego z wielu narzędzi stosowanych w tym celu, np. projektu firefox_decrypt: https://github.com/unode/firefox_decrypt.

Kolejnym zadaniem było stworzenie webhooka na serwerze Discord, który będzie przyjmować dane i umieszczać je na serwerze. W tym celu stworzono serwer oraz webhook w ustawieniach serwera.

W kolejnym kroku należało stworzyć prostą fnkcję, która będzie wysyłała spakowane w ZIP pliki logins.json oraz key4.db:

Główna logika programu wygląda następująco:

W testowej wersji oprogramowania, BackupPro wysyła tylko dane programu Firefox, co zostało zaznaczone na powyższym rysunku. Docelowo takie oprogramowanie mogłoby być rozszerzone o inne przeglądarki i inne funkcjonalności. Współcześnie znane stealery mają szerokie spektrum zastosowań i umożliwiają wykradanie różnego typu sekretów, niekoniecznie związanych z przeglądarkami.
Obfuskacja? Niepotrzebna!
Obfuskatory kodu .NET takie jak ConfuserX wprowadzają pewne artefakty, które mogą uruchomić detekcję programów antywirusowych. Poprzez analizę działania tego typu oprogramowania doszedłem do wniosku, że odpowiednią strategią będzie zdanie „Keep it simple”. W tym celu:
- Zamiast kompilować kod skorzystałem z opcji Publish, która automatycznie podpisuje wynikowy plik certyfikatem self-signed – lepsze to niż bez podpisu
- Dołożenie prostej ikonki w celu zwiększenia wiarygodności programu
- Dopisałem pewne „fejkowe” informacje dotyczące binarki, które mogą wskazywać na to, że dokonuje ona procesu backupu:

Docelowo zakładka „Details” wyglądała następująco:

Zakładka „Digital Signatures” informuje również o obecności podpisu cyfrowego. Był to jednak zwykły podpis self-signed. Certyfikat podpisany przez zaufany urząd CA znacząco obniża ryzyko detekcji.
Test działania
W celu przetestowania programu pod kątem wykrywalności wykorzystałem dwa powszechnie używane antywirusy:
- Microsoft Defender
- ESET
Mając skompilowany program, ściągnąłem go z chmury i uruchomiłem na systemie:

Jak widać na powyższym obrazku, Stealer zadziałał prawidłowo, a Defender nie zablokował przesłania wrażliwych danych na serwer Discord.

Podobnie zachował się antywirus ESET, który również nie zablokował działania programu. Wiadomość od bota o godzinie 11:16 pochodziła ze stacji z Windows Defender, natomiast wiadomość z 12:04 pochodziła ze stacji z ESET – stąd różnice w wielkości archiwów ZIP.
Konkluzja
Współczesne cyberbezpieczeństwo w dużej mierze zależy od dojrzałości i świadomości użytkowników. Każdy EDR oraz program AV da się obejść – mniej lub bardziej zaawansowanymi technikami. Zaawansowane grupy APT i grupy cyberprzestępcze czerpiące duże korzyści finansowe z działania Stealerów robią wszystko by ich oprogramowanie było odporne na lokalne systemy bezpieczeństwa.
Również współczesna komunikacja malware ze światem jest realizowana za pomocą zaufanych kanałów komunikacji. Nieczęsto widuje się malware, który wysyła informacje bezpośrednio na serwery o małej reputacji. Współczesne kanały C2 to najczęście:
- Platformy komunikacyjne oferujące zautomatyzowane przesyłanie wiadomości:
- Discord
- Telegram
- Slack
- Usługi chmurowe
- Google Drive, Dropbox
- Github
- Social Media
Z powyższego powodu, zablokowanie takich kanałów komunikacji w warstwie sieciowej jest niełatwym zadaniem. Przecież te usługi mogą być (i są!) wykorzystywane też w „dobrych” celach.
Pamiętajmy więc, że najważniejszym mechanizmem bezpieczeństwa jest nasza własna świadomość i przeszkolony personel.