Duqu to złośliwa matrioszka

Wprowadzenie

1 września 2011 roku do serwisu VirusTotal został wysłany z Węgier plik o nazwie ~DN1.tmp. W tamtym czasie plik był wykrywany jako szkodliwy tylko przez dwa silniki antywirusowe – BitDefender i AVIRA. Tak zaczęła się historia Duqu. Patrząc w przyszłość, należy stwierdzić, że rodzina szkodliwego oprogramowania Duqu została nazwana od nazwy tego pliku. Jednakże plik ten jest całkowicie niezależnym modułem oprogramowania szpiegującego z funkcjami keyloggera, instalowanym prawdopodobnie przy użyciu złośliwego narzędzia downloader-dropper i może być uważany jedynie za „ładunek” ładowany przez szkodliwe oprogramowanie Duqu podczas jego działania, a nie jako komponent ( moduł) Duqu. Jeden z komponentów Duqu został wysłany do serwisu Virustotal dopiero 9 września. Jego cechą charakterystyczną jest sterownik podpisany cyfrowo przez firmę C-Media. Część ekspertów natychmiast zaczęła szukać analogii z innym znanym przykładem szkodliwego oprogramowania – Stuxnetem, który również wykorzystywał podpisane sterowniki. Całkowita liczba komputerów zainfekowanych Duqu wykrytych przez różne firmy antywirusowe na całym świecie liczy się w dziesiątkach. Wiele firm twierdzi, że głównym celem ponownie jest Iran, jednak sądząc po geograficznym rozmieszczeniu infekcji, nie można tego stwierdzić z całą pewnością.
Duqu to złośliwa matrioszka
W takim przypadku powinieneś śmiało mówić tylko o innej firmie za pomocą nowomodnego słowa APT (zaawansowane trwałe zagrożenie).

Procedura wdrożenia systemu

Dochodzenie przeprowadzone przez specjalistów z węgierskiej organizacji CrySyS (Węgierskie Laboratorium Kryptografii i Bezpieczeństwa Systemów na Uniwersytecie Technologiczno-Ekonomicznym w Budapeszcie) doprowadziło do wykrycia instalatora (droppera), za pośrednictwem którego doszło do zainfekowania systemu. Był to plik Microsoft Word zawierający exploit wykorzystujący lukę w sterowniku win32k.sys (MS11-087, opisany przez Microsoft 13 listopada 2011 r.), który odpowiada za mechanizm renderowania czcionek TTF. Kod powłoki exploita wykorzystuje czcionkę o nazwie „Dexter Regular” osadzoną w dokumencie, której twórcą jest firma Showtime Inc. Jak widać, twórcom Duqu nie jest obce poczucie humoru: Dexter to seryjny morderca, bohater serialu telewizyjnego o tym samym tytule, produkowanego przez Showtime. Dexter zabija tylko (jeśli to możliwe) przestępców, czyli łamie prawo w imię legalności. Prawdopodobnie w ten sposób twórcy Duqu ironizują, że angażują się w nielegalną działalność w dobrych celach. Wysyłanie e-maili było celowe. W przesyłce najprawdopodobniej wykorzystano skompromitowane (zhakowane) komputery jako pośrednik utrudniający śledzenie.
Dokument programu Word zawierał zatem następujące elementy:

  • treść tekstowa;
  • wbudowana czcionka;
  • wykorzystać kod powłoki;
  • kierowca;
  • instalator (biblioteka DLL).

Jeśli się powiedzie, kod powłoki exploita wykonuje następujące operacje (w trybie jądra):

  • przeprowadzono kontrolę pod kątem ponownej infekcji, w tym celu sprawdzono obecność klucza „CF4D” w rejestrze pod adresem „HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsZones1”; jeśli było to prawidłowe, kod powłoki zakończył swoje wykonanie;
  • odszyfrowano dwa pliki - sterownik (sys) i instalator (dll);
  • sterownik został wstrzyknięty do procesu Services.exe i uruchomił instalator;
  • Na koniec kod powłoki wymazał się z zerami w pamięci.

Ze względu na fakt, że win32k.sys jest wykonywany w imieniu uprzywilejowanego użytkownika „System”, programiści Duqu elegancko rozwiązali problem zarówno nieautoryzowanego uruchomienia, jak i eskalacji uprawnień (działanie w ramach konta użytkownika z ograniczonymi uprawnieniami).
Po otrzymaniu kontroli instalator odszyfrował trzy bloki danych zawarte w jego pamięci, zawierające:

  • podpisany sterownik (sys);
  • moduł główny (dll);
  • dane konfiguracyjne instalatora (pnf).

W danych konfiguracyjnych instalatora został podany zakres dat (w postaci dwóch znaczników czasu – początku i końca). Instalator sprawdzał, czy zawarta jest w nim bieżąca data, a jeśli nie, zakończył jej wykonanie. Również w danych konfiguracyjnych instalatora znajdowały się nazwy, pod którymi zapisano sterownik i moduł główny. W tym przypadku moduł główny został zapisany na dysku w formie zaszyfrowanej.

Duqu to złośliwa matrioszka

Aby automatycznie uruchomić Duqu, utworzono usługę wykorzystującą plik sterownika, który na bieżąco odszyfrowywał moduł główny przy użyciu kluczy przechowywanych w rejestrze. Moduł główny zawiera własny blok danych konfiguracyjnych. Przy pierwszym uruchomieniu został odszyfrowany, wpisano do niego datę instalacji, po czym został ponownie zaszyfrowany i zapisany przez moduł główny. Zatem w zaatakowanym systemie po pomyślnej instalacji zapisano trzy pliki - sterownik, moduł główny i plik danych konfiguracyjnych, natomiast dwa ostatnie pliki zostały zapisane na dysku w postaci zaszyfrowanej. Wszystkie procedury dekodowania przeprowadzono wyłącznie w pamięci. Ta złożona procedura instalacji została zastosowana, aby zminimalizować możliwość wykrycia przez oprogramowanie antywirusowe.

Główny moduł

Moduł główny (zasób 302), wg informacja firmy Kaspersky Lab, napisany przy użyciu MSVC 2008 w czystym C, ale przy użyciu podejścia obiektowego. Takie podejście jest nietypowe w przypadku tworzenia złośliwego kodu. Z reguły taki kod jest pisany w C, aby zmniejszyć rozmiar i pozbyć się ukrytych wywołań właściwych dla C++. Panuje tu pewna symbioza. Dodatkowo zastosowano architekturę sterowaną zdarzeniami. Pracownicy Kaspersky Lab skłaniają się do teorii, że moduł główny został napisany przy użyciu dodatku do preprocesora, który umożliwia pisanie kodu C w stylu obiektowym.
Moduł główny odpowiada za procedurę otrzymywania poleceń od operatorów. Duqu udostępnia kilka metod interakcji: przy użyciu protokołów HTTP i HTTPS, a także przy użyciu nazwanych potoków. Dla protokołu HTTP(S) określono nazwy domen centrów dowodzenia oraz zapewniono możliwość pracy poprzez serwer proxy – określono dla nich nazwę użytkownika i hasło. Dla kanału podany jest adres IP i jego nazwa. Podane dane przechowywane są w głównym bloku danych konfiguracyjnych modułu (w formie zaszyfrowanej).
Aby móc korzystać z nazwanych potoków, uruchomiliśmy własną implementację serwera RPC. Obsługuje następujące siedem funkcji:

  • zwróć zainstalowaną wersję;
  • wstrzyknij bibliotekę dll do określonego procesu i wywołaj określoną funkcję;
  • załaduj bibliotekę dll;
  • rozpocznij proces, wywołując funkcję CreateProcess();
  • odczytać zawartość danego pliku;
  • zapisz dane do określonego pliku;
  • usuń określony plik.

Nazwane potoki mogą być używane w sieci lokalnej do dystrybucji zaktualizowanych modułów i danych konfiguracyjnych pomiędzy komputerami zainfekowanymi Duqu. Ponadto Duqu mógł działać jako serwer proxy dla innych zainfekowanych komputerów (które nie miały dostępu do Internetu ze względu na ustawienia zapory ogniowej na bramie). Niektóre wersje Duqu nie posiadały funkcjonalności RPC.

Znane „ładunki”

Symantec odkrył co najmniej cztery typy ładunków pobranych na polecenie z centrum kontroli Duqu.
Co więcej, tylko jeden z nich był rezydentny i skompilowany jako plik wykonywalny (exe), który został zapisany na dysku. Pozostałe trzy zostały zaimplementowane jako biblioteki dll. Były ładowane dynamicznie i wykonywane w pamięci bez zapisywania na dysku.

Rezydującym „ładunkiem” był moduł szpiegowski (złodziej informacji) z funkcjami keyloggera. To właśnie od wysłania go do VirusTotal rozpoczęły się prace nad badaniami Duqu. Główną funkcjonalnością szpiegowską był zasób, którego pierwsze 8 kilobajtów zawierało część zdjęcia galaktyki NGC 6745 (dla kamuflażu). Warto w tym miejscu przypomnieć, że w kwietniu 2012 roku część mediów opublikowała informację (http://www.mehrnews.com/en/newsdetail.aspx?NewsID=1297506), że Iran został narażony na działanie szkodliwego oprogramowania „Stars”, zaś szczegóły dotyczące zdarzenie nie zostało ujawnione. Być może właśnie taką próbkę „ładunku” Duqu odkryto wówczas w Iranie, stąd nazwa „Gwiazdy”.
Moduł szpiegowski zebrał następujące informacje:

  • lista uruchomionych procesów, informacje o bieżącym użytkowniku i domenie;
  • lista dysków logicznych, w tym dysków sieciowych;
  • zrzuty ekranu;
  • adresy interfejsów sieciowych, tablice routingu;
  • plik dziennika naciśnięć klawiszy klawiatury;
  • nazwy otwartych okien aplikacji;
  • lista dostępnych zasobów sieciowych (udostępnianie zasobów);
  • pełna lista plików na wszystkich dyskach, w tym na dyskach wymiennych;
  • lista komputerów w „środowisku sieciowym”.

Kolejny moduł szpiegowski (złodziej informacji) była odmianą tego, co już opisano, ale skompilowaną jako biblioteka dll; usunięto z niej funkcje keyloggera, tworzącego listę plików i wyświetlającego listę komputerów wchodzących w skład domeny.
Następny moduł (rekonesans) zebrane informacje o systemie:

  • czy komputer jest częścią domeny;
  • ścieżki do katalogów systemu Windows;
  • wersja systemu operacyjnego;
  • aktualna nazwa użytkownika;
  • lista kart sieciowych;
  • system i czas lokalny, a także strefa czasowa.

Ostatni moduł (przedłużacz żywotności) zaimplementowano funkcję zwiększania wartości (przechowywanej w głównym pliku danych konfiguracyjnych modułu) liczby dni pozostałych do zakończenia zadania. Domyślnie wartość ta była ustawiona na 30 lub 36 dni w zależności od modyfikacji Duqu i zmniejszała się o jeden dzień.

Centra dowodzenia

W dniu 20 października 2011 r. (trzy dni po rozpowszechnieniu informacji o odkryciu) operatorzy Duqu przeprowadzili procedurę mającą na celu zatarcie śladów funkcjonowania centrów dowodzenia. Centra dowodzenia znajdowały się na zhakowanych serwerach na całym świecie – w Wietnamie, Indiach, Niemczech, Singapurze, Szwajcarii, Wielkiej Brytanii, Holandii i Korei Południowej. Co ciekawe, na wszystkich zidentyfikowanych serwerach działał CentOS w wersjach 5.2, 5.4 lub 5.5. Systemy operacyjne były zarówno 32-bitowe, jak i 64-bitowe. Pomimo faktu, że wszystkie pliki związane z działaniem centrów dowodzenia zostały usunięte, specjalistom z Kaspersky Lab udało się odzyskać część informacji z plików LOG z wolnej przestrzeni. Najciekawszym faktem jest to, że atakujący na serwerach zawsze zastępowali domyślny pakiet OpenSSH 4.3 wersją 5.8. Może to wskazywać, że do zhakowania serwerów wykorzystano nieznaną lukę w OpenSSH 4.3. Nie wszystkie systemy służyły jako centra dowodzenia. Niektóre, sądząc po błędach w logach sshd podczas próby przekierowania ruchu dla portów 80 i 443, były używane jako serwer proxy do łączenia się z końcowymi centrami dowodzenia.

Daty i moduły

Dokument programu Word rozesłany w kwietniu 2011 r., który został zbadany przez Kaspersky Lab, zawierał instalator sterownika do pobrania z datą kompilacji 31 ​​sierpnia 2007 r. Podobny sterownik (rozmiar - 20608 bajtów, MD5 - EEDCA45BD613E0D9A9E5C69122007F17) w dokumencie znalezionym w laboratoriach CrySys miał datę kompilacji 21 lutego 2008. Ponadto eksperci z Kaspersky Lab znaleźli sterownik autorun rndismpc.sys (rozmiar - 19968 bajtów, MD5 - 9AEC6E10C5EE9C05BED93221544C783E) z datą 20 stycznia 2008. Nie znaleziono żadnych elementów oznaczonych rokiem 2009. Sądząc po sygnaturach czasowych kompilacji poszczególnych części Duqu, jego rozwój można datować na początek 2007 roku. Jego najwcześniejszy przejaw jest związany z wykryciem plików tymczasowych typu ~DO (prawdopodobnie utworzonych przez jeden z modułów spyware), których data utworzenia to 28 listopada 2008 (artykuł „Duqu i Stuxnet: kalendarium ciekawych wydarzeń”). Ostatnią datą powiązaną z Duqu był 23 lutego 2012 r., podany w instalatorze sterownika do pobrania wykrytym przez firmę Symantec w marcu 2012 r.

Wykorzystane źródła informacji:

seria artykułów o Duqu z Kaspersky Lab;
Raport analityczny firmy Symantec „W32.Duqu Prekursor następnego Stuxneta”, wersja 1.4, listopad 2011 (pdf).

Źródło: www.habr.com

Dodaj komentarz