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
>