Kali Linux. Testy penetracyjne 9788324690169, 9788324690138, 8324690131, 8324690166

W dobie internetu możemy cieszyć się globalną dostępnością każdego z systemów informatycznych. Z jednej strony daje to o

183 59 28MB

Polish Pages 336 [337] Year 2014

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Spis treści
O autorach
O recenzentach
Wstęp
Co znajdziesz w tej książce?
Czego potrzebujesz do pracy z książką?
Dla kogo przeznaczona jest ta książka?
Konwencje
Errata
Piractwo
Rozdział 1. Przygotowania
Podstawowe założenia testów penetracyjnych aplikacji internetowych
Metodologia przeprowadzania testów penetracyjnych
Ocena ryzyka
Testy penetracyjne z wykorzystaniem systemu Kali Linux — założenia
Etap 1. Rekonesans
Etap 2. Wyszukiwanie podatności
Etap 3. Wykorzystywanie zidentyfikowanych podatności
Etap 4. Podnoszenie uprawnień
Etap 5. Utrzymanie zdobytego przyczółka
Wprowadzenie do systemu Kali Linux
Konfiguracja systemu Kali Linux
Uruchamianie systemu Kali Linux z nośnika zewnętrznego
Instalowanie systemu Kali Linux
Kali Linux i pierwsze uruchomienie w maszynie wirtualnej
Przegląd narzędzi dostępnych w systemie Kali Linux
Podsumowanie
Rozdział 2. Rekonesans
Zadania rekonesansu
Rozpoznanie wstępne
Strona internetowa firmy
Źródła przechowujące historyczne wersje witryn internetowych
Regional Internet Registries, czyli regionalni administratorzy adresów IP
System EDGAR
Zasoby serwisów społecznościowych
Zaufanie
Oferty pracy
Lokalizacja
Wyszukiwarka Shodan
Google hacking
GHDB, czyli Google Hacking Database
Badanie zasobów sieci komputerowych
Rekonesans z wykorzystaniem protokołu ICMP
Rekonesans z wykorzystaniem serwerów DNS
Nmap
FOCA — wyszukiwanie i analiza metadanych
Podsumowanie
Rozdział 3. Ataki na serwery aplikacji internetowych
Wyszukiwanie podatności i luk w zabezpieczeniach
Webshag
Skipfish
ProxyStrike
Vega
Owasp-Zap
Websploit
Wykorzystywanie znalezionych luk w zabezpieczeniach (exploity)
Metasploit
w3af
Wykorzystywanie luk w zabezpieczeniach systemów poczty elektronicznej
Ataki typu brute-force
Hydra
DirBuster
WebSlayer
Łamanie haseł
John the Ripper
Ataki typu man-in-the-middle
SSLStrip
Podsumowanie
Rozdział 4. Ataki na klienty aplikacji internetowych
Inżynieria społeczna
Pakiet SET — Social Engineer Toolkit
Zastosowanie pakietu SET do ataku z klonowaniem
MitM Proxy
Skanowanie hostów
Skanowanie hostów za pomocą pakietu Nessus
Przechwytywanie i łamanie haseł użytkowników
Hasła w systemie Windows
Hasła w systemie Linux
Narzędzia do łamania haseł dostępne w systemie Kali Linux
Johnny
Programy hashcat i oclHashcat
samdump2
chntpw
Ophcrack
Crunch
Inne narzędzia dostępne w systemie Kali Linux
Hash-identifier
dictstat
RainbowCrack (rcracki_mt)
findmyhash
phrasendrescher
CmosPwd
creddump
Podsumowanie
Rozdział 5. Ataki na metody uwierzytelniania
Ataki na zarządzanie sesjami
Clickjacking
Przechwytywanie ciasteczek sesji
Narzędzia do przechwytywania sesji
Wtyczki przeglądarki Firefox
Cookie Cadger
Wireshark
Pakiety Hamster i Ferret
Atak typu man-in-the-middle
Narzędzia dsniff i arpspoof
Ettercap
Driftnet
Wstrzykiwanie kodu SQL
sqlmap
Ataki typu XSS (cross-site scripting)
Testowanie podatności na ataki XSS
Techniki XSS cookie stealing i Authentication hijacking
Inne narzędzia
urlsnarf
acccheck
hexinject
Patator
DBPwAudit
Podsumowanie
Rozdział 6. Ataki na aplikacje internetowe i serwery WWW
BeEF — Browser Exploitation Framework
FoxyProxy — wtyczka przeglądarki Firefox
BURP Proxy
OWASP-ZAP
Przechwytywanie haseł — pakiet SET
Fimap
Ataki typu DoS
THX-SSL-DOS
Scapy
Slowloris
LOIC, czyli Niskoorbitalne Działo Jonowe…
Inne narzędzia
DNSChef
SniffJoke
Siege
Inundator
TCPReplay
Podsumowanie
Rozdział 7. Przeciwdziałanie i zapobieganie
Testowanie mechanizmów obronnych
Podstawowe wymogi bezpieczeństwa
STIG
Zarządzanie aktualizacjami i poprawkami zabezpieczeń
Polityka zarządzania hasłami
Klonowanie środowiska
HTTrack
Inne narzędzia do klonowania witryn
Obrona przed atakami typu man-in-the-middle
Obrona przed atakami SSLstrip
Obrona przed atakami typu DoS
Obrona przed przechwytywaniem ciasteczek
Obrona przed atakami typu Clickjacking
Informatyka śledcza
Uruchamianie systemu Kali Linux w trybie Forensics
Analiza systemu plików za pomocą narzędzi systemu Kali Linux
Inne narzędzia śledcze w systemie Kali Linux
Podsumowanie
Rozdział 8. Tworzenie raportów końcowych
Zgodność ze standardami i procedurami
Usługi profesjonalne
Dokumentacja
Format raportu
Strona tytułowa
Oświadczenie o zachowaniu poufności
Zarządzanie wersjami dokumentacji
Ramy czasowe projektu
Streszczenie raportu
Metodologia
Szczegółowe procedury testowania
Podsumowanie ustaleń
Podatności i luki w zabezpieczeniach
Wnioski i rekomendacje dla środowiska sieciowego
Dodatki
Glosariusz
Wykaz prac
Zewnętrzne testy penetracyjne
Dodatkowe elementy wykazu prac
Narzędzia wspomagające tworzenie raportów
Dradis
KeepNote
Maltego CaseFile
MagicTree
CutyCapt
Podsumowanie
Skorowidz
Recommend Papers

Kali Linux. Testy penetracyjne
 9788324690169, 9788324690138, 8324690131, 8324690166

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Tytuł oryginału: Web Penetration Testing with Kali Linux Tłumaczenie: Grzegorz Kowalczyk ISBN: 978-83-246-9016-9 Copyright © 2013 Packt Publishing. First published in the English language under the title „Web Penetration Testing with Kali Linux”. Polish edition copyright © 2014 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/kalili_ebook Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland.

 Poleć książkę na Facebook.com

 Księgarnia internetowa

 Kup w wersji papierowej

 Lubię to! » Nasza społeczność

 Oceń książkę

Spis treści O autorach

9

O recenzentach

11

Wstęp

15

Co znajdziesz w tej książce? Czego potrzebujesz do pracy z książką? Dla kogo przeznaczona jest ta książka? Konwencje Errata Piractwo

Rozdział 1. Przygotowania Podstawowe założenia testów penetracyjnych aplikacji internetowych Metodologia przeprowadzania testów penetracyjnych Ocena ryzyka Testy penetracyjne z wykorzystaniem systemu Kali Linux — założenia Etap 1. Rekonesans Etap 2. Wyszukiwanie podatności Etap 3. Wykorzystywanie zidentyfikowanych podatności Etap 4. Podnoszenie uprawnień Etap 5. Utrzymanie zdobytego przyczółka Wprowadzenie do systemu Kali Linux Konfiguracja systemu Kali Linux Uruchamianie systemu Kali Linux z nośnika zewnętrznego Instalowanie systemu Kali Linux Kali Linux i pierwsze uruchomienie w maszynie wirtualnej Przegląd narzędzi dostępnych w systemie Kali Linux Podsumowanie

16 17 17 18 18 19

21 23 24 30 34 34 35 36 37 37 38 39 39 40 46 46 49

Spis treści

Rozdział 2. Rekonesans Zadania rekonesansu Rozpoznanie wstępne Strona internetowa firmy Źródła przechowujące historyczne wersje witryn internetowych Regional Internet Registries, czyli regionalni administratorzy adresów IP System EDGAR Zasoby serwisów społecznościowych Zaufanie Oferty pracy Lokalizacja Wyszukiwarka Shodan Google hacking GHDB, czyli Google Hacking Database Badanie zasobów sieci komputerowych Rekonesans z wykorzystaniem protokołu ICMP Rekonesans z wykorzystaniem serwerów DNS Nmap FOCA — wyszukiwanie i analiza metadanych Podsumowanie

Rozdział 3. Ataki na serwery aplikacji internetowych Wyszukiwanie podatności i luk w zabezpieczeniach Webshag Skipfish ProxyStrike Vega Owasp-Zap Websploit Wykorzystywanie znalezionych luk w zabezpieczeniach (exploity) Metasploit w3af Wykorzystywanie luk w zabezpieczeniach systemów poczty elektronicznej Ataki typu brute-force Hydra DirBuster WebSlayer Łamanie haseł John the Ripper Ataki typu man-in-the-middle SSLStrip Podsumowanie

4

51 52 53 53 54 57 57 58 59 59 60 60 61 63 65 69 71 76 83 89

91 92 92 95 98 101 105 112 113 113 120 123 125 125 128 131 137 137 139 140 145

Spis treści

Rozdział 4. Ataki na klienty aplikacji internetowych Inżynieria społeczna Pakiet SET — Social Engineer Toolkit Zastosowanie pakietu SET do ataku z klonowaniem MitM Proxy Skanowanie hostów Skanowanie hostów za pomocą pakietu Nessus Przechwytywanie i łamanie haseł użytkowników Hasła w systemie Windows Hasła w systemie Linux Narzędzia do łamania haseł dostępne w systemie Kali Linux Johnny Programy hashcat i oclHashcat samdump2 chntpw Ophcrack Crunch Inne narzędzia dostępne w systemie Kali Linux Hash-identifier dictstat RainbowCrack (rcracki_mt) findmyhash phrasendrescher CmosPwd creddump Podsumowanie

Rozdział 5. Ataki na metody uwierzytelniania Ataki na zarządzanie sesjami Clickjacking Przechwytywanie ciasteczek sesji Narzędzia do przechwytywania sesji Wtyczki przeglądarki Firefox Cookie Cadger Wireshark Pakiety Hamster i Ferret Atak typu man-in-the-middle Narzędzia dsniff i arpspoof Ettercap Driftnet Wstrzykiwanie kodu SQL sqlmap Ataki typu XSS (cross-site scripting) Testowanie podatności na ataki XSS Techniki XSS cookie stealing i Authentication hijacking

147 148 149 151 161 162 162 169 171 173 174 174 177 178 180 183 185 188 188 189 189 190 190 190 191 191

193 195 196 197 198 198 203 206 208 211 212 214 217 218 221 223 224 225

5

Spis treści

Inne narzędzia urlsnarf acccheck hexinject Patator DBPwAudit Podsumowanie

Rozdział 6. Ataki na aplikacje internetowe i serwery WWW

227 227 228 228 229 229 229

231

BeEF — Browser Exploitation Framework FoxyProxy — wtyczka przeglądarki Firefox BURP Proxy OWASP-ZAP Przechwytywanie haseł — pakiet SET Fimap Ataki typu DoS THX-SSL-DOS Scapy Slowloris LOIC, czyli Niskoorbitalne Działo Jonowe… Inne narzędzia DNSChef SniffJoke Siege Inundator TCPReplay Podsumowanie

232 236 238 245 249 254 255 257 259 261 263 266 266 267 268 269 270 270

Rozdział 7. Przeciwdziałanie i zapobieganie

271

Testowanie mechanizmów obronnych Podstawowe wymogi bezpieczeństwa STIG Zarządzanie aktualizacjami i poprawkami zabezpieczeń Polityka zarządzania hasłami Klonowanie środowiska HTTrack Inne narzędzia do klonowania witryn Obrona przed atakami typu man-in-the-middle Obrona przed atakami SSLstrip Obrona przed atakami typu DoS Obrona przed przechwytywaniem ciasteczek Obrona przed atakami typu Clickjacking Informatyka śledcza Uruchamianie systemu Kali Linux w trybie Forensics Analiza systemu plików za pomocą narzędzi systemu Kali Linux Inne narzędzia śledcze w systemie Kali Linux Podsumowanie

6

273 273 274 275 277 278 279 281 281 284 285 286 287 287 290 291 295 300

Spis treści

Rozdział 8. Tworzenie raportów końcowych Zgodność ze standardami i procedurami Usługi profesjonalne Dokumentacja Format raportu Strona tytułowa Oświadczenie o zachowaniu poufności Zarządzanie wersjami dokumentacji Ramy czasowe projektu Streszczenie raportu Metodologia Szczegółowe procedury testowania Podsumowanie ustaleń Podatności i luki w zabezpieczeniach Wnioski i rekomendacje dla środowiska sieciowego Dodatki Glosariusz Wykaz prac Zewnętrzne testy penetracyjne Dodatkowe elementy wykazu prac Narzędzia wspomagające tworzenie raportów Dradis KeepNote Maltego CaseFile MagicTree CutyCapt Podsumowanie

Skorowidz

301 303 304 306 307 307 307 308 308 309 310 312 313 315 316 319 319 319 321 323 325 325 326 326 327 327 327

329

7

Spis treści

8

O autorach Joseph Muniz jest projektantem rozwiązań technicznych i badaczem zagadnień związanych z bezpieczeństwem systemów teleinformatycznych. Swoją karierę zaczynał od pracy jako programista i kontraktowy administrator sieci komputerowych. Później zmienił zainteresowania na usługi konsultingowe i odnalazł swoje powołanie w dziedzinie bezpieczeństwa systemów komputerowych, świadcząc usługi dla wielu klientów. Joseph był zaangażowany w projektowanie i implementację bardzo wielu rozwiązań wdrażanych zarówno w firmach z listy „Fortune” 500, jak i w wielkich sieciach federalnych. Joseph jest właścicielem i twórcą witryny www.thesecurityblogger.com, która jest bardzo popularnym i szanowanym źródłem informacji o zagadnieniach związanych z bezpieczeństwem systemów komputerowych i wdrażaniem różnych tego typu produktów i rozwiązań. Josepha można również spotkać na wielu konferencjach i spotkaniach, gdzie wygłasza swoje referaty i prezentuje publikacje. Ostatnio wygłaszał takie referaty, jak „Social Media Deception” na konferencji 2013 ASIS International, „Eliminate Network Blind Spots” na webinarium Data Center Security czy „Making Bring Your Own Device (BYOD) Work” na Government Solutions Forum. W lipcu 2013 opublikował również w magazynie „Backtrack Compendium” artykuł zatytułowany Compromising Passwords. Poza pracą można go również spotkać za konsoletami gramofonów, gdzie „męczy” klasyczne, winylowe płyty, lub na boisku lokalnego klubu piłkarskiego. Niniejsza książka nie mogłaby powstać bez pomocy mojej uroczej żony, Ning, oraz bez kreatywnych inspiracji mojej córki Raylin. Moja pasja do zdobywania wiedzy to zasługa mojego brata Aleksa, który wychowywał mnie wraz z moimi kochanymi rodzicami, Irene i Rayem. Na koniec chciałbym również bardzo podziękować wszystkim moim przyjaciołom, rodzinie i kolegom, którzy wspierają mnie w moich działaniach już od wielu lat.

Kali Linux. Testy penetracyjne

Aamir Lakhani to projektant znakomitych rozwiązań w dziedzinie bezpieczeństwa systemów teleinformatycznych i kontrwywiadu elektronicznego, wdrażanych w wielu czołowych firmach i organizacjach rządowych. Lakhani prowadzi wiele projektów obejmujących wdrażanie nowych rozwiązań mechanizmów bezpieczeństwa w firmach z listy „Fortune 500”, w Departamencie Obrony USA, jednostkach służby zdrowia, instytucjach edukacyjnych oraz wielu innych organizacjach finansowych i medialnych. Lakhani projektował rozwiązania zabezpieczeń w wielu organizacjach i agencjach powiązanych ze środowiskami armii i wywiadu, jak również pomagał wielu firmom i organizacjom bronić się przed atakami zorganizowanych grup hakerów. Lakhani jest uważany za jednego z najlepszych fachowców zajmujących się projektowaniem rozwiązań systemów bezpieczeństwa, zagrożeniami aplikacji mobilnych, badaniami nad złośliwym oprogramowaniem i zagrożeniami typu APT. Lakhani jest autorem i współautorem wielu książek, jak również ma za sobą wywiady w środkach masowego przekazu, gdzie występował jako ekspert w dziedzinie bezpieczeństwa systemów komputerowych. Działając pod pseudonimem Dr Chaos, Lakhani prowadzi bloga DrChaos.com. Na swojej prestiżowej liście 46 Federal Technology Experts to Follow on Twitter magazyn „Forbes” napisał, że Aamir Lakhani to „bloger, specjalista w dziedzinie bezpieczeństwa systemów komputerowych, superbohater… i po prostu równy facet”. Chciałbym zadedykować tę książkę moim rodzicom, Mahmoodowi i Nasreen, oraz moim siostrom, Noureen i Zahrze. Dziękuję Wam, że zawsze wspieraliście tego małego hakera, który siedzi gdzieś głęboko we mnie. Ta książka nie mogłaby powstać bez Waszego wsparcia. Dziękuję, Mamo i Tato, za Wasze poświęcenia dla mnie. Chciałbym również podziękować wszystkim moim przyjaciołom i kolegom za wsparcie oraz niezliczone, cenne uwagi i sugestie. To naprawdę wielki przywilej pracować z najzacniejszymi i najbardziej oddanymi ludźmi na świecie.

10

O recenzentach

O recenzentach Adrian Hayter to pentester mający ponad 10 lat doświadczeń w przeprowadzaniu testów penetracyjnych aplikacji internetowych. Posiada tytuł magistra w dziedzinie bezpieczeństwa systemów komputerowych oraz licencjat z informatyki, oba zdobyte na Uniwersytecie Royal Holloway w Londynie.

Danang Heriyadi to pochodzący z Indonezji badacz zagadnień związanych z bezpieczeństwem systemów teleinformatycznych, od ponad pięciu lat specjalizujący się w inżynierii wstecznej i przełamywaniu zabezpieczeń oprogramowania i aplikacji internetowych. Obecnie Danang prowadzi w firmie Hatsecure szkolenia z serii „Advanced Exploit and ShellCode Development”. Oprócz tego lubi dzielić się swoimi doświadczeniami i wynikami badań na blogu http://www.fuzzerbyte.com/. Chciałbym podziękować moim rodzicom za to, że powołali mnie do życia. Bez nich nie byłoby mnie tutaj. Chciałbym również podziękować mojej dziewczynie za codzienne wsparcie uśmiechem i miłością oraz wszystkim moim przyjaciołom, których nie sposób tutaj kolejno wymienić.

Tajinder Singh Kalsi posiada ponad sześć lat doświadczeń na polu IT i jest współzałożycielem firmy Virscent Technologies Pvt Ltd. Jest w niej czołowym projektantem rozwiązań technicznych. Swoją karierę rozpoczynał jako technik w firmie WIPRO, a później został instruktorem w firmie konsultingowej. Obecnie prowadzi seminaria na tematy związane z bezpieczeństwem systemów komputerowych, projektowaniem aplikacji dla systemu Android, projektowaniem stron internetowych i przetwarzaniem danych w chmurze obliczeniowej w uczelniach na całym terenie Indii. Prowadził wykłady w ponad 100 uczelniach dla ponad 8500 studentów. Oprócz tego, że

11

Kali Linux. Testy penetracyjne

prowadzi szkolenia i wygłasza wykłady, zajmuje się pisaniem bloga (zobacz http://virscent.com/ blog/), gdzie prezentuje różne sztuczki i triki. Możesz skontaktować się z nim na Facebooku (zobacz https://www.facebook.com/tajinder.kalsi.tj) lub na jego własnej stronie internetowej, http://www.tajinderkalsi.com/. Chciałbym złożyć specjalne podziękowania na ręce Krunala Rajawadhy (jednego z menedżerów ds. kontaktów z autorami w wydawnictwie Packt Publishing) za odwiedzenie mojego bloga i zaoferowanie mi możliwości pracy przy tej książce. Chciałbym również podziękować mojej rodzinie i przyjaciołom za wsparcie, jakiego mi udzielili podczas pracy nad tą książką.

Brian Sak, posiadacz certyfikatu CCIE o numerze 14 441, pracuje obecnie jako architekt rozwiązań technicznych w firmie Cisco Systems, gdzie zajmuje się projektowaniem i wdrażaniem rozwiązań sieciowych, oraz wspomaga działanie firm konsultingowych będących partnerami firmy Cisco. Przed rozpoczęciem pracy w Cisco Brian pracował jako konsultant w dziedzinie bezpieczeństwa systemów komputerowych dla dużych instytucji finansowych, agencji rządowych i firm z listy „Fortune 500”. Brian posiada ponad dwudziestoletnie doświadczenie w pracy w branży, z czego zdecydowaną większość czasu spędził, zajmując się zagadnieniami bezpieczeństwa. Oprócz wielu certyfikatów technicznych i branżowych Brian posiada również tytuł magistra w dziedzinie bezpieczeństwa systemów komputerowych i jest autorem wielu książek i publikacji. Kunal Sehgal (zobacz http://kunseh.com/) trafił do branży bezpieczeństwa systemów komputerowych po ukończeniu szkolenia Cyberspace Security, organizowanego przez Georgian College (Kanada). Od tamtej pory pracował jako konsultant dla wielu organizacji finansowych, co przyniosło mu wiele doświadczeń z pracy w miejscach, gdzie zagadnienia bezpieczeństwa są krytyczne dla operacji biznesowych. Obecnie Kunal jest szefem operacji działu bezpieczeństwa IT dla regionu APAC jednego z największych banków w Europie. Posiada ponad 10 lat doświadczeń w wielu dziedzinach, od wyszukiwania podatności i luk w zabezpieczeniach, poprzez zarządzanie bezpieczeństwem, aż do zagadnień związanych z szacowaniem ryzyka. Jest posiadaczem wielu certyfikatów, takich jak OSCP, TCNA, CISM, CCSK, Security+, Cisco Router Security, ISO 27001 LA czy ITIL.

Nitin Sookun (MBCS) to pasjonat komputerowy, zamieszkujący w samym sercu Oceanu Indyjskiego, na przepięknej wyspie Mauritius. Swoją karierę rozpoczynał jako przedsiębiorca i założyciel firmy Indra Co. Ltd. W poszukiwaniu nowych wyzwań przekazał zarządzanie firmą swojej rodzinie, a sam rozpoczął pracę w firmie Linkbynet Indian Ocean Ltd. jako inżynier systemów Unix/Linux. Obecnie pracuje jako inżynier w firmie Orange Business Services.

12

O recenzentach

Od roku 2009 Nitin jest zapalonym kontrybutorem systemu openSUSE i spędza swój wolny czas, promując systemy Linux i inne rozwiązania FOSS. Jest aktywnym członkiem różnych grup użytkowników systemu Linux i projektów otwartego oprogramowania, takich jak openSUSE Project, MATE Desktop Project, Free Software Foundation, Linux User Group of Mauritius oraz Mauritius Software Craftsmanship Community. Nitin lubi pisać skrypty w językach takich jak Bash, Perl i Python, a wyniki swoich prac prezentuje zazwyczaj na swoim blogu. Jego najnowsze dzieło, „Project Evil Genius”, to skrypt pozwalający na adaptację oraz instalowanie narzędzi przeznaczonych do przeprowadzania testów penetracyjnych w systemie openSUSE. Jego publikacje są często tłumaczone na inne języki i rozpowszechniane w społeczności open source. Nitin jest gorącym orędownikiem wolnego oprogramowania i udostępniania wiedzy wszystkim zainteresowanym. W wolnym czasie lubi nawiązywać znajomości z zawodowcami z różnych dziedzin wiedzy.

13

Kali Linux. Testy penetracyjne

14

Wstęp Kali to dystrybucja systemu Linux oparta na systemie Debian Linux, która została wyposażona w ogromny arsenał narzędzi przeznaczonych do przeprowadzania testów penetracyjnych, wykorzystywanych przez zawodowców (i nie tylko) podczas oceny ryzyka i stanu bezpieczeństwa aplikacji internetowych danej firmy czy organizacji. Kali oferuje szeroki zestaw odpowiednio skonfigurowanych i zoptymalizowanych narzędzi pozwalających na identyfikację i wykorzystywanie luk w zabezpieczeniach systemów internetowych. W książce tej będziemy omawiać narzędzia, które były dostępne w edycji systemu Kali Linux wydanej 13 marca 2013 r., oraz szereg innych narzędzi i aplikacji typu open source. Książka Kali Linux. Testy penetracyjne, została zaprojektowana tak, aby być przewodnikiem dla pentesterów (czyli użytkowników zawodowo zajmujących się przeprowadzaniem testów penetracyjnych), którzy chcą wykorzystywać Kali Linux do testowania bezpieczeństwa aplikacji i witryn internetowych. Naszym celem było pokazanie narzędzi, które najlepiej nadają się do wykonywania poszczególnych zadań, omówienie sposobów ich użycia, przedstawienie danych, jakie można uzyskać za ich pomocą, oraz przedstawienie przykładowych raportów i wniosków, jakie można na ich podstawie opracować. W systemie Kali Linux masz do dyspozycji bardzo wiele różnych programów i narzędzi, ale w naszej książce staraliśmy się skoncentrować głównie na tych, które mają największe możliwości i najlepiej sprawdzają się w praktyce. Nasza książka została podzielona na rozdziały, poświęcone poszczególnym zadaniom, które są najczęściej spotykane podczas przeprowadzania testów penetracyjnych aplikacji i witryn internetowych. W rozdziale 1., „Przygotowania”, znajdziesz omówienie podstawowych pojęć związanych z testami penetracyjnymi, poznasz środowisko systemu Kali Linux i dowiesz się, jak je skonfigurować pod kątem tematów i zagadnień prezentowanych w naszej książce. W rozdziałach 2. – 6. przedstawiamy różne zagadnienia związane z metodologią i przeprowadzaniem testów penetracyjnych, włącznie z przykładami konfiguracji środowiska testowego i tworzeniem raportów końcowych.

Kali Linux. Testy penetracyjne

W rozdziale 7., „Przeciwdziałanie i zapobieganie”, dowiesz się, w jaki sposób postępować z systemami podatnymi na ataki opisywane w poprzednich rozdziałach i jak zapobiegać takim zagrożeniom. Rozdział 8., „Tworzenie raportów”, poświęcony jest w całości najlepszym praktykom tworzenia raportów końcowych po zakończeniu testów penetracyjnych oraz streszczenia raportu dla kadry zarządzającej. Znajdziesz tam również wiele przykładów, które mogą Ci posłużyć jako szablony do tworzenia własnych raportów i ich streszczeń. Celem przyjęcia takiego układu książki było dostarczenie Czytelnikowi możliwie kompletnego poradnika pozwalającego na zapoznanie się z metodologią przeprowadzania testów penetracyjnych aplikacji internetowych, zastosowanie najlepszych narzędzi dostępnych w dystrybucji Kali Linux, zaproponowanie rozwiązań pozwalających na usunięcie podatności testowanych aplikacji oraz przedstawienie sposobów efektywnego i profesjonalnego tworzenia raportów końcowych.

Co znajdziesz w tej książce? Rozdział 1., „Przygotowania”, omawia podstawowe zagadnienia związane z przeprowadzaniem profesjonalnych testów penetracyjnych aplikacji internetowych. Dowiesz się tutaj, czym różnią się testy penetracyjne od audytów bezpieczeństwa i innych usług, oraz poznasz metodologię przeprowadzania takich testów. W tym rozdziale omówimy również instalację systemu Kali Linux i jego konfigurację do wykonywania zadań przedstawionych w naszej książce. Rozdział 2., „Rekonesans”, opisuje szereg sposobów zbierania informacji na temat celu będącego przedmiotem testu penetracyjnego. Znajdziesz tutaj opisy wielu popularnych narzędzi dostępnych w internecie oraz w menu Information Gathering systemu Kali Linux. Rozdział 3., „Ataki na serwery aplikacji internetowych”, koncentruje się na metodach identyfikacji i wykorzystywania podatności i luk w zabezpieczeniach serwerów i aplikacji internetowych. W rozdziale korzystamy zarówno z narzędzi zaimplementowanych w systemie Kali Linux, jak i innych narzędzi typu open source dostępnych w internecie. Rozdział 4., „Ataki na klienty aplikacji internetowych”, poświęcony jest atakom na systemy będące klientami aplikacji internetowych i serwerów WWW. Będziemy tutaj poruszać sprawy związane między innymi z atakami socjotechnicznymi i inżynierią społeczną (ang. social engineering), wykorzystywaniem podatności i luk w zabezpieczeniach klientów oraz ataki na hasła — są to nadal najpowszechniej stosowane metody zabezpieczania dostępu do systemów i aplikacji. Rozdział 5., „Ataki na metody uwierzytelniania”, porusza zagadnienia związane ze sposobami uwierzytelniania użytkowników i systemów w aplikacjach internetowych. Znajdziesz tutaj takie tematy, jak ataki na proces zarządzania sesjami uwierzytelniania, uzyskiwanie dostępu do danych przechowywanych na klientach aplikacji internetowych oraz techniki przeprowadzania ataków typu man-in-the-middle. W tym rozdziale omówimy również między innymi ataki typu SQL Injection oraz Cross-Site Scripting. 16

Wstęp

Rozdział 6., „Ataki na aplikacje internetowe i serwery WWW”, pokazuje, w jaki sposób możesz użyć serwerów WWW do przeprowadzenia ataków na aplikacje internetowe. Opisujemy tutaj między innymi ataki wykorzystujące podatności i luki w zabezpieczeniach przeglądarek, ataki wykorzystujące serwery proxy oraz techniki przechwytywania i gromadzenia haseł dostępu. W rozdziale znajdziesz również omówienie metod zakłócania ciągłości działania usług i aplikacji internetowych przy użyciu ataków typu DoS. Rozdział 7., „Przeciwdziałanie i zapobieganie”, przedstawia sprawdzone metody „utwardzania” zabezpieczeń Twoich aplikacji internetowych i serwerów WWW. W tym rozdziale omówimy takie zagadnienia, jak ustalanie stanu zabezpieczeń systemu, zarządzanie aktualizacjami i łatkami oprogramowania, reguły haseł, oraz zaprezentujemy metody obrony przed atakami opisywanymi w poprzednich rozdziałach. Znajdziesz tutaj cały podrozdział poświęcony narzędziom wykorzystywanym w informatyce śledczej, dzięki którym będziesz mógł przeprowadzać ekspertyzy mające na celu wyjaśnienie sposobu, w jaki doszło do złamania zabezpieczeń danej aplikacji czy serwera WWW, i podjęcie kroków pozwalających na uniknięcie takich incydentów w przyszłości. Rozdział 8., „Tworzenie raportów z testów penetracyjnych”, poświęcony jest w całości najlepszym praktykom tworzenia profesjonalnych raportów końcowych po zakończeniu testów penetracyjnych. Omówimy tutaj między innymi efektywne sposoby prezentacji wniosków, przedstawimy kilka wskazówek dotyczących formatowania dokumentów i zaprezentujemy kilka szablonów, które będziesz mógł wykorzystać podczas tworzenia własnych raportów.

Czego potrzebujesz do pracy z książką? Czytelnik powinien posiadać podstawową wiedzę na temat aplikacji internetowych, połączeń sieciowych oraz metodologii przeprowadzania testów penetracyjnych. W tej książce przedstawiamy szczegółowo, krok po kroku, sposoby przeprowadzania ataków przy użyciu narzędzi zaimplementowanych w systemie Kali Linux oraz innych narzędzi typu open source, dostępnych w internecie. Doświadczenie w pracy i znajomość poprzednich wersji systemu Backtrack Linux i podobnych narzędzi nie jest absolutnie wymagana, aczkolwiek z pewnością będzie dla Czytelnika wielkim ułatwieniem. Wymagania sprzętowe dla środowiska testowego i systemu Kali Linux zostały szczegółowo omówione w rozdziale 1., „Przygotowania”.

Dla kogo przeznaczona jest ta książka? Nasza książka przeznaczona jest przede wszystkim dla pentesterów, czyli użytkowników zawodowo zajmujących się przeprowadzaniem testów penetracyjnych aplikacji internetowych i serwerów WWW, oraz dla tych wszystkich, którzy chcą poznać możliwości systemu Kali Linux

17

Kali Linux. Testy penetracyjne

i używać ich na własne potrzeby. Jeżeli chcesz dowiedzieć się, jak przeprowadzać testy penetracyjne, jak wyszukiwać podatności i luki w zabezpieczeniach aplikacji internetowych i serwerów WWW oraz jak przygotowywać profesjonalne raporty po przeprowadzeniu takich testów, to ta książka jest właśnie dla Ciebie.

Konwencje W tej książce wykorzystujemy różne style tekstu do wyróżniania różnych rodzajów informacji. Poniżej znajdziesz kilka przykładów takich stylów wraz z krótkimi objaśnieniami. Słowa kluczowe, fragmenty kodu i nazwy poleceń są w tekście wyróżnione w następujący sposób: „Na przykład nowemu profilowi możesz nadać nazwę Mój pierwszy skan lub użyć dowolnej innej nazwy”. Bloki kodu (listingi) oraz wyniki działania komend wydawanych w wierszu poleceń są formatowane w następujący sposób:

Wszystkie polecenia wpisywane przez użytkownika w wierszu polecenia są formatowane w następujący sposób: sqlmap -u http://www.drchaous.com/article.php?id=5 -T tablesnamehere -U test --dump -U test –dump

Nowe pojęcia i ważne słowa zostały w tekście pogrubione. Komunikaty wyświetlane na ekranie, nazwy poleceń menu, nazwy okien dialogowych i inne podobne elementy zostały w tekście wyróżnione pochyloną czcionką, na przykład: „Po kliknięciu przycisku Execute (…) zostanie dokonana próba wstrzyknięcia kodu SQL”. Ostrzeżenia i inne ważne uwagi oraz różne wskazówki, ciekawostki i porady są wyróżnione w ten sposób.

Errata Chociaż dołożyliśmy wszelkich możliwych starań, aby w naszych książkach nie pojawiały się pomyłki czy niedociągnięcia, to jednak chochliki nie dają za wygraną. Jeżeli znajdziesz jakiś błąd w naszej książce — niezależnie od tego, czy na przykład jest to błąd w tekście, czy pomyłka w kodzie listingu — będziemy bardzo zobowiązani, jeżeli nas o tym poinformujesz. Wysyłając taką informację, pomożesz uchronić innych Czytelników przed niepotrzebną frustracją, a nam

18

Wstęp

umożliwisz przygotowanie poprawek i ulepszeń, które zostaną wprowadzone do kolejnego wydania. Jeżeli znajdziesz jakiś błąd, możesz go zgłosić, wchodząc na stronę http://helion.pl/user/erraty/ i wypełniając odpowiednie dane w zamieszczonym tam formularzu. Zweryfikowane zgłoszenie zostanie opublikowane na stronie erraty książki i uwzględnione w jej kolejnych wydaniach. Wszystkie zgłoszone błędy i poprawki możesz znaleźć na stronie internetowej poświęconej książce w witrynie wydawnictwa Helion (wejdź na stronę wybranej książki, przejdź na kartę Szczegóły i poszukaj łącza o nazwie Errata).

Piractwo Tworzenie pirackich kopii materiałów multimedialnych i ich nielegalna dystrybucja w internecie jest problemem dla każdego wydawnictwa. Wydawnictwo Helion traktuje sprawę ochrony praw autorskich i licencji w poważny sposób. Jeżeli kiedykolwiek znajdziesz w sieci nielegalne kopie naszych książek i innych produktów w dowolnej formie, bardzo prosimy o podanie sieciowego adresu serwera lub strony WWW zawierającej takie materiały, co pozwoli nam na podjęcie odpowiednich kroków. Jeżeli chcesz skontaktować się z nami w sprawie naruszenia praw autorskich, możesz tego dokonać, wypełniając anonimowy formularz na stronie http://helion.pl/piracy.phtml. Z góry bardzo dziękujemy za Twoją pomoc w ochronie praw autorskich!

19

Kali Linux. Testy penetracyjne

20

1 Przygotowania Wiele firm i organizacji oferuje usługi z zakresu bezpieczeństwa systemów teleinformatycznych i w swoich materiałach używa takich pojęć, jak audyt bezpieczeństwa, oszacowanie ryzyka i stanu bezpieczeństwa systemów i aplikacji czy testy penetracyjne. Niestety, bardzo często pojęcia te są ze sobą mylone i w nieuzasadniony sposób używane zamiennie. Zgodnie z definicją audyt bezpieczeństwa (ang. security audit) to proces mający na celu wymierną, techniczną ocenę stanu bezpieczeństwa danego systemu czy aplikacji w odniesieniu do określonej listy kontrolnej, przepisów prawa bądź zgodności z normami, standardami lub przepisami wewnętrznymi danej organizacji, podczas gdy oszacowanie bezpieczeństwa (ang. security assessment) to proces pozwalający na identyfikację luk w zabezpieczeniach systemów i aplikacji przy użyciu różnorodnych metod i narzędzi informatycznych. Testy penetracyjne to proces wykraczający daleko poza ramy szacowania bezpieczeństwa, mający na celu praktyczną ocenę bieżącego stanu bezpieczeństwa systemu. Testy penetracyjne polegają na przeprowadzaniu analizy zidentyfikowanych podatności i luk w zabezpieczeniach w celu weryfikacji, czy stanowią one rzeczywiste zagrożenie dla badanego systemu lub aplikacji. Wyobraźmy sobie, że podczas audytowania czy szacowania bezpieczeństwa zasobów informatycznych określonej organizacji przeprowadzone zostało skanowanie, którego wynikiem było zidentyfikowanie dużej liczby potencjalnych luk w zabezpieczeniach wielu systemów. Następujący później test penetracyjny będzie miał na celu próbę wykorzystania zidentyfikowanych podatności z perspektywy potencjalnego włamywacza i sprawdzenia, które z nich stanowią rzeczywiste zagrożenie dla badanego systemu czy aplikacji. Dzięki takiemu postępowaniu można zredukować listę potencjalnych zagrożeń, potwierdzić istnienie (lub brak) podatności i błędów bezpieczeństwa w badanym systemie, sprawdzić skuteczność jego zabezpieczeń i przygotować rekomendacje podnoszące jego bezpieczeństwo. Testy penetracyjne są najefektywniejsze w sytuacji, kiedy są przeprowadzane na konkretnym systemie i mają ściśle określony cel. Jakość zamiast ilości to klucz do pomyślnego przeprowadzania testów penetracyjnych. Drobiazgowa analiza jednego, określonego systemu i dobrze przemyślany ukierunkowany atak przynosi z reguły znacznie więcej informacji na temat bezpieczeństwa danego systemu i czasu

Kali Linux. Testy penetracyjne

reakcji na incydenty niż szeroko zakrojony „ślepy” atak. Dzięki starannemu wybraniu systemów, które zostaną poddane atakowi, ekspert przeprowadzający testy penetracyjne może dokonać szczegółowej oceny ryzyka i stanu bezpieczeństwa całej badanej infrastruktury informatycznej. Samo przeprowadzenie testu penetracyjnego w żaden sposób nie powoduje, że sieć komputerowa danej organizacji staje się bezpieczniejsza!

Przyjęcie założenia, że samo wykonanie testu penetracyjnego przyczyni się do zwiększenia poziomu bezpieczeństwa danego systemu, jest bardzo często popełnianym błędem, co każdy ekspert powinien jasno i wyraźnie przekazywać wszystkim potencjalnym zleceniodawcom. Przeprowadzenie testu penetracyjnego ma na celu praktyczną ocenę bieżącego stanu bezpieczeństwa systemu i odporności na próby przełamania jego istniejących zabezpieczeń. Jeżeli w systemie zleceniodawcy nie zostały wcześniej zaimplementowane odpowiednie zabezpieczenia, to przeprowadzenie testów penetracyjnych nie przyniesie praktycznie żadnych korzyści. Pamiętaj, że przeprowadzenie testów penetracyjnych powinno być rozpatrywane najlepiej dopiero wtedy, kiedy właściciel systemu jest przekonany, że dołożył wszelkich starań mających na celu zapewnienie odpowiedniego poziomu zabezpieczenia swojego systemu i jest gotowy na praktyczną weryfikację takiego stanu rzeczy. Jeżeli prowadzisz firmę konsultingową oferującą między innymi przeprowadzanie testów penetracyjnych, powinieneś pamiętać, że jednym z najważniejszych elementów umowy z właścicielem systemu powinno być ustalenie szczegółowego zakresu prac. W takim dokumencie powinna się znaleźć kompletna lista zasobów i aplikacji, które będą przedmiotem ataku, oraz lista narzędzi, które będą używane do jego przeprowadzenia. Jedną z najlepszych praktyk w tym zakresie jest pełna współpraca z właścicielem systemu już na etapie projektowania testu penetracyjnego, dzięki czemu można wspólnie wypracować jego zakres tak, aby jego wyniki były jak najbardziej miarodajne. Książka Kali Linux. Testy penetracyjne to praktyczny poradnik, który krok po kroku przedstawia metody wyszukiwania, identyfikacji i wykorzystywania luk w zabezpieczeniach aplikacji internetowych. Znajdziesz tutaj takie zagadnienia, jak wyszukiwanie celów ataku, identyfikacja i wykorzystywanie luk w zabezpieczeniach (zarówno aplikacji internetowych, jak i klientów wykorzystujących usługi sieciowe), metody ochrony aplikacji internetowych przed najczęściej stosowanymi rodzajami ataków oraz tworzenie profesjonalnych raportów końcowych po zakończeniu testów penetracyjnych. Wierzymy, że ta książka będzie bardzo przydatna nie tylko dla Czytelników, którzy są zainteresowani zagadnieniami związanymi z przeprowadzaniem testów penetracyjnych, ale również dla tych, którzy chcą poznać system Kali Linux i dowiedzieć się, jakie są jego możliwości i czym się on różni od systemu BackTrack. Mamy ponadto nadzieję, że nasza książka będzie też znakomitym kompendium dla doświadczonych pentesterów, którzy będą chcieli odświeżyć nieco swoje wiadomości oraz poznać nowe narzędzia i techniki. W tym rozdziale szczegółowo omówimy podstawowe założenia różnych usług związanych z bezpieczeństwem systemów informatycznych oraz przedstawimy szereg wskazówek, które pozwolą Ci w profesjonalny sposób przeprowadzać testy penetracyjne. Dowiesz się między innymi, 22

Rozdział 1. • Przygotowania

czym różnią się testy penetracyjne aplikacji internetowych od innych usług, i poznasz ogólną metodologię ich przeprowadzania. Znajdziesz tutaj również krótki opis instalacji zarówno testowego, jak i produkcyjnego środowiska systemu Kali Linux.

Podstawowe założenia testów penetracyjnych aplikacji internetowych Aplikacja internetowa to aplikacja, która w charakterze klienta wykorzystuje dowolną przeglądarkę sieciową. Taką aplikacją może być na przykład proste forum dyskusyjne, ale również bardzo złożony arkusz kalkulacyjny. Aplikacje internetowe zawdzięczają swoją popularność przede wszystkim łatwości dostępu do usług oraz możliwości centralnego zarządzania systemem wykorzystywanym przez bardzo wiele rozproszonych klientów. Wymagania, jakie musi spełniać klient, aby uzyskać dostęp do aplikacji internetowych, są wyznaczane i realizowane przez standardy przemysłowe współczesnych przeglądarek sieciowych, co znakomicie upraszcza życie zarówno dostawcom takich usług, jak i klientom, którzy z nich korzystają. Aplikacje internetowe są obecnie najczęściej wykorzystywanym rodzajem aplikacji w zdecydowanej większości firm i organizacji. Jeżeli przyjrzysz się współczesnym smartfonom czy tabletom, to przekonasz się, że większość aplikacji dostępnych na tego typu urządzeniach to właśnie aplikacje internetowe. Duża i wciąż rosnąca popularność takich aplikacji stała się przyczyną powstania nowego środowiska, pełnego wyzwań zarówno dla profesjonalistów zajmujących się zabezpieczaniem systemów sieciowych, jak i dla hakerów, zajmujących się przeprowadzaniem ataków i wykorzystywaniem luk w zabezpieczeniach takich systemów. Ze względu na różnorodność systemów sieciowych i rodzajów aplikacji internetowych zakres testów penetracyjnych może być bardzo szeroki. Podczas przeprowadzania tych testów badaniom powinny być poddawane zarówno same elementy środowiska aplikacji internetowych, takie jak usługi hostingowe, dostęp do usług czy metody przechowywania danych, jak i cała komunikacja i wymiana danych pomiędzy nimi. Zakres takiego przedsięwzięcia możemy przedstawić na przykładzie przeprowadzania testów penetracyjnych serwera Linux udostępniającego aplikacje internetowe dla urządzeń mobilnych. Minimalny zakres prac powinien obejmować analizę samego serwera linuksowego (system operacyjny, konfiguracja sieciowa itd.), aplikacje udostępniane na serwerze, sposoby uwierzytelniania użytkowników, urządzenia klienckie korzystające z zasobów serwera oraz komunikację pomiędzy wszystkimi wymienionymi elementami. Dodatkowo w zakresie prac można ująć sprawdzenie, w jaki sposób urządzenia mobilne są dostarczane użytkownikom, czy takie urządzenia są wykorzystywane do innych celów niż korzystanie z danej aplikacji internetowej, czy w pobliżu znajdują się jakieś inne sieci bezprzewodowe, jak przeprowadzana jest aktualizacja i konserwacja systemu i jak przebiega proces weryfikacji użytkowników. Dlaczego to jest takie ważne? Można na przykład bez większych trudności wyobrazić sobie sytuację, w której zabezpieczenia serwera linuksowego zostaną przełamane dzięki podłączeniu się do niego autoryzowanego

23

Kali Linux. Testy penetracyjne

urządzenia mobilnego, które zostało wcześniej zainfekowane odpowiednim złośliwym oprogramowaniem. Innym przykładem zagrożenia takiego systemu może być wykorzystanie serwisów społecznościowych do pozyskania poufnych informacji z autoryzowanych urządzeń mobilnych. W rozdziale 8., „Tworzenie raportów z testów penetracyjnych”, znajdują się przykładowe szablony dokumentów precyzujących zakresy planowanych testów penetracyjnych. Znajdziesz tam również listy kontrolne, które możesz wykorzystać podczas rozmowy z właścicielem systemu dotyczącej przygotowania listy celów testu penetracyjnego aplikacji internetowych. Przygotowując zakres prac, powinieneś zawsze mieć na uwadze, że planowany test penetracyjny musi być dostosowany do specyficznych wymagań biznesowych strony zlecającej, zawierać szczegółowy harmonogram przeprowadzanych operacji, precyzować sprawy związane z finansowaniem i wynagrodzeniem za wykonane usługi oraz opisywać, co otrzymuje właściciel systemu po zakończeniu testów.

Metodologia przeprowadzania testów penetracyjnych Testy penetracyjne można podzielić na kilka etapów. Pierwszym ważnym etapem prac jest określenie początkowego statusu całego projektu. Najczęściej spotykany podział statusu testów penetracyjnych wyodrębnia trzy kategorie: testy typu black-box (ang. — „czarne pudełko”), testy typu white-box (ang. — „białe pudełko”) oraz podejście mieszane, czyli testy typu grey-box (ang. — „szare pudełko”). Scenariusz typu black-box zakłada, że pentester przed rozpoczęciem testu nie posiada żadnej wiedzy na temat badanego systemu, procedur bezpieczeństwa wdrożonych w środowisku danej firmy ani świadczonych przez nią usług. Przeprowadzenie testu typu black-box wymaga szeroko zakrojonego etapu gromadzenia informacji i zazwyczaj jest procesem długotrwałym, zgodnie z założeniem, że potencjalny napastnik może przez długi czas przeprowadzać badania i analizę danego systemu przed dokonaniem finalnego ataku. Z punktu widzenia pentestera scenariusz typu black-box może sprawiać pewne problemy ze szczegółowym przygotowaniem zakresu prac. Na przykład w takiej sytuacji nasza wiedza na temat badanego środowiska będzie bardzo ograniczona, więc nie będziemy w stanie precyzyjnie oszacować, jak dużo czasu trzeba będzie poświęcić na fazę rekonesansu. W praktyce oczywiście przekłada się to na koszty przeprowadzania całego testu. Właściciele systemów zazwyczaj nie będą zbyt chętni do podpisywania i finansowania umowy dającej Ci do dyspozycji nieograniczoną ilość czasu i zasobów. Z drugiej jednak strony, jeżeli nie poświęcisz na przeprowadzenie rozpoznania odpowiedniej ilości czasu, to taki test penetracyjny będzie zakończony, zanim jeszcze się na dobre rozpocznie. Taki scenariusz jest również niepraktyczny, ponieważ w rzeczywistości zdeterminowany haker nie będzie przecież ograniczony ani zakresem prac, ani czasem

24

Rozdział 1. • Przygotowania

przygotowania ataku, ani budżetem takiej operacji, tak jak wynajęty do wykonania takiego zlecenia pentester. Z tego właśnie powodu uważamy, że scenariusz typu grey-box jest zdecydowanie lepszym rozwiązaniem. Scenariusz typu white-box zakłada, że pentester posiada szczegółową wiedzę na temat systemu, który będzie przedmiotem testu. W takim scenariuszu cele testu penetracyjnego są szczegółowo zdefiniowane i zazwyczaj jego wyniki są w dużej mierze przewidywalne. Pentester przed rozpoczęciem działania otrzymuje od właściciela dokładne informacje na temat infrastruktury sieciowej, typów systemów operacyjnych, procedur bezpieczeństwa stosowanych w firmie i świadczonych przez nią usług. „Białe” testowanie zazwyczaj jest skoncentrowane na osiągnięciu specyficznych celów biznesowych, takich jak sprawdzenie, czy zabezpieczenia systemu spełniają określone normy, są zgodne z określonymi przepisami prawnymi lub czy po prostu spełniają wewnętrzne wymogi bezpieczeństwa danej firmy lub organizacji. Zwykle taki scenariusz zajmuje też znacznie mniej czasu. Test penetracyjny typu white-box pozwala na znaczne zredukowanie etapu gromadzenia informacji, dzięki czemu całkowity koszt wykonania takiej usługi jest niższy. Testy penetracyjne typu white-box są z reguły wykonywane przez wewnętrzne zespoły IT danej firmy zajmujące się bezpieczeństwem zasobów informatycznych.

Testy penetracyjne typu grey-box plasują się gdzieś pomiędzy testami typu black-box a whitebox. Z takim scenariuszem mamy do czynienia w sytuacji, kiedy właściciel danego systemu wyraża zgodę, aby pewne informacje były gromadzone podczas fazy rekonesansu, ale jednocześnie zezwala pentesterowi na pominięcie tego etapu. Pentester zwykle otrzymuje zestaw podstawowych informacji o celu ataku, aczkolwiek nie ma dostępu do wielu innych, zastrzeżonych danych. W rezultacie osoba przeprowadzająca test penetracyjny dysponuje sporą wiedzą o systemie mającym być przedmiotem badania, ale danych jest stanowczo zbyt mało, aby można to było zaklasyfikować jako test typu white-box. W realnym świecie potencjalny haker zazwyczaj będzie chciał przed rozpoczęciem ataku zebrać jak najwięcej informacji o jego celu. Większość napastników (z wyjątkiem tzw. script kiddies czy po prostu mało doświadczonych „hakerów”, wyszukujących w internecie różne narzędzia i sprawdzających ich działanie) nie wybiera swoich celów przypadkowo. Prawdziwy haker jest mocno zmotywowany i zwykle wcześniej miał już w taki czy inny sposób do czynienia z firmą lub organizacją, której zasoby informatyczne są przedmiotem jego ataku. Testy typu grey-box to opcja bardzo atrakcyjna i często wybierana przez profesjonalnych pentesterów, ponieważ ten rodzaj testów pozwala na przeprowadzenie ataku odzwierciedlającego operacje wykonywane przez potencjalnego napastnika w rzeczywistym świecie. Co więcej, testy typu greybox pozwalają pentesterowi skoncentrować się bardziej na próbach wykorzystania zidentyfikowanych luk w zabezpieczeniach niż na przeprowadzaniu szeroko zakrojonego rekonesansu. Dokument zawierający zakres prac powinien również definiować sposób, w jaki test penetracyjny zostanie rozpoczęty i przeprowadzony. Umowa między pentesterem a właścicielem systemu na wykonanie testu penetracyjnego powinna obejmować dane zebrane wcześniej podczas konsultacji

25

Kali Linux. Testy penetracyjne

z administratorem systemu (czy na przykład z przedstawicielami działu IT zleceniodawcy) i szczegółowo udokumentować zakres zlecanego testu. Dzięki temu możliwe będzie uniknięcie rekonesansu i atakowania systemów, które nie zostały ujęte w umowie. Dobrze zdefiniowany i udokumentowany zakres prac zabezpiecza zarówno zleceniodawcę, jak i pentestera przed niekontrolowanym rozszerzaniem zakresu na kolejne systemy, wymusza działanie w określonych ramach czasowych oraz pomaga dostarczyć odpowiednie materiały i raporty po zakończeniu testu. W realnym świecie potencjalny napastnik zazwyczaj nie jest w żaden sposób ograniczony takimi przyziemnymi sprawami jak czas, koszty, etyka działania czy zestaw dozwolonych narzędzi, stąd legalne przeprowadzanie testów penetracyjnych nie zawsze jest w stanie naśladować rzeczywiste działania hakerów. W odróżnieniu od ukierunkowanych testów penetracyjnych przeprowadzanych na wybranych, ściśle określonych systemach, testy o nieograniczonym zakresie działania mogą nie wykrywać pewnych podatności i luk w zabezpieczeniach po prostu dlatego, że test zostanie zakończony przed sprawdzeniem systemu podatnego na atak lub pentester nie wykona takiego czy innego testu na określonym systemie. Dobrym przykładem może być hipotetyczna sytuacja, w której pentester zdołał przechwycić dane uwierzytelniające użytkownika (nazwę konta i hasło dostępu), zakończył test i w raporcie końcowym napisał, że udało mu się uzyskać dostęp do takiego czy innego systemu — ale niestety nie sprawdził już, czy system, do którego uzyskał dostęp, jest podatny na inne ataki sieciowe. W dokumencie precyzującym zakres testu warto również załączyć informacje o tym, kiedy test będzie przeprowadzany, kto ze strony właściciela systemu będzie o nim wiedział i kto jest osobą kontaktową dla pentestera. Pamiętaj, że w rzeczywistym świecie napastnik może uderzyć w każdej chwili, a najczęściej dzieje się to wtedy, kiedy nikt takiego ataku się nie spodziewa. Poniżej przedstawiamy zestawienie najważniejszych zagadnień, które powinieneś wziąć pod uwagę podczas przygotowywania zakresu prac dla testu penetracyjnego:  Definicja systemów, które będą poddane testowi — czyli szczegółowa lista systemów, które będziesz testował na zlecenie klienta. Dla każdego z systemów powinieneś załączyć takie informacje, jak nazwa systemu, adres sieciowy, rodzaj systemu oraz jego rola w środowisku zleceniodawcy.  Ramy czasowe planowanego testu — czyli dokładne daty i czas rozpoczęcia oraz oczekiwanego zakończenia testu. Dobrą i zdecydowanie rekomendowaną praktyką jest takie zaplanowanie testu, aby był przeprowadzany NIE TYLKO w standardowych godzinach pracy firmy czy organizacji.  Opis metod testowania systemów — czyli odpowiedzi na pytania typu: jakie metody skanowania są dozwolone, a jakich nie możesz użyć? Jakie rodzaje podatności możesz wykorzystać w próbach przełamania zabezpieczeń systemu? Jakie ryzyko niesie ze sobą zastosowanie poszczególnych metod testowania? Jaki wpływ mogą mieć potencjalne awarie poszczególnych systemów, spowodowane testami penetracyjnymi, na funkcjonowanie środowiska komputerowego zleceniodawcy? Czy możesz na przykład użyć portali społecznościowych do podszywania się pod pracownika firmy? Czy możesz przeprowadzić atak typu DoS na kluczowe systemy zleceniodawcy? Czy możesz uruchamiać własne skrypty wykorzystujące luki w zabezpieczeniach serwerów zleceniodawcy? Nietrudno zauważyć, że niektóre metody ataku niosą ze sobą potencjalnie znacznie większe zagrożenia uszkodzenia systemów klienta niż inne.

26

Rozdział 1. • Przygotowania

 Opis oprogramowania i narzędzi wykorzystywanych podczas testu — czyli lista

wszystkich aplikacji i narzędzi, z których będziesz korzystał podczas przeprowadzania testu penetracyjnego. Z oczywistych względów ten punkt jest bardzo ważny, ale jednocześnie może budzić pewne kontrowersje. Wielu profesjonalistów zajmujących się zagadnieniami bezpieczeństwa systemów informatycznych uważa, że przedstawienie wykorzystywanych narzędzi jest ujawnianiem tajemnic zawodowych. My wierzymy, że jest to prawda tylko w sytuacji, kiedy tacy „konsultanci” wykorzystują powszechnie dostępne oprogramowanie komercyjne i ich raporty końcowe są tylko nieco podrasowanymi raportami wygenerowanymi w prostej linii przez takie narzędzia. Doświadczony pentester nie powinien mieć żadnych obiekcji związanych z ujawnieniem listy wykorzystywanych narzędzi, a w sytuacji, kiedy udało się pomyślnie wykorzystać taką czy inną lukę w zabezpieczeniach, powinien szczegółowo udokumentować całą sprawę, łącznie z opisem użytych narzędzi i poleceń. Dzięki takiemu opisowi proces wykorzystania luki staje się powtarzalny, co pozwoli zleceniodawcy na lepsze zrozumienie sposobu, w jaki zabezpieczenia systemu zostały przełamane i z jakimi wiązało się to trudnościami.  Lista osób powiadomionych o planowanym teście penetracyjnym — czyli lista wszystkich „wiedzących”, którzy zostali poinformowani, że test penetracyjny zostanie przeprowadzony w uzgodnionym terminie. Dodatkowo powinny się tutaj znaleźć informacje o tym, czy ze strony wewnętrznego zespołu IT zajmującego się bezpieczeństwem przewidziana jest jakaś reakcja na próby przełamywania zabezpieczeń prowadzone przez pentestera. Jeżeli tak, to być może warto nie informować wcześniej członków tego zespołu o planowanym teście. Odpowiednie powiadomienia są bardzo ważne zwłaszcza w sytuacji, kiedy badamy aplikacje internetowe, które są udostępniane na serwerach innego dostawcy usług internetowych (na przykład w chmurze), ponieważ przeprowadzenie testu penetracyjnego może mieć wtedy wpływ na działanie pozostałych usług tego dostawcy.  Początkowy status testu — czyli poziom wiedzy o badanym systemie, z jakiego rozpoczynamy test penetracyjny. Powinieneś tutaj zamieścić zestawienie danych o systemie, które otrzymasz od jego właściciela przed rozpoczęciem testu. Czy pentester będzie na przykład miał dostęp do serwerów poprzez sieć internet i (lub) intranet? Jaki poziom dostępu do serwerów otrzyma pentester? Jakiego typu test przeprowadzamy dla poszczególnych celów (black-box, white-box czy grey-box)?  Definicja przestrzeni celów — czyli szczegółowy opis funkcji biznesowych celu,

które będą przedmiotem testu penetracyjnego. Pentester będzie na przykład przeprowadzał test penetracyjny aplikacji internetowej wykorzystywanej przez dział sprzedaży, ale nie będzie badał innych aplikacji udostępnianych na tym samym serwerze.  Identyfikacja obszarów krytycznych — czyli szczegółowa lista systemów, których

pentester nie może w żaden sposób „dotykać”, aby nie wywołać przypadkowej awarii spowodowanej testami. Czy celem testu może być na przykład główny serwer odpowiadający za uwierzytelnianie użytkowników w środowisku zleceniodawcy? Utworzenie listy „zakazanych” celów przed rozpoczęciem testu penetracyjnego jest niezmiernie ważne. 27

Kali Linux. Testy penetracyjne

 Definicja „zdobycia flagi” — czyli szczegółowe wytyczne, jak daleko pentester

może się posunąć w przełamywaniu zabezpieczeń i eksploatacji skompromitowanego systemu. Czy pentester może próbować usunąć jakieś dane z zasobów sieciowych zleceniodawcy, skopiować je na swój komputer lub zakończyć test po uzyskaniu określonego poziomu nieautoryzowanego dostępu do systemu?  Specyfikacja raportu końcowego — czyli opis tego, co zleceniodawca otrzymuje

po zakończeniu testu penetracyjnego. Jakiej formy raportu końcowego oczekuje zleceniodawca? Czego oczekuje zleceniodawca po zakończeniu testu penetracyjnego? Jakie cele chce osiągnąć? Upewnij się, że oczekiwania zleceniodawcy zostały dokładnie sprecyzowane, tak aby uniknąć rozszerzania ad hoc zakresu testu w trakcie jego trwania. Czy jakiekolwiek fragmenty raportu końcowego powinny pozostać poufne lub zastrzeżone tylko dla wybranej grupy pracowników? W jakiej formie powinien zostać dostarczony raport końcowy? Dobrym rozwiązaniem może być przedstawienie klientowi przykładowego raportu końcowego przed podpisaniem finalnej umowy, tak aby uniknąć niepotrzebnych niespodzianek.  Rekomendacje powykonawcze — czyli informacje o oczekiwanych przez właściciela

systemu rekomendacjach usprawnień związanych z podatnością jego systemu na zagrożenia bezpieczeństwa spowodowane wykrytymi lukami w zabezpieczeniach. Czy znalezione podatności na atak i luki w zabezpieczeniach powinny zostać szczegółowo udokumentowane wraz z opisem akcji pozwalających na ich usunięcie? Kto powinien zostać powiadomiony, jeżeli wskutek przeprowadzania testu penetracyjnego badany system ulegnie awarii? Jak pentester powinien postępować w przypadku znalezienia poufnych danych? W praktyce większość firm zajmujących się testami penetracyjnymi NIE załącza informacji o sposobach „załatania” znalezionych luk w zabezpieczeniach i pozostawia takie sprawy działowi IT właściciela systemu. Poniżej zamieszczamy definicje wybranych usług związanych z bezpieczeństwem. Definicje te mogą Ci ułatwić definiowanie zakresu usług Twojej firmy:  Audyt bezpieczeństwa — to proces oszacowania stopnia zgodności ocenianego

systemu lub aplikacji z określonymi standardami lub wytycznymi bezpieczeństwa wybranymi jako punkt odniesienia. Standardem nazywamy ściśle określony zestaw kryteriów, które musi spełniać dany system, natomiast wytyczne określają minimalny, akceptowalny poziom bezpieczeństwa danego systemu lub aplikacji. Standardy i wytyczne pozwalają na zachowanie spójności w implementacji zabezpieczeń w systemach teleinformatycznych i mogą być różne dla poszczególnych branż, technologii czy procesów. Duża część zleceń na wykonywanie takich usług dotyczy sytuacji, w których warunkiem dopuszczenia do pracy nowego serwera w sieci produkcyjnej jest pomyślne zaliczenie oficjalnego audytu bezpieczeństwa (na przykład w korporacjach lub instytucjach rządowych) lub wykazanie, że zabezpieczenia danego serwera znajdują się na określonym poziomie dla takich czy innych zastosowań (na przykład przetwarzanie wrażliwych danych). Bardzo ważną sprawą jest poinformowanie

28

Rozdział 1. • Przygotowania

potencjalnych zleceniodawców, czy Twoja firma posiada odpowiednie ubezpieczenie, chroniące w sytuacji, kiedy audyt wykonany po zakończeniu Twoich usług przyniesie niepomyślne rezultaty. Kolejnym krytycznym czynnikiem jest również dokładne dokumentowanie wszelkich rekomendacji dotyczących usprawniania systemu zabezpieczeń przekazywanych właścicielowi systemu po zakończeniu prac (czy w raporcie końcowym wymieniłeś tylko listę znalezionych podatności i luk w zabezpieczeniach, czy zasugerowałeś jakieś sposoby „załatania” znalezionych luk, czy może zdecydowałeś się na samodzielne usunięcie problemu w porozumieniu z właścicielem systemu?). Audyt bezpieczeństwa to coś znacznie większego i bardziej skomplikowanego niż tylko uruchomienie odpowiednich narzędzi skanujących i wygenerowanie raportu. Przeprowadzanie audytu wymaga postępowania zgodnie z powszechnie przyjętą metodologią i przygotowania raportu według ściśle określonych norm. Bardzo często zdarza się jednak, że właściciel systemu po pomyślnym zakończeniu audytu sprawdzającego zgodność jego systemów z określonymi standardami popada w fałszywe poczucie bezpieczeństwa i samozadowolenia. Należy jednak pamiętać o tym, że proces aktualizacji wszelkich standardów, norm i wytycznych dotyczących zabezpieczania systemów teleinformatycznych jest z reguły dosyć powolny i nie zawsze nadąża za dynamicznie zmieniającymi się rodzajami zagrożeń we współczesnym cyberświecie. Z tego powodu STANOWCZO zalecamy oferowanie klientom usług wykraczających daleko poza normy i standardy, tak aby zapewnić im zabezpieczenia systemów na poziomie wystarczającym do ochrony przed zagrożeniami spotykanymi na co dzień w rzeczywistym świecie. Oprócz wskazywania podatności i luk w zabezpieczeniach systemu klienta dobry konsultant powinien oferować sposoby ich „załatania” oraz sugerować działania pozwalające właścicielowi systemu na podniesienie stanu zabezpieczeń na poziom daleko wykraczający poza powszechnie przyjęte standardy przemysłowe i wytyczne branżowe.  Wykrywanie podatności systemu na ataki — to proces, w którym urządzenia

sieciowe, serwery, komputery użytkowników, systemy operacyjne lub aplikacje są skanowane i analizowane pod kątem występowania znanych i nieznanych podatności na ataki. Podatność na atak jest zazwyczaj związana z istnieniem luki w zabezpieczeniach, błędu w oprogramowaniu lub z niewłaściwym sposobem zaprojektowania, wykorzystania bądź ochrony urządzenia i jego oprogramowania. Wykorzystanie takiej czy innej podatności może spowodować, że potencjalny napastnik uzyska nieautoryzowany dostęp do systemu, podniesie swoje uprawnienia w nieautoryzowany sposób albo będzie w stanie przeprowadzić inny atak skutkujący awarią systemu bądź urządzenia (na przykład ataki typu DoS), wyciekiem poufnych danych lub innym zakłóceniem normalnego działania. Proces wykrywania podatności na ataki zazwyczaj kończy się po znalezieniu potencjalnych luk w zabezpieczeniach systemu, co oznacza, że pentester w takiej sytuacji nie dokonuje próby wykorzystania zidentyfikowanej podatności w celu zweryfikowania, czy stanowi ona realne, czy tylko potencjalne zagrożenie. Raport generowany po zakończeniu procesu wykrywania powinien obejmować ocenę 29

Kali Linux. Testy penetracyjne

ryzyka związanego z poszczególnymi podatnościami oraz rekomendować sposoby usunięcia (inaczej mówiąc, „załatania”) znalezionych luk. Istnieje bardzo wiele narzędzi, takich jak na przykład Kali Linux, które pozwalają na skanowanie i wyszukiwanie podatności na ataki systemów operacyjnych, oprogramowania, otwartych portów komunikacyjnych i innych elementów. Podobnie jak w przypadku testów penetracyjnych, wyszukiwanie podatności może mieć charakter biały (white-box), szary (grey-box) lub czarny (black-box). Skanowanie w poszukiwaniu podatności jest użyteczne tylko w sytuacji, kiedy obejmuje również ocenę ryzyka. Niestety, zdarza się, że w ramach audytu bezpieczeństwa wykonywany jest skan podatności, którego rezultaty przyczyniają się jedynie do zwiększenia objętości raportu końcowego, ale poza tym tak naprawdę nie mają praktycznie żadnej wartości. Dzieje się tak dlatego, że w raportach z większości skanerów wykorzystywanych do wyszukiwania podatności można znaleźć wyniki fałszywie pozytywne, wskazujące na istnienie podatności, których w rzeczywistości nie ma. Przyczyn tego jest bardzo wiele, od nieprawidłowej identyfikacji badanego systemu operacyjnego, poprzez wyszukiwanie poszczególnych aktualizacji bezpieczeństwa bez zwracania uwagi na zainstalowane aktualizacje zbiorcze i dodatki serwisowe, aż do niepoprawnej identyfikacji wersji zainstalowanego oprogramowania. Jak widać, w takiej sytuacji prawdziwy obraz stanu systemu może się wyłonić dopiero po dołączeniu do takiego raportu oceny ryzyka związanego z poszczególnymi podatnościami. W wielu przypadkach oznacza to niestety, że raporty wygenerowane przez zautomatyzowane narzędzia skanujące muszą być dodatkowo weryfikowane. Właściciel systemu zazwyczaj chce wiedzieć, jakie ryzyko jest związane z istnieniem takiej czy innej podatności oraz jakie będą szacowane koszty jej usunięcia lub przynajmniej zredukowania do akceptowalnego poziomu. Aby poprawnie oszacować koszty usunięcia podatności, musimy zatem wiedzieć, jak ocenić związane z nią ryzyko.

Ocena ryzyka Zrozumienie metody oceny ryzyka związanego z poszczególnymi podatnościami na atak jest niezmiernie istotnym czynnikiem, ponieważ na bazie tej oceny podejmowane są decyzje o tym, w jaki sposób należy zareagować. Większość firm, analizując wpływ ryzyka związanego z daną podatnością na funkcjonowanie wybranego systemu czy aplikacji, odnosi się do atrybutów słynnej triady CIA — poufności, integralności i dostępności (ang. confidentiality, integrity, availability). Aby przy szacowaniu ryzyka związanego z daną podatnością otrzymać pełny obraz tego, jakie zagrożenie stanowi ona dla systemu, właściciel systemu musi przeanalizować nie tylko jej wpływ na każdy z wymienionych czynników osobno, ale również na wszystkie trzy czynniki jako całość. Decyzja o tym, czy ryzyko związane z daną podatnością w wystarczający sposób uzasadnia konieczność poniesienia kosztów wdrożenia usprawnień pozwalających na jego zredukowanie do akceptowalnego poziomu, należy oczywiście do właściciela systemu. Większość klientów zapewne nie zgodzi się na przykład na wydanie kilku milionów dolarów na załatanie luki w zabez-

30

Rozdział 1. • Przygotowania

pieczeniach pozwalającej na skompromitowanie publicznie dostępnej drukarki, ale z pewnością nie będzie się długo zastanawiać nad wydaniem dwukrotnie większej sumy na odpowiednie zabezpieczenie systemów przetwarzających poufne dane firmy. Zgodnie z wytycznymi dla certyfikatu CISSP do obliczania ryzyka związanego z podatnością systemu lub aplikacji na atak wykorzystywane są formuły przedstawione poniżej. Spodziewana jednorazowa strata (SLE — ang. Single Loss Expectancy) — to koszt związany z przewidywaną stratą wartości zasobu (AV — ang. Asset Value) wynikającą z jednokrotnego wystąpienia zdarzenia powodującego daną stratę. Wskaźnik ekspozycji (EF — ang. Exposure Factor) określa procent wartości zasobu AV, jaki zostanie utracony w wyniku pojedynczego zdarzenia powodującego daną stratę (na przykład wysokość strat, jakie firma dostarczająca usługi internetowe może ponieść w wyniku awarii i wyłączenia jednego z serwerów). Wartość współczynnika SLE dla każdego zasobu powinna być obliczana podczas planowania budżetu wydatków związanych z bezpieczeństwem systemów informatycznych. Jeżeli po obliczeniu SLE okaże się, że potencjalna awaria może przynieść firmie miliony dolarów straty, to z pewnością warto rozważyć alokacje odpowiednich funduszy w planowanym budżecie. Formuła do obliczania wartości spodziewanej jednorazowej straty (SLE) ma następującą postać: SLE = AV*EF Kolejna bardzo ważna formuła pozwala na oszacowanie, jak często może wystąpić strata na poziomie SLE. Jeżeli strata SLE o wysokości wielu milionów dolarów może się przytrafić raz na kilkaset tysięcy lat (na przykład w wyniku bezpośredniego uderzenia meteorytu w budynek firmy), to po dokładnej analizie kosztów zapewne dojdziemy do wniosku, że zainwestowanie kolejnych milionów dolarów w wybudowanie czegoś w rodzaju futurystycznej tarczy antymeteorytowej chroniącej centralę firmy nie będzie miało większego sensu. Dla kontrastu, jeżeli podobne straty może przynieść pożar, a prawdopodobieństwo jego wystąpienia jest szacowane na raz na kilka lat, to zainwestowanie odpowiednich funduszy w system przeciwpożarowy będzie z pewnością bardzo rozsądnym posunięciem. Częstotliwość wystąpienia zdarzenia powodującego stratę w ciągu roku jest określana jako roczny wskaźnik wystąpienia zdarzenia (ARO — ang. Annual Rate of Occurence). Następnym ważnym wskaźnikiem jest roczna oczekiwana strata (ALE — ang. Annual Loss Exposure), która reprezentuje wartość przewidywanych rocznych strat wynikających z wystąpienia danego zdarzenia. Na przykład dla zdarzenia związanego z meteorytem niszczącym budynek firmy (wystąpienie zdarzenia raz na kilkaset tysięcy lat) wartość wskaźnika ALE jest zapewne bardzo niska, ale już dla wspomnianego wcześniej pożaru będzie to kwota, którą z pewnością warto uwzględnić podczas planowania przyszłych inwestycji związanych z zabezpieczeniami budynku. Formuła do obliczania wartości rocznej oczekiwanej straty (ALE) została przedstawiona poniżej: ALE = SLE*ARO

31

Kali Linux. Testy penetracyjne

Ostatnie i najważniejsze pytanie, na które musimy sobie odpowiedzieć, dotyczy tego, jaka jest ocena ryzyka dla danego zasobu związana z występowaniem danej podatności. Odpowiedź na to pytanie będzie miała bezpośredni wpływ na decyzję, czy warto zainwestować w poprawę zabezpieczeń danego zasobu, i jeżeli tak, to jakie fundusze należałoby na to przeznaczyć. Formuła do obliczania wartości ryzyka dla danego zasobu wygląda następująco: Ryzyko = WartośćZasobu*WspółczynnikZagrożenia* WspółczynnikPodatności*SzacowanyWpływNaZasób Bardzo często właściciel systemu nie zna wartości zmiennych niezbędnych do wykonania obliczeń związanych z zarządzaniem ryzykiem. Przedstawione formuły stanowią oczywiście tylko pewnego rodzaju wskazówki, które pozwalają na lepsze zrozumienie specyfiki zagadnień związanych z szacowaniem kosztów inwestycji w poprawę zabezpieczeń systemów teleinformatycznych. Formuły, których używaliśmy do obliczania ryzyka w scenariuszach z deszczem meteorytów i pożarem w budynku firmy, z pewnością pomogą w przygotowaniu uzasadnienia, dlaczego zaawansowany system przeciwpożarowy będzie zdecydowanie lepszą inwestycją niż tarcza chroniąca przed upadkiem na budynek niezapowiedzianych gości z kosmosu. Testy penetracyjne to metody przeprowadzania ataków na podatności i luki w zabezpieczeniach systemów i aplikacji w sposób naśladujący rzeczywiste działania hakerów. Testy penetracyjne zazwyczaj przeprowadza się w sytuacji, kiedy wdrożenie wszystkich zaplanowanych zabezpieczeń systemów informatycznych zostało zakończone i właściciel systemu chce się upewnić, że nic nie zostało przeoczone. Jak już wspominaliśmy, w zależności od tego, jaką wiedzą o badanym systemie dysponuje pentester, testy penetracyjne możemy podzielić na trzy kategorie: białe (white-box pentest), szare (grey-box pentest) lub czarne (black-box pentest). Kluczowa różnica pomiędzy testami penetracyjnymi a skanowaniem systemu w poszukiwaniu podatności na ataki (ang. vulnerability assessment) polega na tym, że podczas testów penetracyjnych dokonywana jest próba wykorzystania znalezionych podatności i luk do przeprowadzenia ataku na dany system i przełamania jego zabezpieczeń, co w efekcie pozwala na weryfikację, czy znalezione podatności stanowią realne zagrożenie dla systemu. Skanowanie systemu w poszukiwaniu podatności może się przerodzić w test penetracyjny w sytuacji, kiedy właściciel systemu zezwoli pentesterowi na dokonanie próby przeprowadzenia ataku wykorzystującego znalezione podatności. Zazwyczaj koszt przeprowadzenia testów penetracyjnych jest wyższy niż w przypadku samego poszukiwania podatności, ponieważ jest z reguły procesem znacznie bardziej długotrwałym i wymaga zaangażowania wielu dodatkowych narzędzi i innych zasobów. Co ciekawe, jednym z bardzo rozpowszechnionych, a jednocześnie nieprawdziwych poglądów jest stwierdzenie, że przeprowadzenie testów penetracyjnych zwiększa bezpieczeństwo badanego systemu, ponieważ jest procesem znacznie kosztowniejszym niż wiele innych usług IT związanych z wdrażaniem i testowaniem zabezpieczeń. Zapamiętaj:  Testy penetracyjne nie mają żadnego wpływu na zwiększenie bezpieczeństwa badanych zasobów, ponieważ ich zadaniem jest po prostu ocena stanu istniejących zabezpieczeń! Właściciel systemu w zasadzie nie powinien zlecać wykonania testów penetracyjnych, jeżeli nie jest przekonany, że jego system jest już w wystarczającym stopniu zabezpieczony.

32

Rozdział 1. • Przygotowania

 Przeprowadzanie testów penetracyjnych może mieć negatywny wpływ na badany

system, spowodować zakłócenia w jego funkcjonowaniu lub nawet poważną awarię. Z tego powodu jedną z najważniejszych spraw do załatwienia przed rozpoczęciem testów penetracyjnych jest uzyskanie pisemnej zgody właściciela na wykonanie takiego testu. Przeprowadzanie testów penetracyjnych bez zgody właściciela w wielu krajach jest po prostu nielegalne i może być podstawą do odpowiedzialności karnej. Zgoda na wykonanie testu penetracyjnego powinna obejmować również informacje o tym, kto jest odpowiedzialny za ewentualne szkody powstałe na skutek jego przeprowadzenia i kto powinien zostać powiadomiony w sytuacji, kiedy podczas testu wystąpią zakłócenia w działaniu badanego systemu, i jak należy w takiej sytuacji postępować, aby uniknąć powstawania dalszych szkód. Dobre praktyki nakazują przed rozpoczęciem testu powiadomić właściciela systemu o ryzyku związanym z metodami wykorzystywanymi podczas testów penetracyjnych, tak aby wiedział, czego może się spodziewać. Jest to również jeden z powodów, dla których zazwyczaj rekomendujemy przeprowadzanie testów penetracyjnych w stosunkowo ograniczonym zakresie, ponieważ pozwala to na bardziej metodyczne podejście do całego zagadnienia. Polecaną praktyką jest również uzyskanie od zleceniodawcy pisemnego zapewnienia, że w przypadku całkowitej awarii systemu spowodowanej przeprowadzeniem testu penetracyjnego (najgorszy scenariusz) właściciel systemu będzie w stanie przywrócić jego działanie z wykorzystaniem istniejących kopii zapasowych lub innych procedur postępowania przygotowanych na wypadek awarii. Przygotowując zakres prac związanych z przeprowadzeniem testu penetracyjnego, nie powinieneś również zapominać o precyzyjnym zdefiniowaniu materiałów i raportów, jakich oczekuje właściciel systemu po zakończeniu testu. Pamiętaj, że w realnym świecie hakerzy bardzo często zdobywają niezbędną wiedzę o danym systemie, wykorzystując metody socjotechniczne, gdzie wstępne rozpoznanie polega raczej na „atakowaniu” użytkowników, a nie systemu. Jeżeli jednak zadaniem Twojego testu penetracyjnego ma być sprawdzenie podatności aplikacji internetowej na zdalny atak sieciowy, to zleceniodawca raczej nie będzie oczekiwał, że w raporcie końcowym załączysz szereg informacji, które uda Ci się w socjotechniczny sposób „wyciągnąć” od użytkowników. W zakresie prac związanych z testem penetracyjnym powinieneś również precyzyjnie zdefiniować cel całego przedsięwzięcia, tak aby obie strony nie miały żadnych wątpliwości, kiedy taki test można uważać za zakończony. Zazwyczaj formalne zakończenie testu będzie związane z dostarczeniem właścicielowi uzgodnionych w umowie materiałów i raportów końcowych. Pomyślne i satysfakcjonujące dla obu stron przeprowadzenie testu penetracyjnego jest w dużej mierze uzależnione od odpowiedniego wykorzystania narzędzi, czasu i zasobów niezbędnych do jego przeprowadzenia. Efektywniejszy i zoptymalizowany proces oznacza osiągnięcie lepszych rezultatów przy mniejszym nakładzie zasobów. Im większa będzie jakość materiałów i raportów końcowych, tym większa szansa na to, że oczekiwania zleceniodawcy zostaną spełnione, co niewątpliwie przyczyni się do wzrostu reputacji pentestera i zwiększy szansę na otrzymanie kolejnych zleceń w przyszłości. Z tego powodu przygotowanie odpowiedniej metodologii przeprowadzania testów penetracyjnych oraz tworzenia raportów końcowych jest niezmiernie ważne.

33

Kali Linux. Testy penetracyjne

Testy penetracyjne z wykorzystaniem systemu Kali Linux — założenia System Kali Linux został opracowany tak, aby w jak najlepszy sposób wspierać metodologię przeprowadzania testów penetracyjnych. Niezależnie od tego, czy przeprowadzasz testy typu white-box, black-box, czy grey-box i czy korzystasz z systemu Kali Linux, czy innych narzędzi, kolejne etapy postępowania będą zawsze takie same.

Etap 1. Rekonesans Przed rozpoczęciem ataku powinieneś zebrać możliwie najwięcej informacji o systemie i środowisku będącym jego celem. Im więcej informacji zdobędziesz, tym większą masz szansę na odniesienie sukcesu. Nietrudno zauważyć, że testowanie typu black-box wymaga przeprowadzenia znacznie bardziej rozbudowanego etapu gromadzenia informacji (etap rekonesansu) niż testy typu white-box, ponieważ w tym pierwszym przypadku przystępujesz do realizacji zadania, nie posiadając początkowo prawie żadnej wiedzy o atakowanym systemie. Etap rekonesansu może obejmować analizę środowiska celu, zbieranie informacji o działających w nim usługach na podstawie analizy nagłówków, monitorowanie zasobów, użytkowników i procesów, skanowanie sieciowe w poszukiwaniu aktywnych hostów, otwartych portów, adresów IP, próby identyfikacji systemów operacyjnych poszczególnych urządzeń, zbieranie informacji od użytkowników za pomocą metod socjotechnicznych, analiza publicznie dostępnych materiałów i wiadomości w portalach społecznościowych i wiele innych. Rekonesans jest zawsze pierwszym etapem każdego testu penetracyjnego, niezależnie od tego, czy chcesz tylko zweryfikować informacje o systemie otrzymane od jego właściciela, czy zbierasz dane o zupełnie nieznanym środowisku. Gromadzenie danych powinieneś zawsze rozpocząć od wyznaczenia środowiska celu na bazie uzgodnionego z właścicielem systemu zakresu testu penetracyjnego. Po zidentyfikowaniu celów ataku możesz rozpocząć zbieranie informacji, takich jak na przykład lista otwartych portów komunikacyjnych, adresy sieciowe celów, lista udostępnianych usług sieciowych itd. Takie dane posłużą Ci później do przygotowania planu działania, tak aby można było przeprowadzić jak najbardziej miarodajny test przy optymalnym wykorzystaniu posiadanych zasobów. Rezultaty rekonesansu powinny obejmować między innymi listę wszystkich hostów będących przedmiotem testu, listę aplikacji powiązanych z poszczególnymi hostami, listę usług działających na poszczególnych hostach oraz listę ich użytkowników. W menu głównym systemu Kali Linux znajdziesz kategorię o nazwie Information Gathering, gdzie zostało umieszczonych bardzo wiele różnych narzędzi wspomagających fazę rekonesansu, czyli inaczej mówiąc, wspomagających gromadzenie danych o atakowanym systemie. Znajdziesz tam narzędzia do analizy środowiska sieciowego, centrów danych, sieci bezprzewodowych, serwerów itd.

34

Rozdział 1. • Przygotowania

Poniżej zamieszczamy listę najważniejszych celów, które powinieneś osiągnąć w fazie rekonesansu:  Przygotowanie listy hostów będących przedmiotem testu.  Przygotowanie listy udostępnianych i zainstalowanych aplikacji oraz ich zastosowania.  Identyfikacja systemów operacyjnych.  Identyfikacja otwartych portów.  Identyfikacja uruchomionych usług.  Zebranie dodatkowych informacji o celach ataku za pomocą pasywnych metod

socjotechnicznych (opcjonalnie).  Udokumentowanie zebranych informacji.

Etap 2. Wyszukiwanie podatności Po zakończeniu identyfikacji celów i zbierania informacji na ich temat możesz przystąpić do wyszukiwania podatności i luk w zabezpieczeniach. Na tym etapie pentester powinien już wiedzieć wystarczająco dużo o celach ataku, aby wybrać najbardziej optymalne metody wyszukiwania słabych stron zabezpieczeń poszczególnych systemów (np. podatności w sposobach działania udostępnianych aplikacji, luki w zabezpieczeniach uruchomionych usług, podatności na atak poprzez wybrane porty komunikacyjne i wiele innych). Warto zauważyć, że audyty bezpieczeństwa czy usługi polegające na wyszukiwaniu podatności systemów na atak (ang. vulnerability assessment) zazwyczaj kończą się na tym właśnie etapie. Zebranie dokładnych informacji o atakowanym systemie w fazie rekonesansu znacząco ułatwia wyszukiwanie oraz identyfikację podatności i luk w zabezpieczeniach, skraca czas niezbędny do realizacji tego etapu i może bardzo pomagać w obchodzeniu zaimplementowanych mechanizmów bezpieczeństwa. Na przykład wykorzystanie jednego z ogólnych, „szerokopasmowych” skanerów sieciowych do analizy podatności na atak serwera aplikacji internetowych z pewnością zajmie sporo czasu i najprawdopodobniej zaalarmuje właściciela systemu, a może się zdarzyć, że wynikiem takiej operacji będzie tylko zestawienie ogólnych danych o systemie i zainstalowanych na nim aplikacjach. Z drugiej strony przeskanowanie takiego serwera ukierunkowane na poszukiwanie tylko określonego zestawu podatności, przygotowanego na podstawie danych zebranych w czasie rekonesansu, będzie znacznie trudniejsze do odkrycia, może być zrealizowane w bardzo krótkim czasie i może przynieść zaskakująco dobre rezultaty (oczywiście „dobre” z punktu widzenia pentestera próbującego przełamać zabezpieczenia systemu). Skanowanie celów w poszukiwaniu podatności na atak może być wykonywane ręcznie lub za pomocą wielu narzędzi pozwalających na mniejsze lub większe zautomatyzowanie takiego procesu. W menu systemu Kali Linux znajdziesz takie narzędzia w kategorii Vulnerability Analysis. Za pomocą dostępnych tam narzędzi możesz wyszukiwać podatności w szerokiej gamie systemów, takich jak serwery, aplikacje internetowe, urządzenia sieciowe, bazy danych itd.

35

Kali Linux. Testy penetracyjne

Poniżej zamieszczamy listę najważniejszych celów, które powinieneś osiągnąć w fazie wyszukiwania podatności:  Skanowanie urządzeń i aplikacji w poszukiwaniu podatności i luk w zabezpieczeniach.  Identyfikacja systemów i aplikacji podatnych na atak i uszeregowanie ich według priorytetów.  Identyfikacja użytkowników podatnych systemów i aplikacji.  Udokumentowanie zebranych informacji.

Etap 3. Wykorzystywanie zidentyfikowanych podatności W trzecim etapie przeprowadzania testu penetracyjnego możesz przystąpić do prób wykorzystywania zidentyfikowanych podatności w celu zweryfikowania, czy stanowią one rzeczywiste zagrożenie dla systemu, i sprawdzenia, czy pozwalają na uzyskanie dostępu do badanego systemu i przechowywanych w nim danych. To właśnie ten etap odróżnia testy penetracyjne od innych, pasywnych usług, takich jak wyszukiwanie podatności czy audyty bezpieczeństwa. Pamiętaj, że wszelkie próby przeprowadzania ataków na wybrane systemy bez uprzedniego uzyskania zgody ich właściciela mogą być nielegalne i stanowić podstawę do odpowiedzialności prawnej. Pomyślne zakończenie fazy w ogromnej mierze zależy od wyników, jakie zostały osiągnięte w poprzednich etapach. Metody wykorzystywania luk w zabezpieczeniach są specyficzne i często unikatowe dla każdej luki z osobna, stąd nieumiejętna próba wykorzystania takiej czy innej podatności bardzo często może powodować nieprzewidziane skutki i doprowadzić do zakłóceń w działaniu lub nawet załamania atakowanego systemu. Dobrym rozwiązaniem jest uszeregowanie zidentyfikowanych podatności według ich ważności (czy raczej potencjalnego zagrożenia dla systemu) i opracowanie na tej bazie odpowiedniej strategii ataku. Ataki wykorzystujące znalezione luki w zabezpieczeniach mogą być przeprowadzane ręcznie lub automatycznie, w zależności od tego, co chcemy osiągnąć. Innego podejścia wymaga próba wstrzyknięcia kodu SQL w celu nieautoryzowanego uzyskania dostępu do aplikacji internetowej, a zupełnie innego próba zastosowania metod socjotechnicznych do wydobycia nazwy konta administratora i jego hasła dostępu od pracowników działu pomocy technicznej IT. W menu systemu Kali Linux znajdziesz osobną kategorię o nazwie Exploitation Tools, zawierającą szereg narzędzi przeznaczonych do wykorzystywania różnego rodzaju podatności, począwszy od luk w zabezpieczeniach określonych usług, aż do narzędzi wspomagających stosowanie metod socjotechnicznych. Poniżej zamieszczamy listę najważniejszych celów, które powinieneś osiągnąć w tym etapie:  Dokonać próby wykorzystania zidentyfikowanych podatności i luk w zabezpieczeniach.  Przełamać zabezpieczenia systemu i znaleźć punkt zaczepienia do dalszych ataków.  Dokonać próby uzyskania nieautoryzowanego dostępu do danych.  Dokonać próby wydobycia poufnych informacji od użytkowników z wykorzystaniem

metod socjotechnicznych.

36

Rozdział 1. • Przygotowania

 Dokonać próby ataku na inne systemy i aplikacje.  Udokumentować zebrane informacje.

Etap 4. Podnoszenie uprawnień Uzyskanie dostępu do danego systemu nie zawsze gwarantuje, że osiągniesz założony cel testu penetracyjnego. Bardzo często zdarza się, że pomyślne wykorzystanie danej luki w zabezpieczeniach co prawda daje napastnikowi nieautoryzowany dostęp do systemu i danych, ale tylko w mocno ograniczonym zakresie. W takiej sytuacji napastnik musi spróbować podnieść swoje uprawnienia tak, aby uzyskać pełny dostęp do zasobów systemu, skopiować zastrzeżone dane itd. Podnoszenie uprawnień (ang. Privilege Escalation) może obejmować identyfikację kont użytkowników, próbę łamania ich haseł czy próby kopiowania danych systemowych. Przykładem może być sytuacja, w której napastnik po uzyskaniu ograniczonego dostępu do systemu lokalizuje plik shadow zawierający dane uwierzytelniające administratora systemu i innych użytkowników, a następnie próbuje uzyskać hasło administratora za pomocą programów do łamania haseł. Jeżeli taka próba się powiedzie, napastnik uzyska pełny dostęp do zasobów systemu na prawach administratora. W systemie Kali Linux wbudowano cały szereg narzędzi wspomagających proces podnoszenia uprawnień. Znajdziesz je w menu głównym, w kategoriach Password Attacks oraz Exploitation Tools. Ponieważ większość z tych aplikacji wchodzi w skład różnych pakietów narzędziowych, zostały one pogrupowane w odpowiednich podmenu. Poniżej zamieszczamy listę najważniejszych celów, które powinieneś osiągnąć w tym etapie:  Uzyskanie dostępu do zasobów systemu z wykorzystaniem podniesionych

uprawnień użytkownika.  Uzyskanie informacji o innych kontach użytkowników.  Uzyskanie dostępu do innych systemów z wykorzystaniem podniesionych

uprawnień użytkownika.  Udokumentowanie zebranych informacji.

Etap 5. Utrzymanie zdobytego przyczółka Ostatnim etapem testu penetracyjnego jest utrzymanie zdobytego przyczółka, czyli zapewnienie sobie stałego dostępu do zaatakowanego systemu poprzez znalezienie innych punktów wejścia do systemu oraz — jeżeli to możliwe — zatarcie śladów włamania do systemu. Istnieje duże prawdopodobieństwo, że aktywność związana z próbami penetracji systemu zostanie zauważona przez zespół bezpieczeństwa IT właściciela systemu i wywoła przeciwdziałanie, w wyniku którego luka wykorzystana przez pentestera zostanie zamknięta. Z tego powodu dobrą praktyką jest znalezienie innych punktów wejścia do systemu, co pozwoli pentesterowi na utrzymanie dostępu do systemu, kiedy jedna z dróg zostanie zamknięta. Alternatywną metodą dostępu do systemu

37

Kali Linux. Testy penetracyjne

może być zainstalowanie backdoora, utworzenie nowego konta użytkownika z prawami administratora systemu, uruchomienie szyfrowanego połączenia tunelowego czy innego połączenia sieciowego. Innym istotnym aspektem utrzymania zdobytego przyczółka jest zatarcie śladów penetracji systemu (na ile to możliwe). Takie postępowanie może znacząco utrudnić wykrycie ataku i zredukować reakcję ze strony zespołu bezpieczeństwa IT właściciela systemu. Proces usuwania śladów włamania może obejmować kasowanie logów użytkowników, maskowanie istniejących ścieżek dostępu do systemu i usuwanie innych śladów penetracji, takich jak komunikaty o wystąpieniu błędów spowodowane aktywnością pentestera. W menu głównym systemu Kali Linux znajdziesz kategorię o nazwie Maintaining Access, w której zamieszczono szereg narzędzi wspomagających utrzymanie zdobytego przyczółka w atakowanym systemie. Za pomocą tych narzędzi możesz utworzyć i utrzymywać różne rodzaje tylnych wejść do atakowanego systemu. Poniżej zamieszczamy listę najważniejszych celów, które powinieneś osiągnąć w tym etapie:  Ustanowienie wielu różnych kanałów dostępu do atakowanego systemu.  Zatarcie śladów nieautoryzowanego dostępu do systemu.  Przywrócenie normalnego funkcjonowania systemów, których działanie zostało

zakłócone wskutek przeprowadzanego testu penetracyjnego.  Podstawienie fałszywych danych w atakowanym systemie (o ile zostało to ujęte w uzgodnionym zakresie działania pentestera).  Ukrycie komunikacji z atakowanym systemem za pomocą szyfrowania i innych metod.  Udokumentowanie zebranych informacji.

Wprowadzenie do systemu Kali Linux Twórcy systemu BackTrack opublikowali nową dystrybucję systemu Linux, dedykowaną do przeprowadzania testów penetracyjnych, i nadali jej nazwę Kali Linux. BackTrack 5 był ostatnią wydaną wersją dystrybucji BackTrack. Twórcy systemu BackTrack doszli do wniosku, że aby sprostać nowym wyzwaniom, jakie pojawiają się w dziedzinie bezpieczeństwa systemów teleinformatycznych, i nadążać za nowoczesnymi metodami testowania, potrzebny jest zupełnie nowy system. Pierwsza wersja systemu Kali Linux została wydana 13 marca 2013 roku. Kali Linux jest oparty na dystrybucji Debian i wykorzystuje system plików zgodny ze standardem FHS (ang. Filesystem Hierarchy Standard). W porównaniu z systemem BackTrack Kali Linux ma liczne zalety i został wyposażony w wiele nowych bądź zaktualizowanych narzędzi, które są powiązane z repozytoriami systemu Debian i synchronizowane cztery razy dziennie. Oznacza to, że użytkownik tego systemu ma zawsze

38

Rozdział 1. • Przygotowania

do dyspozycji najnowsze wersje pakietów narzędziowych i aktualizacji systemu operacyjnego. Dzięki zaimplementowaniu systemu plików zgodnego ze standardem FHS zdecydowana większość narzędzi może być uruchamiana z praktycznie dowolnego miejsca systemu. Kali Linux pozwala również na dostosowanie systemu do indywidualnych potrzeb użytkownika, posiada opcję automatycznej, niewymagającej nadzoru instalacji (ang. unattended installation) i oferuje użytkownikowi bardzo sprawne i elastyczne środowisko pracy. Dystrybucję Kali Linux możesz pobrać ze strony http://www.kali.org/.

Konfiguracja systemu Kali Linux Dystrybucję Kali Linux możesz pobrać na kilka różnych sposobów. Jedną z najpopularniejszych metod jest pobieranie pełnego obrazu ISO systemu, który jest dostępny zarówno w wersji 32bitowej, jak i w 64-bitowej. Jeżeli planujesz używanie systemu Kali Linux w maszynie wirtualnej, za pomocą narzędzi takich jak VMware, to możesz pobrać gotowy do użycia obraz maszyny wirtualnej z preinstalowanym systemem Kali Linux. Zaletą takiego rozwiązania jest to, że w tym obrazie jest już zainstalowany pakiet VMware Tools. Maszyna wirtualna z systemem Kali Linux została przygotowana w wersji 32-bitowej z obsługą rozszerzenia PAE (ang. Physical Address Extension). W teorii jądro PAE pozwala systemowi na dostęp do większej ilości pamięci, niż ma to miejsce w przypadku standardowego, 32-bitowego systemu operacyjnego. Z drugiej jednak strony eksperci w dziedzinie wirtualizacji niejednokrotnie już spierali się na temat użyteczności rozszerzenia PAE, przedstawiając w swoich dyskusjach co najmniej tyle samo argumentów za, co i przeciw. Niezależnie jednak od toczących się dyskusji i sporów autorzy niniejszej książki zalecają korzystanie z gotowej, przygotowanej przez twórców systemu Kali Linux maszyny wirtualnej (o ile oczywiście chcesz używać systemu Kali Linux na platformie wirtualnej).

Uruchamianie systemu Kali Linux z nośnika zewnętrznego System Kali Linux może być uruchomiony bezpośrednio z nośnika zewnętrznego, takiego jak płyta DVD czy pamięć USB; wtedy nie ma konieczności instalowania systemu na dysku twardym komputera. Korzystanie z takiego rozwiązania jest bardzo proste i wygodne, aczkolwiek ma pewne ograniczenia zarówno wydajnościowe, jak i funkcjonalne. Kali Linux za każdym razem musi załadować uruchamianą aplikację czy narzędzie z nośnika zewnętrznego, co ma oczywiście negatywny wpływ na jego wydajność, a pewne usługi związane z obsługą urządzeń sprzętowych i aplikacji mogą nie działać poprawnie. Zastosowanie nośnika przeznaczonego tylko do odczytu powoduje dodatkowo, że nie będzie można zapisać zmienionych ustawień systemu, które mogą być niezbędne do jego poprawnego działania. Z tych powodów zdecydowanie zalecanym rozwiązaniem jest zainstalowanie systemu Kali Linux na dysku twardym komputera (lub w maszynie wirtualnej).

39

Kali Linux. Testy penetracyjne

Instalowanie systemu Kali Linux Proces instalowania systemu Kali Linux na dysku twardym komputera jest prosty i bardzo zbliżony do sposobu instalowania innych systemów operacyjnych. Przede wszystkim będziesz potrzebował kompatybilnego komputera. Kali Linux obsługuje platformy i386, amd64 oraz ARM (zarówno w wersji ARMEL, jak i ARMHF). Minimalne wymagania sprzętowe systemu zostały przedstawione poniżej, aczkolwiek do sprawnej pracy zdecydowanie zalecamy zastosowanie komputera o co najmniej trzykrotnie lepszych parametrach. Kali Linux, jak zresztą praktycznie każdy współczesny system operacyjny, będzie działał zdecydowanie lepiej, jeżeli zostanie uruchomiony na nowoczesnym komputerze wyposażonym w dużą ilość pamięci operacyjnej. Następnie musisz pobrać ze strony internetowej obraz ISO i zapisać go na płycie DVD lub przygotować wersję instalacyjną na zewnętrznej pamięci USB. Jeżeli Twój komputer nie posiada napędu DVD czy portu USB, możesz skorzystać z opcji instalacji sieciowej (Kali Linux Network Install). Poniżej przedstawiamy minimalne wymagania sprzętowe dla komputera działającego pod kontrolą systemu Kali Linux:  Minimum 8 GB miejsca na dysku do zainstalowania systemu Kali Linux.  W przypadku platform i386 i amd64 minimum 512 MB pamięci RAM.  Napęd CD/DVD lub możliwość uruchamiania systemu z przenośnej pamięci USB.  Przed rozpoczęciem instalacji będziesz również potrzebował aktywnego połączenia

z internetem. Jest to bardzo ważne, ponieważ bez dostępu do sieci nie będziesz mógł skonfigurować dostępu do sieciowych repozytoriów aplikacji i korzystać z nich podczas instalacji. 1. Po uruchomieniu instalatora systemu Kali Linux pojawi się na ekranie okno Boot Install, gdzie możesz wybrać instalację w trybie tekstowym (opcja Text-mode install) lub w trybie graficznym (Graphical install).

40

Rozdział 1. • Przygotowania

2. Wybierz wersję językową instalowanego systemu, kraj oraz preferowany układ klawiatury.

3. Wpisz nazwę hosta dla systemu Kali Linux. Domyślnie podana jest nazwa kali.

4. Wybierz hasło dla użytkownika root (administrator systemu). Pamiętaj, że proste hasła nie zapewniają bezpieczeństwa, dlatego powinieneś wybrać silne hasło, złożone z małych i wielkich liter, cyfr i znaków specjalnych.

41

Kali Linux. Testy penetracyjne

5. Następnie instalator poprosi Cię o ustawienie strefy czasowej. Wybierz z listy odpowiednią opcję i kliknij przycisk Continue. Na rysunku przedstawionym poniżej została wybrana strefa Eastern (wschodnia).

Teraz instalator rozpocznie proces konfigurowania partycji dysku. Jeżeli instalujesz system Kali Linux w maszynie wirtualnej, wybierz opcję Guided Install — Whole Disk, co spowoduje usunięcie wszystkich danych z dysku twardego i zainstalowanie systemu Kali Linux. Pamiętaj, że gdy przeprowadzasz 42

Rozdział 1. • Przygotowania

instalację w maszynie wirtualnej, dane są usuwane tylko i wyłącznie z przypisanego do niej dysku wirtualnego. Jeżeli jesteś doświadczonym użytkownikiem, możesz wybrać opcję Manual, czyli ręczną konfigurację partycji dysku. Kali Linux posiada również opcję partycjonowania z wykorzystaniem menedżera LVM (ang. Logical Volume Manager). LVM pozwala na zarządzanie partycjami i zmianę ich rozmiarów po zakończeniu instalacji. W teorii takie rozwiązanie daje użytkownikowi dużą elastyczność w przypadku zmian w konfiguracji dysków komputera, w praktyce jednak najprawdopodobniej nie będziesz tego potrzebował, jeżeli nie masz żadnych specjalnych wymagań dotyczących podziału na partycje.

6. W kolejnym oknie wyświetlone zostanie podsumowanie ustawień instalatora. Jeżeli wszystko wygląda tak, jak powinno, zaznacz opcję Yes (jak przedstawiono na rysunku poniżej) i kliknij przycisk Continue. Instalator rozpocznie proces instalowania systemu Kali Linux na dysku Twojego komputera (zobacz pierwszy rysunek na następnej stronie). 7. System Kali Linux wykorzystuje centralne, sieciowe repozytoria do dystrybucji i aktualizacji pakietów oprogramowania. Jeżeli chcesz zainstalować niezbędne pakiety, musisz skorzystać z odpowiedniego serwera lustrzanego (ang. mirror server). Pakiety są pobierane za pomocą protokołu HTTP. Jeżeli Twoja sieć wykorzystuje serwer proxy, będziesz musiał również odpowiednio skonfigurować ustawienia tego serwera (zobacz drugi rysunek na następnej stronie).

43

Kali Linux. Testy penetracyjne

8. Następnie Kali Linux zapyta Cię, czy chcesz zainstalować program GRUB. Jest to program rozruchowy (ang. boot-loader), który pozwala użytkownikowi na wybranie i uruchomienie jednego z wielu systemów operacyjnych zainstalowanych na danym komputerze. W zdecydowanej większości przypadków powinieneś zdecydować się na zainstalowanie tego programu rozruchowego. Jeżeli przygotowujesz komputer do pracy z dwoma systemami operacyjnymi (ang. dual-boot configuration), powinieneś się upewnić, że GRUB prawidłowo rozpoznał zainstalowany wcześniej system operacyjny i po uruchomieniu komputera pozwoli Ci

44

Rozdział 1. • Przygotowania

na wybór odpowiedniego systemu. Jeżeli żaden inny system operacyjny nie zostanie wykryty, po uruchomieniu komputera domyślnie zostanie zainstalowany system Kali Linux.

9. Gratulacje! Właśnie zakończyłeś proces instalacji systemu Kali Linux. Teraz usuń nośnik instalacyjny systemu Kali Linux z napędu (płytę DVD, pamięć USB czy nośnik wirtualny) i kliknij przycisk Continue, co spowoduje zrestartowanie systemu i załadowanie wybranego systemu operacyjnego.

45

Kali Linux. Testy penetracyjne

Kali Linux i pierwsze uruchomienie w maszynie wirtualnej W kilku wariantach instalacji systemu Kali Linux zostaniesz poproszony o ustawienie hasła dla użytkownika root. Po załadowaniu i uruchomieniu systemu musisz zalogować się na konto użytkownika root i podać odpowiednie hasło dostępu. Jeżeli jednak chcesz skorzystać z gotowego obrazu maszyny wirtualnej z preinstalowanym systemem Kali Linux, powinieneś zapamiętać, że domyślnie ustawione hasło dla użytkownika root brzmi toor.

Przegląd narzędzi dostępnych w systemie Kali Linux System Kali Linux posiada wbudowany cały szereg narzędzi przeznaczonych do przeprowadzania testów penetracyjnych. Poszczególne narzędzia są pogrupowane w odpowiednich kategoriach menu rozwijanego, jak przedstawiono na rysunku na następnej stronie.  Information Gathering — są to narzędzia przeznaczone do zbierania informacji

o atakowanym systemie i urządzeniach sieciowych (wykorzystywane najczęściej w fazie rekonesansu). Znajdziesz tutaj narzędzia pozwalające na gromadzenie różnego rodzaju danych, od rozpoznawania poszczególnych urządzeń, hostów i systemów aż do identyfikacji używanych przez nie protokołów komunikacyjnych.  Vulnerability Analysis — w tej sekcji znajdziesz narzędzia przeznaczone

do skanowania systemów w poszukiwaniu istniejących podatności i luk w zabezpieczeniach. Zazwyczaj skanowanie tymi narzędziami przeprowadzane jest na systemach zidentyfikowanych w fazie rekonesansu.

46

Rozdział 1. • Przygotowania

 Web Applications — tutaj zamieszczone zostały narzędzia pozwalające na

identyfikację i wykorzystywanie podatności i luk w zabezpieczeniach serwerów WWW. W naszej książce będziemy bardzo często korzystać z narzędzi z tej właśnie kategorii. Pamiętaj jednak, że znajdują się tutaj nie tylko narzędzia do atakowania serwerów WWW, ale również narzędzia wykorzystujące WWW do testowania innych usług sieciowych. Dobrym przykładem mogą być narzędzia do analizy serwerów proxy, które znajdziesz właśnie w tej kategorii.  Password Attacks — ta kategoria została przeznaczona dla narzędzi pozwalających

na łamanie haseł za pomocą metody brute-force i wykorzystujących inne, znacznie bardziej wyrafinowane sposoby, takie jak ataki słownikowe, mieszane, z użyciem tablic tęczowych (ang. Rainbow Tables) i inne. Znajdziesz tutaj również narzędzia pozwalające na odtwarzanie współdzielonych kluczy wykorzystywanych do uwierzytelniania.  Wireless Attacks — w tej sekcji zgromadzone zostały narzędzia przeznaczone do

identyfikacji i wykorzystywania luk w zabezpieczeniach i podatności w protokołach komunikacji bezprzewodowej. Znajdziesz tutaj między innymi narzędzia przeznaczone dla protokołu 802.11, takie jak aircrack, airmon, narzędzia do łamania zabezpieczeń i haseł sieci bezprzewodowych czy narzędzia pozwalające na ataki na komunikację i urządzenia wykorzystujące protokół Bluetooth, a nawet technologię RFID. Stosowanie takich narzędzi bardzo często będzie wymagało wykorzystania bezprzewodowej karty sieciowej skonfigurowanej do pracy w trybie nasłuchiwania (ang. promiscuous mode).

47

Kali Linux. Testy penetracyjne

 Exploitation Tools — są to narzędzia przeznaczone do wykorzystywania luk

w zabezpieczeniach, które zostały wcześniej zidentyfikowane w fazie wyszukiwania podatności badanych systemów na ataki.  Sniffing and Spoofing — tutaj zamieszczone zostały narzędzia wykorzystywane

do przechwytywania pakietów sieciowych, modyfikowania pakietów sieciowych, tworzenia własnych pakietów sieciowych oraz tworzenia fałszywych witryn WWW. Oprócz tego znajdziesz tutaj również kilka narzędzi pozwalających na przeprowadzanie ataków na połączenia typu VoIP.  Maintaining Access — narzędzia w tej kategorii pozwalają na utrzymanie raz

zdobytego przyczółka w zaatakowanym systemie. Tworzenie wielu alternatywnych punktów i metod dostępu do zaatakowanego i zdobytego systemu jest powszechnie stosowaną praktyką, która zapewnia napastnikowi możliwość interakcji ze zdobytym systemem w sytuacji, kiedy co najmniej jeden kanał komunikacyjny zostanie odkryty i zablokowany przez zespół bezpieczeństwa IT właściciela systemu.  Reverse Engineering — w tej kategorii znajdziesz narzędzia pozwalające

na debugowanie i deasemblację programów i innych plików wykonywalnych. Zadaniem inżynierii wstecznej (ang. reverse engineering) jest analiza budowy programu i jego sposobu działania w celu umożliwienia wykonania jego kopii, usunięcia zabezpieczeń, modyfikacji czy projektowania innych programów. Inżynieria wsteczna wykorzystywana jest również do analizowania sposobu działania złośliwego oprogramowania oraz wyszukiwania luk w zabezpieczeniach aplikacji i systemów.  Stress Testing — tutaj zamieszczone zostały narzędzia wykorzystywane do

testowania maksymalnego obciążenia, jakie jest w stanie wytrzymać dany system. Przeciążone systemy potrafią się czasem zachowywać w nieprzewidywalny sposób, powodując na przykład wyłączenie mechanizmów zabezpieczających i otwarcie wszystkich kanałów komunikacji czy nawet awarię bądź wyłączenie całego systemu (atak DoS, Denial of Service).  Hardware Hacking — narzędzia znajdujące się w tej kategorii podzielone zostały

na dwie grupy: Android, gdzie umieszczono programy przeznaczone do pracy z urządzeniami mobilnymi, działającymi pod kontrolą systemu Android, oraz Arduino, gdzie zawarto narzędzia, które pozwalają na programowanie różnych innych urządzeń elektronicznych i zarządzanie nimi.  Forensics — tutaj znajdziesz różnego rodzaju narzędzia informatyki śledczej,

pozwalające na monitorowanie i analizowanie ruchu sieciowego, zawartości dysków twardych oraz aktywności użytkowników i aplikacji.  Reporting Tools — jest to kategoria przeznaczona dla narzędzi wspomagających

dokumentowanie danych zebranych podczas testów penetracyjnych i tworzenie raportów końcowych.  System services — za pomocą poleceń w tej kategorii możesz włączać lub wyłączać

różne usługi systemu Kali Linux. Usługi dostępne w tym menu zostały pogrupowane w następujące kategorie: BeEF, Dradis, HTTP, Metasploit, MySQL oraz SSH.

48

Rozdział 1. • Przygotowania

W systemie Kali Linux zostało zaimplementowanych również wiele innych narzędzi, takich jak przeglądarki sieciowe, narzędzia do zmiany sposobu, w jaki komputer działający pod kontrolą tego systemu jest widziany w sieci, narzędzia wspomagające wyszukiwanie danych i wiele innych przydatnych aplikacji.

Podsumowanie Zadaniem tego rozdziału było wprowadzenie Cię w świat testów penetracyjnych aplikacji internetowych oraz przedstawienie systemu Kali Linux. Rozpoczęliśmy od ogólnego omówienia postępowania podczas przeprowadzania testów penetracyjnych, włącznie z przykładami dobrych praktyk, zagadnieniami związanymi z oceną ryzyka oraz omówieniem różnic pomiędzy testami penetracyjnymi a innymi usługami związanymi z bezpieczeństwem systemów teleinformatycznych. Kluczowym elementem było tutaj poznanie istoty testu penetracyjnego, procedur przygotowania zakresu działania pentestera oraz wybierania najlepszego sposobu wykonania takiej usługi. Pamiętaj, że dobre zrozumienie wzajemnych oczekiwań i możliwości pentestera i właściciela systemu jest kluczem do pomyślnego uzgodnienia zakresu działania, sprawnego przeprowadzenia samego testu i wypracowania odpowiednich materiałów końcowych. W dalszej części tego rozdziału dokonaliśmy ogólnego omówienia systemu Kali Linux. Znalazły się tutaj takie zagadnienia, jak pobieranie odpowiedniej wersji dystrybucji systemu, procedura instalowania systemu i krótkie omówienie narzędzi, jakie Kali Linux daje użytkownikowi do dyspozycji. W kolejnym rozdziale opowiemy, jak sprawnie i efektywnie przeprowadzić rekonesans systemu będącego celem naszego ataku. Jest to pierwszy i najważniejszy krok do skutecznego przeprowadzenia testu penetracyjnego.

49

Kali Linux. Testy penetracyjne

50

2 Rekonesans Termin rekonesans wywodzi się z terminologii wojskowej i oznacza rozpoznanie stanowisk i sił przeciwnika przed rozpoczęciem ataku. W terminologii informatycznej rekonesans systemów komputerowych ma podobne znaczenie i odnosi się do sytuacji, w której pentester lub potencjalny napastnik próbuje zebrać jak najwięcej informacji o danym systemie i jego zasobach przed rozpoczęciem właściwego ataku. Taki proces jest czasami nazywany zbieraniem „odcisków” systemu. Zazwyczaj wszelkie działania związane z przeprowadzanym rekonesansem mają pasywny charakter i w większości przypadków nie wchodzą w konflikt z uregulowaniami prawnymi (zastrzegamy jednak, że nie jesteśmy prawnikami i naszego stwierdzenia nie można traktować jako wykładni prawnej). Pamiętaj jednak, że taka sytuacja będzie trwała dopóty, dopóki nie „zahaczysz” o systemy, na których badanie nie otrzymałeś odpowiedniej zgody właściciela. Przykłady działań związanych z fazą rekonesansu mogą obejmować niemal wszystko, od gromadzenia informacji o celu w publicznie dostępnych źródłach, takich jak Google czy serwisy społecznościowe, poprzez monitorowanie aktywności użytkowników w celu poznania ich nawyków i sposobu działania, aż do skanowania sieci i aktywnych hostów w celu gromadzenia informacji o typach urządzeń, systemach operacyjnych i otwartych portach. Im więcej informacji zostanie zebranych podczas tej fazy, tym większa jest szansa na znalezienie słabego ogniwa, ominięcie istniejących zabezpieczeń systemu i pomyślne osiągnięcie założonego celu. Pamiętaj jednak, że nadmierna aktywność związana z przeprowadzanym rekonesansem najprawdopodobniej zaalarmuje pracowników zespołu bezpieczeństwa właściciela systemu i spowoduje, że pomyślne przeprowadzenie ataku będzie utrudnione. Oficjalne motto systemu Kali Linux jest zatem następujące: Im ciszej się zachowujesz, tym więcej możesz usłyszeć! W fazie rekonesansu powinieneś dokładnie dokumentować wszystkie zebrane informacje, ponieważ dane zebrane w tej fazie mogą mieć niezwykle istotne znaczenie później, podczas próby penetracji systemu. Również właściciel systemu, który zlecił przeprowadzenie testu penetracyjnego, najprawdopodobniej będzie chciał się dowiedzieć, w jaki sposób zdobyłeś określone dane o jego systemie. Zleceniodawca może na przykład zapytać, jakich narzędzi użyłeś

Kali Linux. Testy penetracyjne

do gromadzenia informacji, jakie informacje znalazłeś w publicznie dostępnych źródłach, jakie zapytanie użyte w wyszukiwarce Google przyniosło takie czy inne informacje itd. Samo poinformowanie zleceniodawcy, że „osiągnąłeś zamierzony cel”, z pewnością nie wystarczy, ponieważ zadaniem testu penetracyjnego jest zidentyfikowanie słabych stron w zabezpieczeniach badanego środowiska, tak aby można je było później poprawić i „uszczelnić” system.

Zadania rekonesansu  Przeznaczenie badanego środowiska celu. Jaką rolę odgrywa środowisko

zleceniodawcy będące przedmiotem testu penetracyjnego?  Powiązania badanego środowiska celu. Jakie są powiązania badanego środowiska z innymi podmiotami biznesowymi, dostawcami czy klientami?  Inwestycje w systemy zabezpieczeń środowiska celu. Czy w środowisku

zleceniodawcy została wdrożona jakaś polityka bezpieczeństwa? Jakie systemy zabezpieczeń zostały zaimplementowane w tym środowisku. Czy użytkownicy zostali odpowiednio przeszkoleni i czy przestrzegają zasad bezpieczeństwa?  Sposoby działania badanego środowiska celu. W jaki sposób funkcjonuje dane

środowisko? Jakie są potencjalnie słabe strony wdrożonych procedur operacyjnych?  Użytkownicy środowiska celu. Jakiego rodzaju użytkowników można spotkać

w badanym środowisku celu? Czy możesz ich wykorzystać do zdobycia dodatkowych informacji o systemie, przeprowadzając ataki socjotechniczne?  Rozpoznanie poszczególnych celów ataku. Jakie elementy badanego środowiska

wydają się najbardziej obiecującymi celami ataku? Czego powinieneś unikać podczas przeprowadzania ataku?  Sieć komputerowa środowiska celu. W jaki sposób poszczególne hosty

i użytkownicy w sieci komputerowej środowiska celu komunikują się ze sobą?  Istniejące mechanizmy obronne. Jakie mechanizmy zabezpieczające zostały

wdrożone w środowisku celu? Jaki jest zakres ochrony?  Technologie wykorzystywane w środowisku celu. Jakie technologie, platformy

i rozwiązania są wykorzystywane w środowisku celu do wymiany poczty elektronicznej, przekazywania ruchu sieciowego, przechowywania danych, uwierzytelniania urządzeń i użytkowników oraz innych zadań? Jakie są potencjalnie słabe strony wdrożonych rozwiązań? Jak już wspominaliśmy w poprzednim rozdziale, w menu głównym systemu Kali Linux znajdziesz kategorię Information Gathering, w której zgromadzono narzędzia wspomagające zbieranie informacji w fazie rekonesansu. Szczegółowe omówienie wszystkich dostępnych narzędzi i procedur ich zastosowania wymagałoby niestety napisania osobnego opracowania, stąd w naszej książce skoncentrujemy się tylko na narzędziach wspomagających zbieranie informacji podczas testów penetracyjnych aplikacji internetowych, które zostały zaimplementowane w systemie Kali Linux, jak i na najlepszych narzędziach, które możesz znaleźć w niezmierzonych zasobach internetu. 52

Rozdział 2. • Rekonesans

Rozpoznanie wstępne Rekonesans powinieneś rozpocząć od zebrania jak największej ilości informacji o roli środowiska celu, jego użytkownikach i powiązanych z nim innych podmiotów biznesowych. Sun Tzu, autor słynnego traktatu Sztuka wojny, mawiał, że przed rozpoczęciem ataku należy poznać swojego przeciwnika. W prostej linii wynika stąd, że jako pentester powinieneś dobrze poznać środowisko celu. Jeżeli celem Twojego ataku jest witryna internetowa, powinieneś dokładnie poznać wszystkie jej „zakamarki”. Takie postępowanie pozwoli Ci lepiej poznać sposób jej działania i określić metody zarządzania. Dobrze przeprowadzony rekonesans niemal zawsze skutkuje większą listą potencjalnych słabości i punktów zaczepienia w badanym systemie. To przerażające, jak wiele informacji można znaleźć w publicznie dostępnych źródłach. Nie powinieneś być zaskoczony, jeżeli znajdziesz tam rzeczy zupełnie, zdawałoby się, niewyobrażalne, takie jak poufne dokumenty, listy haseł dostępu, raporty o podatnościach i lukach w zabezpieczeniach, zdjęcia, które nigdy nie powinny zostać upublicznione, czy nawet hosty oferujące niczym niechroniony dostęp do systemów kamer zabezpieczających różne obiekty. Z tych właśnie powodów bardzo wielu pentesterów rozpoczyna analizę celu od sprawdzenia informacji dostępnych w źródłach publicznych. Poniżej zamieszczamy zestawienie kilku wybranych źródeł, od których możesz rozpocząć swoje poszukiwania.

Strona internetowa firmy Na stronie internetowej firmy, której środowisko komputerowe ma być celem testu penetracyjnego, możesz często znaleźć naprawdę mnóstwo bardzo interesujących informacji. Na większości witryn internetowych dużych firm i korporacji możesz znaleźć listę członków zarządu i kadry kierowniczej, nazwiska pracowników działu kadr, zajmujących się rekrutacją czy kontaktem z mediami, i wiele innych, ciekawych danych. Takie informacje mogą być później punktem zaczepienia do dalszego zbierania danych czy nawet do przeprowadzania ataków socjotechnicznych. Do bardzo ciekawych informacji możesz również dojść poprzez analizę listy innych podmiotów biznesowych i organizacji współpracujących z daną firmą, listy ofert zatrudnienia, informacji biznesowych o działaniu firmy, aktualnych inwestycjach czy nawet o wdrożonych i planowanych środkach i politykach bezpieczeństwa. Zbieranie informacji na temat partnera biznesowego może być tak samo wartościowe jak zbieranie informacji o podstawowym celu ataku, ponieważ możesz tam znaleźć wiele informacji powiązanych z Twoim celem i wykorzystać je do przygotowania ataku. Dobrym przykładem może być zbieranie informacji na temat dostawcy zewnętrznego, który świadczy usługi IT (np. dział pomocy technicznej) dla firmy będącej celem ataku, i wykorzystanie tak zdobytych informacji do przeprowadzenia ataku. Kolejnym ciekawym źródłem informacji może być plik Robots.txt, który bardzo często można znaleźć na witrynach internetowych i który jest publicznie dostępny dla każdego, kto zdaje sobie sprawę z jego istnienia. W pliku tym znajdują się instrukcje dla robotów sieciowych (ang. web spiders) przeszukujących zasoby internetu, informacje o tym, jakie strony są publicznie dostępne, a jakie nie powinny być przeglądane i automatycznie indeksowane w przeglądarkach sieciowych.

53

Kali Linux. Testy penetracyjne

Zawartość pliku Robots.txt jest zapisana w formacie zgodnym z protokołem Robots Exclusion Protocol. Polecenie Disallow: / informuje roboty i przeglądarki sieciowe, że dane źródło nie powinno być odwiedzane; ale pentester prowadzący rozpoznanie może przecież zignorować takie polecenie, a zawartość pliku Robots.txt może stanowić cenne źródło informacji o tym, jakich danych witryna internetowa celu nie chce publicznie ujawniać. Aby zobaczyć zawartość pliku Robots.txt, powinieneś poszukać go w głównym katalogu witryny internetowej celu. Na przykład dodanie nazwy Robots.txt do adresu głównej strony popularnego serwisu Facebook daje rezultat przedstawiony na rysunku poniżej:

Źródła przechowujące historyczne wersje witryn internetowych W internecie można znaleźć całkiem sporo źródeł, które przechowują historyczne wersje większości publicznie dostępnych witryn internetowych. Jednym z takich źródeł jest serwis WayBack Machine, dostępny pod adresem archive.org. Na przechowywanych tam historycznych wersjach witryn internetowych możesz znaleźć bardzo wiele bezcennych informacji o systemie będącym celem planowanego ataku, takich jak nieaktualne schematy organizacyjne, numery telefonów, informacje o klientach, informacje o systemie i serwerach przechowywane w kodzie źródłowym strony, o starych wersjach pliku Robots.txt, o partnerach biznesowych, o podatnościach i lukach w zabezpieczeniach, które zostały poprawione w kolejnych wersjach, i wiele innych bezcennych danych, których cel ataku nie zamieszcza już w aktualnej wersji swojej witryny. Pamiętaj, że informacji, które zostały raz upublicznione w internecie, praktycznie nie da się całkowicie usunąć ze wszystkich źródeł i zawsze gdzieś pozostaną jakieś historyczne dane, które mogą mieć wielką wartość dla pentestera.

54

Rozdział 2. • Rekonesans

Aby skorzystać z usług serwisu WayBack Machine, wystarczy uruchomić dowolną przeglądarkę internetową i przejść na stronę http://archive.org. W oknie przeglądarki pojawi się główny ekran serwisu ze zlokalizowanym w środkowej części polem INTERNET ARCHIVE WayBack Machine, jak przedstawiono na rysunku poniżej:

Wpisz w polu tekstowym adres URL witryny, której historyczną wersję chcesz zobaczyć, i sprawdź, czy w bazie serwisu znajdują się jej zarchiwizowane kopie. Na infografice w górnej części ekranu możesz zobaczyć, ile zarchiwizowanych kopii witryny utworzono w poszczególnych latach (zobacz rysunek poniżej).

55

Kali Linux. Testy penetracyjne

Jak widać, dla pentestera jest to bardzo użyteczne narzędzie, ponieważ przynosi wiele interesujących informacji, a przy tym nie pozostawia żadnych śladów rekonesansu w systemie będącym celem ataku — wszystkie informacje są przechowywane w bazie danych serwisu WayBack Machine. Na kolejnych dwóch rysunkach przedstawiamy wygląd witryny www.lancope.com w roku 2002 i dla porównania w roku 2013:

56

Rozdział 2. • Rekonesans

Regional Internet Registries, czyli regionalni administratorzy adresów IP Regional Internet Registries, w skrócie RIR, to organizacje, które zajmują się zarządzaniem, alokacją i przydzielaniem adresów IP dla podmiotów w poszczególnych regionach świata. Istnieje pięć głównych organizacji RIR — dla Europy jest to organizacja RIPE Network Coordination Centre, której stronę znajdziesz pod adresem http://www.ripe.net/. Jej odpowiednikiem dla USA, Kanady i części regionu Karaibów jest American Registry for Internet Numbers (http://www.arin.net/) — przykładowe informacje zebrane w ARIN na temat witryny Lancope wyglądają następująco:

System EDGAR System EDGAR (ang. Electronic Data Gathering, Analysis and Retrieval) to zautomatyzowany system bazodanowy, zawierający dokumenty rejestracyjne, raporty okresowe oraz inne informacje na temat funkcjonowania firm, który funkcjonuje od roku 1994. Wszystkie firmy założone w Stanach Zjednoczonych są prawnie zobligowane do zamieszczania takich dokumentów w bazie EDGAR. Wszystkie dokumenty przechowywane w tym systemie są jawne i publicznie dostępne. Poniżej zamieszczamy dwa zrzuty ekranu zawierające przykładowe informacje na temat firmy Lancope:

57

Kali Linux. Testy penetracyjne

Zasoby serwisów społecznościowych Serwisy społecznościowe są dzisiaj obecne dosłownie wszędzie, a ich zasoby są zazwyczaj powszechnie dostępne. Większość użytkowników komputerów, smartfonów, tabletów lub innych tego typu urządzeń posiada konta w takich serwisach, jak Facebook, Twitter czy LinkedIn, prowadzi różnego rodzaju blogi bądź przechowuje swoje cenne dane w usługach typu chmura. Serwisy społecznościowe mogą stanowić bezcenne źródło informacji dla pentestera i znacząco ułatwić mu przygotowanie ataków socjotechnicznych. Na przykład w serwisach takich jak Glassdoor.com można odszukać opinie niezadowolonych pracowników i na ich podstawie wyciągać interesujące wnioski. Istnieje wiele narzędzi (takich jak zaimplementowany w systemie Kali Linux pakiet Maltego) pozwalających na wyszukiwanie osób. Narzędzia te przeczesują najpopularniejsze serwisy społecznościowe, spisy publiczne czy portale agencji zatrudnienia i pozwalają na stworzenie dokumentacji na podstawie nawet tak szczątkowych danych, jak imię i nazwisko pracownika.

58

Rozdział 2. • Rekonesans

Pentester może zbierać informacje na temat historii miejsc zamieszkania takiej osoby, poprzednich pracodawców, prowadzonej działalności gospodarczej, znajomych, zainteresowań, ulubionych drużyn sportowych i inne dane, które mogą być wprost nieocenione podczas przygotowywania ataków socjotechnicznych.

Zaufanie Większość ludzi jest z natury ufna i zakłada, że informacje publikowane w źródłach publicznych są prawdziwe. Aby sprawdzić takie założenie, autorzy tej książki na jednym z serwisów społecznościowych stworzyli osobę o fikcyjnej, spreparowanej tożsamości i nazwali ją Emily Williams. Pani Williams udawała kandydatkę do pracy w firmie, której środowisko komputerowe było celem testu penetracyjnego. Nasza Emily bardzo szybko nawiązała szereg znajomości z prawdziwymi pracownikami interesującej nas firmy, wysyłała drogą elektroniczną fałszywe kartki świąteczne (za pośrednictwem systemu BeEF, Browser Exploitation Framework, którego zadaniem jest próba przełamania zabezpieczeń podatnych przeglądarek sieciowych) i przechwytywała masę interesujących danych ze skompromitowanych w ten sposób systemów. W krótkim czasie mogliśmy rozpracować strukturę badanej firmy, zdobyć informacje na temat jej sieci komputerowej i wiele innych, wrażliwych danych, na podstawie których byliśmy w stanie spreparować dla naszej Emily wewnętrzny, korporacyjny adres pocztowy, zdobyć hasła pozwalające na zdalny dostęp do sieci korporacyjnej za pomocą tunelu VPN itd. Mimo że Emily była tylko i wyłącznie bytem wirtualnym, otrzymała wiele ofert pracy i dostarczyła nam wiele informacji o wewnętrznych zasobach firmy. Kto ma informacje, ten ma władzę, a ludzie bardzo często sami udzielają interesujących informacji komuś, kto po prostu w taki czy inny sposób wzbudza ich zaufanie. Więcej szczegółowych informacji na temat projektu Emily znajdziesz pod adresem http://www. thesecurityblogger.com/?p=1903.

Oferty pracy Oferty pracy publikowane przez firmę mogą być następnym źródłem informacji. Analiza ofert dla informatyków może na przykład ujawnić, jakie systemy operacyjne i platformy bazodanowe są wykorzystywane w określonej firmie, ujawnić dane osobowe personelu IT, pozwolić na oszacowanie liczebności, a nawet poziomu umiejętności zespołu IT. Pracownicy działu kadr, zajmujący się rekrutacją, zazwyczaj bardzo chętnie dzielą się w dobrej wierze informacjami z potencjalnym kandydatem, co znów może przełożyć się na zdobycie dodatkowych informacji, adresów poczty elektronicznej czy numerów telefonów innych pracowników. Na przykład podając się za potencjalnego kandydata do pracy na stanowisku projektanta aplikacji dla bazy danych Oracle, możemy uzyskać takie informacje, jak typy serwerów wykorzystywanych w firmie, wersje bazy Oracle, dane kontaktowe aktualnie pracujących administratorów baz danych, opisy problemów operacyjnych, z jakimi obecnie się borykają, być może informacje o słabych stronach

59

Kali Linux. Testy penetracyjne

zabezpieczeń, a dodatkowo możemy mieć szansę na zadanie podchwytliwych pytań, na przykład o to, czy administratorzy systemu mogą pracować z domu i jak w takiej sytuacji podłączają się do komputerowej sieci firmy. Kolejną ścieżką do eksploracji mogą być pytania o oczekiwaną wysokość zarobków, dodatkowe świadczenia i inne tego typu sprawy. Uzyskane informacje można później wykorzystać do nawiązywania dyskusji z innymi pracownikami na różnych popularnych serwisach społecznościowych czy prezentujących oferty pracy i opinie o pracodawcach. W takich treściach można często znaleźć nowe, nieznane lub nieplanowane wcześniej możliwości ataku. Dobrym przykładem serwisu zawierającego tego typu dane jest wspominany już wcześniej Glassdoor.com.

Lokalizacja Wysokość środków przeznaczanych na inwestycję w zabezpieczenia systemów komputerowych można również próbować oszacować na podstawie poziomu fizycznego zabezpieczenia siedziby firmy. Zazwyczaj możemy przyjąć, że firma, której siedziba jest otoczona wysokim parkanem i której teren przez 24 godziny na dobę patrolują ochroniarze, będzie również inwestowała większe środki w zabezpieczenia systemów komputerowych niż mała firma zlokalizowana w jednym z publicznie dostępnych biurowców. Sieciowe systemy kartograficzne, takie jak na przykład Google Maps, mogą pomóc w oszacowaniu stopnia fizycznego zabezpieczenia terenu firmy i pokazać, którędy wchodzą do niej pracownicy. Innym sposobem wykorzystania znajomości fizycznej lokalizacji firmy jest mała przejażdżka w jej pobliżu w celu zidentyfikowania istniejących sieci bezprzewodowych (być może jedna z nich należy do tej firmy?) bądź bliższego zapoznania się z metodami kontroli wstępu na jej teren (na przykład czy pracownicy muszą nosić identyfikatory zbliżeniowe pozwalające na otwieranie drzwi i bram).

Wyszukiwarka Shodan Shodan to wyszukiwarka sieciowa, pozwalająca na wyszukiwanie oraz identyfikację hostów sieciowych, takich jak komputery, serwery, routery, kamery internetowe i inne urządzenia sieciowe, na podstawie wielu różnych kryteriów, m.in. metadanych pobranych z nagłówków odpowiedzi usług sieciowych. Korzystając z tej usługi, możesz na przykład wyszukać miejsca w sieci, gdzie pracują konkretne urządzenia sieciowe, jak przełączniki Cisco 3850 działające pod kontrolą systemu IOS Version 15.0(1)EX. Poniżej zamieszczamy przykład wyników wyszukiwania systemów SCADA dostępnych przez internet. W teorii takie systemy nie powinny istnieć, ale Shodan udowadnia jednak, że takie stwierdzenie nie jest prawdziwe. Systemy SCADA są wykorzystywane do sterowania różnymi urządzeniami w fabrykach, elektrowniach czy oczyszczalniach ścieków, więc zezwalanie na dostęp do takich urządzeń przez internet jest naprawdę złym rozwiązaniem!

60

Rozdział 2. • Rekonesans

Google hacking Google hacking to najpopularniejszy sposób wykorzystania wyszukiwarki Google do przeprowadzania rekonesansu w testach penetracyjnych aplikacji i serwerów internetowych. Metoda ta opiera się na zastosowaniu języka zaawansowanych zapytań wyszukiwarki Google, pozwalającego na lokalizowanie określonych łańcuchów tekstu w zwracanych wynikach wyszukiwania. Odpowiednie przygotowanie filtra pozwala na przykład na zlokalizowanie określonych wersji aplikacji internetowych podatnych na atak, które w wyniku użycia w zapytaniu operatora intitle:"index of" zwracają określony ciąg znaków, np. Powered by Apache. Inne zapytania pozwalają na zlokalizowanie plików dzienników, takich jak ws_ftp.log, które zawierają wrażliwe informacje o adresach IP. Poniżej zamieszczamy kilka rysunków demonstrujących wykorzystanie wyszukiwarki Google do znajdowania dostępnych publicznie kamer internetowych Linksys. Na pierwszym rysunku przedstawiono zapytanie, które zostało użyte, a na kolejnym rysunku wyniki jego działania. Ostatni, trzeci rysunek przedstawia wygląd strumienia danych z jednej ze znalezionych w ten sposób kamer internetowych.

61

Kali Linux. Testy penetracyjne

62

Rozdział 2. • Rekonesans

A oto kilka przykładów innych ciekawych zapytań:  Wyszukiwanie poufnych dokumentów: intext: classified top secret confidential.  Wyszukiwanie interfejsów zarządzania kamerami internetowymi Linksys (uwaga: to, co znajdziesz, może Ci się nie spodobać…): inurl:main.cgi Linksys.  Wyszukiwanie raportów ze skanera Nessus, zawierających informacje o podatnościach i lukach w zabezpieczeniach różnych systemów: inurl:NESSUSXXXXXXXX.

Jeżeli jesteś zainteresowany wykorzystaniem techniki Google hacking, powinieneś zapoznać się ze znakomitą książką Google Hacking for Penetration Testers Johnny’ego Longa, a oprócz tego zajrzeć na jego stronę internetową http://johnny.ihackstuff.com/.

GHDB, czyli Google Hacking Database Baza danych GHDB, czyli Google Hacking Database, utworzona przez Johnny’ego Longa z organizacji Hackers for Charity (http://www.hackersforcharity.org/), to jedno z najlepszych źródeł informacji na temat zaawansowanych zapytań dla wyszukiwarki Google. Znajdziesz tam tysiące przeróżnych, odpowiednio pogrupowanych zapytań, pozwalających na wyszukiwanie nazw użytkowników, haseł dostępu, systemów podatnych na atak czy luk w zabezpieczeniach, gromadzonych i udostępnianych przez społeczność fanatyków Google hacking. Aby skorzystać z bazy GHDB, powinieneś uruchomić przeglądarkę i przejść na stronę http:// www.exploit-db.com/google-dorks/. Na głównej stronie witryny znajdziesz listę najnowszych zapytań przesłanych przez użytkowników, a potem możesz śmiało zacząć przeglądać interesujące Cię kategorie i samodzielnie sprawdzać wyniki, jakie przynoszą poszczególne zapytania.

63

Kali Linux. Testy penetracyjne

Opisy poszczególnych kategorii zapytań znajdziesz w dolnej części strony głównej. Na przykładzie przedstawionym poniżej najpierw wybraliśmy kategorię Vulnerable Files, a następnie zapytanie ionCube Loader Wizard.

Teraz możemy kliknąć wybrane zapytanie i w oknie przeglądarki pojawi się strona Google z wynikami wyszukiwania.

Jak widać, w naszym przykładzie wyszukiwarka Google znalazła tylko kilka wyników pasujących do naszego zapytania. Wynika stąd, że pakiety ionCube Loader rzadko bywają źle skonfigurowane. ionCube Loader to kawałek naprawdę dobrego oprogramowania, które zabezpiecza aplikacje napisane w PHP przed przeglądaniem i modyfikowaniem ich z komputerów, które

64

Rozdział 2. • Rekonesans

nie posiadają do tego odpowiedniej autoryzacji. Nie da się jednak ukryć, że w przypadku przedstawionym na rysunku poniżej administrator tego systemu pozostawił otwarty, niczym niezabezpieczony dostęp do kreatora konfiguracji.

Kiedy wejdziesz na taką stronę i klikniesz pierwsze łącze, zostaniesz przeniesiony na stronę pozwalającą skonfigurować ten pakiet oprogramowania. Można śmiało powiedzieć, że z perspektywy pentestera baza danych GHDB zamienia wyszukiwarkę Google w swego rodzaju skaner aplikacji internetowych. Jak widać, w zależności od intencji Google hacking może się przyczynić do zwiększenia bezpieczeństwa systemów w internecie, ale równie dobrze może stać się w rękach mrocznego hackera znakomitym narzędziem, pozwalającym na przeprowadzanie dobrze ukierunkowanych ataków na serwery sieciowe.

Badanie zasobów sieci komputerowych Wielu użytkowników nie zdaje sobie sprawy z prawdziwej roli, jaką odgrywa skanowanie zasobów sieci komputerowej środowiska celu przed rozpoczęciem właściwego ataku. Jednak pentesterzy, którzy już nawet tylko amatorsko zajmują się przeprowadzaniem testów penetracyjnych, doskonale wiedzą, dlaczego wybranie odpowiedniego celu jest jednym z kluczowych elementów niezbędnych do przeprowadzenia testu. W końcu przecież każdy pentester dysponuje całym arsenałem różnorodnych narzędzi, którym musi wskazać jakiś cel ataku. Wielu amatorów do rozpoznania sieci wykorzystuje narzędzia takie jak Nmap, PingSweeper czy inne, które jednak robią w sieci dużo „hałasu” i niepotrzebnie zwracają na siebie uwagę, co w efekcie powoduje, że wyniki ich działania mogą być dosyć mierne. Rekonesans sieciowy ma na celu wybranie odpowiedniego celu ataku. Każdy profesjonalista zajmujący się zagadnieniami bezpieczeństwa sieciowego powie Ci z pewnością, że dobry rekonesans polega na tym, aby wybrać odpowiedni cel ataku, spędzając większość czasu raczej na pasywnej obserwacji sieci niż na „hałaśliwym” przeprowadzaniu aktywnego skanowania — a jak sam pamiętasz, im ciszej się zachowujesz, tym więcej usłyszysz… Celem pierwszego etapu każdego testu penetracyjnego jest staranna selekcja dostępnych celów i wybranie tego, który rokuje największą szansę powodzenia ataku.

65

Kali Linux. Testy penetracyjne

Przeprowadzając testy penetracyjne dla klientów zewnętrznych, powinieneś pamiętać, że zawsze po stronie zleceniodawcy znajdzie się ktoś, kto dla swojej własnej satysfakcji, zademonstrowania swoich umiejętności szefowi lub kolegom albo po prostu udowodnienia, że zasoby sieciowe firmy są znakomicie zabezpieczone, obierze sobie za punkt honoru utrudnianie życia pentesterowi i blokowanie jego wysiłków zmierzających do pomyślnego wykonania testu penetracyjnego. W takich sytuacjach zdecydowanie odradzamy wchodzenie w jakiekolwiek konflikty z pracownikami zleceniodawcy. Pamiętaj, że dobry pentester powinien skoncentrować się na wykonaniu swojego zadania i wskazaniu istniejących luk w zabezpieczeniach systemu przy zachowaniu tylko minimalnej, naprawdę niezbędnej interakcji z pracownikami działów bezpieczeństwa właściciela systemu zlecającego przeprowadzenie testu penetracyjnego.

Poniżej przedstawiamy zestawienie starannie wybranych, naszym zdaniem najlepszych narzędzi przeznaczonych do przeprowadzania rekonesansu aplikacji internetowych, które zostały zaimplementowane w systemie Kali Linux. Oczywiście oprócz nich istnieje wiele innych narzędzi do testowania innych typów celów, aczkolwiek w tym rozdziale chcemy się skoncentrować tylko na aplikacjach internetowych.

HTTrack — klonowanie witryny internetowej HTTrack to wbudowane narzędzie systemu Kali Linux, które pozwala na utworzenie pełnej kopii witryny internetowej na dysku komputera lokalnego. Dzięki utworzeniu takiej kopii pentester ma możliwość zapoznania się z całą zawartością danej witryny, wszystkimi jej stronami i plikami w swoim własnym, całkowicie kontrolowanym środowisku, bez konieczności każdorazowego łączenia się z tą witryną. Warto tutaj wspomnieć, że pakietu HTTrack będziemy w kolejnych rozdziałach używać do przygotowania ataków socjologicznych. Mając dokładną kopię badanej witryny, pentester może przygotować jej odpowiednio spreparowaną, fałszywą wersję, której można później użyć wraz z innymi narzędziami do przeprowadzenia ataku. Aby skorzystać z pakietu HTTrack, otwórz okno terminalu, a następnie wpisz polecenie apt-get install httrack, tak jak to zostało zilustrowane na rysunku poniżej. W niektórych wersjach systemu Kali Linux pakiet HTTrack nie jest preinstalowany.

66

Rozdział 2. • Rekonesans

Teraz powinieneś utworzyć katalog, w którym będą przechowywane pliki skopiowanej witryny. Na kolejnym rysunku przedstawiono proces tworzenia katalogu o nazwie mywebsites za pomocą polecenia mkdir.

Aby uruchomić pakiet HTTrack, wpisz w oknie terminalu polecenie httrack, a następnie podaj nazwę projektu, jak przedstawiono na rysunku poniżej.

Kolejnym krokiem jest podanie ścieżki katalogu, w którym zostaną zapisane pliki kopiowanej witryny. Na następnym rysunku pokazujemy, w jaki sposób użyć do tego celu katalogu /root/mywebsites, który utworzyliśmy chwilę wcześniej.

Teraz wpisz adres URL witryny, której kopię chcesz utworzyć. W naszym przykładzie posłużymy się witryną www.drchaos.com. Oczywiście może to być dowolna inna witryna internetowa. W większości przypadków będą to witryny często odwiedzane przez pracowników firmy będącej celem ataku, takie jak popularne media społecznościowe czy strony internetowe samej firmy. Kolejne dwie opcje pozwalają na określenie, co chcesz zrobić z podaną witryną internetową. Najprostszym rozwiązaniem będzie wybranie opcji numer 2, Mirror Web Site(s) with Wizard, która pozwala na utworzenie kopii witryny za pomocą przyjaznego kreatora, jak przedstawiono na rysunku zamieszczonym poniżej.

67

Kali Linux. Testy penetracyjne

Następnie powinieneś określić, czy będziesz korzystał z serwera proxy. Możesz również zdefiniować typy plików, które będą kopiowane (w naszym przykładzie został wybrany znak *, co oznacza kopiowanie wszystkich plików). Oprócz tego możesz zdefiniować dowolne opcje wiersza polecenia oraz ustawić niezbędne flagi. W naszym przykładzie nie ustawiamy jednak żadnych dodatkowych opcji. Zanim polecenie httrack rozpocznie działanie, na ekranie wyświetli się pełny wiersz polecenia ze wszystkimi opcjami ustawionymi przez Ciebie za pomocą kreatora. Jeżeli zapiszesz sobie gdzieś to polecenie, to następnym razem będziesz mógł uruchomić polecenie httrack bez konieczności korzystania z kreatora. Kolejne dwa rysunki zamieszczone poniżej przedstawiają proces konfiguracji polecenia httrack i kopiowanie zawartości witryny www.drchaos.com.

68

Rozdział 2. • Rekonesans

Po zakończeniu klonowania witryny przejdź do katalogu, w którym została zapisana. Wewnątrz znajdziesz wszystkie pliki i strony skopiowanej witryny, jak przedstawiono na rysunku poniżej:

Teraz jesteś już gotowy do rozpoczęcia analizy struktury i zawartości witryny, a zebrane na tym etapie dane mogą pozwolić Ci później na przygotowanie odpowiednio skonfigurowanego narzędzia do penetracji systemu czy znaleźć i wykorzystać lukę w mechanizmie uwierzytelniania użytkowników.

Rekonesans z wykorzystaniem protokołu ICMP Wykorzystanie poleceń ping oraz traceroute to kolejny dobry sposób na zgromadzenie podstawowych informacji na temat celu ataku. Kiedy pakiety danych są przesyłane przez sieć komputerową, to zazwyczaj nie podróżują bezpośrednio od źródła do miejsca swojego przeznaczenia. W większości przypadków pakiety danych przechodzą po drodze przez co najmniej kilka urządzeń sieciowych, takich jak routery, zapory sieciowe i inne systemy komputerowe. Polecenie traceroute pozwala na zidentyfikowanie poszczególnych systemów, przez które podróżuje pakiet, i podaje czas, w jakim pakiet jest przesyłany między kolejnymi systemami. Narzędzie to jest wbudowane w praktycznie każdy współczesny system operacyjny. W przypadku najbardziej chronionych systemów polecenia takie jak ping czy traceroute są często blokowane, a nadmierne próby ich wykorzystania z pewnością spowodują wygenerowanie alarmów w systemach wykrywających anomalie ruchu sieciowego i zabezpieczających dane środowisko. Zapory sieciowe i inne systemy zabezpieczające sieci komputerowe są bardzo często konfigurowane tak, aby nie przepuszczały tego typu ruchu sieciowego. Jeżeli system odpowiada na polecenie 69

Kali Linux. Testy penetracyjne

traceroute, to jego nadużywanie może spowodować wygenerowanie alarmów w systemach

monitorujących. Jeżeli Twoim zamiarem było pozostanie w ukryciu, to w takiej sytuacji jesteś na przegranej pozycji — przedwczesne wzbudzenie uwagi pracowników IT zajmujących się bezpieczeństwem systemu, który zamierzałeś spenetrować, może dać im szansę na wdrożenie dodatkowych mechanizmów zabezpieczeń i znaczące utrudnienie przeprowadzenia testu penetracyjnego. Skanowanie z wykorzystaniem protokołu ICMP polega na wysyłaniu komunikatów ICMP Echo Request i oczekiwaniu na odpowiedź systemu docelowego. Jeżeli taka odpowiedź nadejdzie, to wiesz, że „po drugiej stronie” znajduje się host, który może być potencjalnym celem ataku. Problem z takim skanowaniem polega na tym, że komunikaty ICMP są zazwyczaj blokowane przez większość zapór sieciowych. Oznacza to, że w takiej sytuacji jakakolwiek próba skanowania za pomocą ICMP z zewnątrz środowiska chronionego przez zaporę sieciową będzie skazana na niepowodzenie. Użycie polecenia ping to najprostszy sposób przeprowadzenia skanowania środowiska celu. Aby to zrobić, wystarczy w oknie terminalu wpisać polecenie ping i nazwę hosta docelowego lub jego adres IP. Po uruchomieniu takiego polecenia możesz się przekonać, czy dany host sieciowy odpowiada na komunikaty ICMP Echo Request. Na poniższym rysunku przedstawiono odpowiedź hosta www.google.com na polecenie ping:

Jeżeli otrzymasz odpowiedź na polecenie ping, to będziesz wiedział, że taki host sieciowy jest aktywny. Jeżeli jednak wynikiem działania tego polecenia będzie komunikat o upływie czasu żądania (ang. request timed out), to będzie to oznaczać, że komunikaty ICMP są blokowane przez zaporę sieciową albo dany host jest po prostu nieaktywny. Problem z poleceniem ping polega na tym, że za jego pomocą możesz sprawdzać tylko jeden system naraz. Istnieje jednak narzędzie o nazwie fping, które pozwala na wysyłanie komunikatów ICMP do wielu hostów sieciowych za pomocą jednego polecenia. Co więcej, polecenie to potrafi wysyłać takie komunikaty do wszystkich hostów sieciowych, których nazwy lub adresy IP zostały wcześniej przygotowane w pliku tekstowym. Aby skorzystać z polecenia fping, powinieneś użyć następującej składni wywołania: Fping -asq adres_sieci/maska fping -asq 10.0.1.0/24

70

Rozdział 2. • Rekonesans

W powyższym przykładzie opcja a powoduje, że polecenie zwraca wyniki działania tylko dla aktywnych hostów, opcja s powoduje wyświetlenie zbiorczej statystyki po zakończeniu działania, a opcja q przełącza polecenie fping w tryb „cichy”, gdzie użytkownik nie widzi na ekranie statusu poszczególnych skanów, lecz tylko podsumowanie całej operacji po jej zakończeniu. Podobne rezultaty można uzyskać za pomocą skanera Nmap.

Rekonesans z wykorzystaniem serwerów DNS Większość wartościowych celów posiada nazwy DNS przypisane do aplikacji internetowych. Wykorzystanie nazw DNS powoduje, że użytkownicy mają łatwiejszy dostęp do określonej usługi, a przy tym takie rozwiązanie dodaje systemowi nieco profesjonalnego szlifu. Jeżeli na przykład chcesz skorzystać z wyszukiwarki Google, możesz co prawda w pasku adresu przeglądarki wpisać 74.125.227.101, ale przecież znacznie łatwiej jest wpisać www.google.com. Z punktu widzenia pentestera informacje o celu pozyskane z serwerów DNS mogą być niezwykle przydatne. Dzięki odpowiednim zapytaniom pentester może określić, jakie systemy i poddomeny są wykorzystywane w środowisku celu. Starsze typy ataków na serwery DNS polegały na pozyskiwaniu plików strefowych (ang. zone files) z autorytatywnych serwerów DNS, co pozwalało pentesterowi na zapoznanie się z ich zawartością i identyfikację celów na podstawie rekordów zasobowych (ang. DNS resource records) przechowywanych w takich plikach. Niestety, większość współcześnie używanych serwerów DNS nie zezwala na przeprowadzanie nieuwierzytelnionych transferów stref (ang. zone transfers). Na szczęście nie wszystko stracone! DNS to specyficzna usługa, której przeznaczeniem jest odpowiadanie na zapytania, stąd potencjalny napastnik może używać plików słownikowych do generowania zapytań DNS dla domeny celu. Praktyczne wykorzystanie takiej możliwości ataku wymaga jednak dużej ilości czasu, aczkolwiek większość działań z tym związanych daje się zautomatyzować. Dig (ang. domain information groper) to jedno z najpopularniejszych i najpowszechniej używanych narzędzi do pozyskiwania informacji z serwerów DNS. Jego działanie polega na wysyłaniu zapytań do serwerów DNS i prezentowaniu otrzymanych odpowiedzi. Aby skorzystać z tego narzędzia, otwórz okno terminalu i w wierszu poleceń wpisz dig oraz nazwę hosta reprezentującego domenę celu. Wywołane w taki sposób polecenie dig prześle zapytanie do domyślnych serwerów DNS ustawionych w systemie operacyjnym Twojego komputera. Jeżeli będzie to potrzebne, możesz również skonfigurować polecenie dig tak, aby przesyłało zapytania do serwera DNS o podanym adresie IP. Aby to zrobić, powinieneś w wierszu wywołania polecenia dodać opcję @, gdzie to adres IP wybranego serwera DNS. W przykładzie zamieszczonym poniżej prezentujemy zastosowanie polecenia dig do pozyskiwania informacji na temat domeny www.cloudcentrics.com:

71

Kali Linux. Testy penetracyjne

Opcja -t powoduje, że polecenie dig wystawia żądanie transferu strefy do autorytatywnych serwerów DNS. W kolejnym przykładzie użyte zostało następujące polecenie: dig -t ns cloudcentrics.com.

Na podstawie wyników działania tego polecenia możemy dowiedzieć się, że domena www. cloudcentrics.com posiada dwa autorytatywne serwery DNS, o nazwach ns3681.hostgator.com oraz ns3682.hostgator.com. Gratulacje! Właśnie znalazłeś dwa autorytatywne serwery DNS wykorzystywane przez system będący celem Twojego ataku.

72

Rozdział 2. • Rekonesans

Identyfikacja celów za pomocą serwerów DNS Teraz, kiedy już poznałeś nazwy autorytatywnych serwerów DNS środowiska celu, możesz zacząć sprawdzać, jakie hosty pochodzące z tego środowiska posiadają na tych serwerach swoje wpisy. Na przykład w domenie drchaos.com może się znajdować kilka różnych hostów, takich jak cloud.drchaos.com, mail.drchaos.com czy sharepoint.drchaos.com. Każdy z tych hostów może być aplikacją internetową i cennym celem ataku. Zanim jednak rozpoczniesz na oślep wybierać nazwy hostów, powinieneś sprawdzić, co na ten temat wie serwer DNS. Najlepszym sposobem realizacji tego zadania jest po prostu wysłanie odpowiedniego zapytania do serwera DNS i analiza otrzymanej odpowiedzi. Jeżeli serwer DNS jest skonfigurowany tak, że pozwala na transfery stref, to w odpowiedzi otrzymamy kompletny zestaw wpisów przechowywanych na serwerze. W systemie Kali Linux znajdziesz narzędzie o nazwie Fierce, za pomocą którego możesz sprawdzić, czy dany serwer DNS zezwala na przeprowadzanie transferów stref. Jeżeli taka operacja jest dozwolona, wystawi żądanie transferu strefy i przedstawi wyniki działania użytkownikowi. Jeżeli transfery stref na danym serwerze nie są dozwolone, Fierce może zostać skonfigurowane tak, aby za pomocą ataku słownikowego odgadnąć nazwy hostów, dla których dany serwer DNS świadczy usługi. Jak widać, Fierce jest narzędziem zaprojektowanym do przeprowadzania rekonesansu, jeszcze zanim użyjesz innych narzędzi wymagających już podawania adresu IP hosta, takich jak Nmap. Aby wywołać pakiet Fierce, przejdź w systemie Kali Linux do menu głównego i wybierz polecenie Programy/Kali Linux/Information Gathering/DNS Analysis/Fierce. Pakiet zostanie uruchomiony w oknie terminalu, jak przedstawiono na rysunku poniżej:

Aby użyć pakietu Fierce, powinieneś w oknie terminalu wpisać polecenie podobne do następującego: fierce.pl -dns thesecurityblogger.com

73

Kali Linux. Testy penetracyjne

Jak widać, po wykonaniu tego polecenia i analizie jego wyników działania znamy już nazwy co najmniej kilku hostów zlokalizowanych w domenie thsecurityblogger.com, czyli nasze zadanie zostało wykonane. Często zdarza się jednak, że Fierce nie będzie w stanie przeprowadzić transferu stref. W takiej sytuacji Fierce spróbuje wymusić transfery stref, przeprowadzając atak słownikowy z wykorzystaniem predefiniowanej listy słów lub całego słownika (o ile zdefiniowałeś taką opcję). W naszym przypadku tego nie zrobiliśmy, ponieważ naszym zadaniem było poznanie hostów zlokalizowanych w tej domenie, ale jeszcze na tym etapie bez przeprowadzania ataku wymuszającego transfer stref. Jeżeli Twoje zamierzenia są nieco szerzej zakrojone i nie ograniczają się tylko do aplikacji internetowych, to możesz spróbować przeprowadzić taki atak samodzielnie. Teraz możemy się już skoncentrować na wybranym hoście i do jego dalszego rozpoznania wykorzystać narzędzia takie jak Nmap. Niezmiernie ważnym aspektem pracy z pakietem Fierce jest to, że pozwala on na rozpoznanie i wybranie celu ataku, a jednocześnie generuje tylko minimalną ilość ruchu sieciowego, co znacząco zmniejsza ryzyko wykrycia takiego działania. Programu Nmap będziemy używać w dalszej części tego rozdziału.

Maltego — graficzna prezentacja zbieranych informacji Maltego to narzędzie firmy Paterva, które zostało zaimplementowane w systemie Kali Linux. Jest to wielozadaniowe narzędzie wspomagające wyszukiwanie i agregowanie informacji o celu, znajdujących się w publicznie dostępnych źródłach w internecie. Maltego posiada kilka wbudowanych, własnych narzędzi do pozyskiwania danych z serwerów DNS i pozwala na bardzo dokładne profilowanie celu i zbieranie informacji na jego temat. Dla ułatwienia analizy zebrane informacje mogą być prezentowane w formie wykresów graficznych. Aby uruchomić pakiet Maltego, z menu głównego wybierz polecenie Programy, przejdź do grupy Kali Linux, a następnie wybierz polecenie Information Gathering/DNS Analysis/Maltego. Pierwszą czynnością, którą musisz wykonać po uruchomieniu pakietu Maltego, jest jego zarejestrowanie. Nie ma możliwości używania tej aplikacji bez jej uprzedniego zarejestrowania.

74

Rozdział 2. • Rekonesans

Po zakończeniu procesu rejestracji będziesz mógł dokończyć instalowanie pakietu i zacząć z niego korzystać.

Maltego wykorzystuje wiele różnych metod gromadzenia danych. Najłatwiejszym sposobem używania tej aplikacji jest skorzystanie z kreatora, który pozwoli Ci na zdefiniowanie rodzajów informacji, których gromadzeniem jesteś zainteresowany. Doświadczeni użytkownicy mogą rozpocząć pracę od pustego wykresu lub nawet całkowicie pominąć kreatora. Efektywność pakietu Maltego wynika z tego, że pozwala Ci na wizualną obserwację zależności pomiędzy poszczególnymi domenami, organizacjami i użytkownikami. Dzięki temu możesz szybko znaleźć potrzebne informacje o wybranej organizacji lub na przykład skoncentrować się na zależnościach między daną organizacją a innymi podmiotami.

75

Kali Linux. Testy penetracyjne

W zależności od wybranych opcji Maltego może wykonywać między innymi następujące zadania:  Znajdowanie powiązań między adresami poczty elektronicznej a konkretnymi

osobami.  Znajdowanie powiązań między witrynami internetowymi a konkretnymi osobami.  Weryfikowanie adresów poczty elektronicznej.  Wyszukiwanie i zbieranie informacji udostępnianych w serwisie Twitter, włącznie

z takimi danymi, jak informacje geolokacyjne zamieszczanych tam zdjęć. Pod nazwami większości opcji znajdziesz krótki opis ich zastosowania, a nazwy pozostałych opcji są dosyć oczywiste i nie wymagają dodatkowych objaśnień. Pakiet Maltego jest wykorzystywany głównie do zbierania informacji, które następnie mogą być wykorzystywane do różnych celów (jednym z nich mogą być przygotowania do przeprowadzenia ataku z wykorzystaniem metod socjotechnicznych).

Nmap Nmap (ang. Network Mapper) to popularne narzędzie przeznaczone do skanowania portów i wykrywania usług w sieciach komputerowych. Nmap posiada rozbudowane mechanizmy pozwalające na wykrywanie typów systemów operacyjnych oraz identyfikację usług i aplikacji działających na hostach sieciowych. Jest to jeden z najczęściej używanych i najefektywniejszych skanerów sieciowych, co jednak jednocześnie powoduje, że jest dobrze znany i łatwy do wykrycia. Z tego powodu zalecamy, aby korzystać z tego programu tylko w wyjątkowych sytuacjach, tak aby zminimalizować ryzyko wykrycia. Więcej szczegółowych informacji na temat programu Nmap znajdziesz na stronie internetowej http://nmap.org/.

76

Rozdział 2. • Rekonesans

Oprócz samego skanera Nmap w systemie Kali Linux możesz znaleźć pakiet Zenmap, który jest oficjalnie przyjętym graficznym interfejsem użytkownika (GUI — ang. Graphical User Interface) dla pakietu Nmap (sam Nmap działa wyłącznie w trybie tekstowym). Istnieje oczywiście grono najbardziej zatwardziałych użytkowników, którzy twierdzą, że prawdziwi, doświadczeni pentesterzy używają wyłącznie konsolowej wersji skanera Nmap, ale trzeba przyznać, że w ciągu ostatnich lat Zenmap przeszedł długą drogę i obecnie potrafi obsłużyć niemal wszystkie, nawet najbardziej zaawansowane funkcje skanera Nmap. Co więcej, Zenmap oferuje nawet swoje własne, dodatkowe funkcje, których próżno by szukać w oryginalnej, konsolowej wersji skanera, takie jak tworzenie graficznej reprezentacji skanu, która może później być z powodzeniem wykorzystywana podczas tworzenia dokumentacji i przygotowywania raportu końcowego. Aby uruchomić pakiet Zenmap, z menu głównego wybierz opcję Programy, przejdź do grupy Kali Linux i następnie wybierz polecenie Information Gathering/DNS Analysis/Zenmap.

Na ekranie pojawi się główne okno programu. W prawej górnej części okna znajduje się lista rozwijana Profile, pozwalająca na wybranie jednego z dostępnych rodzajów skanowania. Wygląd listy został przedstawiony na kolejnym rysunku.

77

Kali Linux. Testy penetracyjne

Pierwszym krokiem po uruchomieniu skanera jest utworzenie nowego profilu, który w pakiecie Zenmap pozwala na zdefiniowanie rodzaju przeprowadzanego skanu oraz wybranie odpowiednich opcji. Aby to zrobić, z menu głównego wybierz polecenie Profile i następnie wybierz polecenie New Profile or Command, jak przedstawiono na rysunku zamieszczonym poniżej:

Po wybraniu polecenia New Profile or Command pojawi się okno edytora profili. W polu Profile name wpisz nazwę tworzonego profilu (najlepiej użyć jakiejś opisowej nazwy, na przykład Mój pierwszy skan, ale w praktyce nazwa oczywiście może być zupełnie dowolna). Opcjonalnie możesz uzupełnić utworzony profil opisem jego przeznaczenia (pole Description). W trakcie pracy będziesz zapewne tworzył wiele różnych profili skanowania i będziesz przeprowadzał wiele skanów. Zupełnie naturalnym odruchem może być kasowanie profilu po zakończeniu skanowania. Mamy jednak dla Ciebie małą poradę — profile nie zajmują praktycznie żadnego dodatkowego miejsca, a są bardzo użyteczne, kiedy przychodzi wykonać kolejny skan na podobnych czy wręcz identycznych ustawieniach. Zdecydowanie dobrą i rekomendowaną praktyką jest nadawanie profilom skanowania rozbudowanych, opisowych nazw i wypracowanie swojej własnej, dostosowanej do potrzeb metodologii ich nadawania. W naszym przypadku nazwa profilu zawsze rozpoczyna się od bieżącej daty i czasu, potem dodajemy nazwę miejsca, w którym się znajdujemy, lokalizację sieciową celu oraz nazwę klienta, na którego zlecenie przeprowadzamy taki skan.

Jeżeli zakończyłeś już nadawanie nazwy i tworzenie opisu profilu skanowania, przejdź na kartę Scan. W polu Targets wpisz adresy hostów i sieci, których skanowanie chcesz przeprowadzić. W razie potrzeby możesz tutaj wpisać całe zakresy adresów IP, zarówno w formacie podstawowym (np. 10.0.1.1-255), jak i w formacie CIDR (np. 10.0.1.1/24).

78

Rozdział 2. • Rekonesans

Jak zapewne zauważyłeś, domyślnie zaznaczona jest opcja -A, pozwalająca na przeprowadzenie agresywnego skanowania. Włączenie tej opcji powoduje włączenie modułu wykrywania systemu operacyjnego (opcja -O), wykrywania wersji (opcja -sV), skanowanie z użyciem skryptów (opcja -sC) oraz śledzenie ścieżki sieciowej prowadzącej do badanego hosta (opcja -traceroute). Krótko mówiąc, użycie opcji -A powoduje automatycznie włączenie wielu opcji agresywnego skanowania, dzięki czemu nie musisz ich po kolei włączać ręcznie. Skanowanie agresywne jest uważane za metodę inwazyjną, co oznacza, że jest wykrywane przez zdecydowaną większość nawet niezbyt „rozgarniętych” urządzeń zabezpieczających sieci. Taki skan może czasami przejść niezauważony (zwłaszcza w przypadku specyficznych systemów), ale niezależnie od tego przed rozpoczęciem skanowania powinieneś zawsze upewnić się, że posiadasz pisemną zgodę właściciela systemu na przeprowadzenie skanowania i osobną zgodę na użycie opcji skanowania agresywnego. Pamiętaj, że w wielu krajach (m.in. w USA) zakończenie trzeciego etapu połączenia trójetapowego (ang. three-way handshake), czyli wysłanie sygnału ACK kończącego sekwencję połączenia z hostem, jest uważane za nielegalne, jeśli nie posiadasz odpowiedniego uprawnienia do połączenia z nim. Do wybrania celu naszego ataku możemy teraz użyć informacji, które pozyskaliśmy nieco wcześniej z serwerów DNS. Zanim jednak do tego przystąpimy, przyjrzymy się kilku najczęściej używanym opcjom skanera Nmap:

Przejdź na kartę Ping i zaznacz opcję Don’t ping before scanning (-Pn), co spowoduje, że Nmap nie będzie wysyłał komunikatów ICMP Echo Request do sprawdzenia, czy host jest aktywny. Jeżeli nie zaznaczysz tej opcji, Nmap będzie wysyłał takie komunikaty do wszystkich hostów i sieci zdefiniowanych w profilu skanu. Domyślnie dalszemu skanowaniu poddawane są tylko takie hosty, które są aktywne w sieci. Wybranie opcji -Pn powoduje, że Nmap będzie skanował

79

Kali Linux. Testy penetracyjne

wszystkie hosty zdefiniowane w profilu, niezależnie od tego, czy odpowiadają na próby „pingowania”. Takie rozwiązanie może co prawda znacznie wydłużyć czas skanowania, ale za to użycie opcji -Pn pozwala na skanowanie hostów w sytuacji, kiedy nadchodzące ze skanera komunikaty ICMP Echo Request są blokowane na poziomie zapory sieciowej lub innych urządzeń zabezpieczających środowisko celu.

Zapisz wprowadzone zmiany, klikając przycisk Save changes, znajdujący się w prawym dolnym rogu okna dialogowego edytora profilu skanowania. Po zapisaniu opcji możesz kliknąć przycisk Scan, znajdujący się w prawym górnym rogu okna, i tym samym rozpocząć proces skanowania. Zwróć uwagę, że wybrane przez Ciebie opcje zostaną wyświetlone w oknie skanowania.

Spojrzenie na kartę Topology pozwoli Ci szybko zorientować się w tym, jak zakończony został Twój skan i czy po drodze do celu pakiety musiały przejść przez jakieś routery. Na przykładzie zamieszczonym na następnej stronie widać, że skan nie wychodził poza obręb sieci lokalnej. Listę wykrytych hostów znajdziesz na karcie Hosts.

80

Rozdział 2. • Rekonesans

Kiedy zaznaczysz jeden ze znalezionych hostów, Zenmap na karcie Host details wyświetli szczegółową listę odkrytych zasobów tego hosta, obejmującą takie informacje, jak typ systemu operacyjnego, lista aktywnych usług i wiele innych. Na następnym rysunku widać, że zaznaczonym hostem jest tuner telewizji satelitarnej.

81

Kali Linux. Testy penetracyjne

Jeżeli spojrzysz na okno wyników skanowania, zobaczysz, że obejmują one nie tylko numery otwartych portów na poszczególnych hostach, ale również listę działających na nich usług i aplikacji. Zwróć uwagę, że Nmap potrafi wykryć, że na przykład na porcie 80 działa serwer IIS w wersji 5.0, odgrywający rolę serwera WWW. W wynikach skanu znajdziesz również informacje o adresie IP tego serwera, systemie operacyjnym, pod którego kontrolą działa ten serwer, oraz listę udostępnianych przez niego aplikacji internetowych. Nie trzeba dodawać, że dla pentestera przygotowującego się do przeprowadzenia ataku takie informacje mają ogromną wartość.

Teraz już wiesz, że możesz skoncentrować swoje wysiłki na systemie odgrywającym rolę serwera WWW, ponieważ port 80 jest tam otwarty. Użycie pakietu Zenmap to najlepszy sposób na przetwarzanie wyników działania skanera Nmap. Zenmap posiada rozbudowany interfejs graficzny, który pozwala zarówno na wyświetlanie i przeglądanie wyników skanu, jak i eksportowanie ich do innych formatów, takich jak pliki tekstowe czy skoroszyty programu Microsoft Excel. Istnieje całkiem sporo sposobów wyświetlania, przeglądania i zapisywania wyników działania programu Nmap (na przykład autorzy tej książki mimo wszystko preferują korzystanie ze starej, dobrej wersji konsolowej). W tym rozdziale zdecydowaliśmy się jednak na przedstawienie rozwiązania wykorzystującego pakiet Zenmap, ponieważ jest to metoda niezwykle popularna, przywoływana w wielu różnych źródłach opisujących metodologię przeprowadzania testów penetracyjnych i pozwalająca na łatwe eksportowanie wyników do innych programów.

82

Rozdział 2. • Rekonesans

Na zakończenie warto jeszcze dodać, że pakiet Zenmap posiada mechanizmy pozwalające na eksportowanie wyników działania (lub ich wybranych części) w postaci plików CSV lub plików graficznych, co z pewnością docenisz podczas tworzenia raportu końcowego z przeprowadzonego testu.

FOCA — wyszukiwanie i analiza metadanych Czy wiesz, że za każdym razem, kiedy tworzysz pliki, takie jak prezentacja w programie Microsoft PowerPoint, dokument programu Microsoft Word czy choćby dokumenty w formacie PDF, to oprócz treści zapisywany w nich jest również szereg tzw. metadanych? Czym zatem są owe tajemniczo brzmiące metadane? Otóż metadane to po prostu dane o danych. Inaczej mówiąc, są to dane opisujące inne zestawy danych, obiekty i zasoby, obejmujące wiele różnego rodzaju informacji, jak chociażby sposoby formatowania, daty utworzenia dokumentu, jego modyfikacji i drukowania czy dane o autorze. Metadane mogą być bardzo użyteczne dla każdego pentestera, ponieważ zwykle zawierają również informacje o systemie, w którym zostały utworzone, takie jak na przykład:

83

Kali Linux. Testy penetracyjne

 nazwy użytkowników zalogowanych w systemie,  nazwa i wersja oprogramowania, za którego pomocą został utworzony dany dokument,  typ i wersja systemu operacyjnego, pod którego kontrolą został utworzony dokument.

FOCA (ang. Fingerprinting Organizations with Collected Archives) to narzędzie do przeprowadzania audytów bezpieczeństwa, za którego pomocą można analizować metadane w dokumentach przechowywanych zarówno w zasobach sieciowych, jak i na dyskach lokalnych. Pakiet FOCA jest dostępny w systemie Kali Linux, aczkolwiek jego wersja może być już nieco nieaktualna. Najlepszym rozwiązaniem jest zawsze korzystanie z najnowszej wersji pakietu. Warto pamiętać, że dedykowanym środowiskiem pakietu FOCA jest system Windows, więc nie można wykluczyć, że najnowsze wersje popularnej „foki” będą dostępne już tylko dla tej platformy. Najnowszą wersję pakietu FOCA możesz pobrać z witryny internetowej http://www.elevenpaths. com/lab_foca.html (do przetłumaczenia witryny na język polski możesz użyć witryny Google Translate). Po zainstalowaniu pakietu możesz go uruchomić i wykonać następujące czynności: 1. Utworzenie nowego projektu, jak przedstawiono na rysunkach poniżej.

84

Rozdział 2. • Rekonesans

Zalecamy przechowywanie wszystkich plików należących do danego projektu w jednym folderze. Dla każdego projektu powinieneś utworzyć osobny folder.

2. Po wpisaniu nazwy projektu i wybraniu folderu, w którym będą przechowywane jego pliki, powinieneś kliknąć przycisk Create, jak przedstawiono na poniższym rysunku.

3. Kolejną czynnością do wykonania jest zapisanie utworzonego projektu. Po zapisaniu projektu kliknij przycisk Search All, co pozwoli pakietowi FOCA na poszukiwanie dokumentów przy użyciu wyszukiwarek sieciowych. W razie potrzeby możesz również użyć tego pakietu do analizy plików znajdujących się na dysku lokalnym komputera.

85

Kali Linux. Testy penetracyjne

4. Kliknij prawym przyciskiem myszy wybrany dokument i z menu podręcznego, które pojawi się na ekranie, wybierz polecenie Download, jak przedstawiono na rysunku zamieszczonym poniżej.

5. Kliknij pobrany plik prawym przyciskiem myszy i wybierz z menu podręcznego opcję Extract Metadata, jak pokazano poniżej.

86

Rozdział 2. • Rekonesans

6. Kliknij pobrany plik prawym przyciskiem myszy i wybierz z menu podręcznego opcję Analyze Metadata, jak pokazano na kolejnym rysunku.

Na rysunku zamieszczonym poniżej widać, że nasz badany dokument był otwierany przez dwóch użytkowników.

87

Kali Linux. Testy penetracyjne

Na podstawie wyników działania pakietu FOCA możemy również stwierdzić, że do utworzenia tego dokumentu były używane programy Microsoft Office for Mac oraz Adobe Photoshop; patrz kolejny rysunek.

Korzystając z pakietu FOCA, szybko przekonasz się, że metadane dokumentów publikowanych na witrynach internetowych bardzo często mogą zawierać niewiarygodnie dużo informacji, które dla pentestera czy nawet potencjalnego napastnika mogą mieć ogromną wartość.

88

Rozdział 2. • Rekonesans

Pakiet FOCA pozwala użytkownikowi na zapisanie i zindeksowanie kopii wszystkich znalezionych metadanych. Oczywiście w razie potrzeby można również zapisywać każdy typ metadanych osobno. Jak łatwo możesz sam się przekonać, daje to pentesterowi dostęp do źródła bezcennych informacji. W razie potrzeby informacje znalezione dzięki pakietowi FOCA można łatwo wyeksportować i dołączyć do raportu końcowego. FOCA pozwala również na pobieranie z witryny celu wybranych plików, które mogą następnie służyć jako przykłady, do których odwołuje się raport końcowy.

Podsumowanie Rekonesans to zazwyczaj najbardziej krytyczny i zajmujący najwięcej czasu etap każdego testu penetracyjnego. Praktycznie wszystkie działania, jakie pentester wykonuje w kolejnych fazach przeprowadzania testu penetracyjnego, opierają się na danych, które zostały zgromadzone podczas rekonesansu. Im większą wiedzą na temat środowiska celu będzie dysponował pentester, tym większa jest szansa na to, że jego działania nie zostaną wykryte, i tym większa jest szansa na znalezienie i wykorzystanie słabego miejsca w zabezpieczeniach systemu. Zdecydowanie zalecamy więc potraktowanie tego rozdziału jako lektury obowiązkowej przed rozpoczęciem pracy z kolejnymi rozdziałami. W tym rozdziale skoncentrowaliśmy się na różnych sposobach gromadzenia informacji na temat środowiska, które będzie celem naszego testu penetracyjnego. Zaprezentowaliśmy kilka najczęściej wykorzystywanych narzędzi, które są dostępne zarówno w internecie, jak i w dystrybucji Kali Linux. Po przeczytaniu tego rozdziału powinieneś być gotowy do oceny poszczególnych hostów działających w środowisku celu pod kątem ich przydatności jako potencjalnych obiektów ataku. W kolejnym rozdziale będziemy zajmować się zagadnieniami związanymi z wyszukiwaniem, identyfikacją i wykorzystywaniem podatności oraz luk w zabezpieczeniach aplikacji internetowych i serwerów WWW.

89

Kali Linux. Testy penetracyjne

90

3 Ataki na serwery aplikacji internetowych Serwer to z definicji system komputerowy udostępniający różnego rodzaju usługi użytkownikom i innym systemom komputerowym w sieci. Zakres świadczonych usług jest niezwykle szeroki, od różnego rodzaju usług dostępnych publicznie, takich jak na przykład gry sieciowe, aż do usług przeznaczonych dla wąskiego grona uprawnionych użytkowników, takich jak udostępnianie poufnych danych w sieciach komputerowych dużych firm i innych organizacji. W kontekście architektury klient-serwer serwer to program komputerowy, którego zadaniem jest realizacja żądań wysyłanych przez inne programy, nazywane „klientami”. Inaczej mówiąc, serwer przetwarza różnego rodzaju dane w imieniu klienta, który wysłał żądanie. Klienty mogą działać na tym samym fizycznym komputerze lub być połączone z serwerem poprzez sieć komputerową. Serwer może na przykład udostępniać grę, z którą poszczególne klienty z całego świata łączą się zdalnie przez internet. Istnieje wiele różnych rozwiązań pozwalających na udostępnianie usług klientom sieciowym, takich jak serwery Apache, których rola sprowadza się głównie do usług WWW, ale też i takich jak serwery BEA WebLogic Application, które pozwalają na udostępnianie usług WWW i innych. Serwery sieciowe są zazwyczaj skonfigurowane tak, aby były w stanie znieść duże obciążenie spowodowane świadczeniem usług dla dużej liczby klientów jednocześnie. W praktyce oznacza to, że takie serwery są wyposażone w odpowiednio wydajne procesory, dużą ilość pamięci operacyjnej oraz odpowiednio dużą przestrzeń dyskową, co z kolei powoduje, że stają się atrakcyjnymi celami dla hakerów. Wiele firm i organizacji zarządza swoimi serwerami zdalnie i nie przykłada nadmiernej uwagi do codziennego monitorowania ich działania, wskutek czego niewielkie wahania wydajności serwerów czy inne tego typu zakłócenia spowodowane przełamaniem zabezpieczeń systemu i aktywnością hakera mogą przejść zupełnie niezauważone. Bardzo często zdarza się, że po wykryciu włamania administrator systemu przekonuje się, że od momentu, kiedy czarny charakter po raz pierwszy uzyskał dostęp do systemu, do momentu wykrycia luki w zabezpieczeniach i jego aktywności upłynęło naprawdę wiele czasu.

Kali Linux. Testy penetracyjne

W tym rozdziale skoncentrujemy się na identyfikacji i wykorzystywaniu podatności serwerów aplikacji internetowych na ataki. Rozpoczniemy od przedstawienia narzędzi dostępnych w systemie Kali Linux, które są przeznaczone do wyszukiwania luk w zabezpieczeniach, a następnie skupimy się na narzędziach, które pozwalają na wykorzystywanie wykrytych „dziur” w systemie do uzyskania nieautoryzowanego dostępu do serwerów aplikacji internetowych (jest to, inaczej mówiąc, tzw. wykorzystywanie exploitów; terminu exploit1 będziemy często używać w tym rozdziale i pozostałych rozdziałach książki). Na koniec pomówimy również o innych metodach, pozwalających na zdobycie dostępu do serwerów aplikacji internetowych.

Wyszukiwanie podatności i luk w zabezpieczeniach Ataki na serwery aplikacji internetowych polegają na wyszukiwaniu, identyfikacji i wykorzystywaniu luk w zabezpieczeniach usług, portów komunikacyjnych i aplikacji działających na serwerze. W zasadzie dla każdego serwera aplikacji internetowych można wyznaczyć co najmniej kilka różnych wektorów ataku. Z technicznego punktu widzenia taki serwer to po prostu system komputerowy, działający pod kontrolą określonego systemu operacyjnego i wyposażony w odpowiednie oprogramowanie, pozwalające na świadczenie takich czy innych usług w sieci. Każdy taki serwer posiada cały szereg otwartych portów komunikacyjnych. Każdy z wymienionych elementów składowych może posiadać luki w zabezpieczeniach, które potencjalny napastnik może próbować wykorzystać w celu uzyskania nieautoryzowanego dostępu do systemu i zdobycia cennych informacji. Warto zauważyć, że do tej pory wiele protokołów komunikacyjnych wykorzystywanych do komunikacji z serwerami usług sieciowych przesyła dane w postaci niezaszyfrowanej. A zatem najwyższy czas przyjrzeć się narzędziom do wyszukiwania podatności i luk w zabezpieczeniach serwerów aplikacji internetowych, dostępnym w systemie Kali Linux.

Webshag Webshag to wielowątkowe, wieloplatformowe narzędzie przeznaczone do przeprowadzania audytów serwerów WWW. Pakiet ten pozwala na zbieranie informacji o serwerach WWW z wykorzystaniem typowych mechanizmów, takich jak skanowanie portów komunikacyjnych, skanowanie adresów URL czy fuzzing plików. Za pomocą programu Webshag możesz skanować serwery WWW używające protokołów HTTP i HTTPS, korzystać z serwerów proxy czy 1

Exploit to specjalnie przygotowany kod lub program, napisany w celu wykorzystania błędu lub luki w zabezpieczeniach stron internetowych, aplikacji czy systemów operacyjnych, pozwalający na dokonywanie nieautoryzowanych zmian, uzyskanie dostępu do atakowanego celu bądź wręcz przejęcie nad nim kontroli — przyp. tłum.

92

Rozdział 3. • Ataki na serwery aplikacji internetowych

stosować uwierzytelnianie HTTP (zarówno podstawowe, jak i digest). Dodatkowo Webshag posiada mechanizmy utrudniające wykrycie przeprowadzanego skanu przez systemy IDS analizujące korelację między żądaniami napływającymi do serwera. Webshag ma również inne, zupełnie innowacyjne możliwości, takie jak wyszukiwanie i tworzenie listy nazw domen obsługiwanych przez dany serwer lub fuzzing aplikacji internetowych z wykorzystaniem dynamicznie generowanych nazw plików. Webshag potrafi również wykonywać tzw. fingerprinting stron internetowych (czyli zbieranie informacji o danej stronie, pozwalających na utworzenie jej unikatowego „odcisku palca”) i jest przy tym zupełnie odporny na zmiany zawartości samych stron. Taka funkcjonalność jest wykorzystywana przez mechanizm usuwania tzw. miękkich błędów 404, generowanych przez serwery broniące się przed skanowaniem swoich zasobów. Webshag może działać zarówno z graficznym interfejsem użytkownika, jak i z poziomu konsoli systemu i funkcjonuje na platformach Linux oraz Windows. W systemie Kali Linux możesz go uruchomić, wybierając z menu Programy grupę Kali Linux i następnie polecenie Web Applications/Web Vulnerability Scanners/webshag-gui. Obsługa programu Webshag nie jest trudna. Każde z jego narzędzi posiada swoją osobną kartę w górnej części ekranu. Wybierz kartę żądanego narzędzia, w polu Target(s) wpisz adres URL celu i kliknij przycisk OK. Narzędzia z poszczególnych kart możesz uruchamiać równolegle. Do wyboru masz następujące mechanizmy: Port Scanning (skanowanie portów), Spider (robot sieciowy), URL Scan (skanowanie adresów URL) oraz Fuzzing (fuzzing aplikacji internetowych). Na kolejnych czterech rysunkach zamieszczamy zrzuty ekranu przedstawiające okno programu Webshag podczas skanowania portów, analizowania struktury witryny za pomocą robota sieciowego, skanowania adresów URL oraz fuzzingu witryny www.thesecurityblogger.com:

93

Kali Linux. Testy penetracyjne

94

Rozdział 3. • Ataki na serwery aplikacji internetowych

Webshag pozwala na eksportowanie danych podczas audytu w formatach XML, HTML oraz TXT. Raport generowany przez ten program jest podzielony na logiczne sekcje, dzięki czemu może być przedstawiony jako samodzielny raport z audytu danego serwera lub wykorzystany później do przygotowania raportu końcowego, który zostanie dostarczony zleceniodawcy po zakończeniu testów penetracyjnych. Następne dwa rysunki przedstawiają okno opcji eksportu danych oraz fragment wygenerowanego raportu.

Więcej szczegółowych informacji na temat programu Webshag znajdziesz na stronie http://www.scrt.ch/en/ attack/downloads/webshag.

Skipfish Skipfish to narzędzie wspomagające gromadzenie informacji o aplikacjach sieciowych. Program ten pozwala na przygotowanie interaktywnej mapy badanej witryny internetowej z wykorzystaniem własnego, rekurencyjnego robota sieciowego oraz dodatkowych metod słownikowych. Po zakończeniu skanowania Skipfish generuje listę znalezionych podatności dla poszczególnych elementów witryny. Program Skipfish możesz uruchomić, wybierając z menu Programy grupę Kali Linux i następnie polecenie Web Applications/Web Vulnerability Scanners/skipfish. Przy pierwszym uruchomieniu programu pojawi się okno konsoli, w którym zostaną wyświetlone opcje wywołania programu. Do wyszukiwania podatności i luk w zabezpieczeniach witryny internetowej Skipfish może używać słownika zdefiniowanego przez pentestera lub słowników wbudowanych w ten program. 95

Kali Linux. Testy penetracyjne

Niektóre słowniki programu Skipfish mogą być niedostępne w Twojej dystrybucji systemu Kali Linux. Najnowszą wersję skanera Skipfish oraz domyślne słowniki możesz pobrać ze strony https://code.google.com/p/skipfish/.

Wszystkie dostępne słowniki są spakowane w jednym pliku o nazwie dictionary.

Skaner Skipfish posiada wiele opcji. Aby uruchomić na przykład skanowanie danej witryny internetowej z wykorzystaniem własnego słownika, w wierszu poleceń konsoli wpisz polecenie skipfish, następnie wpisz opcję -W oraz ścieżkę dostępu do żądanego pliku słownika, dalej wpisz opcję -o oraz nazwę folderu, w którym zapisane zostaną wyniki działania programu, i wreszcie na końcu wpisz adres witryny internetowej, którą chcesz przeskanować. Skipfish -o -W

Na przykładzie zamieszczonym poniżej przedstawiamy sposób użycia programu Skipfish do skanowania witryny www.thesecurityblogger.com z wykorzystaniem pliku słownika o nazwie complete.wl. Po uruchomieniu tego polecenia Skipfish utworzy na pulpicie folder o nazwie Skipfishoutput. Poszczególne elementy w wierszu polecenia oznaczają kolejno: skipfish to oczywiście nazwa polecenia, -o /root/Desktop/Skipfishoutput to definicja folderu, w którym zapisane zostaną wyniki działania, -W /root/Desktop/complete.wl to lokalizacja i nazwa pliku słownika, a http://www.thesecurityblogger.com to nazwa witryny, która będzie przedmiotem skanowania.

Zwróć uwagę na fakt, że jeżeli w wierszu wywołania skanera użyjesz opcji -W, to domyślne słowniki programu Skipfish nie zostaną użyte. Jeżeli chcesz dodawać własne słowa do słownika domyślnego, powinieneś najpierw utworzyć kopię oryginalnego pliku domyślnego słownika, nadać jej inną nazwę, otworzyć ją w ulubionym edytorze tekstu i usunąć pierwszy wiersz, zawierający dyrektywę #ro (która powoduje, że plik jest traktowany jako tylko do odczytu). Fragment zawartości słownika domyślnego wraz z widoczną w pierwszym wierszu dyrektywą #ro został przedstawiony na rysunku poniżej.

96

Rozdział 3. • Ataki na serwery aplikacji internetowych

Jeżeli program zostanie poprawnie uruchomiony, w oknie konsoli pojawi się ekran powitalny skanera Skipfish z informacją, że skanowanie rozpocznie się po naciśnięciu dowolnego klawisza lub po upływie 60 sekund.

Aby wyświetlić szczegółowe informacje na temat skanu, naciśnij klawisz spacji. Skanowanie wybranej witryny może zająć od około 30 sekund do nawet kilku godzin. Aby wcześniej zakończyć proces skanowania, możesz nacisnąć klawisze Ctrl+C.

Gdy zakończy się skanowanie (lub naciśniesz klawisze Ctrl+C), Skipfish wygeneruje w folderze wyjściowym całe mnóstwo plików. Aby wyświetlić wyniki działania programu, kliknij plik index.html, co spowoduje uruchomienie przeglądarki. Poszczególne sekcje raportu można zwijać i rozwijać, klikając odpowiednie przyciski. Poniżej przedstawiamy wygląd przykładowego raportu wygenerowanego przez program Skipfish.

97

Kali Linux. Testy penetracyjne

ProxyStrike ProxyStrike to narzędzie spełniające rolę serwera proxy, pozwalające na wyszukiwanie podatności i luk w zabezpieczeniach podczas przeglądania witryn i aplikacji internetowych. Program działa jak zwykły serwer proxy nasłuchujący na domyślnym porcie 8080, co oznacza, że aby z niego skorzystać, musisz skonfigurować swoją przeglądarkę tak, aby korzystała z serwera proxy „dostępnego” na tym porcie — dzięki temu cały ruch sieciowy związany z przeglądaniem danej witryny będzie przechodził przez program ProxyStrike, pozwalając mu na przeprowadzanie analizy badanej witryny. Zastosowanie serwera proxy jest znakomitym rozwiązaniem, pozwalającym na wygodne wyszukiwanie, identyfikację, przechwytywanie i modyfikowanie ruchu sieciowego. Aby skonfigurować przeglądarkę, taką jak Firefox, do pracy z pakietem ProxyStrike, z menu tej przeglądarki wybierz polecenie Tools/Options (Narzędzia/Opcje). Na ekranie pojawi się okno dialogowe opcji przeglądarki. Kliknij opcję Advanced (Zaawansowane), przejdź na kartę Network (Sieć) i kliknij przycisk Settings (Ustawienia). Zaznacz opcję Manual Proxy (Ręczna konfiguracja serwerów proxy) i jako adres serwera proxy wpisz adres IP Twojego komputera, a następnie ustaw port 8080 (oczywiście, o ile nie zmieniłeś wcześniej domyślnego numeru portu, na którym pracuje ProxyStrike).

98

Rozdział 3. • Ataki na serwery aplikacji internetowych

Aby uruchomić ProxyStrike w systemie Kali Linux, wybierz z menu głównego grupę Kali Linux, przejdź do kategorii Web Applications, a następnie wybierz polecenie Web Vulnerability Scanners/proxystrike. Od tej chwili (przy założeniu, że poprawnie skonfigurowałeś przeglądarkę do używania pakietu ProxyStrike), na karcie Comms będziesz mógł obserwować przechwycony ruch sieciowy. W rozdziale 6., „Ataki na aplikacje internetowe i serwery WWW”, poświęcimy pakietowi ProxyStrike znacznie więcej uwagi.

99

Kali Linux. Testy penetracyjne

Zastosowanie robota sieciowego to prosty sposób na przeprowadzenie skanowania witryny internetowej pod kątem wyszukiwania podatności i luk w zabezpieczeniach implementacji języka SQL, protokołu SSL czy wtyczki XSS. Aby skorzystać z robota sieciowego, nie musisz konfigurować pakietu ProxyStrike jako serwera proxy. Jeżeli na przykład chcesz uruchomić robota na witrynie, która korzysta z wtyczek XSS, przejdź na kartę Plugins, wybierz z listy wtyczkę XSS & SSL attacks i zaznacz opcję Enable. Następnie przejdź na kartę Crawler. W polu URL wpisz adres witryny internetowej (nie zapomnij na początku adresu dodać http://), zaznacz opcję Crawl using plugins i kliknij przycisk Stopped (nazwa przycisku zamieni się na Running). Użycie wtyczek może znacząco zwiększyć czas, jaki będzie niezbędny do zakończenia procesu skanowania. ProxyStrike wyświetla na karcie Crawler pasek informujący o postępie skanowania.

100

Rozdział 3. • Ataki na serwery aplikacji internetowych

Po uruchomieniu skanowania wyniki działania wtyczek robota wyświetlane są na karcie Plugins. Wyniki działania wraz z informacjami o znalezionych podatnościach i lukach w zabezpieczeniach mogą zostać wyeksportowane do plików w formacie HTML lub XML.

Na karcie Log wyświetlane są informacje o tym, jaki jest postęp poszczególnych zadań skanowania wybranych witryn internetowych. Zawartość tego dziennika może zostać wyeksportowana do pliku tekstowego i dołączona później do raportu końcowego. Z kolei na karcie Crawler znajdziesz listę wszystkich łączy, jakie zostały znalezione na badanej witrynie internetowej.

To jednak nie wszystko — ProxyStrike ma znacznie więcej możliwości. Więcej szczegółowych informacji na ten temat znajdziesz na stronie http://www.edge-security.com/proxystrike.php.

Vega

Vega to kolejne narzędzie przeznaczone do testowania zawartości witryny internetowej, pozwalające na znalezienie wszystkich znajdujących się na niej łączy oraz analizę parametrów umieszczonych na niej formularzy. 101

Kali Linux. Testy penetracyjne

Aby uruchomić program Vega, przejdź do grupy Kali Linux, a następnie wybierz polecenie Web Applications/Web Vulnerability Scanners/Vega. Na monitorze pojawi się przez moment ekran powitalny aplikacji i po chwili wyświetli się główne okno programu.

W prawym górnym rogu okna programu znajdziesz przyciski kart Scanner oraz Proxy. Aby użyć pakietu Vega jako skanera, kliknij kartę Scanner, a następnie z menu programu wybierz polecenie Scan/Start New Scan.

Na ekranie pojawi się okno dialogowe Select a Scan Target. W polu Enter a base URI for scan wpisz adres witryny (w naszym przykładzie będzie to www.thesecurityblogger.com) i kliknij przycisk Next (zobacz pierwszy rysunek na następnej stronie). W kolejnym oknie znajdziesz szereg opcji pozwalających na wybranie testów, jakim poddana zostanie skanowana witryna. Do dyspozycji masz dwie główne kategorie, Injection oraz Response

102

Rozdział 3. • Ataki na serwery aplikacji internetowych

Processing, z których każda zawiera bardzo wiele dodatkowych opcji. Rozwiń wybraną kategorię, zaznacz żądane opcje skanowania i kliknij przycisk Next.

Na dwóch kolejnych ekranach znajdziesz opcje pozwalające na dodawanie ciasteczek (ang. cookies) oraz zdefiniowanie parametrów, które zostaną wyłączone ze skanu, co pozwoli na uniknięcie fuzzingu badanej witryny internetowej (opcjonalnie). W większości przypadków możesz na obu ekranach pozostawić wartości i opcje domyślne. Aby zakończyć konfigurację, kliknij przycisk Finish. Program Vega rozpocznie skanowanie witryny oraz wyświetlanie znalezionych podatności i luk w zabezpieczeniach. Zidentyfikowane podatności i luki są grupowane według oceny ryzyka, jakie stanowią dla badanej witryny.

103

Kali Linux. Testy penetracyjne

W lewej górnej części okna znajduje się panel o nazwie Website View, w którym wyświetlają się skanowana witryna oraz inne witryny, które są z nią powiązane. W lewym dolnym rogu zlokalizowano panel o nazwie Scan Alerts, w którym znajduje się zestawienie znalezionych podatności, pogrupowanych według kategorii zagrożenia. Klikając przyciski z lewej strony poszczególnych kategorii, można zwijać i rozwijać ich widoki. Kiedy klikniesz nazwę określonej podatności znalezionej przez skaner, Vega wyświetli w oknie obok szczegółowe informacje o danym „znalezisku” wraz z opisem tego, jakie potencjalnie zagrożenie stanowi ono dla badanego systemu. Rysunek zamieszczony poniżej przedstawia okno programu Vega wyświetlające jedną z potencjalnych luk w zabezpieczeniach witryny www.thesecurityblogger.com, pozwalających na przeprowadzenie ataku XSS (ang. Cross-site scripting) (zobacz pierwszy rysunek na następnej stronie). Vega posiada również moduł serwera proxy, który pozwala na przeglądanie żądań i odpowiedzi przesyłanych między przeglądarką a witryną internetową. Dane w sekcji Proxy pojawiają się po uruchomieniu skanowania (zobacz drugi rysunek na następnej stronie). W środkowej części okna skanera Vega możesz wyświetlić zarówno podsumowanie całego skanu, jak i szczegółowe informacje na temat poszczególnych podatności i luk w zabezpieczeniach. Informacje wyświetlane w tym panelu możesz bez problemu skopiować i umieścić na przykład w raporcie końcowym (zobacz pierwszy rysunek na stronie 106).

104

Rozdział 3. • Ataki na serwery aplikacji internetowych

Owasp-Zap Pakiet Owasp-Zap, znany również pod nazwą Zaproxy, to serwer proxy pozwalający na przechwytywanie żądań i odpowiedzi przesyłanych między przeglądarką i serwerem WWW (ang. intercept proxy), wykorzystywany do testowania zabezpieczeń aplikacji internetowych.

105

Kali Linux. Testy penetracyjne

Aby uruchomić program Owasp-Zap, w menu głównym systemu Kali Linux przejdź do grupy Kali Linux, a następnie wybierz polecenie Web Applications/Web Vulnerability Fuzzers/owasp-zap. Po wybraniu tego polecenia na ekranie pojawi się okno z treścią licencji pakietu Owasp-Zap, którą musisz zaakceptować, aby móc skorzystać z programu. Aby to zrobić, kliknij po prostu przycisk Accept. Gdy zaakceptujesz licencję, na ekranie wyświetli się okno dialogowe z pytaniem, czy chcesz utworzyć certyfikat SSL (ang. SSL Root CA certificate — certyfikat głównego urzędu certyfikacji). Wygenerowanie takiego certyfikatu pozwala pakietowi Owasp-Zap na przechwytywanie szyfrowanych połączeń HTTPS między przeglądarką a serwerem WWW. Takie rozwiązanie jest niezbędne, jeżeli chcesz testować aplikacje wykorzystujące protokół HTTPS. Aby przejść do okna generowania certyfikatu, kliknij przycisk Generate.

Na ekranie pojawi się okno Dynamic SSL Certificates, które pozwala na wygenerowanie nowego certyfikatu lub zaimportowanie certyfikatu już posiadanego. Aby wygenerować nowy certyfikat, kliknij przycisk Generate. Utworzony certyfikat możesz zapisać na dysku. Aby to zrobić,

106

Rozdział 3. • Ataki na serwery aplikacji internetowych

kliknij przycisk Save i wybierz folder, w którym chcesz go umieścić. Nowo utworzony plik zawierający certyfikat nosi nazwę owasp_cap_root_ca.cer.

Gdy zapiszesz certyfikat na dysku, kliknij przycisk OK i uruchom przeglądarkę. Jeżeli korzystasz z przeglądarki Firefox, z menu głównego wybierz polecenie Tools/Options (Narzędzia/Opcje). Przejdź na kartę Encryption (Certyfikaty) i kliknij przycisk View Certificates (Wyświetl certyfikaty). Na ekranie pojawi się okno menedżera certyfikatów. Kliknij przycisk Import (Importuj), a następnie odszukaj i zaznacz certyfikat wygenerowany wcześniej przez Owasp-Zap (plik z rozszerzeniem .cer). Firefox zapyta Cię, dla kogo ten certyfikat powinien być uważany za zaufany. Zaznacz wszystkie trzy opcje, czyli kolejno zaufane strony internetowe, użytkowników poczty elektronicznej oraz deweloperów aplikacji. Na zakończenie dwukrotnie kliknij przycisk OK.

107

Kali Linux. Testy penetracyjne

Kolejnym etapem przygotowań jest skonfigurowanie przeglądarki do przesyłania całego ruchu sieciowego przez nasz przechwytujący serwer proxy. Aby to zrobić w przeglądarce Firefox, z menu wybierz polecenie Tools/Options (Narzędzia/Opcje). Na ekranie pojawi się okno dialogowe opcji przeglądarki. Kliknij opcję Advanced (Zaawansowane), przejdź na kartę Network (Sieć) i kliknij przycisk Settings (Ustawienia). Zaznacz opcję Manual Proxy (Ręczna konfiguracja serwerów proxy) i jako adres serwera proxy wpisz localhost, a następnie ustaw port 8080 (domyślny port komunikacyjny pakietu Owasp-Zap). Zaznacz opcję Use this proxy server for all protocols (Użyj tego serwera proxy dla wszystkich protokołów) i kliknij przycisk OK. Na rysunku poniżej przedstawiono wygląd okna konfiguracji przeglądarki Firefox po zakończeniu konfiguracji.

Teraz przejdź do okna programu Owasp-Zap. W lewym górnym rogu okna powinieneś zobaczyć panel o nazwie Sites, którego zawartość będzie się pojawiać, w miarę jak będziesz odwiedzał w przeglądarce kolejne witryny internetowe. W panelu po prawej stronie okna będziesz mógł przeglądać wszystkie żądania i odpowiedzi przesyłane między przeglądarką a serwerem WWW. Pakiet Owasp-Zap pozwala na łatwe przeglądanie zasobów wykorzystywanych przez poszczególne strony witryny internetowej.

108

Rozdział 3. • Ataki na serwery aplikacji internetowych

Korzystając z pakietu Owasp-Zap, możesz również przeprowadzać ataki na wybrane witryny i aplikacje internetowe. Aby to zrobić, przejdź na kartę Quick Start i w polu URL to attack wpisz adres URL witryny. Poniżej przedstawiono wygląd okna programu Owasp-Zap podczas skanowania witryny www.thesecurityblogger.com.

Program Owasp-Zap do analizy witryny wykorzystuje swojego własnego, wbudowanego robota sieciowego, który pozwala na zidentyfikowanie wszystkich hiperłączy powiązanych z tą witryną oraz na przeprowadzenie skanu witryny w poszukiwaniu podatności i luk w zabezpieczeniach. Wyniki skanowania wraz z opisami poszczególnych podatności znajdziesz na karcie Alerts.

Zwróć uwagę na fakt, że Owasp-Zap domyślnie nie automatyzuje procesu uwierzytelniania. Jeżeli korzystasz wyłącznie z ustawień domyślnych, to wszystkie żądania uwierzytelniania użytkownika, które zostaną wystawione podczas zautomatyzowanego skanowania, zakończą się niepowodzeniem.

109

Kali Linux. Testy penetracyjne

Możesz jednak skonfigurować Owasp-Zap do automatycznego logowania. Aby to zrobić, musisz po włączeniu tego programu uruchomić przeglądarkę, przejść na wybraną stronę internetową, zalogować się ręcznie, następnie wskazać programowi, gdzie w zapisie ruchu sieciowego znajdują się żądania logowania i wylogowania, i wreszcie na koniec włączyć opcję automatycznego logowania. Kiedy odpowiednie żądania GET pojawią się w panelu Sites, przejdź na kartę Responses, odszukaj odpowiedź związaną z logowaniem do witryny, kliknij ją prawym przyciskiem myszy, z menu podręcznego wybierz polecenie Flag as Content i zaznacz, że jest to logowanie (Logged in indicator). Następnie powtórz całą procedurę dla odpowiedzi związanej z wylogowaniem i zaznacz ją jako Logged out indicator.

Na pasku narzędzi programu Owasp-Zap uaktywni się przycisk pozwalający na włączanie lub wyłączanie automatycznego uwierzytelniania (zobacz rysunek poniżej). Po włączeniu tego mechanizmu program Owasp-Zap będzie mógł automatycznie odpowiadać na żądania autoryzacji, jakie będą się pojawiały podczas skanowania danej witryny. Jest to bardzo przydatne rozwiązanie, pozwalające na automatyzację procesu eksploracji badanej witryny, która wymaga uwierzytelniania użytkownika.

Program Owasp-Zap posiada swój własny mechanizm aktualizacji całego pakietu. Jeżeli chcesz sprawdzić, czy pojawiła się już nowsza wersja tego oprogramowania lub czy dostępne są jakieś nowe moduły, powinieneś z menu głównego wybrać polecenie Help/Check for updates.

110

Rozdział 3. • Ataki na serwery aplikacji internetowych

W menu Report znajdziesz polecenia pozwalające na tworzenie raportów.

Poniżej przedstawiamy fragment raportu w formacie HTML, wygenerowanego po przeskanowaniu witryny www.thesecurityblogger.com.

111

Kali Linux. Testy penetracyjne

Websploit

Websploit to narzędzie, które powstało w ramach jednego z projektów open source i jest przeznaczone do automatycznego skanowania i wyszukiwania podatności oraz luk w zabezpieczeniach systemów zdalnych. Aby uruchomić pakiet Websploit, w menu głównym systemu Kali Linux przejdź do grupy Kali Linux, a następnie wybierz polecenie Web Applications/Web Application Fuzzers/websploit. Na ekranie pojawi się okno konsoli z wyświetlonym logo pakietu Websploit. Aby wyświetlić listę wszystkich dostępnych modułów, wraz z krótkimi opisami przeznaczenia, powinieneś wykonać polecenie show modules.

Aby uruchomić wybrany moduł, wpisz polecenie use i nazwę modułu, a następnie podaj pozostałe niezbędne informacje zgodnie z instrukcjami pojawiającymi się na ekranie. Aby na przykład uruchomić moduł webkiller, wpisz polecenie use network/webkiller, a następnie za pomocą polecenia set TARGET podaj cel ataku. Aby rozpocząć atak, wpisz polecenie run.

112

Rozdział 3. • Ataki na serwery aplikacji internetowych

Wykorzystywanie znalezionych luk w zabezpieczeniach (exploity) Jeżeli pentester zainwestuje odpowiednią ilość czasu i zasobów w przeprowadzenie dobrze przygotowanego rekonesansu, to w rezultacie powinien otrzymać listę systemów, które z powodu takich czy innych luk w zabezpieczeniach są podatne na ataki. Następnym krokiem powinno być zatem uszeregowanie poszczególnych systemów według ich przydatności w realizacji całej misji, określenie nakładów pracy niezbędnej do wykorzystania zidentyfikowanych luk w zabezpieczeniach oraz oszacowanie ryzyka związanego z próbami przeprowadzenia ataku na poszczególne systemy. W systemie Kali Linux znajdziesz wiele narzędzi, które wspomagają przeprowadzanie ataków na serwery aplikacji internetowych i wykorzystywanie luk w zabezpieczeniach, które zostały wcześniej zidentyfikowane w fazie rekonesansu.

Metasploit Pakiet Metasploit to jedno z najpopularniejszych na świecie narzędzi do przeprowadzania testów penetracyjnych i wykorzystywania podatności serwerów aplikacji internetowych. W opinii specjalistów jest to jedno z najbardziej użytecznych narzędzi dla pentesterów. Pierwsza wersja pakietu Metasploit powstała w roku 2003, a jej autorem był HD Moore. Metasploit jest wykorzystywany najczęściej przez specjalistów zajmujących się przeprowadzaniem testów penetracyjnych, aczkolwiek zdarza się również, że jest używany do niecnych celów przez hakerów i inne czarne charaktery współczesnego cyberświata. W internecie i nie tylko można znaleźć setki źródeł opisujących sposoby pracy z pakietem Metasploit. W naszej książce skoncentrujemy się jedynie na użyciu tego pakietu w czasie testów penetracyjnych do przeprowadzania ataków wykorzystujących zidentyfikowane wcześniej luki w zabezpieczeniach serwerów aplikacji internetowych. Przed uruchomieniem pakietu upewnij się, że zostały włączone usługi Postgres SQL oraz Metasploit. Aby to zrobić, otwórz okno konsoli i wpisz polecenia odpowiednio service postgresql start oraz service metasploit start.

Pierwszym krokiem do uruchomienia pakietu Metasploit będzie otwarcie okna konsoli i wpisanie polecenia msfconsole, co spowoduje załadowanie konsoli będącej interfejsem użytkownika. Na początek powinieneś zapamiętać dwa podstawowe polecenia, help oraz show, które pomogą Ci zapoznać się z możliwościami pakietu. Pamiętaj, że istnieją jeszcze inne metody uruchamiania pakietu Metasploit, takie jak polecenie msfgui (wersja z graficznym interfejsem użytkownika) oraz msfcli (wersja do pracy bezpośrednio z wiersza poleceń terminalu).

113

Kali Linux. Testy penetracyjne

Wersja konsolowa, msfconsole, umożliwia wywoływanie nie tylko komend pakietu Metasploit, ale także poleceń systemu operacyjnego, takich jak ping czy nmap. Jest to bardzo użyteczne rozwiązanie, ponieważ pozwala pentesterowi na wykonywanie innych zadań bez konieczności opuszczania konsoli pakietu Metasploit. Na początek użyjemy skanera Nmap do przeskanowania sieci lokalnej. Wyniki mogą być automatycznie załadowane do pakietu Metasploit za pośrednictwem pliku XML. Polecenie, które wywołamy, wygląda następująco: nmap -n -oX my.xml network

Wyniki działania skanera Nmap załadujemy do pakietu Metasploit za pośrednictwem pliku XML. Możemy tego dokonać za pomocą następującego polecenia: db_import my.xml

Po zakończeniu szybko wpisujemy polecenie host, aby upewnić się, że dane zostały zaimportowane pomyślnie i że Metasploit posiada teraz komplet danych ze skanera Nmap.

Następnie użyjemy polecenia services do wyświetlenia listy usług dostępnych w pakiecie Metasploit. Na zrzucie ekranu, który widać na rysunku na następnej stronie, przedstawiamy przykładowe wyniki działania polecenia services. Skanowanie sieci za pomocą skanera Nmap oraz zaimportowanie pliku XML zawierającego wyniki jego działania do pakietu Metasploit możesz przeprowadzić w jednym kroku, za pomocą

114

Rozdział 3. • Ataki na serwery aplikacji internetowych

polecenia db_nmap. W przykładzie przedstawionym poniżej używamy polecenia db_nmap do skanowania sieci z wykorzystaniem opcji wywołania skanera Nmap.

Teraz ponownie możemy użyć poleceń hosts oraz services do sprawdzenia, czy Metasploit otrzymał poprawny zestaw danych.

Wykonanie polecenia services ujawnia, że do udostępniania plików i drukarek używany jest serwer Samba. Sprawdzimy zatem, czy możemy znaleźć jakąś lukę w jego zabezpieczeniach i wykorzystać ją do naszych celów. Warto zauważyć, że choć w tym przypadku atakujemy rzeczywisty serwer aplikacji internetowych, to z różnych względów pełna próba przełamania

115

Kali Linux. Testy penetracyjne

jego zabezpieczeń nie zawsze będzie nam na rękę. Pamiętaj jednak, że prawdziwy napastnik (haker czy inny czarny charakter) bez wahania będzie próbował wykorzystać każdą znalezioną lukę w zabezpieczeniach i uzyskać dostęp do serwera. W historii serwerów Samba takie czy inne luki w zabezpieczeniach i związane z nimi exploity pojawiały się dosyć często. Istnieje nawet ranking exploitów, szeregujący je pod względem potencjalnego zagrożenia dla systemu. W naszym przypadku skorzystamy z exploita o nazwie usermap_script, wykorzystującego podatność, która we wspomnianym rankingu plasuje się bardzo wysoko. Moduł działa na serwerach Samba w wersjach od 3.0.20 3.0.25rc3. Więcej szczegółowych informacji na temat tej podatności znajdziesz na stronie http://www.metasploit.com/modules/ exploit/multi/samba/usermap_script.

Aby użyć konkretnego modułu (exploita), musimy skorzystać z komendy use. W naszym przypadku wygląda to następująco:

116

Rozdział 3. • Ataki na serwery aplikacji internetowych

Po wybraniu modułu musisz sprawdzić, jakie dane trzeba dostarczyć przed jego uruchomieniem, i ustalić, jaki ładunek (ang. payload) chcesz wysłać do atakowanego systemu. Listę niezbędnych opcji możesz wyświetlić na ekranie za pomocą polecenia show options, jak przedstawiono na rysunku poniżej:

Jak widać, w tym przypadku musisz podać wartość zmiennej RHOST, reprezentującej adres IP zdalnego hosta, który będzie celem ataku. Teraz będziesz musiał wybrać ładunek oraz ustawić jego opcje. Ładunek to specjalnie przygotowany fragment kodu, który zostaje dostarczony do zdalnego hosta i po uruchomieniu próbuje wykorzystać określoną podatność. Ponieważ daną lukę w zabezpieczeniach można zwykle wykorzystać na kilka różnych sposobów, to często zdarza się, że dla danego exploita będziesz miał kilka lub nawet kilkanaście ładunków do wyboru. Aby sprawdzić, jakie ładunki są dostępne dla wybranego exploita, wpisz polecenie show payloads.

Po wyświetleniu listy dostępnych ładunków musisz wybrać, który z nich zostanie użyty. Aby to zrobić, wpisz polecenie set payload i następnie nazwę wybranego ładunku.

117

Kali Linux. Testy penetracyjne

Po wybraniu konkretnego ładunku powinieneś ponownie wykonać polecenie show options, aby sprawdzić, jakie opcje musisz ustawić dla wybranego ładunku.

Jak widać na rysunku przedstawionym poniżej, nasz wybrany ładunek wymaga ustawienia wartości zmiennych LHOST oraz LPORT. Zmienna LHOST to adres Twojego lokalnego komputera. Exploit, którego użyjemy, powoduje, że zdalny host będzie próbował ustanowić połączenie z systemem, na którym działa pakiet Metasploit, dlatego musi „znać” jego adres IP. Oprócz tego musimy wybrać port komunikacyjny, którego zdalny host będzie używał do połączenia z pakietem Metasploit. W większości środowisk korporacyjnych liczba otwartych portów wykorzystywanych do komunikacji ze światem zewnętrznym jest bardzo mocno ograniczona przez odpowiednio skonfigurowane routery czy zapory sieciowe. W takiej sytuacji najlepszym

118

Rozdział 3. • Ataki na serwery aplikacji internetowych

rozwiązaniem będzie wykorzystanie powszechnie używanego portu komunikacyjnego, takiego jak na przykład 443. Port o tym numerze jest zarezerwowany dla ruchu SSL i zazwyczaj środowiska korporacyjne zezwalają na jego wykorzystywanie. Kolejną zaletą używania portu 443 jest fakt, że większość firm i organizacji nie monitoruje ruchu SSL. Z naszych doświadczeń z kolei wynika, że użycie portu 443 (ustawienie zmiennej LPORT na wartość 443) w większości przypadków pozwalało na ominięcie zainstalowanych w atakowanym środowisku wewnętrznych serwerów proxy, których zadaniem było monitorowanie ruchu wychodzącego na zewnątrz i blokowanie niepożądanych połączeń.

Po wybraniu ładunku i ustawieniu jego opcji możesz uruchomić exploit i rozpocząć przeprowadzanie ataku. Aby to zrobić, wpisz polecenie exploit. Jeżeli działanie modułu zakończy się powodzeniem, zostaniesz połączony ze zdalnym serwerem. Po uzyskaniu połączenia możesz wykonywać dowolne polecenia — jak widać na rysunku poniżej, wybrany exploit pozwolił na uzyskanie połączenia ze zdalnym serwerem na prawach użytkownika root (pełne uprawnienia administratora systemu).

119

Kali Linux. Testy penetracyjne

Pakiet Metasploit oferuje bardzo dużą liczbę wbudowanych modułów i wtyczek. Więcej szczegółowych informacji na ten temat znajdziesz na stronie http://www.metasploit.com/.

w3af

Pakiet w3af (ang. Web Application Attack and Audit Framework) to otwarty skaner aplikacji internetowych i narzędzie do wykorzystywania podatności i luk w zabezpieczeniach. Aby uruchomić ten pakiet w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux i następnie wybierz polecenie Web Application Assessment/Web Vulnerability Scanners/w3af. Pakiet w3af posiada bardzo wygodny kreator, ułatwiający skonfigurowanie i przeprowadzenie skanu, aczkolwiek można bez problemu używać tego programu bez korzystania z kreatora. Pierwszą czynnością po uruchomieniu skanera jest utworzenie nowego profilu lub załadowanie profilu już istniejącego. Profile są wykorzystywane do grupowania wtyczek, które zostaną użyte do przeprowadzenia ataku. Skaner w3af posiada wbudowany cały szereg znakomitych, domyślnych zestawów wtyczek, jak choćby OWASP TOP10. Kiedy zaznaczysz wybrany profil lub wtyczkę, jego lub jej definicja pojawi się w centralnej części okna, jak zaprezentowano na rysunku poniżej. Możesz wybrać jeden z istniejących profili skanowania lub utworzyć nowy. Aby wybrać profil, kliknij jego nazwę na liście w lewej części ekranu. Jeżeli używasz nowego profilu lub edytujesz jeden z istniejących profili, możesz zaznaczyć lub usunąć zaznaczenie żądanych wtyczek. Im więcej aktywnych wtyczek będzie przypisanych do danego profilu, tym więcej czasu będzie zajmowało skanowanie systemu. Jeżeli zaznaczysz wiele wtyczek, skaner w3af wyświetli na ekranie ostrzeżenie, że wykonanie takiego skanu będzie wymagało znacznej ilości czasu.

Następnie w polu Target wpisz adres URL serwera, którego skan masz zamiar przeprowadzić, i kliknij przycisk Start. Na rysunku zamieszczonym poniżej przedstawiamy wygląd okna programu w3af skonfigurowanego do skanowania witryny www.thesecurityblogger.com.

120

Rozdział 3. • Ataki na serwery aplikacji internetowych

Na karcie Log program w3af wyświetla informacje o bieżącym statusie i postępach skanowania. Po rozpoczęciu skanowania program w3af dokonuje oszacowania czasu niezbędnego do zakończenia skanowania i wyświetla tę informację na ekranie.

Aby zobaczyć wynik skanowania, przejdź na kartę Results. Znajdziesz tam szczegółowe informacje o zidentyfikowanych podatnościach i lukach w zabezpieczeniach skanowanego serwera. Na karcie Exploit znajdziesz informacje o istniejących exploitach pozwalających na wykorzystanie znalezionych luk w zabezpieczeniach.

121

Kali Linux. Testy penetracyjne

Program w3af pozwala użytkownikowi na dokonanie próby wykorzystania znalezionych podatności i luk w zabezpieczeniach. Luki w zabezpieczeniach, które zostały zidentyfikowane podczas skanowania, są porównywane z istniejącą bazą wiedzy, z której następnie odczytywane są odpowiednie informacje na temat istniejących exploitów i sposobów ich wykorzystania. Jeżeli użycie wybranego exploita zakończy się powodzeniem, uzyskasz dostęp do konsoli zaatakowanego systemu. Na rysunku zamieszczonym poniżej przedstawiono wygląd okna skanera w3af, wykorzystującego podatność o nazwie dayShell na witrynie www.thesecurityblogger.com.

Skaner w3af ma bardzo wiele innych ciekawych możliwości i zastosowań. Więcej szczegółowych informacji na ten temat znajdziesz na stronie http://w3af.org/.

122

Rozdział 3. • Ataki na serwery aplikacji internetowych

Wykorzystywanie luk w zabezpieczeniach systemów poczty elektronicznej Ze względu na swoją specyficzną rolę praktycznie wszystkie systemy zajmujące się przetwarzaniem poczty elektronicznej są w taki czy inny sposób podłączone do internetu i pozwalają na anonimowy dostęp z zewnątrz danej firmy lub organizacji — w przeciwnym wypadku ich funkcjonalność byłaby mocno ograniczona. Pracownicy wielu firm i organizacji używają poczty elektronicznej do przesyłania wiadomości zawierających poufne dane. W większości środowisk na serwerach poczty elektronicznej przechowuje się bardzo wiele cennych informacji, dzięki czemu niemal z definicji serwery te stanowią bardzo atrakcyjne cele dla potencjalnego napastnika. Dobra wiadomość jest taka, że zdecydowana większość współcześnie używanych i prawidłowo skonfigurowanych systemów pocztowych jest niezmiernie odporna na ataki, a przełamanie ich zabezpieczeń i uzyskanie nieautoryzowanego dostępu jest zadaniem ekstremalnie trudnym. Nie oznacza to oczywiście, że współczesne systemy pocztowe nie są podatne na ataki — w końcu większość z nich posiada swoje aplikacje internetowe, pozwalające użytkownikowi na wygodne korzystanie z poczty elektronicznej za pomocą przeglądarki z dowolnego miejsca na świecie. Takie rozwiązanie zwiększa oczywiście prawdopodobieństwo tego, że potencjalny napastnik uzyska zdalny dostęp do serwera poczty i będzie mógł wykorzystać go jako bazę do rozpoczęcia atakowania innych wewnętrznych serwerów danego środowiska. Zanim jednak przymierzymy się do samego atakowania serwerów pocztowych, musimy wiedzieć, na jakich platformach działają takie serwery w badanym środowisku. Jeżeli nie posiadasz odpowiednich wiadomości, możesz skorzystać z technik rozpoznania i gromadzenia informacji, które omawialiśmy w rozdziale 2., „Rekonesans”. W naszym przykładzie używamy polecenia fierce do znalezienia hostów opisywanych w badanej domenie rekordami MX. W zdecydowanej większości przypadków takie hosty są dedykowanymi serwerami poczty elektronicznej. Na kolejnym rysunku przedstawiamy użycie polecenia fierce do badania domeny www.cloudcentrics.com.

123

Kali Linux. Testy penetracyjne

Pierwszym krokiem będzie sprawdzenie, czy znalezione serwery są podatne na bezpośrednie użycie odpowiednich poleceń protokołu SMTP. Jednym z głównych powodów, dla których hakerzy atakują serwery pocztowe, jest chęć uzyskania dostępu do serwera w celu tworzenia fałszywych wiadomości pocztowych i nieautoryzowanego wykorzystywania takiego serwera do ich przekazywania (ang. e-mail relay server). Więcej szczegółowych informacji na temat sposobu użycia pomyślnie zaatakowanych serwerów pocztowych do przygotowania i przeprowadzania ataków socjotechnicznych znajdziesz w rozdziale 4., „Ataki na klienty aplikacji internetowych”. W naszym przypadku do próby połączenia się z atakowanym serwerem poczty elektronicznej użyjemy narzędzia o nazwie Netcat. Jest to uniwersalne narzędzie sieciowe, pozwalające na tworzenie połączeń i przesyłanie danych za pomocą protokołów TCP lub UDP. Netcat został zaprojektowany tak, aby można było korzystać z niego w sposób interaktywny i zarazem używać go w skryptach i innych programach. Netcat jest również znakomitym sieciowym narzędziem skanująco-monitorującym, pozwalającym na analizę połączeń sieciowych, wykrywanie oraz identyfikację problemów komunikacyjnych, a także monitorowanie ruchu sieciowego i korelowanie wyników. Aby dokonać próby połączenia z serwerem pocztowym, użyjemy polecenia netcat, podając jako argumenty wywołania adres sieciowy serwera oraz numer portu komunikacyjnego. W tym przypadku nasz atakowany serwer pocztowy wykorzystuje do swoich potrzeb domyślny port 25. Wcześniej oczywiście sprawdziliśmy tę informację w fazie rozpoznania i gromadzenia informacji za pomocą polecenia nmap, tak jak opisywaliśmy to w rozdziale 2., „Rekonesans”.

Gdy uzyskamy za pomocą programu Netcat połączenie z serwerem pocztowym, użyjemy polecenia HELO do poinformowania serwera, „kim jesteśmy”. Jeżeli otrzymamy od serwera odpowiedź, w wielu przypadkach będziemy mogli nim manipulować za pomocą odpowiednich poleceń protokołu SMTP (aczkolwiek niektóre systemy mogą być skonfigurowane tak, aby nie reagować na tak wydawane polecenia). W naszym przykładzie rozpoczęliśmy sesję z serwerem od przedstawienia się za pomocą polecenia HELO, a teraz spróbujemy wykorzystać ten serwer do przekazywania naszych odpowiednio spreparowanych wiadomości pocztowych, które ułatwią nam dalszą eksplorację atakowanego środowiska. Wysłanie wiadomości pocztą elektroniczną wymaga jedynie wykonania poleceń HELO, MAIL FROM, RCPT TO oraz Data. Innych poleceń możesz użyć do ukrywania listy odbiorców takiej wiadomości czy do zmiany adresu zwrotnego (pole Reply-To). W przykładzie przedstawionym poniżej pokazujemy, jak przygotować informację o nadawcy wiadomości, aby przekonać odbiorcę, że wiadomość została wysłana przez kogoś zupełnie innego.

Pełną listę poleceń protokołu SMTP możesz znaleźć w dokumencie RFC821 lub po prostu za pomocą wyszukiwarki Google.

124

Rozdział 3. • Ataki na serwery aplikacji internetowych

Ataki typu brute-force Ataki typu brute-force (czyli inaczej mówiąc, ataki metodą siłową) polegają na tym, że napastnik sprawdza po kolei wszystkie możliwe kombinacje kluczy szyfrujących, dopóki nie znajdzie właściwego klucza pozwalającego na odszyfrowanie danych. Takie ataki są niezmiernie kosztowne z punktu widzenia zasobów i czasu, jaki należy poświęcić na ich przeprowadzenie. Pewnym ułatwieniem może być wykorzystanie podczas ataku słabych stron algorytmu szyfrującego, wykorzystanie niewielkiej długości klucza czy jego prostoty. Wielu użytkowników, tworząc hasła, wybiera po prostu słowa z języka, którym się posługuje na co dzień. W takiej sytuacji całkowita liczba haseł, które musi sprawdzić napastnik, jest ograniczona do liczby słów w słowniku danego języka i ich ewentualnych modyfikacji, co znakomicie redukuje przestrzeń możliwych haseł w stosunku do haseł składających się z zupełnie losowych znaków alfanumerycznych. Dobrą praktyką, znakomicie utrudniającą przeprowadzenie ataku typu brute-force, jest po prostu używanie długich, złożonych haseł, składających się z małych i wielkich liter, cyfr i znaków specjalnych oraz zaimplementowanie mechanizmu czasowego blokowania konta po wykryciu określonej liczby kolejnych niepomyślnych prób zalogowania się do systemu. Oczywiście są to tylko przykłady, a możliwych metod zwiększenia bezpieczeństwa jest znacznie więcej.

Hydra Hydra to narzędzie zaprojektowane przez grupę programistów z organizacji The Hacker’s Choice (THC), które wykorzystuje metodę brute-force do testowania wielu różnych protokołów komunikacyjnych i łamania haseł. Jest to idealne narzędzie do atakowania serwerów pocztowych, ponieważ pozwala na zaatakowanie hosta o określonym adresie IP przy użyciu danego protokołu, na przykład POP3 i SMTP, używanego przez systemy pocztowe. Jak zwykle, przed użyciem skanera Hydra powinieneś przeprowadzić dokładne rozpoznanie celu. W rozdziale 2., „Rekonesans”, opisywaliśmy narzędzie o nazwie Zenmap, za pomocą którego możesz uzyskać następujące informacje niezbędne do użycia skanera Hydra:  adres IP serwera będącego celem ataku (na przykład 192.168.1.1),  listę otwartych portów komunikacyjnych (na przykład porty 80 i 25),  protokoły komunikacyjne używane przez poszczególne usługi (na przykład HTTP

dla usługi WWW oraz SMTP dla poczty elektronicznej),  nazwy kont użytkowników (na przykład admin).

Kolejnym narzędziem, za pomocą którego często przeprowadzany jest rekonesans i zbierane są informacje dla skanera Hydra, jest wtyczka Tamper Data dla przeglądarki Firefox.

125

Kali Linux. Testy penetracyjne

Tamper Data to narzędzie napisane przez Adama Judsona, które pozwala użytkownikowi na przeglądanie i modyfikowanie żądań GET i POST protokołów HTTP i HTTPS. Informacje te mogą być bardzo użyteczne dla narzędzi takich jak Hydra, ponieważ pozwalają one na zautomatyzowanie procesu otwierania strony internetowej i testowania różnych kombinacji nazw kont użytkowników i haseł dostępu. Po zainstalowaniu i włączeniu wtyczki Tamper Data możemy rozpocząć wpisywanie danych w formularzu logowania strony internetowej.

126

Rozdział 3. • Ataki na serwery aplikacji internetowych

Wtyczka Tamper Data wyświetla przechwycone informacje w odpowiednio pogrupowanych polach. Użytkownik lub napastnik może modyfikować zawartość poszczególnych pól i ponownie wysyłać dane nawet w sytuacji, kiedy komunikacja ze stroną internetową jest szyfrowana.

W naszym przykładzie widzimy, że użytkownik przed kliknięciem przycisku Login wpisał nazwę konta pink oraz hasło pinkprincess. Oba przedstawione przykłady to typowo praktyczne metody przeprowadzania rekonesansu i zdobywania informacji potrzebnych dla skanera Hydra. Oczywiście istnieje wiele metod wykorzystujących inne narzędzia dostępne w systemie Kali Linux, pozwalające na zdobywanie danych dla skanera Hydra, aczkolwiek uważamy, że Netcat oraz Tamper Data są jednymi z najefektywniejszych i najczęściej polecanych. Teraz, kiedy zakończyliśmy już fazę rekonesansu, możemy uruchomić skaner Hydra i zobaczyć, w jaki sposób w praktyce możemy użyć zdobytych informacji do przeprowadzenia ataku typu brute-force na hasła dostępu. Aby w systemie Kali Linux uruchomić skaner Hydra, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Online Attacks/Hydra. Na ekranie pojawi się okno terminalu, w którym zostanie uruchomiony skaner Hydra.

Szczegółową instrukcję posługiwania się skanerem Hydra znajdziesz w dokumentacji programu. Jeżeli chcesz dokonać ataku na przykład na konto administratora systemu o adresie 192.168.1.1 z wykorzystaniem jego pliku haseł i protokołu SMTP, powinieneś wykonać następujące polecenie: hydra -l admin -p /root/password.txt 192.168.1.1 smtp

127

Kali Linux. Testy penetracyjne

Jeżeli chcesz wykorzystać skaner Hydra do ataku na stronę internetową zawierającą formularz logowania, musisz podać trochę informacji, które zdobyliśmy za pomocą wtyczki Tamper Data. Składnia wywołania skanera Hydra dla formularza strony internetowej jest następująca: ::. URL=https://www.facebook.com/login.php?login_attempt=1email=pink&passwd= pinkprincessl&login="log in"

Teraz możesz wreszcie uruchomić skaner Hydra. W parametrach wywołania musisz podać ścieżkę do pliku zawierającego nazwy kont użytkowników oraz ścieżkę do pliku zawierającego hasła. hydra -L /cloudcentrics/usernamelist -P /cloudcentrics/passwords_demo_ file.txtt -facebook.com http-get-form "login.php?login_attempt=1:username =^EMAIL^&TOKEN=^PASSWORD^&login=Login:incorrect"

Składnia polecenia może się robić coraz bardziej skomplikowana i może się zmieniać w zależności od badanej witryny (a czasami nawet w ramach danej witryny). Z tego powodu przed przystąpieniem do przeprowadzania testów penetracyjnych powinieneś poćwiczyć pracę z tym skanerem i wtyczką Tamper Data w kontrolowanych warunkach laboratoryjnych, aby poznać możliwości tych narzędzi i nabrać wprawy w ich używaniu.

DirBuster DirBuster to skaner aplikacji internetowych, pozwalający na „siłowe” wykrywanie na serwerach WWW folderów i plików, które nie są normalnie dostępne. Bardzo często zdarza się, że serwery WWW wyglądają tak jak w domyślnych ustawieniach po instalacji, podczas gdy w rzeczywistości posiadają szereg aplikacji i stron internetowych, ukrytych gdzieś głęboko w normalnie niedostępnych plikach i folderach. DirBuster to narzędzie pozwalające na znajdowanie właśnie takich ukrytych skarbów. Aby uruchomić program DirBuster w systemie Kali Linux, powinieneś w menu głównym przejść do grupy Kali Linux, a następnie wybrać polecenie Web Applications/Web Crawlers/dirbuster. Na ekranie pojawi się okno programu, w którym przed rozpoczęciem ataku musisz w odpowiednich polach wpisać trochę niezbędnych informacji. Jako absolutne minimum musisz podać adres URL serwera będącego celem ataku, wybrać liczbę wątków skanowania (sugerujemy wybranie liczby nie większej niż 100) oraz podać listę plików. W tym ostatnim przypadku możesz kliknąć przycisk Browse i wybrać listę domyślną lub wskazać własną. Po podaniu podstawowych informacji możesz kliknąć przycisk Start — program DirBuster rozpocznie skanowanie serwera docelowego i wyszukiwanie luk w jego zabezpieczeniach. W większości przypadków wyświetli się zaraz komunikat, że proces skanowania zajmie co najmniej kilka najbliższych dni. W praktyce jednak już po kilkunastu minutach znajdziesz dużo interesujących informacji. Na rysunku zamieszczonym poniżej pokazano, że program DirBuster wykrył folder o nazwie /cgi-bin/, którego zawartość może być bardzo interesująca (zobacz rysunek na następnej stronie pod ramką). 128

Rozdział 3. • Ataki na serwery aplikacji internetowych

Pamiętaj, że niektóre dystrybucje systemu Kali Linux mogą nie posiadać preinstalowanego, domyślnego zestawu słowników. W takiej sytuacji możesz pobrać słowniki z internetu i następnie wskazać ich lokalizację programowi DirBuster, jak przedstawiono na rysunku poniżej:

129

Kali Linux. Testy penetracyjne

Każdy folder, dla którego nadeszła odpowiedź inna niż 404, może być przedmiotem dalszej eksploracji. Aby skoncentrować się na znalezionym wcześniej folderze /cgi-bin/, zatrzymaj teraz skan, klikając przycisk Stop, a następnie kliknij przycisk Back. Teraz w głównym oknie programu odszukaj pole Dir to start with, które znajduje się nieco powyżej przycisku Start, wpisz w nim nazwę folderu, od którego chcesz ponownie rozpocząć poszukiwania, i ponownie kliknij przycisk Start.

Najprawdopodobniej w wyniku takiej operacji znajdziesz kolejny zestaw folderów, którym będziesz chciał się przyjrzeć. Aby to zrobić, powtarzaj zatrzymywanie całego procesu, aktualizację nazwy folderu startowego i ponowne uruchamianie skanowania tak długo, aż uzyskasz satysfakcjonujący Cię obraz struktury atakowanej witryny internetowej. Na rysunku poniżej przedstawiono przykładowe wyniki mapowania folderu cgi-bin:

Po zakończeniu skanowania możesz automatycznie wygenerować raport. Aby to zrobić, kliknij przycisk Report, następnie wybierz folder, w którym raport zostanie zapisany, i kliknij przycisk Generate Report. Raport zostanie zapisany w pliku tekstowym i wyświetlony na ekranie.

130

Rozdział 3. • Ataki na serwery aplikacji internetowych

WebSlayer

WebSlayer to skaner aplikacji internetowych pozwalający na siłowe atakowanie żądań Form (nazwa konta użytkownika i hasło dostępu) oraz parametrów metod GET i POST. WebSlayer pozwala również na wykrywanie zasobów, które nie są podłączone do aplikacji internetowej, takich jak skrypty, pliki, katalogi itd. Program WebSlayer posiada własny generator ładunków i analizator wyników działania. Na karcie Attack Setup znajduje się pole o nazwie Url, w którym musisz wpisać adres URL aplikacji internetowej. Poniżej znajdują się pola o nazwach Header oraz POST, w których możesz wprowadzić odpowiednie dane. Jeszcze niżej znajdziesz listę rozwijaną Payload type, za pomocą której możesz wybrać jeden z trzech typów ładunku: Dictionary, Range lub Payload. Opcja Dictionary pozwala na wybranie pliku zawierającego Twój własny słownik lub jeden ze słowników

131

Kali Linux. Testy penetracyjne

domyślnych. Opcja Range umożliwia zdefiniowanie zakresu ataku, a opcja Payload daje możliwość zaimportowania ładunku z generatora (karta Payload Generator). Poniżej znajdziesz rysunek przedstawiający okno programu WebSlayer skonfigurowanego do skanowania witryny www.thesecurityblogger.com.

Generator ładunków to narzędzie, za pomocą którego możesz utworzyć swoje własne ładunki, takie jak słowniki, zakresy wartości liczbowych, bloki znaków, permutacje, numery kart kredytowych, nazwy kont użytkowników i inne. Poszczególne elementy mogą być ze sobą łączone i razem tworzyć finalną wersję ładunku, który następnie może zostać zaimportowany na kartę Attack Setup i wykorzystany do przeprowadzenia starannie przygotowanego ataku. Na kolejnym rysunku możesz zobaczyć przykład definiowania ładunku w postaci zbioru wartości liczbowych z zakresu od 0 do 1000. Po zdefiniowaniu zakresu kliknij przycisk Add Generator, co spowoduje utworzenie ładunku roboczego w polu Temporal Generators. Teraz przeciągnij nowo utworzony ładunek roboczy na pole Pattern, znajdujące się na karcie Payload Creator, i kliknij przycisk Generate PAYLOAD. Po zakończeniu będziesz mógł zaimportować nowy ładunek na kartę Attack Setup (zobacz pierwszy rysunek na następnej stronie). Po zaimportowaniu wybranego ładunku i umieszczeniu go w scenariuszu przygotowywanego ataku musisz wybrać miejsce, w którym WebSlayer będzie próbował wstrzyknąć ładunek. Aby to zrobić, powinieneś w wybranym miejscu adresu URL celu umieścić słowo kluczowe FUZZ.

132

Rozdział 3. • Ataki na serwery aplikacji internetowych

Przykład został przedstawiony na kolejnym rysunku, gdzie słowo kluczowe FUZZ w adresie witryny www.thesecurityblogger.com zostało użyte do przeprowadzenia ataków przy wykorzystaniu dwóch ładunków (słowników).

133

Kali Linux. Testy penetracyjne

Za pomocą programu WebSlayer możesz przeprowadzić atak na dowolny fragment żądania HTTP, takiego jak nagłówek i uwierzytelnianie. Jeżeli chcesz użyć programu WebSlayer do siłowego złamania hasła dostępu do serwera aplikacji internetowych, powinieneś znać nazwę konta użytkownika — w przeciwnym wypadku WebSlayer najprawdopodobniej nie odegra swojej roli. Aby to osiągnąć, musisz przechwytywać odpowiednie żądania HTTP i próby logowania, aby pozyskać z nich dane niezbędne do przeprowadzenia ataku.

Dla przeglądarki Firefox istnieje wtyczka o nazwie Live HTTP Headers, za pomocą której możesz zebrać potrzebne informacje podczas logowania się do serwera. Na następnym przykładzie pokazano przechwytywanie pakietów z nagłówkami HTTP podczas logowania się do serwera usługi Myspace użytkownika o nazwie joeymuniz, który użył do logowania nieprawidłowego hasła.

W naszym przykładzie wtyczka Live HTTP Headers pozwoliła na przechwycenie dwóch ważnych informacji, User-Agent oraz Login Credentials (zobacz dwa kolejne rysunki), które następnie mogą zostać wykorzystane przez skaner WebSlayer.

134

Rozdział 3. • Ataki na serwery aplikacji internetowych

Informacje o przeglądarce, z której korzysta użytkownik (pole User-Agent), powinny zostać umieszczone w sekcji Headers karty Attack Setup, natomiast dane użytkownika (Login Credentials) powinny się znaleźć w sekcji POST Data. W polu Url powinieneś wpisać adres URL strony logowania do aplikacji internetowej. Następnie z listy rozwijanej Authentication musisz wybrać metodę uwierzytelniania i nazwę konta użytkownika. Na kolejnym rysunku pokazano sposób wykorzystania informacji przechwyconych przez wtyczkę Live HTTP Headers do skonfigurowania skanera WebSlayer. Zwróć uwagę, że błędne hasło w polu POST Data zostało zastąpione słowem kluczowym FUZZ, dzięki czemu WebSlayer będzie „wiedział”, którą część żądania należy poddać atakowi siłowemu. Z listy rozwijanej Authentication wybrana została opcja basic, a w polu obok została wpisana nazwa konta użytkownika (joeymuniz), po której następuje znak dwukropka i słowo kluczowe FUZZ.

135

Kali Linux. Testy penetracyjne

Podsumowując, aby odpowiednio przygotować atak, musisz znać adres witryny internetowej, rodzaj przeglądarki (User-Agent), dane logowania oraz nazwę konta użytkownika. W miejscu, w którym powinno się znajdować hasło dostępu, umieszczasz słowo kluczowe FUZZ, a następnie wybierasz słownik haseł, który zostanie użyty podczas ataku. Jak widać, jest to stosunkowo prosty sposób przeprowadzenia ataku typu brute-force na serwer aplikacji internetowych. W rzeczywistości usługa Myspace wykorzystuje znacznie lepsze metody uwierzytelniania użytkowników niż te, które zostały przedstawione w naszym przykładzie.

Serwery aplikacji internetowych, w których zostały zaimplementowane dodatkowe mechanizmy zabezpieczające, jak na przykład automatyczne, czasowe blokowanie konta użytkownika po wykryciu kilku kolejnych prób zalogowania się zakończonych niepowodzeniem, będą najprawdopodobniej całkowicie niewrażliwe na taki rodzaj ataku. Co więcej, zaawansowane mechanizmy obronne, takie jak systemy IPS/IDS zainstalowane w środowisku celu, z pewnością szybko wykryją próbę takiego ataku na monitorowane zasoby. Z tego powodu, jeżeli planujesz wykorzystanie skanera WebSlayer bez przeprowadzenia wyjątkowo starannego rekonesansu, powinieneś zachować szczególną ostrożność. Program WebSlayer pozwala na wyeksportowanie zdefiniowanych ładunków oraz wyników skanowania do plików tekstowych lub plików HTML. Istnieje również możliwość przechwycenia zawartości dziennika programu i skopiowania go do pliku tekstowego.

136

Rozdział 3. • Ataki na serwery aplikacji internetowych

Łamanie haseł Hasła to obecnie najczęściej spotykana metoda uwierzytelniania użytkowników. Powszechnie wiadomo, że hakerzy po uzyskaniu dostępu do pierwszego systemu w atakowanym środowisku dokonują prób wyszukiwania, przechwytywania czy łamania haseł dających dostęp do innych systemów. W rozdziale 4., „Ataki na klienty aplikacji internetowych”, znajdziesz osobny podrozdział dotyczący zagadnień związanych z łamaniem haseł przy użyciu narzędzi dostępnych w systemie Kali Linux, natomiast teraz przyjrzymy się tylko jednemu z najpopularniejszych narzędzi służących do tego celu.

John the Ripper John the Ripper to obecnie zdecydowanie najpopularniejsze i najczęściej używane narzędzie przeznaczone do łamania haseł. Program ten posiada kilka silników pozwalających na łamanie różnego typu haseł, włącznie z hasłami szyfrowanymi (ang. encrypted passwords) i haszowanymi (ang. hashed passwords). John the Ripper potrafi automatycznie wykrywać hasła szyfrowane i haszowane, co jest znakomitym ułatwieniem dla pentesterów. Potencjalni napastnicy i inne czarne charaktery również bardzo lubią ten program, ponieważ posiada wiele opcji konfiguracyjnych, pozwalających na przyspieszanie procesu łamania haseł, i można go w łatwy sposób dostosować do własnych potrzeb. Proces łamania haseł za pomocą programu John the Ripper odbywa się zazwyczaj w następujący sposób:  Próba złamania hasła za pomocą ataku słownikowego.  Modyfikacja ataku słownikowego poprzez dodawanie do kolejnych wyrazów przedrostków i przyrostków alfanumerycznych.  Modyfikacja ataku słownikowego poprzez łączenie ze sobą poszczególnych wyrazów.  Zastosowanie znaków alfanumerycznych do łączenia wyrazów.

137

Kali Linux. Testy penetracyjne

 Atak wykorzystujący wyrazy ze słowników wymieszane ze znakami specjalnymi.  Jeżeli żaden z powyższych ataków nie zakończy się powodzeniem, przechodzimy

do ataku metodą brute-force. Dobrą praktyką jest częsta aktualizacja domyślnego słownika. Z naszych testów wynika, że domyślna lista wyrazów składa się zaledwie z 3115 pozycji, co z całą pewnością nie daje żadnej gwarancji złamania nawet popularnych i często używanych haseł. Na szczęście bez żadnych trudności można znaleźć dodatkowe, znacznie obszerniejsze słowniki za pomocą wyszukiwarki Google. Aby sprawdzić liczbę wyrazów w nowym słowniku, powinieneś po zakończeniu pobierania otworzyć okno terminalu i wykonać polecenie wc -1 NAZWA_PLIKU, gdzie NAZWA_PLIKU to oczywiście nazwa pobranego pliku słownika. Kiedy pobierasz z internetu i łączysz ze sobą różne słowniki, bardzo często zdarza się, że zawierają one duplikujące się hasła (czasami wielokrotnie). W takiej sytuacji zdecydowanie zalecamy usuwanie powtarzających się haseł, jak również haseł zapisanych wielkimi literami, które mają już swoje odpowiedniki zapisane małymi literami (John the Ripper automatycznie sprawdza oba warianty haseł). Poniżej przedstawiamy przykład polecenia, które możesz wykorzystać do usunięcia wyrazów zapisanych wielkimi literami. tr A-Z a-z < CustomWordFile > AllLowerCaseFile

Za pomocą kolejnego polecenia możesz usunąć ze słownika powtarzające się wyrazy. sort -u AllLowerCaseFile > NoDuplicatesOrUpperCase

Teraz powinieneś sprawdzić nową liczbę wyrazów w słowniku. Aby to zrobić, wykonaj następujące polecenie: wc -1 NoDuplicatesOrUpperCase

Aby w systemie Kali Linux uruchomić program John the Ripper, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Offline Attack/John. Na ekranie pojawi się okno terminalu. Johnny to wersja programu John the Ripper wyposażona w graficzny interfejs użytkownika. Więcej szczegółowych informacji na temat programu Johnny znajdziesz w rozdziale 4., „Ataki na klienty aplikacji internetowych”.

Jeżeli chcesz sprawdzić szybkość działania programu John the Ripper, możesz w oknie terminalu wykonać polecenie john -test. Aby jako słownika domyślnego użyć własnego pliku słownika, takiego jak plik NoDuplicatesOrUpperCase z poprzedniego przykładu, musisz w konfiguracji programu zmienić wpis reprezentujący domyślną listę haseł. Przejdź do domyślnego folderu programu John the Ripper, znajdź plik john.conf, otwórz go w swoim ulubionym edytorze tekstu i poszukaj opcji Wordlist, która wskazuje na domyślny słownik o nazwie passwords.lst.

138

Rozdział 3. • Ataki na serwery aplikacji internetowych

Zmień nazwę domyślnego pliku słownika (passwords.lst) na nazwę nowego, własnego pliku. Jeżeli chcesz trzymać się naszego przykładu, po dokonaniu zmian wiersz powinien wyglądać następująco: Wordlist = NoDuplicatesOrUpperCase.lst. Nowy plik słownika musi znajdować się w tym samym katalogu co plik konfiguracyjny john.conf. Domyślnie oba pliki znajdują się w katalogu $JOHN. Jeżeli chcesz użyć programu John the Ripper do łamania pliku haseł, musisz najpierw w katalogu John utworzyć kopię tego pliku. Możesz to zrobić za pomocą polecenia cp. Jeżeli na przykład chcesz utworzyć kopię pliku shadow (dodatkowy plik przechowujący hasła, powszechnie spotykany w systemach Linux), powinieneś wykonać polecenie cp /etc/shadow. Kiedy plik haseł znajdzie się już w tym samym katalogu co program John the Ripper, wpisz polecenie john i nazwę pliku haseł. Inaczej mówiąc, jeżeli chcesz użyć programu John the Ripper do łamania haseł zapisanych w pliku shadow, powinieneś wykonać polecenie john shadow. Postępy w działaniu programu możesz zobaczyć po naciśnięciu klawisza Enter, co spowoduje wyświetlenie w oknie terminalu aktualnie sprawdzanego hasła oraz informacji o liczbie haseł sprawdzanych w ciągu każdej sekundy (ang. c/s — cracks per second). W razie potrzeby możesz wstrzymać działanie programu. Aby to zrobić, powinieneś użyć kombinacji klawiszy Ctrl+C. Jeżeli później ponownie wydasz polecenie john nazwa_pliku, to działanie programu zostanie wznowione w miejscu, w którym zostało wstrzymane. Aby zobaczyć rezultaty po zakończeniu działania programu, powinieneś wykonać polecenie john -show nazwa_pliku. Jeżeli na przykład chcesz zobaczyć wyniki działania programu John the Ripper dla pliku haseł shadow, powinieneś wykonać polecenie john -show shadow. Więcej szczegółowych informacji na temat programu John the Ripper znajdziesz na stronie http://www.openwall.com/john/.

Ataki typu man-in-the-middle Zgodnie ze standardową definicją ataki typu man-in-the-middle (ang. — „człowiek pośrodku”) to forma aktywnego podsłuchiwania wiadomości przesyłanych między dwiema stronami bez ich wiedzy i zgody. Najczęściej spotykaną formą takiego ataku jest pośredniczenie w przekazywaniu ruchu sieciowego pomiędzy dwoma systemami. Nie tak dawno temu odkryta została luka w zabezpieczeniach serwerów aplikacji internetowych, która pozwalała napastnikowi pośrodku (man-in-the-middle) na zamianę wywołań bezpiecznego protokołu HTTPS, przesyłanych przez klienta, na wywołania HTTP, co pozwalało na podsłuchiwanie ruchu sieciowego użytkowników łączących się z serwerami za pomocą połączeń szyfrowanych. W kolejnym podrozdziale przyjrzymy się temu nieco bliżej. W dalszej części naszej książki przedstawimy również inne przykłady tego typu ataków. 139

Kali Linux. Testy penetracyjne

SSLStrip W roku 2009 Moxie Marlinspike na konferencji DefCon pokazało swoje najnowsze dzieło, program SSLStrip. Moxie Marlinspike przedstawiło koncepcję ataku SSL stripping, czyli odmianę ataku man-in-the-middle, polegającą na przechwytywaniu wywołań szyfrowanego protokołu HTTPS, przesyłanych przez klienta, i zamianie ich na wywołania HTTP, które w łatwy sposób mogły być modyfikowane. Program SSLStrip automatyzuje cały proces ataku i pozwala na łatwe przechwytywanie ruchu kierowanego do bezpiecznego serwera internetowego. Odpowiedzią środowiska komputerowego na taki rodzaj ataku było opracowanie mechanizmu HSTS (ang. HTTP Strict Transport Security), aczkolwiek wdrażanie tego, skądinąd skutecznego, mechanizmu idzie bardzo powoli i dlatego ataki typu SSL stripping nadal mają się dobrze i są często spotykane. Na potrzeby tego podrozdziału ograniczymy omawiane przykłady do wykorzystania tylko jednego interfejsu sieciowego, chociaż Twój komputer (lub Twoja maszyna wirtualna) może posiadać wiele takich interfejsów. Dla pewności będziemy musieli sprawdzić, czy w systemie są włączone dodatkowe, wirtualne interfejsy Ethernet. W lewym górnym rogu pulpitu systemu Kali Linux znajdziesz przycisk uruchamiający okno terminalu. Po otwarciu okna wpisz polecenie ifconfig, aby przekonać się, jakie interfejsy sieciowe są skonfigurowane w Twoim systemie. Najlepszym rozwiązaniem będzie użycie polecenia ifconfig | greg "eth", które spowoduje „odfiltrowanie” informacji o wszystkich innych interfejsach sieciowych poza interfejsami Ethernet, jak pokazano na rysunku poniżej:

Jeżeli posiadasz wiele aktywnych interfejsów sieciowych, wyłącz dodatkowe interfejsy za pomocą polecenia ifdown, po którym następuje nazwa interfejsu. Jeżeli w systemie istnieją interfejsy na przykład o nazwach eth0 i eth1, to aby wyłączyć interfejs eth0, powinieneś wykonać polecenie ifdown eth0.

140

Rozdział 3. • Ataki na serwery aplikacji internetowych

Aby przeprowadzić atak SSL stripping, będą Ci potrzebne dwie informacje. Po pierwsze, musisz znać adres IP hosta będącego celem ataku. Po drugie, musisz znać adres IP routera odgrywającego rolę domyślnej bramy sieciowej dla całej podsieci. Ponieważ taki atak jest efektywny tylko z poziomu tego samego segmentu warstwy 2., w którym znajduje się cel ataku, musimy ustawić naszą własną bramę domyślną. Aby to zrobić, musimy po raz kolejny skorzystać z okna terminalu. Przejdź do okna terminalu i wpisz następujące polecenie: route -n

Jeżeli chcesz wyświetlić informację tylko o bramie domyślnej, możesz skorzystać z filtrującej wersji tego polecenia: route -n | grep 'UG' | awk '{print $2}'

Rozpoczęcie ataku — przekierowanie Zanim rozpoczniesz pozyskiwanie z przechwyconych sesji SSL takich informacji jak dane uwierzytelniające użytkowników, musisz wykonać kilka dodatkowych zadań. Przede wszystkim musisz uruchomić proces, który pozwoli Ci na przekierowanie ruchu sieciowego do Twojego komputera, gdzie zostaną przechwycone dane, odpowiednio zmodyfikowane przez SSLStrip; następnie zostaną one przekazane dalej. Aby to zrobić, będziesz musiał włączyć przekazywanie pakietów IP (ang. IP Forwarding) przy użyciu polecenia iptables oraz wykorzystać narzędzie arpspoof do rozsyłania odpowiednio spreparowanych pakietów ARP zawierających fałszywe adresy MAC. W kolejnych trzech punktach wyjaśnimy, jak skonfigurować przekazywanie pakietów IP (ang. IP Forwarding), włączyć rozsyłanie spreparowanych pakietów ARP (ang. ARP Spoofing) oraz skonfigurować odpowiednie przekierowanie portów komunikacyjnych. Wszystkie niezbędne 141

Kali Linux. Testy penetracyjne

polecenia będą uruchamiane z poziomu okna terminalu. Włączenie przekazywania pakietów IP możesz zrealizować w następujący sposób: echo 1 > /proc/sys/net/ipv4/ip_forward

Na potrzeby naszego przykładu założymy, że znamy adresy IP zarówno ofiary, jak i docelowego serwera internetowego, co pozwoli nam na uniknięcie przeciążenia sieci środowiska celu rozsyłanymi do wszystkich hostów spreparowanymi pakietami ARP (ang. ARP address flooding). W przypadku rzeczywistego scenariusza ataku najlepszym rozwiązaniem byłoby zapewne wykorzystanie polecenia arpspoof na całym segmencie drugiej warstwy sieci środowiska celu (to domyślny sposób postępowania, kiedy nie znamy adresu IP ofiary) i (lub) użycie narzędzi pozwalających na nasłuchiwanie i przechwytywanie pakietów do przeprowadzenia analizy ruchu sieciowego pozwalającej na określenie adresu IP ofiary. Taka operacja, przeprowadzona w środowisku sieciowym z dużą liczbą aktywnych hostów, doprowadziłaby do przeciążenia i zakłócenia normalnego ruchu sieciowego, co z pewnością nie pozostałoby niezauważone i radykalnie zmniejszyłoby szansę napastnika na uniknięcie wykrycia. Nasze polecenie wygląda następująco: arpspoof -i eth0 -t victimip default_gateway_ip

Nie powinieneś uruchamiać takiego polecenia do pracy w tle — po prostu uruchom je do pracy jako zadanie pierwszoplanowe i pozostaw otwarte okno terminalu. Jeżeli będziesz chciał kontynuować pracę z konsolą, otwórz kolejne okno terminalu.

Konfigurowanie przekierowania portów za pomocą iptables Odpowiednie przekierowanie portów komunikacyjnych pozwoli Ci na przechwytywanie ruchu sieciowego wysyłanego do serwera WWW na porcie TCP/80 i przekierowanie tego ruchu do portu, na którym będzie nasłuchiwał pakiet SSLStrip. W naszym przypadku użyjemy do tego celu portu TCP/10000. Oczywiście w razie potrzeby możesz użyć praktycznie dowolnego innego portu. Pamiętaj, że port, do którego przekierowujesz przechwycony ruch sieciowy, musi być również skonfigurowany w pakiecie SSLStrip jako port nasłuchujący (ang. listener port). Aby wykonać zadanie, powinieneś użyć następującego polecenia: iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --toports 10000

142

Rozdział 3. • Ataki na serwery aplikacji internetowych

Aby wyłączyć regułę PREROUTING, powinieneś w wywołaniu polecenia zamienić opcję -A na opcję -D, co spowoduje usunięcie tej reguły z tabeli. iptables -t nat -F #usuwa listę reguł iptables -t nat -L #wyświetla listę reguł Polecenie iptables ma wiele opcji. Więcej szczegółowych informacji na temat tego polecenia znajdziesz na stronach podręcznika man, które możesz wyświetlić z wykorzystaniem polecenia man iptables.

Teraz wszystko powinno być już gotowe i możesz rozpocząć przechwytywanie ruchu przy użyciu pakietu SSLStrip. Otwórz nowe okno terminalu i uruchom polecenie sslstrip. Aby skonfigurować pakiet SSLStrip do nasłuchiwania ruchu sieciowego na porcie TCP/10000, powinieneś wykonać następujące polecenie: sslstrip -l 10000

Teraz przejdź na komputer, który udaje ofiarę Twojego ataku, uruchom przeglądarkę, przejdź na stronę swojej poczty elektronicznej (na przykład https://www.hotmail.com) i się zaloguj.

143

Kali Linux. Testy penetracyjne

Otwórz kolejne okno terminalu, przejdź do katalogu SSLStrip i wykonaj następujące polecenie:

Na ekranie powinieneś zobaczyć wyniki swojego ataku przeprowadzonego za pomocą pakietu SSLStrip. Z oczywistych powodów nazwa konta użytkownika i hasło dostępu zostały na rysunku zamaskowane, ale w Twoim przypadku będą wyświetlone na ekranie jako normalny tekst.

144

Rozdział 3. • Ataki na serwery aplikacji internetowych

Podsumowanie W tym rozdziale przedstawiliśmy różne metody łamania zabezpieczeń i uzyskiwania dostępu do podatnych na ataki serwerów aplikacji internetowych przy użyciu narzędzi dostępnych w systemie Kali Linux. Najczęściej stosowana praktyka polega na wyszukiwaniu podatności i luk w zabezpieczeniach przy użyciu zautomatyzowanych narzędzi skanujących, a później na dokonywaniu prób wykorzystania najbardziej obiecujących luk w zabezpieczeniach do uzyskania dostępu do atakowanego systemu. Na początku tego rozdziału omówiliśmy narzędzia pozwalające na wyszukiwanie luk w zabezpieczeniach serwerów aplikacji internetowych. Następnie przedstawiliśmy narzędzia umożliwiające wykorzystanie zidentyfikowanych podatności do uzyskania dostępu do serwerów aplikacji internetowych oraz serwerów poczty elektronicznej. Kolejnym zagadnieniem omawianym w tym rozdziale były narzędzia pozwalające na przeprowadzanie ataków typu brute-force na systemy, które okazały się odporne na inne rodzaje ataków. Przy tej okazji poruszyliśmy również tematy związane z łamaniem haseł oraz atakami typu man-in-the-middle, aczkolwiek w kolejnych rozdziałach jeszcze wielokrotnie będziemy powracać do tych zagadnień. W następnym rozdziale skoncentrujemy się na wyszukiwaniu i wykorzystywaniu luk w zabezpieczeniach systemów, które odgrywają rolę klientów aplikacji internetowych.

145

Kali Linux. Testy penetracyjne

146

4 Ataki na klienty aplikacji internetowych Termin klient oznacza urządzenie końcowe wykorzystywane do łączenia się z siecią, takie jak komputer, tablet czy urządzenie mobilne. Klienty mogą zarówno oferować informacje, usługi i aplikacje innym klientom, jak i pobierać informacje z innych systemów, takich jak serwery. Zazwyczaj termin klient odnosi się do urządzeń końcowych obsługiwanych przez użytkowników, a ponieważ w takiej sytuacji w grę wchodzi tzw. czynnik ludzki, to potencjalny zakres elementów podatnych na ataki jest bardzo szeroki. Ataki na klienty w kontekście aplikacji internetowych są postrzegane jako metody pozwalające na identyfikację użytkowników połączonych z daną aplikacją, wyszukiwanie luk w zabezpieczeniach systemów odgrywających rolę klientów i sprawdzanie, czy takich słabości w zabezpieczeniach klientów nie można wykorzystać do uzyskania nieautoryzowanego dostępu i pobierania danych z aplikacji internetowych. W tym rozdziale skoncentrujemy się na identyfikacji systemów używających aplikacji internetowych, wyszukiwaniu słabych stron ich zabezpieczeń oraz wykorzystywaniu znalezionych luk w zabezpieczeniach (o ile okaże się, że jest to możliwe). Bardzo dużo uwagi poświęcimy zagadnieniom związanym z łamaniem haseł dostępu, które jak już wielokrotnie wspominaliśmy, są obecnie najbardziej rozpowszechnionym mechanizmem uwierzytelniania użytkowników i zabezpieczania klientów. Nasze rozważania rozpoczniemy od omówienia ataków na klienty (a w zasadzie na ich użytkowników) z wykorzystaniem metod socjologicznych. Następnie przedstawimy metody wyszukiwania słabych stron zabezpieczeń klientów oraz sposoby wykorzystywania znalezionych podatności przy użyciu narzędzi zaimplementowanych w systemie Kali Linux i nie tylko. Rozdział zakończymy omówieniem zagadnień związanych z łamaniem haseł pozwalających na uzyskanie dostępu do atakowanego systemu.

Kali Linux. Testy penetracyjne

Inżynieria społeczna W całym złożonym łańcuchu zabezpieczeń systemów komputerowych to zwykle człowiek był, jest i będzie najsłabszym ogniwem. Człowiek ma przekorną naturę. Zazwyczaj dzieje się tak, że im bardziej usiłujesz kontrolować poczynania użytkowników, tym bardziej próbują oni znaleźć sposób na ominięcie narzuconych im reguł polityki bezpieczeństwa. Z drugiej strony im mniej środków kontroli użytkowników zostanie wdrożonych w danym środowisku, tym jeszcze mniejsza staje się szansa na to, że będą oni przestrzegać jakichkolwiek reguł polityki bezpieczeństwa. Taka sytuacja staje się obosieczną bronią w sytuacji, kiedy musisz podjąć decyzję dotyczącą tego, jakie mechanizmy zabezpieczeń powinieneś wdrożyć w celu ochrony użytkowników przed zagrożeniami płynącymi ze współczesnego cyberświata. Hakerzy doskonale zdają sobie z tego sprawę i dokładają wszelkich starań, aby w bezwzględny sposób wykorzystać jedną kluczową cechę charakteru każdego przeciętnego użytkownika — zaufanie. W kontekście bezpieczeństwa teleinformatycznego inżynieria społeczna (ang. social engineering) to sztuka manipulowania ludźmi tak, aby z pozornie własnej woli postępowali w sposób pozwalający napastnikowi na pozyskiwanie niejawnych informacji. Bardzo wiele ataków na systemy odgrywające rolę klientów polega na przekonaniu użytkownika do mniej lub bardziej świadomego wykonania takich akcji, które wystawiają jego system na atak. Metody socjologiczne stosowane przez hakerów są bardzo zróżnicowane, od prostej rozmowy telefonicznej z użytkownikiem, w której napastnik, podając się za pracownika firmy (np. z działu pomocy technicznej), usiłuje przekonać użytkownika do ujawnienia określonych informacji, aż do zamieszczania na popularnych serwisach społecznościowych łączy prowadzących do specjalnie przygotowanych aplikacji internetowych, które udostępniają atrakcyjne dla użytkownika treści, ale są tak naprawdę wyrafinowanymi narzędziami pozwalającymi na przełamanie zabezpieczeń i uzyskanie dostępu do klientów odwiedzających te serwisy. Dobre praktyki pozwalające na przeprowadzenie skutecznego ataku socjotechnicznego nakazują przed jego rozpoczęciem starannie rozpoznać i zrozumieć środowisko celu, a przede wszystkim dowiedzieć się, jak użytkownicy komunikują się między sobą i jak można się „wtopić” w takie środowisko. W zdecydowanej większości przypadków ataki socjotechniczne, które zakończyły się niepowodzeniem, były po prostu źle przygotowane, korzystały ze zbyt ogólnych wzorców lub nie było w nich odpowiednio atrakcyjnej przynęty dla użytkownika. Przykładami takich często spotykanych ataków są rozsyłane za pośrednictwem poczty elektronicznej wiadomości, napisane łamaną polszczyzną i radośnie komunikujące, że wygrałeś „dużo pieniądze”, które otrzymasz natychmiast po wysłaniu swoich danych osobowych, numeru konta i opłaceniu stosunkowo niewielkich „kosztów przelewu”. Wykorzystanie mediów społecznościowych, takich jak Facebook, to świetny sposób na zebranie wiadomości na temat użytkownika będącego celem naszego ataku, takich jak jego hobby, ostatnie podróże, zainteresowania, znajomi bądź ścieżka edukacyjna. Gdy zobaczysz, że użytkownik będący celem Twojego ataku jest na przykład zapalonym kibicem sportowym, to do przygotowania ataku socjotechnicznego możesz wykorzystać zagadnienia związane z rabatami na zakup biletów wstępu na rozgrywki itp.

148

Rozdział 4. • Ataki na klienty aplikacji internetowych

Ponieważ większość ataków na klienty w taki czy inny sposób wykorzystuje metody inżynierii społecznej, w kolejnym podrozdziale przyjrzymy się najciekawszym narzędziom wspomagającym przeprowadzanie ataków socjotechnicznych, jakie możesz znaleźć w arsenale systemu Kali Linux.

Pakiet SET — Social Engineer Toolkit Pakiet SET (ang. Social Engineer Toolkit) został wymyślony i napisany przez jednego z założycieli firmy TrustedSec. Jest to napisany w języku Perl program typu open source, będący zbiorem narzędzi przeznaczonych do przeprowadzania socjotechnicznych testów penetracyjnych. SET jest bardzo popularnym narzędziem wśród specjalistów z zakresu bezpieczeństwa teleinformatycznego (i nie tylko), którzy zajmują się sprawdzaniem odporności danej organizacji na tego typu ataki. Z kolei hakerzy i inne „czarne charaktery” wykorzystują pakiet SET do przygotowywania wyrafinowanych, precyzyjnie zaplanowanych i starannie wymierzonych ataków socjotechnicznych. Pakiet SET to jeden z najczęściej wykorzystywanych w tej dziedzinie pakietów oprogramowania. Aby w systemie Kali Linux uruchomić pakiet SET, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Exploitation Tools/Social Engineering Tools/se-toolkit. Kiedy uruchomisz pakiet SET po raz pierwszy, program rozpocznie pobieranie aktualizacji z serwisu GitHub i będziesz miał możliwość włączenia automatycznego pobierania aktualizacji. Aby to zrobić, wybierz opcję yes.

149

Kali Linux. Testy penetracyjne

Pakiet SET poprosi, abyś się upewnił, że polecenie git jest zainstalowane. W systemie Kali Linux polecenie to jest co prawda preinstalowane, ale najbardziej rekomendowanym rozwiązaniem jest przeprowadzenie aktualizacji systemu Kali Linux zgodnie z procedurą opisaną w rozdziale 1., „Przygotowania”. Aktualizacja spowoduje, że w systemie Kali Linux na pewno pojawi się wersja polecenia git wymagana do poprawnej pracy pakietu SET. System Kali Linux w wersji 1.0 nie posiada katalogu .git. Aby pobrać aktualizację pakietu SET, powinieneś wykonać polecenia przedstawione poniżej: 1. Otwórz okno terminalu i wykonaj polecenie cd /usr/share. 2. Wykonaj kopię starego katalogu set. Aby to zrobić, wpisz polecenie mv set backup.set. 3. Ponownie pobierz pakiet SET z serwisu GitHub. Aby to zrobić, wykonaj następujące polecenie: git clone https://github.com/trustedsec/social-engineer-toolkit/set/

4. Odzyskaj oryginalny plik konfiguracyjny z poprzedniej wersji pakietu SET, dzięki czemu unikniesz konieczności ponownego ustawiania ścieżek do pakietu Metasploit Framework. Aby to zrobić, wykonaj polecenie przedstawione poniżej: cp backup.set/config/set_config set/config/set_config

5. Sprawdź, czy nowa wersja pakietu SET działa poprawnie. Aby to zrobić, w oknie terminalu wpisz po prostu polecenie se-toolkit.

150

Rozdział 4. • Ataki na klienty aplikacji internetowych

Zastosowanie pakietu SET do ataku z klonowaniem Teraz, kiedy już poznałeś przeznaczenie pakietu SET, pokażemy, w jaki sposób możesz uzyskać dostęp do komputera użytkownika za pomocą witryny internetowej, która jest dla niego witryną zaufaną. Choć do przeprowadzenia takiego ataku możesz użyć w zasadzie dowolnej witryny, to jednak zdecydowanie zalecamy użycie czegoś relatywnie prostego. Poniżej przedstawiamy przykład klonowania korporacyjnej strony usługi SharePoint w celu uzyskania dostępu do komputera ofiary poprzez załadowanie meterpretera (jeden z wyrafinowanych ładunków pakietu Metasploit Framework). W praktyce może to być oczywiście dowolna inna witryna internetowa, której zabezpieczenia chcesz przełamać. W naszym przypadku wybraliśmy witrynę usługi SharePoint, ponieważ jako pentester będziesz z pewnością chciał użyć takiej witryny, która pozwoli Ci osiągnąć zamierzony cel. Oczywiście zdeterminowany napastnik może sklonować dowolną, publicznie dostępną witrynę i użyć jej do swoich niecnych celów.

Kolejnym krokiem jest uruchomienie programu SET. Aby to zrobić, w menu głównym systemu przejdź do grupy Kali Linux, a następnie wybierz polecenie Exploitation Tools/Social Engineering Toolkit/se-toolkit. Gdy zaakceptujesz wszystkie licencje użytkownika i warunki użytkowania oprogramowania, w oknie terminalu pojawi się główny ekran pakietu SET (zobacz pierwszy rysunek na następnej stronie). Przed rozpoczęciem pracy z programem SET powinieneś wybrać opcję 5) Update the SocialEngineer Toolkit, która spowoduje pobranie pakietów i aktualizację programu do najnowszej wersji. Po zakończeniu aktualizacji wybierz opcję 1) Social-Engineering Attacks. W oknie terminalu pojawi się kolejny ekran, przedstawiony na rysunku poniżej, zawierający listę dostępnych ataków socjotechnicznych. Pierwsza opcja, Spear-Phising Attack Vectors, to popularny rodzaj ataku, pozwalający na wykorzystanie specjalnie spreparowanych wiadomości poczty elektronicznej i dokumentów PDF, które następnie mogą być wysyłane do ofiary bezpośrednio z poziomu pakietu SET (zobacz drugi rysunek na następnej stronie).

151

Kali Linux. Testy penetracyjne

152

Rozdział 4. • Ataki na klienty aplikacji internetowych

W naszym przykładzie wybierzemy opcję Website Attack Vectors, bo jak pamiętasz, mamy zamiar przeprowadzić atak w oparciu o kopię wybranej witryny internetowej, utworzoną metodą klonowania. Najpierw musimy jednak się zastanowić, w jaki sposób dostarczymy do klienta nasz ładunek. Do wyboru masz kilka różnych opcji. Wybierz opcję Java Applet Attack, która zazwyczaj pojawia się jako pierwsza na liście.

Program zapyta Cię, czy chcesz użyć jednego z gotowych szablonów dostępnych w pakiecie SET lub czy chcesz sklonować wybraną witrynę internetową. Domyślne szablony programu nie sprawdzą się w naszym przypadku, więc rekomendowanym rozwiązaniem będzie utworzenie kopii witryny metodą klonowania. Na kolejnym ekranie program SET przedstawi Ci kilka opcji pozwalających na określenie, w jaki sposób ma zostać utworzona kopia witryny internetowej. Jak się już zapewne domyślasz, w naszym przypadku użyjemy mechanizmu klonowania (opcja Site Cloner). Po wybraniu tej opcji program SET zada Ci szereg pytań, za pomocą których proces klonowania wybranej witryny internetowej zostanie odpowiednio skonfigurowany i uruchomiony. Site Cloner poprosi Cię o podanie następujących informacji: 153

Kali Linux. Testy penetracyjne

 NAT/Port forwarding — ta opcja jest często przyczyną nieporozumień. Pamiętaj,

że SET pyta tutaj, czy komputery ofiar będą się łączyły z Twoją maszyną przy użyciu adresu IP skonfigurowanego w systemie Kali Linux, czy też może będą łączyć się z innym adresem IP (takim jak na przykład adresy z usługi NAT). Zagadnienie staje się naprawdę istotne w momencie, kiedy prowadzisz atak na użytkowników znajdujących się poza Twoją siecią lokalną lub w internecie. Jeżeli użytkownicy będący celem ataku znajdują się poza Twoją siecią lokalną, powinieneś wybrać odpowiedź yes, w przeciwnym wypadku powinieneś wybrać odpowiedź no.  IP address/hostname for reverse connection — gdy dostarczymy wybrany ładunek

do atakowanego komputera i ładunek ten zostanie uruchomiony, program SET musi powiadomić ten komputer, w jaki sposób może on ustanowić połączenie zwrotne z systemem Kali Linux. Jeżeli pracujesz w środowisku laboratoryjnym, możesz podać adres swojego serwera systemu Kali Linux.  URL you want to clone — tutaj musisz podać adres URL witryny internetowej,

którą chcesz sklonować.  Exploit to deliver — SET realizuje dostarczanie exploitów do komputera ofiary

za pomocą pakietu Metasploit Framework. Najczęściej wykorzystywaną opcją jest Windows Reverse_TCP Meterpreter. Mechanizm ten rozpoczyna działanie, kiedy ofiara na swoim komputerze uruchomi odpowiednio przygotowany plik wykonywalny, który otwiera wybrany port komunikacyjny, za pomocą którego napastnik ma pełny dostęp do konsoli zaatakowanego komputera. Na rysunku zamieszczonym poniżej przedstawiamy zestawienie dostępnych exploitów; wspomniany Windows Reverse_TCP Meterpreter jest tutaj wymieniony jako opcja numer 2.

154

Rozdział 4. • Ataki na klienty aplikacji internetowych

W razie potrzeby możesz również zaimportować do pakietu SET swój własny plik wykonywalny. Takie rozwiązanie jest najczęściej stosowane przez hakerów i innych użytkowników, którzy piszą swoje własne narzędzia lub różnego rodzaju złośliwe oprogramowanie.

Następnie SET poprosi Cię o wybranie rodzaju mechanizmu chroniącego przeprowadzany atak przed działaniem programów antywirusowych. Co ciekawe, obok nazw poszczególnych mechanizmów SET wyświetla informacje o ich przewidywanej skuteczności. Jeżeli z takich lub innych powodów nie zależy Ci na jakiejś konkretnej metodzie, powinieneś zawsze wybierać opcje, których skuteczność została wysoko oceniona (z oceną BEST lub Excellent). Na kolejnym rysunku przedstawiamy dostępne opcje. W naszym przypadku użyjemy opcji numer 16, ponieważ to właśnie ona została oceniona jako najlepsza (BEST).

Teraz SET poprosi Cię o podanie numeru portu komunikacyjnego, na którym będzie nasłuchiwał nadchodzących połączeń. W większości przypadków powinieneś tutaj pozostawić ustawienia domyślne. Gdy udzielisz odpowiedzi na ostatnie pytanie, SET rozpocznie proces klonowania witryny.

155

Kali Linux. Testy penetracyjne

Nowo utworzony „klon” witryny może zostać wykorzystany do przełamania zabezpieczeń klientów. W tym celu musisz jakoś przekonać użytkowników, aby odwiedzili Twoją spreparowaną kopię rzeczywistej witryny. Kiedy użytkownik włączy swoją przeglądarkę i przejdzie na sklonowaną witrynę, na ekranie pojawi się okno dialogowe z informacją o konieczności uruchomienia zupełnie „niewinnego” apletu Java, który zapewni dostęp do komputera ofiary za pomocą exploita Reserve_TCP Meterpreter. Napastnik może uruchomić sesję meterpretera i połączyć się z komputerem ofiary na pełnych prawach administratora systemu. Jak już wspominaliśmy, kiedy użytkownik łączy się za pomocą przeglądarki ze spreparowaną witryną, na ekranie pojawia się zupełnie normalnie i niegroźnie wyglądające okno informujące o konieczności uruchomienia apletu Java (zobacz rysunek poniżej). W praktyce zdecydowana większość zwykłych użytkowników komputerów nie zwróci na ten komunikat szczególnej uwagi i po prostu bez zastanowienia wyrazi zgodę na uruchomienie.

Kiedy użytkownik uruchomi przygotowany przez napastnika aplet Java, serwer Kali Linux nawiąże połączenie z komputerem ofiary, jak przedstawiono na kolejnym rysunku.

Na następnym rysunku pokazujemy, że dzięki pakietowi SET napastnik może za pomocą sesji meterpretera prowadzić interakcję z systemem ofiary i wykonywać w nim dowolne polecenia.

156

Rozdział 4. • Ataki na klienty aplikacji internetowych

Za pomocą meterpretera napastnik może nawiązać wiele równoległych sesji z komputerem ofiary. W naszym przypadku użyliśmy polecenia sessions -I 1, dzięki któremu mamy pełną interakcję z pierwszą sesją meterpretera. Jeżeli udałoby się nam uzyskać dostęp do wielu hostów, moglibyśmy utworzyć wiele sesji meterpretera i prowadzić niezależną interakcję z poszczególnymi hostami, przełączać się między sesjami bądź zamykać je niezależnie od siebie. Teraz, kiedy dowiedziałeś się co nieco o tym, jak korzystać z pakietu SET, chcielibyśmy przedstawić Ci kolejny przykład. Tym razem sklonujemy wybraną witrynę internetową i po odpowiednim spreparowaniu użyjemy jej do przechwycenia nazw kont i haseł wpisywanych przez użytkowników. Do osiągnięcia naszego celu użyjemy narzędzia, które odgrywa rolę swego rodzaju kombajnu do zbierania haseł. Aby je uruchomić, z menu głównego programu SET wybierz opcję Social Engineering Attacks, następnie Website Attack Vectors i wreszcie Credential Harvester Attacks.

Podobnie jak poprzednio, możesz zastosować gotowe, predefiniowane szablony witryn internetowych, utworzyć za pomocą klonowania kopię wybranej witryny lub zaimportować własne pliki witryny (HTML, grafiki itp.).

157

Kali Linux. Testy penetracyjne

Popularne witryny internetowe, takie jak Facebook, Gmail czy Twitter, wykorzystują gotowe szablony stron. Z kolei użycie klonowania (wpisanie adresu URL) może spowodować, że sklonowane zostaną również inne witryny. Spotykaliśmy się z przypadkami, że ani klonowanie, ani użycie szablonów nie dawało najlepszych rezultatów. W takich sytuacjach powinieneś skorzystać z opcji importowania własnych plików witryny internetowej. Najpierw możesz zastosować dowolne narzędzie kopiujące strukturę witryny internetowej i utworzyć na dysku lokalnym jej kopię (o takich narzędziach już mówiliśmy nieco wcześniej). Po zakończeniu tworzenia kopii możesz użyć opcji 3) Custom Import i wskazać lokalizację katalogów skopiowanej witryny. W praktyce najczęściej będziesz musiał po prostu poeksperymentować i samodzielnie przekonać się, która z dostępnych opcji najlepiej sprawdza się w konkretnym przypadku.

W naszym przykładzie wybraliśmy opcję 2) Site Cloner. Program poprosi Cię o podanie adresu URL witryny internetowej; w naszym przykładzie będzie to https://www.facebook.com. Zwróć uwagę, że podczas wpisywania adresu URL posługujemy się pełnym formatem adresu, łącznie ze specyfikacją protokołu HTTPS bądź HTTP. W większości przypadków nie będzie to miało żadnego wpływu na ostateczny efekt, niemniej jednak zdarzają się witryny, których zawartość dla protokołu HTTP jest inna niż dla HTTPS.

Program SET poprosi Cię również o podanie adresu IP, który zostanie użyty do wystawienia fałszywej, spreparowanej wersji skopiowanej witryny. Zazwyczaj będzie to adres IP Twojego komputera z systemem Kali Linux. Jeżeli jednak planujesz przekierowanie ofiar na adres hosta wykorzystującego translację NAT (być może za pośrednictwem zapory sieciowej), to powinieneś w takiej sytuacji wpisać adres serwera NAT. Gdy zakończysz klonowanie witryny i konfigurację portów komunikacyjnych, program SET rozpocznie oczekiwanie na nadchodzące połączenia, jak przedstawiono na rysunku poniżej:

158

Rozdział 4. • Ataki na klienty aplikacji internetowych

Następnym krokiem będzie przekonanie użytkowników do skorzystania z naszej fałszywej witryny. Jednym z najczęściej stosowanych sposobów jest rozsyłanie fałszywych wiadomości za pomocą poczty elektronicznej (ang. phishing email). Co ciekawe, program SET potrafi zautomatyzować dla Ciebie nawet takie zadanie, aczkolwiek w naszym przypadku wybraliśmy ręczne utworzenie odpowiedniej wiadomości. Na kolejnym rysunku przedstawiamy wygląd specjalnie spreparowanej, fałszywej wiadomości, zawierającej łącze prowadzące do naszej sklonowanej wersji witryny serwisu Facebook. Kiedy użytkownik otworzy taką wiadomość i kliknie łącze www.facebook.com, zostanie przeniesiony do naszej fałszywej witryny pod adresem facebook.secmob.net.

159

Kali Linux. Testy penetracyjne

Patrząc na następny rysunek, możesz się przekonać, że nasza sklonowana wersja serwisu Facebook wygląda identycznie jak oryginał, z tą tylko różnicą, że to nie jest prawdziwy Facebook. Filozofia ataku zakłada, że ofiara nie zauważy nieco innego adresu URL witryny, co jest zresztą jednym z powodów, dla których w tego typu atakach napastnicy starają się używać adresów z domen jak najbardziej zbliżonych do oryginału.

Kiedy niczego nieświadoma ofiara wpisze swoje dane w fałszywej witrynie, SET przekieruje przeglądarkę użytkownika do prawdziwej witryny internetowej. W większości przypadków użytkownik po prostu bez zastanowienia kolejny raz wpisze swoje hasło i tym razem pomyślnie zaloguje się do prawdziwej witryny, nie zdając sobie nawet sprawy z tego, że został zaatakowany i że jego hasło zostało przechwycone. Na kolejnym rysunku możesz zobaczyć, jak program SET informuje o przechwyceniu hasła użytkownika:

Oprócz wyświetlanego na bieżąco dziennika zdarzeń SET może również wygenerować szczegółowy raport o zdarzeniu, który napastnik może wykorzystać później.

160

Rozdział 4. • Ataki na klienty aplikacji internetowych

Każdy pentester planujący wykorzystywanie narzędzi takich jak SET do przeprowadzania ataków socjotechnicznych powinien dobrze rozumieć działanie klientów. Jedną z najefektywniejszych metod osiągnięcia takiego celu jest zastosowanie serwera proxy do przechwytywania i analizowania żądań sieciowych przesyłanych między klientami a serwerem. W rozdziale 6., „Ataki na aplikacje internetowe i serwery WWW”, znacznie bardziej zagłębimy się w zagadnienia związane z wykorzystywaniem serwerów proxy; nie zmienia to jednak w niczym faktu, że zrozumienie zachowania klientów podczas przeprowadzania ataków przy użyciu pakietów takich jak SET jest sprawą niezmiernie ważną.

MitM Proxy Pakiet MitM Proxy to znakomite narzędzie dla każdego pentestera poszukującego podatności i luk w zabezpieczeniach klientów aplikacji internetowych. Program ten pozwala administratorowi na przechwytywanie połączeń i analizę HTTPS, a następnie przekazywanie ich dalej do serwera docelowego. Co więcej, MitM Proxy pozwala na modyfikowanie żądań wysyłanych przez klienty oraz odpowiedzi nadchodzących z serwera WWW. Pakiet MitM Proxy umożliwia pentesterowi szybką analizę ataku i sprawdzanie, jakie żądania są wystawiane przez poszczególne klienty i w jaki sposób serwer WWW na nie odpowiada. Aby uruchomić ten program w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/Web Sniffers/mitmproxy. Wykorzystanie pakietu MitM Proxy jest zalecane zarówno podczas przygotowywania ataku za pomocą pakietu SET, jak i podczas analizy przebiegu ataku. Z tego powodu w środowisku testowym pakiety SET oraz MitM Proxy powinny działać jednocześnie.

161

Kali Linux. Testy penetracyjne

Po załadowaniu pakietu MitM Proxy powinieneś uruchomić przeglądarkę i jako adres URL wpisać adres swojego lokalnego serwera Kali Linux. Program MitM Proxy wyświetla na ekranie wszystkie transakcje sieciowe (żądania i odpowiedzi) przechwytywane po stronie klienta, jak zostało to zilustrowane na kolejnym rysunku:

Znajdziesz tutaj pełny dziennik aktywności przeglądarki po stronie klienta. Jak widać, choć MitM Proxy nie jest wykorzystywany jako aktywny element typowego testu penetracyjnego aplikacji internetowych, to jednak jest znakomitym narzędziem pozwalającym na odpowiednie przygotowanie i konfigurację ataku za pomocą pakietu SET. W kolejnych rozdziałach będziemy omawiać inne rodzaje serwerów proxy, aczkolwiek tutaj zdecydowaliśmy się na wspomnienie o pakiecie MitM Proxy głównie dlatego, że znakomicie ułatwia pentesterom testowanie przygotowywanych ataków poprzez analizę ruchu sieciowego bezpośrednio na komputerze lokalnym, na którym działa Kali Linux.

Skanowanie hostów Najpopularniejszą metodą pozwalającą w ostatecznym efekcie uzyskać nieautoryzowany dostęp do wybranego hosta jest wyszukiwanie, identyfikacja i wykorzystywanie podatności i luk w zabezpieczeniach systemu operacyjnego, zainstalowanych aplikacji i innych programów. Narzędzia takie jak Nessus pozwalają na zautomatyzowanie procesu skanowania hostów w poszukiwaniu słabych stron i znanych luk w zabezpieczeniach. W tym podrozdziale pokażemy, jak zainstalować, uruchomić pakiet Nessus oraz jak wykorzystać go do skanowania systemu będącego przedmiotem ataku. Wiele spośród narzędzi, które omawialiśmy w rozdziale 3., „Ataki na serwery aplikacji internetowych”, może być z powodzeniem wykorzystane do eksploatacji luk w zabezpieczeniach, zidentyfikowanych przez Nessus.

Skanowanie hostów za pomocą pakietu Nessus W systemie Kali Linux Nessus nie jest preinstalowany. Aby z niego skorzystać, musisz najpierw uzyskać odpowiedni kod rejestracyjny od firmy Tenable, producenta pakietu Nessus.

162

Rozdział 4. • Ataki na klienty aplikacji internetowych

Firma Tenable oferuje bezpłatną licencję do użytku domowego (home feed option), dzięki której możesz skanować maksymalnie do 16 adresów IP. Jeżeli chcesz skanować większe sieci lub wykorzystywać Nessus do celów komercyjnych, musisz zamówić pełną licencję (professional feed option).

Instalowanie pakietu Nessus w systemie Kali Linux Licencja Nessus HomeFeed pozwala na bezpłatne wykorzystywanie pakietu Nessus w sieci domowej, z wyłączeniem zastosowań komercyjnych. Jeżeli chcesz używać Nessusa w miejscu pracy, musisz zakupić licencję komercyjną, Nessus ProfessionalFeed. Aby uzyskać kod aktywacyjny dla bezpłatnej licencji komercyjnej, powinieneś zajrzeć na stronę internetową http://www.tenable.com/products/nessus-home. Nessus nie jest preinstalowany w systemie Kali Linux, więc aby go używać, najpierw musisz go samodzielnie pobrać ze strony producenta i zainstalować. Co prawda nie ma wersji Nessusa przygotowanej specjalnie dla systemu Kali Linux, ale zamiast tego znakomicie sprawdza się wersja dla systemu Debian 6.0. 1. Pobierz pakiet Nessus w wersji dla systemu Debian. Aby to zrobić, uruchom przeglądarkę i przejdź na stronę http://www.tenable.com/products/nessus/selectyour-operating-system, gdzie znajdziesz zarówno 32-bitową, jak i 64-bitową wersję tego pakietu (w naszym przykładzie używamy wersji 64-bitowej). Pamiętaj, aby pobierany pakiet Nessus zapisać w katalogu /tmp. Jeżeli użyjesz innego katalogu, będziesz musiał odpowiednio zmodyfikować ścieżki w poleceniach opisywanych poniżej.

2. Przejdź do katalogu, w którym zlokalizowany jest pobrany ze strony producenta pakiet Nessus, i wykonaj polecenia przedstawione poniżej: ar vx Nessus-5.2.1-debian6* tar -xzvf data.tar.gz tar -xzvf control.tar.gz ar vx Nessus-5.2.1-debian6*, tar -xzvf data.tar.gz tar -xzvf control.tar.gz

Gdy to zrobisz, w katalogu Nessusa powinieneś znaleźć katalogi etc oraz opt. 3. Skopiuj podkatalog nessus znajdujący się w katalogu /tmp/opt do katalogu /opt. Przed rozpoczęciem kopiowania upewnij się, że katalog /opt istnieje; jeżeli nie, musisz go utworzyć. Aby to zrobić, wykonaj polecenia przedstawione poniżej: mkdir /opt (Jeżeli na ekranie pojawi się komunikat, że taki folder już istnieje, po prostu przejdź do kolejnego polecenia) cp -Rf /tmp/opt/nessus /opt cp -Rf /tmp/etc/init.d/nessus* /etc/init.d

163

Kali Linux. Testy penetracyjne

4. Teraz możesz usunąć już wszystkie pozostałe pliki Nessusa z katalogu /tmp. 5. Aby uruchomić pakiet Nessus, wykonaj polecenie przedstawione poniżej: /etc/init.d/nessusd start

6. Zaloguj się do konsoli zarządzania pakietu Nessus. Aby to zrobić, uruchom przeglądarkę i w pasku adresu wpisz https://127.0.0.1:8834.

Używanie pakietu Nessus Kiedy po raz pierwszy zalogujesz się do Nessusa, na ekranie pojawi się kilka komunikatów powitalnych oraz okno dialogowe z ostrzeżeniem SSL, że łączysz się z witryną podpisaną jej własnym certyfikatem. Następnie pojawi się kilka kolejnych, niewymagających specjalnych objaśnień ekranów z różnymi informacjami, i wreszcie Nessus poprosi Cię o wprowadzenie kodu aktywacyjnego, który pozwoli na pobranie najnowszego zestawu wtyczek skanera.

Będziesz musiał również ustawić nazwę użytkownika i hasło dostępu, za pomocą których będziesz się logował do konsoli Nessusa. Na kolejnych rysunkach przedstawiamy proces tworzenia konta i wprowadzania kodu aktywacyjnego (który otrzymasz od firmy Tenable e-mailem po zarejestrowaniu się na jej stronie).

164

Rozdział 4. • Ataki na klienty aplikacji internetowych

Pierwsze pobieranie pełnego zestawu wtyczek może zająć całkiem sporo czasu, więc powinieneś uzbroić się w cierpliwość.

165

Kali Linux. Testy penetracyjne

Gdy zakończy się pobieranie i pomyślnie zainstalujesz wszystkie aktualizacje, na ekranie pojawi się okno logowania do konsoli skanera Nessus. Wpisz nazwę konta użytkownika oraz hasło dostępu, które utworzyłeś podczas konfiguracji skanera.

Aby uruchomić skanowanie, kliknij kartę Scan, znajdującą się na wstążce w górnej części ekranu, i wybierz polecenie New Scan. Następnie Nessus poprosi Cię o podanie pewnych danych dotyczących hosta lub hostów, które mają być przeskanowane. Będziesz musiał również wybrać profil skanowania, którego chcesz użyć. Nessus posiada wbudowanych kilka różnych profili skanowania (szablonów). W naszym przykładzie użyjemy profilu External Network Scan. Jeżeli karta Scan nie jest dostępna, możesz zamiast tego wybrać opcję Scan Templates, a następnie polecenie New Scan.

Gdy wybierzesz opcję Create Scan, program utworzy nowe zadanie skanowania, które zostanie uruchomione w wybranym przez Ciebie momencie. Domyślnie zadania skanowania są uruchamiane od razu po utworzeniu, aczkolwiek w razie potrzeby możesz wybrać dzień i godzinę jego uruchomienia.

166

Rozdział 4. • Ataki na klienty aplikacji internetowych

Po zakończeniu zadania możesz przejść na kartę Results i zobaczyć raport ze skanowania, zawierający informacje o wszystkich podatnościach i lukach znalezionych przez Nessus w badanym systemie.

Na karcie Results znajdziesz raporty nie tylko z ostatnio przeprowadzonego skanu, ale również wszystkich innych, wykonanych do tej pory zadań skanowania, jak przedstawiono na kolejnym rysunku.

Każdego pentestera będą oczywiście najbardziej interesowały informacje o lukach w zabezpieczeniach, które Nessus znalazł w testowanym systemie czy systemach. Zidentyfikowane luki w zabezpieczeniach, dla których Nessus był w stanie znaleźć w swojej bazie odpowiedni numer referencyjny (odwołujący się do danej aktualizacji firmy Microsoft lub kodu podatności w bazie danych), mogą być następnie wykorzystane poprzez odpowiednie exploity w pakiecie Metasploit Framework. Więcej szczegółowych informacji na temat używania tego pakietu znajdziesz w rozdziale 3., „Ataki na serwery aplikacji internetowych”. Jak widać na poniższym rysunku, nasz przykładowy host ma wiele bardzo niebezpiecznych luk w zabezpieczeniach, które mogą z powodzeniem zostać wykorzystane do uzyskania nieautoryzowanego dostępu do systemu przy użyciu takich narzędzi, jak Metasploit i inne. Więcej szczegółowych informacji na temat wykorzystywania luk w zabezpieczeniach przy użyciu tego pakietu znajdziesz w rozdziale 3., „Ataki na serwery aplikacji internetowych”.

167

Kali Linux. Testy penetracyjne

Nessus posiada wiele opcji pozwalających na zapisywanie raportów ze skanowania w różnych formatach, takich jak HTML, CSV, PDF itp. Aby wyeksportować raport, przejdź do sekcji Results i zaznacz wybrane zakończone zadanie skanowania. Na trzeciej karcie z lewej strony znajdziesz opcje eksportu, jak przedstawiono na rysunku poniżej:

168

Rozdział 4. • Ataki na klienty aplikacji internetowych

Przechwytywanie i łamanie haseł użytkowników Łamanie haseł to z definicji proces odtwarzania hasła na podstawie danych, które są przechowywane lub przesyłane przez system komputerowy. Hasła są jednym z najczęściej wykorzystywanych mechanizmów zabezpieczania różnego rodzaju systemów, o czym wspominaliśmy już w rozdziale 3., „Ataki na serwery aplikacji internetowych”. Klientami aplikacji internetowych są zazwyczaj hosty działające pod kontrolą systemów Windows lub Linux. Każdy z tych systemów posiada swoje specyficzne metody przechowywania i ochrony haseł. Skoncentrujemy się tutaj na łamaniu haseł przechowywanych w plikach systemowych. Dlaczego omawiamy takie zagadnienie w książce poświęconej testom penetracyjnym aplikacji internetowych? Odpowiedź jest prosta — najczęściej to właśnie takie systemy są autoryzowanymi klientami aplikacji internetowych, stąd złamanie zabezpieczeń i uzyskanie dostępu do klienta oznacza otwarcie szerokich możliwości dostępu do aplikacji internetowej będącej celem testu penetracyjnego. Najłatwiejsza droga do pozyskania hasła dostępu do systemu wiedzie przez odpowiednio przygotowany atak socjotechniczny. Jak już wcześniej wspominaliśmy, potencjalny napastnik może próbować pozyskać hasło lub przynajmniej wskazówki ułatwiające jego odgadnięcie poprzez podszywanie się pod innego, autoryzowanego użytkownika lub pracownika firmy. Jeżeli napastnik na przykład dowie się, że w danej organizacji hasła mają długość od 6 do 10 znaków, rozpoczynają się od wielkiej litery i kończą cyfrą, to taka informacja drastycznie redukuje liczbę potencjalnych haseł, które należy sprawdzić metodą brute-force (w systemie Kali Linux znajdziesz narzędzie o nazwie Crunch pozwalające na łatwe generowanie listy tego typu haseł, która następnie może być wykorzystana do łamania haseł za pomocą innych narzędzi). Dobrze przygotowany pentester powinien przeprowadzić szeroko zakrojone rozpoznanie systemu, który będzie przedmiotem ataku, wykorzystując do tego celu techniki omawiane w rozdziale 2., „Rekonesans”. Takie działania powinny pozwolić mu na identyfikację rodzaju systemów funkcjonujących w środowisku celu, poznać reguły tworzenia i stosowania haseł, zidentyfikować użytkowników odpowiedzialnych za zarządzanie poszczególnymi systemami i zdobyć wiele innych informacji, które w ostatecznym efekcie mogą przyczynić się do zredukowania liczby potencjalnych haseł i ułatwić ich złamanie. Istnieje co najmniej kilka różnych sposobów łamania haseł. Poniżej przedstawiamy listę najpopularniejszych technik:  Odgadywanie haseł — metoda trochę z pogranicza parapsychologii i telepatii;

napastnik na podstawie posiadanych informacji o systemie i jego użytkowniku stara się odgadnąć hasło dostępu.  Atak słownikowy — zautomatyzowany atak polegający na systematycznym

sprawdzaniu kolejnych haseł ze słownika.

169

Kali Linux. Testy penetracyjne

 Atak siłowy (brute-force) — atak polegający na generowaniu wszystkich

możliwych kombinacji znaków w poszukiwaniu prawidłowego hasła.  Atak hybrydowy — atak mieszany, polegający na połączeniu ataku słownikowego

z atakiem siłowym. Hasła dostępu muszą być przechowywane w systemie tak, aby podczas logowania system był w stanie zweryfikować tożsamość użytkownika i sprawdzić jego prawa dostępu. Z oczywistych powodów hasła przechowywane w systemie nie są zapisywane w postaci czystego tekstu. Większość systemów do ochrony haseł wykorzystuje połączenie szyfrowania z innymi metodami ochrony, ponieważ do odszyfrowania pliku potrzebny jest klucz szyfrowania, co z kolei może przesądzać o podatności takiej metody na ataki kryptograficzne. Haszowanie (funkcja skrótu) to metoda przekształcania klucza szyfrującego lub hasła do postaci zupełnie innej wartości. Haszowanie jest operacją jednokierunkową, co oznacza, że na podstawie wartości funkcji skrótu nie można w sposób obliczeniowy odtworzyć wartości wejściowej. Co więcej, haszowanie przypisuje każdej wartości wejściowej unikatową wartość funkcji skrótu, co oznacza, że wartości funkcji skrótu mogą być bezpiecznie przechowywane i wykorzystywane do weryfikacji wpisywanego hasła i uwierzytelniania użytkowników. Zmiana jednego elementu hasła, taka jak zmiana litery z wielkiej na małą, dodanie spacji lub znaku specjalnego powoduje wygenerowanie zupełnie innej wartości funkcji skrótu. Jeżeli znasz algorytm używany do haszowania, możesz poddać wartości funkcji skrótu atakowi typu brute-force. Istnieje bardzo wiele narzędzi, takich jak na przykład John the Ripper, które są w stanie automatycznie rozpoznać rodzaj funkcji skrótu i przeprowadzić atak siłowy poprzez automatyczne generowanie kolejnych wartości skrótu i porównywanie ich z oryginałem. Po znalezieniu pasującej pary John the Ripper wyświetla na ekranie ciąg tekstowy, który został użyty do wygenerowania danej wartości funkcji skrótu. Tablice tęczowe (ang. Rainbow Tables) to największy nieprzyjaciel popularnych algorytmów haszujących. Tablice tęczowe to baza danych wstępnie obliczonych wartości funkcji skrótu, które mogą być używane do szybkiego wyszukiwania hasła reprezentującego daną wartość skrótu. Witryny internetowe, takie jak https://www.freerainbowtables.com/, oferują tablice tęczowe dla wszystkich popularnych algorytmów haszujących, takich jak MD5, powszechnie używany w systemie Windows. Kali Linux również oferuje takie narzędzia, na przykład RainbowCrack, które pozwalają na generowanie własnych tablic tęczowych. Haszowanie z dodatkiem soli kryptograficznej to metoda, która została opracowana jako sposób walki z tablicami tęczowymi. Metoda polega na dodawaniu do wartości funkcji skrótu dodatkowych bitów (tzw. ciąg zaburzający) w celu otrzymania wartości, której nie można znaleźć w tablicach tęczowych. Niestety, wiele systemów, takich jak Windows, nie wykorzystuje jeszcze haszowania z dodatkiem soli kryptograficznej.

170

Rozdział 4. • Ataki na klienty aplikacji internetowych

Hasła w systemie Windows Windows to najpopularniejszy obecnie system operacyjny wykorzystywany w zastosowaniach biznesowych. Droga, jaką firma Microsoft przeszła w dziedzinie ochrony haseł, była wyjątkowo wyboista. Najnowsze wersje systemów Windows są jednak znacznie bezpieczniejsze niż ich starsze odpowiedniki, co nie zmienia jednak w niczym faktu, że nadal są podatne na ataki przeprowadzane za pomocą wielu narzędzi dostępnych w systemie Kali Linux. System Windows przechowuje hasła w pliku gałęzi SAM rejestru (ang. SAM — System Account Management), który zlokalizowany jest w katalogu C:\%systemroot%\sys32\config. Wyjątkiem od tej reguły jest sytuacja, kiedy komputer należy do domeny Active Directory. Domeny takie wykorzystują odrębny system uwierzytelniania użytkowników, gdzie hasła są przechowywane w bazie danych LDAP. Plik SAM przechowuje wartości skrótów haseł użytkowników w formacie LM i NTLM. Jest to plik chroniony, którego nie można w normalny sposób skopiować ani przenieść w czasie działania systemu Windows. Zawartość tego pliku można jednak „zrzucić” na dysk do postaci tekstowej, dzięki czemu można odczytać wartości funkcji skrótów poszczególnych haseł i użyć ich następnie jako danych wejściowych do ataku brute-force, którego zadaniem będzie złamanie haseł. Haker może również pozyskać kopię pliku SAM poprzez uruchomienie danego komputera pod kontrolą innego systemu operacyjnego, ładowanego z dysku CD/DVD lub pamięci USB, takiego jak wybrane dystrybucje systemu Linux (np. Kali Linux) czy specjalnie przygotowane klony systemu Windows. Kopię zapasową pliku SAM można również odnaleźć w katalogu C:\%systemroot%\repair. Kopia zapasowa pliku SAM jest tworzona domyślnie i zazwyczaj nie jest usuwana przez administratorów systemu. Plik kopii zapasowej nie jest chroniony, aczkolwiek jest przechowywany w postaci skompresowanej, co oznacza, że przed odczytaniem jego zawartości musisz go rozpakować. Możesz użyć do tego celu systemowego polecenia expand, którego składnia jest bardzo prosta: expand [plik skompresowany] [katalog docelowy]. Poniżej przedstawiamy przykładowe wywołanie polecenia expand, za pomocą którego możesz rozpakować skompresowaną kopię zapasową pliku SAM: C:\> expand SAM uncompressedSAM

Aby zwiększyć odporność systemu operacyjnego na ataki typu offline, firma Microsoft, począwszy od systemu Windows 2000, dołącza narzędzie SYSKEY, pozwalające na zaszyfrowanie bazy danych kont systemu, przechowywanej w pliku SAM, za pomocą szyfrowania wykorzystującego unikatowy dla każdej instalacji klucz o długości 128 bitów. Potencjalny napastnik, mający fizyczny dostęp do danego systemu Windows, może jednak pozyskać klucz BootKey (zwany również kluczem uruchamiania systemu). Aby to zrobić, należy wykonać następujące polecenia: 1. Uruchom komputer pod kontrolą innego systemu operacyjnego (np. Kali Linux), ładowanego z dysku CD/DVD lub pamięci USB.

171

Kali Linux. Testy penetracyjne

2. Skopiuj pliki gałęzi SAM i SYSTEM rejestru (znajdziesz je w katalogu C:\%systemroot%\sys32\config). 3. Odzyskaj klucz uruchamiania z pliku gałęzi SYSTEM rejestru za pomocą narzędzi takich jak bkreg lub bkhive. 4. Odczytaj wartości funkcji skrótu haseł z bazy kont systemu przechowywanej w pliku SAM. 5. Spróbuj złamać hasła za pomocą narzędzi takich jak John the Ripper. Pamiętaj, że kiedy próbujesz odczytać lub zapisać dowolny plik w systemie Windows, powodujesz modyfikację wartości znaczników czasu MAC (ang. Modify, Access, Change) tego pliku, co jest sposobem, w jaki system Windows loguje Twoje działania. Aby uniknąć pozostawiania śladów, które będą mogły być odnalezione za pomocą technik informatyki śledczej, powinieneś przed rozpoczęciem ataków wykonać pełną kopię atakowanego systemu i później pracować lokalnie na tej kopii.

Montowanie dysków z systemem Windows Jak już wiesz, istnieją narzędzia pozwalające na skopiowanie plików SAM i SYSTEM z hosta pracującego pod kontrolą systemu Windows. Jedną z metod osiągnięcia takiego celu jest zamontowanie w systemie Linux dysku z partycją systemową Windows, dzięki czemu narzędzia linuksowe będą miały do niej pełny dostęp. Aby to zrobić, powinieneś najpierw za pomocą polecenia fdisk -l zidentyfikować dostępne partycje i zlokalizować tę, na której zainstalowany jest system Windows. Polecenie fdisk wyświetla partycję NTFS w następujący sposób: Device Boot Start End Blocks Id System /dev/hdb1* 1 2432 19535008+ 86 NTFS /dev/hdb2 2433 2554 979965 82 Linux swap/Solaris /dev/hdb3 2555 6202 29302560 83 Linux

Teraz utwórz punkt montowania partycji, wykonując polecenie mkdir /mnt/windows. Po utworzeniu punktu montowania możesz zamontować partycję systemu Windows. Aby to zrobić, wykonaj polecenie takie jak przedstawione poniżej: mount -t /mnt/windows

Od tej chwili partycja systemu Windows jest zamontowana w Twoim systemie Linux, dzięki czemu możesz skopiować pliki SAM i SYSTEM do wybranego katalogu na dysku lokalnym Twojego komputera. Możesz to zrobić za pomocą następującego polecenia: cp SAM SYSTEM /pentest/passwords/AttackDirectory

172

Rozdział 4. • Ataki na klienty aplikacji internetowych

Kolejną czynnością będzie wydobycie zawartości pliku SAM i zrzucenie jej do pliku lokalnego. Istnieje całkiem sporo narzędzi pozwalających na wykonanie takiej operacji, dobrym przykładem będą tutaj programy takie jak PwDump czy Cain and Abel. W systemie Kali Linux możesz użyć do tego celu polecenia samdump, o którym będziemy jeszcze mówić w nieco dalszej części tego rozdziału. Pamiętaj, że jeżeli baza kont systemu Windows została zaszyfrowana poleceniem SYSKEY, będziesz musiał zarówno skopiować plik SAM, jak i odzyskać klucz uruchamiania systemu BootKey z pliku SYSTEM. Jest on niezbędny do uzyskania dostępu do pliku SAM i narzędzia do łamania haseł będą wymagały podania tego klucza.

Polecenia bkreg i bkhive to dwa bardzo popularne narzędzia pozwalające na odzyskanie klucza uruchamiania systemu z pliku gałęzi SYSTEM rejestru, jak przedstawiono na rysunku poniżej:

Hasła w systemie Linux Systemy Linux wykorzystywane w charakterze klientów aplikacji internetowych nie są tak często spotykane, jak systemy Windows, a uzyskanie nieautoryzowanego dostępu na poziomie administratora systemu (użytkownik root) do takich systemów to zupełnie inna para kaloszy. Bardzo często w takich systemach można znaleźć hasła zapisane czystym tekstem w plikach takich jak .netrc, które są wykorzystywane przez mechanizm automatycznego logowania usług, na przykład Telnet bądź FTP. W zdecydowanej większości przypadków potencjalny napastnik będzie się raczej starał zdobyć kopię plików passwd i shadow, które są zazwyczaj przechowywane w katalogu /etc (pliki /etc/passwd oraz /etc/shadow). Plik shadow może być odczytywany tylko przez użytkownika root i zawiera wartości funkcji skrótu MD5 haseł poszczególnych użytkowników. Pozyskanie kopii pliku shadow w systemie Linux jest znacznie trudniejsze niż kopii pliku SAM w systemie Windows. Istnieją jednak metody przechwycenia i skopiowania tego pliku przy użyciu programu uruchomieniowego, takiego jak na przykład grub. Metodologia łamania haseł systemu Linux jest bardzo zbliżona do tego, jak to się odbywa w przypadku innych systemów, na przykład Windows. Większość narzędzi przeznaczonych do łamania haseł, takich jak John the Ripper, potrafi automatycznie zidentyfikować wartości skrótów przechowywanych w plikach shadow oraz passwd i dokonać próby ich złamania przy użyciu odpowiednio dobranego ataku hybrydowego. 173

Kali Linux. Testy penetracyjne

Narzędzia do łamania haseł dostępne w systemie Kali Linux W systemie Kali Linux znajdziesz różne narzędzia przeznaczone do łamania haseł i kompromitowania zabezpieczeń opartych na hasłach. W menu systemu Kali Linux takie narzędzia znajdziesz w kategorii Password Attacks, która została podzielona na dwie główne kategorie: Offline Attack oraz Online Attacks. W tym podrozdziale skoncentrujemy się na narzędziach pozwalających na skompromitowanie systemu zabezpieczeń podczas przeprowadzania testów penetracyjnych aplikacji internetowych. Kali Linux posiada również inne narzędzia o zbliżonej funkcjonalności, takie jak narzędzia do łamania haseł zabezpieczających sieci bezprzewodowe, aczkolwiek omawianie ich wykracza już daleko poza ramy tej książki. Pamiętaj, że konsolowa wersja programu John the Ripper oraz pakiet Hydra zostały już wcześniej omówione w rozdziale 3., „Ataki na serwery aplikacji internetowych”.

Johnny Johnny to po prostu graficzny interfejs użytkownika bardzo popularnego i dobrze znanego programu John the Ripper. Tradycyjną, konsolową wersję tego programu omawialiśmy już w rozdziale 3., „Ataki na serwery aplikacji internetowych”. Podobnie jak wersja konsolowa, Johnny posiada kilka silników, pozwalających na łamanie różnych rodzajów haseł, włącznie z hasłami, które zostały wcześniej poddane procesowi szyfrowania czy haszowania. Johnny posiada zdolność automatycznego rozpoznawania większości powszechnie używanych typów funkcji haszujących i metod szyfrowania, co znakomicie ułatwia korzystanie z tego programu zarówno pentesterom, jak i innym użytkownikom. Hakerzy i inne czarne charaktery również uwielbiają to narzędzie ze względu na jego elastyczność i szeroki zakres konfiguracji, pozwalający na zoptymalizowanie ataków i przyspieszenie procesu łamania haseł. Niektóre opcje wersji konsolowej John the Ripper mogą nie być dostępne w programie Johnny, z tego względu do naprawdę poważnych zadań zalecamy używanie tej pierwszej wersji.

Proces łamania haseł za pomocą programu John the Ripper odbywa się zazwyczaj w następujący sposób:  Próba złamania hasła za pomocą ataku słownikowego.  Modyfikacja ataku słownikowego poprzez dodawanie do kolejnych wyrazów

przedrostków i przyrostków alfanumerycznych.  Modyfikacja ataku słownikowego poprzez łączenie ze sobą poszczególnych wyrazów.  Zastosowanie znaków alfanumerycznych do łączenia wyrazów.

174

Rozdział 4. • Ataki na klienty aplikacji internetowych

 Atak wykorzystujący wyrazy ze słowników wymieszane ze znakami specjalnymi.  Jeżeli żaden z powyższych ataków nie zakończy się powodzeniem, przechodzimy

do ataku metodą brute-force. Aby w systemie Kali Linux uruchomić program Johnny, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Offline Attacks/johnny. Kiedy na ekranie pojawi się główne okno programu, kliknij przycisk Open Passwd File, znajdujący się na pasku narzędzi, a następnie odszukaj i wybierz plik passwd, którego hasła chcesz złamać. Na następnym rysunku przedstawiono okno programu Johnny z załadowanym plikiem shadow, gdzie celem ataku są hasła dla kont użytkowników BOB, mary i joey. Kolumna Password zostanie wypełniona hasłami po zakończeniu procesu łamania.

Z lewej strony głównego okna programu Johnny znajdują się przyciski kart zawierających różne opcje konfiguracyjne programu. Rodzaj ataku możesz wybrać na karcie Options. Na kolejnym rysunku przedstawiono opcje pozwalające na zdefiniowanie domyślnego zachowania programu oraz wybranie typu funkcji skrótu. Warto zauważyć, że opcje automatycznego rozpoznawania typu haseł oraz sposobów haszowania i szyfrowania działają poprawnie w około 90% przypadków.

175

Kali Linux. Testy penetracyjne

Na karcie Statistics wyświetlane są informacje o przebiegu i czasie trwania aktywnej sesji. Karta Settings pozwala z kolei na zmianę sposobu działania programu (zobacz rysunek poniżej).

Pamiętaj, że domyślna konfiguracja ścieżek dla programu John the Ripper może nie być poprawna. Przed uruchomieniem sesji łamania haseł powinieneś przejść na kartę Settings i sprawdzić ustawienia wszystkich ścieżek. W starszych wersjach systemu BackTrack trzeba było zazwyczaj zmienić domyślną ścieżkę programu John the Ripper na /pentest/passwords/john/john. W systemie Kali Linux 1.0 John the Ripper jest domyślnie zainstalowany w katalogu /user/sbin/john.

Na karcie Output znajdziesz informacje na temat aktualnego ataku. Znajdziesz tam również ewentualne komunikaty o błędach oraz aktualizacje statusu bieżącego ataku. Poniżej zamieszczamy przykład komunikatu wyświetlanego przez program Johnny, dotyczącego identyfikacji typu wartości funkcji skrótu.

176

Rozdział 4. • Ataki na klienty aplikacji internetowych

Domyślne słowniki, w jakie zostały wyposażone programy John the Ripper oraz Johnny, są niestety dosyć ubogie. Z tego powodu zdecydowanie zalecamy stosowanie innych, bardziej rozbudowanych słowników, które bez większych problemów można pobrać z internetu. Aby skorzystać z własnego słownika, przejdź na kartę Options i wybierz opcję Wordlist mode. Odszukaj i zaznacz swój plik słownika, a następnie kliknij przycisk Apply.

Po znalezieniu właściwego hasła Johnny umieszcza je w odpowiednim miejscu w kolumnie Password. Na następnym rysunku możemy zobaczyć, że dwa z trzech haseł zostały już złamane:

Programy hashcat i oclHashcat

Programy hashcat oraz oclHashcat to narzędzia przeznaczone do łamania haseł. Program oclHashcat jest narzędziem zoptymalizowanym do działania ze wsparciem GPU (procesorów karty graficznej). Oba narzędzia, hashcat oraz oclHashcat, działają w trybie wielowątkowym i pozwalają na łamanie wielu haseł jednocześnie w czasie sesji. Użytkownik ma do dyspozycji wiele różnych opcji i profili łamania haseł, takich jak ataki siłowe, kombinowane, słownikowe, hybrydowe albo bazujące na określonych zestawach reguł.

177

Kali Linux. Testy penetracyjne

System Kali Linux oferuje kilka różnych wersji pakietu hashcat. Przyrostek ocl (ang. open cl) oznacza otwartą implementację sterowników kart graficznych, pozwalających na zunifikowanie oprogramowania dla kart Nvidia oraz ATI. W zależności od konfiguracji sprzętowej Twojego komputera niektóre z tych wersji mogą działać niepoprawnie i wymagać aktualizacji. Najlepszym rozwiązaniem będzie pobranie najnowszych wersji tego oprogramowania ze strony http://hashcat.net/oclhashcat/. Aby uruchomić program hashcat, w menu głównym systemu przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Offline Attacks/hashcat. Aby wywołać program hashcat, powinieneś użyć następującej składni polecenia: hashcat [opcje] plikhaseł [plik słownika]. Na rysunku poniżej przedstawiamy przykład zastosowania programu hashcat do łamania haseł przechowywanych w pliku shadow.

Program hashcat posiada również graficzny interfejs użytkownika, który odgrywa rolę graficznej nakładki dla konsolowej wersji programu. Wielu użytkowników bardzo sobie chwali takie rozwiązanie, ponieważ nakładka graficzna jest bardzo przejrzysta i prosta w użyciu, a dodatkowo w dolnej części okna wyświetla pełny wiersz wywołania programu ze wszystkimi opcjami ustawionymi za pomocą opcji graficznych (zobacz pierwszy rysunek na następnej stronie).

samdump2 Program samdump2 to narzędzie, za pomocą którego możesz wydobyć listę wartości funkcji skrótu haseł kont użytkowników systemu Windows, przechowywanych w pliku SAM, i użyć jej do łamania haseł w innym programie. W przypadku nowszych wersji systemu Windows będziesz dodatkowo musiał zdobyć klucz uruchamiania systemu (bootkey), który będzie niezbędny do uzyskania dostępu do zawartości pliku SAM. Aby uruchomić program samdump2, w menu głównym systemu przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Offline Attacks/samdump2. Gdy wybierzesz to polecenie, na ekranie otworzy się nowe okno terminalu (zobacz drugi rysunek na następnej stronie). Aby program samdump2 mógł odczytać zawartość pliku SAM, musisz najpierw zamontować partycję systemu Windows (zobacz trzeci rysunek na następnej stronie).

178

Rozdział 4. • Ataki na klienty aplikacji internetowych

179

Kali Linux. Testy penetracyjne

Następnie powinieneś przekopiować pliki SAM oraz SYSTEM do wybranego katalogu roboczego na dysku lokalnym Twojego komputera. cp SAM SYSTEM /root/AttackDirectory

Teraz przejdź do katalogu roboczego i wykonaj polecenie bkhive SYSTEM bootkey, za pomocą którego odtworzysz klucz uruchamiania systemu Windows. Skopiuj uzyskany klucz do pliku tekstowego, tak aby później program samdump2 mógł z niego skorzystać podczas odczytywania zawartości pliku SAM. cd /root/AttackDirectory > windowshashfiles.txt

Wykonaj polecenie samdump SAM bootkey. Skopiuj wyniki działania polecenia do osobnego pliku tekstowego. Samdump2 SAM bootkey > windowshashfiles2.txt

Teraz możesz już użyć dowolnego programu do łamania haseł, takiego jak John the Ripper!

chntpw Pakiet chntpw to popularne narzędzie, które można znaleźć w systemach Kali Linux, Backtrack oraz wielu dystrybucjach linuksowych, przeznaczone do resetowania haseł kont użytkowników w systemie Windows 8 i wcześniejszych jego wersjach. Po uruchomieniu program modyfikuje bazę danych kont użytkowników systemu Windows. Narzędzie to pozwala na uzyskanie dostępu do systemu Windows w sytuacji, kiedy nie znasz lub nie pamiętasz hasła dostępu. Jeżeli chcesz skorzystać z programu chntpw, musisz uruchomić komputer z systemem Windows z płyty Kali Live CD. Aby przygotować płytę Kali Live CD, uruchom przeglądarkę, przejdź na stronę http://www.kali.org/downloads/ i pobierz odpowiednio obraz ISO systemu. Korzystając z pobranego obrazu ISO, zapisz płytę Kali Live CD i uruchom z niej komputer, na którego dysku twardym zainstalowany jest system Windows. Kiedy na ekranie pojawi się menu startowe systemu Kali, wybierz opcję Live (forensic mode) (zobacz pierwszy rysunek na następnej stronie). Plik gałęzi SAM rejestru jest zazwyczaj zlokalizowany w katalogu /Windows/System32/config. Otwórz okno terminalu i przejdź do tego katalogu. Pełna ścieżka do tego katalogu może wyglądać następująco (zobacz drugi rysunek na następnej stronie): /media/hda1/Windows/System32/config

180

Rozdział 4. • Ataki na klienty aplikacji internetowych

W każdym systemie może to wyglądać nieco inaczej. W naszym przykładzie Kali do zlokalizowania urządzenia używa numeru seryjnego dysku twardego. Dzieje się tak, ponieważ ten zrzut ekranu został wykonany na maszynie wirtualnej z systemem Windows 7 po uruchomieniu jej z płyty Kali Live CD. Plik SAM znajduje się zazwyczaj w katalogu zamapowanym jako /media//Windows/System32/config. Na kolejnym rysunku przedstawiamy pliki bazy SAM zlokalizowane na twardym dysku.

Polecenie chntpw -l SAM spowoduje wyświetlenie listy wszystkich nazw kont użytkowników istniejących w danym systemie Windows. Na rysunku zamieszczonym na następnej stronie przedstawiamy wyniki działania tego polecenia.

181

Kali Linux. Testy penetracyjne

Wynikiem działania polecenia chntpw -l SAM jest wyświetlenie listy nazw kont użytkownika istniejących w systemie, z którego pochodzi dany plik SAM. Kiedy już znajdziesz nazwę konta użytkownika, które chcesz zmodyfikować, powinieneś wykonać następujące polecenie: chntpw -u "nazwa-konta" SAM. W naszym przykładzie wykonaliśmy polecenie chntpw -u "Administrator" SAM i na ekranie pojawiło się menu przedstawione na następnym rysunku.

Jak łatwo zauważyć, możemy teraz usunąć hasło użytkownika (opcja Clear (blank) user password), zmienić jego hasło (opcja Edit (set new) user password) lub nadać użytkownikowi prawa administratora systemu (opcja Promote user (make user an administrator)). W systemie Windows 7 zmiana hasła nie zawsze działa, stąd w przypadku tego systemu zalecanym rozwiązaniem jest po prostu usuwanie hasła. Po wykonaniu takiej operacji będziesz mógł się zalogować do systemu na wybrane konto użytkownika bez podawania hasła. Aby w systemie Kali Linux uruchomić program chntpw, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Offline Attacks/chntpw. Na ekranie pojawi się okno terminalu, w którym wyświetlony zostanie ekran pomocy polecenia chntpw. Istnieje kilka różnych sposobów wykorzystania programu chntpw, o czym można się przekonać, patrząc na kolejny rysunek:

182

Rozdział 4. • Ataki na klienty aplikacji internetowych

Aby uruchomić program chntpw w trybie interaktywnym, powinieneś wpisać chntpw -i, a następnie podać ścieżkę do pliku SAM. Jeżeli celem takiej operacji jest zamontowany system plików Windows, będziesz musiał podać pełną ścieżkę do pliku SAM wewnątrz zamontowanego katalogu. Na ekranie pojawi się menu z opcjami pozwalającymi na różne modyfikacje pliku SAM. Aby usunąć hasło użytkownika, powinieneś wybrać opcję 1 - Clear (blank) user password.

Ophcrack Pakiet Ophcrack to program przeznaczony do łamania haseł systemu Windows w oparciu o tablice tęczowe. W systemie Kali Linux znajdziesz zarówno wersję konsolową, jak i wersję wyposażoną w graficzny interfejs użytkownika. Ophcrack potrafi importować wartości funkcji skrótu haseł w różnych formatach, łącznie ze skrótami pozyskanymi bezpośrednio z pliku SAM systemu Windows. Na następnym rysunku możesz zobaczyć kilka spośród dostępnych formatów wartości funkcji skrótu, które możesz załadować do programu Ophcrack.

183

Kali Linux. Testy penetracyjne

Pakiet Ophcrack posiada swoje własne, wbudowane, domyślne tablice tęczowe (zobacz kolejny rysunek), aczkolwiek zanim rozpoczniesz korzystanie z programu, zdecydowanie polecamy pobranie z internetu ich najnowszych wersji. Tablice tęczowe możesz pobrać z wielu źródeł internetowych, takich jak na przykład strona autora programu Ophcrack, http://ophcrack.sourceforge.net/tables.php.

Aby w systemie Kali Linux uruchomić program Ophcrack, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Password Attacks/Offline Attacks/ophcrack (wersja graficzna; wersję konsolową możesz wywołać za pomocą polecenia ophcrack-cli). Kiedy na ekranie pojawi się okno programu, kliknij przycisk Load i wybierz ścieżkę do pliku zawierającego hasła, które chcesz złamać (na przykład plik SAM z systemu Windows).

184

Rozdział 4. • Ataki na klienty aplikacji internetowych

W naszym przykładzie maszyna normalnie pracująca pod kontrolą systemu Windows została uruchomiona z płyty Kali Live CD; następnie wybraliśmy opcję Forensics. Plik SAM został skopiowany z katalogu /windows/system32/config. Więcej szczegółowych informacji na temat pracy z systemem Kali Linux w trybie Forensics znajdziesz w rozdziale 7., „Przeciwdziałanie i zapobieganie”.

Po załadowaniu pliku do programu Ophcrack powinieneś zobaczyć na ekranie listę nazw kont użytkowników i wartości funkcji skrótu ich haseł. Aby przystąpić do łamania haseł, kliknij przycisk Crack; potem pozostaje już tylko czekać na wyniki (zobacz pierwszy rysunek na następnej stronie).

Crunch Pakiet Crunch to narzędzie przeznaczone do generowania listy haseł. Takie narzędzie może być niezmiernie pomocne zwłaszcza w sytuacji, kiedy udało Ci się zdobyć informacje na temat sposobu generowania haseł w atakowanym systemie. Jeżeli udało Ci się na przykład przechwycić dwa hasła użytkowników i zauważyłeś, że każde z nich zawiera słowo, po którym następuje kilka losowych cyfr, to możesz użyć programu Crunch do szybkiego wygenerowania listy potencjalnych haseł (zobacz drugi rysunek na następnej stronie).

185

Kali Linux. Testy penetracyjne

W programie Crunch możesz używać kilku znaków specjalnych:  @ — wstawia małe litery,  % — wstawia cyfry,  , — wstawia wielkie litery,  ^ — wstawia symbole.

W naszym przykładzie założymy, że nasz cel używa hasła zawierającego ciąg znaków pass, po którym następują dwa nieznane znaki. Aby wykorzystać program Crunch do wygenerowania listy potencjalnych haseł, do reprezentacji nieznanych cyfr możesz użyć znaków %%. Na rysunku zamieszczonym poniżej przedstawiamy sposób użycia programu Crunch do wygenerowania listy haseł zawierających ciąg znaków pass i dwie cyfry, a następnie do zapisania ich na dysku, w pliku o nazwie newpasswordlist.txt.

186

Rozdział 4. • Ataki na klienty aplikacji internetowych

Plik będący wynikiem działania tego polecenia zawiera listę wszystkich możliwych kombinacji haseł (zgodnych z regułami podanymi przy wywołaniu programu). Na kolejnym rysunku przedstawiono początkowy fragment zawartości pliku.

Aby wygenerować hasła, które będą miały na końcu dwa znaki pisane małymi literami, powinieneś użyć polecenia crunch 6 6 -t pass@@, gdzie ciąg znaków @@ reprezentuje dwie małe litery, jak przedstawiono na następnym rysunku:

Teraz nasz tekstowy plik wynikowy zawiera hasła kończące się wszystkimi możliwymi kombinacjami dwuznakowego ciągu małych liter. Fragment zawartości pliku wynikowego został pokazany poniżej:

187

Kali Linux. Testy penetracyjne

Inne narzędzia dostępne w systemie Kali Linux Oczywiście w systemie Kali Linux możesz znaleźć wiele innych bardzo użytecznych narzędzi. W naszej książce z oczywistych powodów ograniczyliśmy się niemal wyłącznie do omawiania narzędzi, które można wykorzystać podczas przeprowadzania testów penetracyjnych aplikacji internetowych. W szczególności Kali Linux posiada wiele innych narzędzi wspomagających łamanie haseł, ale niestety przedstawianie ich wykracza już daleko poza ramy tej książki.

Hash-identifier Pakiet Hash-identifier to narzędzie napisane w języku Python, przeznaczone do identyfikacji typów haszowanych wartości. Większość narzędzi służących do łamania haseł, na przykład John the Ripper, posiada wbudowane bardzo dobre mechanizmy identyfikacji typów haszowanych wartości, których skuteczność przekracza nawet 90%. Program Hash-identifier może być wykorzystywany w sytuacji, kiedy musisz ręcznie dokonać identyfikacji danej wartości. Aby to zrobić, powinieneś uruchomić program Hash-identifier i wkleić do niego wartość, którą chcesz zidentyfikować. Na rysunku poniżej przedstawiono przykładowe wyniki działania programu.

188

Rozdział 4. • Ataki na klienty aplikacji internetowych

dictstat Pakiet dictstat to narzędzie napisane w języku Python, wykorzystywane do analizy słowników, list wyrazów i wyników działania programów do łamania haseł. Program dictstat analizuje podaną listę wyrazów i na ich podstawie tworzy maskę, której możesz użyć do przeprowadzenia ataku metodą siłową (brute-force). Dzięki takiej masce proces łamania haseł może zostać znacząco ułatwiony, zwłaszcza w sytuacji, kiedy w danym środowisku hasła są tworzone według określonych reguł, zgodnie z wdrożoną polityką bezpieczeństwa. Na rysunku poniżej przedstawiono ekran pomocy programu dictstat.

Aby uruchomić program dictstat, w oknie terminalu wpisz polecenie dictstat [opcje] passwords.txt. Na rysunku poniżej widnieje przykład wywołania polecenia dictstat.

RainbowCrack (rcracki_mt) Pakiet RainbowCrack to program do łamania haszowanych haseł, który potrafi samodzielnie generować tablice tęczowe, wykorzystywane później podczas łamania haseł. Program RainbowCrack działa inaczej niż standardowe programy do ataków siłowych, ponieważ wykorzystuje ogromne tablice wstępnie obliczonych wartości do zredukowania ilości czasu niezbędnego do złamania hasła. RainbowCrack to naprawdę ciekawa aplikacja o ogromnych możliwościach, acz-

189

Kali Linux. Testy penetracyjne

kolwiek w internecie można obecnie bez trudu znaleźć i pobrać rozbudowane tablice tęczowe, których potem możesz użyć w innych programach do łamania haseł. Tablice tęczowe możesz na przykład pobrać ze strony https://www.freerainbowtables.com/. Na rysunku poniżej został przedstawiony wygląd ekranu pomocy programu RainbowCrack.

findmyhash Pakiet findmyhash to skrypt napisany w języku Python, który do łamania haszowanych haseł wykorzystuje bezpłatne usługi sieciowe. Z tego względu do poprawnego działania tego narzędzia niezbędne jest aktywne połączenie z internetem. Na rysunku poniżej pokazano przykład działania programu findmyhash podczas próby złamania hasła zahaszowanego przy użyciu algorytmu MD5 (zobacz rysunek na następnej stronie).

phrasendrescher Pakiet phrasendrescher to modułowe i wielowątkowe narzędzie do łamania haseł. Program phrasendrescher posiada wiele wtyczek oraz interfejs API, dzięki któremu możesz tworzyć swoje własne wtyczki.

CmosPwd Pakiet CmosPwd to narzędzie przeznaczone do łamania haseł zabezpieczających BIOS komputera (ang. Basic Input Output System). Program ten pozwala na kasowanie, tworzenie kopii zapasowych i odtwarzanie zawartości pamięci CMOS.

190

Rozdział 4. • Ataki na klienty aplikacji internetowych

creddump Pakiet creddump to narzędzie napisane w języku Python, które umożliwia wydobywanie danych uwierzytelniających i innych sekretów z gałęzi rejestru systemu Windows. Program creddump potrafi wydobywać hasze LM oraz NT (szyfrowane za pomocą programu SYSKEY), przechowywane w systemie hasła użytkowników domenowych i sekrety LSA.

Podsumowanie Hosty działające pod kontrolą systemów Windows i Linux to najczęściej używane klienty aplikacji internetowych. Przełamanie zabezpieczeń hosta bardzo często pozwala pentesterowi na uzyskanie dostępu do aplikacji będącej celem ataku. Taka oczywista, zdawałoby się, możliwość ataku jest bardzo często pomijana w czasie wielu testów penetracyjnych. W tym rozdziale omawialiśmy wiele różnych metod pozwalających na uzyskanie nieautoryzowanego dostępu do hostów będących klientami aplikacji internetowych. Skoncentrowaliśmy się na metodach socjotechnicznych, identyfikacji hostów podatnych na ataki oraz metodach i narzędziach wspomagających łamanie haseł. W internecie, i nie tylko, można znaleźć wiele źródeł opisujących metody przełamywania zabezpieczeń systemów, które w połączeniu z informacjami przedstawionymi w tej książce mogą okazać się bardzo użyteczne. Zakres tematów omawianych w tym rozdziale został ograniczony do zagadnień związanych z przeprowadzaniem ataków na hosty będące klientami aplikacji internetowych. W kolejnym rozdziale będziemy zajmować się atakami, których celem są metody wykorzystywane przez aplikacje internetowe do uwierzytelniania klientów i użytkowników.

191

Kali Linux. Testy penetracyjne

192

5 Ataki na metody uwierzytelniania Uwierzytelnianie to proces potwierdzania tożsamości i uprawnień. Taki proces może obejmować potwierdzenie tożsamości użytkownika, programu czy urządzenia, na przykład potwierdzenie, że Jan Kowalski jest pracownikiem rządowym lub że jego laptop został przygotowany i wydany przez odpowiednią agencję rządową. Z punktu widzenia pentestera uzyskanie danych pozwalających na nieautoryzowane przejście procesu uwierzytelniania i zdobycie w ten sposób „zaufania” atakowanego systemu jest bardzo pożądane i pozwala na ominięcie większości zabezpieczeń mających przecież chronić przed intruzami, a nie przed praworządnymi użytkownikami systemu. Metodologia certyfikacji CISSP (ang. Certified Information Systems Security Professional) klasyfikuje uwierzytelnianie użytkowników w oparciu o trzy elementy:  Coś, co znasz, czyli na przykład kod PIN lub hasło dostępu.  Coś, co posiadasz, czyli na przykład token dynamicznie generujący kod dostępu.  Coś, co jest związane z Tobą, czyli na przykład odciski palców. Najczęściej spotykaną metodą potwierdzania tożsamości użytkownika jest używanie czegoś, co powinien znać tylko ten użytkownik, czyli na przykład hasła dostępu. Jak pamiętasz, różne metody łamania haseł omawialiśmy w rozdziale 4., „Ataki na klienty aplikacji internetowych”. Złamanie hasła może pozwolić na uzyskanie nieautoryzowanego dostępu do wielu systemów, aczkolwiek coraz częściej spotyka się systemy wyposażone w mechanizmy uwierzytelniania wieloskładnikowego, w których potwierdzanie tożsamości użytkownika składa się z wielu etapów. Najczęściej stosowany sposób uwierzytelniania użytkownika wymaga podania nazwy konta i hasła dostępu. Jednak taka metoda staje się uciążliwa, jeżeli użytkownik loguje się do wielu różnych systemów i za każdym razem musi mozolnie wpisywać nazwę konta i hasło. Aby rozwiązać

Kali Linux. Testy penetracyjne

ten problem, opracowana została metoda pojedynczego uwierzytelniania (SSO — ang. Single Sign-On), która polega na tym, że użytkownik loguje się tylko raz, do centralnego serwera uwierzytelniania, i po pomyślnym zalogowaniu może używać wszystkich innych autoryzowanych systemów korzystających z usług tego serwera. Dzięki takiemu rozwiązaniu cały proces weryfikacji użytkownika i ewentualnie urządzeń, z których on korzysta, jest przeprowadzany jednorazowo. Po jego pomyślnym zakończeniu użytkownik uzyskuje dostęp do innych, zaufanych systemów, bez konieczności każdorazowego przechodzenia uciążliwego procesu uwierzytelniania. Często spotykanym przykładem takiego rozwiązania są kontrolery domen Windows Active Directory, które weryfikują tożsamość użytkowników danej domeny i zapewniają dostęp do jej zasobów. Niestety, w takiej sytuacji przełamanie zabezpieczeń serwera uwierzytelniającego czy uzyskanie nieautoryzowanego dostępu do konta użytkownika posiadającego wysokie uprawnienia (na przykład administratora systemu) oznacza, że potencjalny napastnik automatycznie uzyskuje dostęp do wielu innych zasobów takiego środowiska. Wiele agencji rządowych oprócz tradycyjnych haseł dostępu wykorzystuje dodatkowe rozwiązania, takie jak osobista weryfikacja tożsamości (PIV — ang. Personal Identity Verification) czy systemy z kartami dostępu (CAC — ang. Common Access Card), czyli rozwiązania oparte na czymś, o czym użytkownik wie, i na czymś, co użytkownik posiada. Rozwiązaniem powszechnie stosowanym przez użytkowników pracujących zdalnie jest wykorzystywanie sprzętowych tokenów, generujących co kilkadziesiąt sekund nowy kilku- czy nawet kilkunastocyfrowy kod, który w połączeniu z PIN-em, znanym tylko użytkownikowi, zapewnia dostęp do systemu (w oparciu o coś, co użytkownik posiada, i o coś, co zna). W środowiskach wymagających szczególnej ochrony mogą być stosowane jeszcze inne, bardziej zaawansowane rozwiązania, takie jak skanery biometryczne (np. odciski palców) w połączeniu z osobistym kodem PIN użytkownika. Rozwiązania zabezpieczające dostęp do zasobów sieciowych mogą na przykład sprawdzać sposób, w jaki użytkownik zalogował się na swoim laptopie, lub sprawdzać, czy na danym urządzeniu jest zainstalowany specjalny, ukryty certyfikat potwierdzający jego autentyczność i potwierdzający tożsamość użytkownika przed udzieleniem mu dostępu do chronionych zasobów sieciowych. Z punktu widzenia pentestera szczegółowa identyfikacja metod uwierzytelniania użytkowników wykorzystywanych w środowisku celu jest jednym z kluczowych elementów fazy rozpoznania, pozwalających na odpowiednie przygotowanie strategii ataku i ominięcie zabezpieczeń systemu (zobacz rysunki na następnej stronie). W tym rozdziale skoncentrujemy się na metodach wykorzystywanych do uwierzytelniania użytkowników i urządzeń w aplikacjach internetowych oraz na omawianiu sposobów przełamywania takich zabezpieczeń. Rozpoczniemy od atakowania procesu zarządzania sesjami uwierzytelniania, który odpowiada za nawiązanie zaufanej sesji pomiędzy klientem i serwerem. Następnie skoncentrujemy się na klientach i opowiemy o przeprowadzaniu ataków na sposoby przechowywania danych poprzez mechanizmy zarządzające ciasteczkami sesji. W dalszej części opowiemy, w jaki sposób ukryć się w sesji pomiędzy klientem a serwerem, wykorzystując do tego celu ataki typu man-in-the-middle. Na końcu tego rozdziału będą omówione zagadnienia związane z identyfikacją podatności i luk w zabezpieczeniach mechanizmów odpowiadających za przesyłanie danych uwierzytelniających pomiędzy aplikacją i klientem oraz wykorzystywaniem takich luk za pomocą wstrzykiwania kodu SQL i ataków typu XSS (ang. cross-site scripting).

194

Rozdział 5. • Ataki na metody uwierzytelniania

Ataki na zarządzanie sesjami Z punktu widzenia pentestera zagadnienia związane z uwierzytelnianiem i zarządzaniem sesjami obejmują wszystkie aspekty potwierdzania tożsamości użytkownika i zarządzania aktywnymi sesjami. W odniesieniu do aplikacji internetowych sesja to czas, który użytkownik spędza na przeglądaniu danej witryny internetowej. Dobrą praktyką jest zarządzanie sesjami oparte na sposobach uwierzytelniania użytkowników i urządzeń, jak również na sprawdzaniu, jakie zasoby są przez nich (przez nie) wykorzystywane i przez jaki okres. Celem każdego pentestera jest identyfikacja kont użytkowników, którzy mają prawo nawiązywania sesji z aplikacją internetową przy użyciu podniesionych uprawnień i przez nielimitowany okres. To właśnie ze względu na ten fakt opracowane zostały takie mechanizmy bezpieczeństwa, jak wprowadzenie limitów czasu, po którym nieaktywna sesja traci ważność, czy wdrożenie certyfikatów SSL. Jednak bez względu na to narzędzia, które możesz znaleźć w systemie Kali Linux, są w stanie zidentyfikować potencjalnie słabe strony i luki w zabezpieczeniach mechanizmu zarządzania sesjami, takie jak możliwość przechwycenia identyfikatora sesji po wylogowaniu się użytkownika i wykorzystania tego identyfikatora do ustanowienia sesji dla innego użytkownika (ang. session fixation attack). Do przeprowadzania ataków na zarządzanie sesjami mogą być wykorzystywane podatności i luki w zabezpieczeniach aplikacji oraz metodach dostępu i uwierzytelniania użytkowników. Potencjalni napastnicy najczęściej stosują takie metody, jak iniekcje kodu SQL czy ataki typu XSS, o których będziemy mówić w nieco dalszej części tego rozdziału. Napastnicy mogą również wykorzystywać ciasteczka sesji, zapisywane przez przeglądarki, czy luki w zabezpieczeniach witryn internetowych. Nasze rozważania rozpoczniemy od omówienia technik pozwalających na przekonanie użytkowników do ujawnienia wrażliwych informacji czy wystawienia się na atak poprzez odpowiednie zmodyfikowanie hiperłączy i obiektów iFrame. 195

Kali Linux. Testy penetracyjne

Clickjacking Clickjacking (w wolnym tłumaczeniu: „porywanie kliknięć”) to technika polegająca na wprowadzeniu użytkownika w przekonanie, że kliknął na stronie dany obiekt czy łącze, podczas gdy w rzeczywistości kliknął zupełnie inny obiekt podstawiony przez napastnika. Clickjacking może być wykorzystywany do pozyskiwania poufnych informacji, takich jak nazwa konta użytkownika i hasło, ale równie dobrze może posłużyć napastnikowi do przejęcia kontroli nad komputerem użytkownika. Technika ta zazwyczaj opiera się na wykorzystaniu błędów w zabezpieczeniach przeglądarki. Do tego celu używa się odpowiednio spreparowanego kodu lub skryptu, który jest wykonywany bez wiedzy użytkownika. Jednym z przykładów zastosowania techniki clickjacking jest spreparowanie hiperłącza prowadzącego do dobrze znanej użytkownikowi, zaufanej strony. Po kliknięciu tego hiperłącza użytkownik jest przenoszony na inną stronę, przygotowaną przez napastnika. Przeciętny użytkownik przed kliknięciem zazwyczaj nie sprawdza, dokąd prowadzi dane hiperłącze, ani nie zauważa zmian, jakie wprowadza zastosowanie techniki Clickjacking, co powoduje, że jest to bardzo efektywna forma ataku. W przykładzie, który przedstawiamy poniżej, użytkownik zobaczy na stronie łącze Visit us on Facebook.com, jednak kiedy kliknie takie łącze, zostanie przeniesiony na stronę www.badfacebook.com. Visit Us on Facebook.com

Clickjacking może być jednak o wiele bardziej złowieszczy i wyrafinowany niż przedstawiony przez nas prosty przykład modyfikacji łącza. Napastnicy do przeprowadzenia takiego ataku bardzo często wykorzystują odpowiednio spreparowany obiekt iFrame, który jest osadzany w kodzie strony internetowej. W kodzie ramki iFrame znajduje się łącze prowadzące na stronę przygotowaną przez napastnika, a sama ramka jest najczęściej przezroczysta i umieszczona na stronie nad prawdziwym łączem, co powoduje, że jest niezmiernie trudna do wykrycia. Aby przygotować swój własny atak typu Clickjacking, możesz użyć narzędzia napisanego przez Paula Stone’a, które jest do pobrania na stronie http://www.contextis.com/research/tools/ clickjacking-tool/.

Po zakończeniu pobierania i zainstalowaniu programu możesz użyć go do pobrania odpowiedniego kodu z określonej strony internetowej (może to być na przykład kod generujący przycisk głosowania czy słynny już przycisk Lubię to!). Program działa w Firefoksie w wersji 3.6 i niestety nie będzie działał poprawnie w nowszych wersjach tej popularnej przeglądarki. Nie jest to jednak specjalne utrudnienie, ponieważ w systemie Kali Linux możesz uruchomić różne wersje przeglądarki Firefox, włącznie z wersją 3.6 i starszymi. 196

Rozdział 5. • Ataki na metody uwierzytelniania

Kod źródłowy popularnych stron internetowych zazwyczaj szybko się zmienia. Przygotowując atak z wykorzystaniem techniki Clickjacking, powinieneś zwracać na to uwagę i odpowiednio dostosowywać swój kod do zmieniającego się oryginału.

Przechwytywanie ciasteczek sesji Ciasteczka (ang. cookies) to małe pliki danych przesyłane ze strony internetowej i zapisywane przez przeglądarkę na dysku lokalnym komputera użytkownika. Witryna internetowa może wykorzystywać ciasteczka do monitorowania odwiedzin użytkownika i sprawdzania jego aktywności. Dzięki ciasteczkom witryna może sprawdzać, jakie inne strony odwiedzał użytkownik, jak logował się na stronie czy jakie klikał przyciski. Za każdym razem, kiedy logujesz się na witrynie internetowej, takiej jak Facebook, Gmail czy WordPress, Twoja przeglądarka zapisuje na Twoim dysku odpowiednie ciasteczko. Ciasteczka mogą śledzić aktywność użytkownika i jego zachowanie na stronie w długich okresach, na przykład w ciągu roku. Mogą również przechowywać hasła i wartości, jakie użytkownik wpisywał w pola formularzy, takie jak na przykład adres czy numer karty kredytowej. Jest to bardzo użyteczne w niektórych zastosowaniach i często ułatwia życie użytkownikowi. Token sesji jest dostarczany z serwera internetowego za każdym razem, kiedy klient połączy się z serwerem i pomyślnie dokona uwierzytelnienia. Token sesji jest wykorzystywany do rozpoznawania danej sesji wśród innych połączeń. Przechwytywanie sesji (ang. session hijacking) następuje w sytuacji, kiedy napastnikowi uda się przechwycić token sesji ofiary i przenieść go do sesji własnej przeglądarki — dzięki czemu uzyskuje dostęp do uwierzytelnionej już wcześniej sesji użytkownika będącego ofiarą ataku. Mówiąc w uproszczeniu, taki atak polega na zastąpieniu nieautoryzowanego ciasteczka w przeglądarce napastnika autoryzowanym ciasteczkiem przechwyconym z sesji ofiary. Ataki polegające na przechwytywaniu sesji podlegają jednak pewnym ograniczeniom:  Przechwytywanie ciasteczek nie ma większego sensu, gdy ofiara przegląda strony, których adres rozpoczyna się od https:// i połączenie między serwerem a klientem jest szyfrowane. Wdrażanie takiego szyfrowania odbywa się powoli, ale najlepiej zabezpieczone witryny internetowe używają właśnie takiego rozwiązania w celu uniemożliwienia przechwycenia sesji użytkownika. Aby uniemożliwić ofierze ustanowienie szyfrowanego połączenia https, to zanim rozpoczniesz przechwytywanie sesji bądź inny atak, użyj omawianego już wcześniej pakietu SSLstrip. Więcej szczegółowych informacji na temat tego narzędzia znajdziesz w rozdziale 3., „Ataki na serwery aplikacji internetowych”.

197

Kali Linux. Testy penetracyjne

 Większość ciasteczek traci ważność w momencie, kiedy użytkownik wylogowuje się

z systemu, co oczywiście powoduje również wylogowanie z systemu napastnika. Warto jednak zauważyć, że wiele aplikacji mobilnych wykorzystuje ciasteczka, których ważność nigdy nie wygasa, co oznacza, że jeżeli napastnikowi uda się przechwycić token takiej sesji, to może uzyskać dostęp do aplikacji na prawach użytkownika bez żadnych ograniczeń czasowych. Bardzo wiele witryn i aplikacji internetowych nie pozwala na jednoczesne utrzymywanie równoległych sesji, co w pewnym sensie utrudnia wykorzystanie przechwyconych ciasteczek zawierających token sesji.

Narzędzia do przechwytywania sesji W kolejnym podrozdziale omówimy narzędzia przeznaczone do testów penetracyjnych sesji sieciowych. Niektórych z tych narzędzi nie znajdziesz w systemie Kali Linux 1.0, aczkolwiek bez większych problemów możesz je pobrać z internetu.

Wtyczki przeglądarki Firefox Jednym ze sposobów przechwycenia sesji jest kradzież ciasteczka uwierzytelniającego sesję ofiary. Najczęściej wykorzystywaną metodą osiągnięcia takiego celu jest wstrzyknięcie odpowiednio przygotowanego skryptu na skompromitowany serwer aplikacji internetowych. Zadaniem tego skryptu będzie przechwytywanie ciasteczek sesji bez wiedzy ofiary. Gdy napastnik umieści skrypt na serwerze, może rozpocząć gromadzenie takich ciasteczek. Wykorzystując narzędzie pozwalające na wstrzykiwanie ciasteczek (ang. cookie injector tool), napastnik może próbować podmienić nieautoryzowane ciasteczko swojej sesji na skradzione wcześniej, autoryzowane ciasteczko uwierzytelniające ofiary. Innymi metodami wykorzystywanymi do wykradania ciasteczek jest nasłuchiwanie i przechwytywanie pakietów sieciowych czy uzyskiwanie nieautoryzowanego dostępu do hosta będącego klientem danej aplikacji internetowej. O wykradaniu ciasteczek opowiemy jeszcze w dalszej części tego rozdziału. Istnieje bardzo dużo wtyczek do Firefoksa, które mogą być wykorzystywane do wstrzykiwania wykradzionych ciasteczek do przeglądarki napastnika. Przykładami mogą być takie wtyczki, jak Greasemonkey, Cookies Manager+ czy Firesheep. Ze względu na liczbę dostępnych wtyczek pozwalających na zarządzanie ciasteczkami powinieneś po prostu zajrzeć na witrynę z wtyczkami i dodatkami do Firefoksa i samodzielnie wybrać wtyczkę lub wtyczki, które najlepiej będą spełniały Twoje oczekiwania. Pamiętaj, że zarówno przeglądarka Firefox, jak i wtyczki nie są domyślnie zainstalowane w systemie Kali Linux 1.0.

198

Rozdział 5. • Ataki na metody uwierzytelniania

Firesheep — wtyczka przeglądarki Firefox Firesheep to wtyczka przeglądarki Firefox, klasyczne narzędzie penetracyjne, przeznaczone do audytowania sesji WWW. Trzeba przyznać, że niektóre wersje tej wtyczki w połączeniu z najnowszymi wydaniami Firefoksa zachowywały się niestabilnie. Firesheep działa jak program do nasłuchiwania pakietów sieciowych (ang. network sniffer), który pozwala na przechwytywanie niezabezpieczonych ciasteczek sesji przesyłanych między serwerem a klientami w sieci. Oficjalnie wtyczka Firesheep jest przygotowana do współpracy z przeglądarką Firefox na platformach Windows i MAC, co sprawia, że korzystanie z niej w systemie Linux jest nieco kłopotliwe. Oczywiście przy pewnej dozie samozaparcia można sprawić, że będzie działała poprawnie w przeglądarce Firefox w Linuksie, ale mimo to zdecydowanie polecamy korzystanie z innych narzędzi w tym systemie.

Web Developer — wtyczka przeglądarki Firefox Web Developer to wtyczka przeglądarki Firefox przeznaczona dla twórców witryn internetowych. Wtyczka ta oferuje narzędzia wspomagające edycję kodu, wyszukiwanie błędów i rozwiązywanie problemów. Możesz ją pobrać z internetowego repozytorium wtyczek przeglądarki Firefox. Jedną z cech wtyczki Web Developer, pozwalających na jej zastosowanie do przechwytywania sesji, jest jej zdolność do edytowania zawartości ciasteczek. Opcję tę możesz znaleźć w menu przeglądarki po zainstalowaniu wtyczki, jak przedstawiono na rysunku poniżej:

Wybierz opcję View Cookie Information — na ekranie pojawi się lista zapisanych ciasteczek. Teraz wybierz polecenie Edit Cookie, co spowoduje uruchomienie edytora ciasteczek i pozwoli na zastąpienie bieżącego ciasteczka wykradzionym ciasteczkiem ofiary.

199

Kali Linux. Testy penetracyjne

Greasemonkey — wtyczka przeglądarki Firefox

Greasemonkey to wtyczka przeglądarki Firefox pozwalająca użytkownikowi na instalowanie skryptów, które umożliwiają zmianę zawartości przeglądanych stron internetowych „w locie”, przed lub po tym, jak strona wyświetli się w oknie przeglądarki. Greasemonkey może być wykorzystywany do dostosowywania wyglądu stron internetowych, zmiany sposobu działania funkcji WWW, debugowania, dołączania danych z innych stron internetowych itp. Wtyczka Greasemonkey jest niezbędna do tego, aby wiele innych narzędzi, takich jak Cookie Injector, działało poprawnie.

Cookie Injector — wtyczka przeglądarki Firefox Cookie Injector to skrypt użytkownika, który znakomicie upraszcza proces zarządzania ciasteczkami przeglądarki. Ręczne zaimportowanie przechwyconego ciasteczka z programu takiego jak Wireshark do przeglądarki nie jest wcale takie trywialne i wymaga wykonania wielu operacji. Wtyczka Cookie Injector pozwala użytkownikowi na tworzenie ciasteczek sesji za pomocą prostego kopiowania i wklejania danych przechwyconych przez program Wireshark. Aby wtyczka Cookie Injector mogła działać poprawnie, wymagane jest wcześniejsze zainstalowanie wtyczki Greasemonkey.

Poszukaj aktualnej wersji wtyczki Cookie Injector, korzystając np. z wyszukiwarki Google. Kiedy rozpoczniesz pobieranie, wyświetli się okno dialogowe wtyczki Greasemonkey, zawierające prośbę o zgodę na zainstalowanie wtyczki Cookie Injector.

200

Rozdział 5. • Ataki na metody uwierzytelniania

Gdy wtyczka Cookie Injector zostanie zainstalowana, użyj kombinacji klawiszy lewy Alt+C. Wyświetli się okno dialogowe — w polu tekstowym wklej ciąg znaków reprezentujący ciasteczko, pobrany z programu Wireshark, i kliknij przycisk OK, co spowoduje wstrzyknięcie ciasteczka do bieżącej strony. W podrozdziale poświęconym programowi Wireshark znajdziesz szczegółowe informacje o tym, jak przy użyciu poleceń Copy, Bytes oraz Printable Text Only przygotować dane dla wtyczki Cookie Injector. Na kolejnych dwóch rysunkach przedstawiono okno dialogowe, które pojawia się na ekranie po zastosowaniu kombinacji klawiszy lewy Alt+C i wklejeniu zawartości ciasteczka w polu Wireshark Cookie Dump, oraz okno, które pojawia się na ekranie po zapisaniu ciasteczek przez przeglądarkę.

Cookies Manager+ — wtyczka przeglądarki Firefox Wtyczka Cookies Manager+ to narzędzie pozwalające na przeglądanie i edytowanie istniejących ciasteczek oraz tworzenie nowych. Cookies Manager+ wyświetla dokładne informacje o ciasteczkach i pozwala na edytowanie wielu ciasteczek jednocześnie. Wtyczka ta umożliwia również tworzenie kopii zapasowych i odtwarzanie ciasteczek. Możesz ją pobrać z repozytorium sieciowego wtyczek przeglądarki Firefox. Zainstalowaną wtyczkę możesz uruchomić, wybierając z menu głównego przeglądarki polecenie Tools/Cookies Manager+ (zobacz pierwszy rysunek na następnej stronie). Wtyczka Cookies Manager+ wyświetla listę wszystkich ciasteczek zapisanych przez przeglądarkę Firefox. Jeżeli chcesz znaleźć określone ciasteczko i przeglądać lub edytować jego zawartość, przewiń listę w górę lub w dół. W przykładzie, który przedstawiono poniżej, zaznaczone zostało ciasteczko powiązane z witryną www.thesecurityblogger.com (zobacz drugi rysunek na następnej stronie).

201

Kali Linux. Testy penetracyjne

Wtyczka Cookies Manager+ umożliwia łatwe edytowanie zawartości ciasteczek, co znakomicie ułatwia przeprowadzanie różnego rodzaju ataków, takich jak przechwytywanie sesji czy wstrzykiwanie kodu SQL.

202

Rozdział 5. • Ataki na metody uwierzytelniania

Cookie Cadger Pakiet Cookie Cadger to narzędzie penetracyjne, przeznaczone do audytowania sesji sieciowych WWW. Narzędzie to pozwala na przechwytywanie, analizowanie i przekazywanie nieszyfrowanych żądań HTTP GET. Cookie Cadger umożliwia analizę ruchu zarówno w sieciach bezprzewodowych, jak i kablowych, ale możesz również załadować do niego plik zawierający zestaw przechwyconych pakietów w formacie PCAP. Program Cookie Cadger posiada również mechanizm pozwalający na wykrywanie, czy użytkownik zalogował się do serwisów takich jak WordPress czy Facebook. Niektórzy uważają, że Cookie Cadger to po prostu wtyczka Firesheep na sterydach. Pakiet Cookie Cadger nie jest domyślnie instalowany w systemie Kali Linux 1.0.

Program Cookie Cadger możesz pobrać ze strony https://www.cookiecadger.com/. Instalator programu ma postać pliku JAR. Możesz go uruchomić, klikając go dwukrotnie lewym przyciskiem myszy. Na ekranie pojawi się okno dialogowe z pytaniem, czy chcesz włączyć opcję wykrywania sesji. Kliknij przycisk Yes. Wyświetli się główne okno programu. Oba okna dialogowe zostały przedstawione na kolejnych dwóch rysunkach.

203

Kali Linux. Testy penetracyjne

Aby rozpocząć korzystanie z programu, wybierz z listy odpowiedni interfejs sieciowy i kliknij przycisk Start Capture. Program Cookie Cadger pozwala na używanie wielu interfejsów sieciowych (o ile oczywiście dany system jest w takie wyposażony). Cookie Cadger potrafi rozpoznać niemal wszystkie urządzenia w danej sieci. Na przykład na rysunku przedstawionym poniżej możemy zobaczyć, że Cookie Cadger znalazł maszynę działającą pod kontrolą systemu Linux na platformie i686, na której uruchomione są przeglądarki Firefox i Iceweasel.

Najnowsze dane o aktywnej sesji są wyświetlane w kolorze niebieskim. W przypadku każdej sesji możesz przeglądać szczegółowe informacje na temat odwiedzanych przez klienta witryn, takie jak nazwa NetBIOS urządzenia czy nazwa hosta. Przechwycone żądania możesz kopiować, możesz pobierać z nich takie informacje, jak dane o użytkownikach czy adresy MAC. W każdej sekcji znajdziesz karty filtrów, za pomocą których możesz skoncentrować swoje poszukiwania tylko na wybranych hostach (na przykład wyświetlać tylko wyniki dotyczące domen serwisu Facebook).

204

Rozdział 5. • Ataki na metody uwierzytelniania

Za każdym razem, kiedy Cookie Cadger rozpozna sesję logowania, jest ona automatycznie przechwytywana i możesz ją później załadować do przeglądarki w celu dokładniejszej analizy. Na kolejnym rysunku przedstawiono przechwyconą sesję logowania administratora do serwisu www.thesecurityblogger.com. Cookie Cadger wyświetla ikonę serwisu oraz informacje o typie przechwyconej sesji. Może to być na przykład logowanie do serwisu Hotmail, Facebook czy, jak w tym przypadku, WordPress.

Aby wyświetlić rozpoznane i przechwycone sesje, przejdź na kartę Recognized Sessions i zaznacz żądaną sesję, jak przedstawiono na poprzednim rysunku. Po zaznaczeniu sesji kliknij przycisk Load Selected Session, co spowoduje jej załadowanie i odtworzenie. W dolnej części okna pojawi się komunikat Loading request into browser, please wait…, następnie program Cookie Cadger uruchomi przeglądarkę i załaduje do niej wybraną, przechwyconą sesję logowania. Na kolejnym rysunku przedstawiono otwieranie ciasteczka domenowego, przechwyconego z sesji ofiary. Gdy zakończy się ładowanie, w oknie przeglądarki pojawi się przechwycona strona internetowa otwarta na takich prawach, na jakie pozwala wykradzione ciasteczko sesji.

Aby wyświetlić informacje o żądaniach z danej sesji, kliknij ikonę przechwyconej sesji prawym przyciskiem myszy i z menu podręcznego wybierz polecenie View Associated Request.

205

Kali Linux. Testy penetracyjne

Po wybraniu tego polecenia zostaniesz przeniesiony na kartę Requests, gdzie będziesz mógł przeglądać zawartość sesji.

Wireshark

Wireshark to jeden z najpopularniejszych, bezpłatnych i otwartych (open source) analizatorów pakietów sieciowych. Pakiet Wireshark jest preinstalowany w systemie Kali Linux. To idealne narzędzie do wyszukiwania i diagnozowania problemów z połączeniami sieciowymi oraz do analizowania pakietów. Z naszego punktu widzenia jest to również świetne narzędzie do monitorowania ruchu sieciowego generowanego przez interesujące nas hosty i do przechwytywania ciasteczek zawierających tokeny sesji. Graficzny interfejs użytkownika pakietu Wireshark został zaimplementowany przy użyciu bibliotek GTK+, a do przechwytywania pakietów wykorzystywana jest biblioteka pcap. Program działa podobnie jak polecenie tcpdump, aczkolwiek dodatkowo oferuje użytkownikowi wygodny, graficzny interfejs zintegrowany z rozbudowanymi mechanizmami sortowania i filtrowania pakietów. Aby uruchomić program Wireshark, w menu głównym systemu Kali Linux przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/Network Sniffers/wireshark. Program Wireshark możesz również znaleźć w menu Kali Linux/Top 10 Security Tools.

206

Rozdział 5. • Ataki na metody uwierzytelniania

Aby rozpocząć przechwytywanie ruchu sieciowego, z menu głównego wybierz polecenie Capture/Interfaces. Na ekranie pojawi się okno dialogowe Wireshark: Capture Interfaces, gdzie znajdziesz listę dostępnych interfejsów sieciowych. W naszym przypadku zaznaczymy interfejs eth0. Po wybraniu interfejsu sieciowego kliknij przycisk Start. Ruch sieciowy nie będzie przechwytywany, jeżeli wybrany interfejs sieciowy nie obsługuje trybu nasłuchiwania (ang. promiscuous mode) lub jeżeli Twój system operacyjny nie potrafi przełączyć interfejsu sieciowego na taki tryb pracy. Więcej szczegółowych informacji na temat różnych trybów przechwytywania pakietów sieciowych oraz wyszukiwania błędów i rozwiązywania problemów znajdziesz na stronie http://www.wireshark.org/.

Wireshark przechwytuje cały ruch sieciowy, jaki dociera do wybranego interfejsu. Przechwycone pakiety mogą być filtrowane za pomocą odpowiednich wzorców wpisywanych w polu Filter lub poprzez sortowanie danych według poszczególnych kolumn tabeli, takich jak Protocol czy Destinations.

207

Kali Linux. Testy penetracyjne

Ponieważ Wireshark przechwytuje ogromną ilość danych, odpowiednie filtrowanie staje się niezmiernie ważnym zadaniem i pozwala na szybkie wyszukiwanie określonych informacji, takich jak niezabezpieczone ciasteczka (ang. unsecured cookies). Na przykład połączenia z pocztą Gmail są domyślnie szyfrowane, aczkolwiek zawsze możesz spróbować wyłączyć https i poszukać w ciasteczkach parametru GX, który pozwala na zidentyfikowanie niezabezpieczonych ciasteczek serwisu Gmail. Na kolejnym rysunku przedstawiono wygląd okna programu Wireshark, który przechwycił ciasteczko z sesji logowania do bloga WordPress.

Po przechwyceniu niezabezpieczonego ciasteczka możesz je wstrzyknąć do swojej przeglądarki (w tym celu musisz użyć innego narzędzia) i w ten sposób przechwycić sesję internetową ofiary. Aby to zrobić, kliknij prawym przyciskiem myszy wiersz zawierający ciasteczko sesji ofiary i następnie z menu podręcznego wybierz polecenie Copy/Bytes/Printable Text Only. Teraz możesz wkleić skopiowane ciasteczko bezpośrednio do wtyczki Cookie Injector w przeglądarce Firefox. Więcej szczegółowych informacji na temat tej wtyczki znajdziesz w podrozdziale „Cookie Injector — wtyczka przeglądarki Firefox”, w nieco wcześniejszej części tego rozdziału. Aby mieć możliwość wstrzykiwania ciasteczek do przeglądarki Firefox, musisz wcześniej zainstalować wtyczki Greasemonkey oraz Cookie Injector.

Istnieje dużo ciekawych narzędzi, które potrafią analizować i przetwarzać dane przechwytywane i zapisywane przez program Wireshark. Przykładem takiego narzędzia jest NetWitness Investigator. Program ten możesz bezpłatnie pobrać ze strony http://www.emc.com/security/rsa-netwitness. htm#!freeware.

Pakiety Hamster i Ferret Hamster to narzędzie pozwalające na wykradanie ciasteczek z sesji HTTP przy zastosowaniu mechanizmu pasywnego nasłuchiwania. Takie rozwiązanie jest znane również pod nazwą Sidejacking. Program analizuje ruch przechodzący przez dany interfejs sieciowy, automatycznie

208

Rozdział 5. • Ataki na metody uwierzytelniania

przechwytuje wszystkie znalezione ciasteczka sesji, a następnie importuje je do przeglądarki, dzięki czemu napastnik może odtworzyć sesję ofiary. Do przechwytywania ciasteczek Hamster używa narzędzia o nazwie Ferret. Aby uruchomić program Hamster w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/WebSniffers/hamster. Na ekranie pojawi się okno terminalu, w którym działa usługa programu Hamster. Domyślny adres używanego serwera proxy to 127.0.0.1:1234.

Aby skorzystać z programu Hamster, uruchom przeglądarkę i w pasku adresu wpisz http:// 127.0.0.1:1234.

Aby Hamster mógł realizować swoje zadanie, cały ruch sieciowy musi zostać przekierowany na jego serwer proxy. Aby wybrać interfejs sieciowy, kliknij łącze adapters. W naszym przypadku będziemy nasłuchiwać przez interfejs eth0.

209

Kali Linux. Testy penetracyjne

Po wybraniu interfejsu sieciowego zostaniesz przeniesiony na stronę usługi Sidejacking. Zauważ jednak, że na razie nie są wyświetlane na niej żadne pakiety sieciowe. Dzieje się tak, ponieważ Hamster do poprawnej pracy potrzebuje programu, który jest w stanie przechwytywać ruch sieciowy. Możesz do tego celu użyć narzędzia o nazwie Ferret. Aby je uruchomić, w menu głównym systemu przejdź do grupy Kali Linux i wybierz polecenie Sniffing/Spoofing/Web Sniffers/ferret. Na ekranie pojawi się okno terminalu, zawierające ekran pomocy programu Ferret. Aby rozpocząć nasłuchiwanie i przechwytywanie pakietów, wpisz polecenie ferret -i nazwa_interfejsu. Ferret potwierdzi rozpoczęcie działania. Informacje o przechwyconym ruchu sieciowym mają postać tekstową i są wyświetlane w oknie terminalu.

Po uruchomieniu programu Ferret powróć do okna przeglądarki z programem Hamster, gdzie tym razem powinieneś już zobaczyć informacje o przechwyconych pakietach sieciowych. Hamster wyświetla dane o pakietach ze wszystkich hostów pracujących w określonej sieci. Aby zobaczyć ciasteczka przechwycone z sesji danego hosta, po prostu kliknij jego nazwę lewym przyciskiem myszy.

Aby przejść do przechwyconej sesji, kliknij wybrane ciasteczko. W naszym przykładzie wybraliśmy ciasteczko sesji z witryny www.thesecurityblogger.com.

210

Rozdział 5. • Ataki na metody uwierzytelniania

Atak typu man-in-the-middle Atak typu man-in-the-middle to forma aktywnego nasłuchiwania i przechwytywania pakietów — napastnik ustanawia osobne połączenia z ofiarami i działa jak swego rodzaju stacja przekaźnikowa, powodując, że ofiary są przekonane, że „rozmawiają” ze sobą bezpośrednio. Istnieją różne odmiany takiego ataku, jak choćby wykorzystanie bezprzewodowego routera Hak5 Pineapple, który udaje zaufany punkt dostępowy sieci bezprzewodowej, podczas gdy w rzeczywistości działa jako pośrednik między prawdziwą siecią bezprzewodową a ofiarami, dając napastnikowi możliwość monitorowania całego ruchu sieciowego. Innym przykładem może być wykorzystanie systemu Kali Linux do przekazywania ruchu sieciowego pomiędzy ofiarą a domyślnym routerem przy jednoczesnym nasłuchiwaniu i analizie ruchu sieciowego w celu przechwytywania użytecznych dla napastnika informacji, takich jak nazwa konta użytkownika czy hasło. Wiele serwisów oferujących usługi w chmurze, na przykład Facebook czy Gmail, wykorzystuje mechanizmy bezpiecznego logowania z użyciem protokołu HTTPS, co skutecznie utrudnia przeprowadzenie ataków typu man-in-the-middle. Aby ominąć takie zabezpieczenia, możesz użyć narzędzi takich jak SSLstrip, które są w stanie przechwycić takie połączenia i wydobyć z nich interesujące Cię dane. Połączenie ataków SSLstrip i man-in-the-middle jest bardzo efektywną metodą przechwytywania danych logowania użytkowników, oczywiście przy założeniu, że masz dostęp do systemu znajdującego się w tej samej sieci co systemy potencjalnych ofiar.

211

Kali Linux. Testy penetracyjne

Narzędzia dsniff i arpspoof Pakiet dsniff to zestaw narzędzi przeznaczonych do analizy ruchu sieciowego, przechwytywania haseł i wydobywania informacji z różnych protokołów sieciowych1. Pakiet arpspoof może być wykorzystywany przez napastnika do wysyłania fałszywych pakietów ARP (ang. Address Resolution Protocol) w lokalnej sieci komputerowej. Celem takiej operacji może być próba powiązania adresu MAC komputera napastnika z adresem IP ofiary, dzięki czemu ruch sieciowy kierowany do takiego adresu IP może być przekazywany do komputera napastnika. Jednym z manualnych sposobów przeprowadzania ataków typu man-in-the-middle jest użycie pakietów arpspoof i dsniff do „zainstalowania” komputera napastnika pomiędzy systemami ofiar. Pierwszym krokiem jest identyfikacja adresów IP ofiary oraz używanej przez ofiarę domyślnej bramy sieciowej. Możesz tego dokonać za pomocą technik opisywanych w rozdziale 2., „Rekonesans”. Kiedy poznasz adres IP ofiary, musisz „przekonać” jej komputer, że Twoja maszyna to tak naprawdę zupełnie inny system albo — jeszcze lepiej — jej domyślna brama sieciowa. Jeżeli na przykład adres IP ofiary to 172.16.76.128, adres IP domyślnej bramy to 172.16.76.2, a adres IP Twojej maszyny to 172.16.76.131, to za pomocą pakietu arpspoof możesz spowodować, że Twój adres IP będzie przypisany do adresów MAC zarówno ofiary, jak i domyślnej bramy sieciowej. Aby to zrobić, otwórz dwa okna terminalu i w każdym z nich wpisz jedno z poleceń przedstawionych poniżej, co spowoduje „oszukanie” Twoich ofiar (zobacz rysunek na następnej stronie): TERMINAL 1: arpspoof -t 172.16.76.128 172.16.76.2 // wprowadza ofiarę w przekonanie, że Twój komputer to brama domyślna

TERMINAL 2: arpspoof -t 172.16.76.2 172.16.76.128 // wprowadza bramę w przekonanie, że Twój komputer to komputer ofiary

Jeżeli poprawnie wpiszesz polecenia przedstawione powyżej, to zobaczysz, że ruch sieciowy między ofiarą i bramą domyślną jest teraz przekazywany do Twojego komputera. Zwróć jednak uwagę, że gdy pakiety dotrą do Twojego komputera, nie są już nigdzie dalej przekazywane, zatem pakiety wysyłane przez ofiarę nie docierają do sieci i na odwrót. Aby przeprowadzić atak do końca, powinieneś włączyć przekazywanie pakietów IP, tak aby cały ruch wysyłany

1

Dsniff poprawnie interpretuje m.in. takie protokoły sieciowe, jak: FTP, Telnet, SMTP, HTTP, POP, NNTP, IMAP, SNMP, LDAP, RLogin, RIP, OSPF, PPTP MS-CHAP, NFS, VRRP, YP/NIS, SOCKS, X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Citrix ICA, Symantec pcAnywhere, NAI Sniffer, Microsoft SMB, Oracle SQL Net czy Sybase — przyp. tłum.

212

Rozdział 5. • Ataki na metody uwierzytelniania

przez bramę do ofiary i przez ofiarę do bramy docierał do miejsca przeznaczenia (oczywiście z małym przystankiem na Twoim komputerze). Dzięki takiemu rozwiązaniu ofiara będzie mogła bez przeszkód korzystać z zasobów sieciowych, a Ty będziesz mógł swobodnie monitorować cały ruch sieciowy generowany przez ofiarę. Aby to zrobić, otwórz trzecie okno terminalu i wpisz następujące polecenie: echo 1> /proc/sys/net/ipv4/ip_forward

Od tej chwili cały ruch między ofiarą i bramą sieciową będzie przekazywany przez Twój komputer. Na rysunku zamieszczonym poniżej widać moment przekierowania ruchu do komputera napastnika (przerwa w odpowiedzi na ping, kiedy przekazywanie pakietów nie jest jeszcze włączone) i moment, kiedy napastnik włącza przekazywanie pakietów IP (zobacz pierwszy rysunek na następnej stronie). Teraz możesz uruchomić program dsniff i rozpocząć nasłuchiwanie i przechwytywanie pakietów. Aby to zrobić w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/Network Sniffers/dsniff. Na ekranie pojawi się okno terminalu z ekranem pomocy polecenia dsniff, jak przedstawiono na drugim rysunku na następnej stronie:

213

Kali Linux. Testy penetracyjne

Aby uruchomić program dsniff, w oknie terminalu wpisz polecenie dsniff, następnie opcję -i i nazwę interfejsu sieciowego. W naszym przykładzie użyjemy polecenia dsniff do przechwytywania ruchu z interfejsu eth0, jak widać na rysunku poniżej:

Program dsniff może przechwytywać wszystkie sesje logowania. Jeżeli atakowany użytkownik zaloguje się do innego systemu za pomocą klienta FTP, po zakończeniu takiej sesji zobaczysz jej szczegóły na ekranie swojego komputera (dzieje się tak, ponieważ dsniff musi przed wyświetleniem przechwycić całą sesję):

Ettercap Ettercap to bezpłatny, otwarty pakiet oprogramowania przeznaczony do przeprowadzania ataków typu man-in-the-middle.

214

Rozdział 5. • Ataki na metody uwierzytelniania

Pakiet Ettercap może być również używany do analizowania pakietów sieciowych oraz przeprowadzania audytów bezpieczeństwa sieci, ponieważ jest wyposażony w mechanizmy pozwalające na nasłuchiwanie i przechwytywanie połączeń sieciowych, filtrowanie pakietów sieciowych oraz pasywną i aktywną analizę wielu różnych protokołów sieciowych. Po uruchomieniu pakiet Ettercap przełącza wybrany interfejs sieciowy na tryb nasłuchiwania (ang. promiscuous mode) i rozsyła odpowiednio spreparowane pakiety ARP w celu oszukania ofiary. Aby uruchomić pakiet Ettercap w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/Network Sniffers/ettercap-graphical.

Pierwszym krokiem w pracy z tym programem będzie oczywiście wybranie interfejsu sieciowego, którego użyjemy do nasłuchiwania i przechwytywania ruchu sieciowego. Aby to zrobić, z menu programu wybierz polecenie Sniff, następnie rodzaj nasłuchiwania (Unified sniffing lub Bridged sniffing) i interfejs sieciowy, którego chcesz użyć.

Gdy wybierzesz interfejs, w menu głównym programu pojawi się znacznie więcej poleceń, jak pokazano na rysunku poniżej:

215

Kali Linux. Testy penetracyjne

Przeskanujemy teraz sieć, aby przekonać się, jakie hosty są do niej podłączone. Aby to zrobić, z menu Hosts wybierz polecenie Scan for hosts. Program Ettercap przeprowadzi szybki skan całej podsieci klasy C i wyświetli listę znalezionych hostów. Pierwszym znalezionym hostem zazwyczaj jest router. W naszym przykładzie, przedstawionym poniżej, znalezione zostały cztery aktywne hosty.

Możemy założyć, że host z adresem .1 to router i że naszym celem jest maszyna z adresem .128. Teraz jako nasz cel numer 1 (TARGET1) wybierzemy router, a jako cel numer 2 (TARGET2) wybierzemy komputer ofiary z adresem .128. Takie przypisanie spowoduje umieszczenie naszego komputera pomiędzy routerem a komputerem ofiary w klasycznym scenariuszu ataku typu man-in-the-middle. Aby przypisać cele, zaznacz wybrany host i kliknij odpowiedni przycisk (na przykład Add to Target 1). Aby sprawdzić aktualną listę celów, z menu głównego wybierz polecenie Targets/Current Targets.

216

Rozdział 5. • Ataki na metody uwierzytelniania

Teraz przyjrzymy się poleceniom, jakie są dostępne w menu Mitm. Znajdziesz tutaj takie polecenia, jak Arp poisoning…, ICMP redirect…, Port stealing… oraz Dhcp spoofing…. Aby wypróbować ich działanie, wybierzemy opcję Arp poisoning…, a następnie zaznaczymy opcję Sniff remote connections.

Od tej chwili jesteśmy gotowi do przechwytywania ruchu sieciowego, przesyłanego pomiędzy routerem a komputerem ofiary. Interesujące nas informacje, takie jak nazwy kont użytkowników i hasła dostępu, mogą zostać bez większych trudności przechwycone i wyświetlone w oknie programu.

Driftnet Pakiet Driftnet to narzędzie przeznaczone do przeprowadzania ataków typu man-in-the-middle, pozwalające na wyodrębnianie z ruchu sieciowego i przechwytywanie obrazów przesyłanych w sieci. Do poprawnej pracy pakietu Driftnet wymagane jest wcześniejsze przeprowadzenie ataku typu man-in-the-middle i przekazywanie ruchu sieciowego przez komputer napastnika. Do przygotowania ataku możesz wykorzystać narzędzia takie jak arpspoof, dsniff czy Ettercap, omawiane w poprzednich podrozdziałach. Po zestawieniu ataku man-in-the-middle możesz równolegle uruchomić program Driftnet i za jego pomocą przeglądać wszystkie obrazy przesyłane w sieci. Aby uruchomić program Driftnet w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/Web Sniffers/Driftnet. Gdy wybierzesz to polecenie, na ekranie pojawi się okno terminalu z ekranem pomocy polecenia driftnet. Wywołując polecenie, musisz podać nazwę interfejsu sieciowego, którego chcesz użyć, oraz określić, co program powinien zrobić z obrazami przechwyconymi z ruchu sieciowego. Na przykład za pomocą opcji -b możesz „poprosić” program, aby generował sygnał dźwiękowy za każdym razem, kiedy przechwycony zostanie kolejny obraz. Za pomocą innych opcji możesz

217

Kali Linux. Testy penetracyjne

spowodować, że przechwycone obrazy będą wyświetlane na ekranie czy zapisywane w plikach na dysku. Przykładowe polecenie, przedstawione poniżej, powoduje przechwytywanie obrazów w interfejsie eth0 i zapisywanie ich w folderze /root/Desktop/CapturedImages. driftnet -i eth0 -a -m 1000 -d /root/Desktop/CapturedImages -x image_ Przedstawione powyżej polecenie jest oparte na założeniu, że wcześniej został odpowiednio przygotowany atak typu man-in-the-middle wykorzystujący interfejs sieciowy eth0.

Gdy uruchomisz program Driftnet, wyświetli się kolejne okno terminalu. Jeżeli skonfigurowałeś program do wyświetlania przechwyconych obrazów, będą się one pojawiały w tym właśnie oknie. Jeżeli użyłeś opcji -a, która wyłącza wyświetlanie obrazów, to nie będą się one pojawiały w oknie, ale będą zapisywane w katalogu na dysku zdefiniowanym podczas wywołania programu. Na rysunku zamieszczonym poniżej przedstawiamy okno programu Driftnet wyświetlające obrazy, które zostały przechwycone, kiedy ofiara odwiedziła witrynę www.drchaos.com.

Wstrzykiwanie kodu SQL Bazy danych przechowują duże ilości informacji zorganizowanych według określonych logicznych kryteriów. Przykładami popularnych systemów zarządzania bazami danych są Oracle czy Microsoft SQL Server. Takie bazy danych pozwalają użytkownikowi na przechowywanie dużych ilości danych, przetwarzanie ich za pomocą odpowiednich zapytań i organizowanie według różnych kryteriów. Język SQL (ang. Structured Query Language) to uniwersalny język zapytań, który jest rozpoznawany i wykorzystywany przez zdecydowaną większość systemów zarządzania bazami danych.

218

Rozdział 5. • Ataki na metody uwierzytelniania

Język SQL pozwala aplikacjom na dostęp do danych, które są przechowywane w bazach, za pomocą standardowego zestawu poleceń. Potencjalny napastnik może próbować przeprowadzać ataki na bazy danych w celu nieautoryzowanego pozyskania z nich informacji. Czasami taka operacja jest zaskakująco prosta i sprowadza się do wykonania kilku odpowiednio przygotowanych zapytań. W innych przypadkach pomyślne przeprowadzenie ataku może wymagać wykorzystania niepoprawnej konfiguracji zabezpieczeń bazy czy innego niedopatrzenia jej administratorów. Napastnik może również próbować wykorzystać podatności i luki w zabezpieczeniach systemów zarządzania bazami danych. Te podatności i luki mogą pozwolić mu na nieautoryzowane uzyskanie dostępu do atakowanej bazy i przeglądanie lub nawet modyfikowanie przechowywanych w niej danych. Napastnicy zazwyczaj próbują przesyłać złośliwy kod do bazy danych za pośrednictwem formularzy lub innych elementów stron internetowych, które to elementy posiadają zdolność przesyłania danych pobieranych od użytkownika. Napastnik może na przykład próbować wprowadzać w formularzach długie ciągi losowych znaków lub wyrażeń, co może pozwolić mu na zidentyfikowanie słabych stron metod przetwarzania danych wprowadzanych przez użytkownika. Jeżeli dane pole pozwala na wprowadzanie tylko 15 znaków, wpisanie w takim polu długiego ciągu znaków może spowodować wygenerowanie komunikatu o błędzie. Komunikat ten może zawierać zaskakująco dużo cennych dla napastnika informacji na temat konfiguracji bazy. Dzięki wtyczce HackBar przeglądarki Firefox użytkownik może testować zapytania SQL oraz wstrzykiwać własny kod do żądań SQL przesyłanych do bazy. Wtyczka HackBar umożliwia również pentesterom testowanie żądań HTTP POST przysyłanych do aplikacji internetowej.

219

Kali Linux. Testy penetracyjne

W naszym kolejnym przykładzie spróbujemy przeprowadzić wstrzykiwanie kodu SQL na stronę www.drchaos.com. Aby to zrobić, musimy w naszym systemie Kali Linux uruchomić przeglądarkę Firefox i otworzyć w niej stronę www.drchaos.com, a następnie zalogować się na niej. Najpierw spróbujemy zalogować się na konto użytkownika administrator i jako hasło dostępu podamy ciąg znaków 12345. Nietrudno przewidzieć, że taka próba zakończy się niepowodzeniem. Teraz z menu głównego programu Firefox wybierz polecenie View/HackBar. Kliknij przycisk Load URL, a następnie Enable Post Data. W oknie, które pojawi się na ekranie, powinieneś zobaczyć adres URL strony, na której się logowaliśmy, oraz nazwę konta użytkownika i podane przez nas hasło.

Teraz w nazwie konta użytkownika dodamy na końcu znak apostrofu. Po kliknięciu przycisku Execute otrzymujemy komunikat o błędzie z podanym kodem SQL. Może to oznaczać, że serwer bazy danych jest podatny na ataki za pomocą wstrzykiwania kodu SQL.

Przygotujemy odpowiedni fragment kodu SQL, który zostanie wstrzyknięty na stronę. Aby to zrobić, na końcu naszego polecenia dodamy wyrażenie OR 1=1 ##.

220

Rozdział 5. • Ataki na metody uwierzytelniania

Po wstrzyknięciu takiego polecenia okazuje się, że zalogowaliśmy się na koncie administratora strony www.drchaos.com.

Oczywiście przedstawiona luka w zabezpieczeniach strony www.drchaos.com została przez nas już dawno zamknięta, a co za tym idzie, strona jest już odporna na taki atak. Naszym celem jednak było przedstawienie możliwości, jakie daje wstrzykiwanie kodu SQL, oraz pokazanie, że taka metoda ataku może być bardzo wartościowa dla każdego pentestera i dawać możliwość prostego i szybkiego uzyskania nieautoryzowanego dostępu do atakowanego systemu. Sukces wstrzykiwania kodu SQL zależy w dużej mierze od znajomości różnych niuansów składni języka SQL. Jeżeli chcesz poszerzyć swoją wiedzę w tym zakresie, gorąco polecamy stronę W3 School of SQL, dostępną pod adresem http://www.w3schools.com/sql/sql_intro.asp.

sqlmap Pakiet sqlmap automatyzuje proces wykrywania i wykorzystywania luk w zabezpieczeniach, które to luki pozwalają na wstrzykiwanie kodu SQL i przejmowanie w ten sposób kontroli nad serwerami baz danych. Program posiada wbudowany moduł wykrywania luk w zabezpieczeniach

221

Kali Linux. Testy penetracyjne

oraz narzędzia penetracyjne, od modułów umożliwiających rozpoznawanie typów baz danych aż do modułów pozwalających na uzyskiwanie dostępu do systemu plików serwerów baz danych i wykonywanie poleceń w ich systemach operacyjnych. Pakiet sqlmap obsługuje większość najczęściej spotykanych systemów zarządzania bazami danych, posiada wsparcie dla technik wstrzykiwania kodu SQL, wykrywania kont użytkowników, pozyskiwania skrótów haseł i wiele innych modułów. Sqlmap oferuje również mechanizmy umożliwiające dokonywanie prób podnoszenia uprawnień użytkownika przy użyciu polecenia getsystem z programu Meterpreter pakietu Metasploit. Sqlmap jest narzędziem wbudowanym w system Kali Linux, pozwalającym na uzyskiwanie nieau-

toryzowanego dostępu do baz danych. Aby z niego skorzystać, musisz podać adres URL skryptu SQL znajdującego się na serwerze WWW. Taki adres można stosunkowo łatwo zlokalizować, ponieważ zwykle jest w nim ciąg znaków php. Aby uruchomić program sqlmap w systemie Kali Linux, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Vulnerability Analysis/Database Assessment/sqlmap. Na ekranie pojawi się okno terminalu z ekranem pomocy polecenia sqlmap. Podstawowa składnia wywołania polecenia sqlmap wygląda następująco: sqlmap -u URL -- nazwa_funkcji

Jedną z najczęściej używanych funkcji jest dbs. Użycie słowa kluczowego dbs spowoduje, że polecenie sqlmap wyświetli listę dostępnych baz danych. sqlmap -u http://www.drchaous.com/article.php?id=5 --dbs

Jak widać na rysunku, polecenie znalazło kilka baz danych. W naszym przykładzie skoncentrujemy się na bazie o nazwie test. Po znalezieniu podatnego serwera WWW możesz wybrać bazę danych, która będzie celem ataku. Aby to zrobić, powinieneś w wywołaniu polecenia użyć opcji -D, po której musisz podać nazwę bazy danych. sqlmap -u http://www.drchaos.com/article.php?id=5 -D test --tables

W naszym przykładzie słowo kluczowe tables pozwala na pobranie listy wszystkich tabel z bazy danych test. Po wykonaniu takiego polecenia przekonaliśmy się, że w bazie test istnieją tylko dwie tabele, o nazwach admin i content.

222

Rozdział 5. • Ataki na metody uwierzytelniania

Listę wszystkich tabel uzyskamy po wykonaniu następującego polecenia: sqlmap -u http://www.drchaous.com/article.php?id=5 -D test --tables

Poszczególne kolumny możemy wybierać za pomocą polecenia przedstawionego poniżej: sqlmap -u http://www.drchaous.com/article.php?id=5 -T nazwa_tabeli --columns

Jeżeli w tabelach znajdują się jakieś interesujące nas informacje, możemy je pobrać za pomocą następującego polecenia: sqlmap -u http://www.drchaous.com/article.php?id=5 -T nazwa_tabeli -U test --dump

Wykonanie tego polecenia spowoduje utworzenie pliku o nazwie test i zapisanie w nim wszystkich informacji pobranych z danej tabeli bazy danych. Bardzo często za pomocą takiego mechanizmu można pozyskać dane na temat kont użytkowników, haseł dostępu i wiele innych, cennych informacji.

Ataki typu XSS (cross-site scripting) Cross-site scripting (XSS) to luka w zabezpieczeniach wielu aplikacji internetowych, pozwalająca napastnikowi na wstrzykiwanie własnych skryptów na stronę internetową. Takie skrypty mogą być następnie wykorzystywane do modyfikacji ustawień serwera WWW czy sesji klientów podłączających się do serwera. Luki umożliwiające przeprowadzenie ataku typu cross-site scripting są odpowiedzialne za ogromną większość udanych włamań na serwery aplikacji internetowych. Bardzo często spotykaliśmy się z sytuacją, kiedy do naszego zespołu zgłaszał się klient proszący o przeprowadzenie ekspertyzy powłamaniowej serwera i po jej zakończeniu okazywało się, że włamanie było rezultatem istnienia luki pozwalającej na przeprowadzenie ataku XSS. Ataki oparte na cross-site scripting są wykorzystywane przez napastników do nieautoryzowanego modyfikowania stron internetowych, dystrybucji złośliwego oprogramowania czy wykradania cennych i poufnych informacji, takich jak numery kart kredytowych lub dane osobowe. Jedna z metod pozwalających na ocenę, czy dana aplikacja internetowa jest podatna na atak XSS, polega na sprawdzaniu podatności poszczególnych pól zamieszczonych na stronie, służących do wprowadzania danych, np. do wpisywania poszukiwanego ciągu znaków. Takiego sprawdzenia możemy dokonać za pomocą prostego skryptu przedstawionego poniżej: CHAOS

223

Kali Linux. Testy penetracyjne

Teoretycznie mógłbyś wykorzystać ten przykład do testowania każdej strony internetowej, aczkolwiek nie zalecamy takiego postępowania, gdyż bardzo szybko mogłoby ono zostać wykryte przez właściciela strony. Jeżeli jednak zdecydujesz się na zastosowanie takiego skryptu do testowania podatności na ataki XSS, upewnij się, że użyjesz innej strony internetowej niż www.DrChaos.com, przedstawionej w naszym przykładzie.

Testowanie podatności na ataki XSS Firma Google uruchomiła projekt o nazwie Gruyere, którego przeznaczeniem jest testowanie luk w zabezpieczeniach aplikacji internetowych i prezentowanie sposobów obrony przed atakami. Strona projektu została wyposażona w kilka specjalnie przygotowanych podatności, włącznie z osławionym XSS. Z zasobów projektu Gruyere możesz korzystać online; możesz także pobrać program na dysk i używać go na komputerze lokalnym.

Po zalogowaniu się do swojej własnej instancji projektu Gruyere skopiowaliśmy nasz miniskrypt do pola, w którym normalnie należało podać nazwę konta użytkownika, i kliknęliśmy przycisk Submit. Na rysunku przedstawionym poniżej pokazujemy wygląd głównej strony projektu z informacjami wyświetlonymi przez skrypt CHAOS. W polu nazwy konta wpisaliśmy następujący ciąg znaków: CHAOS

Gdy skrypt XSS się wykonał, w polu nazwy konta użytkownika zauważyliśmy, że część kodu wyświetliła się na głównej stronie projektu. W tym momencie mogliśmy już generować okno z alertem za każdym razem, kiedy nazwa użytkownika pojawiała się na stronie.

224

Rozdział 5. • Ataki na metody uwierzytelniania

Techniki XSS cookie stealing i Authentication hijacking Amatorzy i script kiddies mogą się bawić w wykorzystywanie ataków XSS do generowania okienek na atakowanych stronach, ale przecież dla profesjonalnego pentestera prawdziwą wartość mają techniki XSS pozwalające na uzyskanie nieautoryzowanego dostępu do atakowanego systemu. W kolejnym podrozdziale pokażemy, jak możesz tego dokonać. Jeżeli do tej pory tego nie zrobiłeś, to powinieneś teraz utworzyć swoją własną, sieciową instancję projektu Gruyere, co pozwoli Ci na samodzielne przetestowanie zagadnień omawianych w kolejnym podrozdziale. Uruchom przeglądarkę i przejdź na stronę http://google-gruyere.appspot.com/start. Silnik projektu uruchomi dla Ciebie nową instancję projektu, przydzieli Ci unikatowy identyfikator i przeniesie Cię na stronę http://google-gruyere.appspot.com/12345/ (gdzie 12345 to Twój unikatowy identyfikator projektu). Każda instancja projektu Gruyere jest całkowicie odizolowana od innych instancji, dzięki czemu Twoja kopia nie będzie w żaden sposób miała wpływu na instancje innych użytkowników ani nie będzie przez nie atakowana. Pamiętaj, że w kolejnych przykładach zamiast identyfikatora 12345 będziesz musiał używać swojego ID projektu. Gdybyś chciał podzielić się z kimś swoimi dokonaniami w projekcie Gruyere (na przykład pokazać komuś pomyślnie przeprowadzony atak), wystarczy, że po prostu wyślesz danej osobie pełny adres URL projektu (wraz z Twoim unikatowym identyfikatorem). Pamiętaj, aby dla konta projektu Gruyere nie używać żadnego hasła, którego używasz w innych, rzeczywistych usługach internetowych.

Przyjrzyjmy się teraz przykładowi pokazującemu, w jaki sposób można wykorzystać podatność XSS do wykradnięcia ciasteczka sesji. Jeżeli będziesz chciał przeprowadzić taki eksperyment w swojej sieci lokalnej, Twój komputer z systemem Kali Linux i podatny serwer WWW będą musiały mieć możliwość wzajemnej komunikacji. Ponieważ używamy projektu Gruyere, musimy podłączyć komputer z systemem Kali Linux bezpośrednio do internetu i nadać temu komputerowi publiczny adres IP, dzięki czemu Kali Linux będzie mógł poprawnie komunikować się z serwerem projektu Gruyere. W normalnej sytuacji nadawanie komputerowi z systemem Kali Linux publicznego adresu IP nie jest dobrym rozwiązaniem. Zdecydowanie się na taki krok może oznaczać otwarcie pewnych portów komunikacyjnych w zaporze sieciowej i wystawienie systemu Kali Linux na ataki z zewnątrz.

225

Kali Linux. Testy penetracyjne

Kiedy logujesz się do projektu Gruyere, możesz utworzyć swoje własne konto, klikając przycisk Sign up, znajdujący się w prawym górnym rogu ekranu, jak przedstawiono na rysunku poniżej:

Na potrzeby naszego przykładu utworzyliśmy dwa osobne konta. Zalogujemy się teraz na pierwsze konto, o nazwie TheDude. Następnie klikamy przycisk New Snippet i tworzymy pierwszy fragment kodu. W polu Add a new snippet wpisujemy skrypt XSS, przedstawiony na kolejnym rysunku.

Wiemy, że w projekcie Gruyere są specjalnie zaimplementowane podatności, stąd nasza decyzja o użyciu skryptu. W realnym świecie moglibyśmy użyć takiego samego skryptu w dowolnym polu strony internetowej, aby sprawdzić, czy jest podatna na ataki XSS. Gdybyśmy na przykład wiedzieli, że w serwisie Facebook pole, w którym podajemy drugie imię, jest podatne na ataki XSS, to można by to wykorzystać, umieszczając w tym polu podczas tworzenia profilu odpowiedni skrypt. Facebook nie jest podatny na takie ataki — podaliśmy tutaj tylko hipotetyczny przykład.

226

Rozdział 5. • Ataki na metody uwierzytelniania

W polu Add a new snippet wpisujemy następujący skrypt:

Kiedy polecenie jest wpisywane, może być automatycznie dzielone na wiersze, ale w rzeczywistości będzie to jedno długie polecenie.

Jest to tylko jeden z wielu skryptów, które mogą być wykorzystane podczas ataku na podatny system. W naszej książce koncentrujemy się co prawda na narzędziach systemu Kali Linux, ale nie zmienia to w niczym faktu, że profesjonalni pentesterzy używają wielu różnych narzędzi, między innymi takich jak Kali Linux czy własne skrypty XSS. Zdecydowanie zalecamy, abyś samodzielnie eksperymentował z projektem Gruyere i poszerzał swoją wiedzę na temat ataków wykorzystujących podatności cross-site scripting.

Inne narzędzia Poniżej przedstawiamy kilka innych narzędzi z tej kategorii, które możesz znaleźć w systemie Kali Linux.

urlsnarf urlsnarf to narzędzie pozwalające na tworzenie listy wszystkich adresów URL, jakie zostały

znalezione w przechwyconym ruchu sieciowym HTTP, i zapisanie ich w pliku w formacie CLF (ang. Common Log Format), dzięki czemu będzie można używać ich jako danych wejściowych w programach analizujących dzienniki serwerów WWW (takich jak analog, wwwstat i inne). Aby uruchomić program urlsnarf, w menu głównym przejdź do grupy Kali Linux i wybierz polecenie Sniffing/Spoofing/Network Sniffers/urlsnarf. Na ekranie pojawi się okno terminalu z ekranem pomocy polecenia urlsnarf, jak przedstawiono na rysunku poniżej:

Aby użyć programu urlsnarf, wpisz w oknie terminalu polecenie urlsnarf -i i podaj nazwę interfejsu, na którym chcesz monitorować ruch sieciowy. Jak widać na kolejnym rysunku, w naszym przypadku program urlsnarf korzysta z interfejsu eth0.

227

Kali Linux. Testy penetracyjne

urlsnarf wyświetla na ekranie informacje o każdym adresie URL zidentyfikowanym w przechwyconym ruchu sieciowym. Jak widać na przykładzie poniżej, użytkownik łączył się między innymi z witryną www.thesecurityblogger.com. Program urlsnarf wyświetla również żądania HTTP, co może być przydatne w późniejszym czasie.

acccheck Program acccheck to narzędzie pozwalające na przeprowadzanie ataków słownikowych na metody uwierzytelniania wykorzystywane w protokole SMB. Program ten to w rzeczywistości skrypt opakowujący (ang. wrapper script) dla pliku wykonywalnego smbclient, czyli w praktyce działanie acccheck zależy od funkcjonowania wspomnianego pliku wykonywalnego.

hexinject Program hexinject to uniwersalne narzędzie pozwalające na wstrzykiwanie pakietów i nasłuchiwanie ruchu sieciowego, dające użytkownikowi dostęp do sieci za pośrednictwem konsoli tekstowej. Program hexinject został zaprojektowany do współpracy z innymi narzędziami konsolowymi, dzięki czemu można wykorzystać go do pisania efektywnych skryptów mogących monitorować, przechwytywać i modyfikować ruch sieciowy w sposób zupełnie przezroczysty

228

Rozdział 5. • Ataki na metody uwierzytelniania

dla użytkowników. Za pomocą programu hexinject możesz wstrzyknąć do sieci dowolne pakiety danych, jak również wyliczać sumy kontrolne i rozmiary pakietów umieszczane następnie w odpowiednich polach pakietów protokołu TCP/IP.

Patator Patator to bardzo elastyczne narzędzie modułowe przeznaczone do siłowego łamania haseł w takich protokołach, jak: FTP, SSH, Telnet, SMTP, HTTP, HTTPS, POP, IMAP, LDAP, SMB, MSSQL, Oracle, MySQL, DNS, SNMP, oraz w systemowych plikach haseł.

DBPwAudit DBPwAudit to narzędzie przeznaczone do sprawdzania stopnia złożoności i bezpieczeństwa haseł serwerów baz danych. Aplikacja pozwala na rozszerzanie zakresu obsługiwanych baz danych poprzez dodawanie odpowiednich sterowników JDBC (które powinny być umieszczane w katalogu o nazwie JDBC).

Podsumowanie Przełamanie mechanizmów uwierzytelniania pozwala napastnikowi na podszywanie się pod legalnych użytkowników systemu. Takie rozwiązanie może być przydatne podczas przeprowadzania testów penetracyjnych aplikacji internetowych, ponieważ uzyskanie „autoryzowanego” w ten sposób dostępu pozwala na ominięcie większości zaimplementowanych w systemie mechanizmów mających chronić aplikację przed intruzami. W rozdziale 5., „Ataki na metody uwierzytelniania”, skoncentrowaliśmy się na omawianiu ataków na metody wykorzystywane przez aplikacje internetowe do uwierzytelniania użytkowników i systemów. Nasze rozważania rozpoczęliśmy od omówienia różnych metod potwierdzania tożsamości. W kolejnym podrozdziale zajmowaliśmy się atakami na proces zarządzania uwierzytelnianiem sesji. Następnie przeszliśmy do zagadnień związanych z przechowywaniem danych sesji w przeglądarkach i przełamywaniem zabezpieczeń mechanizmu zarządzania ciasteczkami. W kolejnym podrozdziale poruszaliśmy tematy związane z przeprowadzaniem ataków typu man-in-the-middle i umieszczaniem komputera napastnika jako ukrytego ogniwa pośredniczącego w przekazywaniu ruchu sieciowego między ofiarą a resztą sieci. W ostatnich dwóch podrozdziałach omawialiśmy metody oparte na wykorzystaniu luk w zabezpieczeniach serwerów internetowych, takie jak wstrzykiwanie kodu SQL czy podatności na ataki cross-site scripting. W kolejnym rozdziale będziemy zajmować się zdalnymi atakami na aplikacje internetowe i serwery WWW.

229

Kali Linux. Testy penetracyjne

230

6 Ataki na aplikacje internetowe i serwery WWW W tym rozdziale skoncentrujemy się na atakach przeprowadzanych z wykorzystaniem internetu. Administratorzy odpowiedzialni za bezpieczeństwo środowiska komputerowego firmy czy organizacji doskonale zdają sobie sprawę z tego, że w internecie nie brakuje czarnych charakterów, które nieustannie szukają nowych sposobów przełamywania zabezpieczeń. W odpowiedzi na takie zagrożenia administratorzy starają się implementować coraz bardziej skomplikowane systemy zabezpieczeń. Do najczęściej spotykanych mechanizmów obronnych należą zapory sieciowe, systemy wykrywania włamań i zapobiegania im (IPS/IDS — ang. Intrusion Prevention System/Intrusion Detection System) czy systemy instalowane bezpośrednio na hostach, takie jak programy antywirusowe lub monitorujące wykorzystanie zasobów. W przeszłości takie rozwiązania były w zupełności wystarczające, aczkolwiek spotykane obecnie złośliwe programy i inne zagrożenia, które czyhają w sieci, stają się coraz bardziej wyrafinowane i często umożliwiają łatwe obejście mechanizmów zabezpieczających oferowanych przez standardowe, komercyjne produkty „z półki” (COTS — ang. Commercial Off The Shelf). Narzędzia, które będziemy omawiali w tym rozdziale, pozwalają pentesterowi na zdalne omijanie standardowych zabezpieczeń atakowanych systemów. Przedstawiane tu zagadnienia i oprogramowanie stanowią dopełnienie arsenału technik i narzędzi każdego pentestera aplikacji internetowych. Z lektury poprzednich rozdziałów dowiedziałeś się, w jaki sposób przeprowadzać rozpoznanie i gromadzić informacje o środowisku będącym celem testu penetracyjnego, jak wyszukiwać podatności i luki w zabezpieczeniach zarówno po stronie serwerów, jak i klientów aplikacji internetowych, oraz poznałeś sposoby wykorzystywania znalezionych luk do uzyskania nieautoryzowanego dostępu do atakowanego

Kali Linux. Testy penetracyjne

systemu. Teraz zajmiemy się technikami będącymi niejako uwieńczeniem całego procesu atakowania aplikacji internetowych podczas przeprowadzania testów penetracyjnych. Dodatkowo pokażemy, w jaki sposób do ataku użyć… serwera będącego celem ataku oraz jak złamać zabezpieczenia aplikacji internetowych w ramach ataków na przeglądarki, ataków z wykorzystaniem serwerów proxy oraz przechwytywania haseł dostępu. Omówimy również wybrane metody zakłócania pracy usług internetowych za pomocą ataków typu DoS.

BeEF — Browser Exploitation Framework

Podatności i luki w zabezpieczeniach przeglądarek mogą być wykorzystywane przez złośliwe oprogramowanie do zmiany zachowania przeglądarki w określonych sytuacjach. Podatności przeglądarek internetowych to bardzo popularny wektor ataku, ponieważ zdecydowana większość systemów operacyjnych, pod których kontrolą działają klienty aplikacji internetowych, wyposażona jest w taką czy inną przeglądarkę. Przyjrzyjmy się zatem jednemu z najpopularniejszych narzędzi przeznaczonych do wykorzystywania luk w zabezpieczeniach przeglądarek internetowych. Istnieje wiele interesujących narzędzi wspomagających przeprowadzanie testów penetracyjnych. Narzędzia te powinny się znaleźć w Twoim „hakerskim” arsenale. Jednym z nich z pewnością jest program BeEF (ang. Browser Exploitation Framework). BeEF to pakiet zbudowany w oparciu o przeglądarkę, który „podpina się” do jednej przeglądarki lub nawet kilku przeglądarek w systemie klienta i tworzy przyczółek, który można wykorzystać jako bazę do dalszych ataków. Użytkownik może zostać „zaatakowany”, kiedy odwiedza specjalnie przygotowaną stronę internetową, po czym kontynuuje przeglądanie innych witryn, nie zdając sobie zupełnie sprawy z tego, że napastnik ma już pełny dostęp do jego sesji. BeEF potrafi ominąć zarówno sieciowe urządzenia zabezpieczające, jak i mechanizmy ochronne instalowane bezpośrednio na hostach, takie jak systemy antywirusowe. Staje się to możliwe dzięki wykorzystywaniu luk w zabezpieczeniach powszechnie spotykanych przeglądarek, takich jak Internet Explorer czy Firefox. Pakiet BeEF nie jest dołączany do wersji 1.0 systemu Kali Linux, ale możesz pobrać go ze strony http://beefproject.com/. Mamy jednak nadzieję, że ze względu na swoją dużą popularność w środowisku pentesterów i nie tylko BeEF znajdzie się w kolejnych wydaniach systemu Kali Linux. Aby zainstalować pakiet BeEF, powinieneś otworzyć okno terminala i z poziomu użytkownika root wykonać następujące polecenia:

232

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

apt-get update apt-get install beef-xss

Polecenie apt-get update może zapytać Cię o zgodę na aktualizację lub nadpisanie starszych wersji niektórych plików. W większości przypadków powinieneś po prostu zaakceptować odpowiedzi domyślne. Po zakończeniu procesu aktualizacji możesz wykonać drugie polecenie, apt-get install beef-xss, które rozpocznie instalację pakietu BeEF:

Kiedy przedstawione wyżej polecenie zakończy działanie, pakiet BeEF będzie gotowy do użytku. Aby uruchomić program BeEF, w oknie terminala przejdź do katalogu /usr/share/beef-xss i wpisz polecenie ./beef, co spowoduje uruchomienie serwera pakietu. Gdy serwer zostanie uruchomiony, na ekranie wyświetlą się adresy URL pozwalające na zarządzanie pakietem i atakowanie użytkowników.

Aby zarządzać serwerem pakietu, uruchom przeglądarkę i w polu adresu wpisz adres URL kończący się ciągiem znaków /ui/panel. Jeżeli chcesz przechwycić sesję ofiary za pomocą pakietu BeEF, powinieneś przekierować ją na adres URL serwera, kończący się ciągiem znaków hook.js. Aby to zrobić, będziesz musiał opracować odpowiednią strategię postępowania, która pozwoli Ci przekonać potencjalne ofiary do odwiedzenia takiego adresu. Możesz do tego celu wykorzystać różne techniki, takie jak phishing czy ataki socjotechniczne. 233

Kali Linux. Testy penetracyjne

W naszym przypadku panel zarządzania pakietu jest dostępny pod adresem http://172.16.86.144: 3000/ui/panel. Domyślna nazwa użytkownika i hasło dostępu brzmią identycznie: beef.

Kiedy ofiara ataku wejdzie lub zostanie przekierowana na stronę hook.js, napastnik zobaczy na panelu zarządzania serwera BeEF informację o nowej przeglądarce. BeEF doda nowy system do listy potencjalnych celów i będzie wyświetlał go za każdym razem, kiedy ofiara ataku pojawi się w sieci. Przeglądarki ofiar, które w danej chwili są odłączone od internetu, będą podatne na atak, kiedy znowu podłączą się do sieci, niezależnie od tego, czy ponownie odwiedzą wcześniej stronę hook.js. Na kolejnym rysunku przedstawiono wygląd głównego okna panelu zarządzania serwera BeEF z widocznymi opcjami ataku na przechwycony system.

234

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Widoczny na poprzednim rysunku host, którego przeglądarka została przechwycona, to laptop pracujący pod kontrolą systemu Windows. BeEF potrafi odkryć bardzo wiele szczegółów na temat przechwyconego systemu, na przykład to, czy ofiara używa przeglądarki Firefox, czy host pracuje pod kontrolą 32-, czy 64-bitowego systemu operacyjnego, jakie dodatkowe wtyczki zostały zainstalowane w przeglądarce, czy obsługa skryptów i apletów Java jest włączona itp. Na skompromitowanych systemach napastnik może zdalnie wykonywać różne polecenia, włączać sygnał dźwiękowy, przechwytywać ciasteczka sesji, tworzyć zrzuty ekranu, przechwytywać wszystkie znaki wpisywane z klawiatury, a nawet wykorzystywać przechwyconą przeglądarkę jako serwer proxy do atakowania innych systemów. Przykładem zastosowania pakietu może być sytuacja, w której użytkownik skompromitowanego systemu loguje się do serwisu takiego jak Facebook. Napastnik dzięki pakietowi BeEF może przechwycić ciasteczko takiej sesji, a następnie użyć go w swojej przeglądarce do przechwycenia sesji użytkownika i uzyskania dzięki temu pełnego dostępu do konta Facebook ofiary. Nietrudno sobie wyobrazić, że w takiej sytuacji złośliwe i destrukcyjne możliwości napastnika są praktycznie nieograniczone. Raz uchwycony przyczółek daje nieograniczony dostęp do przeglądarki ofiary i jej sesji. BeEF dostarcza napastnikowi szczegółowych informacji na temat zaatakowanego systemu i loguje wszystkie wykonywane w nim polecenia. Informacje o zaatakowanym systemie oraz dziennik wykonanych poleceń mogą być bez problemu skopiowane i wklejone do raportu końcowego.

235

Kali Linux. Testy penetracyjne

Obrona przed atakami dokonywanymi z użyciem narzędzi penetracyjnych opartych na przeglądarkach jest bardzo trudna. Najlepszym rozwiązaniem jest oczywiście zadbanie o to, aby zawsze korzystać z najnowszej wersji przeglądarki z zainstalowanymi najnowszymi pakietami aktualizacji oraz z wyłączoną możliwością uruchamiania apletów Java czy animacji Flash. Oprócz tego dodatkową warstwę zabezpieczeń mogą zapewnić rozwiązania pozwalające na wykrywanie najczęściej spotykanych zagrożeń, takie jak system NGIPS (ang. Next Generation Intrusion Prevention System). Znaczącą większość ofiar ataków przeprowadzonych z wykorzystaniem narzędzi takich jak BeEF stanowią użytkownicy, którzy kliknęli specjalnie przygotowane łącze, zamieszczone w wiadomości poczty elektronicznej lub udostępnione w popularnych serwisach społecznościowych przez napastnika podającego się za kogoś innego, godnego zaufania.

FoxyProxy — wtyczka przeglądarki Firefox

Jeżeli masz przeglądarkę Firefox i chcesz używać serwerów proxy, takich jak ZAP — Zed Attack Proxy czy BURP do testowania aplikacji internetowych, to możesz skorzystać z wtyczki FoxyProxy, która znakomicie upraszcza proces przełączania oraz włączania i wyłączania poszczególnych serwerów proxy. Inaczej mówiąc, FoxyProxy to wtyczka przeglądarki Firefox, pozwalająca na łatwe zarządzanie serwerami proxy, modyfikację ich ustawień oraz ich włączanie i wyłączanie. Wtyczkę FoxyProxy możesz pobrać z sieciowego repozytorium rozszerzeń programy Firefox. Gdy zainstalujesz wtyczkę, na pasku narzędzi, w górnej części głównego okna przeglądarki, pojawi się ikona FoxyProxy. Kiedy ją klikniesz lewym przyciskiem myszy, wyświetli się okno opcji i ustawień wtyczki.

236

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Aby dodać nowy serwer proxy do wtyczki FoxyProxy, powinieneś wykonać polecenia przedstawione poniżej: 1. Kliknij przycisk Add New Proxy. Na ekranie pojawi się nowe okno dialogowe. 2. Wybierz opcję Manual Proxy Configuration. 3. Wpisz adres IP lub nazwę serwera proxy oraz podaj numer jego portu komunikacyjnego. 4. Kliknij przycisk OK, aby zapisać ustawienia nowego serwera.

W tym momencie wtyczka FoxyProxy jest jeszcze wyłączona, co oznacza, że cały ruch sieciowy generowany przez przeglądarkę odbywa się bez pośrednictwa serwera proxy (w polu Select Mode jest ustawiona opcja Completely disable FoxyProxy). Aby użyć wybranego serwera proxy, rozwiń listę Select Mode i wybierz z niej żądaną opcję. Jak widać, dzięki takiemu rozwiązaniu możesz szybko przełączać przeglądarkę na różne serwery proxy lub całkowicie wyłączyć możliwość korzystania z serwera proxy.

237

Kali Linux. Testy penetracyjne

BURP Proxy BURP Proxy to narzędzie, które przechwytuje ruch HTTP oraz HTTPS, co pozwala pentesterowi na badanie funkcjonowania aplikacji internetowych, wyszukiwanie luk w ich zabezpieczeniach oraz analizowanie ruchu sieciowego, generowanego między serwerem aplikacji a klientem. Pakiet BURP Proxy cieszy się ogromną popularnością nie tylko ze względu na zdolność przeprowadzania analizy ruchu sieciowego, ale również, a może przede wszystkim ze względu na możliwość modyfikacji i retransmitowania przesyłanych żądań „w locie”. Za chwilę wyjaśnimy, jak wykorzystać pakiet BURP Proxy do modyfikowania żądań i wykradania danych uwierzytelniających użytkowników. Pamiętaj, że BURP Proxy to narzędzie wchodzące w skład rozbudowanego pakietu narzędzi o nazwie Burp Suite. Kiedy użytkownik wpisuje na pasku adresu swojej przeglądarki wybrany adres URL, taki jak na przykład http://www.DrChaos.com, oczekuje, że zostanie przeniesiony na taką stronę. Serwer proxy przechwytuje takie żądanie i przesyła je do serwera niejako „w imieniu” danego klienta. Serwery proxy są zazwyczaj wykorzystywane do monitorowania generowanego ruchu sieciowego oraz ochrony klientów przed potencjalnie szkodliwymi danymi (np. witrynami ze złośliwym oprogramowaniem czy witrynami zainfekowanymi). Jako pentester możesz wykorzystywać serwery proxy do przechwytywania ruchu sieciowego wysyłanego przez klienta, a następnie kopiowania, modyfikowania i retransmitowania jego żądań:

Aby w systemie Kali Linux uruchomić program BURP Suite, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Sniffing/Spoofing/Web Sniffers/burpsuite. Na ekranie pojawi się główne okno pakietu Burp Suite.

238

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Aby skonfigurować serwer proxy, przejdź na kartę Proxy. Jak łatwo zauważyć, opcja przechwytywania ruchu sieciowego jest domyślnie włączona (Intercept is on). Kiedy jest włączona, BURP Proxy zatrzymuje wszystkie żądania wysyłane z przeglądarki klienta do serwera WWW, dzięki czemu pentester ma możliwość pełnej analizy takiego połączenia. Po zakończeniu przeglądania pentester może ręcznie zezwolić na kontynuowanie połączenia. Opcję Intercept musisz wyłączyć ręcznie, w przeciwnym wypadku wszystkie żądania wysyłane przez klienta będą przechwytywane i zatrzymywane na poziomie BURP Proxy.

Kolejne opcje konfiguracyjne, na które musisz zwrócić uwagę, są umieszczone na karcie Options. Znajdziesz tutaj opcje pozwalające na sprawdzenie lub zmianę domyślnego portu komunikacyjnego, wykorzystywanego przez BURP Proxy, czy skonfigurowanie interfejsu sieciowego, wykorzystywanego przez pakiet. Domyślnie serwer BURP Proxy jest skonfigurowany do pracy na interfejsie pętli zwrotnej, jak przedstawiono na rysunku zamieszczonym poniżej. Interfejs pętli zwrotnej to specjalny rodzaj interfejsu sieciowego, reprezentujący komputer lokalny, do którego przypisany jest zazwyczaj adres IP 127.0.0.1. Interfejs pętli zwrotnej nie jest powiązany z żadnym urządzeniem fizycznym i jest stosowany po to, aby korzystając z połączenia sieciowego, system operacyjny Twojego komputera mógł się komunikować sam ze sobą. Inaczej mówiąc, jeżeli chcesz poprzez sieć wysyłać do siebie wiadomości, powinieneś użyć interfejsu pętli zwrotnej. Jeżeli chcesz wykorzystywać pakiet Burp Suite do pracy z innymi komputerami, powinieneś w konfiguracji pakietu dodać odpowiedni interfejs Ethernet oraz podać jego adres IP.

239

Kali Linux. Testy penetracyjne

W naszym przykładzie będziemy używać interfejsu pętli zwrotnej:

Kolejnym etapem będzie skonfigurowanie przeglądarki do pracy z pakietem Burp Suite. Praktycznie wszystkie przeglądarki można skonfigurować w niemal identyczny lub przynajmniej bardzo zbliżony sposób. Na kolejnym rysunku przedstawiamy konfigurację serwera proxy w przeglądarce Firefox.

Gdy zakończysz konfigurację serwera proxy w przeglądarce, przejdź na dowolną stronę WWW, na przykład wpisując żądany adres URL w pasku przeglądarki (na przykład www.DrChaos.com). Z pewnością zauważysz, że nic się nie wydarzyło. Dzieje się tak, ponieważ opcja Intercept,

240

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

jak pamiętasz, jest domyślnie włączona. Jeżeli przyjrzysz się teraz karcie Intercept, to przekonasz się, że zmienił się jej kolor tła, co oznacza, że przechwycone zostało nowe żądanie. Kiedy klikniesz kartę Intercept, będziesz mógł dokładnie zbadać naturę przechwyconego żądania. Po zakończeniu możesz kliknąć przycisk Forward lub Drop, co spowoduje odpowiednio przesłanie dalej lub zablokowanie przechwyconego żądania.

Jeżeli klikniesz przycisk Forward, zobaczysz, że przechwycone żądanie zostaje przekazane dalej, do serwera WWW, a serwer odsyła odpowiedź. Co więcej, powinieneś również zobaczyć, że strona WWW została załadowana w oknie przeglądarki. Pamiętaj jednak, że niektóre strony WWW składają się z wielu komponentów i ich załadowanie będzie wymagało ręcznego przekazania wielu żądań (czyli będziesz musiał wiele razy klikać przycisk Forward). Kolejną ciekawą i użyteczną funkcją pakietu jest Burp Spider, czyli robot sieciowy pozwalający na zautomatyzowanie procesu wykrywania i mapowania aplikacji internetowych. Zanim będziesz mógł z niego skorzystać, musisz najpierw skonfigurować serwer BURP Proxy do pracy z internetem, tak jak to pokazywaliśmy wcześniej. Następnie włącz moduł Burp Spider, który może automatycznie mapować wszystkie przechwycone żądania i wyszukiwać nowe, potencjalne cele ataku. Aby użyć modułu Burp Spider, przejdź na kartę Spider, gdzie zobaczysz domyślne ustawienia konfiguracyjne robota sieciowego. Aby włączyć robota, kliknij przycisk Spider is paused, co uruchomi robota i zmieni nazwę przycisku na Spider is running (zobacz pierwszy rysunek na następnej stronie). Burp Spider mapuje wszystkie żądania przechwycone przez serwer proxy i wyświetla je na karcie Target. Aby zobaczyć, co zostało do tej pory przechwycone, przejdź na kartę Target. Znajdziesz tam listę wszystkich przechwyconych przez proxy witryn, z którymi łączy się wybrana przez Ciebie witryna podczas ładowania. Adresy URL wyświetlone w szarym kolorze oznaczają witryny, których nie przeglądałeś bezpośrednio. Adresy URL wyróżnione czarnym kolorem oznaczają witryny, które odwiedziłeś bezpośrednio (zobacz drugi rysunek na następnej stronie).

241

Kali Linux. Testy penetracyjne

Aby skorzystać z robota sieciowego, kliknij wybrany adres URL prawym przyciskiem myszy i z menu podręcznego wybierz polecenie Spider this host.

242

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Jeżeli teraz przejdziesz na kartę Spider, to przekonasz się, że liczby przetworzonych żądań w sekcji Spider Status rosną od 0 w górę.

Gdy Burp napotka jakieś formularze, poprosi Cię o ich wypełnienie lub zignorowanie. Jeżeli wypełnisz formularz, Burp sprawdzi kolejne strony, które stały się dostępne po wypełnieniu formularza.

Kiedy Spider zakończy działanie, wróć na kartę Targets i poszukaj strony, której adres wybrałeś dla robota sieciowego. Kliknij ikonę trójkąta, znajdującą się z lewej strony adresu; spowoduje to rozwinięcie listy. Teraz możesz zobaczyć wyniki działania modułu Spider na pierwszym rysunku na następnej stronie. Burp wyświetla wszystkie strony i łącza, które znalazł Spider. Oprócz tego robot przechwytuje również główny katalog hosta, style stron internetowych, podkatalogi oraz skrypty Java. W kolejnym przykładzie prezentujemy szereg katalogów przechwyconych z witryny www.Drchaos.com. Burp pozwala również na filtrowanie wyników. Aby skorzystać z tej możliwości, kliknij pasek Filter, znajdujący się w górnej części okna programu. Na ekranie pojawi się rozwijane okno, zawierające szereg różnych opcji filtrowania (zobacz drugi rysunek na następnej stronie).

243

Kali Linux. Testy penetracyjne

Moduł Spider pakietu Burp Suite pozwala pentesterowi na sprawdzenie, jak dana aplikacja internetowa czy strona WWW jest skonfigurowana oraz jakie można na niej znaleźć łącza i dokąd prowadzą. Dobrą analogią funkcjonalności tego modułu może być sytuacja, w której znajdujemy się w pokoju z dziesiątkami drzwi i możemy od razu, w tym samym czasie sprawdzić, dokąd prowadzą każde z nich.

244

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

OWASP-ZAP ZAP to proste w użyciu, zintegrowane narzędzie penetracyjne, przeznaczone do wyszukiwania podatności i luk w zabezpieczeniach aplikacji internetowych. Jak pamiętasz, w rozdziale 3. dokonaliśmy krótkiej prezentacji tego narzędzia i jego możliwości w zakresie skanowania witryn internetowych pod kątem potencjalnych słabych stron zabezpieczeń. Powrócimy teraz do pracy z tym narzędziem i pokażemy, jak można użyć programu ZAP do identyfikacji i wykorzystywania luk pozwalających na przeprowadzanie ataków typu cross-site scripting (ataków XSS). ZAP jest pakietem preinstalowanym w systemie Kali Linux 1.0. Aby go uruchomić, w menu głównym przejdź do grupy Kali Linux i następnie wybierz polecenie Sniffing/Spoofing/Web Sniffers/owasp-zap. Zamiast tego możesz po prostu otworzyć nowe okno terminala i wpisać polecenie zap, tak jak to zostało zaprezentowane na rysunku poniżej:

Przedstawiamy krótki opis sposobu konfiguracji pakietu ZAP do pracy z przeglądarką Firefox, podobnie jak to miało miejsce w rozdziale 3. 1. Zaakceptuj postanowienia licencyjne. 2. Wygeneruj nowy certyfikat SSL lub zaimportuj certyfikat istniejący. 3. Zaimportuj certyfikat do przeglądarki. Aby to zrobić w przeglądarce Firefox, wybierz z menu polecenie Preferences/Advanced i następnie przejdź na kartę Encryption. 4. Kliknij przycisk View Certificates i zaimportuj certyfikat. 5. Zaznacz wszystkie opcje zaufania związane z używaniem nowego certyfikatu. 6. Skonfiguruj przeglądarkę do pracy z serwerem proxy pakietu ZAP. Aby to zrobić w przeglądarce Firefox, wybierz z menu polecenie Preferences/Advanced i następnie przejdź na kartę Network. 7. Jako nazwę serwera proxy wpisz localhost i ustaw go do pracy na porcie 8080, który jest domyślnym portem komunikacyjnym serwera proxy pakietu ZAP. 8. Zaznacz opcję pozwalającą na używanie serwera proxy dla wszystkich protokołów komunikacyjnych. Pamiętaj, że zanim będziesz mógł używać pakietu ZAP, musisz wygenerować odpowiedni certyfikat SSL.

245

Kali Linux. Testy penetracyjne

Po zakończeniu konfigurowania pakietu ZAP oraz przeglądarki Firefox możesz przejść na dowolnie wybraną stronę internetową. Przekonasz się, że nazwy odwiedzanych witryn pojawiają się na karcie Sites, w oknie pakietu ZAP. W naszym przykładzie przeszliśmy na stronę www.DrChaos.com i przekonaliśmy się, że lista odwiedzonych stron jest dosyć pokaźna. Dzieje się tak dlatego, że strona DrChaos ładuje takie czy inne elementy pochodzące z tych stron.

ZAP jest wyposażony zarówno w aktywne, jak i pasywne skanery stron internetowych. Skanery pasywne nie przeprowadzają żadnych ataków i są bezpieczne dla wszystkich aplikacji internetowych. Z kolei skanery aktywne mogą przeprowadzać całe serie różnych ataków i dokonują prób uruchamiania różnych skryptów w aplikacjach i na stronach internetowych, co może prowadzić do wygenerowania alarmów przez systemy zabezpieczające atakowanych hostów i aplikacji. W kolejnym przykładzie będziemy wykorzystywać oba rodzaje skanerów, aktywne i pasywne. Z oczywistych względów dobrze by było, gdybyś dysponował swoim serwerem testowym, na którym mógłbyś przeprowadzać takie testy, ponieważ zdecydowanie odradzamy przeprowadzanie ataków za pomocą pakietu ZAP na innym serwerze bez autoryzacji i zgody jego właściciela. Ponieważ testy podatności chcemy przeprowadzić na serwerze, do którego testowania mamy odpowiednią autoryzację, na nasze potrzeby ponownie wykorzystamy znany Ci już projekt Google Gruyere. Firma Google uruchomiła projekt Gruyere w celu umożliwienia testowania luk w zabezpieczeniach i mechanizmów obronnych aplikacji internetowych. Strony internetowe projektu Gruyere mają kilka specjalnie przygotowanych luk w zabezpieczeniach, włącznie z podatnościami na ataki XSS. Z projektu Gruyere możesz korzystać interaktywnie w sieci lub możesz pobrać go na swój komputer lokalny.

246

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Utwórz swoją własną instancję projektu Gruyere, na której będziesz pracował z pakietem ZAP. Po utworzeniu instancji projektu otrzymasz swój własny, unikatowy adres URL. W naszym przypadku adres URL projektu wyglądał następująco: http://google-gruyere.appspot.com/326352883334/. Powrócimy teraz do pakietu ZAP i wykonamy szybkie skanowanie tego adresu URL.

Na powyższym rysunku widać szereg plików SEED, włącznie z plikiem, którego adres URI wygląda bardzo interesująco: http://google-gruyere.appspot.com/326352883334/invalid. Kiedy umieścimy adres tego pliku w przeglądarce, otrzymamy następujący komunikat o błędzie:

247

Kali Linux. Testy penetracyjne

Kiedy zabieramy się do przeprowadzania ataków XSS, warto pamiętać, że z ich punktu widzenia najbardziej „niebezpiecznymi” znakami są znak mniejszości < oraz znak większości >. Jeżeli haker potrafi zmusić aplikację internetową do wstawienia kodu na stronę bezpośrednio za pomocą znaków < i >, to zazwyczaj otwiera to szeroko drzwi do wstrzyknięcia złośliwych skryptów do aplikacji. Poniżej przedstawiamy jeszcze inne przykłady interesujących plików SEED:

Poniżej przedstawiamy przykład wykorzystania jednego z adresów plików SEED do wstrzyknięcia kodu. Aby to zrobić, utworzymy adres URL i dodamy do niego skrypt alert(1), co pozwoli nam przekonać się, czy po uruchomieniu na stronie internetowej pojawi się wyskakujące okno z komunikatem o wystąpieniu błędu (zobacz rysunek na następnej stronie). http://google-gruyere.appspot.com/326352883334/

Powyższy przykład pokazuje, że atakowana aplikacja internetowa wyświetliła na ekranie wyskakujące okno z komunikatem o wystąpieniu błędu, dowodząc w ten sposób, że jest podatna na taki atak. Teraz możemy użyć pakietu ZAP do powtórzenia tego ataku, wypróbowania innego ataku lub przetestowania podobnych metod wykorzystujących luki w zabezpieczeniach XSS. W takich sytuacjach zawsze zalecamy samodzielne poeksperymentowanie z otrzymywanymi komunikatami o błędach, tak aby sprawdzić, czy nie dałoby się ich wykorzystać do „zmuszenia” aplikacji do ujawnienia cennych dla pentestera informacji. Projekt Gruyere jest znakomitym poligonem doświadczalnym, dzięki któremu możesz testować i rozwijać swoje umiejętności oraz nabierać doświadczenia w pracy z pakietem ZAP.

248

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Jeżeli chcesz sprawdzić możliwości swojej obrony przed zdalnymi atakami, to ZAP również może się tutaj sprawdzić znakomicie, zwłaszcza w przypadku ataków takich jak XSS. Niektórzy użytkownicy wierzą, że podczas przeglądania zasobów internetu nie muszą się przejmować lukami w zabezpieczeniach XSS, jeżeli zgodnie z informacjami producenta ich przeglądarka posiada mechanizmy obrony przed takimi atakami. Niestety, prawda jest taka, że zabezpieczenia przeglądarki nie mogą być uważane za doskonałe ze względu na prosty fakt, że przeglądarka nie jest w stanie oszacować, na ile bezpieczny jest kod aplikacji internetowej, której ona jest klientem. Doświadczeni hakerzy mogą być w stanie obejść takie zabezpieczenia i umieścić w kodzie strony skrypty przeznaczone do atakowania przeglądarek odwiedzających daną witrynę. Z tego powodu najlepszym sposobem zabezpieczania zarówno serwerów aplikacji internetowych, jak i korzystających z nich klientów jest wyszukiwanie, identyfikowanie i usuwanie luk w zabezpieczeniach. Można tego dokonać za pomocą narzędzi takich jak ZAP.

Przechwytywanie haseł — pakiet SET W rozdziale 4. omówiliśmy pokrótce podstawowe możliwości pakietu SET (ang. Social Engineer Toolkit). W tym podrozdziale powrócimy do tego pakietu i skoncentrujemy się na zagadnieniach związanych z wykorzystywaniem go do gromadzenia haseł dostępu oraz przechwytywania innych poufnych informacji. Jak pamiętasz, aby uruchomić pakiet SET, powinieneś w głównym menu systemu przejść do grupy Kali Linux, a następnie wybrać polecenie Exploitation Tools/Social Engineering Tools/se-toolkit.

249

Kali Linux. Testy penetracyjne

Przed pierwszym uruchomieniem pakietu upewnij się, że dokonałeś jego aktualizacji do najnowszej wersji. Szczegółową instrukcję, jak krok po kroku przeprowadzić aktualizację pakietu SET, znajdziesz w rozdziale 4. Kiedy pakiet SET zakończy klonowanie wybranej witryny internetowej, może ją uruchomić na własnym serwerze WWW. Bardzo ważnym elementem ataku jest przekonanie użytkownika będącego celem, aby połączył się z kopią witryny działającą na Twoim własnym serwerze. Oznacza to, że do ataków na cele w internecie będziesz musiał użyć maszyny posiadającej publiczny adres IP. Oprócz tego będziesz musiał utworzyć odpowiednie reguły dla zapory sieciowej, tak aby zdalni użytkownicy mogli się połączyć z zewnątrz z Twoim serwerem.

Po zakończeniu konfiguracji ustawień adresów IP i reguł zapory sieciowej nadszedł czas na uruchomienie pakietu SET.

Tym razem pakietu SET będziemy używać do przechwytywania i zbierania haseł dostępu. Jak pamiętasz, SET posiada mechanizmy pozwalające na sklonowanie praktycznie dowolnie wybranej witryny internetowej. W naszym przykładzie wykorzystamy pakiet SET do sklonowania witryny jednego z najpopularniejszych serwisów społecznościowych. Po uruchomieniu pakietu musisz zaakceptować wszystkie warunki umowy licencyjnej, tak jak zaprezentowano na rysunku na następnej stronie. Po uruchomieniu pakietu SET warto od czasu do czasu wybrać z menu głównego opcję 5) Update the Social-Engineer Toolkit, która sprawdzi, czy korzystasz z najnowszej wersji pakietu. Jeżeli okaże się, że nie, zostaną zainstalowane odpowiednie aktualizacje. Jeżeli po wybraniu tej opcji wyświetli się komunikat o błędzie, informujący, że repozytoria GIT nie istnieją, to prawdopodobnie pakiet GIT nie jest zainstalowany lub został zainstalowany niepoprawnie (zawsze istnieje również ryzyko, że coś się zmieniło w całej procedurze od czasu, kiedy powstawała ta książka). Więcej szczegółowych informacji i wskazówek na temat użytkowania pakietu SET w systemie Kali Linux znajdziesz na blogach autorów książki, Amira Lakhaniego (zobacz stronę http://www.DrChaos.com) lub Josepha Muniza (zobacz stronę http://www.thesecurity blogger.com).

250

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

1. Gdy zakończy się aktualizacja pakietu SET do najnowszej wersji, z menu głównego wybierz opcję 1) Social-Engineering Attacks. 2. Teraz wybierz opcję 2) Website Attack Vectors. 3. Wybierz opcję 3) Credential Harvester Attack Method. Do wyboru masz teraz kilka opcji określających sposób klonowania wybranej witryny. Pakiet SET posiada swoje własne, wbudowane szablony dla popularnych witryn, takich jak Facebook czy Gmail. Czasami użycie szablonu nie jest najlepszym rozwiązaniem, aczkolwiek na początek powinno w zupełności wystarczyć. Jeżeli zamiast szablonu chcesz użyć kopii wybranej witryny internetowej, musisz podać jej adres URL — pakiet SET rozpocznie proces klonowania. Jeżeli posiadasz już wykonaną wcześniej kopię witryny lub samodzielnie utworzyłeś odpowiednie pliki HTML, możesz wybrać opcję 3) Custom Import. Po wybraniu tej opcji będziesz mógł wskazać lokalizację plików HTML, których chcesz użyć. W naszym przykładzie użyjemy gotowych szablonów witryn internetowych. Pakiet SET poprosi o podanie adresu IP, na którym będzie nasłuchiwał nadchodzących żądań — w tym przypadku będzie to adres IP interfejsu sieciowego naszego systemu Kali Linux. Wyjątkiem od tej reguły może być sytuacja, kiedy wykorzystujesz usługę NAT zapory sieciowej. W takim przypadku zamiast lokalnego adresu IP systemu Kali Linux powinieneś użyć publicznego adresu IP hosta usługi NAT, tak aby klienty z zewnątrz mogły łączyć się z Twoim systemem. W naszym przykładzie użyjemy adresu IP interfejsu pętli zwrotnej, 127.0.0.1.

251

Kali Linux. Testy penetracyjne

Kiedy zdefiniujesz adres IP, pakiet SET poprosi Cię o wybranie szablonu. W naszym przypadku wybierzemy opcję Facebook. Na kolejnym rysunku przedstawiono okno przeglądarki połączonej z serwerem o adresie 127.0.0.1 i wyświetlającej naszą fałszywą stronę portalu Facebook. Jeżeli wyświetlona strona nie wygląda przekonująco, możesz użyć innego szablonu albo po prostu sklonować aktualną wersję żądanej strony.

Zwróć uwagę, że w pasku adresu przeglądarki wyświetlany jest adres 127.0.0.1. W większości przypadków będziesz musiał jednak użyć nieco bardziej wyrafinowanych wektorów ataku, aby przekonać użytkowników do odwiedzenia Twojej spreparowanej strony internetowej. Możesz to zrobić na wiele sposobów, na przykład poprzez rozsyłanie do użytkowników pocztą elektroniczną specjalnie przygotowanej wiadomości, zawierającej łącze do Twojej spreparowanej witryny internetowej (zobacz pierwszy rysunek na następnej stronie). Kiedy użytkownik rozpocznie wpisywanie nazwy konta i hasła dostępu na naszej fałszywej stronie udającej witrynę Facebook, pakiet SET przechwyci cały związany z tym ruch sieciowy i następnie przekieruje użytkownika do prawdziwej witryny internetowej. Istnieje bardzo duża szansa na to, że po takim przekierowaniu użytkownik będzie przekonany, że po prostu pomylił się podczas wpisywania hasła, i zaloguje się jeszcze raz, nie mając świadomości, że „po drodze” pakiet SET przechwycił nazwę jego konta i hasło dostępu (zobacz drugi rysunek na następnej stronie). Jak widać na powyższym rysunku, pakiet SET przechwycił nazwę naszego konta użytkownika, DrChaos, i nasze hasło dostępu, ILoveKali.

252

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Po zakończeniu tego ćwiczenia użyj kombinacji klawiszy Ctrl+C, aby zakończyć pracę programu SET i wygenerować raport w formacie HTML. SET generuje profesjonalnie wyglądający raport, którego możesz z powodzeniem użyć podczas tworzenia raportu końcowego z przeprowadzonego testu penetracyjnego.

253

Kali Linux. Testy penetracyjne

Fimap

Fimap to narzędzie napisane w języku Python, przeznaczone do wyszukiwania i wykorzystywania podatności i luk w zabezpieczeniach aplikacji internetowych, pozwalających na przeprowadzanie ataków typu LFI (ang. Local File Inclusion) lub RFI (ang. Remote File Inclusion). Aby uruchomić pakiet Fimap w systemie Kali Linux, przejdź do grupy Kali Linux, a następnie wybierz polecenie Web Applications/Web Vulnerability Scanners/fimap. Po wybraniu tego polecenia na ekranie pojawi się nowe okno terminala z wyświetlonym ekranem powitalnym polecenia fimap. Dla pakietu fimap istnieje również kilka dodatkowych wtyczek, które możesz pobrać z internetu i zainstalować za pomocą następującego polecenia: fimap --install -plugins

Dostępne wtyczki zostaną wyświetlone w formie listy, z opcją pozwalającą na zainstalowanie wybranej wtyczki lub zakończenie działania polecenia. Jak widać, w naszym przykładzie dostępne są dwie dodatkowe wtyczki, stąd polecenie instalowania musimy wykonać dwukrotnie, indywidualnie instalując poszczególne wtyczki (zobacz pierwszy rysunek na następnej stronie). Aby użyć pakietu Fimap, musisz najpierw podać adres URL witryny, która będzie celem skanera. Istnieje wiele metod definiowania adresów URL. Możesz na przykład podać jeden wybrany adres URL, całą listę adresów URL, możesz użyć wyszukiwarki Google do zebrania adresów URL,

254

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

ale równie dobrze możesz użyć innych metod, takich jak zbieranie wszystkich adresów URL z hiperłączy zamieszczonych na danej stronie internetowej czy pozyskiwanie adresów URL z formularzy i nagłówków stron. W naszym przypadku celem skanera będzie witryna http://www. thesecurityblogger.com/. Aby uruchomić skanowanie witryny http://www.thesecurityblogger.com, powinieneś wpisać następujące polecenie: fimap -u 'http://wwwthesecurityblogger.com'

Pakiet Fimap rozpocznie skanowanie i spróbuje automatycznie wykryć podatności na ataki typu LFI/RFI. Na rysunku przedstawionym poniżej widać jednak, że witryna www.thesecurity blogger.com jest odporna na tego typu ataki.

Ataki typu DoS W zdecydowanej większości przypadków celem przeprowadzania testów penetracyjnych jest identyfikacja potencjalnych i rzeczywistych podatności i luk w zabezpieczeniach bez umyślnego zakłócania działania atakowanego systemu i bez robienia mu krzywdy w jakikolwiek inny sposób. Jest to kluczowy element odróżniający autoryzowanego pentestera od złośliwego napastnika, mającego niecne zamiary. Prawdziwy napastnik nie przestrzega żadnych reguł

255

Kali Linux. Testy penetracyjne

i nie zwraca uwagi na to, czy jego działania spowodują zakłócenia w funkcjonowaniu atakowanego systemu, jeżeli tylko takie postępowanie będzie dla niego korzystne. Czasami zdarza się nawet, że napastnik będzie wręcz za wszelką cenę szukał możliwości zakłócenia działania czy nawet całkowitego wyłączenia atakowanego systemu. Z tego powodu w niektórych przypadkach przeprowadzenie testów odporności danej witryny czy aplikacji internetowej na ataki typu DoS (ang. Denial of Service) może być bardzo pożądane. Testy tego rodzaju często są nazywane testami warunków skrajnych lub testami odporności na przeciążenie systemu (ang. stress testing). Jedną z najważniejszych spraw związanych z testami odporności na ataki typu DoS jest bezwzględne uzyskanie pisemnej zgody właściciela systemu na przeprowadzanie takich ataków. Niektóre metody ataków mogą mieć negatywny wpływ na funkcjonowanie systemu nawet po zakończeniu testów. Dobrym rozwiązaniem jest przeprowadzanie takich testów na systemach z redundancją, systemach nieprodukcyjnych czy systemach zainstalowanych w środowisku laboratoryjnym, o ile to oczywiście możliwe.

Najczęściej spotykana metoda ataku DoS polega na „zalewaniu” badanego systemu masowo napływającymi z zewnątrz żądaniami. Takie przeciążenie zazwyczaj skutecznie uniemożliwia systemowi odpowiadanie na rzeczywiste żądania od autoryzowanych klientów lub co najmniej tak spowalnia wysyłanie odpowiedzi, że cały system staje się dla klientów praktycznie bezużyteczny. Ataki typu DoS mogą być skierowane na zasoby systemu (np. przypisana przestrzeń dyskowa, przepustowość połączeń sieciowych itd.), konfigurację systemu (np. usuwanie tablic routingu), informacje o stanie systemu (np. resetowanie sesji TCP) oraz każdy inny element środowiska systemu, którego przeciążenie może spowodować zakłócenie jego normalnego funkcjonowania. Różnica pomiędzy atakami DoS (ang. Denial of Service) a DDoS (ang. Distributed Denial of Service) polega na tym, że do przeprowadzania ataku DoS napastnik wykorzystuje tylko jeden komputer, podczas gdy w przypadku ataków DDoS liczba maszyn biorących udział w ataku może sięgać tysięcy. Omawianie zagadnień związanych z atakami DDoS wykracza niestety daleko poza ramy naszej książki.

Istnieją cztery główne kategorie ataków DoS/DDoS:  Ataki wykorzystujące przeciążenie połączeń sieciowych (ang. Volume Based

Attacks) — taki rodzaj ataku jest związany z „zalewaniem” atakowanego systemu masowo napływającymi pakietami UDP, ICMP i innymi. Celem takiego ataku jest przeciążenie połączeń sieciowych atakowanego systemu nadmiernymi ilościami przesyłanych pakietów.  Ataki na protokoły komunikacyjne (ang. Protocol Attacks) — ataki te mają na celu

nadmierne wykorzystywanie zasobów urządzeń sieciowych, takich jak routery, zapory sieciowe, urządzenia równoważące obciążenie połączeń sieciowych. Przykładami ataków na protokoły komunikacyjne są ataki typu SYN flood, Ping of Death, Smurf, Teardrop, wymuszanie fragmentacji pakietów itp.

256

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

 Ataki na warstwę aplikacji (ang. Application Layer Attacks) — takie ataki wykorzystują

normalny ruch sieciowy do zakłócenia działania lub nawet spowodowania awarii danej witryny lub aplikacji internetowej. Przykładami mogą być ataki typu Zero-Day czy ataki wykorzystujące inne podatności i luki w zabezpieczeniach witryn i aplikacji internetowych.  Ataki powodujące wyczerpanie zasobów sesji (ang. Session Exhaustion) — takie ataki powodują wyczerpanie liczby dozwolonych jednocześnie sesji poprzez ciągłe nawiązywanie nowych połączeń bez zamykania starych sesji, co prowadzi do wyczerpania zasobów systemu.

W systemie Kali Linux znajdziesz wiele narzędzi pozwalających na wykorzystywanie podatności i luk w zabezpieczeniach. Narzędzia te, na przykład Metasploit, mogą być używane do przeprowadzania ataków DoS na warstwę aplikacji (wiele z tych narzędzi omawialiśmy już we wcześniejszych rozdziałach). W rozdziale 3. prezentowaliśmy popularne narzędzie Scapy, pozwalające na przeprowadzanie ataków DoS na protokoły komunikacyjne. Poniżej znajdziesz omówienie kilku kolejnych narzędzi służących do przeprowadzania ataków DoS, które możesz znaleźć w systemie Kali Linux. Aby przetestować skuteczność ataku DoS, możesz użyć witryny http://www.upordown.org, która sprawdza dostępność podanej witryny internetowej.

THX-SSL-DOS Protokół SSL (ang. Secure Socket Layer) jest używany do nawiązywania bezpiecznych połączeń i transakcji w internecie. Nawiązanie bezpiecznego połączenia z wykorzystaniem protokołu SSL wymaga użycia po stronie serwera 15 razy większej mocy obliczeniowej niż po stronie klienta. Atak typu THC-SSL-DOS wykorzystuje tę dysproporcję przez próbę przeładowania serwera spreparowanymi żądaniami nawiązania sesji SSL aż do momentu, kiedy przeciążony serwer się poddaje i przestaje odpowiadać na żądania przesyłane od innych, autoryzowanych klientów. Atak wykorzystuje mechanizm renegocjacji bezpiecznego połączenia SSL do generowania tysięcy takich żądań dla pojedynczego połączenia TCP. Z tego powodu atak ten jest również znany jako atak typu SSL-Exhaustion (ang. — „wyczerpanie zasobów SSL”). Zaletą takiego podejścia jest to, że możliwości przetwarzania żądań nawiązania sesji SSL są znacznie wyższe po stronie klienta, co oznacza, że przeciętny laptop podłączony do sieci za pośrednictwem łącza o przeciętnej szybkości może rzucić poważne wyzwanie niemal każdemu serwerowi aplikacji internetowych. Podatność serwerów internetowych na ataki typu SSL-Exhaustion jest powszechnie znana, a mimo to nie udało się jeszcze opracować skutecznej metody zapobiegania takim atakom. 257

Kali Linux. Testy penetracyjne

Aby uruchomić pakiet THC-SSL-DOS, w menu głównym systemu przejdź do grupy Kali Linux, a następnie wybierz polecenie Stress Testing/Web Stress Testing/thc-ssl-dos. Po wybraniu polecenia pojawi się nowe okno terminala z ekranem powitalnym polecenia thc-ssl-dos. Składnia polecenia jest następująca: thc-ssl-dos [opcje] and --accept W wierszu wywołania polecenia musisz umieścić opcję --accept, w przeciwnym wypadku otrzymasz komunikat o błędzie przedstawiony poniżej:

Po uruchomieniu programu THC-SSL-DOS zobaczysz na ekranie kilka zabawnych komunikatów, informujących, że działanie programu się rozpoczęło. Na pierwszym rysunku zamieszczonym poniżej widać, że zaatakowana witryna nie obsługuje protokołu SSL, stąd program wyświetla na ekranie komunikat o wystąpieniu błędu. Na kolejnym rysunku przedstawiono sytuację, w której pomyślnie rozpoczął się proces renegocjacji sesji SSL, co w efekcie może doprowadzić do zakłócenia działania atakowanego systemu. Pamiętaj, ataki tego typu możesz przeprowadzać tylko na systemach, dla których uzyskałeś pisemne zezwolenie właściciela. Przeprowadzenie takiego ataku może doprowadzić do poważnego ograniczenia funkcjonalności atakowanego systemu lub nawet do jego całkowitego załamania.

258

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Scapy Jednym z najpopularniejszych narzędzi służących do przeprowadzania ataków typu DoS jest Scapy. Program został napisany w języku Python, a jego autorem jest Phillippe Biondi. Scapy pozwala na tworzenie, modyfikowanie i dekodowanie zawartości pakietów sieciowych, wstrzykiwanie pakietów do sieci, przechwytywanie pakietów oraz dopasowywanie żądań i odpowiedzi. Program posiada również wiele innych mechanizmów, takich jak skanowanie portów, trasowanie pakietów, sprawdzanie urządzeń sieciowych, przeprowadzanie ataków czy wykrywanie urządzeń sieciowych. Jedną z często wykonywanych operacji jest przechwytywanie pakietów TCP i wysyłanie ich dalej do sieci za pośrednictwem programu Scapy. Aby uruchomić ten program, w oknie terminala wpisz polecenie scapy. Po uruchomieniu programu będziesz mógł wykonywać polecenia bezpośrednio z jego wiersza poleceń:

W przykładzie, który przedstawiamy poniżej, spróbujemy użyć pakietu Scapy do wysyłania spreparowanych pakietów TCP do naszego serwera testowego. W naszym przypadku serwer testowy ma adres IP 10.0.0.1, ale w realnym scenariuszu może to być dowolny router czy serwer WWW. Oprócz podania adresu atakowanego serwera musimy również określić liczbę pakietów, które zostaną wysłane do celu. W naszym przypadku będzie to 2000 pakietów, czego możemy dokonać za pomocą następującego polecenia: send(IP(dst="10.0.0.1",ttl=0)/TCP(),iface="eth0",count=2000)

Powoduje ono wysłanie 2000 pakietów z interfejsu sieciowego eth0 do serwera o adresie 10.0.0.1. Jak zapewne zauważyłeś, czas życia wysyłanych pakietów (parametr ttl) jest ustawiony na wartość 0. Z punktu widzenia protokołu TCP istnienie takich pakietów jest niemożliwe. Inaczej mówiąc, wysyłając pakiety z tak spreparowaną wartością parametru ttl, próbujemy wprowadzić atakowany serwer internetowy co najmniej w zakłopotanie. W realnym scenariuszu potencjalny napastnik wysyłałby do atakowanego serwera miliony takich pakietów. Warto zauważyć, że w sprzyjających okolicznościach zakłócenie pracy czy nawet poważna awaria serwera może być spowodowana odebraniem nawet jednego niepoprawnego czy specjalnie złośliwie spreparowanego pakietu sieciowego. Oczywiście w zależności od zamiarów możesz dowolnie modyfikować poszczególne opcje wysyłania pakietów.

259

Kali Linux. Testy penetracyjne

Poniżej przedstawiamy kilkanaście popularnych scenariuszy ataków przeprowadzanych przy użyciu pakietu Scapy. Nieprawidłowa wersja protokołu IP send(IP(dst="10.0.0.1", src="10.20.30.40", version=0)/ TCP(dport="www"), iface="eth0", count=2000)

Nieprawidłowa suma kontrolna pakietu TCP send(IP(dst="10.0.0.1")/TCP(chksum=0x5555),iface="eth0",count=2000)

Nieprawidłowe flagi pakietu TCP (wszystkie flagi wyzerowane i numer sekwencji ustawiony na 0) send(IP(dst="10.0.0.1")/TCP(flags="",seq=555),iface="eth0", count=2000)

Nieprawidłowe flagi pakietu TCP (wszystkie flagi ustawione jednocześnie) send(IP(dst="10.0.0.1")/TCP(flags=0x0ff),iface="eth0",count=2000)

Ustawiona tylko flaga FIN send(IP(dst="10.0.0.1")/TCP(flags="F"),iface="eth0",count=2000)

Rozmiar nagłówka większy od rozmiaru pakietu L2 send(IP(dst="10.0.0.1", src="10.20.30.40", ihl=15L)/TCP(dport="www"), iface="eth0", count=2000)

Zbyt mały rozmiar nagłówka pakietu send(IP(dst="10.0.0.1", src="10.20.30.40", ihl=2L)/TCP(dport="www"), iface="eth0", count=2000)

ICMP Flood send(IP(dst="10.0.0.1")/ICMP(),iface="eth0",count=2000)

Nieprawidłowa suma kontrolna pakietu IP send(IP(dst="10.0.0.1", src="10.20.30.40", chksum=0x5500)/ TCP(dport="www"), iface="eth0", count=2000)

Fragmentacja pakietów IP send(IP(dst="10.0.0.1", src="10.20.30.40", frag=1)/TCP(dport="www"), iface="eth0", count=2000)

Rozmiar pakietu IP większy niż rozmiar pakietu warstwy L2 send(IP(dst="10.0.0.1", src="10.20.30.40", ihl=5L, len=80)/ TCP(dport="www"), iface="eth0", count=2000)

260

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Źródłowy adres IP taki sam jak docelowy adres IP send(IP(dst="10.0.0.1", src="10.0.0.1")/TCP(dport="www"), iface="eth0", count=2000)

Rozmiar pakietu warstwy L2 większy niż rozmiar pakietu IP send(IP(dst="10.0.0.1",len=32)/ Raw(load="bla-bla-bla-bla-bla-blabla-bla"),iface="eth0",count=2000) send(IP(dst="10.0.0.1",len=32)/UDP(dport=80,len=48)/ Raw(load="bla-bla-bla-bla-bla-bla-bla-bla"),iface="eth0",count=2000) send(IP(dst="10.0.0.1",len=32)/ICMP()/ Raw(load="bla-bla-bla-blabla-bla-bla-bla"),iface="eth0",count=2000)

Brak pakietu warstwy L4 send(IP(dst="10.0.0.1", src="10.20.30.40"), iface="eth0", count=2000)

Jednocześnie ustawione flagi SYN i FIN send(IP(dst="10.0.0.1")/TCP(flags="FS"),iface="eth0",count=2000)

Rozmiar nagłówka pakietu TCP większy niż rozmiar pakietu warstwy L2 send(IP(dst="10.0.0.1", src="10.20.30.40")/ TCP(dport="www", dataofs=15L), iface="eth0", count=2000)

Zbyt mały rozmiar nagłówka TCP (mniejszy niż 5 bajtów) send(IP(dst="10.0.0.1", src="10.20.30.40")/ TCP(dport="www", dataofs=1L), iface="eth0", count=2000)

Slowloris

261

Kali Linux. Testy penetracyjne

Slowloris to klient HTTP, który umożliwia przeprowadzanie ataków typu DoS nawet za pośrednictwem łącza o względnie małej przepustowości. Metoda ataku wykorzystywana w tym programie jest unikatowa i pozwala na przeprowadzenie skutecznego ataku bez uciekania się do powszechnie wykorzystywanych technik „zalewania” serwerów masowo wysyłanymi pakietami. Slowloris otwiera wiele równoległych połączeń do atakowanego serwera i podtrzymuje je w otwartym stanie poprzez przesyłanie częściowych żądań HTTP. Po otwarciu połączenia program cyklicznie, w regularnych odstępach czasu, przesyła do serwera setki kolejnych nagłówków żądań, co zapobiega zamknięciu połączenia przez serwer. Takie zachowanie powoduje wyczerpanie limitu równoległych sesji serwera, co w efekcie uniemożliwia jego normalne działanie. W przypadku witryn sieciowych przystosowanych do dużego natężenia ruchu proces przejmowania kolejnych połączeń przez pakiet Slowloris może zająć nieco czasu, ponieważ inni użytkownicy muszą zwalniać swoje połączenia, zanim będą one mogły zostać zajęte przez Slowloris. Nie zmienia to jednak w niczym faktu, że po pewnym czasie Slowloris pomału, ale skutecznie przechwyci wszystkie dostępne sesje i doprowadzi do zawieszenia działania serwera. Program Slowloris działa skutecznie zwłaszcza w odniesieniu do serwerów WWW wykorzystujących przetwarzanie wielowątkowe, które są z definicji wrażliwe na ograniczanie liczby dostępnych wątków. Przykładami takich serwerów są Apache 1.x i 2.x, dhttpd, GoAhead i inne. Pakiet Slowloris nie jest domyślnie instalowany w systemie Kali Linux 1.0, ale możesz go pobrać ze strony http://ha.ckers.org/slowloris/.

Aby uruchomić program, pobierz skrypt .pl ze strony autora, otwórz nowe okno terminala, przejdź do katalogu ze skryptem i wykonaj polecenie przedstawione poniżej: perl slowloris.pl

W oknie terminala pojawi się ekran pomocy programu. Aby rozpocząć atak na wybrany serwer, powinieneś wpisać polecenie przedstawione powyżej i dodać opcję -dns, a po niej wpisać adres serwera będącego celem ataku. Aby zaatakować na przykład witrynę www.thesecurityblogger.com, powinieneś wpisać następujące polecenie (zobacz pierwszy rysunek na następnej stronie): perl slowloris.pl -dns thesecurityblogger.com

Po rozpoczęciu ataku będziesz mógł obserwować w oknie terminala proces przejmowania kolejnych połączeń, co po pewnym czasie może doprowadzić do załamania się atakowanego systemu (zobacz drugi rysunek na następnej stronie). Jeżeli atak przeprowadzany za pomocą pakietu Slowloris się powiedzie, atakowany serwer przestanie odpowiadać na żądania (zobacz trzeci rysunek na następnej stronie). Powyżej możesz zobaczyć skutki ataku DoS na witrynę http://www.thesecurityblogger.com (prosimy, nie powtarzaj tego eksperymentu!).

262

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

LOIC, czyli Niskoorbitalne Działo Jonowe… Pakiet LOIC (ang. Low Orbit Ion Cannon, czyli wspomniane w tytule podrozdziału Niskoorbitalne Działo Jonowe) to narzędzie do badania odporności zasobów sieciowych na przeciążenie. LOIC pozwala na sprawdzanie ilości ruchu sieciowego, jaki może obsłużyć dany system. Takie informacje mogą być później wykorzystywane do planowania rozbudowy i wdrażania szerokopasmowych połączeń sieciowych. Program ten stał się inspiracją do utworzenia innych

263

Kali Linux. Testy penetracyjne

narzędzi o podobnej funkcjonalności, takich jak na przykład JavaScript LOIC, które pozwala użytkownikowi na przeprowadzanie testów odporności na przeciążenia połączeń bezpośrednio z poziomu przeglądarki. Program LOIC był wykorzystywany przez grupę Anonymous do przeprowadzenia słynnych ataków na wiele znanych internetowych witryn publicznych i rządowych. Niektórzy prawnicy usiłują co prawda przekonywać, że zastosowanie narzędzi takich jak LOIC jest w praktyce bardzo podobne do odwiedzania danej witryny kilka tysięcy razy, ale w większości krajów nieautoryzowane używanie tego typu narzędzi jest traktowane jako łamanie prawa. Aby zainstalować pakiet LOIC, powinieneś otworzyć okno terminala i wpisać sekwencję poleceń przedstawioną poniżej: apt-get update aptitude install git-core monodevelop apt-get install mono-gmcs

Po zakończeniu tego etapu wykonaj polecenie cd /Desktop, aby przejść do katalogu reprezentującego pulpit, a następnie utwórz w nim podkatalog o nazwie loic. Możesz to zrobić za pomocą polecenia przedstawionego poniżej: mkdir loic

Przejdź do nowo utworzonego katalogu za pomocą polecenia cd loic i wykonaj polecenie przedstawione poniżej: wget https://raw.github.com/nicolargo/loicinstaller/ master/loic.sh

Następnie nadaj skryptowi loic.sh odpowiednie uprawnienia. Aby to zrobić, wykonaj kolejne polecenie: chmod 777 loic.sh

264

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Ostatnim etapem jest uruchomienie skryptu za pomocą polecenia przedstawionego poniżej: ./loic.sh install

Jeżeli na ekranie nie pojawi się żaden komunikat o wystąpieniu błędu, to znaczy, że jesteś gotowy do przeprowadzenia aktualizacji naszego „działa jonowego”. Aby to zrobić, wykonaj następujące polecenie: ./loic/sh update

Po zakończeniu aktualizacji nadszedł czas na uruchomienie programu LOIC. Możesz to zrobić, wpisując w oknie terminala następujące polecenie: ./loic.sh run

265

Kali Linux. Testy penetracyjne

Używanie programu LOIC nie jest trudne. Na początek możesz wybrać, czy chcesz korzystać z trybu ręcznego (ang. manual mode), czy trybu IRC (ang. IRC mode). W naszym przykładzie wybraliśmy tryb ręczny. Następnie powinieneś podać adres URL systemu, który chcesz zaatakować. W naszym przypadku wpisaliśmy adres lokalnego interfejsu pętli zwrotnej, czyli 127.0.0.1. Jeżeli chcesz zmodyfikować domyślne ustawienia ataku, LOIC oferuje wiele opcji dla protokołów TCP oraz UDP. Kiedy będziesz gotowy do rozpoczęcia ataku, powinieneś kliknąć przycisk IMMA CHARGIN MAH LAZER. Postępy ataku możesz obserwować w oknie programu. Aby zatrzymać atak, kliknij przycisk Stop Flooding.

Inne narzędzia Kali Linux oferuje inne narzędzia, które możesz wykorzystać do przeprowadzania ataków na aplikacje internetowe. Poniżej zamieszczamy krótkie zestawienie wybranych narzędzi, które nie były do tej pory omawiane.

DNSChef

266

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Pakiet DNSChef to serwer DNS proxy przeznaczony dla pentesterów i specjalistów zajmujących się analizą złośliwego oprogramowania. Serwery DNS proxy to narzędzia „fałszujące” odpowiedzi DNS, wykorzystywane do analizy ruchu sieciowego generowanego przez aplikacje internetowe i wielu innych zastosowań. DNS (ang. Domain Name System) to rozproszony system przydzielania nazw zasobów sieciowych, takich jak komputery, serwery, usługi sieciowe i inne zasoby sieciowe, podłączone do internetu lub prywatnych sieci komputerowych. Celowe dostarczanie fałszywych adresów DNS może powodować przekierowanie ruchu sieciowego do lokalizacji zupełnie innych niż oryginalne. Na przykład serwer DNS proxy może być wykorzystywany do utworzenia fałszywych odpowiedzi DNS, powodujących, że ruch dedykowany dla witryny CzarnyCharakter.com zamiast do internetu będzie trafiał do lokalnego komputera analityka, gdzie może być blokowany lub przechwytywany w celu przeprowadzenia dokładniejszej analizy. Aby to zrobić, musisz uzyskać dostęp do jednego z serwerów DNS i odpowiednio zmodyfikować wpisy DNS lub dokonać „zatrucia” serwera DNS, tak aby ruch sieciowy był przekierowywany do Twojego komputera z systemem Kali Linux. Sama obsługa narzędzia DNSChef nie jest skomplikowana, aczkolwiek prawdziwym wyzwaniem może być atak na serwer DNS i przekierowanie ruchu do Twojego komputera.

SniffJoke

SniffJoke pozwala na zupełnie przezroczyste przechwytywanie połączeń TCP, wprowadzanie do nich opóźnień, modyfikowanie zawartości pakietów oraz wstrzykiwanie fałszywych, spreparowanych pakietów do sesji TCP użytkownika. Powoduje to, że pasywne rozwiązania monitorujące i zabezpieczające ruch sieciowy, takie jak systemy IDS/IPS i sniffery, mają duże problemy z poprawną interpretacją połączeń sieciowych. Działanie programu wywołuje różnice między ruchem sieciowym, który jest przechwytywany i przewidywany przez sniffer, a rzeczywistym ruchem sieciowym generowanym przez klienta, w rezultacie czego algorytmy budujące „konwersacje” sieciowe dla sniffera mają problemy z poprawnym składaniem kolejności pakietów. Na kolejnych dwóch rysunkach przedstawiamy proces przechwytywania ruchu sieciowego między dwoma użytkownikami bez udziału pakietu SniffJoke oraz w sytuacji, kiedy pakiet SniffJoke działa.

267

Kali Linux. Testy penetracyjne

Siege Siege to narzędzie przeznaczone do testowania odporności na przeciążenia połączeń HTTP/HTTPS, pozwalające deweloperom aplikacji internetowych na sprawdzanie zachowania kodu aplikacji w skrajnych warunkach pracy. Program Siege pozwala na wielowątkowe generowanie sesji HTTP i analizowanie zachowania serwerów pod symulowanym obciążeniem wielu użytkowników. Siege może pracować w trybie regresji, symulacji internetu oraz w trybie brute-force. Aby uruchomić program Siege w systemie Kali Linux, przejdź do grupy Kali Linux i następnie wykonaj polecenie Stress Testing/Network Stress Testing/siege (zobacz pierwszy rysunek na następnej stronie). Składnia wywołania polecenia siege jest następująca: siege [opcje]

268

Rozdział 6. • Ataki na aplikacje internetowe i serwery WWW

Rysunek przedstawiony poniżej przedstawia program Siege testujący witrynę http://www.the securityblogger.com. Program domyślnie symuluje obciążenie połączeniami od 15 użytkowników, co zostało przedstawione na rysunku poniżej. Kiedy zatrzymasz działanie programu, Siege generuje raport, który został zamieszczony na kolejnym rysunku.

Inundator Inundator to narzędzie pozwalające na omijanie i neutralizowanie działania systemów IDS (ang. Intrusion Detection System) oraz IPS (ang. Intrusion Protection System) poprzez „zalewanie” generowanych przez nie dzienników spreparowanymi wpisami. Koncepcja kryjąca się za takim rozwiązaniem polega na tym, że poprzez „zasypywanie” dzienników tysiącami fałszywie pozytywnych 269

Kali Linux. Testy penetracyjne

wpisów można ukryć rzeczywisty atak, który staje się przez to potencjalnie „niewidzialny” i którego późniejsza analiza śledcza jest mocno utrudniona. Pakiet Inundator może być również wykorzystywany do testowania efektywności modułów generujących alarmy w systemach SIEM czy IDS/IPS.

TCPReplay Program TCPReplay wykorzystuje uprzednio przechwycony i zapisany w plikach w formacie libpcap ruch sieciowy do testowania działania różnych urządzeń sieciowych. TCPReplay potrafi rozpoznawać ruch generowany przez klienty i serwery, modyfikować nagłówki pakietów 2., 3. i 4. warstwy oraz wstrzykiwać pakiety do sieci, co pozwala na testowanie takich urządzeń, jak przełączniki, routery, zapory sieciowe czy systemy IDS/IPS. TCPReplay obsługuje różne tryby pracy interfejsów sieciowych. Mówiąc w skrócie, pakiet TCPReplay pozwala na przechwytywanie i zapisywanie ruchu sieciowego przesyłanego między klientem a serwerem, i następnie na retransmisję tego ruchu w dowolnym czasie i miejscu w sieci.

Podsumowanie Omawiane w tym rozdziale zagadnienia i oprogramowanie stanowiły dopełnienie arsenału technik i narzędzi każdego pentestera aplikacji internetowych. Po zakończeniu lektury powinieneś już wiedzieć, jak zdobywać informacje o celach, jak wyszukiwać podatności i luki w zabezpieczeniach, jak analizować interakcje pomiędzy klientami a serwerami, jak wykorzystywać exploity oraz luki w zabezpieczeniach oraz jak w razie potrzeby zakłócać działanie usług internetowych. W tym i poprzednich rozdziałach dokonaliśmy krótkiego przeglądu narzędzi dostępnych zarówno w systemie Kali Linux, jak i w internecie, które powinny się znaleźć w arsenale każdego specjalisty zajmującego się przeprowadzaniem testów penetracyjnych. Kali Linux udostępnia wiele wartościowych narzędzi, aczkolwiek każdy dobry pentester używa też własnych skryptów i programów wykorzystujących luki typu Zero-Day. Jeżeli chcesz być dobrym pentesterem, powinieneś ustawicznie testować nowe metody ataków, sprawdzać różne narzędzia penetracyjne i samodzielnie poszerzać swoją wiedzę na temat zagadnień omawianych w naszej książce. W tym rozdziale omawialiśmy techniki będące niejako uwieńczeniem całego procesu atakowania aplikacji internetowych podczas przeprowadzania testów penetracyjnych. Poruszane tutaj były zagadnienia związane z przełamywaniem zabezpieczeń aplikacji internetowych przy użyciu ataków na przeglądarki, ataków z wykorzystaniem serwerów proxy oraz przechwytywania haseł dostępu. Rozdział zakończyliśmy zagadnieniami związanymi z zakłócaniem i przerywaniem działania usług sieciowych przy użyciu ataków DoS oraz testowaniem odporności aplikacji i usług sieciowych na pracę w skrajnych warunkach obciążenia. W następnym rozdziale zmienimy zupełnie front i wyjaśnimy, jak przy użyciu narzędzi dostępnych w systemie Kali Linux chronić aplikacje internetowe przed atakami pentesterów i hakerów. 270

7 Przeciwdziałanie i zapobieganie W naszych dotychczasowych rozważaniach koncentrowaliśmy się na zagadnieniach związanych z wykorzystywaniem narzędzi z systemu Kali Linux do uzyskania nieautoryzowanego dostępu do atakowanych systemów. Teraz nadszedł czas, aby zupełnie zmienić front i z napastnika przemienić się w obrońcę, którego zadaniem jest ochrona systemu przed łamaniem zabezpieczeń metodami prezentowanymi w poprzednich rozdziałach tej książki (i nie tylko). Zabezpieczanie systemów podłączonych bezpośrednio do internetu jest niezmiernie trudnym zadaniem, ponieważ taki system z definicji jest publicznie dostępny i musi stawić czoła czarnym charakterom z całego świata, zachowując przy tym co najmniej akceptowalny poziom świadczenia usług dla swoich autoryzowanych użytkowników. Z tego powodu absolutnie krytycznym czynnikiem staje się uwzględnianie zagadnień związanych z zabezpieczaniem systemu już na wczesnym etapie projektowania całego środowiska i konsekwentne poświęcanie im odpowiedniej uwagi przez cały czas „życia” danego systemu, co z oczywistych powodów jest znacznie lepszym rozwiązaniem niż wdrażanie mechanizmów ochronnych „na szybko”, już po zaistnieniu i wykryciu włamania. Przemyślane zaplanowanie i wdrożenie odpowiednich zabezpieczeń nie tylko pomoże znacząco zmniejszyć zagrożenia, na jakie narażony jest system, ale również może przyczynić się do zredukowania kosztów obsługi ewentualnych incydentów bezpieczeństwa i przywracania systemu do normalnego funkcjonowania. Wszyscy doskonale chyba sobie zdajemy sprawę z tego, że w internecie można spotkać wielu złoczyńców, którzy zajmują się atakowaniem systemów podłączonych do sieci i robią to dla zabawy, dla sprawdzenia swoich umiejętności czy też wreszcie z zupełnie innych, bardziej mrocznych pobudek. Z tego względu firmy i organizacje często implementują w swoich środowiskach coraz bardziej rozbudowane, komercyjne mechanizmy obronne, mające chronić je przed takimi atakami. Problemem takiej strategii jest prosty fakt, że to nie dostawca rozwiązań zabezpieczających staje się rzeczywistym celem ataku i to nie on ponosi koszty usuwania

Kali Linux. Testy penetracyjne

szkody, kiedy taki atak się powiedzie. Pamiętaj, że dostawcy produktów zabezpieczających oferują taki czy inny poziom ochrony Twojego systemu, ale nie mogą ponosić odpowiedzialności za wszystkie inne elementy środowiska, których funkcjonowanie znajduje się poza ich kontrolą. Mówimy tutaj o takich prozaicznych elementach, jak brakująca lub niepoprawnie zainstalowana aktualizacja oprogramowania, błąd w konfiguracji systemu i milion innych sytuacji, które mogą ułatwić potencjalnemu napastnikowi włamanie się do systemu, a za które dostawca mechanizmów zabezpieczeń nie będzie odpowiedzialny. Co więcej, bardzo często spotyka się środowiska, w których wdrożonych jest kilka różnych systemów zabezpieczeń, co może powodować, że dostawcy poszczególnych rozwiązań będą próbować zrzucać odpowiedzialność za incydent bezpieczeństwa jeden na drugiego. Z tych i wielu innych powodów uważamy, że to właściciel systemu powinien wziąć na siebie odpowiedzialność za jego bezpieczeństwo i dołożyć wszelkich starań, aby maksymalnie chronić zarządzany przez siebie system przed zagrożeniami zewnętrznymi. System Kali Linux jest wyposażony w narzędzia penetracyjne, które mogą być wykorzystywane do identyfikacji systemów podatnych na ataki. Rozwiązanie nasuwa się zatem samo — po prostu zamiast atakować inne systemy, możesz przeprowadzić testy penetracyjne własnego środowiska, aby wytypować systemy podatne na ataki, zanim zrobi to potencjalny napastnik. W swojej Sztuce wojny Sun Tzu zawarł następującą myśl: Poznaj dobrze wroga i poznaj dobrze siebie, a w stu bitwach nie doznasz klęski. Jeśli ignorujesz wroga, a dobrze znasz tylko swoje siły, masz równe szansę na zwycięstwo i na przegraną. Jeśli nie liczysz się ani z siłą wroga, ani też nie znasz własnej siły, możesz być pewny, że poniesiesz klęskę w każdej bitwie. Wierzymy, że takie fundamentalne koncepcje są prawdziwe również w dziedzinie zabezpieczania środowisk sieciowych — użyj systemu Kali Linux, aby poznać siebie i swoje słabości. Zaletą przeprowadzania testów penetracyjnych własnego środowiska jest fakt, że wiesz, co się w nim dzieje, i możesz używać dowolnych metod i środków bez obawy, że spowoduje to wygenerowanie alarmów i reakcję obronną ze strony działu IT. W przypadku prawdziwego ataku potencjalny napastnik raczej nie będzie podejmował działań mogących narazić go na ryzyko ujawnienia się, co zazwyczaj redukuje liczbę możliwych wektorów ataku. Ciche, ukryte działanie wymaga cierpliwości, szczegółowego planowania i minimalnej interakcji z atakowanym środowiskiem. W praktyce to właśnie od Ciebie zależy, czy zainwestujesz odpowiednią ilość czasu i zasobów na wdrożenie sprawnego systemu zabezpieczeń, zanim ktoś inny poświęci jeszcze więcej zasobów na przełamanie istniejących mechanizmów obronnych. W naszej branży bardzo często powtarzamy, że „system, który jest bezpieczny na 99 procent, to system niezabezpieczony na 100 procent”. W tym rozdziale omówimy różne sposoby wykorzystania systemu Kali Linux do przeprowadzania audytów aplikacji internetowych pod kątem podatności i luk w zabezpieczeniach umożliwiających przeprowadzenie ataków, jak również przedstawimy najlepsze praktyki w utwardzaniu zabezpieczeń sieci. Będziemy omawiać takie zagadnienia, jak podstawowe wymogi dotyczące bezpieczeństwa i odporności aplikacji internetowych na ataki, metody zarządzania aktualizacjami oprogramowania i poprawkami zabezpieczeń, polityki zarządzania hasłami oraz metody obro272

Rozdział 7. • Przeciwdziałanie i zapobieganie

ny przed atakami opisywanymi w poprzednich rozdziałach. W tym rozdziale znajdziesz również podrozdział poświęcony wykorzystaniu narzędzi systemu Kali Linux w informatyce śledczej. Przeprowadzenie po wykryciu incydentu bezpieczeństwa odpowiedniego dochodzenia, mającego na celu wyjaśnienie sposobu przełamania zabezpieczeń aplikacji internetowej, jest niezmiernie ważnym etapem całego postępowania, pozwalającym na uniknięcie podobnych incydentów w przyszłości.

Testowanie mechanizmów obronnych Jak już wyjaśniliśmy we wstępie, najlepszym podejściem do utwardzenia mechanizmów obronnych danego środowiska jest przeprowadzenie testu penetracyjnego (czy jak kto woli, ataku), mającego na celu zidentyfikowanie potencjalnych podatności i luk w zabezpieczeniach. Podczas opracowywania strategii testowania zaimplementowanych obecnie mechanizmów obronnych powinieneś wziąć pod uwagę między innymi następujące zagadnienia:  Czy chcesz przeprowadzić test typu black-box, white-box, czy grey-box?  Czy atak zostanie przeprowadzony na środowisko produkcyjne, czy jego funkcjonalną kopię?  Jakie potencjalne ryzyko niesie ze sobą przeprowadzenie testu penetracyjnego?  Kto powinien zostać poinformowany o planowanym przeprowadzeniu testu penetracyjnego?  Czy chcesz przetestować funkcjonowanie mechanizmów pozwalających na wykrycie potencjalnego ataku oraz sprawdzić reakcję odpowiedniego zespołu IT na wykryty atak, czy raczej chcesz się skoncentrować na zidentyfikowaniu systemów posiadających luki w zabezpieczeniach i podatnych na ataki?  Czy test penetracyjny musi być przeprowadzany zgodnie z jakimiś określonymi standardami, uregulowaniami prawnymi, czy wewnętrznymi procedurami firmy? Przyjrzyjmy się zatem całemu procesowi planowania testu penetracyjnego, mającego na celu zweryfikowanie poziomu istniejących zabezpieczeń naszego środowiska. Na początek musimy poznać podstawowe wymogi dotyczące bezpieczeństwa i odporności systemów na ataki, tak aby określić poziom odniesienia dla przeprowadzanego testu.

Podstawowe wymogi bezpieczeństwa Jedno z pytań, które są najczęściej zadawane przez ekspertów, brzmi: „Jaki jest minimalny, akceptowalny poziom zabezpieczenia danego systemu?”. Bardzo często zdarza się, że mechanizmy zabezpieczeń środowiska sieciowego danej firmy muszą spełniać określone normy branżowe czy nawet być w zgodzie z określonymi regulacjami prawnymi. Istnienie norm i standardów, takich jak opisane w rozdziale 8., „Tworzenie raportów z testów penetracyjnych”, jest najlepszym dowodem na to, jaką wartość dla branży IT przedstawiają testy penetracyjne.

273

Kali Linux. Testy penetracyjne

Oprócz brania pod uwagę norm i standardów dobrym sposobem na określenie podstawowych wymogów bezpieczeństwa dla danego środowiska sieciowego jest „podpatrywanie”, w jaki sposób zabezpieczają swoje systemy inne firmy i organizacje. Jako konsultant do spraw bezpieczeństwa systemów teleinformatycznych, pracujący na rzecz wielu różnych klientów, powinieneś sprawdzić, jakich rozwiązań używają organizacje rządowe do ochrony wrażliwych informacji, i przyjąć to jako bazę do określenia podstawowego poziomu zabezpieczeń, jakie powinien spełniać dany system. Warto pamiętać, że wielu klientów z pewnością będzie zainteresowanych posiadaniem zabezpieczeń co najmniej na takim poziomie jak organizacje rządowe. Dobrymi wzorcami do opracowania podstawowych wymogów zabezpieczeń mogą być również inne standardy IT, wewnętrzne polityki bezpieczeństwa różnych firm czy nawet wybrane normy bezpieczeństwa stosowane przez siły zbrojne. Istnieje również szereg dokumentów zawierających rekomendowane, dobre praktyki w dziedzinie bezpieczeństwa systemów teleinformatycznych, tworzone przez organizacje normalizacyjne, zrzeszające producentów sprzętu i oprogramowania oraz liderów technologicznych, takie jak ISO (ang. International Organization for Standardization, Międzynarodowa Organizacja Normalizacyjna). Jak już wspominaliśmy, autorzy tej książki pracują jako konsultanci do spraw bezpieczeństwa systemów teleinformatycznych dla klientów na terenie Stanów Zjednoczonych Ameryki Północnej (USA), dlatego przyjrzymy się teraz podstawowym wymogom bezpieczeństwa dla systemów komputerowych, które w jakikolwiek sposób korzystają z zasobów sieciowych zarządzanych i kontrolowanych przez amerykańskie agendy rządowe. Nie zmienia to jednak w niczym faktu, że przedstawione wymagania są bardzo uniwersalne, mogą mieć zastosowanie niemal w każdym innym przypadku i są uznawane w wielu krajach na całym świecie. Podstawowe wymagania bezpieczeństwa powinny definiować minimalny poziom zabezpieczeń, który będzie jeszcze do przyjęcia w Twoim środowisku. Dobrą i rekomendowaną praktyką jest oczywiście wdrażanie systemów zabezpieczeń, które wychodzą daleko poza podstawowe wymagania, ponieważ zazwyczaj formalnie zdefiniowane wymagania i standardy bardzo szybko się starzeją i często nie przystają do realiów współczesnych technologii i zagrożeń.

STIG STIG, czyli Security Technical Implementation Guide to standardy określające bezpieczną metodologię instalowania oprogramowania i urządzeń komputerowych oraz zarządzania nimi. Wytyczne zawarte w normach STIG zostały opracowane przez amerykańską agencję DISA (ang. Defense Information Systems Agency) na potrzeby Departamentu Obrony USA (DoD — ang. Department of Defense) i obejmują również zalecenia w zakresie procedur administracyjnych oraz środków kontroli stosowanych podczas całego „cyklu życia” danego oprogramowania lub urządzenia. Dobrym przykładem sytuacji, w której możesz skorzystać z wytycznych standardów STIG, jest konfigurowanie stacji roboczej czy komputera biurkowego pracownika firmy. Większość współczesnych systemów operacyjnych instalowanych według ustawień domyślnych nie oferuje 274

Rozdział 7. • Przeciwdziałanie i zapobieganie

zbyt wysokiego poziomu bezpieczeństwa, przez co jest z natury bardzo podatna na potencjalne ataki. Wytyczne STIG pokazują, w jaki sposób znacząco zwiększyć prawdopodobieństwo tego, że system skutecznie będzie się opierał atakom przeprowadzanym z zewnątrz za pośrednictwem sieci, oraz w jaki sposób zminimalizować straty i ograniczyć możliwość działania napastnikowi, któremu jednak w taki czy inny sposób udało się uzyskać nieautoryzowany dostęp do systemu. Standardy STIG opisują również procesy związane z zarządzaniem systemami, takie jak zarządzanie aktualizacjami czy instalowanie poprawek bezpieczeństwa. Standardy STIG to zestaw znakomitych wytycznych i procedur pozwalających na szybkie i przede wszystkim skuteczne zabezpieczanie systemów operacyjnych, urządzeń sieciowych i aplikacji. Dokumenty zawierające wytyczne standardów STIG możesz pobrać ze strony http://www.stigviewer.com/stigs. Są tam szczegółowe instrukcje pokazujące krok po kroku, jak utwardzać zabezpieczenia różnych systemów, włącznie z serwerami WWW. Warto również zauważyć, że wytyczne STIG stanowią punkt wyjścia do konfiguracji systemów, które muszą spełniać dodatkowe wymagania związane z odpowiednimi regulacjami prawnymi czy normami branżowymi. Na przykład w Stanach Zjednoczonych wszystkie komputery pracujące w sieciach nadzorowanych przez Departament Obrony i inne organizacje rządowe muszą spełniać wymagania standardów STIG. W internecie możesz znaleźć wiele innych źródeł opisujących rekomendowane praktyki i podstawowe wymogi bezpieczeństwa różnych systemów teleinformatycznych. Przykładami organizacji udostępniających takie dokumenty mogą być Center for Internet Security (CIS) czy Cisco Network Foundation Protection (NFP).

Zarządzanie aktualizacjami i poprawkami zabezpieczeń W obecnych czasach coraz częściej spotykamy się z dobrze przygotowanymi atakami przeprowadzanymi na starannie wybrane cele, wykorzystującymi podatności i luki w zabezpieczeniach typu Zero-day, gdzie okno czasowe, rozciągające się od momentu wykrycia określonej podatności do chwili, kiedy napastnicy opracowują skutecznie działający exploit, jest znacząco zredukowane. W takiej sytuacji dla każdego administratora zajmującego się bezpieczeństwem teleinformatycznym coraz bardziej krytycznym czynnikiem staje się dobra znajomość chronionego środowiska i poziomu zabezpieczeń poszczególnych systemów wchodzących w jego skład. Zarządzanie aktualizacjami i poprawkami zabezpieczeń jest procesem ciągłym, którego powodzenie zależy niemal wyłącznie od tego, czy zostały wcześniej wypracowane odpowiednie procedury obejmujące takie zagadnienia, jak sprawdzenie, czy pojawiła się nowa aktualizacja, uszeregowanie kolejności instalowania aktualizacji i poprawek zabezpieczeń według określonych priorytetów, weryfikacja poprawności aktualizacji i ich zgodności z obowiązującymi normami, wytycznymi i politykami bezpieczeństwa oraz reagowanie w sytuacji, kiedy wykryta zostaje nowa luka w zabezpieczeniach, dla której nie została jeszcze opracowana odpowiednia poprawka czy aktualizacja. Takie założenia odnoszą się również do procesu zarządzania aktualizacjami aplikacji zainstalowanych w systemie oraz innego oprogramowania, takiego jak na przykład wtyczki przeglądarki.

275

Kali Linux. Testy penetracyjne

Zarządzanie poprawkami zabezpieczeń to tylko jeden z aspektów ciągłego procesu aktualizacji zabezpieczeń systemu. Pierwszym jego etapem jest aktualizacja bazy znanych podatności i luk w zabezpieczeniach, co można zrobić poprzez zbieranie informacji od producentów oprogramowania oraz szereg innych sposobów, od okresowego skanowania wszystkich zasobów sieciowych aż do przeprowadzania pełnowymiarowych testów penetracyjnych. Administrator powinien opracować odpowiednią procedurę, określającą częstotliwość wykonywania poszczególnych poziomów skanowania oraz określającą osoby odpowiedzialne za przegląd i analizę wykrytych zagrożeń. Dobrym punktem wyjścia do przygotowania podstawowych wymagań bezpieczeństwa w tym zakresie jest przeanalizowanie przepisów prawnych i innych regulacji, które muszą być przestrzegane w danym środowisku. Kolejnym etapem w procesie zarządzania poprawkami jest odpowiednie postępowanie z systemami, w których znalezione zostały podatności i luki w zabezpieczeniach. Jak już wspominaliśmy w rozdziale 1., „Przygotowania”, samo wykrycie potencjalnej podatności nie zawsze musi być związane z ryzykiem dla systemu i dopiero przeprowadzenie testu penetracyjnego może w jednoznaczny sposób potwierdzić, czy daną lukę w zabezpieczeniach można wykorzystać do przeprowadzenia ataku i czy stanowi ona rzeczywiste zagrożenie dla systemu. Usunięcie podatności na atak zazwyczaj wymaga prostego zainstalowania poprawki bezpieczeństwa czy aktualizacji, aczkolwiek zdarzają się oczywiście luki w zabezpieczeniach, których naprawienie może wymagać zainwestowania znacznie większych ilości czasu i zasobów. W takich sytuacjach z pomocą przychodzą omawiane już wcześniej metody szacowania ryzyka w odniesieniu do kosztów usunięcia problemu. Ostatnim etapem procesu zarządzania poprawkami zabezpieczeń jest odpowiednie zaplanowanie harmonogramu instalowania poprawek i aktualizacji w zależności od tego, jaki wpływ

276

Rozdział 7. • Przeciwdziałanie i zapobieganie

może mieć istnienie danej luki w zabezpieczeniach na funkcjonowanie danego systemu. Jest to niezmiernie istotny element, ponieważ praktyka pokazuje, że wiele skutecznie przeprowadzonych włamań nie miałoby miejsca, gdyby w zaatakowanych systemach zostały w porę zainstalowane odpowiednie poprawki zabezpieczeń. Bardzo często zdarza się, że w wielu firmach i organizacjach okna serwisowe systemów komputerowych (ang. maintenance window), przeznaczone na bieżące konserwacje oraz instalowanie poprawek zabezpieczeń i aktualizacji, mają miejsce raz w miesiącu lub nawet rzadziej, co powoduje, że czas ekspozycji takiego systemu na atak jest bardzo wydłużony. Dobrym i zdecydowanie polecanym rozwiązaniem jest wyznaczenie osoby odpowiedzialnej za analizę i szacowanie ryzyka związanego z wykrytymi i potencjalnymi lukami w zabezpieczeniach, która będzie posiadała uprawnienia do wyznaczenia okna serwisowego „na żądanie” w sytuacji, kiedy ryzyko związane z istnieniem takiej czy innej podatności przekroczy akceptowalny poziom i może mieć poważny wpływ na funkcjonowanie danego systemu. Odpowiednio przygotowany proces zarządzania poprawkami zabezpieczeń jest jedną z najlepszych strategii obrony przed wieloma zagrożeniami omawianymi w tej książce. Powinieneś pamiętać, że cały proces zarządzania poprawkami zabezpieczeń musi być poddawany okresowemu przeglądowi i aktualizacji, dzięki czemu znacząco możesz zredukować niebezpieczeństwo pozostawienia takiego czy innego systemu bez odpowiedniej ochrony i tym samym wystawienia go na potencjalny atak. Takiej weryfikacji powinny być poddawane wszystkie elementy środowiska sieciowego, włącznie z serwerami i aplikacjami internetowymi.

Polityka zarządzania hasłami Praktyka pokazuje, że wdrożenie polityki zarządzania hasłami, która reguluje wszystkie możliwe scenariusze, może mieć negatywny wpływ na siłę haseł. Każdy użytkownik ze względu na swoją ludzką naturę ma tendencję do maksymalnego upraszczania haseł, czy to poprzez używanie powtarzających się znaków, czy przez zwiększanie długości i „siły” hasła poprzez dołączanie przewidywalnych elementów, takich jak na przykład ciąg znaków 12345, czy za pomocą innych, podobnych „wynalazków”. Typowy użytkownik nie zmienia również hasła dopóty, dopóki nie zostanie zmuszony do tego przez system. Z tych i podobnych powodów dobra polityka zarządzania hasłami powinna obejmować następujące wytyczne:  Hasło musi być zmieniane co 90 dni lub częściej.  Nowe hasło musi być inne niż co najmniej pięć ostatnio używanych haseł.  Minimalna długość hasła musi wynosić co najmniej 12 znaków.  W hasłach powinny być dozwolone wszystkie znaki, włącznie ze znakami specjalnymi.  Hasło powinno zawierać co najmniej jedną wielką literę, co najmniej jedną cyfrę

i co najmniej jeden znak specjalny.  Hasło nie powinno zawierać przewidywalnych lub kolejnych ciągów znaków, takich jak 12345 czy asdfg, co znacząco utrudni złamanie hasła metodami typu brute-force.

277

Kali Linux. Testy penetracyjne

Moc obliczeniowa komputerów z roku na rok jest coraz większa, co oznacza, że w niedalekiej przyszłości hasła składające się z 12 znaków nie będą już uważane za wystarczająco silne. Wiosną 2013 roku w mediach ukazała się informacja, że jedna z grup hakerów przy użyciu specjalnie przygotowanego klastra komputerów była w stanie złamać w ciągu jednej godziny 14 800 spośród testowego zestawu 16 499 skrótów silnych, 16-znakowych haseł. W chwili ogłoszenia było to oczywiście wydarzenie godne uwagi, aczkolwiek takie możliwości w niedalekiej przyszłości nie będą już niczym nadzwyczajnym. Z tego powodu minimalna wymagana długość hasła powinna być okresowo weryfikowana i w razie potrzeby zwiększana.

Autorzy tej książki są zagorzałymi fanami tworzenia bezpiecznych haseł za pomocą specjalnych programów, nazywanych generatorami haseł. Przykładowy bardzo ciekawy generator haseł, którego autorem jest Steve Gibson, możesz znaleźć na stronie internetowej Gibson Research Corporation, pod adresem https://www.grc.com/passwords.htm. Bardzo wiele witryn i aplikacji internetowych pada ofiarami włamań, ponieważ ich deweloperzy implementują w nich słabe protokoły zabezpieczeń. Do przechowywania haseł i danych użytkowników powinny być wykorzystywane tylko i wyłącznie silne algorytmy szyfrowania wraz z dodatkowymi metodami, takimi jak tworzenie funkcji skrótu z wykorzystaniem ciągów zaburzających (czyli tzw. soli kryptograficznej), co pozwoli na zredukowanie ryzyka złamania haseł i wycieku danych.

Siłę haseł używanych w Twoim środowisku możesz zweryfikować za pomocą narzędzi do łamania haseł. Narzędzia te omawialiśmy zarówno w rozdziale 3., „Ataki na serwery aplikacji internetowych”, jak i w rozdziale 4., „Ataki na klienty aplikacji internetowych” niniejszej książki. W skład sugerowanego zestawu narzędzi mogą wchodzić takie aplikacje, jak John the Ripper, Johnny, Hashcat, oclHashcat i OphCrack. Programy Crunch i Hashcat mogą być również wykorzystywane do generowania list możliwych haseł, których możesz później używać wraz z innymi narzędziami do przetestowania skuteczności własnej polityki haseł. W internecie możesz znaleźć wiele witryn, takich jak na przykład Crackstation, oferujących wstępnie przygotowane listy popularnych haseł, których możesz później używać wraz z innymi narzędziami do przetestowania skuteczności własnej polityki haseł.

Klonowanie środowiska Przed rozpoczęciem procesu testowania środowiska pod kątem zgodności z podstawowymi wytycznymi bezpieczeństwa, występowania podatności czy weryfikacji luk w zabezpieczeniach dobrym rozwiązaniem może być utworzenie dokładnej kopii systemu produkcyjnego, dzięki czemu testowanie będzie można przeprowadzić na jego sklonowanej wersji. Dobrą praktyką w takiej sytuacji jest replikowanie całości środowiska, od urządzeń sprzętowych aż do danych, oprogramowania i aplikacji, ponieważ potencjalne luki w zabezpieczeniach mogą

278

Rozdział 7. • Przeciwdziałanie i zapobieganie

istnieć we wszystkich warstwach badanego środowiska. Testowanie sklonowanego środowiska daje pentesterowi możliwość swobodnego przeprowadzania dowolnego rodzaju ataków bez ryzyka narażania systemu produkcyjnego na zakłócenia pracy czy inne awarie. W praktyce co prawda rzadko pojawia się możliwość dokładnego sklonowania całego środowiska, aczkolwiek w większości przypadków możliwe jest utworzenie wirtualnego środowiska testowego o bardzo zbliżonej funkcjonalności.

HTTrack HTTrack to bezpłatne narzędzie pozwalające na zapisywanie zawartości całych witryn internetowych na lokalnym dysku Twojego komputera i następnie ich późniejsze przeglądanie w trybie offline. Program pozwala na utworzenie dokładnej kopii danej witryny, łącznie z odwzorowaniem struktury jej katalogów, pobraniem wszystkich stron HTML, obrazów i innych plików i zapisanie jej na dysku lokalnym. Dzięki temu możesz później przeglądać zawartość sklonowanej witryny łącze po łączu, a nawet testować ją pod kątem występowania podatności i luk w zabezpieczeniach. HTTrack jest relatywnie prostym narzędziem, które dobrze sprawdza się podczas pracy z niezbyt złożonymi witrynami. Program nie potrafi replikować dynamicznej zawartości stron internetowych, jak również nie radzi sobie z witrynami wykorzystującymi oprogramowanie pośredniczące (ang. middleware), takie jak na przykład bazy danych. Jak widać, pomimo wielu zalet zastosowanie program HTTrack nie zawsze będzie dobrym rozwiązaniem, szczególnie w przypadku przeprowadzania testów penetracyjnych w nieco bardziej złożonych środowiskach aplikacji internetowych. Aby mieć możliwość przetestowania wszystkich elementów składowych witryny internetowej, do utworzenia sklonowanej wersji środowiska będziesz musiał użyć innego narzędzia. Takie oprogramowanie powinno mieć możliwość replikowania dynamicznej zawartości stron internetowych, jak również klonowania warstwy oprogramowania pośredniczącego, co najczęściej będzie wymagało uzyskania dostępu do danej witryny internetowej na prawach jej administratora.

W czasie, kiedy powstawała ta książka, pakiet HTTrack nie był już domyślnie dołączany do dystrybucji systemu Kali Linux. Aby zainstalować pakiet HTTrack, otwórz okno terminala i wpisz polecenie apt-get install httrack. Po zakończeniu procesu instalacji możesz uruchomić program HTTrack, wpisując w oknie terminala polecenie httrack. Po uruchomieniu program poprosi Cię o podanie nazwy projektu, ścieżki do katalogu, w którym zostanie zapisana kopia (domyślnie klonowane witryny są zapisywane w katalogu /root/websites) oraz adresu witryny internetowej, której zawartość ma zostać sklonowana. HTTrack daje Ci do dyspozycji kilka opcji kopiowania witryny, jak przedstawiono na rysunku poniżej. Inne opcje pozwalają na zdefiniowanie i zastosowanie symboli wieloznacznych oraz poziomu zagnieżdżenia kopiowanych elementów witryny. W naszym przypadku wybraliśmy opcję numer dwa. Po udzieleniu odpowiedzi na wszystkie pytania możesz rozpocząć klonowanie, wybierając opcję Y.

279

Kali Linux. Testy penetracyjne

HTTrack rozpocznie klonowanie witryny internetowej i wszystkich powiązanych z nią łączy. Cały proces kopiowania może zająć całkiem sporo czasu, w zależności od rozmiaru klonowanej witryny. Na kolejnym rysunku przedstawiamy wygląd programu HTTrack podczas klonowania witryny www.thesecurityblogger.com.

Po zakończeniu procesu klonowania witryny internetowej możesz przejść do katalogu, w którym została zapisana jej kopia, i rozpocząć testowanie.

280

Rozdział 7. • Przeciwdziałanie i zapobieganie

Inne narzędzia do klonowania witryn Poniżej przedstawiamy kilka innych narzędzi przeznaczonych do klonowania witryn internetowych, które są dostępne w systemie Kali Linux. Podobnie jak w poprzednim przypadku, wymienione niżej narzędzia nie mają możliwości kopiowania dynamicznej zawartości stron internetowych ani warstwy oprogramowania pośredniczącego, takiego jak bazy danych, stąd stosowanie takich narzędzi również nie zawsze będzie najlepszym rozwiązaniem, szczególnie w przypadku przeprowadzania testów penetracyjnych w nieco bardziej złożonych środowiskach aplikacji internetowych.  WebCopier — to narzędzie przeznaczone do tworzenia kopii witryn internetowych,

które następnie mogą być wykorzystywane do późniejszej analizy w trybie offline.  w3mir — to uniwersalne narzędzie pozwalające na kopiowanie i klonowanie

zawartości witryn internetowych. Program najczęściej jest wykorzystywany do tworzenia i aktualizacji kopii witryn internetowych, które mają być później przeglądane w trybie offline.

Obrona przed atakami typu man-in-the-middle Obrona przed atakami typu man-in-the-middle nie jest zadaniem prostym. Takie ataki mają zazwyczaj miejsce poza środowiskiem kontrolowanym przez ofiarę i co gorsza, jeżeli zostaną przeprowadzone poprawnie, nie pozostawiają żadnych jednoznacznych śladów, które mogłyby zaalarmować ofiarę. Ataki typu man-in-the-middle są zazwyczaj wstępem do przeprowadzenia znacznie bardziej złowieszczych ataków, takich jak SSLstrip. Jednym z najczęściej stosowanych sposobów zabezpieczania się przed atakami typu man-in-the-middle jest upewnienie się, że witryna internetowa używa protokołu SSL/TLS 3.0. Inaczej mówiąc, chcąc zabezpieczyć swoją aplikację internetową, powinieneś upewnić się, że komunikuje się ona ze światem zewnętrznym za pomocą połączeń HTTPS (protokół SSL) lub bezpiecznych połączeń HTTP (protokół TLS 3.0)1. Weryfikacja połączeń HTTPS nie jest wcale łatwa i z pewnością nie sprowadza się do tego, że użytkownik sprawdzi obecność zielonego paska z symbolem kłódki na pasku adresu swojej przeglądarki, ponieważ napastnik może podstawić ofierze swój odpowiednio spreparowany certyfikat, dzięki czemu takie przechwycone połączenie będzie wyglądało na bezpieczne. Aby we właściwy sposób zweryfikować bezpieczeństwo sesji HTTP, powinieneś zawsze wyświetlić na ekranie szczegółowe dane certyfikatu i sprawdzić, przez jaki urząd certyfikacji ten certyfikat został wydany. Jest to bardzo prosta operacja, aczkolwiek niestety sama konieczność 1

Protokół TLS działa w warstwie prezentacji, dzięki czemu może zabezpieczać protokoły najwyższej warstwy modelu OSI (warstwy aplikacji), takie jak telnet, HTTP, gopher, POP3, IMAP, NNTP czy SIP — przyp. tłum.

281

Kali Linux. Testy penetracyjne

wykonania jakichkolwiek dodatkowych operacji przed otwarciem strony internetowej skutecznie zniechęca wielu użytkowników do jej wykonania, co powoduje, że taka metoda przeprowadzania ataków jest bardzo efektywna.

Na poprzednim rysunku możesz zauważyć, że certyfikat SSL dla witryny Gmail został wystawiony przez urząd certyfikacji o nazwie Google Internet Authority. Brzmi świetnie, ale czym tak naprawdę jest Google Internet Authority? Czy naprawdę możesz im zaufać? Czy to naprawdę Google? Na tym samym rysunku widać też inny certyfikat, wystawiony przez Equifax Secure Certificate Authority. Firma Equifax przed wystawieniem certyfikatu dla danej jednostki dokonuje bardzo szczegółowej weryfikacji danego podmiotu, tak aby upewnić się, że wystawiony certyfikat będzie identyfikował rzeczywistego wnioskodawcę. Kiedy certyfikat jest wystawiony przez Equifax, można mieć niemal zupełną pewność, że jest prawdziwy i że można mu zaufać. Koniec końców protokół HTTPS opiera się na koncepcie zaufania, a mówiąc ściślej, na zaufaniu użytkownika do urzędu certyfikacji, który wystawił dany certyfikat poświadczający, że właściciel certyfikatu jest tym, za kogo się podaje. W środowiskach testowych i laboratoryjnych bardzo często używa się certyfikatów z podpisem własnym (ang. self-signed certificate), które często powodują generowanie ostrzeżeń przez większość popularnych przeglądarek internetowych. Takie ostrzeżenie ma formę nieco irytującego, wyskakującego okna z komunikatem, na który często narzekają użytkownicy usiłujący połączyć się z taką czy inną witryną internetową. Zadaniem tego komunikatu jest jednak powiadomienie użytkownika o tym, że urząd certyfikacji, który wystawił certyfikat danej witryny, nie należy do powszechnie znanych zaufanych urzędów certyfikacji i że z tego powodu istnieje ryzyko wystąpienia ataku typu man-in-the-middle (zobacz rysunek na następnej stronie). Szyfrowane połączenia VPN (ang. Virtual Private Network) to kolejne rozwiązanie pozwalające na obronę przed atakami typu man-in-the-middle. Poprzez szyfrowanie wszystkich przesyłanych danych przy jednoczesnym maskowaniu Twojego publicznego adresu IP rozwiązania wykorzystujące połączenia VPN gwarantują, że korzystasz z sieci, w której ruch nie może być monitorowany ani przechwytywany przez nikogo z zewnątrz (z wyjątkiem dostawcy tunelu VPN).

282

Rozdział 7. • Przeciwdziałanie i zapobieganie

Połączenia VPN wykorzystują silne metody uwierzytelniania użytkowników, takie jak uwierzytelnianie dwuskładnikowe (ang. two-factor authentication), gdzie użytkownik oprócz nazwy konta i hasła dostępu musi również użyć dodatkowej formy uwierzytelnienia, takiej jak hasła jednorazowe (OTP — ang. one-time passwords), kody z tokenów sprzętowych czy dodatkowe certyfikaty. Rozwiązanie to znacząco redukuje możliwości uzyskania informacji niezbędnych potencjalnemu napastnikowi do przejścia procesu uwierzytelniania w połączeniach VPN i uzyskania nieautoryzowanego dostępu do sesji innego użytkownika. Połączenia VPN wykorzystują takie metody szyfrowania, jak PPTP, L2TP, SSL i IPSEC. Najlepszym rozwiązaniem jest zastosowanie protokołów SSL i IPSEC, które ze względu na wykorzystanie bardzo silnych algorytmów szyfrowania zapewniają bardzo wysoki poziom bezpieczeństwa przesyłanych danych. Rozwiązania wykorzystujące połączenia VPN są oferowane przez bardzo wiele instytucji, zarówno prywatnych, jak i publicznych. Pamiętaj, że dostawca usługi VPN może monitorować Twój ruch sieciowy, stąd niezwykle ważnym zagadnieniem staje się wybieranie zaufanych dostawców takich usług. Przed podjęciem decyzji o wyborze dostawcy VPN powinieneś sobie zadać pytanie, czy możesz zaufać temu dostawcy wystarczająco, aby powierzyć mu swoje dane — inaczej mówiąc, korzystając z takiego rozwiązania, składasz bezpieczeństwo swoich danych w ręce dostawcy usługi VPN.

Inną techniką obrony przed atakami man-in-the-middle jest wykorzystanie protokołów takich jak MACsec (ang. Media Access Control Security) czy 802.1x. Takie rozwiązania wykorzystują zaawansowane usługi sieciowe do przeprowadzania uwierzytelniania użytkowników, zapewnienia spójności i poprawności danych oraz silnego szyfrowania przesyłanego ruchu sieciowego. Oba rozwiązania wymagają zastosowania kompatybilnego osprzętu sieciowego i przeprowadzenia odpowiednio przygotowanego procesu wdrożenia.

283

Kali Linux. Testy penetracyjne

Obrona przed atakami SSLstrip Ataki typu SSLstrip (które omawialiśmy w rozdziale 3., „Ataki na serwery aplikacji internetowych”) pozwalają napastnikowi na neutralizację szyfrowanego połączenia z witryną internetową i przechwycenie sesji użytkownika włącznie ze wszystkimi poufnymi informacjami przesyłanymi między klientem a serwerem. Powszechnie spotykaną sytuacją jest łączenie ataków SSLstrip z innymi atakami, takimi jak man-in-the-middle, dzięki czemu potencjalny napastnik może przechwytywać cały ruch sieciowy ofiary, zneutralizować szyfrowanie i swobodnie przeglądać wszystkie dane przesyłane w sesji użytkownika. Więcej szczegółowych informacji na ten temat znajdziesz w rozdziale 5., „Ataki na metody uwierzytelniania”. Aby skutecznie bronić się przed atakami SSLstrip, musisz dokładnie zrozumieć mechanizm działania takiego ataku. Główna koncepcja ataku opiera się na przekierowaniu sesji użytkownika z nieszyfrowanej witryny sieciowej do jej szyfrowanej, bezpiecznej wersji. Jeżeli na przykład skierujesz swoją przeglądarkę na adresy takie jak http://www.facebook.com czy http://www.gmail.com, przekonasz się, że zostaniesz automatycznie przekierowany do szyfrowanych wersji tych witryn, pod adresami odpowiednio https://www.facebook.com i https://www.gmail.com. Atak SSLstrip powoduje przerwanie procesu przekierowania i wymusza używanie przez ofiarę nieszyfrowanej wersji witryny internetowej. Co ciekawe, kiedy nie istnieje nieszyfrowana wersja danej witryny, napastnik za pomocą ataku SSLstrip może przechwytywać żądania HTTP i przekierować użytkownika do szyfrowanej HTTPS wersji witryny, stając się swego rodzaju ogniwem pośrednim. Kiedy użytkownik nawiąże w ten sposób sesję z szyfrowaną wersją witryny, napastnik może bez przeszkód przeglądać wszystkie dane przesyłane w sesji użytkownika. Jednym ze sposobów obrony przed atakami SSLstrip jest upewnienie się, że Twoja witryna po prostu nie posiada nieszyfrowanej wersji i dzięki temu nie korzysta z mechanizmu przekierowania połączeń. Takie rozwiązanie skutecznie eliminuje możliwość przeprowadzenia ataku SSLstrip, ponieważ użytkownik nawiązuje połączenie bezpośrednio z szyfrowaną wersją witryny i przekierowanie po prostu nie ma miejsca. W takiej sytuacji, kiedy ofiara zostanie zaatakowana, po prostu nie będzie mogła się połączyć z daną witryną internetową, ale sama sesja nie będzie zagrożona. W naszej szarej rzeczywistości takie rozwiązanie jest jednak dosyć trudne do zrealizowania. Użytkownicy po prostu przyzwyczaili się już, że w przeglądarce wpisują adresy w nieszyfrowanym protokole HTTP, a sama witryna już zadba o przeniesienie do szyfrowanej wersji, jeżeli jest to konieczne. Co więcej, wiele firm nie chce, aby po nieudanej próbie połączenia z nieistniejącą, nieszyfrowaną wersją witryny potencjalni klienci myśleli, że strona internetowa firmy po prostu nie działa. Krótko mówiąc, najlepszą obroną przed atakami SSLstrip jest odpowiednie szkolenie i uświadamianie użytkowników na temat tego, jakie zagrożenia na nich czyhają i w jaki sposób mogą się zorientować, że coś jest nie tak, jak być powinno. Warto tutaj zauważyć, że metody obrony przed atakami typu man-in-the-middle, o których wspominaliśmy już wcześniej, stanowią również doskonałą ochronę przed atakami SSLstrip. Jak się już zapewne domyślasz, przyczyna jest prosta — do przeprowadzenia ataku SSLstrip niezbędne jest wcześniejsze przeprowadzenie skutecznego ataku typu man-in-the-middle.

284

Rozdział 7. • Przeciwdziałanie i zapobieganie

Obrona przed atakami typu DoS Większość narzędzi przeznaczonych do przeprowadzania ataków DDoS (ang. Distributed Denial of Service) oraz DoS (ang. Denial of Service) to programy z otwartym kodem (ang. open source), napisane w językach C# lub Java. W rozdziale 6., „Ataki na aplikacje internetowe i serwery WWW”, pokazywaliśmy, w jaki sposób pojedyncza osoba przy użyciu odpowiedniego narzędzia może przeprowadzić dewastujący atak DoS, którego efektem będzie poważne zakłócenie działania albo nawet całkowite przeciążenie i wyłączenie atakowanego systemu. Narzędzia do przeprowadzania ataków DoS/DDoS są zazwyczaj reklamowane jako narzędzia do sprawdzania odporności serwerów i aplikacji na pracę w warunkach skrajnego obciążenia. Rzeczywiście, jest to jedno z możliwych zastosowań, ale w praktyce niestety najczęściej takie narzędzia są wykorzystywane do znacznie bardziej nikczemnych celów. Ataki typu DoS/DDoS w większości wypadków wymagają obejścia zabezpieczeń wdrażanych w warstwie sprzętowej infrastruktury sieciowej. Jedną z najczęściej stosowanych metod obrony przed takimi atakami jest instalowanie wydajnych urządzeń monitorujących ruch sieciowy, które są w stanie wykryć anormalne zachowania hostów sieciowych oraz rozpoznać wzorce ruchu sieciowego, które mogą oznaczać rozpoczęcie ataku typu DoS/DDoS. Podejrzany ruch sieciowy powinien być zaraz po wykryciu automatycznie filtrowany, aby uniknąć przeciążania serwerów aplikacji internetowych i zakłóceń w ich funkcjonowaniu. Istnieje wiele różnych pakietów narzędziowych, takich jak programy równoważące obciążenie serwerów czy zaawansowane zapory sieciowe, które znakomicie radzą sobie z wykrywaniem i filtrowaniem podejrzanego ruchu sieciowego, co w efekcie stanowi dobrą ochronę przed atakami typu DoS/DDoS. Dobre narzędzia zabezpieczające mają zdolność wykrywania ataków typu DoS/DDoS i analizy ruchu na trzech warstwach protokołów komunikacyjnych: warstwie sieciowej, warstwie sesji i warstwie aplikacji, co znacząco redukuje możliwość przeprowadzenia skutecznego ataku typu DoS/DDoS. Aby uchronić się przed uporczywymi i długotrwałymi atakami typu DoS/DDoS, wiele firm i organizacji współpracuje z dostawcami usług internetowych, którzy próbują powstrzymać ataki poprzez niedopuszczanie takiego ruchu sieciowego do serwerów zaatakowanej organizacji. Zazwyczaj można tego dokonać poprzez odpowiednie użycie protokołów routingu, takich jak BGP, oraz zaawansowanych technik DNS. W zdecydowanej większości przypadków w atakach typu DoS/DDoS wykorzystywane są sfałszowane lub niepoprawne adresy IP. Aby uniknąć takich ataków, administratorzy środowisk sieciowych powinni instalować na routerach zewnętrznych rozwiązania wykorzystujące usługę Unicast Reverse Path Forwarding (Unicast RPF), która doskonale sprawdza się jako mechanizm obronny przed atakami DoS/DDoS wykorzystującymi sfałszowane adresy IP. Zastosowanie usługi Unicast RPF jest obecnie uważane za dobrą praktykę i zdecydowanie rekomendowane do wdrażania na routerach zewnętrznego perymetru sieciowego każdego środowiska. Usługę Unicast RPF można zdefiniować na poziomie interfejsu routerów Cisco. Inni producenci routerów również oferują podobne rozwiązania. Kiedy usługa Unicast RPF jest poprawnie skonfigurowana, wszystkie pakiety posiadające niepoprawny bądź niedający się zweryfikować adres IP są automatycznie odrzucane.

285

Kali Linux. Testy penetracyjne

Bardziej zaawansowaną techniką identyfikacji ataków typu DoS/DDoS jest zastosowanie rozwiązań takich jak NetFlow wraz z listami dozwolonych hostów, co pozwala nie tylko na zatrzymanie podejrzanego ruchu na zewnętrznym perymetrze sieciowym, ale również umożliwia wykrywanie ataków inicjowanych i przeprowadzanych wewnątrz chronionego środowiska sieciowego. W takich rozwiązaniach ruch sieciowy jest stale monitorowany i każde wykrycie podejrzanego ruchu sieciowego zgodnego z zapisanymi w bazie wzorcami ataków (takich jak na przykład Smurf czy Teardrops) powoduje wygenerowanie alarmów i inne akcje. Dobre rozwiązania zabezpieczające przed atakami DoS/DDoS są w stanie monitorować zarówno zewnętrzny, jak i wewnętrzny ruch sieciowy.

Obrona przed przechwytywaniem ciasteczek Jak już wspominaliśmy w poprzednich rozdziałach, przechwytywanie ciasteczek to technika ataku polegająca na tym, że napastnik przechwytuje ciasteczko sesji użytkownika. Dobrą obroną przed takim atakiem jest zastosowanie protokołów SSL/TLS 3.0. Bardzo często napastnicy próbują obejść protokoły SSL/TLS poprzez kombinację ataków man-in-the-middle i SSLstrip, aczkolwiek możesz skutecznie uniemożliwić przeprowadzenie takich ataków poprzez zastosowanie w aplikacji internetowej wyłącznie bezpiecznych stron, bez przekierowywania ruchu z połączenia HTTP na szyfrowane połączenie HTTPS. Przechwytywanie ciasteczek w przypadku połączeń SSL/TLS może się udać w sytuacji, kiedy napastnik wykorzysta podatności typu XSS do przesyłania ciasteczek na swoje serwery. Deweloperzy aplikacji internetowych mogą skutecznie zabezpieczyć się przed takimi sytuacjami poprzez ustawianie dla ciasteczek flag Secure oraz HttpOnly.

Często popełnianym błędem w zabezpieczaniu aplikacji internetowych jest zakładanie z góry, że deweloperzy aplikacji wykorzystują bezpieczne połączenia dla całej sesji użytkownika, a nie tylko dla samego uwierzytelniania i logowania do aplikacji. Jeżeli sesja użytkownika nie korzysta z bezpiecznego połączenia, może się łatwo stać celem ataku. Aby uniknąć takiej sytuacji, deweloperzy muszą projektować aplikacje internetowe tak, aby cała sesja użytkownika była obsługiwana za pomocą bezpiecznych protokołów SSL/TLS 3.0, wykorzystujących silne algorytmy szyfrowania. Dodatkowym sposobem zabezpieczającym przed przechwytywaniem ciasteczek jest zastosowanie rozwiązań typu ADC (ang. Application Delivery Controller), takich jak systemy równoważenia obciążenia i filtrowania zawartości. Takie rozwiązania są oferowane przez wiele firm, jak na przykład Cisco, Bluecoat, Riverbed, Websense i inne. W rozwiązaniach tych w ciasteczkach często ustawiane są flagi Secure oraz HttpOnly, a oprócz tego mechanizmy ADC zazwyczaj oferują również zabezpieczenia przed atakami typu XSS.

286

Rozdział 7. • Przeciwdziałanie i zapobieganie

Obrona przed atakami typu Clickjacking Ataki typu Clickjacking omawialiśmy już w rozdziale 5., „Ataki na metody uwierzytelniania”. Mówiąc w uproszczeniu, takie ataki polegają na wprowadzeniu użytkownika w przekonanie, że kliknął na stronie dany obiekt lub łącze, podczas gdy w rzeczywistości kliknął zupełnie inny obiekt podstawiony przez napastnika. Jednym z najlepszych sposobów obrony przed takimi atakami jest używanie w przeglądarkach Firefox i Chrome dodatków NoScript, które zapobiegają wykonywaniu nieautoryzowanego kodu w przeglądarce. Dodatek NoScript potrafi wykrywać nieautoryzowane skrypty, ostrzegać użytkownika i zapobiegać ich uruchamianiu. Użytkownik ma oczywiście możliwość całkowitego wyłączenia monitorowania skryptów lub wyłączenia monitorowania dla danej strony internetowej lub danej sesji. Autorzy tej książki są wielkimi fanami dodatku NoScript. Nie zmienia to jednak w niczym faktu, że deweloperzy aplikacji internetowych powinni po prostu zadbać o to, aby w odpowiedziach HTTP przesyłanych z aplikacji internetowej do klienta były ustawiane nagłówki X-Frame-Options, co skutecznie zapobiega przeprowadzeniu ataku typu Clickjacking. Warto również dodać, że niektóre rozwiązania ADC (o których wspominaliśmy w poprzednim podrozdziale), dają administratorom możliwość przygotowania odpowiednich, dostosowanych do danego środowiska skryptów, pozwalających na zredukowanie możliwości przeprowadzenia takich ataków. Niektóre witryny internetowe wykorzystują różnorodne skrypty dla swoich własnych, jak najbardziej przyzwoitych i uzasadnionych potrzeb. Przykładem takiego zastosowania skryptów mogą być koszyki zamówień w sklepach internetowych czy innych witrynach zajmujących się usługami związanymi z handlem elektronicznym.

Informatyka śledcza W systemie Kali Linux 1.0 znajdziesz narzędzia, które są przeznaczone do realizacji różnych zadań z dziedziny informatyki śledczej. Informatyka śledcza to dział informatyki zajmujący się gromadzeniem i analizą dowodów elektronicznych, a następnie odtwarzaniem na ich podstawie ciągów wydarzeń prowadzących do powstania takiego czy innego incydentu. W tym podrozdziale przedstawimy krótkie wprowadzenie do zagadnień związanych z informatyką śledczą, ponieważ wierzymy, że kiedy już dojdzie do włamania na jeden z Twoich serwerów

287

Kali Linux. Testy penetracyjne

aplikacji internetowych, powinieneś wiedzieć, jak postępować, aby dowiedzieć się, jak doszło do włamania i jak uniknąć takiego incydentu w przyszłości. Oczywiście powinieneś również samodzielnie poszerzać swoją wiedzę na ten temat, ponieważ zagadnienia z tym związane wykraczają daleko poza narzędzia, które znajdziesz w systemie Kali Linux. Informatyka śledcza to bardzo szeroka, bardzo specjalistyczna i bardzo dynamicznie rozwijająca się dziedzina wiedzy. Za każdym razem, kiedy zamierzasz przeprowadzić ekspertyzę wykorzystującą zagadnienia informatyki śledczej, powinieneś pamiętać o trzech kluczowych zasadach, które przedstawimy poniżej. Nieprzestrzeganie którejkolwiek z tych zasad automatycznie spowoduje, że cała ekspertyza będzie wyglądała bardzo amatorsko, a wnioski w niej zawarte będą łatwe do podważenia. Zasada numer jeden głosi, że nigdy nie powinieneś pracować na oryginalnym nośniku danych. Zamiast tego powinieneś zawsze utworzyć dokładną, bitową kopię oryginalnego nośnika i podczas ekspertyzy pracować wyłącznie na tej kopii. Podczas tworzenia kopii powinieneś się również upewnić, że taki proces w żaden sposób nie modyfikuje oryginalnych danych. Pamiętaj, że jeżeli w jakimkolwiek momencie dopuścisz do modyfikacji jakichkolwiek danych na oryginalnym nośniku, cała analiza staje się bezwartościowa. Nośniki danych stanowiące dowody w postępowaniu, których oryginalna zawartość została w jakikolwiek sposób naruszona, zwykle nie zostają dopuszczone do postępowania dowodowego, niezależnie od tego, co zostanie na nich znalezione. Przyczyna takiego stanu rzeczy jest bardzo racjonalna — jeżeli oryginalny nośnik został zmodyfikowany, to nie możemy być pewni, że wnioski i konkluzje wyciągane na podstawie zawartych na nim danych są prawidłowe. Przykładem takiej modyfikacji może być przypadkowa zmiana wartości znacznika czasu utworzenia czy modyfikacji pliku dziennika systemowego. W takiej sytuacji nie jesteśmy w stanie odróżnić tego, czy taka zmiana była spowodowana amatorskim sposobem prowadzenia ekspertyzy, czy może powstała wskutek świadomego działania hakera, próbującego zacierać ślady swojej działalności. Profesjonalny informatyk śledczy do tworzenia bitowej kopii nośników używa specjalistycznych urządzeń, zapobiegających modyfikowaniu zawartości oryginalnego nośnika. Istnieje co najmniej kilka profesjonalnych pakietów oprogramowania, które pozwalają na tworzenie takich kopii nośników danych. Bardzo ważnym elementem ekspertyzy jest tworzenie dokładnej dokumentacji na każdym etapie postępowania. W praktyce można się spotkać z sytuacją, w której taki czy inny nośnik nie został dopuszczony jako dowód w sprawie, ponieważ wartość funkcji skrótu wygenerowana dla danych na oryginalnym nośniku nie pokrywała się z wartością funkcji skrótu kopii danych wykonanej na potrzeby ekspertyzy śledczej. Warto zauważyć, że wartości funkcji skrótu nie będą identyczne już w sytuacji, kiedy w stosunku do oryginału na kopii danych zostanie zmieniony nawet tylko jeden bit! Jeżeli jednak wszystko zostanie przeprowadzone zgodnie ze sztuką i wartości funkcji skrótu oryginalnego nośnika i jego kopii będą takie same, to istnieje prawdopodobieństwo graniczące z pewnością, że wszystkie dane zapisane w kopii, włącznie z plikami dzienników systemowych, znacznikami czasu, informacjami o usuniętych plikach czy metadanymi, będą identyczne z danymi na oryginalnym nośniku. Zasada numer dwa głosi, że ekspertyzie śledczej powinny podlegać wszystkie urządzenia, które posiadają zdolność przechowywania danych. W wielu bardzo ważnych procesach sądowych krytyczne dowody winy lub niewinności podejrzanego były znajdowane w pamięciach

288

Rozdział 7. • Przeciwdziałanie i zapobieganie

masowych takich urządzeń, jak kamery, rejestratory wideo, konsole do gier, telefony komórkowe, smartfony, iPady, iPody, aparaty fotograficzne i inne urządzenia cyfrowe. Mówiąc krótko, jeżeli jakieś urządzenie posiada zdolność przechowywania danych, to może być związane ze sprawą i powinno zostać zbadane przez informatyka śledczego. Nigdy nie powinieneś wykluczać z dochodzenia żadnego urządzenia wyposażonego w pamięć tylko dlatego, że jego związek ze sprawą nie jest oczywisty bądź wręcz wydaje się mało prawdopodobny. Samochodowy system nawigacji satelitarnej czy zbiory muzyki na karcie pamięci SD mogą być wykorzystywane przez złoczyńców do ukrywania innych, związanych ze sprawą danych, które mogą stanowić cenny dowód w postępowaniu. Trzecia fundamentalna zasada informatyki śledczej głosi, że powinieneś szczegółowo i przejrzyście dokumentować cały proces postępowania. Jeżeli chcesz, aby rezultaty Twojej analizy były należycie zrozumiane i wiarygodne, musisz dokładnie, krok po kroku opisać znalezione dowody i sposób, w jaki doszedłeś do takich czy innych wniosków. Co więcej, jeszcze ważniejszym elementem jest to, że każdy inny ekspert, postępujący zgodnie z opisywaną przez Ciebie metodologią, powinien otrzymać dokładnie takie same rezultaty i powinien dojść do takich samych wniosków. Kolejnym ważnym elementem jest odtworzenie poszczególnych kluczowych zdarzeń i precyzyjne umieszczenie ich na osi czasu, co pozwoli później na łatwą analizę tego, co i kiedy się wydarzyło i jaki miało związek z incydentem będącym przedmiotem postępowania. Wszystkie zdarzenia umieszczane na osi czasu muszą być oczywiście odpowiednio udokumentowane. Ekspertyza śledcza to wynik żmudnej pracy specjalisty, którego zadaniem jest odszukanie, zweryfikowanie i przedstawienie dowodów mających związek z określonym incydentem. W słusznej pogoni za złoczyńcami można bardzo łatwo wpaść w pułapkę i rozpocząć wyciąganie wniosków na podstawie niepopartych twardymi dowodami domysłów i przypuszczeń, które jednak wydają się bardzo prawdopodobne. Niestety, jest to najszybsza i najprostsza droga do całkowitego zdyskredytowania wartości całej ekspertyzy śledczej. Jako informatyk śledczy musisz się powstrzymać od jakichkolwiek domysłów i ujmować w swoim raporcie tylko i wyłącznie potwierdzone i dobrze udokumentowane fakty. Czy sympatyczna Alicja z zimną krwią wykradła z komputera Roberta pliki z poufnymi raportami, czy może użytkownik posługujący się kontem „Alicja” w dniu XXXX-XX-XX o godzinie XX:XX zalogował się na komputerze Roberta, podłączył do niego przenośny dysk USB o numerze seryjnym XXXXXXX i o godzinie XX:XX skopiował pliki X, Y i Z zawierające poufne raporty? Czy widzisz różnicę między tymi sformułowaniami? Przecież mogło się zdarzyć tak, że nasz złoczyńca wykradł nazwę użytkownika i hasło dostępu naszej sympatycznej Alicji (oczywiście dokonał tego za pomocą metod opisanych w tej książce) i następnie wykorzystał te informacje do uzyskania nieautoryzowanego dostępu do komputera Roberta, wykradnięcia poufnych plików i pozostawienia tym samym śladów wskazujących na Alicję. Moment, w którym rozpoczynasz snucie domysłów, jest z reguły momentem, w którym Twoja ekspertyza przestaje być wiarygodna i przydatna. Pamiętaj, że jako informatyk śledczy możesz zeznawać w sądzie, gdzie pod przysięgą będziesz musiał opisać, co się wydarzyło w danej chwili. Jeżeli w Twoich zeznaniach znajdą się jakiekolwiek wnioski czy domysły, których nie będziesz mógł poprzeć twardymi dowodami, to Twoja wiarygodność jako eksperta zostanie natychmiast zakwestionowana.

289

Kali Linux. Testy penetracyjne

Uruchamianie systemu Kali Linux w trybie Forensics System Kali Linux może być uruchamiany w kilku trybach pracy. Jednym z nich jest tryb Live (forensic mode), który możesz wybrać po uruchomieniu systemu z dysku Live CD. Jeżeli chcesz używać narzędzi systemu Kali Linux do zadań z zakresu informatyki śledczej, to zdecydowanie powinieneś mieć zawsze pod ręką dystrybucję Live CD tego systemu. Obraz ISO dysku Live CD możesz pobrać ze strony internetowej dystrybucji Kali Linux (więcej szczegółowych informacji na ten temat znajdziesz w rozdziale 1., w części dotyczącej instalowania systemu Kali Linux). Po uruchomieniu systemu Kali Linux z dysku Live CD na ekranie pojawi się menu uruchamiania (ang. Boot menu), z którego możesz wybrać opcję Live (forensic mode).

Używanie systemu Kali Linux w trybie Forensic pozwala Ci pracować zgodnie z pierwszą regułą informatyki śledczej, bez modyfikowania oryginalnego systemu plików. Wewnętrzne dyski komputera nie są automatycznie montowane ani w żaden inny sposób modyfikowane. To samo dotyczy partycji wymiany (ang. swap partition) i innych partycji, które nie są wykorzystywane. W trybie Forensic dyski wymienne również nie są automatycznie montowane. Jeżeli w napędzie CD/DVD znajduje się jakiś dysk bądź do systemu podłączona jest zewnętrzna pamięć USB, to również nic się nie wydarzy. Oczywiście w razie potrzeby możesz ręcznie zamontować wybraną partycję (czy dysk wymienny) i używać jej (lub go) podczas pracy w trybie Forensic. Takie rozwiązanie daje Ci pełną kontrolę nad systemem plików i nośnikami, które zostaną zamontowane w systemie. Jak już wspominaliśmy poprzednio, zawsze powinieneś pracować na kopii oryginalnego źródła danych. Powinieneś zawsze postępować tak, aby zachować oryginalny nośnik w nienaruszonym stanie, mieć możliwość udowodnienia, że wykonana kopia oraz zawartość oryginalnego nośnika są identyczne, oraz udokumentować cały proces tak, aby inny specjalista mógł powtórzyć wykonane przez Ciebie czynności i dojść do takich samych konkluzji. W następnym

290

Rozdział 7. • Przeciwdziałanie i zapobieganie

podrozdziale przyjrzymy się zatem, w jaki sposób możesz użyć narzędzi dostępnych w systemie Kali Linux do utworzenia kopii oryginalnego nośnika i jej weryfikacji za pomocą sumy kontrolnej (funkcji skrótu).

Analiza systemu plików za pomocą narzędzi systemu Kali Linux Pakiet dd to jedno z najpopularniejszych narzędzi systemów Linux/Unix, wykorzystywanych do tworzenia kopii systemów plików. Program pozwala na utworzenie dokładnej, bitowej kopii oryginalnego nośnika, obejmującej wszystkie obszary dysku, łącznie z przestrzenią niealokowaną i sektorami uruchomieniowymi. Bardzo często program ten jest wykorzystywany do tworzenia bitowego obrazu dysku twardego lub zewnętrznego dysku USB. Bitowy obraz dysku utworzony za pomocą programu dd może być następnie montowany i analizowany w innych systemach. Program dd może zapisywać bitowy obraz dysku na wolumenach sieciowych lub zewnętrznych dyskach USB, dzięki czemu oryginalny system plików pozostaje nienaruszony. W kolejnym przykładzie pokażemy, w jaki sposób możesz użyć programu dd do wykonania bitowej kopii wewnętrznego dysku twardego Twojego komputera. Pierwszym etapem tego procesu będzie wybranie komputera i uruchomienie systemu Kali Linux z dysku Live CD do pracy w trybie Forensic. Po załadowaniu systemu w oknie terminala wpisz polecenie sfdisk -l, które wyświetli na ekranie informacje o dyskach zainstalowanych w badanym systemie.

Na rysunku widać, że nasz przykładowy system posiada pięć partycji. Partycje 1, 2 i 5 wydają się najbardziej interesujące, ponieważ partycje 3 i 4 są puste. Pamiętaj, że partycje wymiany (ang. swap partitions) również mogą zawierać interesujące informacje i cenne artefakty pozwalające na odtworzenie aktywności użytkownika. Jeżeli użyjemy dysku Kali Linux Live CD do uruchomienia komputera pracującego normalnie pod kontrolą systemu Windows, to po wykonaniu polecenia sfdisk zobaczymy oczywiście inną strukturę dysków, aczkolwiek metodologia postępowania podczas tworzenia kopii bitowej pozostanie taka sama.

291

Kali Linux. Testy penetracyjne

W kolejnym kroku musimy wybrać partycję, której bitową kopię chcemy utworzyć. W naszym przykładzie wybierzemy pierwszą partycję, która na rysunku jest opisana jako urządzenie /dev/sda1. Podstawowa składnia wywołania polecenia dd jest następująca: dd if= of=

W naszym przykładzie użyjemy następującego polecenia, które utworzy kopię bitową pierwszej partycji: dd if=/dev/sda1 of=sda1-image.dd

Wykonanie takiego polecenia spowoduje utworzenie bitowego obrazu partycji sda1 i zapisanie go w lokalnym systemie plików. Mamy nadzieję, że w tym momencie zauważyłeś pierwszy problem. Właśnie złamaliśmy pierwszą, fundamentalną zasadę informatyki śledczej, która mówi, że nigdy nie możesz modyfikować oryginalnego nośnika. W naszym przypadku plik bitowego obrazu dysku zostanie zapisany na dysku lokalnym, czyli mówiąc inaczej, zawartość oryginalnego, lokalnego systemu plików zostanie znacząco zmodyfikowana. W takiej sytuacji najlepszym rozwiązaniem będzie oczywiście zapisanie tworzonego, bitowego obrazu dysku w innym systemie plików, takim jak inna partycja, wolumen sieciowy czy zewnętrzny dysk USB. Naszym ulubionym rozwiązaniem jest zapisywanie tworzonych obrazów dysków na zewnętrznych dyskach USB, aczkolwiek w rozpatrywanym przykładzie poprzestaniemy na zapisaniu obrazu dysku na lokalnym systemie plików (z całą świadomością złamania w tym przypadku pierwszej reguły informatyki śledczej — ponieważ jest to tylko przykład, takie rozwiązanie jest do przyjęcia). Jeżeli chcesz zapisać tworzoną kopię bitową na zewnętrznym dysku USB, musisz go najpierw podłączyć do badanego systemu. Ponieważ system Kali Linux pracuje w trybie Forensic, dysk USB nie zostanie automatycznie zamontowany w systemie plików. W większości przypadków pozostawimy taki dysk niezamontowany i pozwolimy, aby zajął się nim program dd. Aby to zrobić, powinieneś wykonać polecenie przedstawione na rysunku poniżej:

Jak widać, w naszym przykładzie lokalizacja dysku USB to /dev/null, aczkolwiek w praktyce możesz wybrać dowolną inną lokalizację. Tworzoną kopię bitową możesz również zapisać bezpośrednio na wybranym wolumenie sieciowym. Aby to zrobić, powinieneś wykonać polecenie przedstawione poniżej: dd if=/dev/sda1 | nc

W przykładzie przedstawionym poniżej kopia bitowa partycji sda1 zostanie zapisana na serwerze sieciowym o adresie IP 10.0.0.5: dd if=/dev/sda1 | nc 10.0.0.5

292

Rozdział 7. • Przeciwdziałanie i zapobieganie

Oczywiście istnieje wiele innych narzędzi pozwalających na tworzenie bitowych kopii systemu plików. W naszym przypadku rekomendujemy korzystanie z polecenia dd, ponieważ polecenie to możesz znaleźć zarówno w systemie Kali Linux, jak i większości innych systemów Linux i Unix. Sam proces tworzenia bitowego obrazu dysku może zająć wiele godzin, w zależności oczywiście od rozmiarów kopiowanego dysku czy partycji. Choć polecenie dd to naprawdę świetne narzędzie, to jednak nie zawsze będzie ono najlepszym wyborem. Jeżeli masz zamiar utworzyć bitowy obraz całego dysku twardego, to możesz skorzystać z wielu innych narzędzi, takich jak choćby pakiety AIMIAGE czy AIR Imager. Nie są one co prawda domyślnie instalowane w systemie Kali Linux, niemniej jednak są bardzo popularne. Pamiętaj, że jeżeli istnieje prawdopodobieństwo, iż Twoja ekspertyza może być wykorzystywana podczas procesu sądowego, powinieneś upewnić się, że korzystasz z narzędzi, które są sprawdzone i spełniają wszystkie wymogi prawne dotyczące postępowania z elektronicznym materiałem dowodowym.

Polecenie dc3dd Polecenie dc3dd to po prostu pakiet dd o funkcjonalności rozbudowanej pod kątem zastosowania w informatyce śledczej. Program dc3dd potrafi obliczać wartość sumy kontrolnej zarówno oryginalnego nośnika danych, jak i jego utworzonej bitowej kopii, co pozwala na udowodnienie, że zawartość oryginalnego nośnika i jego kopii jest identyczna. Można tego dokonać właśnie poprzez obliczanie sumy kontrolnej (za pomocą jednego z algorytmów funkcji skrótu) i późniejsze porównanie jej wartości dla oryginalnego nośnika i jego kopii bitowej. W kolejnym przykładzie ponownie użyjemy polecenia sfdisk -l, aby wyświetlić listę dostępnych dysków i partycji, jak przedstawiono na rysunku poniżej:

Polecenie dc3dd jest wywoływane w bardzo podobny sposób jak polecenie dd. Aby z niego skorzystać, musisz wybrać dysk lub partycję źródłową oraz wskazać docelową lokalizację pliku zawierającego kopię bitową. Do wyboru masz również opcję pozwalającą na wybranie algorytmu funkcji skrótu, za pomocą którego zostanie utworzona suma kontrolna oryginalnego nośnika i jego bitowej kopii. W naszym przykładzie utworzymy kopię bitową partycji /dev/sda2 i zapiszemy ją w pliku o nazwie CopyofDrivedc3dd. Suma kontrolna zostanie obliczona za pomocą algorytmu sha256.

293

Kali Linux. Testy penetracyjne

Pamiętaj, że jest to tylko przykład zaprezentowany w celu edukacyjnym. W przypadku prawdziwego dochodzenia bitowa kopia dysku powinna zostać zapisana w innym systemie plików, takim jak na przykład zewnętrzny dysk USB.

Po zakończeniu tworzenia bitowej kopii dysku polecenie dc3dd wyświetli na ekranie wartość sumy kontrolnej oryginalnego nośnika.

W tym momencie niezmiernie ważną sprawą jest potwierdzenie, że wartość sumy kontrolnej wykonanej kopii bitowej jest identyczna z wartością sumy kontrolnej oryginalnego nośnika. Do obliczenia sumy kontrolnej kopii bitowej możemy użyć polecenia sha256sum. Jeżeli wszystko poszło tak jak trzeba i za pomocą tego polecenia obliczymy sumę kontrolną oryginalnego nośnika (partycja /dev/sda2) i jego kopii bitowej (plik CopyofDrivedc3dd), otrzymane wyniki będą identyczne. Jeżeli obie sumy kontrolne są identyczne, to jest to dla nas potwierdzenie, że proces kopiowania zakończył się pomyślnie i że dysponujemy dokładną, bitową kopią oryginalnego nośnika, której możemy z powodzeniem użyć zamiast oryginalnego nośnika podczas analizy śledczej.

294

Rozdział 7. • Przeciwdziałanie i zapobieganie

Inne narzędzia śledcze w systemie Kali Linux W systemie Kali Linux możesz znaleźć bardzo wiele narzędzi śledczych, które w menu systemu zostały umieszczone w grupie o nazwie Forensics. Poniżej zamieszczamy krótkie zestawienie najciekawszych narzędzi, które możesz wykorzystać podczas analizy śledczej aplikacji internetowych.

chkrootkit Pakiet chkrootkit to narzędzie, które na podstawie bazy sygnatur i analizy działających procesów sprawdza, czy w systemie Linux nie został zainstalowany rootkit. Program ten możesz traktować jako swego rodzaju program antywirusowy czy pakiet wykrywający złośliwe oprogramowanie w systemie Linux. Aby uruchomić program chkrootkit, powinieneś otworzyć okno terminala i wpisać polecenie chkrootkit. Program rozpocznie skanowanie systemu pod kątem obecności potencjalnych rootkitów.

chkrootkit to prosty program, pozwalający upewnić się, że Twoja kopia systemu Kali Linux

nie została zainfekowana. Oczywiście możesz również korzystać z tego programu w innych dystrybucjach systemu Linux.

Autopsy Pakiet Autopsy to narzędzie śledcze typu open source, które może działać na komputerach pracujących pod kontrolą systemów Windows, Linux, OS X i Unix. Program pozwala na przeprowadzanie dogłębnej analizy bitowych obrazów dysków z systemami plików, takimi jak NTFS, FAT, HFS+, Ext3, UFS i kilkoma innymi. Pakiet Autopsy jest bardzo często wykorzystywany jako narzędzie analizy plików bitowych obrazów dysków w dochodzeniach informatyki śledczej oraz służące do zarządzania nimi. Pamiętasz, w jaki sposób tworzyliśmy obrazy dysków za pomocą narzędzi dd i dc3dd? Wykorzystując pakiet Autopsy, możesz dokonać analizy systemu plików zapisanego w takim obrazie dysku. Aby w systemie Kali Linux uruchomić pakiet Autopsy, w menu głównym przejdź do grupy Kali Linux, a następnie wybierz polecenie Forensics/Digital Forensics/autopsy. Na ekranie pojawi się okno terminala, z poziomu którego zostanie uruchomiona cała aplikacja. Pozostaw okno terminala otwarte, a następnie uruchom przeglądarkę i w pasku adresu wpisz http://localhost:9000/autopsy.

295

Kali Linux. Testy penetracyjne

Aby utworzyć nową ekspertyzę, wybierz opcję New Case. Na ekranie pojawi się okno podobne do przedstawionego poniżej:

Następnie program poprosi Cię o podanie kilku dodatkowych szczegółów, które będą niezbędne do kontynuowania pracy. Musisz podać między innymi informację o ustawieniach strefy czasowej, przesunięciu czasu między Twoim lokalnym systemem a systemem poddawanym analizie czy wprowadzić kilka dodatkowych informacji, takich jak nazwy hostów związanych ze sprawą. W kolejnym przykładzie użyjemy programu Autopsy do analizy bitowego obrazu dysku utworzonego za pomocą polecenia dd, jak zaprezentowano na kolejnym rysunku:

296

Rozdział 7. • Przeciwdziałanie i zapobieganie

Pierwszym krokiem będzie załadowanie do programu Autopsy pliku mytestimage.dd, zawierającego obraz dysku.

Tworząc obraz dysku za pomocą programu dc3dd, będziesz miał możliwość automatycznego obliczenia sumy kontrolnej; możesz to również zrobić w programie Autopsy. Autorzy tej książki zdecydowanie rekomendują jednak samodzielne obliczenie sumy kontrolnej MD5, czego możesz dokonać za pomocą polecenia md5sum.

Po obliczeniu wartości sumy kontrolnej możesz ją wstawić bezpośrednio do programu Autopsy.

297

Kali Linux. Testy penetracyjne

Autopsy to platforma, która znakomicie wspomaga proces analizy danych i gromadzenia cyfrowych dowodów w dochodzeniach informatyki śledczej. Programu Autopsy możesz używać do analizowania zawartości całych dysków, plików, metadanych i wielu innych elementów systemu plików. Program ten może również korzystać z bazy sum kontrolnych udostępnianej przez National Institute of Standards Software Reference Library, co pozwala na szybkie wyodrębnienie listy plików, które są znane i sprawdzone, oraz takich, które należy poddać bardziej szczegółowej analizie.

Binwalk Ciekawym wyzwaniem, przed którym często staje analityk prowadzący dochodzenie, jest określenie przeznaczenia plików binarnych zapisanych w badanym systemie plików. Jest to kłopotliwe o tyle, że kod źródłowy większości programów z reguły nie jest dostępny. Binwalk to program przeznaczony do wspomagania analizy, ekstrakcji wewnętrznych systemów plików oraz inżynierii wstecznej oprogramowania firmware i innych, wykonywalnych plików binarnych. Głównym zadaniem programu jest analiza binarnych plików zawierających oprogramowanie firmware różnych urządzeń, na przykład istnieją rozszerzenia pozwalające na analizowanie oprogramowania urządzeń sieciowych i domowych routerów bezprzewodowych oraz wielu innych urządzeń elektronicznych. Program Binwalk posiada całkiem sporo opcji wywołania, których bardzo szczegółowy opis możesz znaleźć na stronie internetowej https://code.google.com/p/binwalk/wiki/Usage. W najprostszym przypadku możesz użyć tego programu, podając w wierszu polecenia nazwę programu oraz nazwę pliku binarnego z oprogramowaniem firmware, którego zawartość chcesz przeanalizować. W następnym przykładzie użyjemy polecenia binwalk do analizy oprogramowania firmware routera bezprzewodowej sieci domowej, jak przedstawiono na kolejnym rysunku.

Wyniki działania programu Binwalk są następujące:

Na podstawie analizy dwóch powyższych rysunków możemy dojść do wniosku, że oryginalna nazwa pliku, którego zawartość poddaliśmy analizie, została przez kogoś zmieniona, tak aby wskazywała na oprogramowanie dla innego urządzenia (FW_WRT54G to model routera firmy Linksys). Po przeprowadzeniu analizy za pomocą programu Binwalk możemy się jednak przekonać, że w rzeczywistości nasz plik zawiera oprogramowanie firmware dla routera NetGear DG834GT firmy Sercomm.

298

Rozdział 7. • Przeciwdziałanie i zapobieganie

pdf-parser Program pdf-parser to narzędzie przeznaczone do analizy zawartości plików PDF (ang. Portable Document Format) oraz wyodrębniania z nich takich elementów jak kod skryptów czy osadzone obrazy. Głównym zastosowaniem tego programu jest analiza podejrzanych plików PDF pod kątem obecności złośliwego oprogramowania (takiego jak trojany czy downloadery).

Foremost Pakiet Foremost to program przeznaczony do wyszukiwania i odzyskiwania plików danych z niealokowanych przestrzeni dyskowych na podstawie analizy sygnatur nagłówków, stopek oraz wewnętrznych struktur plików. Foremost może pracować z plikami obrazów dysków, utworzonych za pomocą takich programów jak dd, Safeback czy EnCase lub bezpośrednio na dyskach. Sygnatury plików, obejmujące nagłówki, stopki i inne elementy, są definiowane za pomocą specjalnego pliku konfiguracyjnego lub za pomocą opcji podawanych bezpośrednio w wierszu wywołania programu. Program posiada dużą bazę predefiniowanych sygnatur plików, jak również pozwala użytkownikowi na definiowanie swoich własnych sygnatur, co daje dużą elastyczność podczas wyszukiwania i odzyskiwania plików.

Pasco Pasco to narzędzie śledcze, przeznaczone do analizy zawartości plików index.dat, tworzonych przez program Microsoft Internet Explorer. Pliki index.dat przechowują historię przeglądanych przez użytkownika stron internetowych, co może być bezcennym artefaktem dla informatyka śledczego prowadzącego dochodzenie. System operacyjny przechowuje pliki index.dat w kilku lokalizacjach na dysku twardym komputera, możesz je znaleźć na przykład w jednym z katalogów w profilu użytkownika. Program Pasco działa tylko dla przeglądarki Internet Explorer. Inne przeglądarki, takie jak Firefox czy Chrome, nie korzystają z plików index.dat. Przeglądarki Firefox i Chrome przechowują dane o stronach internetowych odwiedzanych przez użytkownika w bazach danych SQLite. Lokalizacja plików tych baz zależy od systemu operacyjnego, ale w każdym przypadku zawartość takich plików możesz przeglądać za pomocą dowolnej przeglądarki plików baz danych SQLite. Jednym z ulubionych programów tego typu, z jakich korzystają autorzy tej książki, jest wtyczka SQLite Manager do przeglądarki Firefox.

Scalpel Scalpel to kolejne narzędzie przeznaczone do wyszukiwania i odzyskiwania plików danych

z niealokowanych przestrzeni dyskowych na podstawie analizy sygnatur nagłówków, stopek oraz wewnętrznych struktur plików. Konfiguracja programu odbywa się za pomocą pliku scalpel.conf, przechowującego sygnatury plików, które będą odzyskiwane.

299

Kali Linux. Testy penetracyjne

bulk_extractor Program bulk_extractor jest przeznaczony do wydobywania z plików obrazu dysków różnorodnych informacji, takich jak numery kart kredytowych, numery telefonów, adresy URL czy adresy poczty elektronicznej. Program potrafi również generować na podstawie zawartości obrazu dysku listy wyrazów, które następnie mogą być wykorzystywane do przeprowadzania ataków słownikowych na hasła. Wydobywanie danych za pomocą programu bulk_extractor może zająć wiele godzin, ale zazwyczaj wyniki jego działania z nawiązką rekompensują poświęcony czas i są bardzo cenne dla analityka prowadzącego dochodzenie.

Podsumowanie Uwzględnianie zagadnień związanych z zabezpieczaniem systemu już na wczesnym etapie projektowania jest krytycznym czynnikiem mającym bardzo istotny wpływ na funkcjonowanie całego środowiska sieciowego. Celem, jaki przyświecał nam przez cały czas podczas tworzenia tej książki, oprócz oczywiście przedstawienia zagadnień związanych z przeprowadzaniem testów penetracyjnych aplikacji internetowych było poszerzanie świadomości Czytelników na temat zagrożeń czyhających na każdego z nas w internecie i sposobów obrony przed takimi zagrożeniami. To jak odwieczna walka pocisku z pancerzem — hakerzy używają coraz bardziej wyrafinowanych „pocisków” w celu uzyskania nieautoryzowanego dostępu do atakowanych systemów, podczas gdy administratorzy systemów starają się wdrażać coraz bardziej wyrafinowane „pancerze”, mające za zadanie skutecznie chronić te systemy przed „pociskami”. W internecie każdy może być celem ataku, stąd zadaniem każdego właściciela systemu jest zaangażowanie odpowiedniego czasu i zasobów potrzebnych do wdrożenia mechanizmów obronnych, redukujących możliwość przeprowadzenia skutecznego ataku. W tym rozdziale omawialiśmy metody i sposoby obrony przed atakami prezentowanymi w poprzednich rozdziałach. Należy tutaj jednak przypomnieć, że głównym przeznaczeniem narzędzi i metod omawianych w poprzednich rozdziałach jest przeprowadzanie testów penetracyjnych oraz wyszukiwanie podatności i luk w zabezpieczeniach, mające na celu podnoszenie ogólnego poziomu zabezpieczeń danego systemu. Omawialiśmy tutaj takie zagadnienia, jak klonowanie środowiska aplikacji sieciowych, pozwalające na uniknięcie przeprowadzania testów penetracyjnych w środowisku produkcyjnym, wyznaczanie podstawowych wymogów bezpieczeństwa, jakie muszą być spełnione w danym środowisku, oraz różne metody obrony przed atakami prezentowanymi w poprzednich rozdziałach książki. Poruszaliśmy tutaj takie problemy, jak łamanie haseł, ataki typu man-in-the-middle, SSL stripping, DoS, clickjacking czy przechwytywanie ciasteczek sesji użytkowników. Na koniec rozdziału pokazaliśmy również, w jaki sposób można wykorzystać narzędzia systemu Kali Linux do realizowania zadań związanych z informatyką śledczą. W kolejnym rozdziale naszej książki będziemy zajmować się dobrymi praktykami przeprowadzania testów penetracyjnych oraz tworzenia profesjonalnych raportów końcowych

300

8 Tworzenie raportów końcowych Zanim rozpoczniemy nasz ostatni rozdział, chcielibyśmy wyraźnie zaznaczyć, że główny nacisk położymy w nim na raporty, klauzule i umowy. Omawiane przykłady mogą być wykorzystywane jako ogólne wytyczne do tworzenia takich dokumentów. Nie jesteśmy jednak prawnikami, więc pamiętaj, że opisywane lub przywoływane tutaj techniki, zasady, normy, standardy, przepisy i inne wytyczne w żaden sposób nie mogą być traktowane jako wykładnia prawna. Jeżeli zlecenie, nad którym pracujesz, robi się naprawdę poważne, powinieneś poszukać wsparcia u prawdziwego radcy prawnego. Nie zmienia to jednak w niczym faktu, że jesteśmy zapalonymi fanami serialu Orły z Bostonu, a naszym niedoścignionym wzorem jest oczywiście Denny Crane1. Administratorzy sieci komputerowych zajmują się tworzeniem i konfigurowaniem połączeń sieciowych, programiści tworzą aplikacje, a audytorzy piszą raporty. Jako specjalista zajmujący się przeprowadzaniem testów penetracyjnych niejako z definicji stajesz się audytorem. W przeciwieństwie do administratora sieci komputerowych, który zajmuje się konfiguracją protokołów i połączeń sieciowych, czy programisty, którego efekty pracy przekładają się na szybki, sprawny i bezbłędny kod aplikacji, wartość przeprowadzonego audytu, a przy okazji i samego pentestera, można ocenić dopiero na podstawie utworzonego przez niego raportu końcowego. Można śmiało powiedzieć, że pisanie dobrych raportów to zadanie balansujące na pograniczu nauki i sztuki. W internecie (i nie tylko) możesz znaleźć wiele znakomitych źródeł, zawierających cenne wskazówki, uwagi i porady na temat tego, jak powinien wyglądać dobry raport. 1

Orły z Bostonu (oryginalny tytuł Boston Legal) to popularny serial amerykański, nadawany w latach 2004 – 2008 w telewizji ABC. Głównym wątkiem serialu są sprawy i relacje pomiędzy prawnikami z Bostonu, a wspomniany Denny Crane to jeden z założycieli serialowej kancelarii prawniczej Crane, Poole & Schmidt i jej starszy wspólnik — przyp. tłum.

Kali Linux. Testy penetracyjne

Pamiętaj, że Twoja praca będzie oceniana przez pryzmat raportu końcowego z przeprowadzonego testu penetracyjnego, a mówiąc ściślej, przez pryzmat tego, w jakiej formie przedstawisz swoje wnioski i ustalenia w raporcie. Pierwszym grzechem głównym, który może mieć duży wpływ na sposób odbioru raportu końcowego przez klienta, są wszelkiego rodzaju błędy ortograficzne i gramatyczne, a nawet zwykłe, ale częste literówki. Drugi grzech główny to nielogiczny sposób prowadzenia narracji raportu oraz wszelkiego rodzaju błędy stylistyczne. Z tych właśnie powodów polecanym rozwiązaniem jest poproszenie o dokonanie przeglądu i korekty raportu kogoś, kto nie jest bezpośrednio związany z wykonywanym przez Ciebie zadaniem i kto dzięki temu będzie mógł spojrzeć na Twój raport z perspektywy niezaangażowanej osoby trzeciej. Idąc jeszcze dalej, możesz nawet poprosić o przeczytanie i sprawdzenie Twojego raportu osobę, która jest całkowicie spoza branży i nie posiada żadnego przygotowania technicznego w dziedzinie testów penetracyjnych. Sposób i forma prezentacji wniosków końcowych z przeprowadzania testów penetracyjnych mogą być jednym z kluczowych czynników mających wpływ na reputację i funkcjonowanie Twojej firmy. Pisząc raporty końcowe, powinieneś starać się dostosowywać styl narracji do powszechnie stosowanych dobrych praktyk oraz uznanych, międzynarodowych standardów, takich jak CoBIT (ang. Control Objectives for Information and related Technology) czy ITIL (ang. Information Technology Infrastructure Library). Oprócz tego Twój raport musi być zgodny ze standardami, procedurami i wytycznymi organizacji lub firmy, która zlecała przeprowadzenie testu penetracyjnego. Nie powinieneś również zapominać o tym, że przygotowany przez Ciebie raport końcowy może być czytany i przeglądany przez wielu ludzi, a jego „czas życia” może się okazać znacznie dłuższy, niż mógłbyś początkowo zakładać. Zleceniodawca zawsze chce wiedzieć, jak bardzo jego środowisko jest podatne na ataki i co może zrobić, aby ryzyko przeprowadzenia takich ataków skutecznie zredukować. Czasami pozornie mało istotne czynniki, jak formatowanie poszczególnych stron albo nawet ogólny ton raportu, mogą mieć duży wpływ na to, czy Twój raport zostanie odebrany w pozytywny czy w negatywny sposób. Pamiętaj, że wskazanie takich czy innych luk w zabezpieczeniach systemu może spowodować to, że osoby odpowiedzialne za bezpieczeństwo systemu poniosą poważne konsekwencje, z utratą pracy włącznie. Z drugiej strony nawet krytyczna luka w zabezpieczeniach może zostać po prostu zignorowana, jeżeli w swoim raporcie nie położysz odpowiedniego nacisku na to, jak poważne niesie ona ze sobą ryzyko i jak niezmiernie istotne dla prawidłowego i bezpiecznego działania systemu jest jej jak najszybsze usunięcie. Dobrze przygotowany raport powinien zachować odpowiedni balans pomiędzy zagadnieniami biznesowymi i merytorycznymi, tak aby realizacja zawartych w nim wniosków i zaleceń miała pozytywny wpływ zarówno na kadrę zarządzającą, jak i personel techniczny. Dobrym punktem wyjścia do przygotowania raportu końcowego jest zapoznanie się z regulacjami, procedurami i standardami wyznaczonymi przez zleceniodawcę. Zapewnienie zgodności raportu z wymaganiami klienta oraz wytycznymi rekomendowanymi przez uznane standardy przemysłowe będzie jednym z pierwszych zagadnień omawianych w tym rozdziale. Następnie przyjrzymy się kilku modelom biznesowym, które możesz wykorzystywać do oszacowania kosztów Twoich usług, jakie będzie musiał ponieść klient. W dalszej części rozdziału skoncentrujemy

302

Rozdział 8. • Tworzenie raportów końcowych

się na różnych sposobach formatowania raportów, a na koniec zaprezentujemy kilka przykładowych raportów oraz przedstawimy wybrane narzędzia systemu Kali Linux wspomagające tworzenie raportów.

Zgodność ze standardami i procedurami Praktycznie każdy zleceniodawca ma ograniczony budżet, a co gorsza, inwestycje związane z bezpieczeństwem środowiska sieciowego zazwyczaj nie są na czele listy planowanych wydatków. Doświadczenie uczy, że firmy i organizacje zaczynają inwestować w bardziej zaawansowane mechanizmy zabezpieczeń dopiero po wystąpieniu pierwszego poważnego incydentu. Inaczej mówiąc, częściej mamy do czynienia z postawą reaktywną niż proaktywną. Świadczenie usług (takich jak testy penetracyjne), które mają na celu oszacowanie istniejącego poziomu zabezpieczeń danego środowiska, staje się jeszcze większym wyzwaniem w sytuacji, kiedy firmy i organizacje mają wystarczającą ilość kłopotów z utrzymaniem środowiska na bieżącym poziomie, nie mówiąc już nawet o inwestowaniu w nowe technologie. Możemy tutaj się posłużyć prostą analogią. Większość ludzi, kupując nowego laptopa, zdecydowanie bardziej zwraca uwagę na jego funkcjonalność niż mechanizmy obronne (inaczej mówiąc, częściej decydują się na zakup np. pakietu Microsoft Office niż dobrego programu antywirusowego). Dopiero w sytuacji, kiedy taki laptop zostanie poważnie zainfekowany, dla jego właściciela priorytetem staje się zakupienie i zainstalowanie odpowiedniego oprogramowania antywirusowego, które będzie w stanie przywrócić funkcjonalność komputera i zabezpieczyć go przed podobną sytuacją w przyszłości. Jednym ze sposobów na przeniesienie Twoich usług na początek listy priorytetowych inwestycji właściciela danego środowiska jest dostosowanie ich zakresu i sposobów realizacji do obowiązujących przepisów, regulacji i standardów. Potencjalni klienci są o wiele bardziej skłonni do zamówienia usługi, która pomoże spełnić określone wymagania prawne czy proceduralne, a co więcej, uzasadnienie konieczności poniesienia kosztów związanych z realizacją takiej usługi jest wtedy znacznie łatwiejsze. Bardzo często firmy i organizacje prowadzące pewne rodzaje działalności są narażone na poważne reperkusje prawne lub finansowe, jeżeli w wyniku przeprowadzonego audytu okaże się, że ich środowisko teleinformatyczne nie spełnia wymaganych norm. Dostosowanie poziomu oferowanych przez Ciebie usług do wymogów określonych standardów przemysłowych i uregulowań prawnych może spowodować, że Twoja szansa na uzyskanie kolejnego zlecenia będzie znacząco większa. Możemy wyróżnić trzy podstawowe rodzaje wymagań:  Podstawowe wymogi bezpieczeństwa — to podstawowy zestaw wymagań,

które muszą być spełnione, aby system osiągnął minimalny, akceptowalny poziom bezpieczeństwa. Podstawowe wymagania bezpieczeństwa mogą obejmować dowolny aspekt konfiguracji systemu, nie muszą być specyficzne dla danego środowiska czy rodzaju prowadzonej działalności i możesz je traktować jako funkcjonalną bazę dla bardziej rozbudowanych norm i standardów.

303

Kali Linux. Testy penetracyjne

 Standardy — to zestaw wymagań, które muszą być spełnione w danym środowisku.

Standardy mogą narzucać stosowanie określonych technologii, metodologii i rozwiązań, a ich wdrażanie może wymagać wykorzystywania konkretnych urządzeń, produktów czy protokołów. Przykładem może być użycie platformy Cisco Identity Services Engine do realizacji wymagań standardu 802.1x w zakresie kontroli dostępu do sieci przewodowych i bezprzewodowych.  Wytyczne — to zestaw zaleceń, których spełnienie jest rekomendowane, ale

nie jest wymagane. Wytyczne możesz traktować podobnie jak standardy czy inne normy, z tym że ich przestrzeganie nie jest obowiązkowe. Przykładem mogą być wytyczne sugerujące otwieranie tylko wybranych portów w zaporze sieciowej, które mogą, ale nie muszą być spełnione.

Usługi profesjonalne Najczęściej stosowanymi modelami rozliczania kosztów z klientami są umowy ze stałą ceną za wykonanie usługi oraz umowy rozliczane według rzeczywistego zużycia czasu i zasobów. Umowy ze stałą ceną to model, w którym cena za wykonanie określonej usługi jest ustalana z góry. Należna kwota może się zmienić jedynie w sytuacji, kiedy zleceniodawca zażąda wykonania dodatkowych usług, które wykraczają poza uzgodniony wcześniej zakres prac. W większości przypadków wszelkie modyfikacje warunków takiej usługi muszą być sporządzone w formie pisemnego aneksu, który musi być zaakceptowany i podpisany przez obie strony. Z punktu widzenia zleceniobiorcy umowa ze stałą ceną niesie ze sobą pewne ryzyko utraty zysku, ponieważ należna kwota jest niezmienna niezależnie od ilości czasu i zasobów, jakie musi on poświęcić na wykonanie umowy. Z drugiej strony oznacza to jednak, że wykonanie usługi w czasie krótszym niż założony lub przy nakładzie pracy mniejszym niż przewidywany w umowie oznacza dla zleceniobiorcy dodatkowy zysk. Z tych właśnie względów kluczowym elementem przy negocjowaniu takich umów jest dokładne określenie zakresu prac i oszacowanie czasu niezbędnego do wykonania usługi przy zachowaniu pewnego marginesu bezpieczeństwa na nieprzewidziane okoliczności. Dla zleceniodawcy podpisanie umowy ze stałą ceną oznacza możliwość zaplanowania kosztów i czasu realizacji takiej usługi. Jest to bardzo wygodne rozwiązanie, ponieważ to zleceniobiorca ponosi ryzyko związane z ewentualnym niedoszacowaniem nakładów pracy niezbędnych do wykonania usługi będącej przedmiotem umowy. Duże firmy i organizacje bardzo często rozpisują przetargi na wykonanie takich usług. W takiej sytuacji zleceniodawca dyktuje warunki, jakie muszą spełniać napływające oferty, i określa reguły wyboru najlepszej oferty. Kryteria wyboru bywają różne i mogą obejmować wiele czynników, takich jak cena, zgodność z wymaganiami, wartości dodane i inne. Zdarza się również i tak, że jedynym kryterium wyboru jest cena. Warto jednak pamiętać, że najtańsza oferta nie zawsze jest najlepsza, a nieumiejętne przeprowadzenie testów penetracyjnych może narobić szkód, których usunięcie będzie kosztowało wielokrotnie więcej, niż wynosiła początkowa oferta innej, bardziej renomowanej firmy.

304

Rozdział 8. • Tworzenie raportów końcowych

Aby uniknąć takich sytuacji, warto przygotować warunki wykonania usługi, które mogą być spełnione jedynie przez firmy posiadające odpowiednie kwalifikacje, dzięki czemu będzie możliwe zbalansowanie oczekiwanej jakości wykonania usługi z jej kosztami. Drugą popularną formą rozliczania kosztów usług są umowy rozliczane według rzeczywistego zużycia czasu i zasobów. Zazwyczaj podstawą do rozliczeń między stronami umowy jest rzeczywista liczba godzin pracy wykazywana przez zleceniobiorcę. W przypadku takich umów często stosowanym rozwiązaniem jest dywersyfikacja stawek godzinowych pracowników różnych szczebli, gdzie na przykład technik jest rozliczany według stawki 100 zł/godz., ale już dla kierownika projektu będzie to 250 zł/godz. Powszechnie stosowaną praktyką podczas przygotowywania takich umów jest tworzenie harmonogramu prac z oszacowaniem liczby potrzebnych roboczogodzin, dzięki czemu zleceniodawca jest w stanie określić przybliżone koszty, jakie będzie musiał ponieść na poszczególnych etapach umowy. Umowy rozliczane według rzeczywistego zużycia czasu i zasobów niosą ze sobą pewne ryzyko dla zleceniodawcy, ponieważ zleceniobiorca może obciążać go kosztami za dodatkowe prace związane z realizacją umowy. Co więcej, w przypadku takiej umowy zleceniobiorca nie ma specjalnej motywacji do wykonania usługi wcześniej niż w terminie założonym w umowie, a co gorsza, może nawet próbować celowo opóźniać zakończenie prac. Z drugiej strony zleceniodawca, przejmując na siebie pewien zakres prac, może nieco zaoszczędzić na kosztach umowy; może np. osiągnąć pewne oszczędności, jeżeli rzetelny zleceniobiorca wykona założony zakres prac w wymiarze godzin mniejszym niż zakładany. Jeżeli chcesz świadczyć swoje usługi na profesjonalnym poziomie, powinieneś raczej skłaniać się do podpisywania umów ze stałą ceną za wykonanie określonej usługi. Dobrze zdefiniowana umowa powinna precyzyjnie wyznaczać zakres prac i termin wykonania usługi, dzięki czemu zleceniodawca będzie zadowolony, a Ty unikniesz kłopotów związanych z niedoszacowaniem koniecznego nakładu pracy. Żaden zleceniodawca nie wystawi czeku in blanco za Twoje usługi — zamiast tego zazwyczaj będziesz musiał precyzyjnie z góry określić koszt wykonania takiego zlecenia. Często możesz spotkać się z sytuacją, w której klient w celu zredukowania kosztów całego zlecenia zaproponuje zastąpienie jednego członka bądź nawet kilku członków Twojego zespołu swoimi pracownikami. Zleceniodawca może na przykład zaproponować zaangażowanie swojego kierownika projektu do wykonania działań związanych z zaplanowaniem całego harmonogramu prac. Niestety, takie rozwiązania mogą nieść ze sobą ryzyko związane z niewłaściwym zarządzaniem i alokacją zasobów, co z kolei może powodować problemy z realizacją zadania, zwiększenie nakładu pracy niezbędnego do jego wykonania i wreszcie zwiększenie kosztów całego projektu. Zdecydowanie powinieneś unikać takich scenariuszy, ponieważ współpraca z członkiem zespołu, który nie należy do Twojej organizacji, może być naprawdę trudna i może powodować niepotrzebne nikomu konflikty i nieporozumienia.

305

Kali Linux. Testy penetracyjne

Dokumentacja Tworzenie raportów końcowych i innych elementów dostarczanych klientowi po zakończeniu realizacji zlecenia może być podzielone na kilka etapów, jak przedstawiono na rysunku poniżej. Pierwszym etapem jest przegląd projektu. Jest to faza, w której usługodawca przegląda i analizuje zakres zlecanych prac, zapoznaje się z celami biznesowymi klienta, wnoszonymi przez niego zastrzeżeniami i ograniczeniami oraz oczekiwaniami po zakończeniu zlecenia. Wszystkie wymienione elementy oraz inne materiały mogą być wykorzystywane podczas tworzenia szablonu raportu. Kolejnym etapem będzie stopniowe wypełnianie szablonu raportu danymi pozyskiwanymi w fazie rozpoznania i gromadzenia informacji. Mogą one obejmować listy zidentyfikowanych urządzeń, procesy, podatności na ataki i luki wykryte w zabezpieczeniach poszczególnych urządzeń, zestawienie zweryfikowanych podatności i luk, które stanowią rzeczywiste zagrożenie dla poszczególnych systemów, rekomendowane sposoby usunięcia podatności i luk w zabezpieczeniach oraz wiele innych danych. Po zakończeniu gromadzenia danych i umieszczeniu ich w szablonie raportu możesz przystąpić do trzeciego etapu, czyli przygotowania pierwszej, roboczej wersji raportu końcowego. Pierwsza wersja robocza nigdy nie jest prezentowana klientowi i powinna zawierać praktycznie wszystkie dane, jakie udało się do tej pory zebrać na temat zlecenia. Ostatnim etapem prac jest przegląd wersji roboczej i przygotowanie końcowej wersji raportu, która zawiera przygotowany zestaw najważniejszych danych oraz jest odpowiednio sformatowana i napisana w profesjonalny sposób, zgodnie z wymaganiami prawnymi i standardami przemysłowymi. Dobrym, rekomendowanym rozwiązaniem jest zatrudnienie do przeglądu finalnej wersji raportu co najmniej dwóch osób, z których jedna będzie odpowiadała za jego stronę merytoryczną, a druga za stronę językową i formalną.

Przewidywany zakres projektu powinien zawsze obejmować pewną liczbę roboczogodzin niezbędnych do przygotowania raportu końcowego. Zazwyczaj pisanie pierwszej, roboczej wersji raportu zajmuje około sześćdziesięciu procent ogólnego czasu przeznaczonego na utworzenie raportu, a pozostałe czterdzieści procent zajmuje przegląd i przygotowanie końcowej wersji. Pamiętaj, aby czas niezbędny na utworzenie raportu uwzględnić w ogólnym budżecie godzinowym projektu, co pozwoli Ci na uniknięcie strat związanych z niedoszacowaniem liczby roboczogodzin całego projektu.

306

Rozdział 8. • Tworzenie raportów końcowych

Format raportu Istnieją elementy, które zawsze powinny się znaleźć w materiałach końcowych, niezależnie od typu prowadzonego projektu. We wszystkich przypadkach w raporcie końcowym powinny się znaleźć takie informacje, jak: cel projektu, dane o podmiocie realizującym zlecenie, informacje o zleceniodawcy, lista wykonanych prac oraz podsumowanie projektu. W tym podrozdziale przedstawimy wskazówki i przykłady, które ułatwią Ci tworzenie profesjonalnie przygotowanych raportów końcowych.

Strona tytułowa Na stronie tytułowej raportu powinny się znaleźć co najmniej takie informacje, jak tytuł raportu, wersja, data utworzenia, dane autora, nazwa zleceniodawcy i zleceniobiorcy. Możesz tutaj również umieścić dodatkowe informacje, takie jak klauzula poufności dokumentu itp.

Oświadczenie o zachowaniu poufności Bardzo często podczas przeprowadzania testów penetracyjnych możesz uzyskać dostęp do wrażliwych informacji o badanym środowisku, które nie mogą być udostępniane stronom trzecim. Jednym z krytycznych elementów przygotowań do wykonania takiego zlecenia jest określenie poziomu zabezpieczeń niezbędnych do ochrony danych pozyskanych w trakcie przeprowadzania testu penetracyjnego danego środowiska oraz przygotowanie i zatwierdzenie listy osób z obu stron, które będą miały dostęp do takich informacji. W niektórych przypadkach dostęp do wrażliwych danych może wymagać uprzedniego uzyskania poświadczenia bezpieczeństwa dla przetwarzających je osób, a szczególnie wrażliwe dane mogą dodatkowo wymagać przechowywania w specjalnych warunkach (odpowiednio zabezpieczone komputery i pomieszczenia z pełną kontrolą dostępu itp.). Pamiętaj, że złamanie przepisów o ochronie wrażliwych danych może mieć poważne reperkusje zarówno prawne, jak i finansowe. Oświadczenie o zachowaniu poufności powinno wskazywać poziom tajności danych, zawierać listę osób uprawnionych do przetwarzania takich danych, obejmować listę zadań, które są dozwolone podczas przetwarzania tych danych (na przykład liczba i cel wykonywanych kopii), zawierać informacje o prawach do zwielokrotniania, tłumaczenia i rozpowszechniania materiałów związanych z wykonywanym zleceniem oraz wszelkie inne zagadnienia, które prawnicy obu stron uznają za stosowne. Oświadczenie o zachowaniu poufności — przykład (fragment) Niniejszy dokument zawiera zastrzeżone i poufne informacje dotyczące , które przeznaczone są do wyłącznego użytku na potrzeby zlecenia będącego przedmiotem umowy. Poprzez podpisanie tego dokumentu zobowiązuje się do zachowania w ścisłej tajemnicy wszelkich informacji technicznych, technologicznych, prawnych i organizacyjnych uzyskanych w trakcie wykonywania

307

Kali Linux. Testy penetracyjne

umowy niezależnie od formy przekazania tych informacji i ich źródła. (…) Informacje zastrzeżone i poufne otrzymane przez mogą być przetwarzane i wykorzystywane tylko i wyłącznie na potrzeby realizacji zlecenia będącego przedmiotem umowy.

Zarządzanie wersjami dokumentacji Bardzo istotnym elementem procesu tworzenia raportów końcowych i dokumentacji jest zarządzanie wersjami dokumentów i rejestrowanie wprowadzanych do nich zmian. Pamiętaj, że takie dokumenty są często przeglądane i modyfikowane przez wiele osób. Dokładne rejestrowanie daty, czasu i osób wprowadzających zmiany pozwala na śledzenie historii dokumentu i jego modyfikacji. Historia wprowadzanych zmian Wersja

Data

Autor

Komentarze

1

2013-05-01

Jan Kowalski

Pierwsza wersja dokumentu

2

2013-05-10

Adam Nowak

Przegląd i wprowadzenie poprawek w p. 1, 4, 17

3

2013-05-24

Michał Malinowski

Przegląd i wprowadzenie poprawek formatowania

Ramy czasowe projektu Określając ramy czasowe projektu, powinieneś oszacować liczbę roboczogodzin niezbędnych do realizacji jego poszczególnych etapów. Dla każdego etapu projektu powinieneś przyporządkować nazwę, przygotować listę zadań do realizacji w jego ramach i oszacować liczbę roboczogodzin potrzebnych do realizacji zadań na tym etapie. Projektując ramy czasowe na potrzeby umowy, powinieneś uwzględniać tylko te godziny, których kosztami będzie obciążany klient. Takie rozwiązanie pozwoli zleceniodawcy na oszacowanie zarówno kosztów poszczególnych etapów, jak i całego projektu. Tworząc listę etapów, powinieneś szczególnie wyróżnić zadania niezbędne dla realizacji całego projektu, tak aby klient starający się zredukować koszty projektu nie zażądał usunięcia prac o krytycznym znaczeniu dla innych etapów umowy. Poniżej przedstawiamy ramy czasowe przykładowego projektu wraz z ogólnym planem realizacji. , zwany dalej Wykonawcą, rozpocznie prace najpóźniej w ciągu dwóch tygodni od daty otrzymania podpisanej umowy. Wszelkie zmiany dotyczące terminu rozpoczęcia prac powinny zostać uzgodnione między stronami i dołączone do niniejszej umowy w formie pisemnego aneksu.

308

Rozdział 8. • Tworzenie raportów końcowych

Etap projektu

Przygotowania i rozpoczęcie projektu

Lista zadań

Planowana liczba roboczogodzin

Przegląd zakresu prac.

8 godzin

Przegląd wykazu materiałów dostarczanych po zakończeniu projektu. Wymagania wstępne. Pytania i odpowiedzi.

Analiza środowiska sieciowego

Przygotowanie stacji roboczych.

16 godzin

Instalacja oprogramowania. Przegląd procedur i polityki bezpieczeństwa. Skanowanie hostów sieciowych.

32 godziny

Przegląd i analiza istniejącej infrastruktury sieciowej. Testy penetracyjne

Wyszukiwanie hostów podatnych na ataki i weryfikacja istniejących luk w zabezpieczeniach.

32 godziny

Testy penetracyjne z wykorzystaniem zidentyfikowanych słabych stron zabezpieczeń.

Prezentacja materiałów końcowych

Analiza wyników, przygotowanie rekomendacji i tworzenie raportów końcowych.

16 godzin

Prezentacja raportu końcowego.

6 godzin

Omówienie rekomendowanych rozwiązań. Pytania i odpowiedzi. Zamknięcie projektu.

2 godziny

Streszczenie raportu Streszczenie raportu końcowego powinno zawierać ogólny zarys projektu, włącznie z informacjami o tym, dlaczego taki projekt został zrealizowany, jak przebiegała jego realizacja, jakie napotkała problemy i jakim wynikiem projekt się zakończył. Streszczenie projektu powinno być skierowane do kadry kierowniczej klienta, stąd powinieneś raczej unikać nadmiernego stosowania w nim języka technicznego. Streszczenie raportu — przykład 1. Wykonawca został zaangażowany przez Zleceniodawcę do przeprowadzenia testów penetracyjnych swojego środowiska sieciowego. Celem takiej operacji było oszacowanie istniejącego poziomu zabezpieczeń środowiska sieciowego Zleceniodawcy poprzez zidentyfikowanie systemów potencjalnie podatnych na ataki oraz posiadających luki w zabezpieczeniach. Wykonawca zobowiązał się do wykonania umowy własnymi środkami, z wykorzystaniem własnej metodologii, zgodnej z powszechnie przyjętymi standardami przemysłowymi. Testy penetracyjne

309

Kali Linux. Testy penetracyjne

zostały przeprowadzone przez zespół Wykonawcy w dniach od do na wybranych systemach pracujących w środowisku sieciowym Zleceniodawcy.  W ramach niniejszej umowy przeprowadzone zostały testy penetracyjne dziewięciu

systemów wymienionych w załączniku 1. do niniejszej Umowy. Celem przeprowadzania testów przez Wykonawcę było:  Stwierdzenie, jakie hosty podatne na ataki i wykazujące luki w zabezpieczeniach

można zidentyfikować w środowisku sieciowym Zleceniodawcy bez posiadania jakichkolwiek wcześniejszych informacji na temat infrastruktury sieciowej Zleceniodawcy i bez wzbudzania podejrzeń u administratorów systemu, którzy celowo nie zostali wcześniej powiadomieniu o planowanych testach.  Próba wykorzystania wykrytych podatności i luk w zabezpieczeniach w celu

przeprowadzenia ataku i uzyskania nieautoryzowanego dostępu do poufnych informacji przechowywanych w systemach Zleceniodawcy.  Udokumentowanie każdej fazy operacji, a w szczególności wszystkich znalezionych

luk w zabezpieczeniach. Podczas przeprowadzania testów uwzględnione zostały wszystkie wykryte mechanizmy zabezpieczające, zaimplementowane w poszczególnych systemach, stąd wyniki testów bardzo dobrze przedstawiają realistyczny obraz bieżącego poziomu zabezpieczeń i potencjalnej podatności środowiska na ataki hakerów. Streszczenie raportu — przykład 2. Wykonawca został zaangażowany przez Zleceniodawcę do przeprowadzenia testów penetracyjnych wybranych hostów działających w środowisku sieciowym Zleceniodawcy. Przedmiotem testów były hosty sieciowe o adresach IP z klas 192.168.1.x, 10.1.1.x oraz 172.16.1.x. Celem operacji było oszacowanie istniejącego poziomu zabezpieczeń środowiska sieciowego Zleceniodawcy poprzez zidentyfikowanie systemów potencjalnie podatnych na ataki oraz posiadających luki w zabezpieczeniach, a następnie uszeregowanie zagrożeń według poziomu ryzyka dla poszczególnych systemów. Przeprowadzanie testów penetracyjnych rozpoczęło się w dniu i było kontynuowane przez cztery kolejne dni.

Metodologia Bardzo zalecanym rozwiązaniem jest umieszczanie w raporcie końcowym informacji o sposobie, w jaki przeprowadzone zostały testy penetracyjne w danym środowisku. W takiej sekcji raportu powinieneś umieścić krótkie opisy poszczególnych etapów projektu, listę używanych narzędzi oraz opisać sposób postępowania z wykrytymi lukami w zabezpieczeniach. Bardzo często w sekcji tej zamieszczane są diagramy obrazujące przebieg procesu przeprowadzania testów penetracyjnych. Posiadane certyfikaty to bardzo ważny element, który znacząco podnosi Twoją wiarygodność jako potencjalnego wykonawcy zlecenia i pomaga przekonać klienta, że oferujesz usługi najwyższej jakości. Istnieją certyfikaty takie jak ISO 9001 czy 14001, potwierdzające, że dana

310

Rozdział 8. • Tworzenie raportów końcowych

firma świadczy swoje usługi zgodnie z metodologią, która została przetestowana i powszechnie zaakceptowana. Inne certyfikaty mogą potwierdzać kwalifikacje poszczególnych członków Twojego zespołu; dobrym przykładem mogą być tutaj inżynierowie czy technicy posiadający certyfikaty uprawniające do instalowania i serwisowania takiego czy innego sprzętu lub certyfikaty potwierdzające zdobycie określonych umiejętności. W dziedzinie testów penetracyjnych bardzo popularnymi i uznanymi świadectwami są takie certyfikaty jak CEH (ang. Certified Ethical Hacker) czy GPEN (ang. Global Information Assurance Certification — Penetration Tester). Metodologia — przykład Wykonawca wykorzystał szereg różnych narzędzi, zarówno opracowanych przez siebie, jak i powszechnie dostępnych, do przeskanowania środowiska sieciowego Zleceniodawcy tak, jakby to miało miejsce podczas rzeczywistego ataku przeprowadzanego przez hakerów. Takie podejście pozwoliło na oszacowanie aktualnego poziomu zabezpieczeń oraz zidentyfikowanie luk w zabezpieczeniach poszczególnych systemów, a następnie określenie ryzyka, jakie stanowią dla środowiska Zleceniodawcy. Podczas przeprowadzania testów Wykonawca dokonał rozpoznania wewnętrznej infrastruktury sieciowej Zleceniodawcy, wykorzystując do tego celu informacje publicznie dostępne w internecie, metody mapowania architektury sieciowej, skanery pozwalające na identyfikację hostów sieciowych i świadczonych przez nie usług, skanery pozwalające na wykrywanie i identyfikację podatności i luk w zabezpieczeniach oraz inne oprogramowanie pozwalające na analizowanie wyników działania skanerów oraz próby wykorzystywania znalezionych podatności do przeprowadzania ataków mających na celu uzyskanie nieautoryzowanego dostępu do zasobów środowiska sieciowego Zleceniodawcy.

311

Kali Linux. Testy penetracyjne

Szczegółowe procedury testowania W tej sekcji raportu powinieneś umieścić szczegółowe informacje na temat przebiegu całej procedury przeprowadzania testów penetracyjnych. Docelowym audytorium tej części raportu jest zwykle personel techniczny, stąd naczelnym zadaniem tej sekcji jest dostarczenie mu maksymalnie wielu szczegółowych informacji na temat przebiegu testów oraz zidentyfikowanych obszarów, które wymagają interwencji. Pamiętaj, że klient może zawsze próbować podważyć taki czy inny wniosek przedstawiony w raporcie i próbować samodzielnie powtórzyć wykonane przez Ciebie operacje, tak aby zweryfikować otrzymane wyniki i porównać je z danymi zamieszczonymi w raporcie. Oznacza to, że klient będzie chciał dowiedzieć się, w jaki dokładnie sposób konkretna luka w zabezpieczeniach została wykryta i w jaki sposób udało Ci się ją wykorzystać do uzyskania nieautoryzowanego dostępu do badanego systemu. Dane zamieszczane w tej sekcji raportu pozwalają również na zweryfikowanie, czy testy penetracyjne zostały przeprowadzone na wszystkich segmentach sieci i hostach wyspecyfikowanych w umowie. Zazwyczaj w tej sekcji powinieneś zamieścić takie informacje, jak opis metod wykrywania hostów w środowisku klienta, sposób mapowania infrastruktury sieciowej, opis procesu wykrywania podatności i luk w zabezpieczeniach poszczególnych hostów, analizę architektury środowiska sieciowego klienta, opis sposobu wykorzystania wykrytych podatności i luk w zabezpieczeniach i inne elementy. Poziom szczegółowości informacji zamieszczanych w tej sekcji w dużej mierze zależy od tego, co zostało ujęte w wykazie pracy załączonym do umowy. Przykład Zespołowi Wykonawcy udało się uzyskać nieautoryzowany dostęp do hosta z wykorzystaniem domyślnej nazwy konta i domyślnego hasła administratora serwera bazy danych MS SQL. Uzyskany dostęp do hosta pozwolił zespołowi Wykonawcy na utworzenie nowego konta użytkownika z prawami administratora systemu, dostęp do procesów systemowych, kont użytkowników, baz danych i innych plików, jak również wykonywanie własnych skryptów oraz kopiowanie plików na dysk sieciowy. Rzeczywisty napastnik po uzyskaniu takiego poziomu dostępu do serwera miałby możliwość skopiowania dowolnych danych przechowywanych w systemie, usuwania i modyfikacji kont użytkowników i wykonywania praktycznie dowolnych innych operacji wraz z całkowitym wyłączeniem serwera. Zespołowi Wykonawcy udało się również użyć sesji Server Message Block (SMB) Null User do pozyskania informacji o kontach i grupach użytkowników z serwera DNS. Potencjalny napastnik mógłby użyć takich informacji do przeprowadzania ukierunkowanych ataków socjotechnicznych na pracowników Zleceniodawcy lub dokonania prób złamania haseł użytkowników i uzyskania tą drogą dostępu do systemu. Zidentyfikowane luki w zabezpieczeniach stanowią bardzo poważne zagrożenie dla systemów Zleceniodawcy. Zagrożeniu temu jednak można łatwo zapobiec poprzez prostą zmianę konfiguracji systemów i oprogramowania oraz wdrożenie lub modyfikację odpowiednich polityk bezpieczeństwa.

312

Rozdział 8. • Tworzenie raportów końcowych

Podsumowanie przeprowadzonych testów penetracyjnych Zleceniodawca dostarczył Wykonawcy osiem adresów IP hostów sieciowych, które zostały zamieszczone w tabeli poniżej. Wszystkie wymienione hosty zostały przeskanowane w celu wykrycia otwartych portów komunikacyjnych oraz zidentyfikowania usług sieciowych, świadczonych przez poszczególne systemy. Adres IP

Nazwa hosta

Otwarte porty TCP

192.168.10.20

SERV001

42,53,88,135,139,445,464,53,636,1025,1071,1075,1145

192.168.10.23

SERV542

135,139,445,1433,3300

192.168.10.154

SERV239

135,139,445,1433,3389

192.168.10.204

SERV777

80,135,139,445,1443

172.18.10.100

SERVSQL123

135,139,445,1433,1434,3372,3389,5022,8400,8402

172.18.10.101

SERVSQL124

135,139,445,1433,1434,3372,3389,5022,8400,8402

172.18.10.105

database.intern.com

80,443

172.18.10.200

corp.com

80

Podsumowanie ustaleń Podsumowanie ustaleń to jedna z najważniejszych części raportu. To właśnie tutaj powinny się znaleźć informacje o poczynionych przez Ciebie odkryciach, włącznie z opisami tego, jaki wpływ mogą mieć zidentyfikowane zagrożenia na funkcjonowanie poszczególnych systemów czy nawet całego środowiska zleceniodawcy. Pamiętaj, że sposób zaprezentowania wniosków z przeprowadzonych testów penetracyjnych będzie miał ogromny wpływ na to, w jaki sposób zostaną one odebrane przez klienta, stąd w tej sekcji powinieneś zwracać szczególną uwagę nie tylko na to, co piszesz, ale również na to, jak formatujesz tekst, wykresy i diagramy. Dobrą praktyką w zakresie prezentowania ustaleń jest uszeregowanie zagrożeń według poziomu ryzyka, jakie stanowią dla poszczególnych systemów. Powszechnie stosowanymi elementami w takich zestawieniach są prawdopodobieństwo wystąpienia danego zagrożenia, oszacowanie ryzyka z nim związanego, wykresy, kolorowe diagramy itp. Z naszych doświadczeń wynika, że najlepiej sprawdza się zamieszczenie sumarycznej listy zidentyfikowanych zagrożeń, a następnie, w kolejnych sekcjach, szczegółowe omówienie poszczególnych zagrożeń. Dobrym rozwiązaniem jest dołączanie odwołań do publicznie dostępnych źródeł, które mogą potwierdzić Twoje wnioski lub przynajmniej ułatwić klientowi zrozumienie, dlaczego dany system ma taki czy inny problem z zabezpieczeniami. Pamiętaj jednak, że powinieneś korzystać tylko i wyłącznie ze sprawdzonych źródeł o potwierdzonej reputacji.

313

Kali Linux. Testy penetracyjne

Przykład Zestawienie statusów zagrożenia wykrytych podatności i luk w zabezpieczeniach:  Krytyczny — krytyczne zagrożenie dla funkcjonowania systemu.  Wysoki — poważne zagrożenie dla funkcjonowania systemu.  Średni — umiarkowane lub niskie zagrożenie dla funkcjonowania systemu.  Niski — brak bezpośredniego zagrożenia dla funkcjonowania systemu; poziom

ryzyka może się jednak zwiększyć w połączeniu z innym zagrożeniem. Stosując kryterium najwyższego zidentyfikowanego elementu, bieżący poziom zagrożenia systemu możemy określić jako Krytyczny. Przeprowadzone badania wykazały istnienie jednej podatności sklasyfikowanej jako Krytyczna, dwóch podatności sklasyfikowanych jako Średnie oraz dwóch podatności sklasyfikowanych jako Niskie. Wymienione zagrożenia zostały zamieszczone w tabeli poniżej: Podatność

Status zagrożenia

Zagrożenie A

Krytyczny

Zagrożenie B

Średni

Zagrożenie C

Średni

Zagrożenie D

Niski

Zagrożenie E

Niski

Podsumowanie ustaleń

Typ skanu

Rezultat

Hosty

9

Porty

TCP, UDP, 1065535

Status zagrożenia

Razem

Krytyczny

1 (w tym unikatowych: 1)

Średni

2 (w tym unikatowych: 2)

Niski

2 (w tym unikatowych: 2)

Liczba unikatowych zagrożeń jest definiowana jako liczba niepowtarzających się podatności w ramach danego poziomu zagrożenia. Jeżeli w wyniku przeprowadzenia testów penetracyjnych znalezionych zostało na przykład pięć podatności sklasyfikowanych jako Wysokie, ale tylko trzy z nich są unikatowe, to oznacza to, że niektóre z tych podatności zostały znalezione w wielu systemach.

314

Rozdział 8. • Tworzenie raportów końcowych

Podatności i luki w zabezpieczeniach Opisy znalezionych podatności i luk w zabezpieczeniach powinny precyzyjnie definiować rodzaj podatności, poziom ryzyka, jakie dana podatność niesie ze sobą dla funkcjonowania systemu, oraz prawdopodobieństwo wykorzystania takiej luki przez hakerów. W raporcie powinna się również znaleźć informacja o tym, w jaki sposób dana luka została znaleziona i czy została zweryfikowana (inaczej mówiąc, czy dało się ją wykorzystać do uzyskania dostępu do systemu lub zakłócenia jego działania, czy też luka została wykryta przez skaner, ale jej zweryfikowanie było niemożliwe). W opisach podatności i luk w zabezpieczeniach możesz wykorzystywać różnego rodzaju diagramy, które znacząco mogą ułatwić zrozumienie sposobu wykrycia zagrożenia i jego natury. W raporcie na temat wykrytych podatności i luk w zabezpieczeniach możesz między innymi umieszczać następujące informacje (zobacz rysunek na następnej stronie):  nazwa wykrytej podatności lub luki w zabezpieczeniach,  poziom zagrożenia dla systemu,  opis wykrytej podatności,  szczegóły techniczne,  lista zagrożonych systemów,  lista zagrożonych portów komunikacyjnych,  rekomendowane sposoby usunięcia.

Oprócz opisów wykrytych podatności i luk w zabezpieczeniach możesz zamieszczać w tej sekcji również inne, dodatkowe ustalenia, które udało Ci się poczynić podczas przeprowadzania testów. Niektóre firmy i organizacje wymagają na przykład, aby wszystkie używane przez nich systemy posiadały możliwość obsługi protokołu IPv6. W takiej sytuacji wykrycie braku obsługi tego protokołu na jednym czy kilku systemach nie stanowi oczywiście podatności, niemniej jednak jest to ważne ustalenie, o którym zleceniodawca z pewnością chciałby się dowiedzieć. Innym przykładem może być możliwość obsługi nowoczesnych technologii, takich jak VoIP (ang. Voice over IP) czy wideokonferencji. Poniżej przedstawiamy krótkie zestawienie elementów, których wykrycie możesz dodatkowo zamieścić w ustaleniach raportu końcowego:  różnice w konfiguracji poszczególnych urządzeń,  odstępstwa od dobrych praktyk i rekomendowanych rozwiązań,  wsparcie dla protokołu IPv6 (lub jego brak),  przestarzałe urządzenia lub oprogramowanie, dla których zakończył się

lub niedługo zakończy się „cykl życia”,  obsługa protokołów i technologii takich jak VoIP czy wideokonferencje,  zgodność z powszechnie stosowanymi standardami, takimi jak FISMA czy PCI,

315

Kali Linux. Testy penetracyjne

 listy numerów seryjnych oraz adresów IP i MAC i innych danych wykrytych

urządzeń,  opis topologii sieci,  listy protokołów i danych, które są publicznie dostępne.

Wnioski i rekomendacje dla środowiska sieciowego W tej sekcji powinny znaleźć się wnioski i rekomendacje pozwalające na usunięcie wykrytych podatności i zagrożeń. Rekomendacje mogą być przeróżne, od prostego „należy zainstalować poprawkę bezpieczeństwa numer nnnnnnn lub zaktualizować oprogramowanie do wersji nnnn” do bardzo szczegółowych opisów, prezentujących, jak rozwiązać złożony problem krok po kroku. Usuwanie niektórych problemów może mieć jednak wpływ na działanie innych usług. Na przykład zamknięcie w zaporze sieciowej danego portu w celu uniemożliwienia przeprowadzenia określonego ataku może spowodować zaburzenia w funkcjonowaniu innej

316

Rozdział 8. • Tworzenie raportów końcowych

usługi sieciowej, która wykorzystuje do własnych potrzeb ten właśnie port. Bardzo ważną sprawą jest zamieszczanie w raporcie odpowiednich ostrzeżeń i informacji o tym, że wykonanie rekomendowanych operacji nie zawsze musi spowodować usunięcie wszystkich podatności czy też sprawić, że system będzie w pełni zgodny z taką bądź inną normą prawną lub standardem przemysłowym. Z pewnością nie chciałbyś, aby klient, którego system został skutecznie zaatakowany w tydzień po zakończeniu wdrażania rekomendowanych przez Ciebie zmian, obciążył Cię winą za poniesione straty spowodowane wykorzystaniem przez hakerów kolejnej lub niepoprawnie „załatanej” luki w systemie. Bardzo ważną sprawą jest wyraźne sprecyzowanie w umowie, czego klient może oczekiwać po zakończeniu testów penetracyjnych i jakie elementy są bądź nie są gwarantowane. Jeżeli na przykład nie umieścisz w umowie klauzuli mówiącej o tym, że przeprowadzenie testów penetracyjnych nie gwarantuje zgodności badanego systemu z taką czy inną normą lub standardem, klient może Cię obarczyć odpowiedzialnością za to, że jego system nie przeszedł audytu pomimo tego, że wykonane zostały wszystkie aktualizacje i zmiany konfiguracji zalecane w Twoim raporcie.

Możemy wyróżnić wiele poziomów rekomendacji i zaleceń. Czasami problem dotyczy przecież poważnego błędu popełnionego podczas projektowania i wdrażania infrastruktury sieciowej, a innym razem jest to prosty błąd w konfiguracji systemu czy brak zainstalowanej poprawki bezpieczeństwa. W sekcji poświęconej zaleceniom i rekomendacjom powinieneś zamieścić takie elementy, jak podsumowanie ustaleń, ogólny zarys rekomendowanych rozwiązań oraz szczegółowe opisy poszczególnych rozwiązań i inne użyteczne dla klienta informacje, na przykład wdrożenie obsługi protokołu IPv6, proponowane zmiany w infrastrukturze sieciowej, zakupy, wdrożenia i zmiany w dziedzinie urządzeń, oprogramowania, aktualizacji i innych elementów. Przykład Wykonawca rekomenduje Zleceniodawcy zwiększenie inwestycji w dziedzinie proaktywnego zarządzania bezpieczeństwem środowiska sieciowego oraz alokacji odpowiednich zasobów pozwalających na lepszy monitoring całego środowiska i sprawniejsze instalowanie wszelkich aktualizacji i poprawek bezpieczeństwa. Proponowanie szczegółowych produktów wykracza niestety poza ramy niniejszej umowy, niemniej jednak przedstawiamy tutaj ogólny zarys rozwiązań rekomendowanych dla Zleceniodawcy.  Wdrożenie systemu zarządzania aktualizacjami i poprawkami bezpieczeństwa

— wielu podatności i luk w zabezpieczeniach można uniknąć poprzez właściwe i terminowe zarządzanie aktualizacjami i poprawkami. Do opracowania właściwej polityki zarządzania rekomendujemy wytyczne zawarte w dokumencie NIST SP 800-408 (Guide to Enterprise Patch Management Technologies). Wdrożenie systemu zarządzania aktualizacjami w znaczący sposób może przyczynić się do zredukowania liczby systemów podatnych na ataki.

317

Kali Linux. Testy penetracyjne

 Wdrożenie systemu zarządzania zmianami na wszystkich systemach — wiele

podatności i luk w zabezpieczeniach pojawia się w systemie na skutek ludzkiego błędu. Wdrożenie odpowiedniego systemu zarządzania zmianami, obejmującego wszystkie systemy, pozwoli na zredukowanie liczby popełnianych błędów i weryfikację zmian wprowadzanych w poszczególnych systemach.  Wdrożenie mechanizmów uwierzytelniania wieloetapowego i systemu kontroli

dostępu do zasobów opartego na rolach — przeprowadzone testy penetracyjne wykazały, że mechanizm uwierzytelniania na wielu systemach przechowujących wrażliwe dane jest oparty wyłącznie na tradycyjnych hasłach dostępu. Dobrym i rekomendowanym rozwiązaniem będzie wdrożenie mechanizmu uwierzytelniania co najmniej dwuetapowego oraz ograniczenie liczby kont użytkowników posiadających uprawnienia administratora systemu.  Ograniczenie dostępu do systemów krytycznych dla funkcjonowania firmy

— systemy o krytycznym znaczeniu dla funkcjonowania środowiska firmy powinny być chronione w szczególny sposób, z zastosowaniem takich mechanizmów, jak lista hostów uprawnionych do komunikacji z takimi systemami, listy ACL, wydzielone podsieci VLAN oraz inne środki. W przypadku takich systemów prawa użytkowników powinny być nadawane zgodnie z regułą najmniejszych wystarczających uprawnień, co może znacząco ograniczyć pole działania dla potencjalnego włamywacza. Więcej wytycznych na temat podstawowych wymogów bezpieczeństwa systemów informatycznych można znaleźć w dokumencie NIST SP 800-27 „Engineering Principles for Information Technology Security (A Baseline for Achieving Security)”.  Przeprowadzanie w regularnych odstępach czasu analizy podatności

poszczególnych systemów na ataki —przeprowadzanie analizy podatności systemów na ataki powinno się odbywać w regularnych odstępach czasu, dzięki czemu właściciel środowiska będzie w stanie na bieżąco określać poziom zabezpieczeń systemu i szacować zagrożenia dla poszczególnych systemów. Więcej szczegółowych informacji na temat efektywnego systemu zarządzania ryzykiem można znaleźć w dokumencie NIST SP 800-39, „Managing Information Security Risk: Organization, Mission, and Information System View”.  Wdrożenie rozwiązań redundantnych dla systemów o krytycznym znaczeniu

dla funkcjonowania środowiska firmy — przeprowadzone testy penetracyjne wykazały istnienie wielu pojedynczych systemów o krytycznym znaczeniu dla operacji biznesowych firmy. Awaria dowolnego z tych systemów może mieć poważny, negatywny wpływ na funkcjonowanie całego środowiska. Dobrym rozwiązaniem może być tutaj wdrożenie systemów redundantnych, które zapewnią ciągłość działania w przypadku awarii jednego lub nawet kilku systemów bądź połączeń sieciowych. Schemat przykładowego rozwiązania z redundancją przesyłania danych do centrum przetwarzania został zamieszczony poniżej:

318

Rozdział 8. • Tworzenie raportów końcowych

Dodatki W tej części raportu możesz zamieścić wszelkie dodatkowe informacje, które uznasz za ważne, ale które zazwyczaj nie są bezpośrednio powiązane z ustaleniami raportu. Do materiałów zawartych w dodatkach możesz odwoływać się z głównej części raportu; najczęściej zamieszczane są tutaj takie elementy, jak wyniki działania skanerów, zrzuty ekranu i inne informacje. Przykład Dodatek 001 — wyniki działania skanera Nessus

Glosariusz Glosariusz to rodzaj słownika terminologicznego, zawierającego objaśnienia bardziej złożonych terminów technicznych, które pojawiają się w treści raportu. Mogą to być definicje pojęć, metod, protokołów i technologii, objaśnienia terminów prawnych i inne określenia, które wymagają szerszego omówienia.

Wykaz prac Jednym z najważniejszych elementów umowy ze zleceniodawcą jest utworzenie szczegółowego wykazu prac (SOW — ang. Scope of Work), które planujesz wykonać w ramach przeprowadzanego testu penetracyjnego. Zazwyczaj taki zakres prac jest uzgadniany ze zleceniodawcą zaraz na wstępnym etapie negocjowania warunków umowy. Tworząc wykaz prac, powinieneś starać się utrzymać go w formacie odpowiadającym mniej więcej strukturze raportu końcowego, czyli na początku umieścić streszczenie zawierający ogólny zarys przewidywanych prac, a następnie dołączyć bardziej szczegółowe zestawienie poszczególnych zadań. 319

Kali Linux. Testy penetracyjne

Ogólny zarys wykazu prac — przykład Celem przeprowadzenia testów penetracyjnych jest określenie bieżącego poziomu bezpieczeństwa środowiska sieciowego Zleceniodawcy, dzięki czemu Zleceniodawca będzie miał możliwość opracowania i wdrożenia nowych rozwiązań, strategii i polityki bezpieczeństwa, mających na celu zredukowanie ilości zagrożeń i ryzyka wystąpienia ataków. W odpowiedzi na takie zapotrzebowanie Wykonawca przygotował plan działań mających na celu oszacowanie poziomu bezpieczeństwa środowiska sieciowego Zleceniodawcy, który to poziom wielokrotnie był z powodzeniem stosowany w środowiskach innych klientów. Pierwszym elementem naszego działania jest zapoznanie się ze specyfiką operacji biznesowych Zleceniodawcy, poznanie jego wymagań, oczekiwań i narzucanych ograniczeń, a następnie dokładna analiza infrastruktury środowiska sieciowego. Po zapoznaniu się z architekturą sieci rozpoczniemy skanowanie wyznaczonych przez Zleceniodawcę hostów sieciowych w celu wykrycia istniejących podatności i luk w zabezpieczeniach. W kolejnym etapie rozpoczniemy weryfikację odkrytych podatności i próby wykorzystania ich do uzyskania nieautoryzowanego dostępu do badanych systemów. W tej fazie projektu będziemy sięgać do całego arsenału technik przeprowadzania testów penetracyjnych oraz ataków socjotechnicznych. Przebieg poszczególnych faz procesu i kolejne planowane operacje będą przedstawiane Zleceniodawcy na cotygodniowych odprawach, dzięki czemu Zleceniodawca będzie miał pełną możliwość kontrolowania realizacji projektu oraz wnoszenia w razie potrzeby modyfikacji i poprawek związanych z bieżącymi operacjami biznesowymi. Wykonawca dołoży ze swojej strony wszelkich starań, aby zapewnić profesjonalne zarządzanie całym procesem realizacji projektu z uwzględnieniem wszelkich wymagań, oczekiwań i ograniczeń narzucanych przez Zleceniodawcę. Wykonawca doskonale zdaje sobie sprawę z tego, jakie wyzwania stawia przed Zleceniodawcą konieczność utrzymywania odpowiedniego poziomu bezpieczeństwa jego środowiska sieciowego, i jest przekonany, że przeprowadzenie audytu bezpieczeństwa w zakresie objętym niniejszą umową przyczyni się do zmniejszenia kosztów operacyjnych Zleceniodawcy poprzez znaczące zredukowanie ilości istniejących zagrożeń i ryzyka ataków. Wyeliminowanie wielu podatności i luk w zabezpieczeniach poszczególnych systemów oraz wdrożenie nowoczesnych mechanizmów zabezpieczeń przyczyni się nie tylko do zwiększenia poziomu ochrony danych przetwarzanych w systemach Zleceniodawcy, ale również może stanowić istotny czynnik wzmacniający markę i reputację Zleceniodawcy pośród innych podmiotów biznesowych. Informacje zebrane podczas realizacji projektu będą miały kluczowe znaczenie dla tego, jakie rozwiązania zostaną zarekomendowane do wdrożenia przez Zleceniodawcę w przyszłości, aby podnieść poziom bezpieczeństwa jego środowiska sieciowego, wzmocnić poziom ochrony przetwarzanych danych i przynieść wiele innych korzyści. Projekt realizowany przez Wykonawcę umożliwi osiągnięcie następujących celów wyznaczonych przez Zleceniodawcę:  Przeprowadzenie działań mających na celu wykrycie podatności i luk

w zabezpieczeniach systemów działających w środowisku sieciowym Zleceniodawcy.  Analiza architektury sieciowej Zleceniodawcy i wskazanie potencjalnie słabych i źle

zaprojektowanych elementów tego środowiska.

320

Rozdział 8. • Tworzenie raportów końcowych

 Analiza i oszacowanie poziomu zabezpieczeń witryny internetowej Zleceniodawcy

oraz innych aplikacji Zleceniodawcy wykorzystujących bezpośrednie połączenie z internetem.  Raport operacji — przygotowanie raportu zawierającego opisy wszystkich prób

wykorzystania wykrytych wcześniej podatności i luk w zabezpieczeniach do uzyskania nieautoryzowanego dostępu do systemów Zleceniodawcy.  Raport hostów sieciowych — przygotowanie raportu zawierającego zestawienie

szczegółowych informacji o wszystkich hostach będących przedmiotem badania, szczegółowe informacje o hostach, których zabezpieczenia udało się przełamać w trakcie przeprowadzania testów penetracyjnych, liczby oraz identyfikatory CVE podatności i luk wykrytych w poszczególnych systemach.  Raport podatności i luk w zabezpieczeniach — przygotowanie raportu

obejmującego szczegółowe informacje o wszystkich wykrytych podatnościach i lukach w zabezpieczeniach na poszczególnych systemach, z podziałem na takie, które udało się wykorzystać do przeprowadzenia skutecznego ataku na dany system, skutkującego uzyskaniem nieautoryzowanego dostępu do zasobów systemu bądź jakimkolwiek zakłóceniem jego normalnego funkcjonowania, oraz na takie, które stanowią tylko potencjalne zagrożenie dla badanego systemu.  Raport z przeprowadzenia testów penetracyjnych — przygotowanie raportu

zawierającego szczegółowe informacje na temat sposobu przeprowadzenia testów penetracyjnych środowiska sieciowego Zleceniodawcy, włącznie z takimi elementami, jak szablony wiadomości przesyłanych do użytkowników za pomocą poczty elektronicznej w ramach ataków socjotechnicznych, wykorzystywane exploity i wyniki ich działania oraz wszelkie inne odnośne informacje na temat systemów, których zabezpieczenia udało się przełamać.  Raport użytkownika — przygotowanie raportu z testowania aplikacji internetowych

Zleceniodawcy, łącznie z takimi elementami, jak lista analizowanych hiperłączy, zestawienie wykorzystywanych narzędzi oraz opis metodologii i wyników testowania aplikacji.

Zewnętrzne testy penetracyjne Przeprowadzanie testów penetracyjnych środowiska sieciowego zleceniodawcy z zewnątrz wymaga nieco innego podejścia. Wykaz prac, które będą wykonane podczas takiej operacji, powinien wyraźnie precyzować system będący celem testów oraz obejmować szczegółową listę działań, które masz zamiar wykonać podczas testu penetracyjnego. W wykazie prac powinna się również znaleźć informacja o tym, w jakich okolicznościach przeprowadzanie testów powinno zostać przerwane oraz jakie operacje nie są dozwolone. Innymi słowy, wykaz prac przygotowywanych dla takich testów penetracyjnych powinien posiadać precyzyjnie zdefiniowane warunki zakończenia działań.

321

Kali Linux. Testy penetracyjne

Poniżej zamieszczamy kolejny przykład, zawierający streszczenie wykazu prac dla zewnętrznych testów penetracyjnych. Zawiera on ogólny zarys procesu testowania, a następnie szczegółową instrukcję, omawiającą krok po kroku poszczególne zadania. W przykładzie zamieszczono również klauzule precyzujące zakres odpowiedzialności zleceniodawcy i właściciela aplikacji. Zewnętrzne testy penetracyjne — wykaz prac (przykład) Celem przeprowadzenia testów penetracyjnych jest określenie bieżącego poziomu bezpieczeństwa zewnętrznego perymetru środowiska sieciowego Zleceniodawcy oraz jego witryny internetowej i innych aplikacji sieciowych. Inne elementy, takie jak bazy danych i oprogramowanie pośrednie zainstalowane i działające na serwerach w domenie Zleceniodawcy, również będą przedmiotem testu. W tej fazie testów skoncentrujemy się głównie na lukach w zabezpieczeniach i na exploitach związanych z takimi podatnościami, jak przepełnienie bufora, wstrzykiwanie kodu SQL czy XSS. Wykonawca może w tej fazie dokonać ręcznej analizy struktury aplikacji internetowych i wykorzystywać zdobytą wiedzę do pozyskiwania wrażliwych i krytycznych danych przetwarzanych w aplikacji. Oprócz tego, zgodnie z żądaniem Zleceniodawcy, testom penetracyjnym zostaną również poddane hosty sieciowe znajdujące się w wydzielonej strefie DMZ. Szczegółowa procedura testowania Wykonawca przeprowadzi testy penetracyjne aplikacji internetowych zgodnie z procedurami przedstawionymi poniżej:  Identyfikacja serwerów aplikacji internetowych klienta i przygotowanie listy

wszystkich adresów sieciowych publikowanych w aplikacjach i na witrynie internetowej Zleceniodawcy.  Wykorzystanie publicznie dostępnych wyszukiwarek sieciowych do zebrania

informacji o zgromadzonych adresach i domenach.  Wyszukiwanie informacji o domenach w bazach danych, takich jak PGP czy WHOIS.  Przyspieszenie testów penetracyjnych poprzez równoległe przeprowadzanie wielu

ataków na zidentyfikowane wcześniej serwery Zleceniodawcy.  Interakcja ze złamanymi systemami za pomocą dyskretnych agentów zainstalowanych

wyłącznie w pamięci operacyjnej.  Atakowanie wewnętrznych systemów za pomocą lokalnie uruchamianych exploitów,

co pozwoli na ograniczenie liczby ataków przeprowadzanych z zewnątrz, za pośrednictwem połączeń sieciowych.  Przeprowadzenie analizy aplikacji internetowych Zleceniodawcy pod kątem

występowania podatności i luk w zabezpieczeniach.  Weryfikacja zidentyfikowanych podatności i luk w zabezpieczeniach za pomocą

dynamicznie generowanych exploitów (symulacja działań hakerów wykorzystujących różne wektory i metody ataków).  Demonstracja skutków udanego ataku poprzez interakcję z systemem plików oraz

bazami danych zaatakowanego serwera WWW za pomocą poleceń wydawanych z konsoli systemu.

322

Rozdział 8. • Tworzenie raportów końcowych

 Przeprowadzenie testów penetracyjnych aplikacji internetowych bez zastosowania

ataków, które mogłyby zakłócić ich działanie oraz bez wykonywania własnych skryptów na atakowanych serwerach. Zleceniodawca oświadcza, że w zakresie jego odpowiedzialności znajdują się następujące elementy:  Identyfikacja i przygotowanie listy adresów witryn i aplikacji internetowych

należących do Zleceniodawcy, które będą przedmiotem testów penetracyjnych, oraz informowanie Wykonawcy o wszelkich pracach serwisowych, konserwacji i innych zakłóceniach normalnych operacji biznesowych przeprowadzanych w czasie trwania testów.  Zapewnienie Wykonawcy dostępu do serwerów i urządzeń sieciowych,

które wchodzą w zakres testów, ale nie są publicznie dostępne.

Dodatkowe elementy wykazu prac Podczas tworzenia wykazu prac powinieneś również pomyśleć o innych elementach, które mogą, a czasem nawet muszą być tam zamieszczone. Zazwyczaj mogą to być:  Dodatkowe uzgodnienia prawne — najczęściej będą to przygotowane

i zatwierdzone przez prawników teksty dotyczące zwolnienia wykonawcy z wszelkiej odpowiedzialności prawnej i finansowej za ewentualne szkody powstałe wskutek przeprowadzania testów penetracyjnych w środowisku sieciowym zleceniodawcy.  Metodologia przeprowadzania testów penetracyjnych — możesz tutaj

zamieścić informacje o planowanym przebiegu testów, sposobie informowania zleceniodawcy o przebiegu procesu, ramach czasowych projektu czy sposobie dostarczania informacji przez zleceniodawcę. Na rysunku poniżej przedstawiamy diagram obrazujący przykładową metodologię prac (zobacz rysunek na następnej stronie).  Koszty usług — możesz tutaj zamieścić informacje o przewidywanym czasie

trwania projektu i związanych z nim kosztach. Informacje mogą być podzielone na poszczególne fazy projektu; powinieneś tutaj zamieścić również informacje o tych fazach projektu, w których przekroczenie założonego budżetu roboczogodzin jest bardzo prawdopodobne.  Oczekiwania i odpowiedzialność — w tej części możesz dołożyć informacje

o oczekiwaniach, jakie wiąże zleceniodawca z tym projektem, oraz zakresie odpowiedzialności wykonawcy i zleceniodawcy. Powinieneś również dokładnie opisać tutaj wszelkie sytuacje, w których możliwość realizacji kolejnego etapu projektu będzie zależała bezpośrednio lub pośrednio od tego, czy wykonawca lub zleceniodawca dostarczy określone materiały lub przeprowadzi określone działania.

323

Kali Linux. Testy penetracyjne

 Uwierzytelnianie i lista narzędzi — możesz tutaj zamieścić dane osobowe

członków Twojego zespołu, posiadane przez nich certyfikaty, nazwy kont użytkowników oraz listę narzędzi, które będą używane podczas przeprowadzania testów penetracyjnych. Zamieszczenie takich informacji, które w łatwy sposób mogą być zweryfikowane przez zleceniodawcę, może bardzo pozytywnie wpłynąć na wiarygodność i profesjonalizm Twojej oferty. Dołączenie listy używanych narzędzi może również znacząco zredukować prawdopodobieństwo negatywnej reakcji zleceniodawcy w sytuacji, kiedy działanie takiego czy innego narzędzia doprowadzi do zakłóceń w pracy czy nawet awarii badanego systemu. Poniżej zamieszczamy przykładową tabelę zawierającą zestawienie posiadanych certyfikatów i listę narzędzi, które będą wykorzystywane podczas przeprowadzania testów penetracyjnych. Bardzo ważną sprawą jest omówienie ze zleceniodawcą wszelkich potencjalnych problemów i zagadnień, które mogą wpłynąć na proces realizacji umowy. Jeden z naszych kolegów po fachu i serdeczny przyjaciel, Willie Rademaker, zwykł mawiać: „Zawsze wykładaj kawę na ławę” — innymi słowy, powinieneś starać się unikać wszelkich możliwych do przewidzenia pułapek i problemów jeszcze na etapie negocjowania zakresu całego projektu. Jeżeli wydaje Ci się, że w takim czy innym momencie realizacji projektu może dojść do jakiegoś „zacięcia”, powinieneś z góry przedyskutować to ze zleceniodawcą. Niespodzianki są mile widziane na przyjęciach urodzinowych, ale z pewnością nie w biznesie.

324

Rozdział 8. • Tworzenie raportów końcowych

Lista posiadanych certyfikatów

Lista narzędzi

ISC2 Certified Information Security Professional (CISSP)

Kali Linix

International Council of E-Commerce Consultants (CEH)

Backtrack 5 RC3

Information Systems Audit and Control Association (ISACA)

AirSnort

Certified Information Systems Auditor (CISA)

AirCrack

RSA Authentication Manager v8.0

Airsnarf

RSA DLP Suite Certified Systems Engineer (CSE)

Airmagnet

RSA SecurID Choice/Product

Core Impact

Cisco Certified Internetwork Expert (CCIE-RS, Security, Voice, Storage, SP)

Saint

SAINT Certified Engineers

Rapid 7

Qualys Certified Engineers

Qualys

Cisco Advanced Wireless Design Specialist

Metasploit

PMI’s Project Management Professional (PMP)

Palisade

Cisco Advanced Security Field Specialist

eEye Retina

Cisco Advanced Wireless Field Specialist

Threat Guard

Cisco Master Security Specialized Partner

Narzędzia wspomagające tworzenie raportów W systemie Kali Linux znajdziesz kilka ciekawych narzędzi wspomagających tworzenie raportów, pozwalających na sprawniejsze przetwarzanie informacji zbieranych przez poszczególnych członków Twojego zespołu. Znajdziesz tam również kilka narzędzi przeznaczonych do szyfrowania plików i dokumentów. W tym podrozdziale zamieszczamy krótkie omówienie wybranych narzędzi, które mogą być bardzo przydatne dla każdego profesjonalnego pentestera.

Dradis Dradis to pakiet oprogramowania typu open source, ułatwiający udostępnianie i wymianę informacji między członkami zespołu. Program wykorzystuje centralne repozytorium danych projektu, które pozwala na sprawne śledzenie postępów. Dradis potrafi gromadzić informacje napływające od poszczególnych członków zespołu, przetwarzać dane generowane przez własne wtyczki, takie jak Nesuss czy Qualis, oraz importować inne informacje, na przykład listy podatności i luk w zabezpieczeniach.

325

Kali Linux. Testy penetracyjne

Aby uruchomić program Dradis, w menu głównym systemu Kali Linux przejdź do grupy Kali Linux, a następnie wybierz polecenie Reporting Tools/Documentation/dradis. Interfejs użytkownika wykorzystuje standardową przeglądarkę, co znacząco ułatwia współpracę pomiędzy członkami zespołu. Aby rozpocząć nową sesję, w sekcji Meta-Server wybierz opcję New Project, a następnie wpisz hasło, które od tego momentu będzie hasłem dostępu do tego projektu dla całego zespołu.

Aby zalogować się do programu, wpisz nazwę konta i podaj hasło dostępu. Na ekranie przeglądarki pojawi się główne okno programu. Więcej szczegółowych informacji na temat używania programu Dradis znajdziesz w jego systemie pomocy lub na stronie internetowej tego pakietu (zobacz http://dradisframework.org/).

KeepNote KeepNote to prosta aplikacja przeznaczona do sporządzania notatek, które mogą być zapisywane w systemie hierarchicznym, przypominającym drzewo katalogów na dysku. Notatki mogą być dowolnie formatowane (rich-text) i zawierać obrazy. Aby uruchomić program KeepNote, przejdź do grupy Kali Linux i następnie wybierz polecenie Reporting Tools/Documentation/keepnote.

Maltego CaseFile

326

Rozdział 8. • Tworzenie raportów końcowych

Maltego CaseFile to aplikacja analityczna pozwalająca na wizualne obrazowanie zależności istniejących pomiędzy setkami różnych rodzajów informacji, co znakomicie wspomaga proces zbierania i analizowania informacji w różnego rodzaju dochodzeniach, ekspertyzach i audytach.

MagicTree MagicTree to narzędzie wspomagające przeprowadzanie testów penetracyjnych, przeznaczone do konsolidowania zgromadzonych danych, przeprowadzania kwerend i generowania raportów. Zgromadzone informacje są przechowywane w strukturze hierarchicznej, co znacząco ułatwia identyfikację poszczególnych rodzajów informacji i tworzenie raportów.

CutyCapt CutyCapt to narzędzie pozwalające na utworzenie zrzutu okna całej strony internetowej i zapisanie go w jednym z wielu formatów graficznych, takich jak SVG, PDF, PS, PNG, JPEG, TIFF, BMP czy GIF.

Podsumowanie Niniejszy rozdział stanowi swego rodzaju podsumowanie całej książki. Znajdziesz tutaj wskazówki, rekomendacje i wytyczne ułatwiające tworzenie profesjonalnych raportów dostarczanych zleceniodawcy po zakończeniu przeprowadzania testów penetracyjnych. Legalne „szukanie dziury w całym” i przełamywanie zabezpieczeń systemów komputerowych może niewątpliwie sprawiać wiele frajdy i satysfakcji, niemniej jednak powinieneś zawsze mieć na uwadze to, że klient płaci za informacje i rekomendacje, które znajdzie w raporcie końcowym, przygotowanym przez zespół pentesterów po zakończeniu całego projektu. Elementem o kluczowym znaczeniu dla odniesienia sukcesów na tym polu jest zdolność do dostarczenia klientowi profesjonalnych usług konsultingowych i zdobycia jego zaufania jako wiarygodnego partnera

327

Kali Linux. Testy penetracyjne

biznesowego. W dziedzinie bezpieczeństwa systemów teleinformatycznych oznacza to niesienie pomocy dla klienta w spełnianiu wymagań formalno-prawnych, przeprowadzanie audytów, identyfikowanie systemów podatnych na ataki i redukowanie zagrożeń. Pierwszym tematem omawianym w tym rozdziale były zagadnienia związane z zapewnieniem zgodności raportu z wymaganiami klienta oraz wytycznymi rekomendowanymi przez uznane standardy przemysłowe. Doświadczenie uczy, że firmy i organizacje znajdują odpowiednie środki budżetowe na inwestycje w mechanizmy zabezpieczeń często dopiero wtedy, kiedy dojdzie do poważnego incydentu bezpieczeństwa bądź kiedy przeprowadzony audyt wykazuje, że środowisko komputerowe firmy nie spełnia określonych wymagań formalno-prawnych. Z tego powodu znajomość obowiązujących przepisów i regulacji prawnych oraz powszechnie stosowanych i akceptowanych norm i standardów przemysłowych będzie z pewnością Twoim silnym atutem w rozmowach z potencjalnymi klientami. W dalszej części książki zajmowaliśmy się różnymi aspektami tworzenia raportów, obejmującymi zarówno ich strukturę, jak i formatowanie, i przedstawiliśmy szereg praktyk, wytycznych i rekomendacji ułatwiających tworzenie profesjonalnych raportów końcowych. Na koniec dodaliśmy jeszcze krótki podrozdział, w którym przedstawiliśmy kilka narzędzi wspomagających tworzenie raportów, które dostępne są w systemie Kali Linux. Praca nad tą książką sprawiła nam naprawdę wiele radości i satysfakcji. Mamy nadzieję, że będzie ona dla Ciebie źródłem inspiracji i pomoże Ci w Twoich zmaganiach z testami penetracyjnymi aplikacji internetowych i nie tylko. Dziękujemy za wybranie i przeczytanie naszej książki.

328

Skorowidz A acccheck, 228 Active Directory, 171, 194 ADC, 286, 287 adres URL, definiowanie, 254 adresy IP, sfałszowane, 285 aktualizacje, 275 harmonogram, 276 zabezpieczeń systemu, 276 ALE, 31 analiza bitowych obrazów dysków, 295 list wyrazów, 189 pakietów sieciowych, 206 plików binarnych zawierających oprogramowanie firmware, 298 ruchu sieciowego, 212 słowników, 189 sygnatur plików, 299 systemu plików, 291, 298 zawartości plików index.dat, 299 zawartości plików PDF, 299 żądań HTTP, 203 aplet Java, 156 aplikacje internetowe, 23 błędy w zabezpieczeniach, 286 wykrywanie i mapowanie, 241 zakres testów penetracyjnych, 23 Application Layer Attacks, 257 apt-get install httrack, 66 architektura klient-serwer, 91 ARO, 31 ARP, 212

ARP address flooding, 142 ARP Spoofing, 141 arpspoof, 141, 212 ataki brute-force, 125, 170 DDoS, 256 DoS, 255 hybrydowe, 170 LFI, 254 man-in-the-middle, 139, 211 metodą siłową, 125 na aplikacje internetowe, 231 na bazy danych, 219, 222 na cele w internecie, 250 na klienty aplikacji internetowych, 147 na parametry metod GET i POST, 131 na protokoły komunikacyjne, 256 na serwery aplikacji internetowych, 92 na serwery DNS, 71 na serwery WWW, 231 na warstwę aplikacji, 257 na zarządzanie sesjami, 195 na żądania Form, 131 na żądania HTTP, 134 powodujące wyczerpanie zasobów sesji, 257 przechwytywanie sesji, 197 RFI, 254 słownikowe, 169, 228 socjotechniczne, 148, 151 łamanie haseł, 169 SSL stripping, 140 SSL-Exhaustion, 257 THC-SSL-DOS, 257

wykorzystujące przeciążenie połączeń sieciowych, 256 XSS, 223, 248 z klonowaniem, 151 z użyciem narzędzi penetracyjnych opartych na przeglądarkach, 236 audyt bezpieczeństwa, 21, 28 serwerów WWW, 92 sesji WWW, 199, 203 wartość, 301 Authentication hijacking, 225 Autopsy, 295 AV, 31

B BackTrack, 38 badanie zasobów sieci komputerowych, 65 bazy danych, 218 BeEF, 232 panel zarządzania pakietu, 234 przechwycony system, 235 bezpieczeństwo sesji HTTP, 281 bezpieczeństwo systemu, 272 a testy penetracyjne, 32 czynnik ludzki, 148 instalowanie oprogramowania i urządzeń, 274 podstawowe wymogi, 273 białe pudełko, 24 Binwalk, 298 bitowe kopie nośników danych, 288, 291 narzędzia, 293 partycje, 292 suma kontrolna, 294

Skorowidz

black-box, 24, 30 BootKey, 171, 173 Browser Exploitation Framework, 232 brute-force, 125, 170 łamanie haseł, 171 bulk_extractor, 300 BURP, 236 BURP Proxy, 238 Intercept, 241 opcje konfiguracyjne, 239 Burp Spider, 241, 244 Burp Suite, 238

C c/s, 139 CAC, 194 Cain and Abel, 173 Center for Internet Security, 275 certyfikaty CEH, 311 CISSP, 31, 193 głównego urzędu certyfikacji, 106 GPEN, 311 raport końcowy, 310 SSL, 106, 282 z podpisem własnym, 282 chkrootkit, 295 chntpw, 180 uruchomienie w Kali Linux, 182 ciasteczka, 197 edytowanie zawartości, 199, 201 niezabezpieczone, 208 obrona przed przechwytywaniem, 286 przeglądanie, 201 uwierzytelniające ofiary, 198 wstrzykiwanie, 198 wykradanie, 198, 208, 225 zarządzanie, 200 ciąg zaburzający, 170 Cisco Network Foundation Protection, 275 CISSP, 193 Clickjacking, 196 kod źródłowy stron, 197 obrona przed atakiem, 287 CmosPwd, 190

330

Cookie Cadger, 203 dane o sesji, 204 Cookie Injector, 200 cookie injector tool, 198 cookies, 197 Cookies Manager+, 198, 201 COTS, 231 cracks per second, 139 Crackstation, 278 creddump, 191 cross-site scripting, 223 Crunch, 169, 185 znaki specjalne, 186 CutyCapt, 327 czarne pudełko, 24

D DBPwAudit, 229 dc3dd, 293, 297 dd, 291 DDoS, 256 kategorie ataków, 256 obrona przed atakiem, 285 Debian, 38 Denial of Service, 256 dictstat, 189 Dig, 71 DirBuster, 128 raport, 130 Distributed Denial of Service, 256 DNS, 267 DNSChef, 266 dokumentacja, 306 DoS, 256 kategorie ataków, 256 obrona przed atakiem, 285 dostęp do systemu alternatywny, 37 techniki XSS, 225 dostępność, 30 Dradis, 325 Driftnet, 217 dsniff, 212 nasłuchiwanie i przechwytywanie pakietów, 213 uruchamianie, 214 dual-boot configuration, 44

E EDGAR, 57 EF, 31 ekspertyza śledcza, 289 e-mail relay server, 124 encrypted passwords, 137 Equifax Secure Certificate Authority, 282 Ettercap, 214 lista celów, 216 skanowanie sieci, 216 Exploitation Tools, 36, 37, 48 exploity, 92, 113 Reserve_TCP Meterpreter, 156

F fałszywe adresy IP, 285 odpowiedzi DNS, 267 witryny, 159, 252 Ferret, 209 uruchamianie, 210 FHS, 38 Fierce, 73 Fimap, 254 findmyhash, 190 fingerprinting, 93 Firefox, wtyczki, 198, 236 Firesheep, 199 FOCA, 84 utworzenie nowego projektu, 84 Foremost, 299 Forensics, 48, 290 FoxyProxy, 236 fping, 70 funkcja skrótu, 170 kopie nośników danych, 288 fuzzing aplikacji internetowych, 93

G generator haseł, 278 ładunków, 132 GHDB, 63 GIT, 250 glosariusz, 319

Skorowidz

Google hacking, 61 Google Hacking Database, 63 Google Internet Authority, 282 GPU, 177 Greasemonkey, 200 grey-box, 25, 30 gromadzenie danych, 34 GRUB, 44 Gruyere, 224, 246 instancja projektu, 225

H HackBar, 219 Hak5 Pineapple, 211 Hamster, 208 Hardware Hacking, 48 hashcat, 177 hashed passwords, 137 Hash-identifier, 188 hasła, 137 dostępu, 250 generowanie listy, 185 łamanie, 169 ochrona, 170 polityka zarządzania, 277 przechowywanie, 278 przechwytywanie, 157, 169, 249 siła, 277 w systemie Linux, 173 w systemie Windows, 171 haszowanie, 170 z dodatkiem soli kryptograficznej, 170 hexinject, 228 hiperłącza spreparowane, 196 home feed option, 163 hosty, skanowanie, 162 HTTrack, 66, 279 Hydra, 125 uruchomienie, 128

I ICMP Echo Request, 70 identyfikacja adresów URL, 227 celów za pomocą serwerów DNS, 73 obszarów krytycznych, 27 typów haszowanych wartości, 188

iFrame, 196 Information Gathering, 34, 46 informatyka śledcza, 287 zasady, 288 integralność, 30 intercept proxy, 105 interfejs pętli zwrotnej, 239 Inundator, 269 inżynieria społeczna, 148 wsteczna, 48 ionCube Loader, 64 IP Forwarding, 141 IPS/IDS, 231 iptables, 142

J język SQL, 218 John the Ripper, 137, 173 domyślna konfiguracja ścieżek, 176 haszowanie, 170 łamanie haseł, 174 proces, 137 łamanie pliku haseł, 139 słowniki, 138, 177 szybkość działania, 138 Johnny, 138 łamanie haseł, 174 opcje konfiguracyjne programu, 175 słowniki, 177 uruchamianie, 175

K Kali Linux, 15 aktualizacja pakietu SET, 150 instalowanie, 40 pakietów, 43 konfiguracja, 39 Live CD, 180, 290 minimalne wymagania sprzętowe, 40 narzędzia dostępne w systemie, 46 Network Install, 40 proces konfigurowania partycji dysku, 42 publiczny adres IP, 225 słowniki, 129

uruchamianie w maszynie wirtualnej, 46 w trybie Forensics, 290 z nośnika zewnętrznego, 39 wprowadzenie do systemu, 38 karty dostępu, 194 KeepNote, 326 klienty, 91, 147 aplikacji internetowych, 169, 191 HTTP, 262 klonowanie środowiska, 278 witryny internetowej, 66, 153, 158, 251, 279 klucze uruchamiania systemu, 171, 173 komunikaty ICMP, 70 o upływie czasu żądania, 70 kopiowanie plików SAM i SYSTEM z hosta, 172

L Linux, łamanie haseł, 173 lista adresów URL, 227 potencjalnych haseł, 185 listener port, 142 Live HTTP Headers, 134 Local File Inclusion, 254 Logical Volume Manager, 43 LOIC, 263 tryby, 266 luki w zabezpieczeniach aktualizacja bazy, 276 aplikacji internetowych, 245, 254 hostów, 167 przeglądarek, 232 raport końcowy, 315 systemów poczty elektronicznej, 123 usuwanie, 276 wstrzykiwanie kodu SQL, 221 wstrzykiwanie skryptów, 223 wykorzystywanie, 113 wyszukiwanie, 92 LVM, 43

331

Skorowidz

Ł ładunek, 117 łamanie haseł, 137, 169 bezpłatne usługi sieciowe, 190 haszowanych, 189 maska, 189 narzędzia, 174 przechowywanych w plikach systemowych, 169 siłowe, 229 systemu Linux, 173 techniki, 169 za pomocą John the Ripper, 174 zabezpieczających BIOS komputera, 190 łącza, modyfikacja, 196

M MAC, 172 MagicTree, 327 Maintaining Access, 38, 48 Maltego, 58, 74 zadania, 76 Maltego CaseFile, 326 man-in-the-middle, 139, 211 obrona przed atakiem, 281 przeprowadzanie manualne, 212 maska, 189 mechanizmy HSTS, 140 klonowania, 153 obronne, 231, 271 testowanie, 273 pasywnego nasłuchiwania, 208 renegocjacji bezpiecznego połączenia SSL, 257 usuwania miękkich błędów 404, 93 menedżer LVM, 43 metadane, 83 wyszukiwanie i analiza, 83 Metasploit, 113, 154 skanowanie sieci lokalnej, 114 wersja konsolowa, 114 meterpreter, 151 uruchomienie sesji, 156 wykorzystanie, 156

332

metodologia certyfikacji CISSP, 193 testów penetracyjnych, 24, 310, 323 metody pojedynczego uwierzytelniania, 194 szyfrowania, 283 mirror server, 43 MitM Proxy, 161 montowanie dysków z systemem Windows, 172

N nagłówki X-Frame-Options, 287 narzędzia do klonowania witryn, 281 do łamania haseł, 174 do przechwytywania sesji, 198 do przeprowadzania ataków DoS/DDoS, 285 śledcze, 295 wspomagające tworzenie raportów, 325 nasłuchiwanie pakietów sieciowych, 199 ruchu sieciowego, 143, 228 nazwy DNS, 71 Nessus, 162 HomeFeed, 163 instalowanie w systemie Kali Linux, 163 ProfessionalFeed, 163 raporty, 167, 168 skanowanie hostów, 166 uruchomienie, 164 używanie, 164 Netcat, 124 NetFlow, 286 NGIPS, 236 Niskoorbitalne Działo Jonowe, 263 Nmap, 76 agresywne skanowanie, 79 graficzny interfejs użytkownika, 77 okno wyników skanowania, 82 opcje, 79 NoScript, 287 nośniki danych, 288

O obrona przed atakami Clickjacking, 287 DoS, 285 man-in-the-middle, 281 przechwytywanie ciasteczek, 286 SSLstrip, 284 ocena ryzyka, 30 formuły, 31 okna serwisowe, 277 ocl, 178 oclHashcat, 177 odgadywanie haseł, 169 okna serwisowe, 277 Ophcrack, 183 uruchomienie w Kali Linux, 184 osobista weryfikacja tożsamości, 194 oszacowanie bezpieczeństwa, 21 oświadczenie o zachowaniu poufności, 307 otwarta implementacja sterowników kart graficznych, 178 Owasp-Zap, 105, 245 automatyczne logowanie, 110 konfigurowanie przeglądarki, 108 mechanizm aktualizacji całego pakietu, 110 proces uwierzytelniania, 109 przeprowadzanie ataków, 109 raporty, 111

P PAE, 39 pakiety ARP, 212 czas życia, 259 MitM Proxy, 161 SET, 149, 249 sieciowe, 259 TCP, 259 pamięć masowa urządzeń, 289 partycje, 172 wymiany, 291 Pasco, 299 Password Attacks, 37, 47, 174 Patator, 229

Skorowidz

pdf-parser, 299 pentesterzy, 15 phishing email, 159 phrasendrescher, 190 PIV, 194 pliki binarne, 298 CLF, 227 index.dat, 299 Robots.txt, 53 SAM, 171, 178, 180 wydobycie zawartości, 173 SEED, 247 shadow, 173 strefowe, 71 wyszukiwanie i odzyskiwanie, 299 poczta elektroniczna, 123 fałszywe wiadomości, 159 podatność na atak, 29 aktualizacja bazy, 276 aplikacji internetowych, 245, 254 ocena ryzyka, 30 przeglądarki, 232 raport końcowy, 315 skanowanie, 30 usuwanie, 276 wyszukiwanie, 92 XSS, 223, 226 podnoszenie uprawnień, 37 podstawowe wymogi bezpieczeństwa, 303 podsumowanie ustaleń, 313 polecenia apt-get install, 233 apt-get update, 233 arpspoof, 142 binwalk, 298 bkhive, 173 bkhive SYSTEM bootkey, 180 bkreg, 173 chntpw -i, 183 chntpw -l SAM, 181 cp, 139 Data, 124 db_nmap, 115 dc3dd, 293 expand, 171 exploit, 119 fdisk, 172 fierce, 123 fping, 70

getsystem, 222 git, 150 HELO, 124 host, 114 ifconfig, 140 ifdown, 140 iptables, 141, 142 john -test, 138 MAIL FROM, 124 md5sum, 297 msfcli, 113 msfconsole, 113 msfgui, 113 netcat, 124 ping, 70 protokołu SMTP, 124 RCPT TO, 124 route -n, 141 samdump, 173 samdump SAM bootkey, 180 services, 114, 115 sessions -I 1, 157 set payload, 117 sfdisk -l, 291 sha256sum, 294 show options, 117, 118 show payloads, 117 sqlmap, 222 SYSKEY, 173 traceroute, 69 use, 116 polityka zarządzania hasłami, 277 połączenia HTTP, 268 HTTPS, 268 połączenia TCP, 267 trójetapowe, 79 VPN, 282 poprawki zabezpieczeń, 275 harmonogram instalowania, 276 proces zarządzania, 276 porty 443, 119 8080, 108, 245 komunikacyjne, 118 nasłuchujące, 142 poufność, 30 poziom zabezpieczeń minimalny, 274 podstawowy, 274 PREROUTING, 143

Privilege Escalation, 37 produkty z półki, 231 professional feed option, 163 projekty Emily, 59 Gruyere, 224, 246 promiscuous mode, 47 Protocol Attacks, 256 protokoły 802.1x, 283 HTTPS, 282 MACsec, 283 routingu, 285 SSL, 257 SSL/TLS 3.0, 281, 286 TLS, 281 ProxyStrike, 98 robot sieciowy, 100 przechwytywanie ciasteczek, 197, 209, 286 danych logowania użytkowników, 211 haseł, 169, 249 nazw kont i haseł, 157 obrazów przesyłanych w sieci, 217 pakietów, 213 sieciowych, 210 TCP, 259 przechwytywanie połączeń, 161 TCP, 267 ruchu HTTP oraz HTTPS, 238 ruchu sieciowego, 207, 267, 270 sesji, 197, 208, 233 narzędzia, 198 przegląd projektu, 306 przeglądarki, 232 ochrona przed atakami, 236 zabezpieczenia, 249 przekazywanie pakietów IP, 142, 212 przekierowanie połączeń, 284 portów komunikacyjnych, 142 ruchu sieciowego, 141 sesji, 284 przestrzeń celów, 27 przetwarzanie wielowątkowe, 262 PwDump, 173

333

Skorowidz

R Rainbow Tables, 47, 170 RainbowCrack, 170, 189 ramy czasowe, 308 raport końcowy błędy, 302 dodatki, 319 dokumentacja, 306 format, 307 glosariusz, 319 informacje o metodologii, 310 konsekwencje, 302 narzędzia wspomagające tworzenie, 325 oświadczenie o zachowaniu poufności, 307 podatności i luki w zabezpieczeniach, 315 podsumowanie ustaleń, 313 zestawienie elementów, 315 prezentacja, 302 przegląd projektu, 306 ramy czasowe projektu, 308 specyfikacja, 28 streszczenie, 309 strona tytułowa, 307 szczegółowe procedury testowania, 312 tworzenie, 301 usługi profesjonalne, 304 wersja końcowa, 306 wersja robocza, 306 wnioski i rekomendacje dla środowiska sieciowego, 316 wymagania, 303 wypełnianie szablonu, 306 zakres projektu, 306 zarządzanie wersjami dokumentacji, 308 zgodność ze standardami i procedurami, 303 rcracki_mt, 189 Regional Internet Registries, 57 rekomendacje, 316 powykonawcze, 28 rekonesans, 34, 51 badanie zasobów sieci komputerowych, 65 Google hacking, 61

334

Google Hacking Database, 63 lokalizacja, 60 oferty pracy, 59 plik Robots.txt, 53 regionalni administratorzy adresów IP, 57 rozpoznanie wstępne, 53 sieciowy, 65 strona internetowa firmy, 53 system EDGAR, 57 wyszukiwarka Shodan, 60 z wykorzystaniem protokołu ICMP, 69 z wykorzystaniem serwerów DNS, 71 zadania, 52 zasoby serwisów społecznościowych, 58 zaufanie, 59 źródła przechowujące historyczne wersje witryn internetowych, 54 rekordy zasobowe, 71 Remote File Inclusion, 254 renegocjacja sesji SSL, 258 Reporting Tools, 48 Reverse Engineering, 48 rich-text, 326 robot sieciowy, 93, 100, 241 roczna oczekiwana strata, 31 roczny wskaźnik wystąpienia zdarzenia, 31 rootkit, 295 rozsyłanie spreparowanych pakietów ARP, 141 rozszerzenia PAE, 39 ruch sieciowy, 206 adresy URL, 227 man-in-the-middle, 212 monitorowanie, 227 nasłuchiwanie, 143, 228 przechwytywanie, 267, 270 przekierowanie, 213 sprawdzanie ilości, 263 urządzenia monitorujące, 285

S SAM, 171 samdump2, 178 Scalpel, 299

Scapy, 257, 259 scenariusze ataków, 260 security assessment, 21 security audit, 21 serwery, 91 aplikacji internetowych, 92, 223 zabezpieczanie, 136, 249 atakowanie, 262 limit równoległych sesji, 262 poczty elektronicznej, 123 proxy, 98, 105, 236 wykorzystanie, 238 Samba, 116 sieciowe, 91 WWW, 262 serwery DNS identyfikacja celów, 73 proxy, 267 rekonesans, 71 serwisy społecznościowe, 58 sesja, 195 ciasteczka, 197 logowania, 205 mechanizmy bezpieczeństwa, 195 Session Exhaustion, 257 session fixation attack, 195 session hijacking, 197 SET, 149, 249 adres IP sklonowanej witryny, 158 aplet Java, 156 Credential Harvester Attacks, 157 Exploit to deliver, 154 importowanie własnych plików witryny internetowej, 158 IP address/hostname for reverse connection, 154 mechanizmy chroniące przeprowadzany atak, 155 NAT/Port forwarding, 154 przechwycenie nazw kont i haseł, 157 raport o zdarzeniu, 160 raporty, 253 rozsyłanie fałszywych wiadomości, 159 URL you want to clone, 154

Skorowidz

uruchomienie, 151 utworzenie kopii witryny, 153 zastosowanie do ataku z klonowaniem, 151 SharePoint, 151 Shodan, 60 Sidejacking, 208 Siege, 268 skanery biometryczne, 194 stron internetowych, 246 skanowanie adresów URL, 93 agresywne, 79 celów, 35 hostów, 162 podatności na ataki, 30, 32 portów, 93 witryny, 255 z wykorzystaniem protokołu ICMP, 70 Skipfish, 95 raport, 97 słowniki, 96 skrypty opakowujące, 228 wykrywanie nieautoryzowanych skryptów, 287 XSS, 224, 226 SLE, 31 Slowloris, 261 słowa kluczowe dbs, 222 FUZZ, 133, 135 tables, 222 sniffer, 267 Sniffing and Spoofing, 48 SniffJoke, 267 Social Engineer Toolkit, 149 social engineering, 16, 148 SOW, 319 spodziewana jednorazowa strata, 31 sqlmap, 221 SSL stripping, 140 SSLstrip, 140, 197, 211 konfigurowanie przekierowania portów, 142 mechanizm działania, 284 obrona przed atakiem, 284 rozpoczęcie ataku, 141 SSO, 194

standardy, 28, 304 status testu, 24, 27 STIG, 274 strategia ataku, 36 Stress Testing, 48 strony WWW, 241 suma kontrolna, 293 baza, 298 sygnatury plików, 299 SYSKEY, 171 System services, 48 systemy BeEF, 59 EDGAR, 57 IDS, 93, 269 IPS, 269 NGIPS, 236 równoważenia obciążenia i filtrowania zawartości, 286 SCADA, 60 SIEM, 270 z kartami dostępu, 194 zabezpieczeń, 231 szablony witryn, 251 szare pudełko, 24 szyfrowane połączenia https, 197 VPN, 282

T tablice tęczowe, 170, 189 łamanie haseł systemu Windows, 183 Tamper Data, 125 TCPReplay, 270 Tenable, 163 testowanie działania różnych urządzeń sieciowych, 270 mechanizmów obronnych, 273 odporności na przeciążenia, 268 podatności na ataki XSS, 224 sklonowanego środowiska, 279 testy o nieograniczonym zakresie działania, 26 odporności na przeciążenie systemu, 256 warunków skrajnych, 256

testy penetracyjne, 21 a skanowanie podatności, 32 aplikacji internetowych, 23 bezpieczeństwo zasobów, 32 cele, 22, 255 etapy, 24, 34 określenie poziomu zabezpieczeń, 307 pomyślność, 33 przeprowadzanie, 32, 33 socjotechniczne, 149 własnego środowiska, 272, 273 z wykorzystaniem systemu Kali Linux, 34 zakres prac, 25, 26 zewnętrzne, 321 zgoda właściciela, 33 THX-SSL-DOS, 257 tokeny, 194 sesji, 197 transfery stref, 71, 73 triada CIA, 30 tryb nasłuchiwania, 207, 215 ttl, 259

U umowy oczekiwania klienta, 317 potencjalne problemy i zagadnienia, 324 rozliczane według zużycia czasu i zasobów, 305 wykaz prac, 319 ze stałą ceną, 304 unattended installation, 39 Unicast RPF, 285 urlsnarf, 227 usermap_script, 116 usługi NAT, 251 profesjonalne, 304 w chmurze, 211 usuwanie śladów włamania, 38 utrzymanie zdobytego przyczółka, 37 uwierzytelnianie, 193 ataki słownikowe, 228 dodatkowe rozwiązania, 194 dwuskładnikowe, 283 pojedyncze, 194 użytkowników, 193 wieloskładnikowe, 193

335

Skorowidz

V Vega, 101 moduł serwera proxy, 104 zestawienie znalezionych podatności, 104 Volume Based Attacks, 256 Vulnerability Analysis, 35, 46 vulnerability assessment, 32

W w3af, 120 wykorzystanie znalezionych podatności i luk w zabezpieczeniach, 122 w3mir, 281 wartość ryzyka, 32 sumy kontrolnej, 293 zasobu, 31 WayBack Machine, 54 Web Applications, 47 Web Developer, 199 WebCopier, 281 Webshag, 92 obsługa programu, 93 raport, 95 WebSlayer, 131 atak na żądania HTTP, 134 generator ładunków, 132 Websploit, 112 weryfikacja połączeń HTTPS, 281 white-box, 25, 30 Windows, 171 ataki typu offline, 171 lista kont użytkowników, 181 montowanie dysków, 172 odczytywanie i zapisywanie plików, 172 partycja systemu, 172 uzyskanie dostępu do systemu, 180 Windows Reverse_TCP Meterpreter, 154 Wireless Attacks, 47 Wireshark, 206 filtrowanie, 208 wirtualne środowisko testowe, 279 wskaźnik ekspozycji, 31 wstrzykiwanie ciasteczek, 198 kodu, 248

336

kodu SQL, 218 pakietów, 228 skryptów, 223 wtyczki przeglądarki Firefox, 198 wykaz prac dodatkowe elementy, 323 dodatkowe uzgodnienia prawne, 323 koszty usług, 323 lista narzędzi, 324 metodologia testów, 323 oczekiwania i odpowiedzialność, 323 szczegółowy, 319 uwierzytelnianie, 324 zewnętrzne testy penetracyjne, 321 wykorzystywanie błędów w zabezpieczeniach przeglądarki, 196 exploitów, 92 luk w zabezpieczeniach, 113, 254 systemów poczty elektronicznej, 123 zidentyfikowanych podatności, 36, 254 wymogi bezpieczeństwa, 273 wyszukiwanie luk w zabezpieczeniach, 92, 221 metadanych, 83 podatności, 29, 35, 92 wytyczne, 28, 304

X XSS, 223 aplikacje internetowe, 248 testowanie podatności, 224 XSS cookie stealing, 225

Z zabezpieczanie serwerów aplikacji internetowych, 249 systemów podłączonych do internetu, 271 zakres prac, 319 cel testu, 33 definicja przestrzeni celów, 27 systemów, 26

zdobycia flagi, 28 dokument, 25 identyfikacja obszarów krytycznych, 27 materiały i raporty, 33 metody testowania, 26 narzędzia, 27 oprogramowanie, 27 osoby powiadomione o planowanym teście, 27 początkowy status testu, 27 ramy czasowe testu, 26, 308 reakcja na próby przełamywania zabezpieczeń, 27 rekomendacje powykonawcze, 28 specyfikacja raportu końcowego, 28 ZAP, 236, 245 obrona przed zdalnymi atakami, 249 Zaproxy, 105 zarządzanie aktualizacjami, 275 poprawkami zabezpieczeń, 275 serwerem pakietu, 233 sesjami, 195 wersjami dokumentów, 308 zasoby sieciowe, odporność na przeciążenie, 263 zatarcie śladów penetracji systemu, 38 zaufanie, 59, 148 zbieranie odcisków systemu, 51 zdobycie flagi, 28 Zenmap, 77, 82, 125 Host details, 81 Zero-day, 275 zewnętrzny dysk USB, 292 zmienne LHOST, 118 RHOST, 117 znaczniki czasu, 172 zrzut okna, 327

Ż żądania Form, 131 mapowanie, 24