Javascript ründed
Viirusetõrje ja õigesti seadistatud tulemüür pakuvad head kaitset pahavara vastu, aga tihti jäetakse (peamiselt kasutaja mugavuse huvides) kaitsmata veebibrauser kui peamine aken välismaailma. Veebibrauser teeb ainult väljuvaid ühendusi ning kasutab ainult paari üksikut standardset porti, seetõttu on seda ka väga keeruline filtreerida.
Veebirünneteks kasutatakse mitmeid tehnoloogiaid, peamiselt Javascript, Flash ja Java appletid. Lähemalt räägime Javascript abil tehtavatest rünnetest.
Skriptisüst
Skriptisüst (cross-site scripting, XSS) on veebis levinud rünne, mille puhul lisatakse muidu normaalsele veebilehele ründekood (tavaliselt Javascript). Tänapäeval ei ole veebilehed enam sellised, et kogu sisu tuleb ühest serverist, sellest, mille aadressi te brauserisse sisestate. Enamik veebilehti kasutab sisu ka teistelt veebilehtedelt, olgu selleks pildid, skriptid (näiteks Google Analytics, Javascript raamistikud) või ka reklaam. Et kogu selline mujalt pärit sisu kasutaja privaatsust ei ohustaks, on kehtestatud reegel, et veebilehel laetud sisu saab ligi ainult sellele lehe osale (sisule), mis on laetud samast kohast. Täpsemat infot, sealhulgas seda, mida mõeldakse siin "sama koha" all, saab Same Origin Policy kirjeldusest. Selle piirangu tõttu ei saa näiteks veebilehele lisatud Facebooki sõprade vidin ligi antud veebilehe küpsistele, sest see on laetud teisest domeenist.
Skriptisüst ongi rünne just selle piirangu vastu. Skriptisüst kasutab rünnatava veebilehe nõrkusi, et lisada lehe enda sisse rünnet teostav koodijupp. Tulemusena käivitatakse see koodijupp rünnatava veebilehe kontekstis ning pääsetakse seetõttu kõigile selle ressurssidele ligi.
Skriptisüsti lihtsaim näide on hooletult kirjutatud foorum või otsingumootor, kus lisaks lihttekstile lubatakse kasutada ka HTML koodi. Nii saab ründaja <script> elemendi abil oma postitusse lisada koodi, mis siis iga seda postitust vaatava kasutaja õigustes käivitatakse. Näiteks saab nii varastada foorumi kasutajate küpsised ning nende abil nende sessiooni üle võtta.
Skriptisüst ise on ainult ründevektor. Kui ründaja suudab ohvri veebilehitsejas käivitada enda kontrolli all olevat Javascript koodi, siis saab ta sisuliselt üle võtta terve kasutaja veebilehitseja ja kui viimases on turvaauke, siis ka arvuti. Vt näiteks veebiründamise raamistikku BeEF (http://beefproject.com).
Päringuvõltsing
Teine taoline veebilehe rünne on päringuvõltsing (cross-site request forgery, CSRF). Kui skriptisüst kasutab ära kasutaja usaldust veebilehe vastu, siis päringuvõltsing toetub vastupidi veebilehe usaldusele kasutaja vastu. Päringuvõltsingu puhul käivitatakse (kasutaja teadmata) tema õigustes mingi koodijupp, mis ründab veebiteenust, kasutades ära olukorda, kus antud kasutaja on selle veebilehe poolt usaldatud (näiteks sisse logitud).
Päringuvõltsingu teostamiseks on vaja kasutaja õigustes mingi päring (koodijupp) käivitada. Selleks sobib näiteks eelpool mainitud skriptisüst või ka näiteks kasutaja meelitamine avamaks ründekoodi sisaldavat veebilehte. Viimase puhul võib näiteks meelitada kasutaja avama veebilehte, milles on järgmine kood:
<img src="http://pank.ee/ylekanne.php?kellelt=Ohver&kellele=Ründaja&summa=100" />
Viidatud aadress ei ole tegelikult küll pilt ja seega ohver oodatud pilti ei näe, küll aga tehakse vastav päring. Kui kasutaja on panka sisse loginud, siis võib see päring ka läbi minna.
SQL-süst
SQL on andmebaasi päringukeel, mille abil on võimalik andmebaasist infot pärida ja andmebaasi modifitseerida. SQL-süst ehk SQL injection võimaldab ründajal saada juurdepääsu teenuse andmebaasile. See rünne põhineb kasutajapoolsete sisendandmete ebapiisaval kontrollil, mis võimaldab sisestada veebivormidesse andmebaasi päringuid, mis siis teenuse andmebaasis käivitatakse. SQL-süst on üks levinumaid veebiründeid, selle ründe ajaloo kohta saab lugeda järgmiselt lingilt: 14 Years of SQL Injection and still the most dangerous vulnerability. SQL-süst on hästi selgitatud W3C veebilehel SQL Injection.
Harjutus: Tutvuge SQL-süntaksiga ja põhiliste käskudega. Seda saab teha kasutades järgnevat juhendit: SQL Syntax. Lisaks vaadake lühidalt SQL käsku "SELECT" ja käsku "WHERE".
SQL-süsti erijuht on pime SQL-süst. Sellise SQL-süsti korral ei näita veebileht ründajale päringu tulemust, aga näitab näiteks veateateid. Sellises olukorras saab ründaja ennustada andmebaasi sisu ja koostada selle põhjal päringuid, mis annavad siis vastavalt veateate kui päring oli vale või ei anna tulemust kui päring oli korrektne. Seega saab ründaja andmebaasist infot kätte ka olukorras kus päringutulemusi ründajale ei kuvata. Pimeda SQL-süsti kohta saab täpsemat infot OWASP-i veebilehelt: Blind SQL Injection.
Harjutus: Huvi korral võite proovida ka interaktiivset demo, aga see nõuab info sisestamist. Samas lähevad telefoninumbri kontrollist läbi ka suvalised numbrid ning emaili aadressi ei kontrollita: https://free.codebashing.com/free-content/python/sql_injection.
Vältimine
Kahjuks ei ole just väga palju asju, mida kasutaja saab teha skriptisüsti või päringuvõltsingu vältimiseks. Lihtsaim lahendus on Javascripti välja lülitamine (täielikult või osaliselt mingite veebilehitseja lisade abil). Seda saab teha näiteks brauseri laiendusega NoScript, mis blokeerib JavaScripti ja suudab tuvastada XSS ründeid. JavaScripti keelamine brauseris on üks parimaid viise kaitsmaks ennast tänapäevaste rünnete eest. Samas kasutatakse JavaScripti väga paljudel veebilehtedel ja JavaScripti keelamine muudab paljude veebilehtede kasutamise võimatuks või ebameeldivaks. Seega on vaja teha valik kasutusmugavuse ja turvalisuse vahel. Üheks lahenduseks on see, et turvakriitiliste ülesannete jaoks on eraldi arvuti, milles JavaScript on keelatud. Kui turvalisus on oluline, siis võib alternatiivina igapäevaseks Interneti tarbimiseks kasutada virtuaalmasinas olevat brauserit ja turvakriitiliste ülesannete jaoks teist virtuaalmasinat.
Lisaks sellele aitab päringuvõltsingu vastu mittevajalikest teenustest välja logimine. Ka veebilehitsejad püüavad automaatselt neid ründeid vältida ja kasutajat hoiatada, aga see ei toimi 100%-liselt.
Kõigi nende rünnete vastu saavad veebilehe haldajad ise kaitsta. Skriptisüsti ja SQL-süsti vastu aitab kasutaja sisendi range valideerimine. Kui HTML kood foorumi postituses pole absoluutselt vajalik, siis on mõistlik see tugi välja lülitada. Kui seda on siiski vaja, siis tuleb väga põhjalikult kasutaja sisendit kontrollida.
Päringuvõltsingu vastu aitab näiteks see, kui tähtsate päringute puhul (näiteks rahaülekanne) küsida samas päringus uuesti ka kasutaja parooli. Kahjuks on see kasutaja jaoks tülikas. Aitab ka see, kui igale veebilehe poolt pakutavale vormile/lingile genereeritakse kaasa unikaalne tunnus (CSRF token), mille olemasolu päringus serveris siis kontrollitakse. See garanteerib, et päringud saavad tulla vaid valiidsetelt veebilehtedelt. Kahjuks võimaldab skriptisüsti olemasolu sellest kontrollist kõrvale hiilida.
Kui tegemist ei ole just eritellimusel lahendusega, siis kõige parem, mida vaabilehe haldaja teha saab, on oma veebirakenduse tarkvara (ja loomulikult ka serveri tarkvara) regulaarselt uuendada. RIA küberturvalisuse teenistuse 2016. aasta kokkuvõtte (pdf) kohaselt põhjustab enamiku küberintsidentidest just aegunud tarkvara:
Viited
- Same Origin Policy
- Cross-site scripting
- Näidisleht XSS vigadega: https://xss-game.appspot.com/
- Veebiründamise raamistik BeEF: http://beefproject.com/
- Cross-site request forgery
- OWASP Top 10