Na tropie błędów. Przewodnik hakerski

Tekst
0
Recenzje
Oznacz jako przeczytane
Czcionka:Mniejsze АаWiększe Aa

Dane oryginału

Copyright © 2019 by Peter Yaworski. Title of English-language original: Real-World Bug Hunting: A Field Guide to Web Hacking, ISBN 978-1-59327-861-8, published by No Starch Press. Polish-language edition copyright © 2020 by Polish Scientific Publishers PWN Wydawnictwo Naukowe PWN Spółka Akcyjna.  All rights reserved.


Przekład Kacper Paluch


Projekt okładki polskiego wydania Hubert Zacharski na podstawie oryginału


Wydawca Edyta Kawala


Redaktor prowadzący Jolanta Kowalczuk


Redaktor Anna Bogdanienko


Koordynator produkcji Anna Bączkowska


Konsultacja merytoryczna

Kamil Frankowicz


Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.


Copyright © for the Polish edition by Wydawnictwo Naukowe PWN SA

Warszawa 2020


ISBN 978-83-01-21051-9


eBook został przygotowany na podstawie wydania papierowego z 2020 r., (wyd. I)

Warszawa 2020


Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl

www.pwn.pl

O autorze

Haker Peter Yaworski jest samoukiem dzięki hojnemu dzieleniu się wiedzą przez tak wielu hakerów, którzy zjawili się przed nim, również tych, o których mowa w książce. Jest on doświadczonym bug hunterem, który pomógł takim firmom, jak: Salesforce, Twitter, Airbnb, Verizon Media, United States Department of Defense i wielu innym. Obecnie pracuje w Shopify jako inżynier do spraw bezpieczeństwa, czyniąc handel elektroniczny bezpieczniejszym.

O recenzencie merytorycznym

Tsang Chi Hong, znany również jako FileDescriptor, jest pentesterem i bug hunterem. W wolnym czasie pisze bloga o tematyce bezpieczeństwa na https://blog.innerht.ml, lubi słuchać muzyki filmowej.

PRZEDMOWA


Najlepszym sposobem nauki jest zwyczajna praktyka. W ten właśnie sposób nauczyliśmy się hakować.

Byliśmy młodzi. Podobnie jak wszyscy hakerzy, którzy przyszli przed nami, oraz ci, którzy przyjdą po nas, byliśmy napędzani niekontrolowaną, płonącą ciekawością odkrywania „jak to działa”. Początkowo graliśmy w gry komputerowe, a w wieku 12 lat rozpoczęliśmy naukę tworzenia własnego oprogramowania. Nauczyliśmy się programować w Visual Basic oraz PHP z książek z biblioteki oraz własnej praktyki.

Z naszą znajomością tworzenia oprogramowania szybko zauważyliśmy, że te umiejętności pozwalają dostrzegać błędy innych programistów. Przeszliśmy z tworzenia do niszczenia, a hacking od tej pory stał się naszą pasją. W celu uczczenia zakończenia szkoły średniej przejęliśmy kanał telewizyjny i wyemitowaliśmy własną reklamę gratulującą naszej klasie ukończenia szkoły. Choć w tamtym momencie było to zabawne, szybko spotkaliśmy się  z konsekwencjami i dowiedzieliśmy się, że nie jesteśmy hakerami, których świat potrzebuje. Zarówno szkole, jak i stacji telewizyjnej nie było do śmiechu, przez co spędziliśmy wakacje, myjąc okna w ramach kary. W college’u zamieniliśmy nasze umiejętności w rentowną firmę konsultacyjną, która w szczytowym momencie miała klientów w sektorach publicznych oraz prywatnych na całym świecie. Nasze doświadczenie hakerskie doprowadziło do powstania firmy HackerOne, którą założyliśmy razem w 2012 roku.  Naszą misją do dziś jest umożliwić każdej firmie na świecie pomyślną  współpracę z hakerami.

Jeśli to czytasz, również masz ciekawość niezbędną do zostania hakerem oraz bug hunterem. Wierzymy, że ta książka będzie wspaniałym przewodnikiem podczas Twojej podróży. Jest wypełniona wartościowymi i prawdziwymi przykładami zgłoszeń podatności bezpieczeństwa, które pochodzą z prawdziwych programów bug bounty, wraz z pomocną analizą i przeglądem dokonanym przez Pete Yaworskiego, autora i znajomego hakera. Podczas nauki będzie Twoim nieocenionym towarzyszem.

Innym powodem, dla którego ta książka jest tak ważna, jest to, że skupia się na zostaniu hakerem wykorzystującym swoje umiejętności w sposób etyczny. Opanowanie sztuki hakowania potrafi być wyjątkowo potężną umiejętnością, która – mamy nadzieję – będzie wykorzystywana w dobrych celach. Najlepsi hakerzy wiedzą, jak nawigować cienką linią oddzielającą dobre od złego. Wielu ludzi potrafi psuć rzeczy, a niektórzy nawet próbują na tym zarabiać. Wyobraź sobie jednak, że możesz uczynić internet bezpieczniejszym, pracować z firmami dookoła świata, a w dodatku na tym zarabiać. Twój talent pozwala utrzymać miliardy ludzi oraz ich dane w bezpiecznym miejscu. Mamy nadzieję, że dążysz właśnie do tego.

Jesteśmy niezmiernie wdzięczni Pete’owi za jego poświęcenie się w dokumentowaniu tego wszystkiego w tak okazały sposób. Chcielibyśmy mieć dostęp do takich materiałów, kiedy zaczynaliśmy. Książka Pete’a to prawdziwa przyjemność w czytaniu, która zawiera informacje niezbędne do rozpoczęcia podróży w hakowaniu.

Udanej lektury i udanego hakowania!

Pamiętaj, aby hakować odpowiedzialnie.

Michiel Prins i Jobert Abma
współzałożyciele HackerOne

PODZIĘKOWANIA


Bez społeczności HackerOne ta książka nigdy by nie powstała. Chcę podziękować dyrektorowi naczelnemu HackerOne, Mårtenowi Mickosowi, który skontaktował się ze mną, kiedy zacząłem pracę nad tą książką. Nieustannie dostarczał mi swoje opinie i pomysły na ulepszenie książki, a nawet zapłacił za profesjonalną okładkę samodzielnie wydanej wersji.

Chcę również podziękować współzałożycielom HackerOne, Michielowi Prinsowi oraz Jobertowi Abmie, którzy przedstawiali sugestie oraz przyczyniali się do powstawania niektórych rozdziałów, kiedy pracowałem nad wczesnymi wersjami tej książki. Jobert dokonał dogłębnej analizy, redagując każdy rozdział, aby dostarczyć informacje zwrotne i spostrzeżenia techniczne. Jego praca zwiększyła moją pewność siebie i nauczyła mnie więcej niż kiedykolwiek zdawałem sobie sprawę, że jest to możliwe.

Ponadto, Adam Bacchus przeczytał książkę pięć dni po dołączeniu do HackerOne, wprowadził poprawki i opisał swoje wrażenia po przeczytaniu zgłoszeń podatności, które pomogły mi w tworzeniu rozdziału 19. HackerOne nigdy nie prosił o nic w zamian. Jedyne czego platforma chciała, to wspieranie społeczności hakerów, czyniąc tę książkę możliwie jak najlepszą.

Byłbym samolubny, gdybym osobno nie podziękował Benowi Sadeghipourowi, Patrikowi Fehrenbachowi, Fransowi Rosenowi, Philippe’owi Harewoodowi, Jasonowi Haddixowi, Arne’owi Swinnenowi, FileDescriptorowi i wszystkim innym, którzy na początku pomagali mi rozmową o hakowaniu, dzielili się swoją wiedzą i zachęcali. Dodatkowo ta książka nie powstałaby bez hakerów, którzy udostępniają swoją wiedzę i upubliczniają błędy, a szczególnie tych, których znalezione błędy wykorzystuję w książce. Dziękuję wam wszystkim.

Wreszcie, nie byłbym w miejscu, w którym jestem dziś, bez wsparcia i miłości ze strony mojej żony i dwóch córek. To właśnie dzięki nim odniosłem sukces w hakowaniu i byłem w stanie dokończyć pisanie tej książki. I oczywiście wielkie podziękowania dla reszty rodziny, szczególnie dla  moich rodziców, którzy odmówili mi kupna systemów Nintendo, gdy dorastałem, a zamiast nich kupowali komputery i powtarzali, że to właśnie one są przyszłością.

WSTĘP

Ta książka wprowadzi Cię do obszernego świata hackingu etycznego lub inaczej procesu odpowiedzialnego odkrywania podatności bezpieczeństwa i zgłaszania ich do właścicieli aplikacji. Kiedy sam zaczynałem naukę hakowania, nie tylko chciałem wiedzieć, jakie podatności hakerzy znajdują, ale również, jak to robią.

Szukałem wszędzie informacji, lecz zawsze pozostawałem z tymi samymi pytaniami:

• Jakie podatności hakerzy znajdują w aplikacjach?

• Jak hakerzy uczyli się o tych podatnościach?

• Jak hakerzy zaczynają infiltrację strony?

• Jak wygląda samo hakowanie? Wszystko jest zautomatyzowane,  czy może robione ręcznie?

• Jak mogę zacząć hakować i znajdować podatności?

W końcu znalazłem się na HackerOne, platformie bug bounty stworzonej do łączenia hakerów etycznych z firmami, które szukają osób do przetestowania ich aplikacji. HackerOne pozwala hakerom i firmom upubliczniać błędy, które zostały znalezione i naprawione.

Czytając te ujawnione zgłoszenia, starałem się zrozumieć, w jaki sposób ludzie znajdują podatności oraz jak je wykorzystują. Często musiałem przeczytać to samo zgłoszenie dwa lub trzy razy, zanim je zrozumiałem. Tak samo jak pozostali początkujący, zdałem sobie sprawę z tego, że mógłbym wynieść o wiele więcej z objaśnień znalezionych podatności, gdyby były napisane prostym językiem.

Na tropie błędów. Przewodnik hakerski jest na to autorską odpowiedzią, która pomoże Ci zrozumieć wiele rodzajów podatności w aplikacjach internetowych. Nauczysz się szukać podatności, zgłaszać je, zarabiać na tym oraz, przy okazji, pisać bezpieczny kod. Książka ta nie omawia jedynie pomyślnych przykładów: znajdziesz w niej również błędy i wyciągnięte wnioski, z których wiele należy do mnie.

 

Do czasu, gdy skończysz czytanie, postawisz swój pierwszy krok w kierunku zwiększania bezpieczeństwa oraz powinieneś być w stanie zarabiać na tym pieniądze.

Dla kogo jest ta książka?

Ta książka została napisana z myślą o początkujących hakerach. Nie ma znaczenia, czy tworzysz strony internetowe, czy projektujesz je, czy jesteś rodzicem przebywającym w domu, 10-letnim dzieckiem, czy 75-letnim  emerytem.

Powiedziawszy to, choć nie jest to warunek konieczny do hakowania, pewne doświadczenie w programowaniu i znajomość z technologiami internetowymi mogą okazać się pomocne. Na przykład nie musisz być programistą internetowym, aby być hakerem, jednak znajomość podstawowego hipertekstowego języka znaczników (HTML), struktury strony internetowej, wyglądu kaskadowych arkuszy stylów (CSS) oraz tego, w jaki sposób JavaScript dynamicznie wchodzi w interakcję z witrynami, pomogą Ci odkrywać podatności i oceniać znaczenie znalezionych błędów.

Umiejętność programowania może pomóc, gdy szukasz podatności dotyczących logiki aplikacji oraz przy domysłach, gdzie programista mógł popełnić błędy. Jeśli potrafisz patrzeć z punktu widzenia programistów, zgadywać, w jaki sposób coś zostało zaimplementowane, bądź czytać ich kod (o ile jest dostępny), będziesz miał większą szansę na powodzenie.

Jeśli chcesz nauczyć się programowania, polecam Ci sprawdzić darmowe kursy na platformach Udacity oraz Coursera. Dodatkowe materiały znajdziesz w załączniku B.

Jak czytać tę książkę?

Każdy rozdział, który omawia określony rodzaj podatności, zbudowany jest w następujący sposób:

1. Opis rodzaju podatności.

2. Przykłady podatności.

3. Podsumowanie wraz z wnioskami.

Każdy przykład podatności zawiera następujące części:

1. Moją ocenę trudności w szukaniu i udowadnianiu tej podatności.

2. Adres URL powiązany z miejscem, w którym dana podatność została znaleziona.

3. Link do oryginalnego zgłoszenia bądź artykułu.

4. Data zgłoszenia podatności.

5. Kwota otrzymana za przesłanie informacji.

6. Przejrzysty opis podatności.

7. Wnioski, które warto zapamiętać.

Nie ma potrzeby czytania tej książki od deski do deski. Jeśli znajdziesz konkretny rozdział, którym jesteś zainteresowany, przeczytaj go najpierw. W niektórych przypadkach odnoszę się do pojęć omawianych w poprzednich rozdziałach, jednak robiąc to, staram się odnotować miejsce, w którym zdefiniowałem ten termin, dzięki czemu łatwiej Ci będzie znaleźć odpowiednią sekcję. Podczas hakowania trzymaj tę książkę otwartą.

Co znajdziesz w tej książce?

Oto przegląd tego, co znajdziesz w każdym z rozdziałów:

Rozdział 1: Podstawy Bug Bounty wyjaśnia, czym są podatności oraz programy bug bounty, oraz tłumaczy różnice między klientem a serwerem. Omawia również, w jaki sposób działa internet, a w tym żądania HTTP, odpowiedzi i metody, oraz co to znaczy, że HTTP jest bezstanowy.

Rozdział 2: Otwarte przekierowanie omawia ataki, które wykorzystują zaufanie użytkowników do określonej domeny w celu przekierowywania ich do innej.

Rozdział 3: HTTP Parameter Pollution omawia sposób, w jaki hakerzy manipulują żądaniami HTTP, wstrzykując dodatkowe parametry, którym dana witryna ufa, prowadząc w ten sposób do nieoczekiwanych rezultatów.

Rozdział 4: Cross-Site Request Forgery wyjaśnia sposób, w jaki atakujący może wykorzystać złośliwą stronę, aby przeglądarka ofiary wykonała żądanie HTTP do innej strony. Strona, która otrzymuje żądanie, postępuje tak, jakby żądanie zostało wysłane umyślnie przez ofiarę.

Rozdział 5: HTML Injection i fałszowanie treści tłumaczy, w jaki  sposób złośliwy użytkownik może wstrzykiwać własne elementy HTML na docelowe strony internetowe.

Rozdział 6: Carriage Return Line Feed Injection pokazuje, jak atakujący wstrzykują zakodowane znaki do wiadomości HTTP, aby zmienić to, w jaki sposób interpretują je serwery, proxy i przeglądarki.

Rozdział 7: Cross-Site Scripting wyjaśnia, w jaki sposób atakujący wykorzystują strony, które nie filtrują danych wejściowych użytkownika, w celu wykonywania na nich własnego kodu JavaScript.

Rozdział 8: Template Injection pokazuje, jak atakujący wykorzystują template engine’y w przypadku, gdy strona nie filtruje odpowiednio wejścia użytkownika i używa ich w swoich szablonach. Rozdział pokrywa zarówno przypadki po stronie klienta, jak i serwera.

Rozdział 9: SQL Injection opisuje, jak podatność po stronie aplikacji (serwera) może pozwolić atakującemu na zaatakowanie bazy danych.

Rozdział 10: Server-Side Request Forgery wyjaśnia, w jaki sposób  atakujący sprawiają, że serwer wykonuje niezamierzone żądania.

Rozdział 11: XML External Entity pokazuje, jak atakujący wykorzystują sposób, w jaki aplikacja parsuje dane wejściowe XML i przetwarza w nich zewnętrzne encje.

Rozdział 12: Zdalne wykonanie kodu dotyczy wykorzystywania serwera bądź aplikacji do uruchomienia na nich własnego kodu.

Rozdział 13: Podatności w manualnej obsłudze pamięci omawia sposoby, w jakie hakerzy wykorzystują zarządzanie pamięcią aplikacji do powodowania niezamierzonych działań, włączając w to możliwość wykonywania własnych poleceń.

Rozdział 14: Przejęcie subdomeny pokazuje, w jaki sposób atakujący może przejąć kontrolę nad subdomeną w imieniu uprawnionej domeny.

Rozdział 15: Race Condition wyjaśnia, jak atakujący wykorzystują sytuacje, w których zmiana warunku początkowego danego procesu ma wpływ na jego końcowy wynik.

Rozdział 16: Insecure Direct Object Reference omawia wszelkie podatności pojawiające się, gdy atakujący ma dostęp do odniesienia do obiektu, do którego nie powinien mieć dostępu, na przykład pliku, rekordu w bazie danych bądź konta.

Rozdział 17: Podatności OAuth pokazuje błędy w implementacji protokołu stworzonego do uproszczenia i ustandaryzowania bezpiecznego uwierzytelniania w aplikacjach internetowych, mobilnych i desktopowych.

Rozdział 18: Podatności w logice i konfiguracji aplikacji wyjaśnia, w jaki sposób atakujący mogą wykorzystać wadliwą logikę w kodzie lub błąd w konfiguracji do wykonania niezamierzonych działań.

Rozdział 19: Poszukiwanie podatności na własną rękę dostarcza wskazówki, gdzie i jak szukać podatności, bazując na moich doświadczeniach i metodologii. Ten rozdział nie jest jednak poradnikiem krok po kroku do włamywania się na stronę.

Rozdział 20: Zgłaszanie podatności omawia, w jaki sposób pisać wiarygodne i informacyjne zgłoszenia podatności, dzięki czemu programy nie odrzucą twoich raportów.

Załącznik A: Narzędzia omawia popularne narzędzia stworzone do hakowania, włączając w to przechwytywanie ruchu sieciowego, enumerację subdomen, wykonywanie zrzutów ekranu i wiele więcej.

Załącznik B: Źródła stanowi listę dodatkowych materiałów do dalszego rozwoju w dziedzinie hackingu. Znajdziesz tu między innymi ćwiczenia online, popularne platformy bug bounty i polecane blogi.

Zastrzeżenie dotyczące hakowania

Patrząc na upublicznione zgłoszenia podatności, a dokładniej na kwoty pieniędzy, które hakerzy za nie otrzymują, naturalnie może się wydawać, że hacking to łatwa i szybka droga do wzbogacenia się. Tak jednak nie jest. Poszukiwanie błędów potrafi być satysfakcjonujące, jednak mało prawdopodobne jest, że napotkasz wiele historii o porażkach, które zdarzają się po drodze (z wyjątkiem tej książki, gdzie dzielę się kilkoma naprawę kompromitującymi opowieściami). Ponieważ będziesz głównie słyszał o sukcesach hakerów, możesz rozwinąć nierealistyczne oczekiwania wobec swojej  hakerskiej przygody.

Sukces może przyjść do Ciebie bardzo szybko. Jednak jeśli masz problemy ze znajdowaniem błędów, nie przestawaj się zagłębiać. Programiści zawsze będą pisać nowy kod, a błędy stanowią nieuniknioną część tego procesu. Im bardziej się starasz, tym więcej błędów będziesz znajdował.

W tej sprawie możesz śmiało do mnie napisać na Twitterze @yaworsk i dać znać, jak sobie radzisz. Nawet jeśli nie odnosisz sukcesów, chciałbym to od Ciebie usłyszeć. Bug hunting potrafi być samotną pracą, szczególnie jeśli sprawia Ci trudności. Jednak wspaniale jest też wspólnie świętować, a może nawet znajdziesz coś, co będę mógł zamieścić w następnym wydaniu tej książki.

Powodzenia i szczęśliwego hakowania.

1.
PODSTAWY BUG BOUNTY

Jeżeli jesteś nowy w świecie hackingu, podstawowe zrozumienie tego, jak internet działa i co się dzieje „pod maską”, kiedy wpisujesz adres URL w przeglądarce, będzie Ci bardzo pomocne. Nawigacja po stronach internetowych może wydawać się prosta, lecz wbrew pozorom angażuje ona wiele ukrytych procesów, takich jak przygotowanie żądania HTTP, identyfikacja domeny, do której wysłać żądanie, tłumaczenie domeny na adres IP, przesłanie żądania, renderowanie odpowiedzi i tak dalej.

W tym rozdziale poznasz podstawowe koncepcje i terminologię, takie jak podatności, programy bug bounty, klient, serwer, adres IP oraz HTTP. Zrozumiesz, w jaki sposób wykonywanie niezamierzonych akcji i dostarczanie nieoczekiwanego wejścia lub dostępu do prywatnych informacji może skutkować podatnościami bezpieczeństwa. Następnie zobaczymy, co się dzieje, kiedy wpisujesz adres URL w pasku adresu swojej przeglądarki, włączając w to, jak wyglądają żądania i odpowiedzi HTTP, jak i również różne metody HTTP. Zakończymy rozdział ze zrozumieniem tego, co oznacza stwierdzenie, że protokół HTTP jest bezstanowy.

Podatności i Bug Bounty

Podatność jest to słabość aplikacji, która pozwala złośliwej osobie wykonać niedozwolone akcje lub uzyskać dostęp do informacji, których normalnie nie powinna być stanie uzyskać.

Podczas nauki i testowania aplikacji pamiętaj o tym, że podatności mogą skutkować działaniami zamierzonymi lub niezamierzonymi. Dla zobrazowania: zmiana parametru / pola ID identyfikatora rekordu w celu uzyskania informacji, do których nie powinieneś mieć dostępu, jest przykładem niezamierzonej akcji.

Załóżmy, że utworzyłeś profil ze swoją nazwą, e-mailem, datą urodzenia i adresem. Strona zachowałaby te informacje jako prywatne i umożliwiłaby do nich dostęp tylko Twoim znajomym. Jeśli jednak aplikacja internetowa pozwala komukolwiek dodawać Cię jako swojego znajomego bez Twojej zgody, byłaby to podatność bezpieczeństwa. Mimo że strona strzeże Twoich prywatnych danych przed nieznajomymi, pozwalając dowolnej osobie na dodanie Cię do swoich znajomych bez Twojej zgody, jednocześnie umożliwia ona każdemu dostęp do informacji o Tobie. Kiedy testujesz stronę internetową, zawsze rozważaj to, jak ktoś mógłby nadużyć obecnej  funkcjonalności.

Bug bounty to nagroda, którą strona lub firma przyznaje każdemu, kto w etyczny sposób znajdzie podatność i zgłosi ją do administracji bądź firmy. Nagrody są zazwyczaj pieniężne i wahają się od dziesiątek, aż po tysiące dolarów. Inne przykłady nagród to między innymi kryptowaluty, mile  lotnicze, punkty nagród bądź inne dobra cyfrowe.

Kiedy firma oferuje nagrody za znalezienie podatności, tworzy wyznaczony do tego program – termin, używany w tej książce, by oznaczyć zasady i strukturę ustanowione przez firmy dla ludzi, którzy chcą testować firmy  na te podatności. Zwróć uwagę na to, że różni się to od firm, które wykorzystują programy upubliczniania podatności (Vulnerability Disclosure Program – VDP). Programy bug bounty oferują nagrody pieniężne, podczas gdy VDP nie oferuje płatności (aczkolwiek firmy mogą nagradzać rzeczami). VDP to najzwyklejszy sposób dla uczciwych hakerów na zgłaszanie znalezionych podatności, aby dana firma mogła je naprawić. Mimo że nie wszystkie zgłoszenia przedstawione w tej książce zostały nagrodzone, wszystkie pochodzą od hakerów biorących udział w programach bug bounty.