TTKK / J.Koskinen / Tietoturvallisuuden perusteet, 2002

Käyttöjärjestelmistä

Sisältö
Käyttöjärjestelmään perinteisesti liittyviä turva-asioita
[1] Tunkeutumisen havaitseminen
[2] Tunkeutumisen havaitsemismenetelmien luokittelua
Näkökulmia luotettuun käyttöjärjestelmään

Käyttöjärjestelmään perinteisesti liittyviä turva-asioita

Motivointia

Yksinkertaisenkin tietokoneen käyttöjärjestelmällä on tehtäviä, joiden merkitys on tärkeä tietoturvallisuuden kannalta. Kyseessä ovat lähinnä muistin ja prosessien hallinnan rutiinit, joita ei yleensä tulla ajatelleeksi osana tietoturvaa. (Myös tiedostonhallinnalla on vastaavaa merkitystä, mutta sitä ei käsitellä täsä yhteydessä.)

Sisältöä ja tavoitetta

Katsotaan lyhyesti, mitä keinoja "tavallisella" käyttöjärjestelmällä on pitää prosessi aisoissa, erityisesti miten muistiviittaukset pidetään erossa muiden prosessien käyttämästä muistialueesta.

Tavoitekysymyksiä. Näistä jälkimmäinen ensin toistaa ensimmäistä mutta jatkaa sitten eri suuntaan. Kumpikin edellyttää kytkentöjä toisaalla käsiteltyihin aiheisiin. Muihin on luontevaa tutustua ennen tätä jaksoa, mutta TCB-käsitteeseen tämän jälkeen.

  • Millä tavoin käyttöjärjestelmän toteuttamalla muistinhallinnalla (segmentoinnilla, sivutuksella, virtuaalimuistilla yms.) on merkitystä tietoturvan kannalta? Mikseivät tällaiset asiat yleensä ilmene edes alimman tason tietoturvapolitiikassa, joita tietotekniikkaa hyödyntävä yritys laatii? Mitä tekemistä asiassa on käsitteellä 'trusted computing base' (eli TCB)?
  • (a) Mitä merkitystä käyttöjärjestelmän toteuttamilla keskusmuistin ja prosessien hallinnan matalankin tason rutiineilla on tietoturvallisuuden kannalta?
    (b) Kohdassa a mainitut seikat eivät yleensä tule näkyviin tietoturvapolitiikoissa, mutta tiedostonhallinnasta löytyy sellaisia käyttöjärjestelmän tehtäviä, joita voidaan säännellä politiikkaan kirjattavilla päätöksillä. Keksi kaksi esimerkkiä.
    (c) Myös a-kohdassa mainittu prosessien hallinta tulee tietoturvapolitiikan piiriin, jos sitä katsotaan hieman korkeammalta tasolta, esim. sellaiselta, jossa lokitiedostoja kirjoitetaan. Millaisia päätöksiä prosessien hallintaa koskien voi olla tarpeen tehdä?

Yhteyksiä

Käyttöjärjestelmän alaisuudessa toimii myös tiedostojärjestelmä, josta on puhetta samassa yhteydessä kuin siitä, miten lähinnä käyttäjien pääsyä tiedostoihin tai sisäänpääsyä koneeseen valvotaan. Jotkin tämän jakson asiat voi olla helpompi kytkeä tietoturvaan, jos edellä mainittujen lisäksi tutustuu myös tietoturvapolitiikan ideaan.

Havainnollistusta

1. Tutustu menettelyyn, jolla Windowsissa saa palautetuksi roskakoriin siirretyt tiedostot. Tyhjeneekö roskakori joskus itsekseen?

2. Katso millaisia lokitietoja unix-koneen hakemistosta /var/adm/ (tai /var/log/) löytyy. Komennolla last saat tulostetuksi wtmp-lokin. Se on tavattoman pitkä joten voit putkittaa: last | more. Voit myös katsoa mitä tietoa itsestäsi on: last | grep käyttäjätunnuksesi.

Käyttöjärjestelmään perinteisesti liittyviä turva-asioita

Tässä jaksossa käsiteltävät asiat ovat paljolti kertausta muilta kursseilta. Tutunkin asian puitteissa kannattaa kiinnittää huomiota siihen, millaisia tietoturvatavoitteita eri tilanteissa asettuu käyttöjärjestelmälle (esim. luottamuksellisuus vai eheys) ja millaisia "hinta-laatu" -suhteita erilaisilla mekanismeilla saavutetaan. Selkein esimerkki tarjoutuu keskusmuistin hallinnoinnista. Siinä esiintyy seuraavanlaisia tilanteita. Muistin lisäksi nykyaikaisen käyttöjärjestelmän pitää huolehtia lukuisista muista usean toimijan yhteiskäytössä olevista resursseista, jollain seuraavista tavoista: Vain ensimmäinen on aidosti erottelu. Kuten edellä jo nähtiin, segmentoinnin avulla voidaan sallia tietojen jakamista. Tätä on myös prosessien välinen kommunikointi. Yhteisten tietorakenteiden käytön voisi sanoa tapahtuvan "päällekkäin", mutta silti ilman törmäyksiä, ja erityisesti vanhentuneen tiedon käyttöä välttäen. Pääsynvalvonta voidaan järjestää yleisen mallin mukaisesti (vrt. sivu) joko pääsymatriisin, pääsylistojen, kykylistojen tai ryhmittelyn avulla. On myös mahdollista yksinkertaisesti sallia tiedon jakaminen kaikkien kesken tai kieltää se kaikilta muilta. Toisaalta pääsynvalvontaa voidaan tarkentaa asettamalla rajoituksia sille, mitä on lupa tehdä.

Joitakin "pieniä" käytäntöjä

Unix-koneeseen kirjautumisen jälkeen, mistä voimme tietää, käynnistävätkö antamamme komennot sen varusohjelman, joka on tarkoituskin, vaiko jonkin Troijan hevosen? Meidän pitää voida luottaa varusohjelmiin, sillä ylläpitäjä huolehtii niistä keinoilla, joita esitellään tunkeutumisen havaitsemisen yhteydessä. Oma hakemistomme ei välttämättä ole puhdas hyökkääjän asentamista harhauttavan nimisistä ohjelmista, joten käytännön varokeinona kotihakemistomme (eikä nykyhakemisto eli '.') ei saa olla suoritettavien tiedostojen hakupolussa.

Yksi suosittu keino yrittää päästä käyttämään konetta luvattomin valtuuksin on suid- ja sgid-ohjelmien hyödyntäminen. Tavallinen ohjelma käynnistyy käyttäjänsä mukaisin oikeuksin. Suid-ohjelma on sellainen, että sen käynnistämällä prosessilla on ohjelmatiedoston omistajan oikeudet (eli prosessin uid, user-id, on sama kuin omistajan uid). Tällainen menettely on varsin hyödyllinen. Esimerkiksi salasanan vaihto-ohjelma pystyy suid-ohjelmana kenen tahansa ajamana kirjoittamaan /etc/passwd-tiedostoon, johon vain root-käyttäjällä on kirjoitusoikeus. Sgid on muuten vastaava kuin suid, mutta koskee ryhmää. Sekä suid että sgid ovat yksi bitti kunkin tiedoston pääsynvalvontatiedoissa ja ne näytetään x- eli suoritusoikeuden tilalla, jos ne on asetettu. Esimerkkejä näistä biteistä Lintulan kiuru-koneen hakemistossa /usr/bin/:

---s--s--x   3 root   sys    99844 Apr 21 08:11 passwd
---x--s--x   1 bin    sys    50712 Oct  6  1998 netstat
---s--x--x   1 root   bin    29292 Oct  6  1998 login
Esimerkiksi tietokoneverkon tilasta raportoiva netstat on tämän mukaan sgid-ohjelma, jonka omistajana on bin ja joka kuuluu ryhmään sys. Omistajan root suid-ohjelmia samassa hakemistossa ovat mm. chkey, crontab, newgrp, su sekä etäkomennot rcp, rlogin ja rsh.

Suid- tai sgid-ohjelmat eivät ole turvallisuusongelma, kunhan mitään ohjelmaa ei tarpeettomasti eikä vahingossa määritellä sellaiseksi eikä näiden ohjelmien kautta pääse tekemään mitään muuta kuin oli tarkoitettu.

Kun tässä on puhe unix-tiedoston omistuksesta, saadaan esille toinenkin esimerkki siitä, mitä kurssin johdannossa tietoturvamekanismiksi mainittu omistusoikeus voi tarkoittaa. Vaikka muilla olisi w-oikeuden turvin mahdollisuus kirjoittaa tiedoston päälle jotain aivan muuta, vain omistajalla on oikeus muuttaa oikeuksia.

Kun ajatellaan sitä, että käyttöjärjestelmän pitäisi myös valvoa, ettei mikään prosessi (esim. pillastuttuaan) syö kohtuuttomasti aikaa tai muistia, tai ole jollain muulla tavalla asiaton, päästäänkin jo laajempaan aiheeseen, tunkeutumisen havaitsemiseen.

Tunkeutumisen havaitseminen

Motivointia

Yleensä ei voida täysin ehkäistä hyökkäyksiä ja väärinkäyttöä. Tunkeutumisen havaitseminen (intrusion detection) ja (lisä)vahinkojen estäminen on seuraavaksi parasta, mitä voidaan tehdä. Periaate on yksinkertainen: kerätään tietoa kaikesta oleellisesta, mitä järjestelmässä on tekeillä ja tapahtuu, tutkitaan tätä tietoa ja tehdään johtopäätöksiä, ovatko havaitut seikat oire jostainhyökkäyksestä vai ovatko ne osa kyseisen ympäristön normaalia käyttäytymistä.

"IDS-ala on kypsynyt huomattavasti sitten vuoden 1998 ja nykyään se on noussut tärkeään asemaan verkkoturvallisuudessa palomuurien ja virusten torjunnan rinnalle. Toteutusten mutkikkuudesta huolimatta periaatteet ovat hyvin yksinkertaiset." (R.J.Hontañon: “Deploying an Effective Intrusion Detection System, Netw.Mag. Sep 2000.

Sisältöä ja tavoitetta

Käsitellään ensin lyhyesti tapahtumakirjanpitoa unixissa, sitten mainitaan rakenteen analysointivälineitä ja esitellään CERT:n käytännön ohjeita. Lopuksi esitetään tunkeutumisen havaitsemismenetelmien yleinen luokittelu.

Tavoitekysymyksiä:

  • Miten voidaan havaita, jos jokin ison tietokoneen sadoista prosesseista onkin jollain tavalla luvaton?
  • Mitä tarkoittaa tietokoneeseen tai tietokoneverkkoon tunkeutuminen ('intrusion') ja mitä keinoja sellaisen havaitsemiseksi on? (Pääpaino on havaitsemiskeinoissa; mainitse ainakin neljä erilaista.)
  • Unix-tiedosto lastlog sisältää kunkin käyttäjän tuoreimman sisäänkirjautumisen ajankohdan. Mitä hyötyä tästä tiedostosta on tietoturvan kannalta? Miten tällaisen tiedon perusteella voidaan havaita hyökkäys? Mitä muuta tarvitaan, jotta havaittu hyökkäys voidaan jäljittää? Missä mielessä lastlog ei ole lokitiedosto?
  • Mitä muita kuin tapahtumatietoja käytetään lähteenä järjestelmissä, jotka pyrkivät havaitsemaan tietokoneisiin kohdistuvia hyökkäyksiä? Havaitsemismenetelmien perusjako on tietämys- ja käyttäytymispohjaisiin. Luonnehdi näitä lyhyesti.

Tunkeutumisen havaitseminen

Tunkeutuminen ('intrusion') tarkoittaa tässä sitä, että joku käyttää tietojenkäsittelyn resursseja ilman lupaa. Tämähän olisi helppo saada selville, jos voisi käydä kysymässä mikron tai päätteen äärellä istuvalta asiaan liittyviä dokumentteja - kuten autoilijalta ajokorttia ja auton rekisteriotetta. Tietokoneella ajon luvallisuutta ei yleensä pysty selvittämään näin suorasti. Ennemminkin tilannetta voisi verrata siihen, että auton käytön luvallisuus pitäisi selvittää polttoaineseoksen, moottorin kierrosluvun, ajonopeuden, ohjausliikkeiden ja tien pinnan perusteella. Harjoitus. Miten auto voisi tällaisten (tai muiden) tietojen avulla "tietää" tulleensa varastetuksi?

Tunkeutumisen havaitsemisen järjestelmät käyttävät kolmenlaista tietoa analyysinsa perustana:

Käsitellään näitä aloittamalla viimeksi mainitusta:

Tapahtumat lokitiedostoihin

Unixissa monet ohjelmat luovat lokitiedostoja, eli lisäävät sinne aikajärjestyksessä merkintöjä tietynlaisista tapahtumista. Tällaisia tiedostoja ovat (vrt. hakemistosta /var/adm, mitä Lintulassa on käytössä): Joissain tapauksissa tieto ei ole kumulatiivinen, vaan lokitiedostoksi sanotaan (harhaanjohtavasti) myös voimassaolevaa tilanteen kuvausta. Tällaisia tiedostoja ovat mm. Lokeja voi kerätä myös yleisellä syslog-ohjelmalla, jota muut ohjelmat kutsuvat tallettamaan lokitietojaan.

Rakenteen eheys ja kestävyys

Olettaen, että järjestelmä jossain vaiheessa on vielä puhdas, tai jokin sen osa on asennuksen jäljiltä vielä eheä, pitää siitä tallettaa tietoa, jotta myöhemmät tahrat pystyttäisiin tunnistamaan.

Hyökkäystyökaluilla voi tarkistaa, onko omassa järjestelmässä aukkoja.

Näitä ohjelmia on saatavissa myös verkosta.

Muuan käytännön ohjeisto hyökkäysten havaitsemiseen

CERT:n (Computer Emergency Response Team) laatima ylläpitäjän tarkistuslista hyökkäysten havaitsemiseksi näyttää tällaiselta: Tarkasta/etsi
  1. lokitiedostot: epätavalliset paikat, joista on otettu yhteyttä tai epätavalliset toimet.
  2. suid- ja sgid-tiedostot (esim. find-ohjelmalla)
  3. varusohjelmistot (system binaries)
  4. paketinnuuskijat (packet sniffers)
  5. tiedostot, joita ajetaan ajastettuina cron- tai at-ohjelmilla.
  6. ettei tarjolla ole valtuuttamattomia verkkoon päin tarjottavia palveluita (siis sellaisia, jotka inetd-demonin verkosta saama pyyntö käynnistäisi /etc/inetd.conf-tiedostossa olevien määritysten perusteella).
  7. /etc/passwd-tiedosto
  8. järjestelmän ja paikallisen verkon konfiguraatio (siis tiedostot joissa kerrotaan millä koneilla on erioikeuksia yhteyksiä muodostettaessa: /etc/hosts.equiv, /etc/hosts.lpd ja systeemitunnusten .rhosts-tiedostot).
  9. kaikkialta epätavalliset tai piilotetut tiedostot
  10. kaikki koneet paikallisesssa verkossa
ja ryhdy turvapolitiikan määräämiin toimiin.

Tunkeutumisen havaitsemismenetelmien luokittelua

Tämä esitys perustuu artikkeliin Towards a taxonomy of intrusion-detection systems. Tunkeutumisen havaitsemista käsittelee myös mm. Saksan BSI:n julkaisu. Lähempänä käytäntöä lienee esim. Network Magazinen tutoriaali aiheesta, tai Robert Grahamin FAQ.

Jonkin havaitsemismenetelmän hyvyyttä voidaan arvioida seuraavissa ulottuvuuksissa:

Tunkeutumisen havaitsemismenetelmät jaotellaan seuraavassa kolmessa pääsuunnassa: mistä tiedot, mitä niillä tehdään ja mitä sitten tehdään.
  1. Tapahtumatietojen lähde. Seuraavista kahdesta on luonnollisesti myös yhdistelmiä
  2. Havaitsemismenetelmä
  3. Reagointi, eli mitä tehdään, kun havaitaan hyökkäys.
Hieman eri ulottuvuudessa oleva hyökkäysten torjuntakeino on rakentaa ansoja, "hunajapurkkeja", jotka houkuttelevat hyökkääjiä. Näin voidaan ehkä välttää varsinaisen järjestelmän haavoittuminen, mutta erityisesti voidaan saada keskitetysti tietoa mahdollisesta hyökkääjästä ja katkaista hänen tiensä ennenkuin hän siirtyy oikeaan kohteeseen.

Tunkeutumisen havainnoinnissa on samanlaista virusten torjunnan kanssa tunnusmerkkien päivittäminen. Pieni muunnos voi nimittäin päästä läpi havainnointiohjelman aiemmista versioista. Vertaa luetteloa hyökkäysten muuntelusta toisen kirjoittajan kommentoidessa niitä: "50 Reasons IDS Systems Work".

Näkökulmia luotettuun käyttöjärjestelmään

Motivointia

Olisi epäilemättä suotuisaa, jos käyttöjärjestelmä osattaisiin rakentaa siten, että se pystyisi huolehtimaan nykyistä enemmän turvallisuudesta. Käyttöjärjestelmät ovat niin monimutkaisia, että tämä on kovin vaikea tehtävä. Toisaalta se olisi samasta syystä entistäkin tärkeämpää.

Sisältöä ja tavoitetta

Tavoitekysymyksiä:
  • Millainen voisi olla tavallista turvallisemman käyttöjärjestelmän rakenne ja toimintaperiaate? Mikä merkitys asetetulla tietoturvapolitiikalla on tällaisen järjestelmän rakentamisessa?
  • Mikä on viitemonitori ja mikä sellaisen tehtävän on turvallisessa käyttöjärjestelmässä?

Yhteyksiä

Tämän jakson asialla on paljon tekemistä monitasoisen turvallisuusmallinnuksen (Bell- LaPadula ym.) sekä kriteerimallien (Common Criteria ym.) kanssa. Edellistä varten tarvittavat tiedon kulun rajoitukset täytyy tietenkin toteuttaa luotettavalla käyttöjärjestelmän tasolla. Kriteerimallit puolestaan kiinnittävät paljon huomiota perusteisiin, joilla luotettavuuteen voidaan uskoa.

Näkökulmia luotettuun käyttöjärjestelmään

"Luotettu tietojenkäsittelypohja" (trusted computing base, TCB) tarkoittaa kokonaisuutta, joka koostuu tietokonejärjestelmään kuuluvista laitteista ja ohjelmista (ym.), jotka yhdessä panevat toimeen turvapolitiikan. Se, miten hyvin TCB toteuttaa politiikkaa, riippuu paitsi siihen kuuluvien mekanismien oikeellisuudesta, myös siitä, miten hyvin ne on suojattu ja miten hyvin politiikkaan liittyvät parametrit syötetään TCB:lle (esim. käyttäjien oikeudet).

Lähtökohtana voidaan pitää takeita siitä, ettei itse laitteistoa ole peukaloitu. Tämä aihe on esillä erikseenkin. Nyt mielikuvana voisi olla sellainen, että "systeemi" (viitemonitori, joka on mainittu toisaallakin) välittää kaiken vuorovaikutuksen käyttäjien ja resurssien välillä - tarkistaen joka kerta luotetusta pääsynvalvonnan tietokannasta, sallitaanko vai kielletäänkö vuorovaikutus.

Tietoturvallisuuden kannalta olisi tietysti suotavaa, että koko tietojärjestelmän voisi sanoa kuuluvan luotetun tietojenkäsittelyn piiriin. Käytännössä TCB:n on kuitenkin parempi olla suppea, koska kovin suuren osuuden turvallisuudesta ei voitaisi kuitenkaan vakuuttua. Periaatteessa TCB:n ulkopuoliset osat pitäisi voida antaa vaikka hyökkääjän kirjoitettaviksi, eikä politiikasta silti tarvitsisi tinkiä.

TCB:n suhteellisesta osuudesta riippumatta turvallisuusmekanismit voidaan tietokoneen arkkitehtuurissa levittää laajalle alalle tai keskittää. "Security kernel"-menettelyssä tehdään jälkimmäisellä tavalla. Siinä arkkitehtuurin muista osista eristetty "turvaydin" huolehtii järjestelmän turvallisuuspolitiikan toteuttamisesta. Tällainen turvaydin on tyypillisesti osin kovossa ja osin käyttöjärjestelmässä ja se on asennettu sinne jo järjestelmää rakennettaessa. Suppeuden ansiosta sitä on silti mahdollista melko yksinkertaisesti mukauttaa politiikan tarkentuessa - esim. uudentyyppisten hyökkäysten tultua ilmi.

Seuraavala luettelo esittää tärkeimmät vaatimukset turvaytimelle. Ne ovat kyllä TCB:ltä toivottavia ominaisuuksia yleisemminkin.

TCB:hen sisällytettävät käyttöjärjestelmän osat voidaan määrätä sen mukaan, mitä tarvitaan politiikan toteuttamiseen. Näitä ovat ainakin: Esimerkiksi AIX:ssa eli IBM:n unixissa kaikki tietokonelaitteisto kuuluu TCB:hen ja huomattavan suuri osa käyttöjärjestelmästä (vrt. Trusted Computing Base Overview). Kaikkea käyttöjärjestelmää ei kuitenkaan tarvitse sisällyttää TCB:hen, vaan esimerkiksi tiedostonhallinnan riittää kyetä käsittelemään niitä yksinkertaisia tiedostoja, jotka TCB vain tarvitsee.

TCB:n rakentamisessa voidaan noudattaa samanlaista "sipuli"-rakennetta kuin käyttöjärjestelmässä yleensäkin. Vastaavasti kuin tietoliikenneprotokollien kerrosrakenteessa TCB:n ylemmät kerrokset saavat palvelua alemmilta kerroksilta ja mitä alempana ollaan sen parempaa luotettavuutta voidaan käytännössäkin edellyttää.

Esimerkki luotettavasta järjestelmästä on KeySAFE, jonka tarkoitus on täyttää oranssin kirjan B-tason vaatimukset, KeyKOS-käyttöjärjestelmän yhteydessä - jolla puolestaan on seuraaja: EROS: The Extremely Reliable Operating System (vuodelta 1999). Tässä KJ-perheessä on täysin toisenlaisiin ratkaisuihin johtanut lähestymistapa kuin Unixissa, sivupohjaisuus segmentoinnin sijasta ja prosessien pysyvyys (kaatumisenkin yli). Tässä on kyseessä kykyperustainen pääsynvalvonta.