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)