Unix-käyttöjärjestelmien tietoturva ja OpenBSD



Samankaltaiset tiedostot
Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Tietueet. Tietueiden määrittely

Esimerkki 1: Kahviautomaatti.

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

- ai miten niin?

Algoritmit 2. Luento 13 Ti Timo Männikkö

Taulukot. Jukka Harju, Jukka Juslin

Rakenteiset tietotyypit Moniulotteiset taulukot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Tietorakenteet ja algoritmit

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

Ohjausrakenteet. Valinta:

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Java-kielen perusteet

Moduli 5: Kehittyneitä piirteitä

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Lyhyt kertaus osoittimista

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

Osoittimet ja taulukot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Metodien tekeminen Javalla

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

Kattava tietoturva kerralla

Muuttujien roolit Kiintoarvo cin >> r;

Tietoturvan Perusteet Yksittäisen tietokoneen turva

Algoritmit 1. Luento 3 Ti Timo Männikkö

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Binäärioperaatiot Tiedostot ja I/O

Taulukoiden käsittely Javalla

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

Luento 5. Timo Savola. 28. huhtikuuta 2006

C-kurssi kevät Luennon sisältö

Luennon sisältö. C-kurssi kevät Tasokokeen kohta 1: Taulukon järjestäminen. Tasokokeen kohta 2. Tasokokeen kohta 2. Tasokokeen kohta 3

Historiaa. Unix kirjoitettiin kokonaan uudestaan C-kielellä Unix jakautui myöhemmin System V ja BSDnimisiin. Kuutti, Rantala: Linux

T Yritysturvallisuuden seminaari

Osoitin ja viittaus C++:ssa

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

The administrative process of a cluster. Santtu Rantanen Valvoja: Prof. Jorma Jormakka

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Salon kaupunki , 1820/ /2018

Tietorakenteet ja algoritmit

Salon kaupunki , 1820/ /2018

TIETOTURVAPOLITIIKKA

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Algoritmit 1. Demot Timo Männikkö

Olio-ohjelmointi Javalla

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Vaivattomasti parasta tietoturvaa

- ai miten niin?

Mikä on WordPress? itse ylläpidettävä (self-hosted) WordPress.com: ilmainen 3. osapuolen ylläpitämä pilvipalvelu (Cloud-hosted)

C-kurssi syksy ltö. Luennon sisält. Luento 2: tyypit, rakenteet, makrot Tyypit. signed, unsigned short,, long Vakiot const Rakenteet

Luennon sisält. ltö. C-kurssi syksy ääreet: int ja char. Yksinkertaiset tyypit. Kokonaisluvut. Merkit

Ohjelmoinnin perusteet Y Python

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

- ai miten niin?

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

1. Olio-ohjelmointi 1.1

P e d a c o d e ohjelmointikoulutus verkossa

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Ohjelmoinnin perusteet Y Python

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

Mobiilin ekosysteemin muutos - kuoleeko tietoturva pilveen?

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Tietoverkkojen turvallisuus. Tuomas Aura T Johdatus tietoliikenteeseen kevät 2012

WINE API ja Virtualisointiohjelmistot

Salon kaupunki / /2018

Ohjelmistotekniikan menetelmät, koe

Algoritmit 2. Luento 2 To Timo Männikkö

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Ohjelmoinnin perusteet Y Python

Tutkimus web-palveluista (1996)

Tietoturvan perusteet. Tuomas Aura T Johdatus tietoliikenteeseen kevät 2010

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Luku 8. Aluekyselyt. 8.1 Summataulukko

Tietotekniikan koulutusohjelman suuntautumisvaihtoehdot

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Viestit-palvelun viranomaisliittymän ohjelmointiohje. Java-esimerkki

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

C-ohjelmointi, syksy 2006

C-ohjelmointi, syksy Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot. Binääritiedostot. Luento

Attribuuttikieliopit

Windows XP -tuen loppuminen aiheuttaa tietoturvariskejä yksityishenkilöille

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Peter Kronström

11. Javan valintarakenteet 11.1

Mikä yhteyssuhde on?

Tiedosto on yhteenkuuluvien tietojen joukko, joka tavallisimmin sijaitsee kiintolevyllä, muistitikulla tai jollakin muulla fyysisellä tietovälineellä.

Muokkaa otsikon perustyyliä napsauttamalla

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Transkriptio:

Unix-käyttöjärjestelmien tietoturva ja OpenBSD Arto Jonsson Marraskuu 2012

Kalvot http://iki.fi/artoj

Luentojen sisältö 1. Kolme poimintaa tietoturvasta 2. Tietoturva yleisesti 3. OpenBSD 4. Ohjelmointirajapintojen väärinkäyttö 5. Etuoikeuksien peruuttaminen ja erottaminen

Kolme poimintaa tietoturvasta: Medtronic McAfeen tutkijat löysivät Medtronic-yhtiön insuliinipumpuista haavoittuvuudeen, jonka avulla hyökkääjän on mahdollista hallita laitetta Hyökkäys voidaan tehdä etänä useiden kymmenien metrien päästä http://www.reuters.com/article/2011/10/26/us-medtronicidustre79p52620111026

Kolme poimintaa tietoturvasta: Ammattirikolliset Haittaohjelmien kehittäminen ja palvelunestohyökkäysien tekeminen on nykyään bisnestä, jota harjoittavat ammattirikolliset. Esimerkkejä artikkelista: palvelunestohyökkäys päiväksi 30-70 dollaria, miljoonan roskapostin lähetys 10 dollaria http://arstechnica.com/tech-policy/2012/11/the-russianunderground-economy-has-democratized-cybercrime/

Kolme poimintaa tietoturvasta: Stuxnet Stuxnet on erittäin monimutkainen haittaohjelma, joka löydettiin vuonna 2010 Iranista. Stuxnet hyökkää Siemensin tuotanto-ohjelmistoja ja laitteistoja vastaan. Stuxnet käyttää hyväkseen useita käyttöjärjestelmässä olevia tietoturva-aukkoja. Lisäksi osa sen ohjelmakoodista on allekirjoitettu varastetulla sertifikaatilla. http://arstechnica.com/security/2012/06/why-antiviruscompanies-like-mine-failed-to-catch-flame-and-stuxnet/

Tietoturva yleisesti Ohjelmistoja ja käyttöjärjestelmiä on kaikkialla: matkapuhelimet, televisiot, autot, pelikonsolit, sydäntahdistimet,... Ohjelmistot ovat huomattavasti monimutkaisempia kuin ennen (esim. web-selaimet) Tulevaisuudessa tulemme olemaan vielä riippuvaisempia ohjelmistoista ja käyttöjärjestelmistä

Tietoturvan kolme päätehtävää 1. Luottamuksellisuus (engl. confidentiality) 2. Eheys (engl. integrity) 3. Saatavuus (engl. availability)

Tietoturva vs. helppokäyttöisyys Tietoturva ja helppokäyttöisyys ovat jatkuvasssa tasapainossa Ei riitä, että tietoturvaominaisuudet ovat käytössä niiden on oltava myös helppokäyttöisiä ( Haluatko varmasti jatkaa? -ponnahdusikkunat) Tietojärjestelmän on oltava oletuksena turvallinen (engl. secure by default)

Haavoittuvuustilastoja 2001: 1677 2005: 4931 2009: 5732 2012: 4964 Lähteet: http://cve.mitre.org/ ja http://web.nvd.nist.gov/view/vuln/statistics

OpenBSD 4.4BSD:hen perustuva vapaan lähdekoodin Unixin kaltainen käyttöjärjestelmä Yksinkertaisuus, standardointi (ANSI, POSIX) ja siirrettävyys (eri laitteistoille) Ensimmäinen julkaisu lokakuussa 1996 Nykyään noin 100 enemmän ja vähemmän aktiivista kehittäjää

OpenBSD Osa OpenBSD:n ohjelmista julkaistaan erillisversioina muille käyttöjärjestelmille OpenSSH: etäkirjautumisohjelmisto OpenNTPD: kellonajan synkronointi Packet Filter (PF) palomuuriohjelmisto

OpenBSD Julkaisut vuosittain marraskuussa ja toukokuussa Uusin versio: 5.2 (marraskuu 2012) http://www.openbsd.org/

Ohjelmointirajapintojen väärinkäyttö Tietoturvahaavoittovuudet ovat usein yleisiä ohjelmointivirheitä Yleiset ohjelmointivirheet ovat taas ohjelmointirajapintojen väärinkäyttöjä Puutteellinen ohjeistus, huonot esimerkit, tietämättömyys, huolimattomuus...

C-ohjelmointikieli Dennis Ritchien 1970-luvun alussa kehittämä ohjelmointikieli Soveltuu erityisesti järjestelmäohjelmointiin matalan tason primitiiviensä vuoksi Lähes poikkeuksetta kaikki käyttöjärjestelmät on kehitetty C:llä C on standardoitu ohjelmointikieli (viimeisin vuodelta 2011), mutta standardi jättää asioita implementaation määriteltäviksi tai ei määrittele joitain ollenkaan.

Yksinkertainen C-esimerkki #include <stdio.h> int main(void) { int c, chars, tabs, bl, nl; chars = tabs = bl = nl = 0; } while ((c = getchar())!= EOF) { chars++; if (c == \t ) tabs++; else if (c == ) bl++; else if (c == \n ) nl++; } printf("%d %d %d %d\n", chars, tabs, bl, nl);

Merkkijonot C-kielessä C-kielessä ei ole merkkijonotyyppiä vaan merkkijono esitetään taulukkona merkkejä, joka päättyy arvoon NULL Esimerkiksi merkkijonon pituus lasketaan kasvattamalla indeksinumeroa, kunnes käsiteltävä merkki on NULL Esimerkki merkkijonosta UTU : U T U \0

Merkkijonot C-kielessä Toisin kuin esim. Javassa C:ssä ei ole ennakkotarkastuksia taulukon (merkkijonon) indeksien oikeellisuudesta Indeksointiin liittyvät ongelmat yleisiä C-ohjelmien haavoittuvuuksissa Merkkijonojen käsittelyssä useita ongelmallisia rajapintoja mm. strcat, strcpy, sprintf ja gets

gets-funktio #include <stdio.h> int main(void) { char buf[128]; if (gets(buf)!= NULL) printf("%s\n", buf); } return 0; OpenBSD:n C-kääntäjä varoittaa mm. gets-funktion käytöstä (mutta ei estä sitä).

Ohjelmointirajapintojen väärinkäyttö ja OpenBSD Koodikatselmointi Kouluttaminen (http://www.openbsd.org/papers/) Uusien rajapintojen luonti (strlcat, strlcpy) Ohjeistus rajapintojen oikeasta käytöstä

Pienimmän oikeuden periaate Järjestelmän moduulilla tulee olla vain ne oikeudet, joilla se pystyy suoriutumaan sille määrätystä tehtävästä.

Oikeuksien erottaminen (privilege separation) Tarvittavat oikeudet jaetaan erillisiksi oikeuksia käyttäviksi prosesseiksi Prosessit kommunikoivat keskenään tarvittaessa P1 P2 P3

Oikeuksien peruuttaminen (privilege revocation) Prosessi luopuu oikeuksistaan kutsumalla järjestelmäkutsua P1 Järjestelmäkutsu P1

Esimerkki: openntpd NTP (network time protocol) on prototolla, jota käytetään synkronoimaan paikallinen kellonaika NTP serverin kellonaikaan (RFC 1305) openntpd on OpenBSD:n NTP toteutus Toteuttaa oikeuksien peruuttamisen ja erottamisen

openntpd:n rakenne openntpd:n toiminta on jaettu pääasiallisesti kahteen prosessiin Oikeuksia pitävä prosessi kutsuu järjestelmäkutsuja, joilla kelloa päivitetään Oikeudet peruuttava prosessi ylläpitää listaa NTP-servereistä ja käsittelee serverien lähettämät paketit

openttpd:n rakenne Kellonajan päivittäminen P1 P2 Kellonajan päivityspyyntö Verkkoliikenne

openntpd:n toiminta 1. Käynnistyessään openntpd:llä on pääkäyttäjän oikeudet (vaatimus). 2. Käynnistyvä prosessi luo uuden prosessin, joka vaihtaa juurihakemiston /var/empty-hakemistoon ja peruuttaa omat oikeutensa 3. Prosessien välille luodaan viestiyhteys 4. Pääkäyttäjän oikeuksilla toimiva prosessi jää odottamaan palvelupyyntöjä oikeuksien peruuttaneelta prosessilta 5. Oikeudet peruuttanut prosessi aloittaa keskustelun NTP-serverien kanssa ja tekee palvelupyynnön toiselle prosessille, kun kellonaikaa pitää päivittää.

Lähteet 1. McGraw, G., Software Security: Building Security In, 2006 2. Brauer, H., Dehmlow, S., Puffy At Work - getting code right and secure, The OpenBSD way, http://bulabula.org/papers/2010/bsdcan/, haettu 2012-11-24 3. Herrb, M., Security measures in OpenBSD, http://homepages.laas.fr/matthieu/talks/openbsd-h2k9.pdf, haettu 2012-11-24 4. OpenBSD:n manuaalisivut, http://www.openbsd.org/cgi-bin/man.cgi