Bezpieczeństwo aplikacji tworzonych w technologii Ajax - Presentation Transcript
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
Przedmowa ............................................................................................ 15
Przedmowa (ta rzeczywista) .................................................................. 17
PodziÚkowania ...................................................................................... 21
O autorach ............................................................................................. 23
Rozdziaï 1. 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. 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
Rozdziaï 3. 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
Rozdziaï 4. 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
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
Rozdziaï 5. 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
Rozdziaï 6. 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. 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
Rozdziaï 8. 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
Rozdziaï 9. 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
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
Rozdziaï 10. 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
Rozdziaï 11. 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. 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
Rozdziaï 13. 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
Rozdziaï 14. 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. 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
Dodatek A 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.
* 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
0 comments
Post a comment