You are here: TUTWiki>Tietoturva/Tutkielmat>TalvitieT?>2008-27 (revision 2)
-- TuireTalvitie? - 23 Sep 2009

Tuire Talvitie:

Ohjelmistoturvallisuus, esimerkkinä Visual Studio 2005

1. Johdanto

Ohjelmistoturvallisuus on keskeinen osa tietoturvallisuutta. Ohjelmistojen uudet ominaisuudet voivat auttaa luomaan turvallisia ja vakaita sovelluksia ja monien työkalujen ja parannusten käyttäminen vaatii usein vain vähän ylimääräistä työtä.

Työssä käsitellään Visual Studio 2005:n tietoturvaominaisuuksia suhteutettuna TLT-3201 Tietoturvallisuuden jatkokurssilla esitettyihin periaatteisiin. Visual Studio 2005 on Microsoftin valmistama ohjelmankehitysympäristö, joka tukee useita ohjelmointikieliä. Visual Studio 2005 -välineellä voidaan tehdä esimerkiksi Windows-, web- ja mobiilisovelluksia, ja siihen voidaan myös integroida monien eri valmistajien täydennyksiä (msdn, 2008).

Tutkielma koostuu kuudesta osasta. Alkuosiossa määritellään ohjelmistoturvallisuus, pohjustetaan sen tärkeyttä ja esitellään Visual Studio 2005. Kolmannessa osiossa käsitellään turvallisten ohjelmien tekemistä. Neljänneksi perehdytään lyhyesti ohjelmien käyttöön, ja viidennessä osiossa käsitellään lyhyesti pahojen ohjelmien karsimista. Lopuksi on lyhyt yhteenveto käsitellyistä asioista.

2. Ohjelmistoturvallisuus ja sen merkitys

2.1 Ohjelmistoturvallisuus käsitteenä

Koskisen(2008) mukaan tietoturvaongelmien ”kuorma” aiheutuu siitä, että tietokoneohjelmat tekevät jotain, mitä niiden ei pitäisi tehdä, ja siksi ohjelmistoturvallisuudeksi voidaankin kutsua niitä pyrkimyksiä, joilla tällaisilta vääryyksiltä voitaisiin välttyä. Sassali(2007) opinnäytetyössään laskee ohjelmistoturvallisuuteen kuuluvaksi käytössä olevat käyttöjärjestelmät ja sovellusohjelmistot ja määrittelee tavoitteeksi varmistumisen ohjelmistojen laillisuudesta ja toimintavarmuudesta. Sassalin käsityksiä vahvistaa myös Kajava(2001), jonka mukaan ohjelmistoturvallisuudessa tarkastellaan yrityksen käyttämien tietokoneohjelmien suojaamiseen ja ohjelmien lisensointiin ja rekisteröintiin liittyviä asioita, ja sitä voidaan tarkastella joko ohjelmistojen sisäisten suojausominaisuuksien avulla tai erityisesti suojaamiseen tarkoitetulla ohjelmistolla.

2.2 Ohjelmistoturvallisuuden merkitys ja tarve

Kajavan(2001) mielestä tietoturva on helppo saavuttaa ohjelmallisilla sekä teknillisillä ratkaisuilla, sillä ohjelmistot ja tiedostot voidaan suojata salauksella ja tiedonsiirrossa voidaan käyttää salauksen ohella tietoturvaa tukevia protokollia. Kajavan(2001) mukaan on oleellista ymmärtää ohjelmistoturvallisuuden merkitys osana tietoturvan hallintaa, ja tätä merkitystä tulisi myös korostaa henkilöstölle sekä järjestää siihen liittyvää valmennusta ja koulutusta. Ohjelmistoturvallisuuteen otetaan tässä työssä päänäkökulmaksi se, miten saadaan aikaan turvallisia ohjelmia, mutta työssä tutkitaan myös miten pahat ohjelmat voidaan karsia joukosta.

Turvallisten sovellusten luomisessa ongelmaksi saattaa tulla ajanpuute. Tietoturva pitää kuitenkin ottaa huomioon, kun teemme sovelluksia koskevia päätöksiä. Visual Studio 2005 on hyvä työkalu tällaisiin ongelmiin, sillä se sisältää ominaisuuksia, jotka voivat helpottaa turvallisten sovellusten julkaisemista huomattavasti ja saattaa tehostaa huomattavasti sovellusten tietoturvaa. Visual Studio 2005:n avulla ohjelmistojen kehittäjien on entistä helpompaa kirjoittaa turvallisia ja vakaita sovelluksia (msdn, 2008).

3. Turvallisten ohjelmien tekeminen

3.1 Tietoturvallinen ohjelma

Kirjoitteilla olevan ohjelman tietoturvallisuuden varmistamiseksi on kolmenlaisia keinoja; hyviksi havaittujen ohjelmoinnin periaatteiden noudattaminen, huolellinen testaus ja formaalein menetelmin verifioiminen (Koskinen, 2008). Suurin osa alkuperäisestä koodista löydetyistä tietoturvaongelmista liittyy puskurin ylivuotoihin, jossa ohjelma tallentaa saamansa syötteen osittain sille varatun muistialueen ulkopuolelle.

Visual Studio 2005:n Buffer Security Check -kääntäjäasetus on suunniteltu auttamaan siinä, että haitalliseksi suunniteltua koodia voidaan estää hyödyntämästä puskurin ylivuotoja sovelluksissa, se asettaa salatun arvon puskurin loppuun ja arvo tarkistetaan koodin suorittamisen aikana (msdn, 2008). Arvon muuttuessa, ohjelman suoritus keskeytetään ja tehdään tietoturvapoikkeus, mikä pysäyttää mahdollisen kaappauksen (msdn, 2008). Visual Studio 2005:llä on lisäksi Safe CRT Libraries –kirjastot, jotka on suunniteltu parantamaan Visual Studio 2005:lla käännettyjen sovellusten tietoturvaa lisäämällä asianmukaiset puskurin tarkistukset hyökkäyksille tunnetusti alttiina oleville funktioille sekä heikentämällä tai poistamalla alttiina olevia suorituksenaikaisia funktioita (msdn, 2008).

3.2 Liittymä turvapalveluihin, GSS-API

Yleiskäyttöisen liittymän kautta on saatavissa myös turvapalveluita esim. API, application programming interface (Koskinen, 2008), jonka avulla ohjelmoijan on helpompi toteuttaa tietoturvallisempia ohjelmia. Visual Studio 2005:ssä Security in Zone rajoittaa IntelliSensen? tarjoamat vaihtoehdot vain niihin API-liittymiin, jotka tietyllä alueella sallitaan, mikä auttaa osittaista luottamussuhdetta käyttävien sovellusten kehittäjiä valitsemaan vain ne API-liittymät, joiden tiedetään olevan sallittuja tietylle vyöhykkeelle (msdn, 2008).

3.3 Kääreohjelmat ja krypto-ohjelmointi

Koskisen (2008) mukaan pääsynvalvontaa voi hoitaa ohjelmien ja resurssien väliin asennettavalla uudella ohjelmakerroksella eli kääreohjelmalla(wrapper). Laajasti ymmärrettynä wrapper -tekniikan voi ajatella tarjoavan monenlaista turvapalvelua, myös esim. Kerberos-autentikointi, SSL-salaus ja TCP -wrapper voidaan tulkita käärijöiksi (Koskinen, 2008). Kääreitä ei käytetä pelkästään suojautumaan pahantahtoisia vaan ainoastaan virheellisesti toimivia ajureita vastaan(Koskinen, 2008). Krypto-ohjelmien ytimenä on salaisena pidettävien avainten käsittely, kun turvataan arkojen tietojen kuljettamista tai pitkäaikaista säilytystä tai rakennetaan luottamusta erilaisten protokollien avulla(Koskinen, 2008).

PermCalc? on erillinen sovellus, jonka avulla .NET-kehittäjät analysoivat hallitun sovelluksen onnistuneeseen suorittamiseen vaadittavia käyttöoikeuksia, ja toiminto on nyt lisätty Visual Studio 2005:een (msdn, 2008). PermCalc?-apuohjelma tallentaa oletusarvot vyöhykkeelle, ja parantaa siten luotettavuutta.

3.4 Koodin hämäännyttäminen

Koodin luottamuksellisuuden suojamenettelyjen nimenä on hämäännyttäminen, 'code obfuscation'(Koskinen, 2008). Hämäännyttämisen onnistuminen on paljon kiinni siitä, miten arvaamattomalla tavalla sekoitus on tehty, ja sitä voidaan tehdä myös automaattisesti.(Koskinen, 2008). Hämäännyttämisen on teoriassa näytetty olevan mahdotonta, mutta joitakin hämäännyttämisen mekanismeja ovat: kryptatut tai pakatut koodin osat, joita ohjelma itse purkaa tarpeen mukaan, eheyden ym. tarkistusten tulosten vaikutusten hajauttaminen, turhat koodinosat, osoitteet yms. tai itseään muunteleva koodi, vakioiden paisuttaminen, bittien laittaminen tavujen pariteeteiksi: usean muuttujan multipleksaaminen yhteen, taulukoiden muunnokset, merkkijonojen piilottaminen: kokoaminen alijonoista tai satunnaisista merkeistä ja salaaminen jne.(Koskinen, 2008).

Visual Studio 2005:ssä AppVerifier? on joukko suorituksenaikaisia analysointitestejä, jotka auttavat tunnistamaan ohjelmien suoritusvirheitä(msdn, 2008). Application Verifier -toiminnon tunnistamat virheet liittyvät yleensä sovellusten yhteensopivuuden, vakauden ja tietoturvan ongelmiin(msdn, 2008).

3.5 Ohjelmien todentaminen

Ohjelmien oikeaksi todistaminen on vaikeaa ja melkein mahdotonta. Todistuksia voivat tehdä automaattiset teoreemantodistajat tai mallin tarkistajat(Koskinen, 2008). Voidaan tutkia vain joitain kriittisiä koodin vaiheita. Ohjelmakoodi voidaan myös varustaa todistuksella sen omasta oikeellisuudesta(Koskinen, 2008).

Code Analysis on Visual Studio 2005:n koodinanalysointiominaisuus, joka analysoi lähdekoodia, käy läpi jokaisen funktion kaikki mahdolliset suorituspolut ja simuloi suoritusta arvioidakseen kunkin polun mahdolliset ongelmat (msdn, 2008). Koodin analysointi ei suorita koodia eikä pysty löytämään kaikkia mahdollisia virheitä, mutta se saattaa löytää sellaisia virheitä, jotka kääntäjä voi jättää huomiotta(msdn, 2008).

3.6 Käyttäjäoikeuksista ja testauksesta

ClickOnce? on Visual Studio 2005:een rakennettu tekniikka, jonka avulla kehittäjien on helppo luoda sovelluksia otettavaksi käyttöön sellaisille käyttäjille, joiden tilien käyttöoikeudet ovat rajoitetut(msdn, 2008). Debug in Zone -ominaisuuden avulla kehittäjät voivat määrittää sovelluksen tarvitseman luottamuksen määrän suunnitellessaan sovellusta ja tehdessään sen virheenkorjauksen, mikä mahdollistaa sovelluksen testaamisen niin kuin se otettaisiin käyttöön verkkosijainnista eri luottamustasoja käyttäen. PermCalc? on taas erillinen sovellus, jonka avulla .NET-kehittäjät analysoivat hallitun sovelluksen onnistuneeseen suorittamiseen vaadittavia käyttöoikeuksia (msdn, 2008).

Yksikkötestauksen käyttötarkoitus on varmistaa, että menetelmän palautusarvo on odotettu ja menetelmälle välitettyjen arvojen mukainen ja kuormituksen testaamisen avulla voit tehdä virheenkorjauksen skenaarioille, kuten mahdollisille palvelunestohyökkäyksille (msdn, 2008).

4. Ohjelmien käyttäminen

Ohjelmistojen saatavuutta voidaan parantaa escrow -palvelulla, jossa ohjelmiston valmistajan asiakkaan lisäksi on kolmas osapuoli, joka tallettaa lähdekoodin ja luovuttaa sen asiakkaalle, jos valmistaja joutuu vaikeuksiin(Koskinen, 2008).

Kehittäjät ovat käyttäneet FxCop?-erillistyökalua jo vuosien ajan tarkistaakseen, että kokoonpanot ovat .NET Framework Design Guidelines -ohjeiden mukaisia ja työkalu on sisäänrakennettuna Visual Studio 2005:ssä (msdn, 2008). FxCop? tekee analyysin jäsentämällä MSIL-komentovirran ja etsimällä kutsugraafista käyttäjän määrittämien sääntöjen rikkomuksia muun muassa tietoturvasääntöjä, kirjaston suunnittelusääntöjä sekä globalisoinnin, yhteentoimivuuden, ylläpidettävyyden, nimeämisen, suorituskyvyn, luotettavuuden ja käytön sääntöjä (msdn, 2008).

NET Framework -sovellukset suoritetaan Code Access Security -tietoturvamallin alaisuudessa, joka on tilanteeseen perustuva malli, jossa tietoturvaoikeudet myönnetään kokoonpanon sijainnin ja allekirjoituksen sekä muiden vastaavien tekijöiden perusteella (msdn, 2008). Näitä tekijöitä verrataan käytäntöön, joka on määritetty käyttäjän, koneen tai toimialueen tasolla (msdn, 2008). Näihin eri tekijöihin liittyvät käytännöt mahdollistavat sen, että sovellukset suoritetaan käyttäen erittäin tarkasti myönnettyjä käyttöoikeuksia, jota kuvataan osittaiseksi luottamussuhteeksi.

5. Pahojen ohjelmien karsinta

Paha ohjelma on sellainen, joka on kirjoitettu pahoissa aikeissa ja niitä voi olla itsenäisiä tai ne voivat tarvita isäntäohjelman. Esimerkiksi loogiset pommit, salaluukut, Troijan hevoset ja virukset tarvitsevat isäntäohjelman ja bakteerit ja madot ovat itsenäisiä. Yhteinen piirre kaikille pahoille ohjelmille on, että ne pystyvät yhtä monipuolisiin suorituksiin kuin muutkin ohjelmat siinä ympäristössä, jossa ne esiintyvät (Koskinen, 2006).

Murtopakit ('rootkits') ovat taitavasti rakennettuja työkalukokoelmia, joiden avulla voidaan hyökätä automaattisesti tietokonejärjestelmiä vastaan sekä verkoitse että järjestelmän sisältä käsin (Koskinen, 2008). Murtopakin toiminnallisuudella on kolme eri päätarkoitusta, pääsymahdollisuuden ylläpitäminen, muihin järjestelmiin hyökkääminen ja todisteiden hävittäminen, ja lähtökohtana on saada järjestelmä toteuttamaan jokin komentojono ylikäyttäjän oikeuksin (Koskinen, 2008).

Koskisen(2008) mukaan verkossa voisi olla oma automaattinen immuniteettijärjestelmä, joka alkaisi kehittää vasta-aineita heti, kun jokin paha ohjelma on havaittu ja tällä tavoin epidemiaa ei pääsisi syntymään.

Yksi tapa, jolla tietokoneiden käyttäjät voivat estää haittaohjelmia vaikuttamasta järjestelmiinsä, on pienentää ohjelmien suorittamisen käyttöoikeustasoa. Aiemmissa Visual Studion versioissa oli vaikeaa luoda sovelluksia ja tehdä niiden virheenkorjaus, kun käytetyillä käyttäjätileillä oli rajalliset käyttöoikeudet. Tämä johtui siitä, että Visual Studio toimi itse parhaiten sellaisten käyttäjätilien kanssa, joilla on laajat käyttöoikeudet. Visual Studio 2005:ssä tätä on muutettu. Visual Studio 2005 toimii hyvin peruskäyttäjän käyttöoikeuksin, ja voit kehittää sovelluksia sekä tehdä niiden virheenkorjauksen tällä tavoin yhtä helposti kuin järjestelmänvalvojan tai virheenkorjauksen käyttöoikeuksilla. (msdn, 2008)

5. Yhteenveto

Tutkielma osoittaa, että erilaisten apuohjelmien ja työkalujen avulla voidaan saadaan aikaan turvallisia ohjelmia pienellä vaivalla. Visual Studio 2005 on hyvä esimerkki toimivasta ohjelmankehitysympäristöstä, joka parantaa ohjelmien luotettavuutta, turvallisuutta ja edellisten myötä myös laadukkuutta. Microsoft on jo nyt julkistanut uusia Visual Studio 2005:n kaltaisia ohjelmankehitysympäristöjä, jotka ovat kehittyneempiä kuin aikaisemmat versiot, joten ohjelmankehitysympäristöjen kehitys ja luonti tulevaisuudessa todennäköisesti kasvaa entisestään.

Lähteet

  • Sassali, H. Doing Business Safety in Russia – opinnäytetyö. Viitattu 28.9.2008.
Print version |  PDF  | History: r5 | r4 < r3 < r2 < r1 | 
Topic revision: r2 - 24 Sep 2009 - 01:28:01 - TuireTalvitie?
 

TUTWiki

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback