Raimo Raski

Raimo Raski

Penetration tester and security consultant
Share on facebook
Share on twitter
Share on linkedin
Share on xing
Share on whatsapp

Web-sovellusten tietoturvatesteissä toistuvasti vastaan tuleva ilmiö on ulkoisten resurssien (tietoturvaton) käyttö. Ulkoisista, kolmannen osapuolen lähteistä, yleensä eri CDN (Content Delivery Network) palveluista ladattujen resurssien, kuten Javascriptin, CSS:n tai fonttien käytössä itsessään ei ole mitään erikoista, mikäs sen mukavampaa kuin pultata asioita pikaisesti omaan sovellukseen ja säästää aikaa ja rahaa – tai rahaa ja rahaa, koska aika on tietysti rahaa. 

Yksinkertaisena esimerkkinä, lisätään omaan sovellukseen hyödyllinen skripti jonkun muun sivustolta, esim. xyz.tld/awesome-script.js, jolloin käyttäjän vieraillessa meikäläisen omassa sovelluksessa selainta käsketään lataamaan tuo mainittu skripti kolmannelta osapuolelta.

Potentiaalisia ongelmia ja riskejä ilmenee, kun xyz.tld/awesome-script.js:ään luotetaan sokkona, jolloin oman sovelluksen turvallisuus onkin nyt riippuvainen xyz.tld sivustosta. Jos xyz.tld sivusto esimerkiksi korkataan hakkerin toimesta – tai sivuston ylläpitäjä päättää kääntyä pimeälle puolelle, xyz.tld/awesome-script.js osoitteessa voikin yhtäkkiä olla jotain muuta kuin se hyödyllinen skripti ja nyt meidän oma sovelluskin on vaarantunut. Miten siis varmistetaan ettei näin käy? Vastaus on SRI.

Mikä SRI?

SRI, eli Subresource Integrity, eli aliresurssin integriteetti,
eli ulkoisen resurssin eheys, eli URE, eli SRI.

SRI on ”turvamekanismi”, jolla varmistetaan että ladattava resurssi on se mitä pitääkin olla – hashin (tiivisteen) avulla.  Samalla tavalla kuin sinä lataat koneellesi uuden hienon mediaplayerin asennustiedoston ja ennen kuin ajat sen exe-tiedoston, lasket tiedoston hashin ja vertaat sitä valmistajan ilmoittamaan hashiin. Joka kerta, tottakai. SRI on hashin tarkastus ulkoiselle resursille ja tuetut algoritmit ovat SHA-256, SHA-384 ja SHA-512.

Käytännössä

Kuvitellaan että awsome-script.js tiedoston sisältö on `abc`. Kirjainten `abc` SHA-384-tiiviste Base64 muodossa on `6NFCC0/0HD8SGG2JSpnhxKpoHaecRwB+na3s2eywSC7h4iRRDnSEB4wCifNDlrnD`. 

Turvaton tapa ladata esim. Javascript tiedosto kolmannen osapuolen lähteestä

				
					<script src="https://xyz.tld/awesome-script.js"></script>
				
			

Pähkinänkuoressa: käsketään selainta lataamaan tiedosto kyseisestä osoitteesta, oli sisältö haluttu ´abc´ tai mitä tahansa muuta.

This is the way

				
					<script 
	src="https://xyz.tld/awesome-script.js"
    integrity="sha384-6NFCC0/0HD8SGG2JSpnhxKpoHaecRwB+na3s2eywSC7h4iRRDnSEB4wCifNDlrnD"
	crossorigin="anonymous">
</script>
				
			
  • src: halutun tiedoston osoite
  • integrity: halutun tiedoston hash (SHA-384-tiiviste Base64 muodossa)
  • crossorigin: tämä attribuutti määrittelee ettei kyseistä skritpiä ladattaessa tarvita tunnuksia

Jos ladattavaan tiedostoon on tullut yhtäkään muutosta (abc on muuttunut acb), selain antaa virheen eikä tiedostoa suoriteta.

Nopea ja helppo työkalu SRI hashien generointiin: https://www.srihash.org/

Vaihtoehtoja SRI:lle? DIY. Tarjoa tarvittavat ulkoiset resurssit, kuten Javascript-kirjastot, paikallisesti. Tällä tavoin eliminoidaan ulkoisista tekijöistä johtuvat odottamattomat muutokset ja taklataan myös mahdolliset saatavuusongelmat – oman sovelluksen toimivuus ei enää ole riippuvainen xyz.tld:sta.  

Lopuksi

Ulkoisen resurssin käyttö tuo aina mukanaan riskinsä, vaikka se ladattaisiin tunnetulta toimittajalta (Google, Cloudflare jne.), samat fysiikan lait pätevät myös heihin – riskin todennäköisyys on toki alhaisempi. SRI:llä varmistetaan että resurssi mitä haetaan on itseasiassa se mitä halutaan, eikä jotain aivan muuta. Yksinkertainen, mutta tehokas turvamekanismi.   

Lisää aiheesta:

Redteaming - Search Engine

Red Teaming ja Recon

Recon and red teaming can be done separately, but they also work hand in hand. It may be a good idea for a company to do a thorough recon to understand the adversaries view on the organization – and this not only in the technical sense.

Read More »
Putsi in a secdevops hackathon

SecDevOps Hackathon

DevSecOps Hackathon DevSecOps Hackathon lyhyesti Hackathon on päivän mittainen intensiivinen hyppäys sovelluskehityksen tietoturvallisuuteen. Päivän aikana tutustutaan sovelluksia koskeviin uhkiin sekä teoriassa että käytännössä. Koulutus soveltuu

Read More »
OWASP Top-10 Application Risk

Mitä on pentestaaminen?

Yleinen web-sovelluksen tietoturvan arviointiin käytetty työkalu on tunkeutumistestaus. Rakkaalla lapsella on monta nimeä, ja tunkeutumistestaus tunnetaan myös nimellä pentest eli englanniksi penetration testing. Kyseessä on luvallinen simuloitu hyökkäys, jolla pyritään käyttämään sovellusta siten, että se voi olla vahingollista joko järjestelmälle, järjestelmässä olevalle tiedolle tai järjestelmää kättäville henkilöille.

Read More »
Raimo Raski

Raimo Raski

Penetration tester and security consultant
Share on facebook
Share on twitter
Share on linkedin
Share on xing
Share on whatsapp

ota yhteyttä

Pyydä rohkeasti lisätietoa. Vastaamme todennäköisesti nopeammin kuin osasit kuvitella.