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

Tuire Talvitie:

Ohjelmistoturvallisuus, esimerkkinä Visual Studio 2005

1. Johdanto

Ohjelmistoturvallisuus on keskeinen osa tietoturvallisuutta. Tekniikan nopean kehittymisen myötä ohjelmistoturvallisuus on tullut yhä ajankohtaisemmaksi.

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ä mm. Windows-, web- ja mobiilisovelluksia [1].

Tutkielma koostuu neljästä osasta. Toisessa kappaleessa määritellään, mitä ohjelmistoturvallisuus pitää sisällään. Kolmannessa osiossa käsitellään ohjelmistoturvallisuuden vastuualueita, ja peilataan niitä luvun lopussa harjoitustyön esimerkkiin Visual Studio 2005:een. Kolmannessa kappaleessa on tarkoitus esitellä vastuualueet yleisellä tasolla ilman syvempää perehtymistä. Lopuksi on lyhyt yhteenveto käsitellyistä asioista ja mahdolliset päätelmät.

2. Ohjelmistoturvallisuus

Koskisen 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ä [2]. Sassali 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 [4]. Sassalin käsityksiä vahvistaa myös Kajava, 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 [3].

Ohjelmistoturvallisuuden voidaan katsoa muodostuvat seuraavista:
  • ohjelmistojen ja tietokonearkkitehtuurin muodostamasta hierarkkisesta koneesta ja sen turvallisuudesta
  • sovelluksista ja niiden muodostamista ohjelmistoturvallisuuden eri osatekijöistä kuten käyttöjärjestelmistä ja niiden turvallisuudesta
  • kääntäjistä, tulkeista ja niiden turvallisuudesta
  • sovellusten omista tietoturvaominaisuuksista
  • tietokoneviruksista
  • ohjelmistojen sisältämistä salaporteista. [5]

3. Ohjelmistoturvallisuuden vastuualueet

Ohjelmistoturvallisuuden vastuualueeseen lasketaan kuuluvaksi ohjelmistojen tunnistamis-, pääsynvalvonta, varmistusmenettelyt, eristäminen, tarkkailu- ja paljastustoimet, lokitiedon kerääminen, ohjelmistojen turvallisuustoimet ja laadunvarmistus sekä niiden ylläpitoon ja päivitykseen liittyvät turvallisuustoimet. [5]

3.1 Tunnistamisvalvonta ja varmistusmenettelyt

Tunnistamisominaisuuksia ohjelmistossa ovat vastapuolen tunnistus ja käyttöoikeuksien hallinta [5]. Tunnistamista voidaan ohjelmissa tehdä mm. avainten hallinnalla. Avaintenhallinta (key management) on toimintaa, jonka tarkoituksena on mahdollistaa avaimia edellyttävä kommunikaatiosuhde sellaiseen oikeutettujen osapuolten välillä. Avaimilla tarkoitetaan paitsi julkisia ja symmetrisiä avaimia, myös alustusarvoja ja muita kryptoalgoritmien parametreja. Avaimen turvatalletus, "key escrow", on järjestelmä jossa kolmas osapuoli pystyy saamaan selville kryptoavaimen. Tämä on hyvinkin tarpeellista, jos tärkeä avain (tai salasana) katoaa, tai ne jotka sen tietävät, ovat kykenemättömiä (tai haluttomia) kertomaan sitä. [2]

Julkisen avaimen infrastruktuuri voitaisiin rakentaa luotettavasti ylläpidettävien ja jaeltavien avain-nimi -luetteloiden varaan, mutta käytännössä varmennejärjestelmä PKI:lla tarkoitetaan sellaista järjestelmää, joka hallinnoi julkisia avaimia ja niiden varmenteita. [2]

3.2 Pääsynvalvonta

Pääsynvalvonnan tehtävänä on autentikoinnin lisäksi tarkastaa, mihin käyttäjällä on oikeudet, ja pitää huoli, että hän pysyy niiden rajoissa ja maksaa mahdolliset käyttömaksut. Politiikka voi edellyttää tietojen ja käyttäjien luokittelua eri ryhmiin ja kieltää sen mukaisesti pääsyjä. Tällaista keskusjohtoisesti asetettua pääsynvalvontaa sanotaan pakolliseksi pääsynvalvonnaksi ('mandatory access control', MAC). Pakollisen pääsynvalvonnan lisäksi voidaan soveltaa käyttäjien asettamia vapaaehtoisia oikeuksia. Tällainen käyttäjän hallinnoima pääsynvalvonta on tyypiltään harkinnanvarainen ('discretionary', DAC). Ilman sitä saman ryhmän toimijat eivät voisi varjella toisiltaan omia tietojaan. MAC:n ja DAC:n välimuotona voi näyttäytyä 'nondiscretionary controls', jolla tarkoitetaan rooli- tai tehtäväperustaista pääsynvalvontaa. Pääsynvalvonnan ryhmittelyrakenteen soveltaminen erityisesti sotilassovelluksissa lähtee liikkeelle "need-to-know" -periaatteesta, jossa kullekin pyritään järjestämään pääsy vain sellaiseen tietoon, joka on tarpeen tehtävien hoitamiseksi. [2]

Pääsynvalvontaa voidaan toteuttaa monilla menetelmillä, esimerkiksi KeyNotella? ja kääreohjelmilla. KeyNote? on ohjelma, jolla resurssien vartijat voivat "ajaa" käyttöoikeutta pyytävien toimittamia valtuustietoja ja tehdä päätelmän myönnetäänkö oikeus. Se on keino järjestää pääsynvalvonta sellaisessa hajautetussa järjestelmässä, jossa olisi vaikea rakentaa asianmukaista ACL:ää eli pääsylistaa. Ongelmana nimittäin voi olla, että resursseja halutaan antaa sellaistenkin käyttöön, joita ei alun perin tunneta. [2]

Koskisen 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. Kääreitä ei käytetä pelkästään suojautumaan pahantahtoisia vaan ainoastaan virheellisesti toimivia ajureita vastaan. 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. [2]

Kiinan muuri -malli koskee pääsynvalvonnan sääntöjä tilanteessa, jossa konsulttiyrityksellä on asiakkaina useita muita yrityksiä, joista osa on kilpailijoita keskenään. Tavoitteena on muotoilla tiedon luokitukset ja pääsyoikeudet siten, ettei pääse syntymään sellaista tietovuota, joka aiheuttaa intressien ristiriidan. [2]

3.3 Eristäminen

Jos järjestelmässä on moneen eri turvatasoon (tai turva-alueeseen) kuuluvia olioita, on selvää, että niitä pitää jotenkin pitää erossa toisistaan, jotta tietoa ei pääsisi kulkeutumaan pääsynvalvonnan tavoitteiden vastaisesti. Menetelmiä tähän tarkoitukseen ovat esimerkiksi:
  • Kryptografinen erottelu: salattu tieto on hyödytöntä asiattomille. Pitää tietysti varoa, etteivät he pääse sotkemaan sitä. Lisäksi pitää huolehtia avainten päivittämisestä, kun turvakategorioiden jäsenistössä tapahtuu muutoksia.
  • Paloitteleva erottelu: olio jaetaan "käsittämättömiin" osiin jotka käsitellään eri paikoissa tai eri aikoina (tai: siirretään eri reittejä tai talletetaan eri paikkoihin). Tulokset yhdistämällä saadaan aikaan haluttu olion käsittelytulos.
  • Looginen erottelu, eristäminen: jokaisen olion "tietoisuus" rajoitetaan niihin kohteisiin, joihin niillä on oikeus. Tämän toteuttaa viitemonitori, joka käyttäen mm. rajattuja osoiteavaruuksia ja virtuaalimuistia. Ne ovat käypä keino myös silloin kun täytyy vain pitää erossa toisistaan samantasoisia eri käyttäjiä. [2]

Piilokanavat ('covert' eli 'subliminal channels') ovat ilmiö, jolla erotteluja murretaan. Tietoa välitetään redundanssin tai jonkin oheisilmiön kautta niin, ettei sitä voi asiasta tietämätön havaita selkokielestäkään. [2]

3.4 Lokitiedon kerääminen, tarkkailu- ja paljastustoimet

Tarkkailu- ja paljastamistoimenpiteitä ovat mm. lokien pitäminen ja virustorjunta [5].

Loki tarkoittaa systemaattisesti pidettyä päiväkirjaa eli sellaista kirjanpitoa, johon on aikajärjestyksessä lisätty merkintöjä tietynlaisista tapahtumista. Käyttöjärjestelmät ja monet muut ohjelmat luovat lokeja. Ne ovat tärkeitä kun halutaan tietää, miten johonkin outoon tilanteeseen päädyttiin, vaikka kyseessä ei olisikaan tahallinen tietoturvaloukkaus. Lokitiedostot ovat tyypillisesti hyvin suuria ja niiden lukemiseen ja tulkintaan tarvitaan yleensä erillisiä ohjelmia, vaikka ne voivatkin olla tekstimuotoisia. Sen lisäksi että asianmukaisia lokitietoja kerätään ja niitä jaksetaan ihmisvoiminkin tarkastella, hyökkääjän toimien havaitsemiseksi on oleellista, että lokeja ei pääse peukaloimaan. Erityisesti lokeihin kirjoittamisen pitäisi aina olla vain append -tyyppistä eli perään kirjoittamista. Lokitietoja voidaan käyttää tietojärjestelmään tunkeutumisen havaitsemisessa, jäljittämisessä ja syyllisten saamisessa vastuuseen siitä. [6]

Tarkkailua toteutetaan mm. virustorjunnan avulla. Virustorjuntaohjelmia on laaja valikoima, ja oleellista on huolehtia, että virustorjunta on ajan tasalla. On olemassa myös tunkeilijan havaitsemisjärjestelmä, joka voi olla konekohtainen tai verkkopohjainen. IDS eli Intrusion Detection System on ohjelma tai joukko ohjelmia, joka tarkkailee tietojärjestelmää ja turvaloukkauksen havaitessaan raportoi siitä tai puuttuu siihen [2].

3.5 Laadunvarmistus

Laadunvarmistusta ovat eheyden varmistaminen ja luotettavien ohjelmien hankinta sekä virustensuojaus. Tärkeissä ohjelmissa ja käyttöjärjestelmissä laadunvarmistumista on myös lähdekoodin hallussa pitäminen. Laadunvarmistaminen takaa hyvän toimintavarmuuden. Se myös pyrkii siihen, että sekä laitteet että ohjelmistot tulee jo suunnitteluvaiheessa tehdä luottamuksellisesti ja turvallisuusvaatimusten mukaisesti ja niiden tulee sisältää turvallisuusvaatimusten mukaiset toiminnot. [5]

3.6 Tietoturvaominaisuudet Visual Studio 2005:ssä

3.6.1 Käyttöoikeuksiin liittyvät tietoturvaominaisuudet

Tietokoneiden käyttäjät voivat estää haittaohjelmia vaikuttamasta järjestelmiinsä pienentämällä ohjelmien suorittamisen käyttöoikeustasoa. Järjestelmänvalvojan oikeuksilla haittaohjelma pystyy käyttämään kaikkia tietokoneen osia. Yleisen tietoturvan näkökulmasta järjestelmänvalvojan oikeuksia edellyttävää suorittamista tulee välttää. Lisäksi järjestelmänvalvojan oikeuksin kirjautuneet kehittäjät eivät huomaa ongelmia, jotka rajoitetumpia käyttöoikeuksia käyttävät käyttäjät kohtaavat suorittaessaan sovelluksen. Visual Studio 2005 on muutettu niin, että se toimii hyvin peruskäyttäjän käyttöoikeuksin. [1]

Muitakin käyttöoikeusominaisuuksia on lisätty Visual Studio 2005:een. 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. 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 kehittäjät analysoivat hallitun sovelluksen onnistuneeseen suorittamiseen vaadittavia käyttöoikeuksia. [1]

3.6.2 Tarkistuksiin ja virheisiin liittyvät tietoturvaominaisuudet

Safe CRT Libraries -kirjastot parantavat 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. [1]

AppVerifier on joukko suorituksenaikaisia analysointitestejä, jotka auttavat tunnistamaan ohjelmien suoritusvirheitä. Toiminnon tunnistamat virheet liittyvät yleensä sovellusten yhteensopivuuden, vakauden ja tietoturvan ongelmiin. [1]

Buffer Security Check -kääntäjäasetus (/GS) auttaa estämään haitalliseksi suunniteltua koodia hyödyntämästä puskurin ylivuotoja sovelluksissa. Suuri osa koodin heikkouksista on puskurin ylivuotoja. Asetus asettaa salatun arvon (testiarvon) puskurin loppuun. Tämä arvo tarkistetaan koodin suorittamisen aikana. Jos arvo on muuttunut, ohjelman suoritus keskeytetään ja tehdään tietoturvapoikkeus. [1]

Code Analysis on ohjelmistokehittäjille suunniteltu ominaisuus. 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. [1]

FxCop tekee analyysin jäsentämällä MSIL-komentovirran ja etsimällä kutsugraafista käyttäjän määrittämien sääntöjen rikkomuksia. Näitä sääntöjä ovat muun muassa tietoturvasäännöt, kirjaston suunnittelusäännöt sekä globalisoinnin, yhteen toimivuuden, ylläpidettävyyden, nimeämisen, suorituskyvyn, luotettavuuden ja käytön säännöt. [1]

3.6.3 Testauksiin liittyvät tietoturvaominaisuudet

Tietoturvaongelmien testaaminen on erittäin tärkeä osa sellaisen sovelluksen luomista, joka on tarkoitettu käytettäväksi verkkoon yhteydessä olevissa ympäristössä. Visual Studio 2005 sisältää useita testaustyökaluja. [1]

Yksikkötestauksen käyttötarkoitus on varmistaa, että menetelmän palautusarvo on odotettu ja menetelmälle välitettyjen arvojen mukainen. Yksikkötestien avulla voi lähettää satunnaista tietoa funktiolle ja varmistaa, että sovellus käsittelee tiedot oikealla tavalla ja toimii odotetusti. Lisäksi yksikkötesteissä voidaan ottaa käyttöön koodikattavuus. Koodikattavuus auttaa varmistamaan, että sovelluksen koodi on testattu. Kuormituksen (suorituskyvyn) testaaminen on tärkeää, koska sen avulla voi tehdä virheenkorjauksen skenaarioille, kuten mahdollisille palvelunestohyökkäyksille. [1]

3.6.4 Muita tietoturvaominaisuuksia

Yleiskäyttöisen liittymän kautta on saatavissa myös turvapalveluita esim. API, application programming interface, jonka avulla ohjelmoijan on helpompi toteuttaa tietoturvallisempia ohjelmia [2]. 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. [1]

5. Yhteenveto

Harjoitustyö osoittaa, että ohjelmistoturvallisuutta voidaan parantaa huomattavasti erilaisten apuohjelmien ja työkalujen avulla. Erilaisten ominaisuuksien avulla voidaan hallita paremmin käyttöoikeuksia, tehostaa tarkistuksia ja esimerkiksi huomata helpommin virheet koodissa. 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. Lisäksi monien työkalujen ja parannusten käyttäminen helpottuu jatkuvasti. Edellisten perusteella voimme päätellä, että ohjelmankehitysympäristöjen kehitys ja luonti tulevaisuudessa todennäköisesti lisääntyvät entisestään. Uudet ominaisuudet voivat piankin olla jopa edelläkävijöitä markkinoilla.

Lähteet

  • [1] Visual Studio 2005:n uudet tietoturvaominaisuudet. Viitattu 2.10.2009. Saatavissa: msdn
  • [2] Koskinen, J. 2009. Tietoturvallisuuden jatkokurssi. Viitattu 2.10.2009. Rajoitettu saatavuus: Tietoturvallisuuden jatkokurssi. s.83-98.
  • [3] Kajava, J. 2001. Ohjelmistoturvallisuus verkkoympäristössä – valtapeliä vai mystiikkaa. Viitattu 28.9.2008. Saatavissa: Ohjelmistoturvallisuus verkkoympäristössä
  • [4] Sassali, H. Doing Business Safety in Russia – opinnäytetyö. Viitattu 28.9.2008.
  • [5]Teeriaho, J. Laitteistoturvallisuus, ohjelmistoturvallisuus.Viitattu 3.10.2009. Saatavissa: Ohjelmistoturvallisuus
  • [6] Koskinen, J. 2009. Tietoturvallisuuden perusteet. Viitattu 3.10.2009. Rajoitettu saatavuus: Tietoturvallisuuden perusteet. s.102
  • [7] Koskela, M. Mittaaminen luotettavien ohjelmistotuotteiden kehitysvälineenä. Viitattu 15.11.2009. Saatavissa: Ohjelmistokehitysympäristö. s.74
Print version |  PDF  | History: r5 < r4 < r3 < r2 | 
Topic revision: r4 - 15 Nov 2009 - 19:49:46 - 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