Stuxnet/Duqu: ewolucja sterownik贸w

Aleksander Gostiew, ekspert z Kaspersky Lab
Igor So艂menkow, ekspert z Kaspersky Lab

Od dw贸ch miesi臋cy badamy trojana Duqu, pr贸buj膮c ustali膰, w jaki spos贸b pojawi艂 si臋 ten szkodnik, w jakich miejscach by艂 rozprzestrzeniany i w jaki spos贸b dzia艂a. Mimo ogromnej ilo艣ci uzyskanych danych (z kt贸rych wi臋kszo艣膰 nie zosta艂a jeszcze opublikowana) nadal nie znamy odpowiedzi na podstawowe pytanie - kto stoi za Duqu?

Istniej膮 r贸wnie偶 inne kwestie, w wi臋kszo艣ci dotycz膮ce stworzenia tego trojana lub raczej platformy wykorzystywanej do implementacji Duqu oraz Stuxneta.

Pod wzgl臋dem architektury platforma wykorzystana do stworzenia Duqu i Stuxneta jest taka sama. Jest to plik sterownika, kt贸ry 艂aduje g艂贸wny modu艂 w postaci zaszyfrowanej biblioteki. Jednocze艣nie istnieje osobny plik konfiguracyjny dla ca艂ego szkodliwego "zespo艂u" oraz zaszyfrowany blok w rejestrze systemowym, kt贸ry okre艣la lokalizacj臋 艂adowanego modu艂u i nazw臋 procesu do wstrzykni臋cia.


Konwencjonalna architektura platformy dla Stuxneta i Duqu

Platform臋 mo偶na okre艣li膰 nazw膮 "Tilded", poniewa偶 z jakich艣 powod贸w jej autorzy stosuj膮 nazwy plik贸w rozpoczynaj膮ce si臋 od znaku tyldy i litery d: "~d".

Uwa偶amy, 偶e Duqu i Stuxnet stanowi艂y r贸wnoleg艂e projekty wspierane przez ten sam zesp贸艂 tw贸rc贸w.

Na jaw wysz艂y r贸wnie偶 inne szczeg贸艂y sugeruj膮ce, 偶e w latach 2007-2008 istnia艂 prawdopodobnie jeszcze jeden modu艂 spyware oparty na tej samej platformie oraz kilka innych program贸w, kt贸rych funkcjonalno艣膰 nie by艂a jasna mi臋dzy 2008 a 2010 rokiem.

Fakty te w powa偶nym stopniu podwa偶aj膮 "oficjaln膮" histori臋 Stuxneta. Postaramy si臋 przytoczy膰 je w tym artykule, najpierw jednak podsumujemy to, co wiadomo na temat tego szkodnika.

"Oficjalna" historia Stuxneta

Zacznijmy od pytania: jak wiele plik贸w sterownik贸w Stuxneta jest znanych? Na dzie艅 dzisiejszy odpowied藕 brzmi: cztery. Wi臋cej informacji na ich temat zawiera tabela poni偶ej.

Nazwa pliku Rozmiar (w bajtach) Data kompilacji Gdzie i kiedy zosta艂 wykorzystany Podpis cyfrowy/data podpisu
Mrxcls.sys 19840 01.01.2009 Stuxnet (22.06.2009) Nie
Mrxcls.sys 26616 01.01.2009 Stuxnet (01.03.2010/14.04.2010) Realtek, 25.01.2010
Mrxnet.sys 17400 25.01.2010 Stuxnet (01.03.2010/14.04.2010) Realtek, 25.01.2010
Jmidebs.sys 25552 14.07.2010 prawdopodobnie Stuxnet Jmicron, data nieznana

Pierwsza modyfikacja robaka Stuxnet, stworzona w 2009 roku, wykorzystywa艂a tylko jeden plik sterownika - mrxcls.sys bez podpisu cyfrowego.

W 2010 roku autorzy szkodnika stworzyli drugi sterownik mrxnet.sys (w celu ukrycia plik贸w komponent贸w robaka na urz膮dzeniach USB) i wyposa偶yli sterowniki mrxnet.sys oraz mrxcls.sys w cyfrowe certyfikaty Realtek. Sterownik mrxnet.sys nie odgrywa znacz膮cej roli w naszej opowie艣ci, poniewa偶 jest to oddzielny modu艂, kt贸ry nie stanowi cz臋艣ci og贸lnej architektury platformy.

17 lipca 2010 roku ESET wykry艂 kolejny sterownik "na wolno艣ci" - jmidebs.sys - kt贸ry by艂 bardzo podobny do znanego ju偶 mrxcls.sys, ale zosta艂 stworzony zaledwie trzy dni przed wykryciem. Sterownik zosta艂 opatrzony nowym certyfikatem - tym razem wydanym przez Jmicron.

Do niedawna nie by艂o wiadomo, jaki jest cel tego pliku, jednak powszechnie uwa偶ano, 偶e by艂 spokrewniony ze Stuxnetem. Wed艂ug jednej z teorii, centrum kontroli Stuxneta pr贸bowa艂o zast膮pi膰 star膮 wersj臋 z certyfikatem Realtek now膮. Autorzy robaka albo mieli nadziej臋, 偶e w ten spos贸b uniemo偶liwi膮 wykrycie go przez programy antywirusowe, albo zast膮pili certyfikat, kt贸ry zosta艂 zablokowany.

Niestety, teoria ta nie zosta艂a potwierdzona - Jmidebs.sys nigdy nie zosta艂 nigdzie wykryty. Nie znaleziono r贸wnie偶 nowej wersji Stuxneta potrafi膮cej zainstalowa膰 ten plik.

Taka jest oficjalna historia o Stuxnecie. Jednak, jak ju偶 wspomnia艂em wy偶ej, w trakcie naszych bada艅 odkryli艣my nowy dow贸d, kt贸ry zostanie om贸wiony w dalszej cz臋艣ci tego tekstu.

Nieznane wcze艣niej sterowniki

rtniczw.sys

Podczas analizowania incydentu z udzia艂em Duqu, kt贸rego ofiar膮 pad艂 jeden z u偶ytkownik贸w, wykryli艣my co艣 nowego - co艣, co potencjalnie mog艂o mie膰 wp艂yw na wszystko, co wiemy na temat Stuxneta.

Na komputerze ofiary zosta艂 znaleziony nietypowy plik, wykryty przez nasz silnik antywirusowy jako Rootkit.Win32.Stuxnet.a. Werdykt mia艂 odpowiada膰 znanemu plikowi mrxcls.sys, kt贸ry zosta艂 opisany wy偶ej, jednak nazwa wykrytego pliku i suma kontrolna r贸偶ni艂y si臋!

Plik ten to rtniczw.sys, o rozmiarze 26 872 bajt贸w, MD5 546C4BBEBF02A1604EB2CAAAD4974DE0.

Plik mia艂 troch臋 wi臋kszy rozmiar ni偶 mrxcls.sys, kt贸ry posiada艂 podpis cyfrowy Realtek. To sugerowa艂o, 偶e rtniczw.sys r贸wnie偶 posiada podpis cyfrowy. Uda艂o nam si臋 zdoby膰 kopi臋 tego pliku i ze zdziwieniem stwierdzili艣my, 偶e stosowa艂 ten sam certyfikat Realteka, ale z inn膮 dat膮 podpisu pliku ni偶 mrxcls.sys: rtniczw.sys zosta艂 podpisany 18 marca 2010 roku, podczas gdy sterownik mrxcls zosta艂 podpisany 25 stycznia tego samego roku.

 
Mrxcls.sys

 
Rtniczw.sys


Ponadto, rtniczw.sys stosowa艂 klucz rejestru oraz blokad臋 danych konfiguracyjnych, kt贸ra nie by艂a wykorzystywana w Stuxnecie. Stuxnet u偶ywa艂 klucza "MRxCls" oraz warto艣ci "Data", podczas gdy w przypadku rtniczw.sys, klucz to "rtniczw", a warto艣膰 "Config".

Szczeg贸艂owa analiza kodu wykrytego w rtniczw.sys nie ujawni艂a innych r贸偶nic w stosunku do sterownika "referencyjnego": by艂 to ten sam plik mrxcls.sys, stworzony w tym samym roku, w tym samym dniu i o tej samej godzinie - 1 stycznia 2009 r.

Szukali艣my dodatkowych informacji o innych u偶ytkownikach, kt贸rzy posiadali ten sam plik, ale nie zdo艂ali艣my niczego znale藕膰! Co wi臋cej, w 偶adnej przegl膮darce nie znale藕li艣my 偶adnych informacji o nazwie pliku (rtniczw.sys) lub jego MD5. Plik zosta艂 zidentyfikowany tylko jeden raz: zosta艂 przes艂any do przeskanowania przez VirusTotal z Chin w maju 2011 roku.

Badany przez nas system zosta艂 najwyra藕niej zainfekowany pod koniec sierpnia 2011 roku. Nale偶y podkre艣li膰, 偶e w systemie nie zosta艂a zidentyfikowana infekcja Stuxneta; nie zosta艂y znalezione 偶adne dodatkowe pliki z zestawu Stuxneta. Znale藕li艣my jednak pliki Duqu.

Doszli艣my do wniosku, 偶e mog艂y istnie膰 inne pliki sterownik贸w podobne do pliku "referencyjnego" mrxcls.sys, kt贸re nie nale偶膮 do znanych wariant贸w Stuxneta.

rndismpc.sys

Sprawdzenie naszej kolekcji szkodliwego oprogramowania pomog艂o zidentyfikowa膰 kolejny interesuj膮cy plik, kt贸ry zosta艂 dodany do niej ponad rok temu. Plik mia艂 nazw臋 rndismpc.sys, rozmiar 19 968 bajt贸w i MD5 9AEC6E10C5EE9C05BED93221544C783E.


Okaza艂o si臋, 偶e jest to kolejny sterownik o funkcjonalno艣ci bardzo zbli偶onej do mrxcls.sys z wyj膮tkiem kilku szczeg贸艂贸w:

  1. rndismpc.sys wykorzystuje klucz rejestru, kt贸ry r贸偶ni si臋 od kluczy wykorzystywanych przez mrxcls i rtniczw - jest to klucz "rndismpc" o warto艣ci "Action";
  2. wykorzystuje klucz szyfrowania, kt贸ry r贸偶ni si臋 od tego u偶ywanego przez mrxcls/rtniczw - 0x89CF98B1;
  3. data kompilacji pliku to 20 stycznia 2008 r., tzn. rok przed stworzeniem mrxcls/rtniczw.

Podobnie jak rtniczw.sys, plik rndismpc.sys nigdy nie zosta艂 znaleziony na komputerach u偶ytkownik贸w. Nie wiemy, jaki szkodliwy program zainstalowa艂 go ani z jakim g艂贸wnym modu艂em mia艂 wsp贸艂pracowa膰.

艁膮cz膮ce ogniwo: mrxcls.sys -> jmidebs.sys ->sterowniki Duqu

Uzyskane dane oraz dost臋pne informacje dotycz膮ce sterownik贸w wykorzystywanych w Duqu mo偶na podsumowa膰 w tabeli poni偶ej:

Nazwa Rozmiar Data
kompilacji
G艂贸wny modu艂 Klucz szyfrowania Klucz rejestru Warto艣膰 Nazwa
urz膮dzenia
rndismpc.sys 19968 20.01.
2008
Nieznany 0x89CF98B1 rndismpc "Action" "rndismpc"
mrxcls.sys 19840 01.01.
2009
Stuxnet.a 0xAE240682 MRxCls "Data" "MRxClsDvX"
mrxcls.sys (podpisany) 26616 01.01.
2009
Stuxnet.b/.c 0xAE240682 MRxCls "Data" "MRxClsDvX"
rtniczw.sys (podpisany) 26872 01.01.
2009
Nieznany 0xAE240682 rtniczw "Config" "RealTekDev291"
jmidebs.sys (podpisany) 25502 14.07.
2010
Nieznany 0xAE240682 jmidebs "IDE" {3093983-109232-29291}
<nazwa>.sys* r贸偶ny 03.11.
2010
Duqu 0xAE240682 <nazwa> "FILTER" {3093AAZ3-1092-2929-9391}
<nazwa>.sys* r贸偶ny 17.10.
2011
Duqu 0x20F546D3 <nazwa> "FILTER" {624409B3-4CEF-41c0-8B81-7634279A41E5}

*Znane sterowniki Duqu posiadaj膮 unikatowe nazwy plik贸w dla ka偶dego wariantu. Jednak ich funkcjonalno艣膰 jest ca艂kowicie identyczna.

Wed艂ug naszych analityk贸w, jmidebs.sys jest ogniwem 艂膮cz膮cym mrxcls.sys oraz sterowniki wykorzystane w Duqu w p贸藕niejszym czasie.

Kod sterownik贸w mrxcls i jmidebs jest w du偶ej mierze podobny. Niekt贸re niewielkie r贸偶nice mog膮 by膰 spowodowane r贸偶nymi ustawieniami oraz minimalnymi zmianami w kodzie 藕r贸d艂owym, podczas gdy jego cel pozostaje niezmieniony.

Jednak powa偶niejsze zmiany mo偶na znale藕膰 w kilku funkcjach:

  1. W funkcji obs艂ugi, kt贸ra uzyskuje adresy funkcji API: wersja w mrxcls wykorzystuje w tym celu funkcj臋 MmGetSystemRoutineAddress oraz odpowiednie nazwy tekstowe adres贸w przychodz膮cych funkcji API. Wersja w jmidebs wywo艂uje swoje w艂asne funkcje w celu uzyskania adres贸w API przy u偶yciu sum hash swoich nazw. Te same funkcje s膮 wykorzystywane w sterownikach Duqu, podczas gdy lista hash贸w funkcji jest dwukrotnie d艂u偶sza.
  2. W funkcji tworz膮cej tymczasowe fragmenty kodu (stub) w celu wstrzykni臋cia PNF DLL do proces贸w: wersja mrxcls wykorzystuje stub o ca艂kowitym rozmiarze 6332 bajt贸w. Sterowniki jmidebs i Duqu wykorzystuj膮 stuby o ca艂kowitym rozmiarze 7061 bajt贸w. Kod wykorzystany w modu艂ach stub dla tych sterownik贸w jest identyczny, ale posiada r贸偶ne daty kompilacji.
  Mrxcls (Stuxnet) jmidebs Duqu
API RtlGetVersion, KeAreAllApcsDisabled, uzyskany przez wywo艂anie MmGetSystemRoutineAddress RtlGetVersion, KeAreAllApcsDisabled, PsGetProcessSessionId, PsGetProcessPeb uzyskane przy pomocy ich w艂asnych funkcji podobny do jmidebs, dodano 4 kolejne funkcje
Wstrzykni臋ty EXE 6332 1 stycznia 22:53:23 2009 7061 14 lipca 13:05:31 2010 7061 r贸偶nych dat kompilacji

Ewolucja sterownik贸w

Stworzyli艣my map臋 po艂膮cze艅 mi臋dzy znanymi sterownikami, kt贸rych ewolucja oraz kluczowe etapy rozwoju s膮 艂atwe do wy艣ledzenia.

 
Ewolucja sterownik贸w od 2008 do 2011 roku

rndismpc.sys, rtniczw.sys oraz jmidebs.sys

Jak wida膰 na wykresie, nie wiadomo, kt贸ry szkodliwy program wszed艂 w interakcj臋 z nast臋puj膮cymi trzema sterownikami: rndismpc.sys, rtniczw.sys oraz jmidebs.sys. Oczywiste pytanie brzmia艂oby: czy zosta艂y wykorzystane w Stuxnecie? Wed艂ug nas, odpowied藕 powinna brzmie膰 "nie".

Przede wszystkim, gdyby zosta艂y wykorzystane w Stuxnecie, zajmowa艂yby o wiele wi臋cej miejsca ni偶 poszczeg贸lne wykryte przez nas przypadki. Po drugie, nie zidentyfikowano 偶adnej wersji Stuxneta, kt贸ra potrafi wsp贸艂dzia艂a膰 z tymi sterownikami.

Plik rtniczw.sys zosta艂 podpisany 18 marca 2010 roku, jednak 14 kwietnia 2010 roku autorzy Stuxneta stworzyli nowy wariant tego robaka, kt贸ry wykorzystywa艂 referencyjny plik mrxcls.sys. Jest oczywiste, 偶e rtniczw.sys by艂 przeznaczony do innych cel贸w. To samo mo偶na powiedzie膰 o jmidebs.sys. Uwa偶amy, 偶e te trzy sterowniki s膮 tylko po艣rednio zwi膮zane ze Stuxnetem i mo偶na je bezpiecznie wymaza膰 z historii Stuxneta.

Jest r贸wnie偶 drugie pytanie: czy te sterowniki mog艂y by膰 wykorzystane w Duqu?

Na to pytanie nie ma jednoznacznej odpowiedzi. Chocia偶 wszystkie znane warianty Duqu pochodz膮 z okresu listopad 2010 - pa藕dziernik 2011, uwa偶amy, 偶e istniej膮 wcze艣niejsze wersje tego trojana szpieguj膮cego stworzone w celu kradzie偶y informacji. Trzy omawiane sterowniki mog艂y zosta膰 bez trudu u偶yte we wcze艣niejszych wersjach Duqu lub w innych trojanach opartych na platformie Stuxnet/Duqu. Podobnie jak Duqu trojany te by艂y najprawdopodobniej wykorzystywane w atakach ukierunkowanych przed pojawieniem si臋 Stuxneta (co najmniej w 2008 roku), w czasie, gdy by艂 aktywny i po zamkni臋ciu jego centrum kontroli. Prawdopodobnie by艂y to r贸wnoleg艂e projekty, a Stuxnet zosta艂 stworzony p贸藕niej na podstawie zdobytego do艣wiadczenia i kodu, kt贸ry zosta艂 napisany ju偶 wcze艣niej. Wydaje si臋 wysoce nieprawdopodobne, 偶e by艂 to jedyny projekt realizowany przez jego autor贸w.

Proces tworzenia sterownik贸w

Spr贸bujmy wyobrazi膰 sobie, jak wygl膮da proces tworzenia sterownik贸w. Kilka razy w roku autorzy kompiluj膮 now膮 wersj臋 pliku sterownika, tworz膮c plik referencyjny. G艂贸wnym celem tego pliku jest 艂adowanie i wykonanie g艂贸wnego modu艂u, kt贸ry jest tworzony oddzielnie. Mo偶e to by膰 Stuxnet lub Duqu, albo jaki艣 inny program.

Kiedy trzeba u偶y膰 sterownika dla nowego modu艂u, autorzy wykorzystuj膮 wyspecjalizowany program w celu zmodyfikowania informacji w pliku "referencyjnym" sterownika, tj. informacji o jego nazwie i us艂udze jak r贸wnie偶 kluczu rejestru i jego warto艣ci.

Warto podkre艣li膰, 偶e cyberprzest臋pcy nie tworz膮 nowego pliku od podstaw, ale podrasowuj膮 gotowe. To oznacza, 偶e mog膮 stworzy膰 dowoln膮 liczb臋 r贸偶nych plik贸w sterownika, z kt贸rych ka偶dy b臋dzie mia艂 dok艂adnie t臋 sam膮 funkcjonalno艣膰 i dat臋 utworzenia.

W zale偶no艣ci od celu ataku i ofiary trojana mo偶na nast臋pnie podpisa膰 kilka plik贸w sterownik贸w przy u偶yciu legalnych certyfikat贸w cyfrowych o nieznanym pochodzeniu.

Wnioski

Posiadane przez nas dane pozwalaj膮 stwierdzi膰 z du偶膮 doz膮 pewno艣ci, 偶e platforma "Tilded" zosta艂a stworzona pomi臋dzy ko艅cem 2007 r. a pocz膮tkiem 2008 r., przy czym najpowa偶niejsze zmiany przesz艂a na prze艂omie lata i jesieni 2010 roku. Zmiany te wynika艂y z rozwoju kodu oraz konieczno艣ci unikni臋cia wykrycia przez rozwi膮zania antywirusowe. W latach 2007-2011 powsta艂o wiele projekt贸w dotycz膮cych program贸w opartych na platformie "Tilded". Stuxnet i Duqu to dwa z nich - jednak mog艂y by膰 r贸wnie偶 inne, na razie jednak pozostaj膮 nieznane. Platforma wci膮偶 jest rozwijana, co mo偶e oznacza膰 tylko jedno - w przysz艂o艣ci prawdopodobnie pojawi si臋 wi臋cej modyfikacji.

殴ród艂o:
Kaspersky Lab