Miikka Lehikoinen <mlehikoi@cc.hut.fi>

Katsaus www-ohjelmointiin ja sen riskeihin

Useimmille verkkosivujen tekijöille riittää HTML-standardin suomat mahdollisuudet kotisivujen tekemiseen. On kuitenkin myös niitä, joiden tarvitsee esim. käsitellä käyttäjän syöttämää dataa. Näitä Internetohjelmointityökaluja on paljon erilaisia. Niistä yleisimpiä ovat CGI:t, Java ja JavaScript sekä ActiveX.

CGI

CGI eli Common Gateway Interface on varmaankin yleisin Internetohjelmointityökaluista ainakin yrityskäytössä. Tämä johtuu siitä, ettei CGI vaadi selaimelta mitään erityistä tukea. CGI on vain tavallinen ohjelma, joka pyörii palvelinkoneella lukien standardi-inputia ja kirjoittaen standardioutputtiin. CGIt voivat lähettää selaimelle oikeastaan mitä tahansa: ääntä kuvia, HTML-dokumentteja jne.[1]

CGI-ohjelmat voidaan kirjoittaa esim. Unixin skriptinä tai C-kielellä, mutta reilusti yleisimmin käytetty ohjelma on kuitenkin Perl. Perlissä on mm. tehokas merkkijonojen käsittely.[2] Perl on tulkattu kieli, joka on optimoitu eripituisten tekstitiedostojen läpikäymiseen. Kieli muistuttaa paljon C:tä.[3]

CGI:n riskit

CGI:n riskit, toisin kuin muissa ohjelmointityökaluissa, kohdistuvat palvelun tarjoajaan. CGI-ohjelmat pyritään ohjelmoimaan mahdollisimma turvallisiksi, mutta erehdyksiä sattu. TKK:lla CGI-ohjelmien tekoa ei olekaan mahdollistettu juuri turvallisuussyistä.[4]

Mikäli CGI-skriptejä suoritetaan yleiskäyttöisillä tulkeilla, kuten Perl tai /bin/sh, ja nämä tulkit sijaitsevat CGI-bin -hakemistossa samoin kuin suoritettavat skriptit, tunkeilija voi päästä suoraan käsiksi tulkkiin ja suorittaa sekalaisia komentoja (toim. huom. esim. rm *).[5]

ActiveX

ActiveX -teknologia on Microsoftin kehityksen tulosta. ActiveX:n avulla voi parantaa sivujaan animaatiolla, dynaamisesti luodulla grafiikalla tai millä tahansa Windowsin ohjelmakomponentilla.[6] ActiveX:ään löytyy tuki ainakin Win95:n ja NT:n Microsoft Internet Explorerista [7]. ActiveX toimii siten, että asiakas (= client) lataa suorittavan ohjelman omalle koneelleen, jossa se ajetaan [8].

ActiveX:n riskit

ActiveX:n turvallisuudessa on otettu uusi lähestymistapa. Kielen ilmaisuvoiman rajoittamisen sijasta luotetaan luotettavaan lähteeseen. ActiveX-yrityksen mielestä mitään vakavampia turvallisuusriskejä ei pitäisi tulla, mikäli käyttää luotettuja lähteitä. [8]

Käytännössä ActiveX on kuitenkin suunnaton turvallisuusriski, sillä sen avulla pystyy asiakkaan koneelle tekemään paljon pahaa, jos haluaa. Esim. kiintolevyn formatoiminen on ActiveX:llä suorastaan triviaalia.[9]

Saksassa hakkerit demonstroivat televisiossa, mitä ActiveX:llä voi tehdä. He tekivät käyttäjiä houkuttelevan sivun. Kun tällä sivu vierailtiin Microsoftin Internet Explorerilla, ActiveX -kontrolli ladattiin uhrin koneelle. Tämä kontrolli pääsi käsiksi Quickeniin (ohjelma, jota käytetään sähköisessä pankkiasioinnissa) ja loi transaktion (= tilisiirron) uhrin pankkitiltä hakkereiden päättämälle pankkitilille. Microsoftin asiantuntijan (nimeä ei mainittu lähteessä) mielestä kaikkien käyttäjien tulisi tietää, että ActiveX:llä voi olla tällaisia sivuvaikutuksia.[10]

Toinen esimerkki on Kanadasta ja sen osalta poliisitutkinnat ovat vielä kesken. Verkkopaikka ilmoitti, että nakukuvien katseleminen on ilmaista. Tätä varten tarvittiin vain "ilmainen" katseluohjelma. Katseluohjelma ladattiin omalle koneelle, jossa se otti modeemista äänen pois, katkaisi yhteyden ja otti yhteyden Moldoviaan. Kanadassa oleva kone yhdistettiin siis Moldoviaan, jota kautta se oli yhteydessä pornopalvelimeen. Joillekin käyttäjille tuli jopa $1,200 laskut.[11]

Microsoft yritti ratkaista ActiveX:n turvallisuusongelmat aluksi koodin allekirjoittamisella. Tämä ei kuitenkaan ratkaissut turvallisuusongelmaa. Sitäpaitsi Microsoftin mielestä ActiveX:n turvallisuusriskit eivät ole sen kummemmat kuin normaalissa ohjelmassa, joka ladataan Internetistä.[12]

JavaScript

JavaScript on Netscapen yksinkertainen HTML-koodin sekaan kirjoitettava skriptikieli. Vaikka toiminnallisesti JavaScript eroaakin Javasta, on syntaksi kuitenkin hyvin samanlaista. Javascriptiä ei tarvitse kuitenkaan kääntää ennen ajamista.[13]

JavaScriptiä on kahta erilaista versiota: Asiakaspäässä oleva sekä serverin päässä oleva [14].

JavaScriptin riskit

Jos JavaScripti on selaimessa päälle kytkettynä, esim. sähköpostiosoitteen selville saaminen on helppoa. Tällaisella sivulla ollessaan, käyttäjä saa vain yhtäkkiä viestin "JavaScript Alert: You just sent mail..." [15]

JavaScriptiin ei liity tiettävästi vakavia turvallisuusriskejä kuten ActiveX:ään. Suurimman osan JavaScript turvallisuusrei'istä voi välttää käyttämällä Netscapen uusinta versiota [16].

Java

Java on Sun Microsystemsin vastikään kehitettämä rinnakkainen (= concurrent), luokkapohjainen, objektiorientoitunut kieli. Kielenä Java muistuttaa C++:aa, josta on poistettu monimutkaisimmat ominaisuudet, kuten ohjelmoijan kontrolloima dynaaminen muisti sekä osoitin aritmetiikka. Kirjoittamisen jälkeen Java-koodi käännetään tavukoodiksi, joka voidaan suorittaa asiakkaan koneella.[17] Vaikka Javan alkuperäisenä ideana olikin juuri laitteistoriippumattomuus, on Sun Microsystems kehittänyt Java-käyttöön optimoituja mikroprosessoreja. Koska esim. verkkotietokoneiden ohjelmat on tehty Javalla, saavutetaan näillä mikroprosessoreilla suuri tehoetu.[18]

Javan riskit

Javassa, kuten JavaScriptissä, kannattaa käyttää selaimesta uusinta päivitystä välttääkseen turvallisuusriskejä. Esim. vielä Netscape 2.2:ssa ilkeämielinen Java-ohjelmoija pystyi tekemään ohjelman, joka pystyi esim. lukemaan ja poistamaan käyttäjän tiedostoja. [19]

Vaikka Javasta onkin korjattu pahimpia turvallisuusaukkoja, saa Javalla kuitenkin tehtyä paljon kiusaa. Javan avulla saa selaajan kaatumaan ja myös sähköpostiosoitteen varastaminen onnistuu. Javan avulla voi myös tappaa toisia ohjelmasia (= applet) ja estää uusien ohjelmasten avaaminen.[20]

Yhteenveto

Tavallisen surffaajan kannalta CGI-ohjelmat ovat turvallisimpia, sillä ne eivät eroa käyttäjän kannalta tavallisista HTML-sivuista. Harvalla kotisivun omistajalla kuitenkaan on mahdollisuutta tehdä CGI-ohjelma (esim. TKK:ssa ei onnistu), mikä on vaikuttanut osaltaan Javan, JavaScriptin ja ActiveX:n yleistymiseen. Kolme viimeksi mainittua ovat toki myös ilmaisuvoimaisempia kuin CGI.

Javalla ei ole pahempia turvallisuusriskejä käytettäessä uusimpia selaimen versioita. Selaimen kaatuminen on varmaankin yleisin Javan turvallisuusvioista. Myös JavaScriptillä selaimen kaatuminen on omasta kokemuksestani hyvin yleistä, muttei siihenkään liity mitään ActiveX:ään verrattavissa olevia riskeä. ActiveX on kaikista vertailluista ohjelmointityökaluista riskialttein: riskinä on esim. kovalevyn formatoiminen.

Lähdeluettelo

1. What CGI scripts are (***)
< URL:http://www.bsn.usf.edu/~sanford/intro.cgi/what.html >

2. CGI and Perl (**)
< URL:http://www.enterprise.net/stars/Authoring/CGI/Perl.html >

3. What is Perl? (****)
< URL:http://perl.com/perl/info/synopsis.html >

4. CGI-ohjelmista (*)
< URL:http://www.hut.fi/WWW/Tools/cgi.html >

5. CERT(sm) Advisory CA-96.11 (**)
< URL:ftp://cert.org/pub/cert_advisories/CA-96.11.interpreters_in_cgi_bin_dir >

6. What is ActiveX? (**)
< URL:http://www.activex.com/PC/Ed/Misc/0,32,0-448-2,00.html >

7. Viewing ActiveX in Action (**)
< URL:http://www.activex.com/PC/Ed/Misc/0,32,0-448-3,00.html >

8. Safety and Security (**)
< URL:http://www.activex.com/PC/Ed/Misc/0,32,0-448-5,00.html >

9. Javascript and ActiveX Viruses (****)
< URL:http://www.cantrip.org/javirus.html >

10. Hostile ActiveX Control demonstrated (****)
< URL:http://catless.ncl.ac.uk/Risks/18.82.html#subj6 >

11. Malicious net software leads to big telephone bills (****)
< URL:http://catless.ncl.ac.uk/Risks/18.80.html#subj8 >

12. Risks of ActiveX (***)
< URL:http://catless.ncl.ac.uk/Risks/18.62.html#subj3 >

13. Mitä on JavaScript? (****)
< URL:http://www.hut.fi/~ssarkka/javascript/johdanto.html#javascript >

14. What is JavaScript? (****)
< URL:http://home.netscape.com/eng/mozilla/3.0/handbook/javascript/index.html >

15. Completely safe link - trust me! (****)
< URL:http://www.digicrime.com/noprivacy.html >

16. JavaScript security bugs (**)
< URL:http://www.mpimg-berlin-dahlem.mpg.de/~jacobs/javascript_security.html >

17. What is Java? (***)
< URL:http://www.sun.com/sunsoft/solaris/products/javavm/prod_spec.html >

18. JavaChipsTM (*)
< URL:http://www.sun.com/sparc/java/ >

19. Java security bugs (**)
< URL:http://www.mpimg-berlin-dahlem.mpg.de/~jacobs/java_security.html >

20. A Collection of Increasingly Hostile Applets (***)
< URL:http://www.math.gatech.edu/~mladue/HostileApplets.html >

Muita tietolähteita

Muita tietolähteitä on niin paljon, ettei kukaan ehdi lukea niitä kaikkia. Esimerkiksi uutisryhmissä keskustellaan näistä asioista paljon. Tässä on joitakin tietolähteitä:

alt.www.hotjava (***)
< URL:news://alt.www.hotjava >

comp.lang.java.security (****)
< URL:news://comp.lang.java.securit >

comp.infosystems.www.authoring.cgi (****)
< URL:news://comp.infosystems.www.authoring.cgi >

comp.lang.javascript (***)
< URL:news://comp.lang.javascript >

microsoft.public.activex.vinterdev (***)
< URL:news://microsoft.public.activex.vinterdev >