Na początku października otrzymaliśmy zgłoszenie o kolejnej kampanii spamowej, wymierzonej w klientów sieci Play i dystrybuującej oprogramowanie ransomware. Rozsyłane maile mają postać fałszywych faktur, z załączonym skryptem JS, który pobiera i uruchamia złośliwe oprogramowanie, znane pod nazwą TorrentLocker (określanym również jako Crypt0L0cker).
Opis zagrożenia
TorrentLocker jest szeroko rozpowszechniany w licznych kampaniach na całym świecie. Pierwsze sygnały o tym zagrożeniu pojawiały się już we wrześniu 2013r. Cyberprzestępcy za cel obierają sobie głównie firmy kurierskie, operatorów telekomunikacyjnych, a także spółki z sektora energetycznego. Mechanizm w każdym przypadku jest ten sam: ofiara otrzymuje maila z informacją o zalegającej płatności, który zawiera link do „faktury”, bądź załącznik ją imitujący. Zamiast spodziewanego dokumentu otrzymujemy tzw. dropper, który po uruchomieniu instaluje TorrentLockera.
Ten rodzaj ransomware pojawiał się wcześniej również w Polsce. Na przełomie ostatniego roku na skrzynkach Polaków pojawiały się maile imitujące faktury za energię od PGE, czy też fałszywe powiadomienia o zaległej płatności za przesyłkę od Poczty Polskiej.
Z racji, iż problem od czasu do czasu powraca, postanowiliśmy przyjrzeć się mu bliżej.
Analiza techniczna
TorrentLocker jest dość interesującym reprezentantem swojej rodziny. Z racji, iż dystrybuowany jest głównie przez spam, do infekcji dochodzi najczęściej poprzez kliknięcie na złośliwy załącznik lub pobranie systemu ze strony phishingowej.
Główną funkcjonalnością malware’u jest szyfrowanie plików znajdujących się na lokalnych dyskach i podmontowanych udziałach sieciowych. Po zaszyfrowaniu wyświetlana jest informacja o konieczności zapłacenia okupu w zamian za swoje dane.
Po wejściu na stronę płatności dostajemy instrukcję w jaki sposób przelać BTC na portfel przestępców. Kwota początkowo wynosi 0.6 BTC, ale po pewnym czasie (zwykle kilku dniach) wzrasta dwukrotnie. Aby upewnić ofiarę o tym, iż po dokonaniu płatności, pliki faktycznie zostaną zdeszyfrowane serwis pozwala na odzyskanie jednego pliku za darmo.
Ponadto malware poszerza swoją listę potencjalnych ofiar przez wykradanie danych dostępowych i adresów e-mail z klientów poczty. Wyłącza również filtr antyphishingowy w Internet Explorerze (prawdopodobnie, aby zwiększyć dostępność strony z płatnością).
Szyfrowanie plików
Pliki szyfrowane są algorytmem AES-256-CBC. Na początku procedury szyfrującej generowany jest losowy klucz AES, który po uprzednim zaszyfrowaniu kluczem publicznym RSA (zawartym w próbce), zostaje wysyłany do serwera C&C.
Generacja klucza AES oparta jest na funkcji CryptGenRandom z CryptoAPI Windowsa. Autorzy malware’u zdają się jednak niewystarczająco ufać tej funkcji, gdyż klucz jest później dodatkowo mieszany z wartościami z GetTickCount.
Następnie rozpoczyna się szyfrowanie plików. Aby przyspieszyć proces odbywa się ono równolegle – tworzone są wątki szyfrujące:
- dla każdego dysku (enumerowane przy pomocy GetLogicalDrives)
- dla każdego zamontowanego zasobu sieciowego (z użyciem WNetOpenEnum)
- ponadto tworzony jest dodatkowy wątek dla Pulpitu aktualnie zalogowanego użytkownika (użytkownicy zwykle trzymają tam najważniejsze pliki, więc widocznie uznano, iż warto zaszyfrować ten folder możliwie wcześnie)
Każdy z wątków szyfruje wszystkie pliki i odwiedza wszystkie podkatalogi, począwszy od swojego punktu wejścia. W celu przyspieszenia procesu, TorrentLocker szyfruje wyłącznie początkowy 1MB każdego pliku.
Aby zapobiec zaszyfrowaniu plików krytycznych dla działania systemu, TorrentLocker stosuje podejście opierające się na czarnej liście. W próbce można znaleźć listę wykluczonych z szyfrowania rozszerzeń i identyfikatorów CSIDL ścieżek.
'exe','dll','sys','vdx','vxd','com','msi','scr','cpl','bat','cmd',
'lnk','url','log','log2','tmp','###','ini','chm','manifest','inf',
'html','txt','bmp','ttf','png','ico','gif','mp3','wav','avi','theme','evtx','folder','kdmp'
Aby utrudnić odzyskanie danych, program usuwa kopie zapasowe plików, utworzone przez usługę Volume Shadow Copies poleceniem vssadmin.exe Delete Shadows /All /Quiet.
Wszystkie operacje kryptograficzne w obecnej wersji malware’u wykonywane są przy pomocy dołączonej statycznie biblioteki LibTomCrypt (biblioteka ta pojawiała się dotychczas głównie we wczesnych wersjach), aczkolwiek obserwowane są również warianty wykorzystujące wyłącznie CryptoAPI. W nowej wersji zmieniło się również rozszerzenie ustawiane zaszyfrowanym plikom (poprzednio było to .encrypted, w tej chwili skrócono je do .enc).
Komunikacja z serwerem C&C
Protokół komunikacyjny na przełomie kolejnych wersji nie ulegał dużym zmianom. Jedyną modyfikacją jest dodatkowe pole w strukturze komunikatu, zawierające zewnętrzny adres IP komputera. Pole to jest związane z wykorzystywaniem przez serwer C&C usługi geolokalizacji, aby móc dostarczać komunikaty o płatności w języku ojczystym zainfekowanego użytkownika.
Przed wysłaniem żądania do domeny w sieci Tor, za każdym razem malware odpytuje o adres IP następujące serwisy:
- http://ipecho.net/plain
- http://myexternalip.com/raw
- http://wtfismyip.com/text
Komunikacja z C&C jest zrealizowana w oparciu o HTTPS i Tor. Próbka zawiera zwykle jeden adres HTTPS i trzy adresy .onion. W przypadku, gdy komunikacja nie powiedzie się przy pomocy pierwszego adresu, odpytywane są adresy z Tora za pośrednictwem osadzonej biblioteki.
Komunikaty mają postać żądań POST (HTTPS: /topic.php, Tor: /topic2.php) i mają następującą strukturę:
Zarówno żądania, jak i odpowiedzi są zaszyfrowane kluczem AES osadzonym w próbce.
Na samym początku, aby sprawdzić dostępność serwera i pobrać pliki z informacją o płatności, przed rozpoczęciem szyfrowania próbka wykonuje żądanie z command=0.
W odpowiedzi dostarczane są trzy pliki:
- dokument HTML (wyświetlany w oknie i otwierany w przeglądarce)
- plik tekstowy (wyświetlany w Notatniku)
- obrazek PNG (nowość!), który jest ustawiany jako tapeta na pulpicie
Zdeszyfrowane żądanie:
… i fragment odpowiedzi:
Następnie (jak wspomniano wcześniej) wysyłany jest wygenerowany klucz szyfrujący (command=1). Po zakończeniu szyfrowania wysyłana jest liczba zaszyfrowanych plików (command=2).
Pozostałe numery żądań są wykorzystywane przez kod pozyskujący maile.
Wykradanie danych i pozyskiwanie kolejnych ofiar
TorrentLocker dodatkowo pozyskuje z komputera ofiary dane dostępowe do poczty e-mail. W poprzednich wersjach ransomware wspierał wyłącznie Outlook Express. Hasła i adresy były pozyskiwane z rejestru i książki adresowej zawartej w plikach abook.mab i history.mab.
W najnowszych wersjach, wsparcie poszerzyło się o Thunderbird. Oprócz działania podobnego jak w przypadku Outlooka, ransomware dodatkowo wczytuje bazę z indeksem wiadomości (z pliku global-messages-db.sqlite) i przeszukuje skrzynkę odbiorczą pod kątem adresów e-mail.
Wszystkie pozyskane dane wysyłane są do serwera C&C.
Jak zapobiec infekcji?
Tak jak w przypadku wielu odmian ransomware’u, najpewniejszą metodą na odzyskanie plików jest przywrócenie ich z aktualnej kopii zapasowej. Z pewnością nie powinniśmy jednak polegać na mechanizmach działających lokalnie (takich jak np. wspomniane wcześniej VSS).
Ponadto powinniśmy zachować podstawowe środki ostrożności – zwracać uwagę na rozszerzenia załączników (nawet jeżeli nazwa i ikona sugerują, iż jest to dokument), regularnie aktualizować oprogramowanie i śledzić na bieżąco doniesienia o kampaniach pojawiających się w Polsce (np. na naszej stronie).
Informacje dodatkowe
Więcej informacji można znaleźć pod poniższymi linkami:
Skrót MD5 próbki: 080a32ea6c6ef0f1d90133376b56227f (kampania main-6)
Lista zdekodowanych stringów znalezionych w próbce (wraz z identyfikatorami) tutaj.
Domeny:
borndorn.net
anbqjdoyw6wkmpeu.onion
ojmekzw4mujvqeju.onion
4w5wihkwyhsav2ha.onion
Klucz publiczny RSA:
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LrTxrnan3wlqkeCrO8j
L/BlcjS3yOh/YZ9vH5uRw4RvHY86JpsKaJLQ1WajkY9bgO6w9an9l9dtJch70joD
o+aQfzpQIb1HUwrOmrxICO18zyhvkH+vXBSuDmQBFvuPMu8g1R4cpo9TzR0XCSEn
BjDBhNirSBRmfSjhWMhLMcrrAUJ986+ucLdjQtBrDyTIlYZ8/H83T+rbkBE2sLbY
D7HSBtosPArg18hC6fgDJ2V4tADmLx/wk3k8JKeQ0OXbBqVbzWbYzODIJ/VibKNg
mE278RS9KR3f+0P38/ztf81SH4ZK5kjqN6qLL0AyUfQpm7bOpQHSpwOdhA0i/8M5
lMzZj1wdfp3UDoPpAyH4fc6mpgt1OjN5Rj5PjQj/bEPM/Rz67LCdFY3LbI5rCyxm
9V4UVTOJdAavByDUa8PKEY++XMKjEjTskDD4Io3tD+54rmr4/WPoRPlrQ+Bj4o7I
DSvrMGsnEudhcO7qMlQ5JszHDejk5QF8glsiWsCHVxmZqsHFNYxBKGgtvUxvokgv
+yxo6twfC/hC1wJHhWofINDABxIYqgVOg4GJEs0gA1v8FByNg6pss2W/oNcYDuiZ
7R/9vHAUHzMBVNaXq9Rz5h61pLFjEpIrfzO8ctAq3+wDdltyTbz40D7G4+zPHV2t
PW9R7I4fmgDQMM4SimN8NcUCAwEAAQ==
-----END PUBLIC KEY-----
Reguła YARA:
rule torrentlocker : ransomware
{
meta:
author="psrok1"
module="torrentlocker"
strings:
$TORUrls = { 81 3d [4] 87 56 43 12 74 ?? 68 [4] ff 15 [4] c7 05 [4] 87 56 43 12 68 ?? ?? ?? ?? }
$StringDecrypter = { 8b [6] 8a [5] 32 ?? ?? 88 ?? ?? 4? 3b [6] 72 ?? }
$VersionId = { 0f b7 ?? 8d ?? ?? 66 89 [3] 66 85 ?? 75 ?? b? [4] 8? ?? 2? ?? 8d ?? ?? ?? }
$SenderByHTTPS = { 8b [5] 83 e? 74 8b [6] 5? 8? ?? 8d [3] e8 [4] b? [4] 8d [3] e8 ?? ?? ?? ?? }
$SetAES = { 5? 6a 04 6a 00 ff 35 [4] ff 15 [4] 8? ?? 85 ?? 74 ?? b? [4] e8 [4] 89 ?? 85 ?? 75 ?? 5? 5? ff 35 ?? ?? ?? ?? }
$RSAPublicKey = { 5? 5? 5? 5? 68 [4] 68 [4] 6a ?? 68 01 00 01 00 6a 08 68 ?? ?? ?? ?? 6a ?? e8 ?? ?? ?? ?? }
condition:
($TORUrls or $StringDecrypter) and ($VersionId or $SenderByHTTPS or $SetAES or $RSAPublicKey)
}