Asennamme tietokoneille ja puhelimiin sovelluksia, jotka haluavat oikeuden lukea näppäilyjämme ja katsella näyttöjämme. Ne haluavat oikeudet, koska ne ovat tottuneet saamaan ne. Vaikka ne eivät niitä aina tarvitsisikaan.

Syksyllä 2015 slovakialainen tietoturvayhtiö Eset paljasti nettipokeripöytiin kohdistuneen haittaohjelman, joka auttoi huijareita voittamaan jakoja urkkimalla vastapelaajien käsiä. Odlanor-niminen vakoiluohjelma (siirryt toiseen palveluun) ei yrittänyt tunkeutua pokerisivustojen palvelimille, vaan se asennutti itsensä pelaajien koneille ja jäi odottamaan.

Kun haittaohjelman saastuttama kone liittyi pokeripeliin suositulla pokerisivustolla, vakoiluohjelma nappasi kuvakaappauksen pelaajan ruudusta ja lähetti sen huijarille. Kuvasta huijari näki korttien lisäksi pelaajan nimimerkin, jonka avulla katala korttihai löysi samaan pöytään kynimään uhrinsa.

Odlanor levisi muiden troijalaisten haittaohjelmien tapaan vertaisverkoissa ja sivustoilla, jotka epävirallisesti jakavat ohjelmia ladattavaksi. Useat saastuneista ohjelmista oli suunnattu pokerinpelaajille, kuten esimerkiksi korttien todennäköisyyksiä laskeva Poker Calculator Pro -ohjelma.

Tarinan opetus on tuttu: Älä asenna tai käynnistä mitään ohjelmaa, jonka alkuperää et tiedä. Lataa ohjelmat vain luotettavan valmistajan virallisilta sivuilta, älä vertaisverkoista. Jätä epämääräiset sähköpostiliitteet avaamatta. Päivitä virustorjunta.

Mutta siihen mitä Odlanor teki pokerinpelaajien koneille, kykenee jokainen sovellus. Jokainen, jolle koneen käyttöjärjestelmä on myöntänyt oikeuden lukea näppäilyjä tai katsella näyttöä. Ja tietenkin käyttöjärjestelmä nämä myöntää, koska kyse on tavallisista oikeuksista, joita ohjelmat tarvitsevat toimiakseen.

Mutta miten on mahdollista, että taustalla pyörivä ohjelma voi ottaa ruutukaappauksia toisesta ohjelmasta? Miksi taustalla pyörivällä ohjelmalla on ylipäätään mahdollisuus päästä milloin vain käsiksi tietokoneen näyttöön? Minne muualle sillä on vapaapääsy?

Se, että kyseessä on haittaohjelma, ei selitä asiaa. Haitallisetkin ohjelmat joutuvat operoimaan käyttöjärjestelmien määrittämien sääntöjen mukaan. Vastaus kysymyksiin löytyy siis käyttöjärjestelmistä ja vielä tarkemmin niiden ohjelmointirajapinnoista.

Tässä kohtaa on hyvä selvittää, mistä käyttöjärjestelmissä on kyse.

Salaisuus rajapinnan alla

Tietokoneen tai vaikkapa puhelimen käyttöjärjestelmän tehtävä on valjastaa koneen fyysinen laitteisto sovellusten käyttöön. Käytännössä käyttöjärjestelmä tekee prosessoreista, muistisiruista ja niitä yhdistävistä johdoista toimivan laitteen, joka kykenee pyörittämään sovelluksia.

Käyttöjärjestelmän ansiosta sovellusten ei tarvitse itse keksiä, miten erilaisten tietokoneiden prosessoreja, näppäimistöjä tai näyttöjä käytetään. Sovelluksille riittää, että ne tietävät miten käyttöjärjestelmä toimii.

Nyt lähestytään ohjelmointirajapintaa.

Ohjelmointirajapinnat ovat tasoja, joissa eri sovellukset kohtaavat ja keskustelevat. Ohjelmointirajapinta paljastaa ohjelmoijalle juuri tarvittavan määrän käyttöjärjestelmän lainalaisuuksista, jotta hän voi rakentaa oman sovelluksensa käyttöjärjestelmälle.

Microsoft ei siis paljasta ohjelmistokehittäjilleen Windows-käyttöjärjestelmän koodia, vaan säännöstön, jonka avulla ohjelmat saadaan pyörimään. Microsoft kertoo, miten ohjelma pääsee käyttämään näyttöä tai ohjaamaan hiirtä, mutta ei sitä, miten tämä käytännössä tapahtuu.

Otetaan autovertaus. Tietokoneen fyysinen laitteisto on moottori. Käyttöjärjestelmä on moottoria hallinnoiva ajotietokone ja ohjaamo on ohjelmointirajapinta. Sovellus istuu kuskinpaikalle ja Microsoft kertoo, että kaasua painamalla auto liikkuu eteenpäin ja rattia kääntämällä suunta vaihtuu. Se mitä konepellin alla tapahtuu, jää vain Microsoftin tietoon.

Yksinkertaista, eikö.

Yllättävää on kuitenkin se, että kun käynnissä oleva sovellus istuu kuskinpaikalla painamassa kaasua, kaikki muut sovellukset nuokkuvat takapenkillä. Ne odottavat omaa vuoroaan päästä ajamaan, eivätkä kiinnitä huomiota ympärillä tapahtuvaan. Mutta kuten Odlanor-haittaohjelma osoittaa, ne aivan hyvin voisivat tarkkailla, mihin suuntaan kuskinpaikalla istuva ohjelma kääntää rattia tai kuinka kovaa se painaa kaasua milloinkin.

Kun sovellus on asennettu koneelle ja sille on annettu oikeudet ohjaamoon, ne oikeudet ovat oletetusti voimassa koko ajan. Tämä kaikissa moderneissa käyttöjärjestelmissä oleva toimintatapa mahdollistaa sen, että mikä tahansa ohjelma voi lukea kaikki näppäilyt tai ottaa kuvankaappauksen ruudusta ilman sen kummempia lupia. Eiväthän ne tietenkään tee sitä, vaikka kiusaus on varmasti suuri.

Toisinkin voisi olla

Hento eristys sovellusten välissä ei ole ongelma niin kauan kun kaikki koneelle asennetut ohjelmat ovat hyväntahtoisia. Jos haitallisia ohjelmia ilmestyy koneelle, virustorjunnan tehtävä on hoitaa asia. Tästä syystä kaikki tietoturva-asiantuntijat eivät ole huolissaan siitä, että käyttöjärjestelmät antavat sovellusten vapaasti kurkkia ympärilleen ohjelmointirajapinnassa.

On kuitenkin niitä, jotka pitävät käyttöjärjestelmien nykyistä toimintatapaa ongelmallisena tietoturvan kannalta. Puolalainen tietoturva-asiantuntija Joanna Rutkowska on jo pitkään peräänkuuluttanut eristyksen tarvetta käyttöjärjestelmien ohjelmointirajapintaan.

– On varmasti yksi asia, jota suurin osa Linux-käyttäjistä ei tiedä käyttöjärjestelmästään ja se on eristyksen puute graafisen käyttöliittymän tasolla ja miten tämä käytännössä mitätöi kaiken tietoturvan työpöydällä, Rutkowska kirjoitti blogissaan (siirryt toiseen palveluun) jo seitsemän vuotta sitten.

Rutkowska puhui siis juuri samasta ongelmasta tai ominaisuudesta, jonka avulla Odlanor-haittaohjelma pääsi käsiksi pahaa aavistamattomien pokerinpelaajien näyttöihin.

Ratkaisuksi Rutkowska tarjoaa käyttöjärjestelmää, joka lokeroi sovellukset erilleen ja antaa käyttäjälle mahdollisuuden hallinnoida niiden oikeuksia. Autovertausta jatkaen jokainen sovellus istutetaan omaan ohjaamoon tai käyttäjä saa valita, ketkä menevät samaan autoon. Rutkowskan luoma Qubes-niminen käyttöjärjestelmä on viidessä vuodessa kerännyt reilut 30 000 käyttäjää, joten mistään Windowsin syrjäyttäjästä ei ole kyse.

Ja toki Windows-käyttäjälle on tarjolla samankaltaisia työkaluja kuin mitä Qubes tarjoaa. Erilaiset palomuuriohjelmat mahdollistavat sääntöjen tiukennukset ohjelmointirajapinnassa, mutta harvalta kotikäyttäjältä löytyy osaamista säätää monimutkaisten ohjelmien asetukset kohdilleen.

Rajapintoja on joka puolella Ohjelmointirajapintoja on kaikkia. Käyttöjärjestelmän ja sovellusten välillä oleva rajapinta on vain yksi monesta. Twitterin ohjelmointirajapinta mahdollistaa sen, että voit helposti jakaa tämän jutun suoraan sovelluksesta, jolta tätä juttua luet. Lentoyhtiöiden tietokantojen ohjelmointirajapinnat mahdollistavat hintavertailusivustojen toiminnan. Nämä rajapinnat ovat yleensä kapeampia kuin käyttöjärjestelmien, koska niiden toimintovalikoima on paljon rajallisempi. Tämä ei kuitenkaan tee niistä immuuneja hyväksikäytölle. Dataskandaalissa rämpivä Facebook ilmoitti huhtikuun alussa (siirryt toiseen palveluun) tiivistävänsä useita ohjelmointirajapintojaan väärinkäytösten vuoksi. Esimerkiksi Facebook-tapahtumien rajapinta, joka mahdollisti tapahtumien lisäämiseen omaan henkilökohtaiseen kalenteriin, vuoti ulos myös tapahtuman osallistujalistan ja seinällä käydyn keskustelun.

Perimmäinen kysymys on, miksi käyttöjärjestelmät päästävät oletuksena kaikki sovellukset tarkkailemaan ohjelmointirajapintaa.

Ja perimmäinen vastaus kuuluu, että on kaikille helpompaa, kun ylimääräisiä esteitä sovellusten ja käyttöjärjestelmän välillä ei ole. Hommat toimivat varmemmin. Jos käyttäjälle annetaan mahdollisuus viilata jokaisen ohjelman jokaista oikeutta, säätäminen johtaa siihen, että lopulta sovellus ei toimi halutulla tavalla.

Rajapinnat tarkastelussa

Viime vuosina useat käyttöjärjestelmät ovat tiivistäneet ohjelmointirajapintojaan ja kiristäneet sääntöjään. Esimerkiksi Microsoft on sisällyttänyt uusimpaan Windows 10 -käyttöjärjestelmään ja siinä toimivaan Windows Defender -torjuntaohjelmaan ominaisuuksia Emet-suojaustyökalusta, jonka avulla sovellusten pääsyä koneen muistiin voidaan rajoittaa. Samalla käyttöjärjestelmän oletusasetuksia on kiristetty.

Joanna Rutkowska itse asiassa varovasti kehui Windowsia jo seitsemän vuotta sitten yrityksistä saada jonkinlainen eristys graafisen käyttöjärjestelmän tasolle. Tehtävää kuitenkin on jäljellä, kuten Odlanor osoitti.

Eivätkä uusimpaan käyttöjärjestelmään lisätyt suojausominaisuudet auta, jos käytössä on vanha versio. Analytiikkayhtiöiden eri arvioiden mukaan Windows-koneista vain noin 40 prosenttia pyörittää uusinta käyttöjärjestelmää. Sillä on saman verran käyttäjiä kuin yli kahdeksan vuotta sitten julkaistulla Windows 7:lla.

Mobiilipuolella suurin kehitys on tapahtunut Googlen Android-käyttöjärjestelmässä, joka oli vielä muutama vuosi sitten totaalinen villi länsi sovellusoikeuksien kanssa. Oikeuden päästä puhelimen joka kolkkaan sai, jos osasi kysyä. Parin viimeisen käyttöjärjestelmäpäivityksen aikana Google on alkanut vaatia sovelluskehittäjiltä tarkempia selvityksiä, mitä ne ohjelmointirajapinnasta hakevat.

Tämä ei tietenkään ole poistanut ongelmia. Viime kuussa paljastui, että Facebookin sovellukset keräsivät vuosien ajan Android-puhelimista metadataa aikoinaan heppoisasti rakennetun ohjelmointirajapinnan kautta. Vaikka Google myöhemmin tiukensi Androidin luparakennetta, Facebook pääsi yhä tietoihin käsiksi hyväksikäyttämällä aiemmassa järjestelmässä myönnettyjä oikeuksia.

Näennäistä läpinäkyvyyttä

Rajapintojen tiivistämisen ohella Google on tehnyt sovellusoikeuksista näkyvämpiä käyttäjilleen. Nykyään Android kysyy käyttäjältä sovellusta asennettaessa ja ensimmäistä kertaa käytettäessä, mitä oikeuksia hän haluaa sovellukselle antaa.

Kuvasovellus Instagram pyytää oikeutta käyttää puhelimen kameraa, mikrofonia, osoitekirjaa, puhelinta, sijaintia, tallennustilaa ja tekstiviestejä. Suoratoistopalvelu Spotify pyytää käyttöoikeuksia kameraan, mikrofoniin, osoitekirjaan, puhelimeen ja tallennustilaan.

Useimmista lupakategorioista voi suoraan päätellä, mistä on kyse. Tai ainakin tällainen tunne käyttäjälle tulee. Instagram haluaa saada oikeuden käyttää puhelimen kameraa ja mikrofonia, koska sovellus perustuu kuvien ja videoiden jakamiseen. Jotta jaettaviin kuviin voi lisätä sijainnin, sovellus tarvitsee oikeuden päästä käsiksi puhelimen sijaintitietoihin.

Mutta sijaintitiedot ovat muutakin kuin piste kartalla. Puhelimen anturit mittaavat myös korkeutta, joten sijaintitietojen perusteella voidaan karkeasti arvioida, missä kerroksessa puhelin on.

Googlea tiukempaa linjaa pitkään vetänyt Apple on jo kiristänyt sovellusten pääsyä puhelimen sijaintitietoihin. Uusimmissa iOS-käyttöjärjestelmissä käyttäjä voi estää taustalla pyörivien sovellusten pääsyn sijaintitietoihin. Nähtäväksi jää, antaako Apple tulevaisuudessa käyttäjilleen vielä laajemmat mahdollisuudet hallita taustalla pyörivien sovellusten oikeuksia.

Sijaintitiedot ovat hyvä esimerkki pintapuolisesti selkeästi määritelmästä, jonka taakse kätkeytyy monenlaisia ominaisuuksista. Sen sijaan osa oikeuskategorioista on suoraan epäselviä. Mitä tarkoittaa, että sovellus saa oikeuden puhelimeen tai tekstiviesteihin?

Yleisesti sovelluksen oikeus puhelimeen tarkoittaa sitä, että se osaa keskeyttää toimintansa, kun puhelin soi. Oikeutta päästä käsiksi tekstiviesteihin sovellus tarvitsee esimerkiksi silloin, kun palvelun käyttöönotto vaatii vahvistusviestin.

Tämänkin yksinkertaisen selitys herättää kysymyksiä. Vahvistuksen jälkeen sovelluksella ei välttämättä ole yhtään mielekästä syytä omata oikeuksia tekstiviesteihin. Silti oikeudet säilyvät sillä. Ja vaikka oikeuden myöhemmin eväisikin, sovellus on jo halutessaan ehtinyt ladata tiedot eteenpäin.

Tietenkään mitään oikeuksia ei ole pakko antaa, mutta usein sovellus ei toimi toivotulla tavalla ilman niitä. Jos ei muuta, niin ainakin Android yrittää tehdä läpinäkyväksi sen, mitä kaikkea sovellukset haluavat. Ja mitä kaikkea niille annetaan.

Päätösvastuu säilyy kuitenkin käyttäjällä. Ja kuten käyttöehtojen kohdalla, useimmat etsivät tekstin perästä Olen lukenut käyttöehdot ja hyväksyn ne -ruudun, klikkaa sitä ja jatkaa elämää. Me annamme oikeudet.

Koska niin kauan kun sovelluskehittäjät ovat luotettavia, ei ole mitään hätää.

Juttua varten on haastateltu tietoturva-asiantuntija Jyri Hovilaa ja Microsoftin teknologiajohtaja Mikko Viitailaa.