NFsec Logo

Banner Grabbing, pliki README oraz ścieżki dostępu

21/03/2011 w Ataki Internetowe Brak komentarzy.  (artykuł nr 307, ilość słów: 963)

B

anner Grabbing jest bardzo prostą techniką zbierania informacji na temat wersji używanego oprogramowania. W kontekście administracji sieci komputerowych służy do rozpoznawania i zarządzania różnego rodzaju oprogramowaniem. Administratorzy mogą używać jej do wykonywania spisu systemów i usług uruchomionych w swoich sieciach. Niestety intruzi przechwytywanie banerów wykorzystują w tym samym celu – pasywnego zebrania największej ilości danych o oprogramowaniu znajdującym się w atakowanej sieci i sprawdzeniu czy uruchomione wersje nie są podatne na różne ataki przy pomocy exploitów.

Najczęściej wykorzystywanymi do tego celu protokołami są HTTP (ang. Hypertext Transfer Protocol), FTP (ang. File Transfer Protocol oraz SMTP (ang. Simple Mail Transfer Protocol). Wiele aplikacji w standardowej konfiguracji anonsuje swoje wersje w nagłówkach powitalnych lub transportowych, w przypadku aplikacji web – sparsowanych źródłach. Najprostszymi narzędziami do przechwytywania banerów różnych sieciowych serwerów są telnet oraz netcat. Na przykład możemy zestawić połączenie z dowolnym serwerem WWW za pomocą narzędzia netcat, a następnie wysłać nieprawidłowe żądanie w celu uzyskania informacji na temat serwera:

agresor@stardust:~$ nc www.ofiara.pl 80
HEAD / HTTP/1.0
[Enter]
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 22:10:40 EST
Server: Apache/2.0.46 (Unix) (Red Hat/Linux)
Last-Modified: Thu, 16 Apr 2009 11:20:14 PST
ETag: "1986-69b-123a4bc6"
Accept-Ranges: bytes
Content-Length: 1110
Connection: close
Content-Type: text/html

Za pomocą jednego polecenia potencjalny atakujący wie dla jakiego typu (Apache) i wersji (Apache/2.0.46 (Unix) (Red Hat/Linux)) serwera WWW szukać programów wykorzystujących luki. Nie musimy również ograniczać się do linii poleceń. Na przykład dzięki wtyczce Live HTTP Headers do przeglądarki Firefox możemy odczytywać nagłówki z wersjami w czasie legalnego surfowania po stronach internetowych. Przy okazji możemy również wyłapać wersję innego oprogramowania dołączonego do serwera WWW. Sytuacja przedstawia się podobnie, jeśli chodzi np. o serwery pocztowe:

agresor@stardust:~$ host -t mx ofiara.pl
ofiara.pl mail is handled by 5 ofiara.pl.
agresor@stardust:~$ telnet ofiara.pl 25
Trying 1.2.3.4...
Connected to ofiara.pl.
Escape character is '^]'.
220-ofiara.pl ESMTP Exim 4.72 #0 Sun, 20 Mar 2011 12:56:49 +0100
220-We do not authorize the use of this system to transport unsolicited,
220-and/or bulk e-mail.
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

W przypadku aplikacji internetowych – wiele gotowych systemów CMS czy oprogramowania odpowiedzialnego za fora internetowe umieszcza informacje o swoich wersjach w stopkach lub źródłach HTML. Na przykład system blogowy WordPress dodaje informacje do kodu strony:

<meta name="generator" content="WordPress 3.1" />

Joomla:

<meta name="generator" content="Joomla! 1.5 - Open Source Content Management" />

A forum SMF w stopce dodaje informacje: “Powered by SMF 1.1.13“. Jak uniknąć takiego typu “wycieku informacji” ? W przypadku serwerów sieciowych należy zainteresować się opcjami pozwalającymi ograniczenie, zmianę lub ukrycie sygnatur i wersji tych serwerów:

Apache - ServerTokens | ServerSignature
Nginx - server_tokens
Postfix - smtpd_banner
Exim4 - smtpd_banner
Vsftpd - ftpd_banner
Proftpd - ServerName | ServerIdent

Możemy również zmodyfikować źródła wybranego pakietu oprogramowania przed jego kompilacją. W przypadku serwerów WWW można wykorzystać różnego rodzaju moduły lub serwery proxy. Na przykład, jeśli używamy serwera Varnish możemy usunąć z nagłówków HTTP interesujące nas informacje poprzez dodanie odpowiednich opcji w sekcji vcl_deliver:

remove resp.http.Via;
remove resp.http.Age;
remove resp.http.Server;
remove resp.http.X-Varnish;
remove resp.http.X-Powered-By;

Edycja źródeł lub modyfikacja niektórych funkcji także będzie się tyczyć aplikacji internetowych. Na przykład w celu zmiany zapisu wersji w systemie blogowym WordPress wystarczy stworzyć funkcję w pliku functions.php:

function versionhack() {
    if (!is_admin()) {
        global $wp_version;
        $wp_version = '6.6.6';
        }
}

I wywołać ją (versionhack();) na początku pliku header.php. Niektóre aplikacje mają już wbudowane opcje dotyczące wyświetlania informacji o wersji np. w systemie zgłaszania błędów MantisBT wystarczy ustawić opcję $g_show_version na OFF w pliku config_defaults_inc.php.

W przypadku aplikacji internetowych popełniane są dodatkowo dwa podstawowe błędy przez administratorów podczas i po ich instalacji. Pierwszym jest nie usuwanie charakterystycznych plików informacyjnych typu: Readme, Changelog, Install, Release itp., które mogą zostać odczytane z poziomu adresu URL i dostarczyć wyczerpujących informacji o zainstalowanym oprogramowaniu. Załóżmy, że przy pomocy modyfikacji źródeł lub napisanej funkcji usunęliśmy informacje o wersji aplikacji webowej WordPress. Jednak, jeśli po instalacji nie zostały usunięte żadne pliki informacyjne – wystarczy wywołać adres typu: http://blog.pl/readme.html, aby uzyskać informacje o zainstalowanej wersji. Tyczy się to każdego gotowego oprogramowania, które można ściągnąć z Internetu – ponieważ może zostać ono, również scharakteryzowane pod tym kontem przez potencjalnych intruzów.

Drugim błędem jest zła lokalizacja instalowanych aplikacji, która umożliwia alternatywny dostęp do w/w plików i nie tylko. Większość administratorów instaluje je pod inną nazwą wirtualnych hostów, ale w ścieżce dostępu standardowego wirtualnego hosta serwera. Na przykład aplikacja PHPmyAdmin została zainstalowana w lokalizacji /var/www/phpmyadmin i udostępniona pod adresem wirtualnego hosta adminmyphp.domena.pl. Niestety ścieżka /var/www jest również dostępna spod adresu domena.pl lub adresu IP serwera wpisanego w adres URL – dlatego automat skanujący serwer w celu poszukiwania zainstalowanych aplikacji nie musi znać nazw wirtualnych hostów przeznaczonych dla nich. Wystarczy, że przeskanuje adresy w postaci http://domena.pl/ lub http://12.34.56.78/ i za którymś razem trafi na katalog phpmyadmin:

[Sun Mar 20 22:49:58 2011] [error] [client 1.2.3.4] File does not exist: /var/www/phpmy
[Sun Mar 20 23:37:20 2011] [error] [client 1.2.3.4] File does not exist: /var/www/webadmin
[Sun Mar 20 23:37:20 2011] [error] [client 1.2.3.4] File does not exist: /var/www/sqlweb
[Sun Mar 20 23:37:20 2011] [error] [client 1.2.3.4] File does not exist: /var/www/websql
[Sun Mar 20 23:37:20 2011] [error] [client 1.2.3.4] File does not exist: /var/www/webdb
[Sun Mar 20 23:37:22 2011] [error] [client 1.2.3.4] File does not exist: /var/www/padmin

Rozpoznając jego wersję zastosuje odpowiedni scenariusz ataku.

Obrona przed banner grabbing głównie odnosi się do obrony przed złymi robotami, automatami i programami skanującymi. Oprócz jasnej i publicznie dostępnej informacji o wersji istnieje wiele innych rodzajów charakterystyk, które pozwalają na rozpoznanie wersji, typu i rodzaju używanego oprogramowania. Dlatego ukrycie tych informacji jest czystym security through obscurity, ale i też bardziej skutecznym kamuflażem przed skrypciakami bawiącymi się automatami.

Więcej informacji: Banner grabbing

Kategorie K a t e g o r i e : Ataki Internetowe

Tagi T a g i : , , , , , , , , , , , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.