Analiza techniczna rodziny CryptoMix/CryptFile2

Data publikacji: 04/01/2017, Jarosław Jedynak

skull and crossbones malware

Kampania

CryptoMix to kolejna rodzina ransomware która próbuje zdobyć pieniądze dla swoich twórcow przez szyfrowanie plików ofiar i wymuszanie na nich okupu za odszyfrowanie ich.
Do niedawna była znana bardziej jako CryptFile2, ale z nieznanych nam powodów została rebrandowana i teraz jest rozpoznawalna jako CryptoMix.
Została zaobserwowana niedawno jako malware serwowane przez Rig-V exploit kit.

Ten malware wyróżnia się na tle innych popularnych odmian, ale niekoniecznie pozytywnie.

Cena

Pierwszą ciekawą rzeczą jest bardzo wysoki okup – 5 bitcoinów to naprawdę dużo pieniędzy (szczególnie biorąc pod uwagę że CryptoMix jest naprawdę prostym programem, ale do tego wrócimy). Nie wiemy jak wiele ofiar zapłaciło, ale biorąc pod uwage skalę kampanii prawdopodobnie niejedna osoba się na to zdecydowała.

Dodatkowo natrafiliśmy na taki komentarz, zniechęcający do płacenia okupu:

DO NOT PAY FOR THIS!!!
we were infected and they asked for 10 bitcoins, after some negotiations the price was lowered to 6 bitcoins. they provided 1 decrypted file to prove concept. we paid 6 bitcoins and they asked for another .6 as the c&c server will not provide the key due to late payment. after promptly paying another .6 bitcoins (about $4800 in total) there has been no communication from them! its been 2 weeks and nothing.
WHATEVER YOU DO, DO NOT TRUST THEM, THEY WILL NOT DECRYPT YOUR FILES!!!!

W wolnym tłumaczeniu na język polski:

NIE PŁAĆCIE OKUPU!!!
zostaliśmy zainfekowani i prosili o 10 bitcoinów, po negocjacjach cena została obniżona do 6 bitcoinów. dostarczyli 1 zdeszyfrowany plik jako dowód. zapłaciliśmy 6 bitcoinów i poprosili o kolejne .6 bitcoina bo c&c nie chciał dostarczyć klucza z powodu późnej płatności. zapłaciliśmy kolejne .6 bitcoina i nie było żadnej komunikacji od nich! to już dwa tygodnie i nic.
COKOLWIEK ROBISZ, NIE UFAJ IM, NIE ZDESZYFRUJĄ ONI TWOICH PLIKÓW!!!!

Nie jesteśmy w stanie zweryfikować prawdziwości tej historii, ale brzmi ona możliwie – jeśli ktoś jest tak zdeterminowany żeby zapłacić 6 bitcoinów, może też zostać skłoniony do zapłacenia więcej. Jak zwykle, nie zalecamy wspierania przestępców i płacenia okupu. Nie ma żadnej gwarancji, że pliki naprawdę zostaną odszyfrowane – jak w tym przypadku.

Portal z płatnościami

Dodatkowo CryptoMix nie ma żadnego portalu do dokonywania płatności w sieci Tor. A w zasadzie, nie ma żadnego portalu do dokonywania płatności – ofiary muszą napisać na adres email podany przez przestępców i dosłownie poczekać do 12 godzin zanim zdecydują się oni (albo nie) wysłać klucze do deszyfrowania.

Przykładowo, wiadomość może wyglądać tak (najnowszy wariant):

Albo tak:

Nie uważamy żeby ta strategia była dobrze przemyślana. Po pierwsze, używanie adresów email do komunikacji z ofiarami jest problematyczne i wymaga ciągłej uwagi.
Automatyczny portal byłby dużo bardziej pewny i bezpieczny dla obu stron. Dodatkowo, adresy email łatwo usunąć/zablokować, odcinając autorów malware od ich „klientów”.

Dobroczynność

Zawartość wymienionych emaili również jest bardzo nietypowa. Autorzy twierdzą że są organizacją charytatywną (!), która chce kupić prezenty i leki dla dzieci. Przykładowo:

To naprawdę oryginalne, ale niestety oczywiście również fałszywe.

Analiza techniczna

Zostawiając w tyle dziwości związane z interfejsem ransomwaru, przejdźmy do bardziej technicznych tematów. W swoim sercu, CryptoMix jest tylko prostym programem szyfrującym. Nie ma żadnych dodatkowych funkcjonalności: nie ma portalu webowego, nie zmienia tapety po szyfrowaniu, nie namawia użytkownika do zainfekowania znajomych, etc.

CryptoMix jest chroniony przez bardzo prymitywny packer – prawdziwa binarka jest trzymana w zasobach, po xorowaniu z hardkodowanym kluczcem. Z jakiegoś powodu Cuckoo ma kłopoty z automatycznym odpakowywaniem cryptomixera, więc musieliśmy napisać nasz własny unpacker. Używając biblioteki pefile i narzędzia Yara jest to bardzo proste:

Po deszyfrowaniu, ransomware sprawdza czy jest debugowany, ale nie sprawdza czy jest wirtualizowany – więc wszystko działa dobrze pod maszyną wirtualną.

Zanim szyfrowanie plików się rozpocznie, CryptoMix sprawdza połączenie z internetem (używając funkcji InternetOpenUrl). Jeśli wszystko jest ok, klucz Rsa jest generowany na komputerze ofiary i wysyłany do serwera C&C. W przeciwnym wypadku, zależnie od wariantu malware, albo używany jest klucz hardkodowany w binarce, albo malware czeka w nieskończonej pętli, aż połączenie zostanie przywrócone.

Główna funkcja może być przedstawiona tak:

Po tym jak klucz szyfrujący zostanie wybrany, jest on zapisywany w rejestrze windows. Klucz rejestru który jest używany do przechowywania danych zależy od wersji, używane są na przykład SoftWare\Microsoft\Windows\Shell\Nodes Slots, SoftWare\Microsoft\Windows\Shell\FlashPlayerPluginK lub Software\Adobe Reader LicensionSoftWare\AdobeLicensionSoftWare (malware prawdopodobnie próbuje ukryć swoją obecność przez używanie kluczy przypominających zwykłe programy).

Lista wspieranych rozszerzeń zawiera ponad 1250 rozszerzeń:

To całkiem dużo rozszerzeń, ale też nic specjalnego (dla porównania: CryptXXX wspiera 933 rozszerzeń, a CrypMic 901).
Ciekawe jest to, że dołączone są rozszerzenia konkurencyjnych ransomwarów – na przykład .zepto, .locky, .crypt, .locked, .cryptolocker, .cryptowall.

Szyfrowanie

Cofnijmy się na chwilę do żądania o okup:

Malware twierdzi że nasze pliki są „zaszyfrowanie 2048bitowym KLUCZEM RSA”. Cóż, to nie do końca prawda. Tak, jest generowany 2048bitowy klucz RSA za pomocą windowsowego Crypto API – ale po tym jak klucz zostanie wybrany, jest on hashowany za pomocą SHA256, żeby stworzyć faktyczny klucz szyfrujący, i wszystkie pliki na dysku są szyfrowane tym kluczem. Użyty algorytm szyfrujący to AES 256 w trybie CBC bez IV.

Funkcja szyfrująca może być podsumowana takim kodem (po uproszczeniu):

Ta funkcja jest wykonywana dla każdego pliku, więc hashowanie rsaKey i tworzenie z niego nowego klucza AES nie ma żadnego sensu – można to zrobić raz na początku. Ale jest też większy problem z tą funkcją – nie ma tu czegoś takiego jak klucz publiczny i prywatny, bo szyfrowanie jest w pełni symetryczne. RSA służy tutaj w zasadzie tylko jako (niepotrzebnie powolny) generator liczb losowych.

Więc tak, w pewnym sensie klucz RSA jest „używany do szyfrowania”, ale klucze nie są szyfrowane za pomocą RSA i całe szyfrowanie jest symetryczne.

UserID (id użytkownika) nadawane przez CryptoMix nie jest w pełni losowe – jest generowane z nazwy użytkownika w systemie i serial number dla pierwszego dysku.

To nie brzmi jak dobry pomysł, bo UserID absolutnie musi być unikalne – a ani nazwa użytkownika ani numer seryjny nie zostały zaprojektowane po to żeby być unikalne. Z tego powodu kolizje ID użytkownika są możliwe i całkiem prawdopodobne (biorąc pod uwagę niską entropię i paradoks urodzinowy).

Dlaczego to problem? Bo kiedy kolizja ID użytkownika się zdarza, twórcy malware nie moga rozróżnić dwóch użytkowników z takim samym ID od siebie – mogą się zdarzyć wtedy dwie rzeczy:

    • nie wiadomo który klucz wysłać użytkonikowi po zapłaceniu, bo do jego UserID pasują dwa klucze (optymistyczny scenariusz)
    • nowy klucz dla danego UserID nadpisuje stary i tylko jeden z dwóch użytkowników ma szansę na odzyskanie plików – pliki drugiego są stracone na zawsze.

Ostatecznie, CryptoMix osiąga persystencję przez skopiowanie się do dokumentów użytkownika i zapisanie do klucza HKEY_CURRENT_USER\SoftWare\Microsoft\Windows\CurrentVersion\Run.

Jako ostatnia akcja usuwane są Shadow Copies, żeby nie można było przywrócić starych plików (jeśli użytkownik nie ma praw admina, najpierw wyświetlane jest okienko UAC):

Dekryptor CryptoMix

Z powodu problemu kryptograficznego w algorytmie szyfrowania, jesteśmy w stanie odszyfrować pliki zaszyfrowane CryptoMixem (i CryptFile2), ale tylko czasami i tylko jeśli pliki były zaszyfrowane za pomocą podatnej wersji. Jeśli Twoje pliki zostały zaszyfrowane CryptoMixem i nie chcesz płacić okupu, możesz skontaktować się z nami na adres [email protected] i zobaczymy co jestesmy w stanie zrobić. Proszę dołącz pojedynczy zaszyfrowany plik bez zmieniania jego nazwy po zaszyfrowaniu (na przykład warnings.h.email[[email protected]]id[7e5973f5e0ce337d].lesli).

Hashe/reguły Yara

Packer CryptoMix (stary i nowy):

Payload CryptoMix (po odpakowaniu):

hashe:

c2f30cd537c79b6bcd292e6824ea874e sample0

befc0e43b38fe467ddc3ddd73150a9fc sample0 decrypted

8c413e31f39a54abf78c3585444051f7 sample1

0d1206246bf15c521474cee42f13fc09 sample1 decrypted

b778bda5b97228c6e362c9c4ae004a19 sample2

042a38a32cd20e3e190bb15b085b430a sample2 decrypted