Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

JavaScript / CSS fingerprinting

Ogólnie przyjmuje się, że tworząc stronę mamy bardzo ograniczone możliwości pobierania informacji na temat użytkowników. Możemy pobrać adres IP, nazwę przeglądarki, systemu operacyjnego, rozdzielczość ekranu i jeszcze kilka innych mało wartościowych informacji, które w większości mogą zostać łatwo zmodyfikowane. Istnieje jeszcze kilka stosunkowo mało znanych sztuczek, które umożliwiają pobranie dodatkowych informacji na temat użytkowników naszej witryny.

Pobieranie historii

Wykorzystując selektory CSS możemy w prosty sposób sprawdzić, które ze zdefiniowanych stron zostały odwiedzone przez użytkownika.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <style type="text/css">
         ul{ width: 500px; clear: both; list-style: none }
         li{ clear: both;  padding: 0px }
         a:visited{ float: right }
         p{ float: left; width: 350px; margin-left: 40px }
      </style>
   </head>
   <body>
      <p>Nieodwiedzone</p>
      <p>Odwiedzone</p>
      <ul>
         <li><a href="http://www.google.pl/">Google</a></li>
         <li><a href="http://www.onet.pl/">Onet</a></li>
         <li><a href="http://www.wp.pl/">Wirtualna Polska</a></li>
         <li><a href="http://www.nasza-klasa.pl/">Nasza klasa</a></li>
         <li><a href="http://www.allegro.pl/">Allegro</a></li>
         <li><a href="http://www.interia.pl/">Interia</a></li>
         <li><a href="http://www.o2.pl/">o2</a></li>
         <li><a href="http://www.gazeta.pl/">Gazeta</a></li>
         <li><a href="http://www.youtube.com/">YouTube</a></li>
         <li><a href="http://www.wikipedia.org/">Wikipedia</a></li>
      </ul>
   </body>
</html>

Powyższy kod na pierwszy rzut oka może wydawać się mało przydatny. Można jednak na jego podstawie założyć, że w ostatnio odwiedzonych serwisach użytkownik jest zalogowany, a co za tym idzie wykonać akcje dostępną tylko dla zalogowanych użytkowników danego serwisu (CSRF).

Wykrywanie zainstalowanych programów

W równie prosty sposób jak poprzednio możemy, a raczej mogliśmy sprawdzić jakie programy użytkownik ma zainstalowane na komputerze. Aktualnie większość przeglądarek zabrania podawania jako źródło lokalnych plików użytkownika. Na szczęście mamy Internet Explorer 6, który umożliwi nam zaprezentowanie przykładu.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <style type="text/css">img{ display: none }</style>
   </head>
   <body>
      <div id="log" />
  
      <script type="text/javascript">
         function log( name )
         {
            var log = document.getElementById( "log" );
            log.innerHTML += name + "<br />";
         }
		  
         var apps = [];
         apps["Opera"] 	  = "Opera\Styles\images\opera.png";
         apps["Avast"] 	  = "Avast4\images\background.bmp";
         apps["IrfanView"] = "IrfanView\Toolbars\Gorsberg_24.png";
         apps["FireFox"]   = "Mozilla Firefox\res\arrow.gif";
         apps["Skype"] 	  = "Skype\Toolbars\Internet Explorer\favicon.ico";
         apps["WMP"] 	  = "Windows Media Player\Network Sharing\computer.png";
		
         for( app in apps )
         { 
            document.writeln( "<img src='file:///C:\Program Files\" + apps[ app ] + "' alt='" + app + "' onload='log( this.alt )'>" );
         };
      </script>
   </body>
</html>

Należy zauważyć, że odwołujemy się do domyślnych ścieżek instalacji programów tak wiec jeśli użytkownik posiada zainstalowany program z powyższej listy w innej lokalizacji nie zostanie on wykryty przez skrypt.

Tak samo jak w poprzednim punkcie powyższy skrypt może służyć jako rozpoznanie przed atakiem. Na podstawie wykrytych aplikacji możemy wybrać odpowiedni exploit, który umożliwi atak na komputer użytkownika.


Tagi: ,
Kategoria: Bezpieczeństwo, JavaScript


7 komentarzy

  1. Qenix napisał(a):

    Bardzo mnie to zaciekawiło, dzięki wielkie!!

  2. O pobieraniu historii już gdzieś kiedyś czytałem, trafione, ciekawe, ważne :)

    O wykryciu zainstalowanych programów nie … i chyba wolałbym nie wiedzieć :)

    Dzięki wielkie za ciekawy wpis ;)

  3. Nie wiedzialem.. Kurde, moze jeszcze mi napiszesz exploit w XSS-ie? Slyszalem kiedys o tym ale to MI..

  4. Bardzo ciekawe. Nie zdawałem sobie sprawy, że można takie coś zrobić ;-) Teraz nasuwa się pytanie, jak się przed tym bronić?

  5. ad1. czyścić często historię :-)
    ad2. nie korzystać ze starych wersji IE :-)

  6. gość napisał(a):

    Witaj,

    w pierwszym wypadku czegos nie rozumiem.
    z serwera przecież zawsze pobierana jest ta sama strona. O tym czy użyte zostanie a:visited, czyli czy link zostanie przesunięty na prawo, decydują dane użytkownika(historia).

    Z punktu widzenia serwera nie da się odróżnić „jaką wersje” pobrał uzytkownik…
    coś źle rozumuję?

    pozdrawiam
    M

  7. nie do końca :) jeśli nadamy odwiedzonym linkom specyficzną właściwośc – w tym przypadku float: right – możemy w JavaScript’cie przejśc po wszystkich linkach i sprawdzić, które mają ustawiony float na right, jeśli znajdziemy taki link to znaczy, że został on odwiedzony przez użytkownika :-)

Dodaj komentarz