Przemek Sobstel Bezpieczenstwo php mysql zagrozenia
BEZPIECZECSTWO INTERNETOWYCH APLIKACJI BAZODANOWYCH PHP/MySQL - ZAGROÅ»ENIA Przemek Sobstel http://sobstel.org 2006 SPIS TREÅšCI SPIS TREÅšCI......................................................................................................................... .......2 WSTP............................................................................................................................ ...............4 BEZPIECZECSTWO SYSTEMÓW INFORMATYCZNYCH W INTERNECIE.........5 ZARYS PROBLEMU.....................................................................................................................5 ATAK NA APLIKACJ..................................................................................................................7 ZAGROÅ»ENIA ZWIZANE Z WYKONANIEM WROGIEGO KODU......................10 INIEKCJA KODU SQL..............................................................................................................10 CROSS SITE SCRIPTING...........................................................................................................14 CROSS SITE REQUEST FORGERIES...........................................................................................20 INIEKCJA POLECEC SYSTEMOWYCH...........................................................................................23 INIEKCJA ZNAKU KOCCA WIERSZA............................................................................................24 POZOSTAAE ATAKI ZWIZANE Z WYKONANIEM WROGIEGO KODU................................................25 ATAKI POLEGAJCE NA MANIPULOWANIU PARAMETRAMI...........................27 MANIPULOWANIE AACCUCHEM Å»DANIA...................................................................................27 MANIPULOWANIE POLAMI FORMULARZA...................................................................................28 MANIPULOWANIE NAGAÓWKAMI Å»DANIA HTTP.....................................................................29 MANIPULOWANIE WARTOÅšCIAMI CIASTECZEK............................................................................30 ZAGROÅ»ENIA ZWIZANE Z UJAWNIENIEM POUFNYCH INFORMACJI........31 WYCIEK INFORMACJI...............................................................................................................31 GOOGLE HACKING..................................................................................................................33 UJAWNIENIE PLIKÓW yRÓDAOWYCH ........................................................................................35 ATAKI NA MECHANIZMY UWIERZYTELNIANIA I ZARZDZANIA SESJ UÅ»YTKOWNIKA................................................................................................. .....................37 ATAKI NA PROCES UWIERZYTELNIANIA.....................................................................................37 ATAKI NA SESJE UÅ»YTKOWNIKA...............................................................................................38 PODSUMOWANIE......................................................................................... ..........................42 2 LITERATURA................................................................................................ ...........................43 SPIS RYSUNKÓW............................................................................................... .....................46 SPIS TABEL.............................................................................................................. .................47 LICENCJA..................................................................................................................... .............48 3 WSTP PrzeÅ‚om wieku XX-go i XXI-go przyniósÅ‚ gwaÅ‚towny rozwój jednego z najwiÄ™kszych wynalazków ludzkoÅ›ci, jakim jest Internet. Każdego dnia kolejne komputery osobiste uzyskujÄ… dostÄ™p do tej globalnej sieci. Coraz wiÄ™cej też w sieci witryn speÅ‚niajÄ…cych rozmaite zadania, od prostych stron domowych po kompleksowe portale i sklepy internetowe. Dane przez nie gromadzone sÄ… coraz ważniejsze i zapewnienie ich bezpieczeÅ„stwa staje siÄ™ kluczowym czynnikiem warunkujÄ…cym szanse odniesienia sukcesu. Obecnie można zaobserwować tendencjÄ™ do ataków bezpoÅ›rednio na aplikacje produkcyjne, z pominiÄ™ciem zapór ogniowych zainstalowanych na poziomie sieci dostÄ™powej. Dlatego też szczególnÄ… rolÄ™ zaczynajÄ… odgrywać zabezpieczenia programowe, czyli te wdrażane na poziomie kodu przez samych programistów. Brak odpowiedniej ochrony może prowadzić bowiem zarówno do wÅ‚amania do aplikacji oraz skompromitowania jej autorów bÄ…dz wÅ‚aÅ›cicieli, jak i ataku na użytkowników z niej korzystajÄ…cych. W efekcie zdarzenie takie w dużym stopniu odbija siÄ™ na reputacji firmy lub osoby i może prowadzić nie tylko do zamkniÄ™cia serwisu i poniesienia dodatkowych kosztów, ale i nawet do upadku takiej organizacji. W dokumencie skupiono siÄ™ na Å›rodowisku PHP/MySQL, głównie ze wzglÄ™du na dużą liczbÄ™ internetowych systemów informatycznych obecnie powstajÄ…cych wÅ‚aÅ›nie przy użyciu tych narzÄ™dzi. Istotne jednak jest, że znaczna część zagrożeÅ„ opisanych w niniejszym dokumencie, dotyczy niemal wszystkich aplikacji internetowych, bez wzglÄ™du na wykorzystany jÄ™zyk programowania, czy też system zarzÄ…dzania bazÄ… danych. W dalszej części zostanÄ… przybliżone zagrożenia i rodzaje ataków, na które mogÄ… być podatne internetowe systemy informatyczne. W pierwszej kolejność zostanÄ… omówione zagrożenia zwiÄ…zane z iniekcjÄ… i wykonaniem wrogiego kodu, potem zagrożenia wynikajÄ…ce z manipulacji parametrów, a nastÄ™pnie poruszony bÄ™dzie problem nieuprawnionego dostÄ™pu do zasobów oraz ujawnienia poufnych informacji. Na samym koÅ„cu, co nie znaczy że zagadnienia tam poruszone sÄ… najmniej ważne, zostanÄ… opisane zagrożenia zwiÄ…zane z mechanizmami uwierzytelniania i zarzÄ…dzania sesjami użytkowników. Zaproponowany podziaÅ‚ jest umowny, a zaprezentowane tu techniki czÄ™sto mogÄ… być ze sobÄ… Å‚Ä…czone. 4 BEZPIECZECSTWO SYSTEMÓW INFORMATYCZNYCH W INTERNECIE Celem niniejszego punktu jest wprowadzenie do problemu bezpieczeÅ„stwa systemów informatycznych w sieci Internet. ZostanÄ… tu po krótce przedstawione przyczyny i anatomia ataków oraz grupy osób dokonujÄ…cych wÅ‚amaÅ„ komputerowych. Zarys problemu GwaÅ‚towny rozwój Internetu w ostatnich latach otworzyÅ‚ szereg możliwoÅ›ci zarówno przed wieloma przedsiÄ™biorstwami i wielkimi korporacjami, jak i użytkownikami indywidualnymi. Z nadarzajÄ…cej siÄ™ okazji zaistnienia na caÅ‚ym Å›wiecie kosztem stosunkowo niewielkich nakÅ‚adów Å›rodków, skorzystaÅ‚o i wciąż korzysta wielu. Jednakże wraz z rozkwitem wszelkiego rodzaju systemów e-commerce oraz innych dynamicznych witryn internetowych, a co za tym idzie też stopniowego zwiÄ™kszenia iloÅ›ci i ważnoÅ›ci danych w nich przechowywanych, pojawiÅ‚ siÄ™ problem bezpieczeÅ„stwa tychże aplikacji. Otwarty charakter systemów informatycznych w Internecie sprawia, że dostÄ™p do nich ma praktycznie każdy, kogo komputer jest podÅ‚Ä…czony do sieci, w wyniku czego przeprowadzenie ewentualnego ataku jest o wiele prostsze niż dotychczas. Nie ulega wiÄ™c wÄ…tpliwoÅ›ci, że zapewnienie integralnoÅ›ci danych i poufnoÅ›ci informacji oraz ochrona przed przestÄ™pczym wykorzystaniem danych, ich utratÄ… lub nieuczciwÄ… konkurencjÄ… jest jednym z najważniejszym elementów podczas realizacji zadaÅ„ za pomocÄ… systemów informatycznych [KlBa00, s.539]. W wiÄ™kszoÅ›ci przypadków jest to zagadnienie kluczowe. Jeżeli informacje tajne lub szczególnie ważne dostanÄ… siÄ™ w niepowoÅ‚ane rÄ™ce bÄ…dz skojarzone z innymi informacjami zostanÄ… wykorzystane do innych celów, aniżeli te, które okreÅ›lono przy ich gromadzeniu, może powstać zagrożenie interesów ekonomicznych lub praw obywatelskich jednostki. [Sund91, s.41]. Tak wiÄ™c jeÅ›li dane nie sÄ… przechowywane i chronione z należytÄ… ostrożnoÅ›ciÄ…, wszelkie dziaÅ‚ania krakerów mogÄ… przynieść katastrofalne skutki. WedÅ‚ug przeprowadzonych badaÅ„ okoÅ‚o 80% firm, z których wczeÅ›niej skradziono lub zniszczono dane w ciÄ…gu 2 lat koÅ„czy swojÄ… dziaÅ‚alność [Faja05]. Problem bezpieczeÅ„stwa danych w systemach informatycznych jest wiÄ™c problemem o podstawowym znaczeniu, warunkujÄ…cym prawidÅ‚owe dziaÅ‚anie instytucji oraz wpÅ‚ywajÄ…cym na poczucie bezpieczeÅ„stwa i zaufanie do nowoczesnych rozwiÄ…zaÅ„ informatycznych i telekomunikacyjnych [SBP01, s.11]. 5 Niestety, mimo realnego zagrożenia, wielu programistów wciąż wydaje siÄ™ nie przywiÄ…zywać należytej uwagi do bezpieczeÅ„stwa tworzonego przez nich oprogramowania. Z jednej strony wynika to zapewne z niewiedzy, ale z drugiej także z napiÄ™tych terminów oddania aplikacji do użytku. Istotne znaczenie ma wiÄ™c sama Å›wiadomość istnienia zagrożenia. Åšwiadomość nie tylko programistów, ale i przedsiÄ™biorstw w ramach których funkcjonuje dane oprogramowanie czy też klientów skÅ‚adajÄ…cych zlecenie na jego napisanie. Jeszcze bardziej katastrofalne w skutkach może być faÅ‚szywe poczucie bezpieczeÅ„stwa. Opieranie siÄ™ na starych sprawdzonych rozwiÄ…zaniach nie zawsze gwarantuje skutecznÄ… ochronÄ™. Na przykÅ‚ad popularne firewalle sÄ… bezsilne na ataki dokonywane poprzez luki w aplikacjach webowych, ponieważ witryny internetowe wymagajÄ…, aby porty 80 (HTTP) i 443 (SSL) byÅ‚y caÅ‚y czas otwarte. W rezultacie typowe firewalle sÄ… pomijane w caÅ‚ym procesie komunikacji warstwy klienta z warstwÄ… aplikacji. Co prawda podjÄ™to próby stworzenia zapór ogniowych dedykowanych dla stron internetowych, jednak mnogość możliwych ataków i oczywista niemożność odczytania zamiarów użytkowników (potencjalnych krakerów) spowodowaÅ‚y, że nie sÄ… one rozwiÄ…zaniami, na których można by byÅ‚o opierać skutecznÄ… ochronÄ™. Co wiÄ™cej, J. Grossman uzmysÅ‚awia nam [Gros04], że szyfrowanie danych za pomocÄ… protokoÅ‚u SSL także nie jest wystarczajÄ…ce, ponieważ zapewnia ono bezpieczeÅ„stwo tylko transmisji danych do i z aplikacji, natomiast sama informacja przez witrynÄ™ przechowywana jest już w czytelnej postaci. W ten oto sposób pojawiÅ‚ siÄ™ problem, który miaÅ‚ marginalne znaczenie w dobie statycznych stron WWW. Zapory ogniowe, zabezpieczenia systemu operacyjnego i najnowsze poprawki to wszystko może zostać pominiÄ™te podczas prostego ataku na aplikacje. Chociaż elementy te sÄ… wciąż krytycznymi elementami każdej infrastruktury zabezpieczeÅ„, to sÄ… one w widoczny sposób bezradne w powstrzymywaniu nowej generacji ataków, które zdarzajÄ… siÄ™ coraz częściej [ScSh02, s.xxi]. Obecnie 70% ataków skierowanych przeciwko firmom,realizowanych jest wÅ‚aÅ›nie poprzez warstwÄ™ aplikacji, a nie warstwÄ™ sieciowÄ… czy systemowÄ… [Kenn05] (zob. rysunek 1). Wobec tychże faktów, wÅ‚aÅ›ciwe zabezpieczanie aplikacji webowych nabiera szczególnego znaczenia. System jest zawsze tak silny, jak jego najsÅ‚absze ogniwo, wiÄ™c na nic siÄ™ zdadzÄ… inwestycje w kosztowne zapory ogniowych czy też implementacje bezpiecznych protokołów typu SSL, jeÅ›li sama witryna internetowa posiada luki i bÅ‚Ä™dy. BezpieczeÅ„stwo internetowych aplikacji bazodanowych nie ogranicza siÄ™ Å›ciÅ›le tylko do przeciwdziaÅ‚ania wÅ‚amaniom krakerów. Zapewnienie bezpieczeÅ„stwa danych obejmuje również ochronÄ™ przed naruszeniem spójnoÅ›ci danych, tj. zapewnienie, aby dane byÅ‚y wewnÄ™trznie niesprzeczne, aby istniaÅ‚a zgodność miÄ™dzy odwzorowywanÄ… rzeczywistoÅ›ciÄ… a 6 zbiorem danych w bazie danych [SBP01, s.12]. Obejmuje to zarówno celowÄ…, jak i nieumyÅ›lnÄ… modyfikacjÄ™ bÄ…dz usuniÄ™cie danych, najczęściej w wyniku sytuacji nieprzewidzianych przez programistów piszÄ…cych aplikacje. Rysunek 1: WiÄ™kszość ataków realizowanych jest poprzez wartwÄ™ aplikacji yródÅ‚o: [Sima04, s.6] Atak na aplikacjÄ™ Atak na aplikacjÄ™ można zdefiniować jako akcjÄ™, która wykorzystuje sÅ‚aby punkt i realizuje zagrożenie [MMVEM04, s.5]. Przez sÅ‚aby punkt rozumie siÄ™ tu sÅ‚abość, która czyni realizacjÄ™ zagrożenia możliwÄ… [MMVEM04, s.11], natomiast zagrożenie to możliwość wystÄ…pienia zdarzenia, zamierzonego lub przypadkowego, które mogÅ‚oby spowodować szkody wzglÄ™dem jakiegoÅ› zasobu [MMVEM04, s.5]. Zasobem jest tu jednostka posiadajÄ…ca pewnÄ… wartość, np. dane w bazie lub systemie plików lub element systemu [MMVEM04, s.5]. Powody i przesÅ‚anki, dla których dokonywany jest atak, mogÄ… być rozmaite. Można tu zaliczyć nastÄ™pujÄ…ce przyczyny [SzWi06, s.22] : " Zemsta atakujÄ…cy z reguÅ‚y zna dobrze aplikacjÄ™, jest w stanie poÅ›wiÄ™cić na atak dużo czasu oraz energii i próbuje wyrzÄ…dzić jak najwiÄ™ksze szkody, " Szpiegostwo próba wykradzenia poufnych informacji; ze szpiegostwem Å›ciÅ›le zwiÄ…zane jest piractwo informacyjne (wÅ‚amanie do bazy danych wyÅ‚Ä…czenie w celu kradzieży informacji) oraz kradzież tożsamoÅ›ci (kradzież prywatnych informacji o ofierze, które mogÄ… umożliwić podszycie siÄ™ pod ofiarÄ™, np. adres, numer ubezpieczenia, informacje o kartach kredytowych, data urodzenia, itp.) [Fotr03, s.29], " SÅ‚awa przeważnie dotyczy niedoÅ›wiadczonych atakujÄ…cych, 7 " Satysfakcja próba sprawdzenia i potwierdzenia wÅ‚asnych umiejÄ™tnoÅ›ci, " Åšlepy los ataki zautomatyzowane, które zazwyczaj nie sÄ… wymierzone w konkretnÄ… witrynÄ™; najczęściej pod postaciÄ… wirusów i robaków rozprzestrzeniajÄ… siÄ™ po sieci wyszukujÄ…c i wykorzystujÄ…c aplikacje posiadajÄ…ce znane podatnoÅ›ci. Samych atakujÄ…cych można podzielić na dwie podstawowe grupy : hakerzy (hackers) i krakerzy (crackers). Hakerzy to programiÅ›ci posiadajÄ…cy szerokÄ… wiedzÄ™ zarówno w dziedzinie sprzÄ™tu komputerowego jak i oprogramowania [Warh99, s.13]. PojÄ™cie hakera czÄ™sto jest mylone z krakerem. Hakerzy szukajÄ… luk w systemach informatycznych, aby poprawić ich bezpieczeÅ„stwo, rzadziej tylko dla sprawdzenia wÅ‚asnych umiejÄ™tnoÅ›ci. Natomiast krakerzy to osoby zajmujÄ…ce siÄ™ Å‚amaniem zabezpieczeÅ„ oprogramowania dla wÅ‚asnych celów [SzWi06, s.24]. W przeciwieÅ„stwie do hakerów krakerzy dziaÅ‚ajÄ… nielegalnie, mimo iż obie grupy ludzi używajÄ… bardzo podobnych lub identycznych programów i technik [Warh99, s.13]. Krakerów można podzielić dodatkowo na szczegółowe podgrupy [Howa97] : " Wandale (Vandals) wÅ‚amujÄ… siÄ™ głównie w celu dokonania zniszczeÅ„, " TerroryÅ›ci (Terrorists) wÅ‚amujÄ… siÄ™ głównie w celu wywoÅ‚ania strachu, który pomoże w osiÄ…gniÄ™ciu korzyÅ›ci politycznych, " Szpiedzy (Spies) wÅ‚amujÄ… siÄ™ głównie dla uzyskania informacji, które mogÄ… być wykorzystane w celach politycznych, " Szpiedzy przemysÅ‚owi (Corporate Raiders) pracownicy, którzy wÅ‚amujÄ… siÄ™ do komputerów konkurencyjnych firm celem osiÄ…gniÄ™cia korzyÅ›ci finansowych, " PrzestÄ™pcy (Professional Criminals) wÅ‚amujÄ… siÄ™ celem uzyskania osobistych korzyÅ›ci finansowych (nie sÄ… szpiegami przemysÅ‚owymi). Bez wzglÄ™du na grupÄ™ oraz motywy, sam atak przebiega zazwyczaj wedÅ‚ug tego samego schematu [Sima04, s. 8] : (1) Skanowanie atakujÄ…cy skanuje porty, aby wykryć otwarte porty HTTP oraz HTTPS i wyszukać domyÅ›lne strony dla każdego otwartego portu, (2) Gromadzenie informacji atakujÄ…cy identyfikuje typ serwera dla każdego portu, a nastÄ™pnie analizuje stronÄ™ w celu poznania jej budowy i zachowania, (3) Testowanie atakujÄ…cy sprawdza kolejne elementy i podstrony witryny w celu odnalezienia bÅ‚Ä™dów programistycznych, które pozwolÄ… mu na uzyskanie wiÄ™kszego dostÄ™pu, 8 (4) Planowanie ataku w oparciu o informacje zgromadzone w poprzednich krokach, atakujÄ…cy okreÅ›la sÅ‚abe punkty aplikacji i planuje atak, (5) Dokonywanie ataku atakujÄ…cy dokonuje wÅ‚aÅ›ciwego ataku wykorzystujÄ…c wczeÅ›niej wykryte podatnoÅ›ci; dodatkowo na koniec może on zatrzeć wszelkie Å›lady dokonanego wÅ‚aÅ›nie wÅ‚amania. Przybliżone w tym punkcie zagadnienia dajÄ… tylko ogólne pojÄ™cie na temat zagrożeÅ„, na które narażone sÄ… internetowe aplikacje bazodanowe PHP. Dlatego konkretne rodzaje ataków i technik zostanÄ… omówione bardziej szczegółowo w nastÄ™pnych punktach tego dokumentu. 9 ZAGROÅ»ENIA ZWIZANE Z WYKONANIEM WROGIEGO KODU Ataki polegajÄ…ce na wstrzykniÄ™ciu i wykonaniu wrogiego kodu sÄ… jednymi z dotkliwszych zagrożeÅ„ dotyczÄ…cych internetowych aplikacji bazodanowych. Ich skutki sÄ… przeważnie ciężkie do przewidzenia i ogarniÄ™cia. Nie należy lekceważyć żadnego rodzaju ataków polegajÄ…cych na wykonaniu zÅ‚oÅ›liwego kodu, jednakże najbardziej znane i rozpowszechnione sÄ… iniekcja kodu SQL i Cross Site Scripting, dlatego poÅ›wiÄ™cono im najwiÄ™cej miejsca. Iniekcja kodu SQL Iniekcja kodu SQL (SQL Injection) polega na takiej manipulacji aplikacjÄ… komunikujÄ…cÄ… siÄ™ z bazÄ… danych, aby ta umożliwiÅ‚a atakujÄ…cemu uzyskanie dostÄ™pu lub modyfikacjÄ™ danych, do których nie posiada on uprawnieÅ„ [DwLu03]. Odbywa siÄ™ to poprzez wprowadzanie spreparowanych ciÄ…gów znaków do zmiennych przekazywanych serwisom WWW, aby zmieniaÅ‚y one sens wykonywanych przez ten serwis zapytaÅ„ SQL [Cieb03]. Jest to możliwe, gdy zapytania oparte sÄ… na danych wprowadzanych przez użytkowników. W zależnoÅ›ci od architektury aplikacji, spreparowanym ciÄ…giem znaków wykorzystywanym przez atakujÄ…cego może być gotowe wyrażenie SQL, sekwencja komend specyficznego dla danej platformy jÄ™zyka obsÅ‚ugi danych (Data Manipulation Language) lub odwoÅ‚anie do procedury, która samoczynnie utworzy wÅ‚aÅ›ciwe wyrażenie SQL [DwLu03]. Skutecznie przeprowadzony atak polegajÄ…cy na iniekcji kodu SQL może prowadzić do nieautoryzowanego dostÄ™pu do danych, pominiÄ™cia procesu uwierzytelniania, modyfikacji zawartoÅ›ci bazy danych, a nawet do przejÄ™cia kontroli nad systemem [PeCh04, s.418]. Atak SQL Injection wykorzystuje nastÄ™pujÄ…ce trzy elementy dziaÅ‚ania aplikacji internetowej : " dynamicznie tworzone zapytania zapytanie zależne jest od danych wejÅ›ciowych, czÄ™sto pochodzÄ…cych od użytkownika [Fish05, s.46], " ostateczna forma zapytania tworzona jest w wyniku poÅ‚Ä…czenia oryginalnej statycznej części zapytania z parametrami dynamicznym, np. $zapytanie = 10 ªSELECT * FROM uzytkownicy WHERE id=º.$_GET[©id©]; - parametrem dynamicznym jest tutaj zmienna $_GET[©id©] pochodzÄ…ca z adresu URL, " sÅ‚aba walidacja (lub jej brak) danych wejÅ›ciowych używanych w zapytaniu [Fish05, s.46]. Pierwszym krokiem każdego ataku jest zawsze rekonesans. W przypadku iniekcji kodu SQL, polega on na modyfikowaniu parametrów wejÅ›ciowych oraz Å›ledzeniu zmian w zachowaniu aplikacji pod wpÅ‚ywem tych modyfikacji. PrzykÅ‚adowo witryny czasem zwracajÄ… komunikaty bÅ‚Ä™dów w interpretacji kodu PHP bezpoÅ›rednio na wyjÅ›cie do przeglÄ…darki. W efekcie atakujÄ…cy może, poprzez odpowiedniÄ… manipulacjÄ™ parametrów (np. ©ZÅ‚aWartość, ZÅ‚aWartość©, © OR, ;, 9,9,9 [Spet02, s.9]), sztucznie wywoÅ‚ywać te bÅ‚Ä™dy, dziÄ™ki czemu ma okazje przeanalizować sposób dziaÅ‚ania aplikacji. W ten sposób napastnik może zdobyć informacje o wyglÄ…dzie zapytaÅ„ SQL, a nawet poznać strukturÄ™ bazy danych. Wydawać by siÄ™ mogÅ‚o, że peÅ‚ne komunikaty bÅ‚Ä™dów mogÄ… wyÅ›wietlać koÅ„cowemu użytkownikowi tylko maÅ‚e witryny, pisane przez poczÄ…tkujÄ…cych i niedoÅ›wiadczonych programistów, jednakże praktyka wyglÄ…da nieco inaczej. Tego rodzaju luki można spotkać także na rozbudowanych witrynach komercyjnych, a nawet na stronach instytucji rzÄ…dowych. PrzykÅ‚adowo grupa rosyjskich hakerów pokazaÅ‚a wykorzystanie tej podatnoÅ›ci celem wykradniÄ™cia numerów kart kredytowych na przykÅ‚adzie witryny amerykaÅ„skiego stanu Rhode Island [WWW7]. Nawet jeÅ›li aplikacja nie wyÅ›wietla peÅ‚nych komunikatów bÅ‚Ä™dów, to atak także jest możliwy poprzez tzw. Å›lepe wstrzykiwanie kodu (ang. Blind SQL Injection) [Spet03, s.2]. OkreÅ›lenie to ogólnie odnosi siÄ™ do tych ataków typu SQL Injection, gdzie wystÄ™pujÄ… ograniczone możliwoÅ›ci uzyskania od aplikacji informacji uÅ‚atwiajÄ…cych atak [PeCh04, s.425]. Ataki polegajÄ…ce na wstrzykiwaniu wrogiego kodu SQL można podzielić na trzy kategorie w oparciu o to, w który aspekt zapytaÅ„ SQL sÄ… wymierzone [Shem05] : (1) Ataki na skÅ‚adnie zapytania - opierajÄ… siÄ™ na wstawianiu znaków zakłócajÄ…cych skÅ‚adnie zapytania w celu wygenerowania bÅ‚Ä™dów uÅ‚atwiajÄ…cych identyfikacje zakresu ataku możliwego do przeprowadzenia. Znakami tymi mogÄ… być : cudzysłów, Å›rednik, znak komentarza (#, /*, --), a także wbudowane funkcje SQL, np. CHAR(0x27) Ä… filtry sprawdzajÄ…ce wystÄ™powanie apostrofu nie wykryjÄ… w tym przypadku zagrożenia, tymczasem w rzeczywistoÅ›ci szesnastkowa wartość 0x27 reprezentuje kod ASCII pojedynczego cudzysÅ‚owu; do przeprowadzenia ataku na skÅ‚adnie zapytania mogÄ… być także wykorzystane ataki na typy zmiennych, szczególnie jeÅ›li chodzi o wartoÅ›ci numeryczne. 11 (2) Ataki na skÅ‚adnie jÄ™zyka - wycelowane w sam jÄ™zyk SQL. Zamierzeniem jest wygenerowanie bÅ‚Ä™dów bazy danych lub wykonanie prostych zapytaÅ„ poprzez manipulacjÄ™ konstruktorami jÄ™zyka i tożsamoÅ›ciami semantycznymi, np. elementy 111, 0157, 110+1, MOD(111, 112), REPEAT(1,3), COALESCE(NULL, NULL, 111) dla bazy danych wszystkie majÄ… takie same znaczenie; w rezultacie atakujÄ…cy może poznać mechanizmy przetwarzania surowych wartoÅ›ci parametrów wejÅ›ciowych zaimplementowane w aplikacji, a nastÄ™pnie wykorzystać ich sÅ‚aboÅ›ci. Do ataków na skÅ‚adnie jÄ™zyka zalicza siÄ™ także ataki polegajÄ…ce na umieszczaniu wÅ‚asnych zapytaÅ„ SQL zaraz po oryginalnych zapytaniach wykonywanych przez aplikacjÄ™; w tym celu atakujÄ…cy może użyć znaku Å›rednika, który oddziela nastÄ™pujÄ…ce po sobie zapytania, lub operatora UNION, który Å‚Ä…czy wyniki wielokrotnych zapytaÅ„. CzÄ™sto wykorzystywane sÄ… tutaj znaki komentarza celem obciÄ™cia wyrażenia do żądanej postaci. AtakujÄ…cy ma do dyspozycji szereg zapytaÅ„, które doÅ‚Ä…czone do wÅ‚aÅ›ciwego zapytania, pozwalajÄ… mu na uzyskanie informacji o bazie danych, np. SHOW DATABASES, SHOW TABLES, EXPLAIN nazwa_tabeli, SELECT SESSION_USER() i wiele, wiele innych. W ten sam sposób może przeprowadzić modyfikacjÄ™ zawartoÅ›ci bazy danych używajÄ…c podstawowych poleceÅ„ jÄ™zyka SQL, takich jak INSERT, UPDATE, DELETE czy DROP. (3) Ataki na logikÄ™ zapytania - polegajÄ… na przepisaniu zapytania w celu otrzymania dowolnych danych z tabel, do których twórcy nie przewidzieli dostÄ™pu; w tym celu używa siÄ™ operatora UNION; w praktyce atakujÄ…cy może uzyskać dostÄ™p do dowolnych danych; jest tylko ograniczony uprawnieniami danego użytkownika bazy danych, którego konto jest wykorzystywane przez witrynÄ™. Audytorzy bezpieczeÅ„stwa aplikacji internetowych bardzo czÄ™sto opierajÄ… swoje testy tylko na wstrzykniÄ™ciach opartych na apostrofach, jednakże jak pokazuje tabela nr.1, nie jest to poprawne podejÅ›cie do testowania podatnoÅ›ci na SQL Injection, ponieważ do tego typu ataków wykorzystuje siÄ™ także wiele innych znaków i ich kombinacji [Shem05, s.44]. Nieuprawniony dostÄ™p do bazy danych jest zagrożeniem, do którego twórcy systemów informatycznych powinni przywiÄ…zywać szczególnÄ… uwagÄ™. W tak otwartym Å›rodowisku jakim jest sieć Internet, gdzie dostÄ™p do aplikacji jest praktycznie nieograniczony, kwestia ta nabiera szczególnego znaczenia. Co gorsza, atak SQL Injection jest przeprowadzany pomiÄ™dzy warstwÄ… programistycznÄ… (jÄ™zyk aplikacji internetowej) a warstwÄ… danych (system zarzÄ…dzania bazÄ… danych), wiÄ™c nie przeszkadzajÄ… mu programy antywirusowe czy zapory 12 ogniowe (firewall), ponieważ dziaÅ‚ajÄ… one na niższym poziomie [Trej04, s.70]. W praktyce dajÄ… one tylko faÅ‚szywe poczucie caÅ‚kowitego bezpieczeÅ„stwa. Wobec tych faktów, zagadnieniem kluczowym staje siÄ™ implementacja funkcji ochronnych na poziomie kodu aplikacji. Znak, wyrażenie Znaczenie dla iniekcji kodu SQL lub operator Znaki cudzysÅ‚owów. JeÅ›li serwer odpowie bÅ‚Ä™dem SQL, aplikacja jest © ª podatna na iniekcjÄ™ kodu SQL. OR 1=1 Wymusza prawdziwość caÅ‚ego wyrażenia znajdujÄ…cego siÄ™ w klauzuli WHERE zapytania. Najczęściej stosowane w przypadku zapytaÅ„ OR 1=©1 uwierzytelniajÄ…cych, np. OR 1=º1 SELECT id FROM uzytkownicy WHERE login = ªLoginº AND haslo = ªHasÅ‚oº OR 1=1 Powyższe zapytanie zwróci identyfikator użytkownika o podanym loginie (nazwie użytkownika) bez wzglÄ™du na to czy hasÅ‚o jest poprawne, czy też nie. UNION Operator ten Å‚Ä…czy polecenia SELECT. Umożliwia rozszerzenie wyrażenia o inne zapytania, np. SELECT kolumna FROM tabela UNION (SELECT CONCAT(*) FROM mysql.user) #, /*, -- Znaki komentarza w MySQL. Wszystkie znaki wystÄ™pujÄ…ce po znaku komentarza sÄ… ignorowane przez system zarzÄ…dzania bazÄ… danych. Celem atakujÄ…cego jest obciÄ™cie zapytania do żądanej postaci, np. SELECT kolumna FROM tabela WHERE id = REPEAT(1,3) UNION SELECT USER() /* AND idsesji = 123456 % Wieloznacznik (wildcard). Gdy w warunku zapytania używany jest operator LIKE, wtedy znak procenta (%) oznacza dowolnÄ… liczbÄ™ znaków. _ PodkreÅ›lnik (underscore). Gdy w warunku zapytania używany jest operator LIKE, wtedy znak podkreÅ›lenia (_) oznacza dowolny pojedynczy znak. INSERT, UPDATE, Polecenia SQL odpowiedzialne za modyfikacje struktury i zawartoÅ›ci bazy DELETE, REPLACE, danych. JeÅ›li atakujÄ…cy uzyska możliwość wykonania wÅ‚asnych zapytaÅ„ DROP, ALTER przy użyciu tych poleceÅ„, konsekwencje mogÄ… być bardzo poważne. Napastnik może np. zmienić hasÅ‚o dostÄ™pu użytkownika : UPDATE uzytkownicy SET haslo = ºNowe hasÅ‚oº WHERE login = ºadministratorº Tabela 1: Znaki, wyrażenia i operatory, ważne przy iniekcji kodu SQL (MySQL) yródÅ‚o: Opracowanie wÅ‚asne na podstawie [ScSh02], [Glem05], [Shem05], [Atki03]. 13 Cross Site Scripting Cross Site Scripting (XSS1), obok iniekcji kodu SQL, jest jednym z najbardziej znanych i rozpowszechnionych ataków na aplikacje bazodanowe dziaÅ‚ajÄ…ce w sieci Internet. W rankingu incydentów konsorcjum bezpieczeÅ„stwa stron WWW (Web Application Security Consortium) zajmuje pierwsze miejsce [WWW6]. ByÅ‚ szeroko opisywany nie tylko w mediach specjalistycznych, ale i w zwykÅ‚ej prasie i magazynach [Endl02, s.4]. SwojÄ… popularność zawdziÄ™cza miÄ™dzy innymi temu, że jego ofiarami padaÅ‚y nawet tak duże i popularne witryny internetowe jak system kont pocztowych Hotmail, serwis aukcyjny eBay, system wyszukiwawczy Google czy też portal Yahoo [Endl02, s.4; Alsh06a, s.54]. Podatność na Cross Site Scripting wykrywano także na stronach dużych zachodnich banków [WWW4]. Tym bardziej dziwi fakt, że temat ten jest w papierowych pozycjach książkowych czÄ™sto opisywany bardzo pobieżnie. JeÅ›li chodzi o polski odpowiednik terminu Cross Site Scripting, to tylko w jednej pozycji książkowej [MMVEM04, s.22] zaproponowano enigmatycznie brzmiÄ…ce okreÅ›lenie skryptowanie skroÅ›ne . W innych polskich pracach i przekÅ‚adach powszechnie używa siÄ™ nazwy angielskiej. Atak typu Cross Site Scripting polega na iniekcji zÅ‚oÅ›liwego kodu w oryginalnÄ… treść strony. Aby agresor mógÅ‚ skutecznie wykorzystać takÄ… lukÄ™, użytkownik koÅ„cowy musi podjąć jakieÅ› dziaÅ‚ania może to być klikniÄ™cie na spreparowanym Å‚Ä…czu lub odwiedzenie strony, w którÄ… wstrzykniÄ™to wrogi kod [ScSh02, s.291]. Kod ten jest najczęściej tworzony przy użyciu jÄ™zyka skryptowego JavaScript, ale równie dobrze mogÄ… być do tego wykorzystane także inne technologie wykonywane po stronie klienta, takie jak Ajax, VBScript czy Flash. Atak XSS jest o tyle specyficzny, że jego celem w pierwszej kolejnoÅ›ci nie jest witryna sama w sobie, lecz jej użytkownicy. Wykorzystane jest tutaj zaufanie, jakim korzystajÄ…cy ze strony jÄ… obdarza, natomiast sama strona staje siÄ™ nieÅ›wiadomym współsprawcÄ… ataku [Gajd05, s.95]. Cross Site Scripting dotyka szczególnie te strony internetowe, gdzie zachodzi interakcja z użytkownikami lub też wyÅ›wietlane sÄ… jakiekolwiek dane pochodzÄ…ce z zewnÄ…trz, spoza aplikacji, np. fora internetowe, serwisy aukcyjne, sklepy internetowe z opcjÄ… komentowania i recenzowania produktów, systemy kont pocztowych dostÄ™pne przez protokół HTTP, otwarte systemy encyklopedyczne Wiki i wiele, wiele innych. 1 PoczÄ…tkowo Cross Site Scripting w skrócie nazywano CSS, ale w zwiÄ…zku z faktem, że takiego samego akronimu używa siÄ™ na okreÅ›lenie kaskadowych arkuszy stylów (ang. Cascading Style Sheets), dla unikniÄ™cia nieporozumieÅ„ przyjÄ™to skrót XSS 14 Podatne mogÄ… być nawet moduÅ‚y wyszukiwania oraz strony wyÅ›wietlajÄ…ce komunikaty bÅ‚Ä™dów [OWASP04, s.11]. Cross Site Scripting pozwala napastnikowi miÄ™dzy innymi na wykradniÄ™cie wartoÅ›ci przechowywanych w ciasteczkach (ang. cookies). Najczęściej sÄ… one używane do identyfikacji użytkownika, dlatego zdobycie ich przez napastnika umożliwia przejÄ™cie sesji i konta, a w konsekwencji wykonanie okreÅ›lonych operacji z poziomem uprawnieÅ„ zalogowanego użytkownika [Alsh06a, s.54]. JeÅ›li ofiarÄ… jest administrator systemu skutki mogÄ… być bardzo poważne. XSS może także posÅ‚użyć do przekierowania użytkownika na innÄ… stronÄ™, instalacjÄ™ szkodliwego programu (konia trojaÅ„skiego), a także do zmieniania i faÅ‚szowania zawartoÅ›ci witryny [OWASP04, s.11]. Szczególnie nie należy lekceważyć tego ostatniego zagrożenia. PrzykÅ‚adowo modyfikacja wiadomoÅ›ci prasowej na witrynie może mieć wpÅ‚yw na zmianÄ™ ceny akcji danego przedsiÄ™biorstwa na gieÅ‚dzie czy też na poziom zaufania klientów wobec firmy [OWASP04, s.11]. Atak XSS skÅ‚ada siÄ™ z nastÄ™pujÄ…cych etapów [Gajd05, s.95; Zuch03] : (1) odnalezienie luki, a nastÄ™pnie przekazanie do aplikacji zÅ‚oÅ›liwego kodu, (2) nieÅ›wiadome pobranie i wykonania tego kodu przez ofiarÄ™, (3) dodatkowe akcje wykonywane przez atakujÄ…cego. Odnalezienie luki i sprawdzenie czy dana aplikacja jest podatna na Cross Site Scripting to niezbyt trudne zadanie. W wiÄ™kszoÅ›ci przypadków sprowadza siÄ™ do żmudnego wprowadzania w pola formularzy HTML odpowiednio przygotowanego kodu, np. [WWW5] ©;alert(String.fromCharCode(88,83,83))//\©;alert(String.fromCharCode(88,83 ,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCod e(88,83,83))//>!-- =&{} Wykonanie powyższych instrukcji jÄ™zyka JavaScript spowoduje wyÅ›wietlenie monitu z komunikatem o treÅ›ci XSS (jeÅ›li tylko wystÄ™puje podatność). Jeżeli pole do wprowadzania treÅ›ci w formularzu nie pozwala na umieszczenie w nim zbyt wielu znaków można skorzystać z nieco skróconej wersji [WWW5] : ©©;!--"=&{()} W tym przypadku wystarczy zajrzeć do zródÅ‚a strony i zobaczyć czy w treÅ›ci wystÄ™puje ciÄ…g filtrów danych wejÅ›ciowych i jest podatna na atak. Warto zaznaczyć, że caÅ‚a procedura 15 sprawdzania wcale nie musi odbywać siÄ™ poprzez pola formularzy, czyli poprzez metodÄ™ HTTP POST. Równie dobrze można użyć żądania GET, np. http://atakowana_strona/podstrona.php?komunikat= W rezultacie powyższy kod wyÅ›wietli monit z komunikatem Podatne na atak XSS , dziÄ™ki czemu atakujÄ…cy bÄ™dzie mógÅ‚ przejść do kolejnego etapu. Po odnalezieniu luki napastnik może przystÄ…pić do ataku. Wyróżnia siÄ™ dwa podstawowe sposoby jego przeprowadzania : bezpoÅ›redni i trwaÅ‚y. Atak bezpoÅ›redni2 polega na dostarczeniu ofierze specjalnie spreparowanego odnoÅ›nika (linka), po którego klikniÄ™ciu użytkownik przechodzi na stronÄ™, a nastÄ™pnie przeglÄ…darka internetowa wykonuje zÅ‚oÅ›liwy kod znajdujÄ…cy siÄ™ w adresie URL [WASC04a, s.25]. Wbrew pozorom, skÅ‚onienie ofiary do uruchomienia takiego odnoÅ›nika nie wymaga szczególnie wymyÅ›lnych zabiegów. Najczęściej wysyÅ‚a siÄ™ e-mail o treÅ›ci zachÄ™cajÄ…cej do klikniÄ™cia w znajdujÄ…cy siÄ™ tam link, w zależnoÅ›ci od charakteru atakowanego serwisu może to być przykÅ‚adowo bardzo kuszÄ…ca promocja w sklepie internetowym, informacja o wygranej nagrodzie albo chociażby informacja o otrzymanej internetowej kartce pocztowej. Link ten może wyglÄ…dać nastÄ™pujÄ…co : [WASC04a, s.26] http://atakowana_strona/?nazwa= Uruchomienie powyższego odnoÅ›nika w efekcie spowoduje przekierowanie na serwer napastnika, gdzie zostanie przez niego odczytana wartość ciasteczka (cookie). Ponieważ przedstawiony adres URL może Å‚atwo wzbudzić podejrzenia ofiary, dobrym pomysÅ‚em bÄ™dzie zakodowanie części adresu zawierajÄ…cej kod JavaScript : [WASC04a, s.27] http://atakowana_strona/?nazwa=%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65% 6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%201D%68%74%74%70%3A%2F%2F%73%65%72%77% 65%72%5F%61%74%61%6B%75%6A%61%63%65%67%6F%2F%63%7A%79%74%61%6A%5F%63%6F%6F %6B%69%65%73%2E%70%68%70%3F%63%6F%6F%6B%69%65%3D%201D%2B%64%6F%63%75%6D%65 %6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73%63%72%69%70%74%3E Tak zakodowany odnoÅ›nik zostanie zinterpretowany przez przeglÄ…darkÄ™ internetowÄ… identycznie jak wyżej przedstawiony adres czytelny dla czÅ‚owieka. 2 W literaturze dla okreÅ›lenia tego ataku używa siÄ™ nastÄ™pujÄ…cych angielskojÄ™zycznych terminów : direct attack [Alsh05a, s.54], non-persistent attack [WASC04a, s.25] oraz reflected attack [OWASP04, s.11]. 16 Rysunek 2: Przebieg ataku bezpoÅ›redniego Cross Site Scripting yródÅ‚o: Opracowanie wÅ‚asne. W przypadku ataku trwaÅ‚ego3, zÅ‚oÅ›liwy kod zostaje wklejony bezpoÅ›rednio na stronÄ™ i w wyniku braku odpowiednich zabezpieczeÅ„ zostaje zapisany także w bazie danych. Ofiara zostaje zaatakowana w momencie odwiedzenia witryny. Wtedy przeglÄ…darka wykonuje kod wczeÅ›niej wstrzykniÄ™ty przez atakujÄ…cego [OWASP04, s.11]. W praktyce atak ten dotyka wszystkich, którzy odwiedzajÄ… danÄ… stronÄ™, przez co jego zakres jest o wiele wiÄ™kszy, a konsekwencje o wiele grozniejsze niż w przypadku ataku bezpoÅ›redniego. Jest także Å‚atwiejszy do przeprowadzenia, ponieważ napastnik wcale nie musi wysyÅ‚ać jakichkolwiek e- maili, ani nikogo przekonywać do wejÅ›cia na stronÄ™. Użytkownicy sami wpadajÄ… w puÅ‚apkÄ™ wykonujÄ…c zwyczajowe czynnoÅ›ci na witrynie. Z drugiej strony atak trwaÅ‚y jest też Å‚atwiejszy do wykrycia, gdyż administrator i użytkownicy mogÄ… odkryć w zródÅ‚ach wynikowej strony zÅ‚oÅ›liwy kod i przedsiÄ™wziąć odpowiednie kroki. W przypadku ataku bezpoÅ›redniego jest inaczej, kod zostaje wstrzykniÄ™ty tylko jednokrotnie, bezpoÅ›rednio po uruchomieniu spreparowanego odnoÅ›nika. Wrogi kod wykorzystywany w ataku trwaÅ‚ym może wyglÄ…dać nastÄ™pujÄ…co : [ScSh02, s.290] 3 W literaturze używa siÄ™ nastÄ™pujÄ…cych angielskojÄ™zyczne okreÅ›leÅ„ opisujÄ…ce ten typ ataku : stored [Alsh05a, s.95; OWASP04, s.11], persistent [WASC04a, s.25], a także HTML Injection [Fuen05; Pett04]. 17 Efektem dziaÅ‚ania tego skryptu jest wyÅ›wietlenie faÅ‚szywego komunikatu o wygaÅ›niÄ™ciu sesji. Użytkownik jest proszony o podanie swojego hasÅ‚a, po czym nastÄ™pujÄ™ przekierowanie do serwera napastnika z hasÅ‚em użytkownika jako jednym z parametrów adresu. Rysunek 3: Przebieg ataku trwaÅ‚ego Cross Site Scripting yródÅ‚o: Opracowanie wÅ‚asne. Lista znaczników oraz atrybutów HTML, które mogÄ… być wykorzystane do przeprowadzania ataku Cross Site Scripting, zostaÅ‚a przedstawiona w tabelach 2 i 3. Znacznik Użycie Zagrożenie