» »

Kupovati drugje bi bilo potratno

  • ::

Prišel je čas prednovoletnih nakupovalnih mrzlic. Mamljivi novoletni popusti prepričajo marsikaterega kupca, da se odloči za nakup izdelka ravno v tem času, starši pa niti nimajo izbire, saj ne želijo razočarati svojih otrok.

Vse več kupcev se odloča za opravljanje novoletnih nakupov iz udobja lastnega doma, tj. preko svetovnega spleta, saj je čakanje in drenjanje v vrstah za marsikoga neprijetno. Tudi spletne trgovine pripravljajo ob novoletnem času posebne ugodnosti za svoje kupce v obliki popustov na izbrane artikle, vsi pa verjetno ne vedo, da si lahko pri nekaterih spletnih trgovinah s poznavanjem njenega delovanja popust izberejo kar sami. To lahko dosežejo z uporabo preprostih, a zvitih tehnik, ki bodo predstavljene v nadaljevanju. Vsem je skupno to, da ne posegajo v integriteto spletnih strežnikov, kar je zelo pomemben dejavnik pri našem raziskovanju, saj pri svojih dejanjih ne bomo puščali nikakršnih posledic.

Na tem mestu bi bilo primerno izreči še opozorilo, ki pravi, da so vse tehnike predstavljene z izključno izobraževalnim namenom in nikakor ne z namenom škodovanja podjetjem, katerih spletne trgovine so bile uporabljene v primerih.

Oglejmo si najprej, katera orodja bomo uporabljali.

Orodja

Orodji, ki ju bomo potrebovali pri našem raziskovanju, sta spletni brskalnik in urejevalnik besedil. V mojem primeru bosta to Mozilla Firefox v2.0 z dodatkom Web Developer 1.0.2 in Microsoft Notepad, ostala orodja, ki se večkrat v podobnih pogojih tudi uporabljajo, ne bodo pa uporabljena v našem primeru, pa so razni dodatki (ang. addons) za spletne brskalnike in aplikacije za raziskovanje bolj prikritih značilnosti spletnih strani, npr. entropije dodeljevanja ključev sejam, kar nam omogoča lažjo ugrabitev slednjih, ampak o tem kaj več drugič.

Čeprav so vsi opisani primeri zelo enostavni, bomo naše potovanje vseeno začeli pri najenostavnejšem.

Primer #1: Telekom Slovenije - Teletrgovina

Teletrgovina je tipičen primer slabo programirane spletne trgovine, ki je nezaščitena pred številnimi oblikami napadov, ker pa nas tokrat zanima samo področje vplivanja na cene izdelkov, se v ostale podrobnosti ne bomo spuščali. Klik na jeziček "TELETRGOVINA" na portalu Telekoma Slovenije nas popelje v njihovo spletno trgovino.

Moj račun, košarica, seznam želja... Na prvi pogled se trgovina ne razlikuje dosti od ostalih. Pa dodajmo kar prvi izdelek v košarico in poskusimo nastaviti izbrano količino na vrednost "-1".

Opazimo, da spletna trgovina dopušča tudi negativne vrednosti, saj je vrednost "-1" gladko sprejeta, pri tem pa se je cena artikla seveda pomnožila z izbrano količino, kar ima za rezultat negativno ceno. Dopuščen je tudi vnos decimalnih vrednosti, s čimer lahko vplivamo na ceno praktično brez zadržkov, a o tem zopet malo kasneje.

Če razmišljamo zgolj teoretično -- do kakšnih posledic lahko privede slabo programirana spletna trgovina?

Teletrgovina omogoča med drugim tudi plačevanje z Moneto. Teoretično bi morala transakcija z negativno vrednostjo povzročiti, da bi uporabnik mobilnega telefona dobil namesto položnice dobropis, mobiuporabnikom pa napolniti račun, če se malce podamo v pretiravanje. Pri plačevanju s kreditno kartico bi bil sam proces verjetno podoben, vsem pa je skupno to, da bi poleg denarja plačnik z malo sreče po vrhu vsega prejel še naročeno blago in to popolnoma brezplačno.

Ker je transakcijski sistem plod dolgotrajnega razvoja bistrejših umov, so ti verjetno negativne transakcije predvideli in jih tudi ustrezno obravnavali. Vsaj pri plačevanju s kreditno kartico takšna transakcija ni mogoča (kar nam da vedeti sistemska napaka, ki je prikazana na sliki spodaj).

Pa postavimo sedaj vprašanje negativnih transakcij na stran in se raje posvetimo popustom v obliki zvito prirejenih količin. V košarico dodamo laserski tiskalnik Samsung ML-2010P po ceni 22.900,00 SIT (95,56 EUR) in nadaljujemo k izvedbi plačila. Če izberemo kot plačilno sredstvo kreditno kartico, je postavka za plačilo pričakovanih 23.400,00 SIT (22.900,00 SIT + 500 SIT za poštnino).

Poglejmo sedaj, kaj se zgodi, če v polje "Količina" vnesemo vrednost "0.90", kar dejansko pomeni 10% popust.

Opazimo, da se cena izdelka množi z vnešeno vrednostjo v polju "Količina", tako sedaj znaša cena izbranega izdelka v košarici 20.610,00 SIT (86,00 EUR). Nadaljujmo k blagajni in izberimo kot plačilno sredstvo zopet kreditno kartico.

Transakcijski sistem je količino "0.90" zaokrožil na "1", kar ne bi smelo predstavljati nobenih zapletov pri izvedbi transakcije. Oziroma, pravilneje bi bilo pojmovanje, da je transkcijski sistem izbral količino "1" za postavko, ki vsebuje izdelek in njegovo ceno. Menim, da količina "0.90" v tem primeru ne igra nobene vloge, saj, kot bomo videli v nadaljevanju, transakcijski sistem združi vso naročeno blago v enotno postavko pod skupno ceno, za plačilo tokrat skupni znesek znaša 21.110,00 SIT (20.610,00 SIT + 500 SIT za poštnino).

Pri spletnem nakupovanju v Teletrgovini pa je možna tudi kombinacija negativnih in pozitivnih količin.

Za prvi izdelek izberemo negativno količino in za drugega pozitivno, skupni seštevek privede do pozitivne vrednosti, ki znaša samo 4.000,00 SIT (16,69 EUR) + poštnina.

Transakcija s kreditno kartico ne predstavlja problemov, ste mar pričakovali kaj drugega?

Zelo verjetno je, da bi takšna transakcija uspela, vprašljivo pa je, če bi kupec blago dejansko prejel na dom brez zapletov. Pri trgovinah, kot je Teletrgovina, ki poslujejo v manjšem obsegu, zaposledi preverijo vsako naročilo in dokaj verjetno je, da količina "0.90" na naročilnici ne bi ostala neopažena. Do resnejših zapletov pa lahko pride, če je transakcija že izvedena v realnem času in je tako blago že plačano. Lahko spletna trgovina od kupca zahteva še dodatno plačilo do polne cene? Pri večjih podjetjih, npr. trgovinah v velikosti Amazon-a, kjer je dnevna količina naročil velikanska, je možnost za uspeh tovrstne prevare mnogo večji, saj ne pregledajo vseh naročil ročno. V primeru, da izbere kupec količino izdelkov "-3", je verjetno, da bo zaposleni, ki v skladišču pripravlja pakete, mislil, da gre za tiskarsko napako in bo vseeno zapakiral 3 izdelke.

Teletrgovina je eden izmed zelo enostavnih primerov, sedaj pa si poglejmo primer, ki od nas zahteva poseg v izvorno (prevedeno) HTML kodo spletne aplikacije.

Primer #2: Spletna trgovina JAE

Odpotujmo v spletno trgovino podjetja JAE Trgovina d.d., kjer se nam že čisto na začetku nasmiha sneženi mož.

Trgovina je pisana v okolju ASP.NET, kar bi v marsikomu vzbudilo prepričanje, da je na tem mestu spletno nakupovanje popolnoma varno. Mogoče tudi je, nas pa bo zanimalo predvsem, ali je možno tudi v tej spletni trgovini vplivati na cene izdelkov. Odgovor je da.

Pa kar dodajmo prvi izdelek, t.j. 32PF5331 + HTS-3300 domači kino, v košarico.

Opazna razlika med prvim in trenutnim primerom je ta, da tukaj kupec ne more izbrati poljubne količine izdelka, ampak so te zanj prenastavljene. Zakaj ta omejitev, mi ni znano, možno pa je, da je želel programer s tem omejiti zlorabe, česar pa dejansko ni dosegel. V primerih, ko so vrednosti v HTML elementih (konkretno HTML element <select name="valueAKCIJA10">) prednastavljene, pogosto ni opravljeno naprednejše preverjanje, saj je programer prepričan, da so vrednosti legitimne in se nikakor ne morejo spremeniti. Torej preverjanje za druge vrednosti, npr. negativne, ni potrebno. Takšne in podobne nepazljivosti lahko napadalcem ponudijo nove možnosti za zlorabe.

Torej, v košarici se nahaja izdelek 32PF5331 + HTS-3300 domači kino po ceni 261.900,00 SIT (1.092,89 EUR). Oglejmo si del izvorne kode generirane (prevedene) strani, ki nam pomaga razumeti, kako spletna trgovina deluje.

Že omenjeni HTML element <select name="valueAKCIJA10"> hrani opcije 1, 2, 3, 4 in 5, cena izdelka pa ni hranjena v nobenem elementu, torej bomo poskusili nanjo vplivati skozi spremenljivko "valueAKCIJA10". Izvorno kodo spletne strani shranimo na disk (kot HTML dokument) in jo odpremo v poljubnem urejevalniku besedil. V njej lociramo spremenljivko "valueAKCIJA10" in spremenimo vrednost zadnje njene opcije iz 5 na -1, kot prikazuje slika spodaj.

Preden nadaljujemo, moramo biti pozorni še na eno stvar. Spletne aplikacije se navadno pri metodah POST in GET sklicujejo na ustrezen modul, ki pa je največkrat v programski kodi naveden brez uporabe polnega imena naslovne vrstice. Modul basket.aspx, ki se uporablja v primeru, je potrebno klicati na strežniku na ustreznem naslovu. Ker smo spletno stran shranili na disk in jo bomo od tam tudi pognali, moramo v izvodni kodi seveda dodati tudi ustrezno pot do strežnika. K nizu "basket.aspx" (najbolje kar povsod) dodamo "http://www.jae.si/", stran shranimo in poženemo v svojem spletnem brskalniku.

Stran, ki jo program prikaže izgleda neurejeno, saj pri mnogih elementih manjkajo ustrezne poti do strežnika, ki jih nismo popravljali. Naj pa nas to ne moti, raje bodimo pozorni na vrednost "-1", ki se je pojavila v izbiri "Količina:". Ko jo izberemo, strežnik samodejno opravi osvežitev, ki jo povzroči parameter "onchange="submit()"". Preusmerjeni smo na spletni strežnik.

Opazimo, da smo dosegli negativno ceno, o negativno izbrani količini pa na tem mestu ni več sledu. Nadaljujemo z nakupom in v košarico dodamo še prenosni računalnik, pri čemer spet dosežemo pozitivnen znesek 169.980,00 SIT (709,31 EUR).

O uspešnosti izvedbe takšnega naročila bi težko sodil, menim pa, da bi ob naročilu recimo dvajsetih manjših artiklov do vrednosti 5.000,00 SIT zaposleni v podjetju hitro spregledali kakšnega z negativno količino, kar bi povzročilo brezplačno prejetje dveh enakovrednih artiklov!

Spletna trgovina JAE ne podpira poslovanja s kreditnimi karticami oz. z ostalimi oblikami spletnega plačevanja v realnem času, kar močno zmanjša morebitne zaplete pri tovrstnih napadih.

Naj predstavim še podoben primer, ki pa dopušča napadalcu, da sam oblikuje željeno ceno izdelkov.

Primer #3: Spletna trgovina Tengo Tennis

Odpravimo se na naslov spletne trgovine Tengo Tennis.

Spet na prvi pogled običajna spletna trgovina, napisana v programskem okolju ASP. Za analizo delovanja spletne aplikacije bomo uporabili dodatek za Mozzilo Firefox imenovan Web Developer. Ta združuje vrsto uporabnih orodij za analiziranje spletnih strani, ki so namenjena predvsem razvijalcem (in kajpak tudi napadalcem) mi si bomo podrobneje ogledali jeziček "Forms". Pregled nad t.i. oblikovnimi elementi (ang. forms) nam razkrije, da spletna aplikacija podatke o artiklih, med drugim tudi ceno artikla, v celoti hrani v skritih poljih (Type=hidden). Slednja niso vidna na spletni strani, navadno pa služijo za začasno hrambo spremenljivk. Če se v skritem polju hrani celo cena artikla, je zelo verjetno, da je spletna trgovina ranljiva na napad z manipuliranjem izvorne (prevedene) HTML kode z namenom vplivanja na prodajno ceno.

Spletno stran zopet, tako kot smo to storili v drugem primeru, shranimo na disk. V datoteki poiščemo vse ponovitve cene prvega artikla, ki znaša 41.990,00 SIT, in jo nadomestimo z novo ceno, ta naj bo 22.999,00 SIT (kot to prikazujeta spodnji sliki). Ne pozabimo poiskati tudi vrednosti, zapisane v obliki 41990.00!

Spletno stran si ogledamo lokalno v svojem spletnem brskalniku, izgledala bo neurejeno, zaradi že prej omenjenih težav, ki nastopijo zaradi lokalno navedenih poti do datotek na strežniku.

Kliknemo na povezavo "_cart/into_cart", ki bo dodala prvi artikel, teniški lopar Wilson n5 MP, s spremenjeno ceno v košarico.

Naročilo lahko po poljubni ceni tudi zaključimo. Ker spletna trgovina Tengo Tennis ne podpira negotovinskega plačevanja in pošlje vsa naročila svojim kupcem po pošti z odkupnino, je uspešnost te prevare vprašljiva. Če prodajalec ni dobro seznanjen z aktualnimi cenami svojih artiklov, obstaja možnost, da bo napačno ceno celo spregledal in naročilnice ne bo spreminjal.

S tem primerom pa tudi zaključujemo naše nakupovanje. Upam, da je bralec vsaj približno spoznal nekatere oblike napadov, ki se izvajajo na spletne aplikacije, ne nujno spletne trgovine. Upam tudi, da je kdo izmed bralcev tudi razvijalec spletnih aplikacij in je ob prebranem prišel do novih spoznanj, ki jih bo lahko spretno uporabil pri nadaljnjem razvoju.

Kako prepoznamo na to obliko napada potencialno ranljive spletne trgovine in kako pomanjkljivosti odpravimo?

Spletne trgovine, ki so ranljive na tovrstne oblike napadov so predvsem tiste, ki:

  • hranijo podatke o artiklih, vključno z njihovo ceno, v skritih poljih (HTML element TYPE=HIDDEN),
  • hranijo podatke o artiklih in vrednosti ostalih spremenljivk v piškotkih,
  • ne opravljajo naprednejšega preverjanja nizov v vnosnih poljih, kot je npr. polje "količina" in tiste, ki
  • jih razvija kader brez osnovnega poznavaja metod in tehnik napadov na spletne strežnike.

Nekatere spletne aplikacije bi zahtevale za svojo neoporečno delovanje njihov ponovni razvoj, medtem ko bi ostale zahtevale le nadgradnjo nekaterih modulov. Razvijalci naj vselej upoštevajo načelo, da se cene izdelkov, ki so naprodaj, ne hranijo v spremenljivkah, do katerih ima lahko uporabnik dostop. Spletne trgovine naj operirajo zgolj z šifranti izdelkov, cene na zaslonu naj bodo informativne, pri končnem izračunu pa naj se preberejo iz podatkovne baze in na tem mestu naj se obračunajo tudi vsi ostali popusti, vključno z upoštevanjem količine, ki pa naj bo vrednost, ki je vsesplošno legitimna. Če nad vnosnim poljem ni opravljeno naprednejše preverjanje vnešenih nizov, je lahko ta element spletne strani tudi sredstvo za doseganje medspletnega skriptiranja. Pri takšnih vnosnih poljih lahko napadalec doseže tudi prelitje v spremenljivki, ki ima lahko za rezultat prikaz sporočila o napaki. Ta lahko med drugim razkrije še kakšno drugo podrobnost o delovanju spletne aplikacije, npr. polno pot do modula v katerem se nahaja nabor pomožnih funkcij. O tem in onem pa kaj več kdaj drugič.

Viri

Temeljni vir znanja za članek predstavlja predavanje How To Break Web Software - A look at security vulnerabilities in web software, ki je dostopno na naslovu: http://video.google.com/videoplay?docid....

Uporaba tehnik, opisanih v zgornjem članku, na tujih straneh lahko predstavlja kaznivo dejanje (poskusa) goljufije po Kazenskem zakoniku Republike Slovenije (KZ 217).

Barvno upravljanje na spletu

Barvno upravljanje na spletu

Barvno upravljanje je proces pretvorbe barv za različne naprave tako, da so povsod videti enake. Poznamo ga iz skeniranja, fotografiranja, tiskanja, ipd. Tu gre za pomemben proces, brez katerega bi bili rezultati nezadovoljivi. Redkokdaj pa se vprašamo kako je s tem na spletu. Je barvno upravljanje ...

Preberi cel članek »

Gledanje digitalne TV (DVB-T) pod Linuxom

Gledanje digitalne TV (DVB-T) pod Linuxom

Ker je radiofrekvenčni spekter omejen, analogno oddajanje oz. analogni signali pa zasedajo preveliko pasovno širino, so se nekatere države leta 2006 dogovorile, da bodo TV hiše v prihodnosti oddajale samo še digitalni signal. Digitalni način oddajanja prinaša številne ...

Preberi cel članek »

Napredno googlanje

Napredno googlanje

Osnove Googla ste spoznali v prejšnjem članku. Tukaj bi se poglobili v drobovje. Za ogrevanje ponovimo staro snov: učinkovito iskanje se porodi, ko upoštevamo naslednja pravila: najprej izberemo najbolj očitno (če iščemo RADEON kartico, ne bomo vpisali grafična ...

Preberi cel članek »

Komentar: NLBjevih Petsto

Komentar: NLBjevih Petsto

Robert Škulj, 27-letni Kranjčan, je odkril varnostno luknjo v spletnobančniškem sistemu klik Nove Ljubljanske banke, preko katere je moč vdreti v bančne račune občanov ter iz njih prenesti denar na poljuben račun. Škulj je Novi Ljubljanski ...

Preberi cel članek »

Spreminjanje klicne identifikacije 101

Spreminjanje klicne identifikacije 101

Konec leta 2011 je več slovenskih medijev poročalo, da naj bi poslanka Državnega zbora Melita Župevc iz enega svojega mobilnega telefona prejela klic na svoj drugi mobilni telefon, javil pa naj bi se neznan moški glas. Na novinarska vprašanja so mobilni operaterji pojasnili, da takih primerov še niso ...

Preberi cel članek »