Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00427 009652 10447601 na godz. na dobę w sumie
Bezpieczeństwo aplikacji tworzonych w technologii Ajax - książka
Bezpieczeństwo aplikacji tworzonych w technologii Ajax - książka
Autor: , Liczba stron: 496
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-1693-0 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> ajax
Porównaj ceny (książka, ebook, audiobook).

Bezpieczeństwo aplikacji WWW w Twoich rękach!

Technologia AJAX zdobyła rynek aplikacji internetowych - to fakt. Siła i szybkość, z jaką tego dokonała, robią wrażenie. Niestety, wysoka wydajność w zdobywaniu rynku odbiła się negatywnie na jakości kodu i jego odporności na ataki. Oczywiście wiele rozwiązań spełnia najwyższe standardy jakości i bezpieczeństwa, ale istnieje jeszcze wiele serwisów, które powinny o to zadbać.

Jeżeli zastanawiasz się, czy Twój serwis korzystający z AJAX jest odpowiednio zabezpieczony, ta książka odpowie na to pytanie! Mało tego, dzięki 'Bezpieczeństwo aplikacji tworzonych w technologii Ajax' dowiesz się, jak optymalnie zabezpieczyć Twoją aplikację, a także poznasz rodzaje ataków, na które ta aplikacja może być narażona. Poznasz także charakterystykę zagrożeń oraz nauczysz się efektywnie wykorzystywać mechanizm SSL (skrót od ang. Secure Sockets Layer). Po lekturze tego podręcznika będziesz w stanie poznać typowe błędy popełniane przez programistów. Zrozumiesz, w jaki sposób ktoś może wykonać atak na warstwę prezentacji oraz dane zgromadzone w przeglądarce. Ponadto nauczysz się testować aplikacje AJAX. Autorzy książki przedstawią również wady i zalety popularnych szkieletów aplikacji AJAX.

Zapewnij bezpieczeństwo Twojej aplikacji!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Bezpieczeñstwo aplikacji tworzonych w technologii Ajax Autor: Billy Hoffman, Bryan Sullivan T³umaczenie: Robert Górczyñski ISBN: 978-83-246-1693-0 Tytu³ orygina³u: Ajax Security Format: 168x237, stron: 496 Bezpieczeñstwo aplikacji WWW w Twoich rêkach! • Jakie ataki Ci gro¿¹? • Jak zapewniæ bezpieczeñstwo Twojej aplikacji WWW? • Jak testowaæ aplikacjê AJAX? Technologia AJAX zdoby³a rynek aplikacji internetowych – to fakt. Si³a i szybkoœæ, z jak¹ tego dokona³a, robi¹ wra¿enie. Niestety, wysoka wydajnoœæ w zdobywaniu rynku odbi³a siê negatywnie na jakoœci kodu i jego odpornoœci na ataki. Oczywiœcie wiele rozwi¹zañ spe³nia najwy¿sze standardy jakoœci i bezpieczeñstwa, ale istnieje jeszcze wiele serwisów, które powinny o to zadbaæ. Je¿eli zastanawiasz siê, czy Twój serwis korzystaj¹cy z AJAX jest odpowiednio zabezpieczony, ta ksi¹¿ka odpowie na to pytanie! Ma³o tego, dziêki „Bezpieczeñstwo aplikacji tworzonych w technologii Ajax” dowiesz siê, jak optymalnie zabezpieczyæ Twoj¹ aplikacjê, a tak¿e poznasz rodzaje ataków, na które ta aplikacja mo¿e byæ nara¿ona. Poznasz tak¿e charakterystykê zagro¿eñ oraz nauczysz siê efektywnie wykorzystywaæ mechanizm SSL (skrót od ang. Secure Sockets Layer). Po lekturze tego podrêcznika bêdziesz w stanie poznaæ typowe b³êdy pope³niane przez programistów. Zrozumiesz, w jaki sposób ktoœ mo¿e wykonaæ atak na warstwê prezentacji oraz dane zgromadzone w przegl¹darce. Ponadto nauczysz siê testowaæ aplikacje AJAX. Autorzy ksi¹¿ki przedstawi¹ równie¿ wady i zalety popularnych szkieletów aplikacji AJAX. • Podstawy technologii AJAX • Asynchronicznoœæ • Rodzaje ataków • Wykorzystanie SSL • Walidacja przyjmowanych danych • Skomplikowanie kodu a bezpieczeñstwo • Typowe b³êdy programistów • Przechwytywanie danych po stronie klienta • Bezpieczeñstwo w Google Gears oraz Dojo.Offline • Zagro¿enia zwi¹zane z warstw¹ prezentacji • Testowanie aplikacji AJAX • Zalety i wady dostêpnych szkieletów aplikacji AJAX Zapewnij bezpieczeñstwo Twojej aplikacji! Spis treĂci Rozdziaï 1. Przedmowa ............................................................................................ 15 Przedmowa (ta rzeczywista) .................................................................. 17 PodziÚkowania ...................................................................................... 21 O autorach ............................................................................................. 23 Wprowadzenie do bezpieczeñstwa technologii Ajax ............................. 25 Elementarz technologii Ajax ..................................................................................26 Czym jest Ajax? ................................................................................................26 Asynchroniczny ................................................................................................28 JavaScript ..........................................................................................................30 XML ..................................................................................................................34 Dynamiczny HTML (DHTML) ....................................................................35 Przechodzenie na architekturÚ Ajax ......................................................................35 Architektura grubego klienta ...........................................................................36 Architektura cienkiego klienta .........................................................................37 Ajax: zïotowïosa architektura ...........................................................................39 Architektura grubego klienta z punktu widzenia bezpieczeñstwa ................40 Architektura cienkiego klienta z punktu widzenia bezpieczeñstwa ..............41 Aplikacje Ajax z punktu widzenia bezpieczeñstwa .........................................42 Burza luk bezpieczeñstwa ......................................................................................43 ZwiÚkszony poziom zïoĝonoĂci, przejrzystoĂci i wielkoĂci ...........................43 Kwestie socjologiczne ......................................................................................46 Aplikacja Ajax: cel atrakcyjny i strategiczny ....................................................47 Podsumowanie .......................................................................................................48 8 Spis treĂci Rozdziaï 2. Rozdziaï 3. Rozdziaï 4. Wïamanie .............................................................................................. 49 Ewa ..........................................................................................................................49 Atak na witrynÚ HighTechVacations.net ..............................................................50 Zïamanie systemu kuponowego .....................................................................50 Atak na doïÈczanie danych po stronie klienta .................................................56 Atak na API Ajax ...............................................................................................61 Kradzieĝ w jednÈ noc .............................................................................................66 Ataki sieciowe ....................................................................................... 69 Podstawowe kategorie ataków ...............................................................................69 Wyliczanie zasobów .........................................................................................70 Manipulacje parametrami ................................................................................74 Inne rodzaje ataków ...............................................................................................98 Cross-Site Request Forgery (CSRF) ..............................................................98 Phishing ............................................................................................................99 Denial of Service (DoS) .................................................................................100 Ochrona aplikacji sieciowej przed atakiem wyliczania zasobów lub manipulacji parametrami ............................................................................101 Secure Sockets Layer ......................................................................................102 Podsumowanie .....................................................................................................102 Sposoby ataków na Ajax ..................................................................... 105 Zrozumienie sposobów ataków na aplikacje Ajaksa ...........................................105 Sposoby ataków na tradycyjne aplikacje sieciowe ..............................................107 Pola danych wejĂciowych formularzy sieciowych .......................................107 Mechanizm cookies .......................................................................................109 Nagïówki ........................................................................................................110 Ukryte pola formularza sieciowego ..............................................................110 Parametry ciÈgu tekstowego zapytania ..........................................................111 Pliki przekazywane na serwer ........................................................................114 Ataki na tradycyjne aplikacje sieciowe: ogólna ocena .........................................115 Rodzaje ataków sieciowych ..................................................................................116 Metody usïugi sieciowej ................................................................................117 Definicje usïugi sieciowej ..............................................................................118 Ataki na aplikacje Ajaksa ......................................................................................119 ½ródïa ataków na aplikacje Ajaksa .................................................................120 Najlepsze z poïÈczenia obu Ăwiatów — z punktu widzenia hakera ............122 Prawidïowa weryfikacja danych wejĂciowych ....................................................123 Problem z czarnÈ listÈ oraz innymi okreĂlonymi poprawkami ...................124 Leczenie objawów zamiast choroby ..............................................................126 Weryfikacja danych wejĂciowych na podstawie biaïej listy ..........................129 Wyraĝenia regularne .......................................................................................133 Dodatkowe przemyĂlenia dotyczÈce weryfikacji danych wejĂciowych .......133 Rozdziaï 5. Rozdziaï 6. Spis treĂci 9 Weryfikacja rozbudowanych danych wejĂciowych uĝytkownika ......................135 Weryfikacja kodu znaczników .......................................................................136 Weryfikacja plików binarnych .......................................................................138 Weryfikacja kodu ěródïowego JavaScript ......................................................138 Weryfikacja serializowanych danych .............................................................144 Mit dotyczÈcy treĂci dostarczanej przez uĝytkownika .......................................146 Podsumowanie .....................................................................................................147 ZïoĝonoĂÊ kodu Ajaksa ......................................................................... 149 Wiele jÚzyków i architektur .................................................................................149 Indeksowanie tablicy ......................................................................................150 Operacje na ciÈgach tekstowych ....................................................................152 Komentarze w kodzie ....................................................................................153 Problem innej osoby ......................................................................................154 Dziwactwa JavaScript ...........................................................................................156 Interpretowany, a nie kompilowany .............................................................156 Sïaba kontrola typów ......................................................................................157 AsynchronicznoĂÊ ................................................................................................159 Problem tak zwanych wyĂcigów ...................................................................159 Zakleszczenia i problem jedzÈcych filozofów ..............................................163 Synchronizacja po stronie klienta ..................................................................167 Zachowaj ostroĝnoĂÊ podczas przyjmowania rad ..................................................168 Podsumowanie .....................................................................................................169 PrzejrzystoĂÊ aplikacji Ajaksa ............................................................... 171 Czarne pudeïka kontra biaïe pudeïka ..................................................................172 Przykïad: witryna MyLocalWeatherForecast.com .......................................174 Przykïad: witryna MyLocalWeatherForecast.com wykonana z uĝyciem technologii Ajax .........................................................................176 Podsumowanie porównania ..........................................................................179 Aplikacja sieciowa jako API .................................................................................180 Rodzaje danych i sygnatury metod ...............................................................181 Szczególne bïÚdy dotyczÈce bezpieczeñstwa ......................................................182 Nieprawidïowe uwierzytelnienie ..................................................................182 Nadmierne rozdrobnienie API serwera ........................................................184 Przechowywanie stanu sesji w jÚzyku JavaScript .........................................187 Ujawnianie uĝytkownikom poufnych danych .............................................188 Komentarze i dokumentacja w kodzie dziaïajÈcym po stronie klienta .......190 Transformacja danych wykonywana po stronie klienta ...............................191 Bezpieczeñstwo poprzez zaciemnianie ...............................................................195 Techniki zaciemniania kodu .........................................................................196 Podsumowanie .....................................................................................................198 10 Spis treĂci Rozdziaï 7. Rozdziaï 8. Rozdziaï 9. Przechwytywanie aplikacji Ajaksa ....................................................... 199 Przechwycenie struktury Ajaksa ..........................................................................200 Przypadkowe nadpisanie funkcji ...................................................................200 Nadpisywanie funkcji dla rozrywki lub w celu osiÈgniÚcia korzyĂci ..........202 Przechwytywanie technologii Ajax na ĝÈdanie ...................................................208 Przechwytywanie API JSON ..............................................................................213 Przechwycenie obiektu ..................................................................................218 Geneza przechwycenia danych JSON ..........................................................218 Obrona przed atakiem przechwycenia API ..................................................219 Podsumowanie .....................................................................................................222 Ataki na magazyny danych po stronie klienta ..................................... 223 Ogólny opis systemów magazynowania danych po stronie klienta ..................223 Ogólne informacje dotyczÈce bezpieczeñstwa magazynu danych po stronie klienta .........................................................................................225 Mechanizm HTTP cookies .................................................................................226 Reguïy kontroli dostÚpu do cookie ...............................................................229 PojemnoĂÊ cookie HTTP ..............................................................................234 Czas ĝycia cookie ............................................................................................237 Dodatkowe informacje w zakresie bezpieczeñstwa cookie ..........................238 Podsumowanie rozwaĝañ dotyczÈcych uĝywania cookie jako magazynu danych .................................................................................239 Obiekty Flash Local Shared Objects ...................................................................240 Podsumowanie informacji o obiektach Local Shared Object ......................248 Magazyn danych DOM .......................................................................................249 Magazyn danych sesji .....................................................................................250 Globalny magazyn danych .............................................................................252 Diabelskie szczegóïy dotyczÈce magazynu danych DOM ..............................254 Bezpieczeñstwo magazynu danych DOM ...................................................256 Podsumowanie informacji dotyczÈcych magazynu danych DOM .............257 Magazyn userData w przeglÈdarce Internet Explorer ........................................258 Podsumowanie dotyczÈce bezpieczeñstwa ...................................................263 Ogólne informacje o atakach i obronie magazynów danych po stronie klienta ......264 Ataki typu cross-domain ................................................................................264 Ataki cross-directory ......................................................................................265 Ataki cross-port ..............................................................................................266 Podsumowanie .....................................................................................................267 Ajaksowe aplikacje offline ................................................................... 269 Ajaksowe aplikacje offline ....................................................................................269 Google Gears ........................................................................................................271 Rodzime funkcje bezpieczeñstwa i niedociÈgniÚcia Google Gears .............272 Luki bezpieczeñstwa w komponencie WorkerPool .....................................276 Ujawnienie danych LocalServer i skaĝenie danych .....................................277 BezpoĂredni dostÚp do bazy danych Google Gears .....................................281 Ataki typu SQL Injection i struktura Google Gears .....................................282 Jak niebezpieczny jest atak SQL Injection po stronie klienta? ....................287 Rozdziaï 10. Rozdziaï 11. Spis treĂci 11 Dojo.Offline .........................................................................................................289 Bezpieczne przechowywanie klucza .............................................................290 Zapewnienie bezpieczeñstwa danych ...........................................................291 Dobre hasïa dla dobrych kluczy ....................................................................292 Weryfikacja danych wejĂciowych po stronie klienta staïa siÚ istotna ................293 Inne podejĂcia do aplikacji offline .......................................................................294 Podsumowanie .....................................................................................................295 Kwestie zwiÈzane z pochodzeniem ĝÈdañ ........................................... 297 Roboty, pajÈki, przeglÈdarki internetowe oraz inne koszmary ..........................297 „CzeĂÊ! Nazywam siÚ Firefox. LubiÚ programowanie, pliki PDF oraz dïugie spacery po plaĝy” .....................................................299 NiepewnoĂÊ dotyczÈca ěródïa pochodzenia ĝÈdania oraz JavaScript ................300 ¿Èdania Ajaksa z perspektywy serwera .........................................................300 Uĝytkownik lub ktoĂ podszywajÈcy siÚ pod niego .......................................304 Wysyïanie ĝÈdañ HTTP za pomocÈ JavaScriptu ..........................................306 Ataki JavaScript z uĝyciem ĝÈdañ HTTP w aplikacjach niestosujÈcych technologii Ajax ...........................................308 Kradzieĝ treĂci za pomocÈ obiektu XMLHttpRequest ................................310 PoïÈczenie ataków XSS i XHR w praktyce ...................................................315 Sposoby obrony ....................................................................................................317 Podsumowanie .....................................................................................................319 Aplikacje mashup oraz agregatory ...................................................... 321 Dane z Internetu nadajÈce siÚ do uĝycia .............................................................322 Wczesne lata 90. ubiegïego wieku — poczÈtek wspóïczesnego Internetu ........................................................322 Poïowa lat 90. XX wieku — narodziny machiny sieciowej .........................323 XXI wiek — machina sieciowa staïa siÚ dojrzaïa ..........................................324 Publicznie dostÚpne usïugi sieciowe .............................................................325 Aplikacja mashup: frankenstein Internetu ..........................................................327 ChicagoCrime.org .........................................................................................328 HousingMaps.com .........................................................................................329 Inne aplikacje typu mashup ...........................................................................330 Budowanie aplikacji mashup ...............................................................................331 Aplikacje mashup i Ajax .................................................................................332 Pomost, proxy, brama — och nie! .......................................................................334 Alternatywy dla proxy Ajax ............................................................................335 Ataki na proxy Ajax ..............................................................................................336 Halo, HousingMaps.com? .............................................................................338 Weryfikacja danych wejĂciowych w aplikacji mashup .......................................341 Witryny agregujÈce ...............................................................................................343 Zdegradowane bezpieczeñstwo i zaufanie ..........................................................351 Podsumowanie .....................................................................................................354 12 Spis treĂci Rozdziaï 12. Rozdziaï 13. Rozdziaï 14. Ataki na warstwÚ prezentacji ................................................................ 357 Szczypta prezentacji moĝe zabiÊ treĂÊ .................................................................357 Ataki na warstwÚ prezentacyjnÈ ...........................................................................361 Analiza danych w kaskadowych arkuszach stylów .............................................362 Sztuczki dotyczÈce wyglÈdu i dziaïania ...............................................................365 Zaawansowane sztuczki dotyczÈce wyglÈdu i dziaïania ...............................369 Osadzona logika programu ..................................................................................372 Ataki na kaskadowe arkusze stylów .....................................................................374 Modyfikacja bufora przeglÈdarki internetowej .............................................376 Uniemoĝliwianie ataków na warstwÚ prezentacyjnÈ .........................................379 Podsumowanie .....................................................................................................381 Robaki JavaScript ................................................................................. 383 Opis robaków JavaScript ......................................................................................383 Tradycyjne wirusy komputerowe .................................................................384 Robaki JavaScript ...........................................................................................387 Konstrukcja robaka JavaScript .............................................................................389 Ograniczenia jÚzyka JavaScript ......................................................................391 Rozprzestrzenianie siÚ robaków JavaScript ..................................................392 Operacje wykonywane przez robaki JavaScript ............................................392 Podsumowanie czÚĂci teoretycznej ...............................................................401 Studium przypadku: robak Samy ........................................................................401 Jak dziaïaï robak Samy? ..................................................................................402 DziaïalnoĂÊ robaka Samy ...............................................................................405 Podsumowanie analizy robaka Samy ............................................................407 Studium przypadku: robak Yamanner (JS/Yamanner-A) ..................................408 W jaki sposób dziaïaï robak Yamanner? ........................................................409 DziaïalnoĂÊ robaka Yamanner .......................................................................412 Podsumowanie analizy robaka Yamanner ....................................................413 Lekcje wyciÈgniÚte po analizie rzeczywistych przykïadów robaków JavaScript ......416 Podsumowanie .....................................................................................................417 Testowanie aplikacji Ajaksa ................................................................. 419 Czarna magia ........................................................................................................420 Nie kaĝdy do przeglÈdania Internetu uĝywa przeglÈdarki internetowej ...........424 Paragraf 22 ......................................................................................................427 NarzÚdzia sïuĝÈce do sprawdzania bezpieczeñstwa, czyli dlaczego prawdziwe ĝycie nie przypomina Hollywood? ........................428 Katalogowanie witryny ..................................................................................429 Wykrywanie luk bezpieczeñstwa ...................................................................431 NarzÚdzie analizy: Sprajax .............................................................................433 NarzÚdzie analizy: Paros Proxy .....................................................................435 NarzÚdzie analizy: LAPSE (Lightweight Analysis for Program Security in Eclipse) ...........................437 NarzÚdzie analizy: WebInspect™ ..................................................................439 Dodatkowe przemyĂlenia dotyczÈce testów pod kÈtem bezpieczeñstwa ..........440 Spis treĂci 13 Rozdziaï 15. Dodatek A Analiza struktur Ajaksa ........................................................................ 443 ASP.NET ..............................................................................................................443 ASP.NET AJAX (dawniej Atlas) ...................................................................444 ScriptService ...................................................................................................448 Ostateczna rozgrywka bezpieczeñstwa: UpdatePanel kontra ScriptService ....... 449 ASP.NET AJAX i WSDL ...............................................................................450 ValidateRequest ..............................................................................................454 ViewStateUserKey .........................................................................................455 Konfiguracja i usuwanie bïÚdów w ASP.NET .............................................456 PHP .......................................................................................................................457 Sajax ................................................................................................................458 Struktura Sajax i ataki Cross-Site Request Forgery .....................................459 Java EE ..................................................................................................................461 Direct Web Remoting (DWR) ......................................................................461 Struktury JavaScript .............................................................................................464 Ostrzeĝenie dotyczÈce kodu dziaïajÈcego po stronie klienta .......................464 Prototype ........................................................................................................465 Podsumowanie .....................................................................................................467 Kod ěródïowy robaka Samy ................................................................. 469 Dodatek B Kod ěródïowy robaka Yamanner .......................................................... 477 Skorowidz ............................................................................................ 483 2 Wïamanie Mit: Hakerzy rzadko atakujÈ przedsiÚbiorstwa, wykorzystujÈc do tego celu ich aplikacje wykonane w Ajaksie. Poznaj bezpoĂredniego Ăwiadka obalajÈcego ten mit, czyli EwÚ. Ewa Nie poznasz jej nawet wtedy, gdy pojawi siÚ ponownie. To nie tak, ĝe dwudziestokilku- letnia kobieta siedzÈca w rogu lokalu pozostaje niewidzialnÈ osobÈ — przecieĝ fizycznie siÚ tam znajduje. Jednak ona celowo byïa ubrana zupeïnie przeciÚtnie, nie wypowiedziaïa wiÚcej niĝ dziesiÚÊ sïów do wszystkich i nie zrobiïa niczego, co przyciÈgnÚïoby uwagÚ innych osób. Oprócz tego, lokal Caribou Coffee znajduje siÚ na rogu dziesiÈtej ulicy i Piedmont, czyli w samym modnym centrum Atlanty. Moĝna wiÚc znaleěÊ tutaj znacznie wiÚcej interesujÈcych rzeczy do podziwiania niĝ obserwacja noszÈcej okulary kobiety, która uĝywa laptopa ThinkPad i siedzi przy stole stojÈcym w rogu lokalu. Po przyjĂciu do lokalu zamówiïa kawÚ i rogala, a godzinÚ póěniej kolejnÈ kawÚ. Oczywi- Ăcie, zapïaciïa gotówkÈ, nie pozostawiajÈc ĝadnego elektronicznego Ăladu, ĝe znajdowaïa siÚ w danym miejscu o okreĂlonej godzinie. Dokonany przez niÈ zakup byï wystarczajÈcy na tyle, aby upewniÊ sprzedawcÚ, ĝe kobieta nie jest pasoĝytem, który chciaï jedynie wyïu- dziÊ bezpïatny dostÚp do bezprzewodowego Internetu WiFi. Sygnaï bezprzewodowy prze- nika przez Ăciany budynku, wiÚc równie dobrze mogïaby skorzystaÊ z Internetu, pozostajÈc w samochodzie zaparkowanym w pobliĝu lokalu. Jednak widok kobiety w volkswagenie jetta zaparkowanym na oblÚĝonym parkingu i trzymajÈcej laptop w rÚkach mógïby wydawaÊ siÚ podejrzany — znacznie lepszym rozwiÈzaniem byïo wejĂcie do lokalu i rozpïyniÚcie siÚ w tïumie. Ucieszyïa siÚ, gdy na Ărodku lokalu zobaczyïa siedzÈcego dzieciaka o blond wïosach w czarnej podkoszulce. Chïopak pisaï coĂ na przeciÚtnym laptopie marki Dell, 50 Rozdziaï 2 • Wïamanie na obudowie którego znajdowaïy siÚ naklejki „FreeBSD 4 Life”, „2600” oraz „Free Kevin!”. W gïÚbi duszy byïa bardzo zadowolona, script kiddies zawsze wyglÈdajÈ kiepsko, podobnie jak ich tani sprzÚt komputerowy. Nawet przy zaïoĝeniu, ĝe jej obecna dziaïalnoĂÊ pozostawi Ălady prowadzÈce do tego lokalu (w co szczerze wÈtpiïa), za hakera zostanie uznany osobnik w koszulce zespoïu Metallica, czyli jedyna osoba, którÈ inni bÚdÈ pamiÚtali. Nikt nie bÚdzie nawet podejrzewaï Ewy. I to bardzo jej odpowiadaïo. Atak na witrynÚ HighTechVacations.net Tego dnia jej celem byïa witryna internetowa HighTechVacations.net1 naleĝÈca do biura podróĝy. O witrynie dowiedziaïa siÚ z artykuïu zamieszczonego w Ajaxianie, popularnej witrynie zawierajÈcej informacje na temat technologii Ajax. Ewa lubi aplikacje sieciowe. Caïy Internet jest dla niej terenem, na którym moĝe polowaÊ. Kiedy skreĂli danÈ witrynÚ jako cel ataku, po prostu uĝywa wyszukiwarki Google w celu znalezienia tysiÚcy kolejnych. Ewa szczególnie lubi aplikacje Ajaksa. Istnieje caïa masa implikacji bezpieczeñstwa po- wiÈzanych z procesem tworzenia aplikacji ĝywo reagujÈcych na dziaïania uĝytkownika, które majÈ bogate funkcje dziaïajÈce po stronie klienta. A poniewaĝ technologia jest na tyle nowa, posïugujÈcy siÚ niÈ programiĂci nadal popeïniajÈ podstawowe bïÚdy i wydaje siÚ, ĝe nikt nie jest w stanie zaproponowaÊ dobrych rozwiÈzañ w zakresie bezpieczeñstwa tego rodzaju aplikacji. Co najlepsze, caïa rzesza nowych, podekscytowanych programistów sie- ciowych codziennie wydaje mnóstwo aplikacji w Ajaksie, wypeïniajÈc tym samym prze- strzeñ niebezpiecznymi programami. Ewa jest zachwycona, uwielbia Ărodowisko peïne potencjalnych celów ataku! Do witryny HighTechVacations.net Ewa podeszïa w taki sam sposób jak do innych celów. Przede wszystkim upewniïa siÚ, ĝe jej caïy ruch sieciowy odbywaï siÚ poprzez proxy HTTP na jej komputerze lokalnym i rozpoczÚïa przeglÈdanie witryny. NastÚpnie utwo- rzyïa konto uĝytkownika, uĝyïa funkcji wyszukiwania, wprowadziïa dane w formularzu przeznaczonym do wysïania i rozpoczÚïa proces rezerwacji biletów na lot z Atlanty do Las Vegas. Zwróciïa uwagÚ, ĝe na witrynie zostaï zastosowany protokóï SSL. Przeanalizowaïa wiÚc certyfikat SSL i uĂmiechnÚïa siÚ — zostaï utworzony samodzielnie przez autorów wi- tryny. Takie podejĂcie to nie tylko duĝy bïÈd w trakcie wdraĝania bezpiecznej witryny internetowej, ale równieĝ sygnaï zaangaĝowania niechlujnych administratorów lub dziaïu IT wynikajÈcy prawdopodobnie z pogoni za pieniÈdzem, a dla Ewy to bardzo dobry znak. Zïamanie systemu kuponowego Ewa kontynuowaïa korzystanie z witryny, a po dotarciu do fazy finalizacji zamówienia zauwaĝyïa coĂ interesujÈcego — pole Coupon Code w formularzu zamówienia. Wpisaïa wiÚc sïowo FREE i nacisnÚïa klawisz Tab, przechodzÈc tym samym do kolejnego pola formularza. 1 Witryna testowa autorów ksiÈĝki — przyp. red. Atak na witrynÚ HighTechVacations.net 51 PrzeglÈdarka internetowa natychmiast wyĂwietliïa komunikat bïÚdu informujÈcy EwÚ, ĝe podany kod kuponu jest nieprawidïowy. To dziwne. W jaki sposób witryna internetowa tak szybko okreĂliïa, ĝe podany kod kuponu jest nieprawidïowy? Prawdopodobnie w celu wysïania ĝÈdania do serwera zostaïa uĝyta technologia Ajax. Ewa zdecydowaïa siÚ na przejrzenie kodu ěródïowego, aby zorientowaÊ siÚ, co naprawdÚ zachodzi na stronie. Po klikniÚciu w oknie prawym przyciskiem myszy w celu wyĂwietlenia kodu ěródïowego na ekranie pojawiï siÚ komunikat pokazany na rysunku 2.1. RYSUNEK 2.1. Strona finalizacji zamówienia na witrynie HighTechVacations.net uniemoĝliwia klikanie prawym przyciskiem myszy Ewa jest oszoïomiona. Czy autorzy witryny HighTechVacations.net naprawdÚ uwaĝajÈ, ĝe nie bÚdzie mogïa wyĂwietliÊ kodu ěródïowego HTML? To naprawdÚ niedorzeczne! Przecieĝ to jej przeglÈdarka internetowa wygenerowaïa kod HTML, tak wiÚc nie moĝe zostaÊ ukryty. Odrobina kodu JavaScript przechwytujÈcego klikniÚcie prawym przyci- skiem myszy i blokujÈcego menu kontekstowe nie zatrzyma Ewy. Jej kolejnym krokiem jest uruchomienie rozszerzenia przeglÈdarki Firefox o nazwie Firebug. Jak pokazano na rysunku 2.2, to podrÚczne narzÚdzie wyĂwietla caïy kod JavaScript doïÈczony do bieĝÈcej strony. 52 Rozdziaï 2 • Wïamanie RYSUNEK 2.2. Firebug, czyli miÚdzy innymi debuger JavaScript, wyĂwietla zaciemniony kod na witrynie HighTechVacations.net W tym miejscu wystÈpiï problem — kod JavaScript zostaï zaciemniony. Oznacza to, ĝe usuniÚto z niego wszystkie spacje, a niektóre nazwy zmiennych i funkcji zostaïy celowo skrócone, tak aby maksymalnie utrudniÊ czïowiekowi zrozumienie zasady dziaïania kodu. Ewa wie, ĝe ten kod JavaScript, choÊ trudny do odczytania przez czïowieka, pozostaje do- skonale czytelny dla interpretera JavaScript w jej przeglÈdarce internetowej. Uruchomiïa wiÚc wïasne narzÚdzie o nazwie JavaScript Reverser. Wymieniony program pobiera kod JavaScript (zaciemniony lub nie), a nastÚpnie przetwarza go w taki sam sposób jak inter- preter JavaScript wbudowany w przeglÈdarkÚ internetowÈ. NarzÚdzie wyĂwietla nazwy wszystkich zmiennych i funkcji, miejsce ich wystÚpowania i czÚstotliwoĂÊ uĝywania, a takĝe informacje, które funkcje sÈ wywoïywane przez inne funkcje oraz argumenty stosowane w tych wywoïaniach. Dodatkowo narzÚdzie JavaScript Reverser umieszcza w kodzie spacje, przez co staje siÚ ïatwiejszy do odczytania przez czïowieka. Ewa jest bardzo zaciekawiona tym, co zobaczy w kodzie JavaScript, poniewaĝ programista podjÈï wiele kroków, aby uniemoĝliwiÊ innym jego poznanie. Na rysunku 2.3 pokazano kod wygenerowany przez narzÚdzie Ewy o nazwie JavaScript Reverser. Ewa szybko odnajduje funkcjÚ o nazwie addEvent(), która doïÈcza nasïuch zdarzeñ Java- Script w sposób niezaleĝny od uĝywanej przeglÈdarki internetowej. Po przejrzeniu wszyst- kich wystÈpieñ wywoïañ addEvent() Ewa zauwaĝyïa, ĝe funkcja jest uĝywana do doïÈczenia funkcji checkCoupon() zdarzenia onblur pola tekstowego, w którym uĝytkownik podaje kod kuponu. To zatem jest funkcja, która zostaïa wywoïana, gdy Ewa nacisnÚïa klawisz Tab, opuszczajÈc tym samym pole tekstowe sïuĝÈce do podania kodu kuponu. Funkcja ta okre- Ăliïa równieĝ, ĝe ciÈg tekstowy FREE nie jest prawidïowym kodem kuponu. Zadaniem funkcji checkCoupon() jest po prostu wyodrÚbnienie kodu podanego przez uĝytkownika w polu tekstowym i wywoïanie kolejnej funkcji o nazwie isValidCoupon(). Poniĝej przed- stawiono niezaciemniony fragment kodu obejmujÈcy miÚdzy innymi funkcjÚ isValid ´Coupon(): Atak na witrynÚ HighTechVacations.net 53 RYSUNEK 2.3. NarzÚdzie JavaScript Reverser analizuje kod JavaScript znajdujÈcy siÚ na witrynie HighTechVacations.net i pomaga w zrozumieniu jego dziaïania var coupons = [ oSMR0.]1/381Lpnk , oSMR0._6/381LPNK , oSWRN3U6/381LPNK , oSWRN8U2/561O.WKE , oSWRN2[.0:8/O15TEG , oSWRN3Y.1:8/O15TEG , oSWRN4_.258/O15TEG , tQOWC2U2RY5DkB[X , tQOWC3U2RY5DkB[X , tQOWC3UCTX5DkB[X , tQOWC4UCTX5DkB[X , uJX6,GzFD , uJX7,GzFD , uJX8,GzFD ]; function crypt(s) { var ret = ; for(var i = 0; i s.length; i++) { var x = 1; if( (i 2) == 0) { x += 7; 54 Rozdziaï 2 • Wïamanie } if( (i 3) ==0) { x *= 5; } if( (i 4) == 0) { x -= 9; } ret += String.fromCharCode(s.charCodeAt(i) + x); } return ret; } function isValidCoupon(coupon) { coupon = coupon.toUpperCase(); for(var i = 0; i coupons.length; i++) { if(crypt(coupon) == coupons[i]) return true; } return false; } Kod kuponu wprowadzony w formularzu przez EwÚ zostaï przekazany funkcji isValid ´Coupon(), w której wszystkie jego znaki zostaïy zmienione na duĝe, zaszyfrowane, a na- stÚpnie porównane z listÈ zaszyfrowanych wartoĂci. Ewa spojrzaïa na funkcjÚ crypt() i ro- zeĂmiaïa siÚ. Funkcja szyfrujÈca to po prostu kilka podstawowych operacji matematycznych, które uĝywajÈ pozycji znaku w ciÈgu tekstowym w celu obliczenia pewnej wartoĂci. War- toĂÊ ta zostaje nastÚpnie dodana do kodu ASCII znaku, a wynikiem jest kod ASCII zaszy- frowanego znaku. Ten algorytm „szyfrowania” jest klasycznym przykïadem trywialnego algorytmu szyfrowania, czyli takiego, którego dziaïanie moĝna bardzo ïatwo odwróciÊ i zïamaÊ (na przykïad tak zwana „Ăwiñska ïacina” jest trywialnym algorytmem szyfrowania w jÚzyku angielskim). Proces szyfrowania i deszyfrowania kodu kuponu jest bardzo prosty i sprowadza siÚ do odjÚcia wartoĂci kodu ASCII znaku od wartoĂci zaszyfrowanego znaku. W swoim komputerze Ewa szybko skopiowaïa do nowego pliku HTML utworzonÈ tablicÚ kodów kuponów oraz funkcjÚ crypt(), a nastÚpnie zmodyfikowaïa jÈ, tworzÈc nowÈ funk- cjÚ decrypt(). Dokument HTML opracowany przez EwÚ przedstawia siÚ nastÚpujÈco: html script var coupons = [ oSMR0.]1/381Lpnk , oSMR0._6/381LPNK , oSWRN3U6/381LPNK , oSWRN8U2/561O.WKE , oSWRN2[.0:8/O15TEG , oSWRN3Y.1:8/O15TEG , oSWRN4_.258/O15TEG , tQOWC2U2RY5DkB[X , tQOWC3U2RY5DkB[X , Atak na witrynÚ HighTechVacations.net 55 tQOWC3UCTX5DkB[X , tQOWC4UCTX5DkB[X , uJX6,GzFD , uJX7,GzFD , uJX8,GzFD ]; function decrypt(s) { var ret = ; for(var i = 0; i s.length; i++) { var x = 1; if( (i 2) == 0) { x+=7; } if( (i 3) ==0) { x *=5; } if( (i 4) == 0) { x -=9; } ret += String.fromCharCode(s.charCodeAt(i) - x); } return ret; } for(var i = 0; i coupons.length; i++) { alert( Coupon + i + is + decrypt(coupons[i])); } /script /html Po wyĂwietleniu w przeglÈdarce internetowej powyĝszego dokumentu HTML w serii wy- skakujÈcych okien zostaïy podane wszystkie prawidïowe kody kuponów dostÚpne podczas rezerwacji lotów na witrynie HighTechVacations.net. Peïna lista kodów jest nastÚpujÈca: Q PREM1—500.00—OFF Q PREM1—750.00—OFF Q PROMO2—50.00—OFF Q PROMO7—100.00—OFF Q PROMO13—150.00—OFF Q PROMO14—200.00—OFF Q PROMO21—250.00—OFF Q PROMO37—300.00—OFF Q UPGRD1—1ST—CLASS 56 Rozdziaï 2 • Wïamanie Q UPGRD2—1ST—CLASS Q UPGRD2—BUS—CLASS Q UPGRD3—BUS—CLASS Q VIP1—FREE Q VIP2—FREE Q VIP3—FREE Ewa zanotowaïa wszystkie powyĝsze kody. Zebrane informacje moĝe wykorzystaÊ na wïasny uĝytek bÈdě sprzedaÊ je w Internecie. Teraz Ewa doskonale wie, ĝe w tym roku nie bÚdzie musiaïa pïaciÊ za podróĝ do Las Vegas. Atak na doïÈczanie danych po stronie klienta Ewa, wciÈĝ ĝÈdna jeszcze wiÚkszej iloĂci cennych danych, zdecydowaïa siÚ na przeanali- zowanie funkcji wyszukiwania zaimplementowanej na witrynie HighTechVacations.net. Przeprowadziïa wiÚc kolejnÈ operacjÚ wyszukania lotu z Atlanty do Las Vegas. Zwróciïa równieĝ uwagÚ na fakt, ĝe strona z wynikami wyszukiwania nie zostaje odĂwieĝona lub przekierowana na inny adres URL. Staïo siÚ oczywiste, ĝe funkcja wyszukiwania uĝywa technologii Ajax w celu komunikacji z usïugÈ sieciowÈ i wykonania pewnego rodzaju dynamicznego pobrania wyników wyszukiwania. Ewa dwukrotnie sprawdziïa i upewniïa siÚ, ĝe caïy jej ruch internetowy nadal odbywa siÚ poprzez proxy HTTP, który jest uru- chomiony na jej komputerze. W ten sposób moĝe podglÈdaÊ ĝÈdania i odpowiedzi Ajaksa. Ewa zapisaïa wiÚc kopiÚ caïego przechwyconego dotychczas ruchu poprzez proxy HTTP i ponownie uruchomiïa serwer. NastÚpnie powróciïa do przeglÈdarki internetowej i wyko- naïa wyszukiwanie lotów z miÚdzynarodowego lotniska Hartsfield-Jackson w Atlancie do miÚdzynarodowego lotniska McCarran w Las Vegas na 27 lipca. Po chwili opóěnienia otrzymaïa listÚ lotów. Wróciïa wiÚc z powrotem do serwera proxy i rozpoczÚïa analizÚ ĝÈdañ i odpowiedzi Ajaksa, co pokazano na rysunku 2.4. Ewa zauwaĝyïa, ĝe w witrynie HighTechVacations.net zastosowano format JSON (Java- Script Object Notation) w charakterze warstwy prezentacji danych, co jest rozwiÈzaniem doĂÊ czÚsto spotykanym w aplikacjach ajaksowych. Szybkie przeszukanie Internetu za pomocÈ Google pomogïo okreĂliÊ, ĝe ATL i LAS to kody lotnisk w Atlancie oraz Las Vegas. Pozostaïa czÚĂÊ tablicy JSON jest ïatwa do rozszyfrowania: 2007-07-27 okreĂla datÚ, a cyfra 7 wskazuje liczbÚ dni, które Ewa zamierzaïa spÚdziÊ w Las Vegas. Na tym etapie Ewa rozumiaïa juĝ format ĝÈdania wysïanego do usïugi sieciowej wykonujÈcej wyszukiwanie lotów. Ponadto Ewa wiedziaïa, ĝe port wylotu, port docelowy oraz numer lotu sÈ prawdo- podobnie przekazywane do bazy danych, w której jest wykonywane pewnego rodzaju wyszukiwanie w celu dopasowania lotu. Postanowiïa przeprowadziÊ prostÈ próbÚ i spraw- dziÊ, czy baza danych jest podatna na atak typu SQL Injection. Dlatego teĝ skonfigurowaïa proxy z uĝyciem reguï typu „znajdě i zastÈp”. Kiedy proxy wychwyci wartoĂci ATL, LAS Atak na witrynÚ HighTechVacations.net 57 RYSUNEK 2.4. ¿Èdania i odpowiedzi Ajaksa wystÚpujÈce podczas przeprowadzonej przez EwÚ operacji wyszukiwania lotów lub 2007-07-27 w wychodzÈcych ĝÈdaniach HTTP, bÚdzie je przed wysïaniem ĝÈdania do witryny HighTechVacations.net zastÚpowaïo wartoĂciami OR. CiÈg tekstowy OR w kaĝdej wartoĂci moĝe wygenerowaÊ bïÈd skïadni w zapytaniu bazy danych i wyĂwietliÊ komunikat bïÚdu bazy danych. Szczegóïowy komunikat bïÚdu pochodzÈcy z bazy danych jest najlepszym przyjacielem Ewy! Ewa powraca do przeglÈdarki internetowej i ponownie inicjuje wyszukiwanie lotów z Atlanty do Las Vegas. Czeka… i czeka… i nic siÚ nie dzieje. To dziwne. Ewa sprawdza wiÚc proxy i otrzymuje wynik pokazany na rysunku 2.5. Wysïane przez EwÚ ĝÈdanie z próbÈ ataku SQL Injection zostaïo przekazane do serwera, który z kolei odpowiedziaï eleganckim i szczegóïowym komunikatem bïÚdu. Funkcja JavaScript wywoïania zwrotnego obsïugujÈca odpowiedě Ajaksa z informacjami o dostÚp- nych lotach najwyraěniej zatrzymaïa dane przekazane przez serwer. ½le siÚ staïo, ĝe czytelny komunikat bïÚdu bazy danych zostaï wysïany przez Internet, tak aby Ewa mogïa siÚ z nim zapoznaÊ! Powyĝszy komunikat bïÚdu ujawnia, ĝe serwer bazy danych to Microsoft SQL Server. Ewa wie, ĝe ma do czynienia z klasycznym przykïadem ataku SQL Injection, ale podejrzewa równieĝ, iĝ po stronie klienta sÈ przetwarzane pewne dane. 58 Rozdziaï 2 • Wïamanie RYSUNEK 2.5. Próba przeprowadzona przez EwÚ spowodowaïa wygenerowanie bïÚdu ODBC. Kod JavaScript dziaïajÈcy po stronie klienta przechwyciï ten komunikat bïÚdu, tak aby nie zostaï wyĂwietlony w oknie przeglÈdarki internetowej Serwer WWW witryny HighTechVacations.net pobiera dane lotów zwrócone przez zapytanie do bazy danych, a nastÚpnie bezpoĂrednio odsyïa je do klienta, który z kolei formatuje dane i wyĂwietla uĝytkownikowi. Kiedy dane sÈ przetwarzane po stronie serwera, wyniki zapyta- nia do bazy danych sÈ zbierane i formatowane po stronie serwera, a nie u klienta. Oznacza to, ĝe dodatkowe dane lub dane sformatowane nieprawidïowo zwrócone z bazy danych sÈ odrzucane przez serwer podczas doïÈczania ich do warstwy prezentacyjnej. Zatem Ewa ich nie pozna. Natomiast podczas przetwarzania danych po stronie klienta, które zwykle jest wykorzystywane w aplikacjach Ajaksa, atakujÈcy — taki jak Ewa — moĝe umieĂciÊ w za- pytaniu wrogi kod SQL. NastÚpnie napastnik moĝe przechwyciÊ peïne wyniki operacji w bazie danych, które sÈ wysyïane do skryptu JavaScript formatujÈcego dane dla uĝytkow- nika koñcowego. Ewa uruchamia kolejne narzÚdzie, którym jest edytor HTTP. NarzÚdzie to pozwala jej na utworzenie czystego ĝÈdania HTTP do serwera (zamiast polegania na reguïach „znajdě i zastÈp” zdefiniowanych w proxy) oraz wstawienie wrogich danych. Po chwili prób i bïÚ- dów Ewie udaje siÚ odkryÊ, ĝe moĝe wstawiÊ wrogie polecenie SQL na poczÈtku parametru Atak na witrynÚ HighTechVacations.net 59 danych wewnÈtrz formatu JSON jej ĝÈdania. Poniewaĝ atakowany serwer to Microsoft SQL Server, zapytanie jest kierowane do tabeli SYSOBJECTS, jak pokazano na rysunku 2.6. Celem zapytania jest otrzymanie peïnej listy wszystkich tabel zdefiniowanych przez programistów w bazie danych witryny HighTechVacations.net. RYSUNEK 2.6. Za pomocÈ tylko jednego polecenia Ewa otrzymuje listÚ wszystkich tabel zdefiniowanych przez programistów w bazie danych witryny HighTechVacations.net W bazie danych istnieje wiele interesujÈcych EwÚ tabel, miÚdzy innymi Specials, Orders, Billing oraz Users. Ewa postanawia wyĂwietliÊ wszystkie dane z tabeli Users, co pokazano na rysunku 2.7. Cudownie! Za pomocÈ pojedynczego zapytania Ewie udaïo siÚ pobraÊ informacje o wszyst- kich uĝytkownikach. Witryna HighTechVacations.net jest wiÚc podatna na atak typu SQL Injection. Fakt, ĝe autorzy uĝyli przetwarzania danych po stronie klienta zamiast po stronie serwera, oznacza, iĝ Ewa moĝe ukraĂÊ caïÈ bazÚ danych, korzystajÈc z kilku zapytañ. Nie musi poĂwiÚcaÊ duĝej iloĂci czasu na uĝywanie zautomatyzowanego narzÚdzia ataków SQL Injection, takiego jak Absinthe. 60 Rozdziaï 2 • Wïamanie RYSUNEK 2.7. Przy uĝyciu pojedynczego zapytania Ewa otrzymaïa wszystkie kolumny kaĝdego rekordu tabeli Users Ewa jest zadowolona, otrzymaïa bowiem listÚ nazw uĝytkowników oraz ich haseï dostÚpu. Warto wspomnieÊ, ĝe uĝytkownicy bardzo czÚsto uĝywajÈ tych samych nazw i haseï na wielu róĝnych witrynach internetowych. Dane uzyskane w wyniku tego ataku Ewa moĝe wy- korzystaÊ podczas kolejnych. Udany atak na witrynÚ HighTechVacations.net spowodowaï, ĝe Ewa uzyskaïa moĝliwoĂÊ wïamania siÚ na nieokreĂlonÈ iloĂÊ zupeïnie innych witryn internetowych, niepowiÈzanych z tÈ, której zabezpieczenia wïaĂnie przeïamaïa. Kto wie, byÊ moĝe jeszcze przed Ăwitem Ewa bÚdzie mogïa uzyskaÊ dostÚp do czyjegoĂ konta ban- kowego, poĝyczki studenckiej, kredytu hipotecznego lub nawet pracowniczego funduszu emerytalnego. WyodrÚbnienie z wyników zapytania nazw uĝytkowników i zaszyfrowanych haseï zabiera chwilÚ. Wprawdzie Ewa nie jest pewna, czy hasïa sÈ zaszyfrowane, ale kaĝde z nich jest liczbÈ szesnastkowÈ o dïugoĂci dokïadnie trzydziestu dwóch znaków. Prawdopo- dobnie jest to wartoĂÊ MD5 wygenerowana na podstawie rzeczywistego hasïa. Kolejnym krokiem Ewy jest uruchomienie narzÚdzia John the Ripper sïuĝÈcego do ïamania haseï i rozpoczÚcie ïamania listy haseï potrzebnych do rzucenia siÚ na tabele Billing oraz JOIN_ ´Billing_Users. Wymienione tabele zawierajÈ informacje finansowe uĝytkowników, takie jak numery kart kredytowych, daty ich wygaĂniÚcia oraz adresy wszystkich uĝytkowni- ków witryny HighTechVacations.net. Atak na witrynÚ HighTechVacations.net 61 Atak na API Ajax Ewa postanowiïa przyjrzeÊ siÚ bliĝej stronom, które dotÈd odwiedziïa. Po sprawdzeniu zauwaĝyïa, ĝe kaĝda strona zawiera odwoïanie do skryptu o nazwie common.js. Jednak nie w kaĝdej stronie internetowej uĝyto wszystkich funkcji zdefiniowanych w wymienionym skrypcie. Przykïadowo skrypt common.js zawiera definicjÚ funkcji isCouponValid(), mimo ĝe jest uĝywana jedynie na stronie finalizujÈcej zamówienie. Ewa uznaïa wiÚc za moĝliwe, iĝ inne funkcje znajdujÈce siÚ w skrypcie common.js sÈ uĝywane przez strony internetowe, których dotÈd nie odwiedziïa. Przecieĝ mogÈ to byÊ funkcje administracyjne, których uĝytkownicy witryny nie powinni poznaÊ! Ewa przejrzaïa wiÚc dokïadnie listÚ zmiennych i funkcji wyĂwietlonÈ przez narzÚ- dzie JavaScript Reverser i niemal przeoczyïa tÚ wïaĂciwÈ. W Ărodku listy nudnych funkcji Ajaksa znajdowaïo siÚ coĂ ciekawego — funkcja o nazwie AjaxCalls.admin.addUser() (zobacz ĂrodkowÈ czÚĂÊ rysunku 2.8). RYSUNEK 2.8. Odniesienie w pliku common.js prowadzi do nieuĝywanej funkcji administracyjnej o nazwie AjaxCalls.admin.addUser() 62 Rozdziaï 2 • Wïamanie Sama nazwa funkcji nie przekazywaïa zbyt wielu informacji. Stanowiïa opakowanie, które wywoïuje usïugÚ sieciowÈ wykonujÈcÈ pozostaïÈ czÚĂÊ zadania. Jednak nazwa funkcji wska- zuje, ĝe naleĝy ona do zbioru funkcji administracyjnych. Ewa szybko przeanalizowaïa wszystkie odpowiedzi przechwycone przez proxy HTTP. W danych nie znalazïa ĝadnego odniesienia do funkcji addUser() na którejkolwiek z dotÈd odwiedzonych stron. Byïa juĝ bardzo zaintrygowana. Dlaczego definicja tej funkcji znajduje siÚ w skrypcie common.js? Czy to zwykïa pomyïka? Ponownie uruchomiïa edytor ĝÈdañ HTTP. Wprawdzie znaïa adres URL usïugi sieciowej, z którÈ kontaktuje siÚ funkcja addUser(), i wiedziaïa, ĝe podczas wysyïania ĝÈdañ trzeba zastosowaÊ metodÚ POST, ale na tym koniec. Wszystkie pozostaïe usïugi uĝywajÈ formatu JSON, tak wiÚc Ewa wysïaïa ĝÈdanie POST do strony /ajaxcalls/addUser.aspx wraz z pustÈ tablicÈ JSON, jak pokazano na rysunku 2.9. RYSUNEK 2.9. Na nieprawidïowo sformatowane ĝÈdanie usïuga sieciowa addUser.aspx odpowiada komunikatem bïÚdu InteresujÈce. Witryna internetowa odpowiedziaïa komunikatem bïÚdu, informujÈcym EwÚ, ĝe w jej ĝÈdaniu zabrakïo niektórych parametrów. Ewa podaïa wiÚc zmyĂlony parametr i ponownie wysïaïa ĝÈdanie. Wynik drugiej próby zostaï pokazany na rysunku 2.10. Ewa usiadïa na krawÚdzi krzesïa. Jej strzaï na oĂlep w rzeczywistoĂci spowodowaï pewnÈ reakcjÚ. Wprawdzie usïuga sieciowa nie utworzyïa nowego uĝytkownika, ale poinformo- waïa o braku trzech parametrów zamiast — jak dotÈd — czterech. Ewa zaczÚïa siÚ zasta- nawiaÊ. Doskonale wiedziaïa, ĝe do usïugi sieciowej musi przekazaÊ cztery parametry w formacie JSON. Mogïa jedynie zgadywaÊ, jakiego rodzaju dane sÈ potrzebne: praw- dopodobnie nazwa konta uĝytkownika, prawdziwe imiÚ i nazwisko, hasïo oraz pewien Atak na witrynÚ HighTechVacations.net 63 Rysunek 2.10. WymyĂlony przez EwÚ parametr spowodowaï wygenerowanie przez usïugÚ sieciowÈ nieco innego komunikatu bïÚdu rodzaj opcji. Ewa wiedziaïa, ĝe opcje to najczÚĂciej wartoĂci typu Boolean, ale nie byïa pewna, jaki format powinien zostaÊ zastosowany. Szybko utworzyïa ĝÈdanie z prawdo- podobnymi wartoĂciami i wysïaïa je, co pokazano na rysunku 2.11. RYSUNEK 2.11. Usïuga sieciowa odrzuciïa ĝÈdanie utworzone przez EwÚ z powodu nieprawidïowej wartoĂci debugflag 64 Rozdziaï 2 • Wïamanie Och tak. WystÈpiïa sytuacja, której Ewa siÚ obawiaïa. Wysyïa parametry w poprawnej for- mie, ale wyglÈda na to, ĝe ostatni z nich — debugflag — jest nieprawidïowy. Opcja zwykle jest wïÈczona bÈdě wyïÈczona. Ewa pomyĂlaïa, ĝe wysïanie wartoĂci true powinno zadziaïaÊ, ale myliïa siÚ. Spróbowaïa zastosowaÊ jeszcze kilka innych wartoĂci, miÚdzy innymi true umieszczone w cudzysïowie, true napisane duĝymi literami, wartoĂÊ false, ale wszystkie próby okazaïy siÚ nieudane. W koñcu podaïa 1 jako wartoĂÊ opcji debugflag. Niektóre jÚzyki programowanie, takie jak C, nie posiadajÈ rodzimych wartoĂci true i false, ale zamiast nich uĝywajÈ odpowiednio 1 oraz 0. Wynik tej operacji zostaï pokazany na rysunku 2.12. RYSUNEK 2.12. Ewa uĝyïa 1 jako wartoĂci opcji debugflag, po czym jej ĝÈdanie zostaïo zaakceptowane Ewa nie wierzyïa wïasnym oczom. Zadziaïaïo! Nie byïa do koñca pewna, jakiego rodzaju konto i gdzie zostaïo utworzone, ale na pewno utworzyïa konto o nazwie eve6. NastÚpnie powróciïa do edytora HTTP i przeprowadziïa kolejny atak typu SQL Injection, ponownie pobierajÈc listÚ uĝytkowników. W ten sposób przekonaïa siÚ, ĝe na liĂcie znajduje siÚ nowe konto o nazwie eve6. Nadal jednak nie wiedziaïa, do czego sïuĝy flaga debugflag oraz gdzie jest przechowywana jej wartoĂÊ. Chociaĝ mogïa bardziej zagïÚbiÊ siÚ w bazÚ danych, poszukujÈc tej opcji, to jednak zdecydowaïa siÚ na utworzenie kolejnego konta. W prze- glÈdarce internetowej otworzyïa kolejnÈ kartÚ i zalogowaïa siÚ do nowo utworzonego konta eve6. Na rysunku 2.13 pokazano witrynÚ HighTechVacations.net po zalogowaniu siÚ do konta eve6. Wszystko byïo zupeïnie inne! Ewa zobaczyïa dane dotyczÈce uĝywanej przez niÈ usïugi sieciowej, obciÈĝenie serwera oraz informacje dotyczÈce wysïanego ĝÈdania. EwÚ naj- bardziej zainteresowaï pasek menu o nazwie Debug. Chociaĝ zawieraï kilka opcji, Ewa natychmiast skoncentrowaïa siÚ na ïÈczu Return to Admin. Na bieĝÈcÈ stronÚ nie dostaïa siÚ Atak na witrynÚ HighTechVacations.net 65 RYSUNEK 2.13. Witryna HighTechVacations.net prezentuje inny interfejs dla kont uĝytkowników debug ze strony administracyjnej, wiÚc zastanawiaïa siÚ, co bÚdzie, gdy spróbuje kliknÈÊ ïÈcze i powróciÊ na stronÚ administracyjnÈ. KliknÚïa wymienione ïÈcze i zobaczyïa stronÚ poka- zanÈ na rysunku 2.14. RYSUNEK 2.14. Obszar administracyjny dostÚpny z poziomu wersji debug witryny HighTechVacations.net 66 Rozdziaï 2 • Wïamanie Znakomicie! Ewie wydawaïo siÚ, ĝe spowodowaïa wygenerowanie pewnego rodzaju wy- jÈtku. Ponadto poznaïa poïoĝenie obszaru administracyjnego witryny. CzÚsto uĝywaïa narzÚdzi, takich jak Nikto, w celu siïowego odgadniÚcia czÚsto spotykanych katalogów typu admin lub logs, ale na liĂcie katalogów nie znalazïa /SiteConfig/, wiÚc mogïa pominÈÊ ten portal administracyjny. Dziwne, ĝe w niektórych czÚĂciach witryny internetowej konto eve6 byïo traktowane jak konto naleĝÈce do administratora lub osoby odpowiedzialnej za za- pewnienie jakoĂci, podczas gdy w innych uniemoĝliwiaïo dostÚpu. Wygenerowanie wyjÈtku mogïo nastÈpiÊ wtedy, gdy kod wewnÚtrzny próbowaï pobraÊ informacje o koncie eve6, których tam nie byïo, poniewaĝ w rzeczywistoĂci konto eve6 nie jest kontem admini- stratora. Prawdopodobnie programiĂci tworzÈcy witrynÚ HighTechVacations.net popeïnili bïÈd, sÈdzÈc, ĝe usïugi administracyjne, takie jak addUser(), bÚdÈ dostÚpne jedynie z poziomu portalu administracyjnego. Z tego powodu proces uwierzytelniania i autoryzacji zachodziï najprawdopodobniej tylko wtedy, gdy uĝytkownik próbowaï uzyskaÊ dostÚp do portalu. Poprzez bezpoĂrednie dziaïanie z addUser() lub innÈ usïugÈ sieciowÈ Ewa mogïa wykonaÊ wszystkie operacje zarezerwowane dla administratorów, ale bez faktycznego wykorzystania portalu administracyjnego. Kradzieĝ w jednÈ noc Ewa ziewnÚïa, wypiïa ostatni ïyk kawy i przeciÈgnÚïa siÚ. Jej wïamanie zakoñczyïo siÚ peïnym sukcesem. Udaïo siÚ zdobyÊ wszystkie kody promocyjne pozwalajÈce na bezpïatnÈ rezerwacjÚ biletów. Zdobyïa listÚ wszystkich nazw uĝytkowników oraz zïamaïa ich hasïa dostÚpu. Uzyskaïa kopiÚ danych kart kredytowych kaĝdego, kto kiedykolwiek rezerwowaï lot za pomocÈ witryny HighTechVacations.net. Utworzyïa sobie tylnÈ furtkÚ w postaci (niestabilnego) konta z uprawnieniami administratora lub osoby odpowiedzialnej za za- pewnienie jakoĂci produktu. Wreszcie okreĂliïa login portalu administracyjnego, który prawdopodobnie moĝe jej daÊ dostÚp do innych witryn poza HighTechVacations.net. Jednak nadal pozostaïy pewne moĝliwoĂci, które mogïaby sprawdziÊ, jeĂli miaïaby na to ochotÚ. Przykïadowo zwróciïa uwagÚ, ĝe podczas rezerwacji lotu nastÚpuje wywoïanie serii usïug sieciowych o nazwach startTrans, holdSeat, checkMilesClub, debitACH, pushItinerary, pushConfirmEmail oraz commitTrans. Jaki byïby skutek, gdyby Ewa wywoïaïa wymienione usïugi w innej kolejnoĂci? Czy nadal zostaïaby obciÈĝona pïatnoĂciÈ, gdyby pominÚïa funkcjÚ debitACH? Czy moĝe przeprowadziÊ atak typu odmowa dostÚpu (ang. DoS — Denial of Service) poprzez rozpoczÚcie tysiÚcy transakcji bazy danych, które nigdy nie zostanÈ sfi- nalizowane? Czy usïugÚ pushConfirmEmail mogïaby wykorzystaÊ do wysïania ogromnej iloĂci spamu lub do phishingu? MoĝliwoĂci te pozostajÈ do sprawdzenia w innym terminie, teraz zdobyïa listÚ haseï. Najlepszym rozwiÈzaniem bÚdzie sprzedaĝ spamerom zdobytych danych i poszukanie kolejnego celu ataku. Co moĝna zrobiÊ za pomocÈ portalu administra- cyjnego? Ewa pomyĂlaïa o poïowicznie gotowym skrypcie w jÚzyku Perl, który napisaïa w celu siïowego ïamania sieciowych formularzy logowania. ByÊ moĝe dzisiejszy atak bÚdzie dobrym powodem, aby dokoñczyÊ pracÚ nad tym skryptem? Kradzieĝ w jednÈ noc 67 Ewa spoglÈda na zegarek, prawie dochodzi dwudziesta pierwsza. W czasie gdy wraca do domu, ktoĂ z jej partnerów biznesowych na Ukrainie wïaĂnie koñczy dïugÈ noc w klubie. Ewa uĂmiecha siÚ do siebie, poniewaĝ wie, ĝe posiada dane, które mogÈ go zainteresowaÊ. Partner zawsze dobrze pïaci, to tylko kwestia negocjacji. Ewa wyïÈcza laptop, pakuje plecak i wyrzuca kubek po kawie do kosza znajdujÈcego siÚ przy wyjĂciu. Nie zdÈĝyïa przejechaÊ nawet jednego kilometra, gdy na jej miejscu w lokalu siada kolejny klient i równieĝ wyciÈga laptop. NierzucajÈca siÚ w oczy kobieta, która siedziaïa przy stole stojÈcym w rogu lokalu, znika w mroku nocy, nie pamiÚtajÈ jej inni klienci i obsïuga lokalu Caribou. Nikt nie bÚdzie pamiÚtaï Ewy. I taki stan rzeczy bardzo jej odpowiada.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Bezpieczeństwo aplikacji tworzonych w technologii Ajax
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: