< Return to Video

37C3 - Writing secure software

  • 0:00 - 0:14
    [Translated by Santeri Koivisto (ITKST56 course assignment at JYU.FI)]
    Musiikkia
  • 0:14 - 0:18
    Siitä on kirjoitettu oppikirjoja ja siitä
  • 0:18 - 0:21
    on pidetty lukematon määrä esitelmiä, jotka
  • 0:21 - 0:23
    ovat valistaneet meitä kaikista
  • 0:23 - 0:27
    tekemistämme virheistä, ja silti kaikenlaisia huonoja
  • 0:27 - 0:30
    ohjelmistoja on yhä olemassa, mutta
  • 0:30 - 0:33
    Fefe, täällä näin, sankarimme,
  • 0:33 - 0:37
    on ottanut huomioon kaikki parhaat
  • 0:37 - 0:40
    käytännöt työskennellessään
  • 0:40 - 0:44
    tehdäkseen turvallisen verkkosivun. Hän
  • 0:44 - 0:47
    seuraavaksi näyttää meille, miten sellainen tehdään, jotta
  • 0:47 - 0:50
    voimme kaikki nukkua yömme rauhassa ja
  • 0:50 - 0:55
    ottaa mallia, jonka avulla voimme
  • 0:55 - 0:57
    tehdä omat ohjelmistomme turvallisiksi.
  • 0:57 - 1:00
    Siispä annan puheenvuoron nyt
  • 1:00 - 1:02
    Fefelle, antakaa hänelle aplodit!
  • 1:02 - 1:14
    Suosionosoituksia
  • 1:14 - 1:15
    Kiitos, minun täytyy aloittaa
  • 1:15 - 1:18
    anteeksipyynnöllä, sillä ehdotin esitelmää,
  • 1:18 - 1:19
    mutta se hylättiin, joten
  • 1:19 - 1:21
    diat eivät ole ihan aivan siinä kunnossa,
  • 1:21 - 1:23
    kuin niiden pitäisi olla.
  • 1:23 - 1:27
    Nämä diat on tehty esitelmän edellistä versiota varten. Ne pitävät
  • 1:27 - 1:29
    sisällään kaiken materiaalin. Yritin päivittää niitä, mutta
  • 1:29 - 1:31
    se tuhosi esitelmän sulavuuden, joten
  • 1:31 - 1:32
    joudumme pärjäämään tämän version kanssa.
  • 1:32 - 1:35
    Suurin ero on yleisössä, sillä
  • 1:35 - 1:37
    tällä kertaa paikalle tulee enemmän ohjelmistokehittäjiä.
  • 1:37 - 1:39
    Toisessa yleisössä olisi ollut enemmän hakkereita ja
  • 1:39 - 1:41
    bisnesmiehiä, joita yritän auttaa heidän
  • 1:41 - 1:47
    nykyisestä tilanteestaan eteenpäin, ja pääkysymyshän
  • 1:47 - 1:49
    on yleensä: "Onko jo valmista?", eikö niin?
  • 1:49 - 1:50
    Siis, hieman minusta, olette varmaankin
  • 1:50 - 1:52
    nähneet tämän jo aiemmin, olen ammatiltani
  • 1:52 - 1:54
    koodin tarkastaja, omistan pienen yrityksen.
  • 1:54 - 1:57
    Yritykset näyttävät meille koodia, ja minä puolestani
  • 1:57 - 2:00
    näytän heille bugeja, joita siitä löydän, melko yksinkertaista.
  • 2:00 - 2:04
    Mutta ennen kuin aloitamme, minulla on
  • 2:04 - 2:06
    hieman syytä juhlaan, tämä oikeastaan tapahtui
  • 2:06 - 2:08
    vain päivää ennen kuin
  • 2:08 - 2:12
    puhuin siitä ensi kertaa, siis tämä viesti Kasperskyltä,
  • 2:12 - 2:14
    he löysivät haittaohjelman
  • 2:14 - 2:15
    joka käyttää dietlibc:tä,
  • 2:15 - 2:17
    jonka olen kirjoittanut, joten
  • 2:17 - 2:19
    tämä on...
  • 2:19 - 2:28
    Suosionosoituksia
  • 2:28 - 2:29
    Haittaohjelmaporukalla on
  • 2:29 - 2:30
    selvästi hyvä maku.
  • 2:30 - 2:34
    Niin, oikeastaan suurin kysymys, joka tulee vastaan, kun
  • 2:34 - 2:37
    keskustelen asiakkaiden kanssa on: "käytämme todella paljon
  • 2:37 - 2:39
    rahaa tähän, miksei se toimi"?
  • 2:39 - 2:41
    Ja vastaus on, että "toimitte itse väärin".
  • 2:41 - 2:46
    Yritän nyt siis näyttää, että mitä tarkalleen menee vikaan
  • 2:46 - 2:51
    ja tässä on pieni johdanto: usein sanotaan,
  • 2:51 - 2:52
    ettei ole aikaa tehdä asioita
  • 2:52 - 2:54
    kunnolla, eikä se pidä paikkaansa lainkaan.
  • 2:54 - 2:57
    Teillä on aikaa päivässä tasan yhtä paljon kuin kaikilla niillä,
  • 2:57 - 2:59
    jotka ovat pystyneet suuriin saavutuksiin, joten
  • 2:59 - 3:01
    jokainen varmasti pääsee pitkälle, kunhan ryhtyy hommiin.
  • 3:01 - 3:05
    Pelataan sitten pientä lämmittelypeliä,
  • 3:05 - 3:07
    sen nimi on "miten se alkoi ja
  • 3:07 - 3:10
    miten nyt menee", aloitetaan siis harjoittelukierroksella:
  • 3:10 - 3:11
    "IBM:n Watson mullistaa
  • 3:11 - 3:15
    kymmenen toimialaa", ja nyt menee näin:
  • 3:15 - 3:17
    "Mitä kävi IBM:n Watsonille?". Kyseessä on
  • 3:17 - 3:19
    tyypillinen kuvio tietoturva-alalla.
  • 3:19 - 3:23
    Okei, tässä seuraava, näin se alkoi:
  • 3:23 - 3:25
    "Mullista tietoturva tekoälyllä",
  • 3:25 - 3:27
    no niin, emmeköhän kaikki tiedä, mihin tämä on menossa...
  • 3:27 - 3:29
    Naurua
  • 3:29 - 3:30
    Niin, sehän se kuvio on.
  • 3:30 - 3:33
    Pelataan IT-turvallisuuden miinaharavaa,
  • 3:33 - 3:35
    siis, kaikki täällä varmaankin
  • 3:35 - 3:38
    tuntevat Gartnerin, se julkaisee
  • 3:38 - 3:40
    suosituksia ja sillä on jopa
  • 3:40 - 3:41
    äänestysosio, jossa ihmiset voivat sanoa, että
  • 3:41 - 3:43
    "Tämä on paras tuote tähän tarkoitukseen",
  • 3:43 - 3:45
    joten vilkaistaanhan muutamaa ja
  • 3:45 - 3:47
    katsotaan, miten kävi niille, jotka luottivat Gartneriin.
  • 3:47 - 3:49
    Ensimmäisenä aiheena ovat palomuurit, siis
  • 3:49 - 3:54
    näin se alkoi: ykkössijan suositus on
  • 3:54 - 3:57
    Fortinet, ja heillä on paljon
  • 3:57 - 3:59
    markkinointi- siansaksaa
  • 3:59 - 4:02
    Naurua
  • 4:02 - 4:04
    Ja jos taas katsotaan, miten nyt menee, niin
  • 4:04 - 4:06
    ei kovin hyvin.
  • 4:06 - 4:08
    Siis, jatketaan kuviota hiukan:
  • 4:08 - 4:10
    Mitä kävi minulle tämän suhteen?
  • 4:10 - 4:12
    En tarvitse palomuuria, koska minulla
  • 4:12 - 4:14
    ei ole yhtään avointa porttia, jolle pääsy pitäisi estää.
  • 4:14 - 4:16
    Joten sitä ei tarvita,
  • 4:16 - 4:18
    periaatteessa sitä ei tarvita ollenkaan.
  • 4:18 - 4:20
    Seuraava ala: päätepisteiden suojaus,
  • 4:20 - 4:25
    se alkoi siis Trellix:llä, joka on
  • 4:25 - 4:26
    Gartnerin ykkössuositus.
  • 4:26 - 4:28
    En ollut kuullut siitä,
  • 4:28 - 4:30
    joku yhteishanke tai joku sellainen,
  • 4:30 - 4:31
    ketä kiinnostaa.
  • 4:31 - 4:33
    Heilläkin on hienoa markkinointi- siansaksaa
  • 4:33 - 4:37
    Ja jos katsotaan, mitä tapahtui:
  • 4:37 - 4:39
    se vain pahensi tilannetta.
  • 4:39 - 4:43
    Okei, tämäkään ei vaikuta minuun,
  • 4:43 - 4:45
    koska en käytä humpuukituotteita.
  • 4:45 - 4:48
    Katsotaanhan, kolmanneksi salasananhallintaohjelmistot,
  • 4:48 - 4:48
    myöskin hyvin suosittuja,
  • 4:48 - 4:52
    miten se alkoi: suositeltiin LastPassia,
  • 4:52 - 4:54
    tiedätte varmaan mihin tämä on menossa...
  • 4:54 - 4:58
    Naurua
  • 4:58 - 4:59
    Jep, se hakkeroitiin
  • 4:59 - 5:01
    ja monet joutuivat ongelmiin.
  • 5:01 - 5:05
    Voitte siis huomata kuvion:
  • 5:05 - 5:07
    tämäkään ei vaikuttanut minuun, koska
  • 5:07 - 5:09
    poistin käytöstä salasanatunnistautumisen ja
  • 5:09 - 5:10
    käytän julkisen avaimen menetelmiä, jotka ovat
  • 5:10 - 5:14
    olleet jo vuosikymmeniä saatavilla. Pieni bonus,
  • 5:14 - 5:18
    viimeinen näistä: kaksivaiheinen tunnistautuminen,
  • 5:18 - 5:20
    Gartner suosittelee Duoa, jonka
  • 5:20 - 5:23
    Cisco on jo ostatut, mutta ei sillä väliä.
  • 5:23 - 5:25
    Katsotaan siis, mitä Duo tekee:
  • 5:25 - 5:28
    palvelimesi pyytää pilvipalvelusta
  • 5:28 - 5:30
    lupaa, pilvipalvelu näyttää
  • 5:30 - 5:33
    puhelimella ilmoituksen, josta painetaan "kyllä",
  • 5:33 - 5:36
    ja pilvipalvelu kertoo palvelimelle:
  • 5:36 - 5:38
    "okei, voit päästää sisään". Jos katsot
  • 5:38 - 5:40
    oikein tarkkaan, huomaat, ettei pilvipalvelun
  • 5:40 - 5:41
    ole pakko näyttää ilmoitusta ollenkaan, se voi vain
  • 5:41 - 5:44
    sanoa suoraan "kyllä". Se on siis valmiiksi
  • 5:44 - 5:45
    ongelmainen, mitään ei tarvitse edes hakkeroida
  • 5:45 - 5:48
    Naurua
  • 5:48 - 5:50
    ja harva tajuaa, että
  • 5:50 - 5:51
    kaksivaiheista tunnistautumista ei tarvita,
  • 5:51 - 5:53
    jos käyttää julkista avainta, se on jo itsessään toinen vaihe.
  • 5:53 - 5:57
    Selvä, niin,
  • 5:57 - 5:58
    jep. Vilkaistaan tämä nopeasti.
  • 5:58 - 6:00
    Splunk on suositeltu vaihtoehto
  • 6:00 - 6:02
    ja se tekee organisaatiosta
  • 6:02 - 6:05
    kestävämmän, kunhan sitä ei asenna.
  • 6:05 - 6:10
    Naurua
  • 6:10 - 6:16
    Suosionosoituksia
  • 6:16 - 6:18
    Okei, tämä aihe on lähellä sydäntäni,
  • 6:18 - 6:21
    sillä usein väitellään siitä,
  • 6:21 - 6:22
    pitäisikö paikkauksia asentaa ja
  • 6:22 - 6:26
    mitkä paikkaukset asentaa ensimmäiseksi ja aiemmin
  • 6:26 - 6:28
    tämä oli yksinkertaista, etsittiin ongelmia
  • 6:28 - 6:30
    ja asennettiin sen mukaan paikkauksia, mutta sitten
  • 6:30 - 6:32
    asioista tuli monimutkaisempia ja
  • 6:32 - 6:33
    tulos oli tämä:
  • 6:33 - 6:36
    kuuluisa podcast Saksassa,
  • 6:36 - 6:38
    joka kertoo kunnasta, joka joutui
  • 6:38 - 6:41
    kiristysohjelman uhriksi ja joutui kutsumaan
  • 6:41 - 6:43
    armeijan apuun
  • 6:43 - 6:45
    Epäselvää puhetta yleisössä
  • 6:45 - 6:47
    Ja mitä pitäisi tehdä, sanon tämän
  • 6:47 - 6:49
    täydellisyyden vuoksi, täytyy asentaa kaikki paikkaukset
  • 6:49 - 6:50
    välittömästi, mutta se jääköön toisen esitelmän aiheeksi.
  • 6:50 - 6:52
    Saatatte siis huomata kuvion:
  • 6:52 - 6:54
    IT-turvallisuusala
  • 6:54 - 6:56
    suosittelee jotakin ja
  • 6:56 - 6:58
    jos suositukseen uskoo, on pian kusessa, joten ei kannata.
  • 6:58 - 7:01
    Jos ette näe kunnolla, tässä lukee "käärme-
  • 7:01 - 7:05
    karkoterakeet", ja niiden vieressä
  • 7:05 - 7:06
    nukkuu käärme.
  • 7:06 - 7:07
    Naurua
  • 7:07 - 7:08
    Yskäisy
  • 7:08 - 7:11
    Niin, jos emme voi luottaa
  • 7:11 - 7:13
    alan suosituksiin, niin mitä pitäisi tehdä?
  • 7:13 - 7:16
    Ja minulla oli paljon
  • 7:16 - 7:17
    aikaa, koska minun ei tarvinnut
  • 7:17 - 7:20
    siivota kehnojen IT-turvallisuusalan
  • 7:20 - 7:21
    suositustuotteiden jälkiä, joten
  • 7:21 - 7:24
    mihin kulutin aikaani?
  • 7:24 - 7:26
    Päätin, että tarvitsen blogin
  • 7:26 - 7:30
    jo jonkin aikaa sitten, ja aloin
  • 7:30 - 7:32
    miettimään, mitä tarvitsen,
  • 7:32 - 7:34
    itse asiassa en kovin paljoa, koska olisin
  • 7:34 - 7:38
    voinut vain tarjota staattista sisältöä ja pieni
  • 7:38 - 7:39
    hakutoimintokin olisi hyväksi, muttei kuitenkaan
  • 7:39 - 7:42
    pakollinen. En tarvinnut kommenttikenttää
  • 7:42 - 7:45
    laillisista syistä, koska ihmiset tapaavat
  • 7:45 - 7:48
    lähetellä linkkejä haittaohjelmiin ja
  • 7:48 - 7:50
    mitä lie, mitä en halua,
  • 7:50 - 7:52
    joten ensimmäinen versio oli
  • 7:52 - 7:54
    oikeastaan hyvin helppo toteuttaa, se oli pieni
  • 7:54 - 7:55
    tavanomainen verkkopalvelin ja
  • 7:55 - 7:58
    blogin julkaisut olivat staattisia HTML-tiedostoja,
  • 7:58 - 8:00
    yksi tiedosto kuukautta kohden. Se oli oikeastaan
  • 8:00 - 8:03
    hyvin helppoa, sillä jos haluaa hakea joitain voi vain
  • 8:03 - 8:04
    kysyä Googlelta rajoittaen haun verkkosivulle.
  • 8:04 - 8:07
    Julkaiseminenkin oli helppoa, minulla oli pieni
  • 8:07 - 8:09
    skripti, jonka pystyin ajamaan palvelimella,
  • 8:09 - 8:12
    jolle kirjauduin SSH:lla, ja SSH:n luotan
  • 8:12 - 8:14
    autentikaation suhteen, joten uutta
  • 8:14 - 8:17
    pintaa hyökkäyksille ei ole, käytin sitä muutenkin. Tämä on
  • 8:17 - 8:20
    mahtava kokonaisuus, se on turvallinen ja yksinkertainen,
  • 8:20 - 8:23
    riskit ovat pieniä ja se on suorituskyvyltään
  • 8:23 - 8:25
    erinomainen, mutta siitä ei voisi pitää esitelmää
  • 8:25 - 8:27
    CCC:ssä, koska
  • 8:27 - 8:29
    se on liian tylsä, joten aloin lisäämään
  • 8:29 - 8:31
    riskejä kokoonpanoon.
  • 8:31 - 8:34
    Naurua
  • 8:34 - 8:37
    Ensimmäinen ideani oli, että
  • 8:37 - 8:38
    olin kirjoittanut pienen web-palvelimen ja voisin
  • 8:38 - 8:40
    vain käyttää blogia varten kyseistä palvelinta,
  • 8:40 - 8:42
    koska sehän on minun koodiani joka tapauksessa,
  • 8:42 - 8:47
    mutta siinä on huonojakin puolia. Jos blogi
  • 8:47 - 8:49
    pyörii verkkopalvelimella, sillä on
  • 8:49 - 8:51
    pääsy kaikkeen verkkopalvelimen muistiin,
  • 8:51 - 8:52
    erityisesti se pääsee käsiksi TLS:n salaiseen
  • 8:52 - 8:55
    avaimeen, enkä halua, että sitä saataisiin
  • 8:55 - 8:57
    vietyä, joten se ei voi olla
  • 8:57 - 8:59
    verkkopalvelimen moduuli
  • 8:59 - 9:02
    ja ilmiselvä ratkaisu on, että
  • 9:02 - 9:05
    sen täytyy pyöriä toisella käyttäjä-ID:llä
  • 9:05 - 9:08
    Linuxilla, käytän siis Linuxia, mutta minkä tahansa
  • 9:08 - 9:10
    Unixin tai Windowsinkin suhteen asia olisi sama.
  • 9:10 - 9:12
    Se siis pyörii eri käyttäjällä,
  • 9:12 - 9:15
    ja jos sitten joku kaappaa
  • 9:15 - 9:16
    blogin prosessin jonkin
  • 9:16 - 9:20
    bugin avulla, TLS-avaimeen ei pääse käsiksi.
  • 9:20 - 9:22
    Ja samaan aikaan kun tein sitä,
  • 9:22 - 9:23
    ala teki tätä.
  • 9:23 - 9:24
    Puheensorinaa
  • 9:24 - 9:26
    Sehän on tämän esitelmän vitsinä,
  • 9:26 - 9:28
    näytän kaikenlaista kiinnostavaa,
  • 9:28 - 9:29
    mitä ala tekee, ja sitten näytän,
  • 9:29 - 9:31
    mitä itse tein siinä samalla.
  • 9:31 - 9:33
    Seuraava kysymys:
  • 9:33 - 9:35
    Missä sisältöä säilytetään? Voisin vain säilyttää
  • 9:35 - 9:37
    tiedostoja levyllä staattisena HTML:nä kuten aiemminkin,
  • 9:37 - 9:39
    mutta uskon, ettei se olisi riittävän ammattimainen ratkaisu.
  • 9:39 - 9:42
    Hyvää CCC-esitelmää varten täytyy
  • 9:42 - 9:43
    olla ammattimaisempi.
  • 9:43 - 9:45
    Olin myös toista
  • 9:45 - 9:47
    projektia varten kirjoittanut LDAP-palvelimen,
  • 9:47 - 9:49
    joten päätin uudelleenkäyttää sitä, ja
  • 9:49 - 9:53
    samalla kuin tein sitä, ala teki tätä.
  • 9:53 - 9:55
    Otin tämän kuvan Jerusalemin
  • 9:55 - 9:56
    lentokentällä, tämä on siis oikea mainos
  • 9:56 - 9:58
    eikä photoshopattu. Sen omistaa
  • 9:58 - 9:59
    Northrop Grumman, joka on
  • 9:59 - 10:03
    puolustusvälineteollisuusyritys, ja se kertoo koko
  • 10:03 - 10:06
    spektrin kyberistä, kattaen kaikki alueet.
  • 10:06 - 10:08
    Puheensorinaa
  • 10:08 - 10:10
    Siis, miksi kirjoittaisin oman LDAP-palvelimeni?
  • 10:10 - 10:12
    Pääasiassa siksi, että se on pieni ja
  • 10:12 - 10:15
    koska olen ammatiltani tarkastaja, ja tiedän,
  • 10:15 - 10:18
    että jos haluaa mahdollisuuden oikeasti
  • 10:18 - 10:20
    tarkastaa koodia, sen täytyy olla määrältään vähäistä,
  • 10:20 - 10:22
    sillä rajallinen resurssi on
  • 10:22 - 10:25
    aika, jota voi käyttää koodin tarkastamiseen.
  • 10:25 - 10:27
    Siis, Postgres on yleinen SQL-tietokanta.
  • 10:27 - 10:30
    Slapd on palvelimen
  • 10:30 - 10:33
    avoin LDAP-toteutus ja tinyldap on
  • 10:33 - 10:35
    omani ja näette, että se on paljon hitaampi,
  • 10:35 - 10:36
    tosin paljon pienempi.
  • 10:36 - 10:41
    Niin, mainoskampanja oli laajempi,
  • 10:41 - 10:45
    keräsin tähän muutamia hauskoja kuvia.
  • 10:45 - 10:49
    Siis, jos joku onnistuu
  • 10:49 - 10:52
    hakkeroimaan blogin CGI:n tai mitä hyvänsä moduulia
  • 10:52 - 10:55
    käytänkään yhdistääkseni blogin
  • 10:55 - 10:58
    verkkopalvelimeen, hän pystyy avaaman minkä tahansa tiedoston, jonka
  • 10:58 - 11:00
    blogi itsessään pystyy lukemaan, jonka sen UID pystyy lukemaan,
  • 11:00 - 11:02
    joten minun pitäisi varmaankin tehdä
  • 11:02 - 11:05
    asialle jotakin, se oli seuraava vaihe.
  • 11:05 - 11:07
    Ala puolestaan alkoi miettimään
  • 11:07 - 11:09
    haavoittuvuuksien hallintaa.
  • 11:10 - 11:14
    Unixilla, Linuxilla on mekanismi,
  • 11:14 - 11:15
    josta pidin erillisen esitelmän
  • 11:15 - 11:17
    viime kongressissa,
  • 11:17 - 11:18
    se on nimeltään seccomp ja seccomp on kuin
  • 11:18 - 11:21
    palomuuri järjestelmäkutsuille, joten voin käyttää
  • 11:21 - 11:25
    seccompia estääkseni open-järjestelmäkutsun, jota käytetään
  • 11:25 - 11:27
    tiedostojen avaamiseen, mutta jos minun täytyy
  • 11:27 - 11:29
    itse käyttää open-funktiota,
  • 11:29 - 11:32
    en voi estää sitä, joten mitä
  • 11:32 - 11:33
    tehdä sen suhteen? Esimerkiksi blogini
  • 11:33 - 11:36
    kutsuu localtime-funktiota, joka muuttaa Unix-ajan
  • 11:36 - 11:38
    paikallisen aikavyöhykkeen ajaksi ja sitä
  • 11:38 - 11:41
    varten se avaa tiedoston, joka sisältää
  • 11:41 - 11:44
    kuvauksen järjestelmän aikavyöhykkeestä,
  • 11:44 - 11:47
    ja se kutsuu openia. Siis,
  • 11:47 - 11:49
    jos ottaisin vain open-järjestelmäkutsun pois käytöstä
  • 11:49 - 11:51
    blogissani, niin se ei voisi tehdä
  • 11:51 - 11:54
    tarvittavaa aikamuunnosta, mikä on
  • 11:54 - 11:57
    oikeastaan vanha ongelma, joka pätee myös
  • 11:57 - 11:59
    setuid-ohjelmiin ja on pätenyt niihin jo
  • 11:59 - 12:03
    vuosikymmeniä, voidaankin siis tehdä niin, että
  • 12:03 - 12:06
    koodi järjestetään uudelleen siten, että ennen kuin
  • 12:06 - 12:08
    estää tai, yleisesti ottaen, pudottaa oikeuksia,
  • 12:08 - 12:13
    ensin tehdään open-kutsut,
  • 12:13 - 12:15
    otetaan ne esimerkiksi, ja
  • 12:15 - 12:17
    sitten poistetaan open käytöstä, ja sitten katsotaan
  • 12:17 - 12:19
    hyökkääjän tarjoamaa dataa,
  • 12:19 - 12:22
    koska jos hyökkääjä tai mikä tahansa lähde,
  • 12:22 - 12:24
    johon ei luoteta, yrittää hakkeroida palveluasi, se tapahtuu
  • 12:24 - 12:26
    palvelullesi annetun datan avulla,
  • 12:26 - 12:29
    ympäristö on saastunut, joten katsotaan,
  • 12:29 - 12:31
    minkälaiset elementit ympäristössä
  • 12:31 - 12:32
    hyökkääjä voi määrätä ja
  • 12:32 - 12:34
    ennen kuin koskee niiden yhteenkään tavuun, täytyy
  • 12:34 - 12:36
    tehdä kaikki vaaralliset toimenpiteet, jos vain voi.
  • 12:36 - 12:39
    Siis, tässä tapauksessa, kutsun localtime-funktiota
  • 12:39 - 12:42
    kerran ennen kuin pudotan pois open-järjestelmäkutsun,
  • 12:42 - 12:45
    ja libc tallentaa välimuistiin
  • 12:45 - 12:48
    aikavyöhykedatan ja ensi kerralla, kun kutsun sitä
  • 12:48 - 12:50
    sen jälkeen, kun olen käsitellyt hyökkääjän
  • 12:50 - 12:52
    määrittelemää koodia, ei ole enää tarvetta käyttää
  • 12:52 - 12:54
    open-funktiota. Tämä on suuri etu
  • 12:54 - 12:57
    seccomp:n hyväksi ja muita vastaavia teknologioita,
  • 12:57 - 13:03
    kuten SELinuxia, vastaan, sillä ne asettavat
  • 13:03 - 13:04
    estot järjestelmäkutsuille
  • 13:04 - 13:07
    koko prosessin tasolla, joten tämä
  • 13:07 - 13:09
    olkoon esimerkkinä siitä, mitä
  • 13:09 - 13:10
    pitäisi tehdä: Pitäisi katsoa
  • 13:10 - 13:12
    prosessia ja, ainakin jos on
  • 13:12 - 13:14
    pääsy lähdekoodiin, pitää katsoa, mitä
  • 13:14 - 13:16
    kaikkea täytyy tehdä ennen kuin voi
  • 13:16 - 13:18
    luopua oikeuksista, ja siirtää kaikki sellainen aiemmaksi.
  • 13:18 - 13:21
    Näin siis tein.
  • 13:21 - 13:24
    Tämä tässä on mallikuva
  • 13:24 - 13:28
    Viron kyberturvallisuuskeskukselta,
  • 13:28 - 13:30
    tämäkin on siis aito.
  • 13:31 - 13:33
    Okei, siis, jatketaan
  • 13:33 - 13:36
    seuraavaan ajatukseen. Sanotaan, että
  • 13:36 - 13:38
    joku hakkeroi blogimoduulin, ja
  • 13:38 - 13:41
    että joku toinen käyttää samaa moduulia, mutta
  • 13:41 - 13:42
    omaa salasanaansa.
  • 13:42 - 13:45
    Tämä on yleinen ongelma verkkosivuilla,
  • 13:45 - 13:47
    joilla on jonkinlainen kirjautumistoiminto,
  • 13:47 - 13:49
    josta saa jonkinlaisen istuntotunnisteen tai
  • 13:49 - 13:51
    jonkin vastaavan, ja jos joku onnistuu
  • 13:51 - 13:54
    kaappaamaan väliohjelmiston
  • 13:54 - 13:56
    tai palvelinkomponentin,
  • 13:56 - 13:59
    hän pystyy näkemään kaikki muutkin yhteydet,
  • 13:59 - 14:01
    jos sama prosessi käsittelee niitä.
  • 14:01 - 14:04
    Se on siis merkittävä ongelma,
  • 14:04 - 14:07
    jonka voi kyllä korjata, mikä
  • 14:07 - 14:09
    on meille varsin hyvä asia.
  • 14:09 - 14:13
    Ja esimerkissäni tämä johti minut käyttämään CGI:tä
  • 14:13 - 14:16
    FastCGI:n sijaan, FastCGI on siis
  • 14:16 - 14:19
    uudempi versio CGI:stä,
  • 14:19 - 14:21
    ja sen ideana on, ettei
  • 14:21 - 14:24
    uutta prosessia käynnistetä jokaista
  • 14:24 - 14:27
    pyyntöä varten, vaan käytetään Unix domain
  • 14:27 - 14:31
    socketia, tai muuta pistoketta FastCGI-prosessiin,
  • 14:31 - 14:33
    joka avaa ehkä yhden säikeen
  • 14:33 - 14:36
    pyyntöä kohden tai jotain sellaista, mutta yleensä
  • 14:36 - 14:38
    FastCGI:n kanssa yritetään käsitellä
  • 14:38 - 14:40
    pyynnöt samassa prosessissa, jotta
  • 14:40 - 14:42
    voidaan käyttää kyseistä prosessia välimuistin ylläpitoon,
  • 14:42 - 14:46
    joten FastCGI on suorituskyvyn kannalta edullinen valinta,
  • 14:46 - 14:47
    mutta tietoturvasyistä en
  • 14:47 - 14:51
    käytä FastCGI:tä, joten en voi käyttää
  • 14:51 - 14:53
    välimuistia, mikä on merkittävä haittapuoli
  • 14:53 - 14:54
    ja voisi arvella, että blogista tulee lopulta
  • 14:54 - 14:57
    todella, todella hidas. Siis,
  • 14:57 - 14:59
    ensiksi, minun täytyy käyttää CGI:tä
  • 14:59 - 15:02
    FastCGI:n sijaan ja toiseksi, on yhä mahdollista
  • 15:02 - 15:05
    käyttää debuggaukseen tarkoitettuja API:ta. Siis, jos käyttää GDB:tä tai
  • 15:05 - 15:07
    jotain muuta debuggeria toisen
  • 15:07 - 15:10
    prosessin seurantaan, se käyttää ptrace-API:ta,
  • 15:10 - 15:13
    mutta sekin on pohjimmiltaan järjestelmäkutsu, joten voin käyttää seccompia
  • 15:13 - 15:18
    ptracen kieltämiseksi. Jos noudatan näitä kahta taktiikkaa, ja
  • 15:18 - 15:21
    hyökkääjä kaappaa blogin prosessin, kaikki
  • 15:21 - 15:24
    mitä hän voi nähdä, on hänen itse lähettämänsä data.
  • 15:24 - 15:26
    Kysessä on siis suuri etu.
  • 15:26 - 15:30
    Okei, ENISA on itse asiassa EU:n virasto,
  • 15:30 - 15:32
    mikä on mielestäni hyvin häiritsevää,
  • 15:32 - 15:34
    sillä se kuluttaa paljon veronmaksajien rahoja,
  • 15:34 - 15:39
    mutta ei siitä sen enempää. Oletetaan, että hyökkääjä
  • 15:39 - 15:41
    pystyy hakkeroimaan blogini. Silloin hän pystyy kiertämään
  • 15:41 - 15:43
    kaiken pääsynhallinnan, jota blogissani käytetään.
  • 15:43 - 15:47
    Siis esimerkiksi, jos minulla on ylläpitosivu tai
  • 15:47 - 15:51
    jokin kirjautumista vaativa osa verkkosivusta,
  • 15:51 - 15:53
    ja sitä hallitsee sama ohjelma, ja
  • 15:53 - 15:56
    pääsynhallintaa tehdään siis blogin
  • 15:56 - 15:58
    CGI:ssä, ja joku onnistuu
  • 15:58 - 15:59
    hakkeroimaan blogini CGI:n, hän voi
  • 15:59 - 16:03
    halutessaan vain ohittaa hallinnan, joten on
  • 16:03 - 16:06
    hyvin haastavaa tehdä pääsynhallintatoimenpiteitä, joita ei ole
  • 16:06 - 16:08
    mahdollista kiertää, jos ne toteuttaa omassa
  • 16:08 - 16:10
    koodissaan. Ratkaisu on siis olla tekemättä sitä
  • 16:10 - 16:13
    omassa koodissa. En rajoita mitenkään
  • 16:13 - 16:15
    pääsyä omassa blogissani, vaan teen sen
  • 16:15 - 16:19
    LDAP-palvelimen puolella. Jos siis yhdistää blogiini
  • 16:19 - 16:21
    ja antaa salasanan, blogi itse ei tiedä,
  • 16:21 - 16:22
    onko salasana oikein
  • 16:22 - 16:25
    vaiko väärin. Esimerkiksi, jos
  • 16:25 - 16:27
    on käyttöliittymä, jonka avulla voi lisätä
  • 16:27 - 16:28
    uusia blogijulkaisuja tai muokata vanhoja
  • 16:28 - 16:30
    sellaisia, jota varten täytyy tunnistautua,
  • 16:30 - 16:32
    mutta blogin CGI ei tiedä, ovatko tunnukset
  • 16:32 - 16:33
    oikein vai väärin ja avaa
  • 16:33 - 16:35
    yhteyden LDAP-palvelimeen käyttäen
  • 16:35 - 16:37
    annettuja tunnuksia, ja vasta LDAP-palvelin
  • 16:37 - 16:41
    sanoo kyllä tai ei. Koska estimme pääsyn
  • 16:41 - 16:44
    ptrace-järjestelmäkutsuun ja prosessit
  • 16:44 - 16:47
    on eristetty toisistaan, se tarkoittaa,
  • 16:47 - 16:49
    ettei mitään jää kierrettäväksi.
  • 16:49 - 16:50
    Siis, jos joku hakkeroi blogini,
  • 16:50 - 16:53
    hän ei juuri hyödy, koska
  • 16:53 - 16:55
    hän voi käytännössä tehdä vain samoja asioita
  • 16:55 - 16:57
    kuin jo valmiiksi. Hän voi vain kommunikoida
  • 16:57 - 16:59
    LDAP-palvelimen kanssa.
  • 17:00 - 17:02
    Jes, nyt aletaan jo puhua
  • 17:02 - 17:04
    James Bond -tason jutuista
  • 17:04 - 17:08
    hyökkäyksien monimutkaistuessa entisestään.
  • 17:08 - 17:09
    Samalla ala innostui
  • 17:09 - 17:11
    uhkatiedustelufiideistä, jotka
  • 17:11 - 17:13
    ovat täysin turhia. Älkää käyttäkö niihin rahaa.
  • 17:13 - 17:15
    Sanotaan siis, että hyökkääjä hakkeroi
  • 17:15 - 17:19
    blogini, ja siirtyi tinyldapin pariin, ja
  • 17:19 - 17:22
    nyt siis hyökkää tinyldapia kohtaan. Silloin hän pystyykin
  • 17:22 - 17:24
    pääsemään käsiksi toisiin tileihin, koska tinyldap
  • 17:24 - 17:28
    käsittelee myös yhteyksiä toisiin blogin ilmentymiin,
  • 17:28 - 17:30
    joten ongelma on sama kuin aiemminkin,
  • 17:30 - 17:31
    maaliviivaa on vain siirretty
  • 17:31 - 17:34
    hieman eteenpäin. Tämä täytyy estää,
  • 17:34 - 17:37
    ja itsestäänselvä ratkaisu on
  • 17:37 - 17:39
    tehdä sama homma kuin blogin kanssa
  • 17:39 - 17:42
    ja käyttää yhtä LDAP-palvelimen prosessia jokaista
  • 17:42 - 17:45
    pyyntöä kohden, ja sitten vain kiellämme
  • 17:45 - 17:50
    ptracen käytön. Siis, enää ei ole mahdollista
  • 17:50 - 17:52
    nähdä, vaikka pystyisikin ajamaan koodia
  • 17:52 - 17:53
    LDAP-palvelimen sisällä, ei olisi mahdollista nähdä,
  • 17:53 - 17:55
    mitä salasanoja toiset käyttäjät käyttävät.
  • 17:55 - 17:59
    On siis yhä mahdollista nähdä-
    Okei, ala tekee
  • 17:59 - 18:02
    taas jotain hevonpaskaa. On yhä mahdollista nähdä
  • 18:02 - 18:04
    salasana LDAP:n muistista, koska
  • 18:04 - 18:07
    LDAP-palvelimella täytyy olla tallessa versio
  • 18:07 - 18:09
    salasanasta, jota vastaan salasanoja voi tarkistaa ja
  • 18:09 - 18:10
    alan käytäntö, paras käytäntö, on
  • 18:10 - 18:13
    käyttää suolattuja tiivisteitä, joten itse salasanaa
  • 18:13 - 18:14
    ei olekaan muistissa ollenkaan.
  • 18:14 - 18:17
    Silti, jos joku onnistuu hyökkäyksessä
  • 18:17 - 18:20
    tinyldapia kohtaan blogin kautta, hän pystyy
  • 18:20 - 18:21
    varastamaan tiivisteet ja yrittämään niiden murtamista,
  • 18:21 - 18:25
    mutta koska olen ainoa, joka lisää käyttäjiä,
  • 18:25 - 18:27
    voin vapaasti hallita salasanojen turvallisuusvaatimuksia,
  • 18:27 - 18:32
    joten onnea vaan väsytyshyökkäyksen kanssa.
  • 18:33 - 18:38
    Okei, tämä on oikeastaan aito ongelma,
  • 18:38 - 18:40
    ei kuitenkaan nimenomaan blogini suhteen
  • 18:40 - 18:41
    vaan toisten verkkopalvelujen tai siis
  • 18:41 - 18:44
    kaikkien palvelujen, joihin voi yhdistää internetin kautta:
  • 18:44 - 18:45
    Mitä jos hyökkääjä ei haluakaan varastaa
  • 18:45 - 18:48
    dataa, vaan salata sen?
  • 18:48 - 18:50
    Kyseessä on siis kiristysohjelma. Mitä sille voi
  • 18:50 - 18:54
    siis tehdä? Minun ideani oli tallentaa
  • 18:54 - 18:57
    data lukumuistiin, siis
  • 18:57 - 18:58
    LDAP-palvelimella on muisti, joka sisältää
  • 18:58 - 19:00
    kaikki blogimerkinnät ja se on saatavilla vain luettavaksi
  • 19:00 - 19:03
    LDAP-prosessille. Sitä voi vain lukea,
  • 19:03 - 19:06
    ja jos siihen haluaa kirjoittaa,
  • 19:06 - 19:08
    jos esimerkiksi pitää lisätä uusi merkintä,
  • 19:08 - 19:10
    se lisätäänkin toiseen tiedostoon, jota
  • 19:10 - 19:13
    kutsun journaliksi. SQL-tietokannoilla on käytössä
  • 19:13 - 19:16
    vastaava idea, ja sitä käytetään transaktioiden
  • 19:16 - 19:18
    kumoamiseen. Voin tehdä samoin,
  • 19:18 - 19:19
    kyseessä on periaatteessa lokitiedosto,
  • 19:19 - 19:22
    mikä tarkoittaa, että kaikki muutokset
  • 19:22 - 19:25
    viime kerrasta, kun muisti,
  • 19:25 - 19:28
    lukumuisti, luotiin, kaikki eroavaisuudet
  • 19:28 - 19:30
    tallennetaan peräkkäin lokitiedostoon,
  • 19:30 - 19:33
    eli journaliin. Suorituskyky
  • 19:33 - 19:35
    huononee sitä mukaa, kun journal kasvaa,
  • 19:35 - 19:38
    joten silloin tällöin täytyy yhdistää
  • 19:38 - 19:40
    lukumuistiosio ja journal
  • 19:40 - 19:42
    uudeksi, isommaksi lukumuistiosioksi ja
  • 19:42 - 19:44
    sen teen itse manuaalisesti,
  • 19:45 - 19:49
    koska tinyldap ei pystyisi siihen,
  • 19:49 - 19:50
    koska siltä on kielletty muistiin kirjoittaminen.
  • 19:50 - 19:52
    Sehän oli osa turvallisuusmekanismia.
  • 19:52 - 19:56
    Käyttäen seccompia voin poistaa käytöstä
  • 19:56 - 19:59
    järjestelmäkutsuja, voin myös asentaa suodattimia, joten
  • 19:59 - 20:01
    voin sanoa, että open on sallittu toimenpide, mutta vain, jos
  • 20:01 - 20:05
    käyttää O_APPENDia. O_APPEND Unixin open-järjestelmäkutsun
  • 20:05 - 20:08
    yhteydessä tarkoittaa, että jokainen kirjoitus, jonka
  • 20:08 - 20:10
    tiedostonkuvaukseen tekee, tallentuu automaattisesti
  • 20:10 - 20:13
    aina loppuun. Siis, jos tiedän, että jos joku
  • 20:13 - 20:16
    onnistuu pääsemään käsiksi tinyldapin
  • 20:16 - 20:19
    binaaritiedostoon ja pystyy sen avulla kirjoittamaan journaliin, niin
  • 20:19 - 20:21
    ainoa paikka, johon muutoksia voi tehdä,
  • 20:21 - 20:23
    on aivan tiedoston lopussa, mikä on oikeastaan
  • 20:23 - 20:25
    todella hyvä asia, sillä se tarkoittaa, että
  • 20:25 - 20:28
    jos hakkeroi palveluni ja lisää roskaa
  • 20:28 - 20:31
    blogiini, voin vain poistaa palan tiedoston lopusta ja
  • 20:31 - 20:33
    tilanne on sillä selvä. Jos tätä verrataan
  • 20:33 - 20:35
    tavanomaiseen SQL-tietokantaa, jos silloin joku kirjoittaa
  • 20:35 - 20:38
    tietokantaan, muutosten kumoamiseksi täytyy ladata
  • 20:38 - 20:42
    varmuuskopio, koska mikä tahansa
  • 20:42 - 20:44
    on saattanut muuttua missä tahansa.
  • 20:44 - 20:46
    Tinyldapilla ei kuitenkaan ole edes
  • 20:46 - 20:48
    pääsyä tiedostojärjestelmään, eikä se siis pysty
  • 20:48 - 20:49
    muuttamaan mitään muistin sisältöä, joten
  • 20:49 - 20:52
    voin palata rauhassa nukkumaan.
  • 20:52 - 20:53
    Ala käytti rahaa
  • 20:53 - 20:55
    kyberturvallisuusverkostoarkkitehtuuriin.
  • 20:57 - 20:59
    Jep. Journalin päivitys on asia,
  • 20:59 - 21:02
    joka minun täytyy manuaalisesti tehdä kaistan ulkopuolisesti.
  • 21:02 - 21:04
    Se ei siis ole mikään automaattinen prosessi,
  • 21:04 - 21:06
    koska teen sen manuaalisesti ja
  • 21:06 - 21:08
    kun teen sen,
  • 21:08 - 21:11
    dataahan ei ole paljoa, vain viikon
  • 21:11 - 21:13
    tai parin ajalta, voin vain lukea sen
  • 21:13 - 21:15
    läpi ja tarkistaa, että kaikki näyttää
  • 21:15 - 21:19
    siltä, miltä pitäisi. Tämä ei välttämättä ole vaihtoehto
  • 21:19 - 21:21
    kaikissa muissa skenaarioissa, mutta on tärkeää
  • 21:21 - 21:23
    ymmärtää, että vaikka dataa on enemmän,
  • 21:23 - 21:25
    kaikkea dataa ei yleensä olekaan paljoa enempää.
  • 21:25 - 21:27
    Suurin osa sisällöstä on muuttumatonta lukusisältöä,
  • 21:27 - 21:29
    ja lisäksi on joitain lokitiedostoja, joihin
  • 21:29 - 21:33
    lisätään jatkuvasti dataa ja jotka kasvavat kasvamistaan,
  • 21:33 - 21:36
    mutta yleensä on olemassa osa datasta,
  • 21:36 - 21:38
    osa, johon siis
  • 21:38 - 21:42
    henkilötiedot kuuluvat, kuten myös
  • 21:42 - 21:45
    laskutustiedot, ja tämä data on yleensä
  • 21:45 - 21:48
    vähäistä sekä lähes muuttumatonta ja siihen voidaan
  • 21:48 - 21:50
    soveltaa samaa strategiaa.
  • 21:54 - 21:56
    Jaa, no niin. Okei.
  • 21:57 - 21:59
    Hyökkääjä voi siis yhä kirjoittaa roskaa
  • 21:59 - 22:01
    blogiini, mikä ei ole ideaalinen tilanne,
  • 22:01 - 22:04
    mutta koska kaikki, mitä hän voi tehdä, on lisätä
  • 22:04 - 22:07
    dataa journalin loppuun, voin käyttää tekstieditoria
  • 22:07 - 22:10
    ja avata journalin sekä rajata sen sisällön johonkin kohtaan.
  • 22:10 - 22:12
    Saan siis datan palautettua
  • 22:12 - 22:14
    tilanteeseen, jossa blogia alettiin saastuttamaan.
  • 22:14 - 22:16
    Tilanne ei ole ideallinen,
  • 22:16 - 22:21
    mutta kuitenkin todella hyvä hätätapauksien kannalta,
  • 22:21 - 22:22
    koska on mahdollista
  • 22:22 - 22:24
    tutkia tilannetta ensin rauhassa.
  • 22:24 - 22:25
    Ensin poistetaan käytöstä kirjoitusoikeudet,
  • 22:25 - 22:29
    sitten vandalismi poistetaan journalista,
  • 22:29 - 22:33
    ja tässä kohtaa voidaan olla varmoja, ettei mitään ole menetetty,
  • 22:33 - 22:36
    koska jos blogista haluaa poistaa merkinnän,
  • 22:36 - 22:39
    sekin on mahdollista, mutta se tarkoittaa käytännössä,
  • 22:39 - 22:40
    että journalin loppuun lisätään
  • 22:40 - 22:41
    merkintä, joka sanoo: "tämä tieto
  • 22:41 - 22:43
    poistetaan", ja tämän merkinnän voi vain poistaa,
  • 22:43 - 22:46
    jolloin poistettu tieto saadaan takaisin. Ei siis ole
  • 22:46 - 22:47
    mahdollista vandalisoida mitään blogin
  • 22:47 - 22:51
    dataa, joka oli siellä ennen vandalisointia.
  • 22:51 - 22:53
    On mahdollista ainoastaan lisätä loppuun roskaa,
  • 22:53 - 22:55
    ja tämän mahdollisuuden kanssa jo pärjätään.
  • 22:55 - 22:58
    Pitäisi olla johtavana ajatuksena
  • 22:58 - 23:00
    kaiken turvallisuuden lomassa, että
  • 23:00 - 23:03
    jos joutuu hakkeroinnin uhriksi, tilanne on
  • 23:03 - 23:06
    hyvin stressaava, pomo tulee olemaan
  • 23:06 - 23:08
    olan takana hengittelemässä niskaasi kyselemässä, että
  • 23:08 - 23:10
    "Onko jo valmista?" ja että "Onko se nyt korjattu?", ja sillä hetkellä
  • 23:10 - 23:13
    tulisi olla mahdollisimman vähän asioita, joista huolehtia.
  • 23:13 - 23:15
    Kaikki stressi kannattaa siirtää
  • 23:15 - 23:17
    hakkerointia edeltävälle ajalle, koska
  • 23:17 - 23:19
    silloin aikaa on enemmän.
  • 23:20 - 23:23
    Okei, ala teki taas kaikenlaista.
  • 23:26 - 23:28
    Siis, entä jos hyökkääjä ei kirjoitakaan
  • 23:28 - 23:31
    roskaa journaliin, vaan kirjoittaa jotain
  • 23:31 - 23:33
    haitallista journaliin, joka aiheuttaa sen,
  • 23:33 - 23:36
    että kun jokin tinyldap-ilmentymä lukee sitä
  • 23:36 - 23:38
    seuraavan kerran, ilmentymä saastuu?
  • 23:39 - 23:42
    Se on mahdollisuus, joka on
  • 23:42 - 23:43
    meille hyvin epäedullinen,
  • 23:43 - 23:49
    mutta on tajuttava, kuinka uskomaton skenaario
  • 23:49 - 23:52
    on kyseessä. Nyt puhutaan hyökkääjästä,
  • 23:52 - 23:55
    joka on löytänyt vakaan nollapäivähaavoittuvuuden blogista,
  • 23:55 - 23:57
    ja käyttänyt sitä sekä toista
  • 23:57 - 24:00
    vakaata nollapäivähaavoittuvuutta tinyldapissa kirjoittaakseen journaliin,
  • 24:00 - 24:01
    ja käyttänyt vielä
  • 24:01 - 24:05
    kolmatta nollapäivähaavoittuvuutta journalin
  • 24:05 - 24:08
    lukukoodia vastaan.
  • 24:08 - 24:11
    No, kyllä, kyseessä on yhä ongelma, mutta
  • 24:11 - 24:14
    riskiä on vähennetty merkittävästi.
  • 24:14 - 24:16
    Tämä on juuri sitä,
  • 24:16 - 24:18
    mitä yritän sanoa:
  • 24:18 - 24:21
    kyseessä ei ole kaikki tai ei mitään -tilanne. Riittää,
  • 24:21 - 24:24
    että riski saadaan puolitettua, se on jo hyvin
  • 24:24 - 24:26
    tärkeää, ja sitä pitäisi tehdä aina,
  • 24:26 - 24:31
    kun mahdollista: Mitä enemmän riskiä saa kavennettua,
  • 24:31 - 24:33
    sitä paremmassa tilanteessa ollaan,
  • 24:33 - 24:34
    kun käy huonosti.
  • 24:34 - 24:38
    Koska mitä pienempi määrä koodia,
  • 24:38 - 24:40
    jota kohtaan voi yhä hyökätä, on,
  • 24:40 - 24:43
    sitä paremmin tätä koodia voi tarkastaa ja varmistua,
  • 24:43 - 24:45
    että koodi on kunnossa. Koodia voi näyttää ystäville ja
  • 24:45 - 24:48
    hekin voivat tarkastaa sitä. On ehdottoman tarpeellista,
  • 24:48 - 24:49
    että tätä aikaa säästetään, koska
  • 24:49 - 24:51
    silloin tällöin käy niin, että pääsen
  • 24:51 - 24:53
    näkemään koko koodikannan, ja
  • 24:53 - 24:55
    tavanomainen koodikanta kaupallisille
  • 24:55 - 24:57
    tuotteille koostuu gigatavuista lähdekoodia.
  • 24:57 - 24:59
    Kukaan ei pysty lukemaan sitä kokonaisuudessaan.
  • 24:59 - 25:03
    Olen hyvä työssäni, mutten aivan niin hyvä.
  • 25:03 - 25:06
    Siis, tämä on hyvä tilanne.
  • 25:06 - 25:08
    Ala taisi myydä suojausta
  • 25:08 - 25:11
    hajautettuja palvelunestohyökkäyksiä kohtaan, juu, niinpä niin.
  • 25:11 - 25:14
    Mitä siis tapahtuu, jos joku hyökkää verkkopalvelinta kohtaan?
  • 25:14 - 25:16
    Kyseessä on edelleen suuri ongelma.
  • 25:16 - 25:21
    Pahinta on siis
  • 25:21 - 25:23
    täydellinen vahinko, eikö niin?
  • 25:23 - 25:24
    Se on pahin mahdollisuus, joka voi toteutua,
  • 25:24 - 25:26
    jos joku onnistuu hyökkäyksessä verkkopalvelinta kohtaan.
  • 25:26 - 25:29
    Hyökkääjä näkee kaiken kulkevan verkkoliikenteen,
  • 25:29 - 25:31
    hän pystyy vakoilemaan TLS-suojattuja
  • 25:31 - 25:32
    yhteyksiä ja nuuskimaan sieltä
  • 25:32 - 25:35
    salasanoja, mikä on todella huono homma.
  • 25:35 - 25:37
    Valitettavasti ei ole paljoakaan,
  • 25:37 - 25:38
    jota asialle voisi tehdä.
  • 25:41 - 25:44
    Olisi mahdollista tehdä jako,
  • 25:44 - 25:46
    mikä on asia, josta on puhuttu
  • 25:46 - 25:48
    jo jonkin aikaa ja OpenSSH tekee niin.
  • 25:48 - 25:50
    Se tekee kaiken riskialttiin kryptografian
  • 25:50 - 25:52
    toisessa prosessissa, ja käyttää
  • 25:52 - 25:55
    hiekkalaatikkoa kyseisen prosessin rajoittamiseen.
  • 25:55 - 25:57
    Se olisi mahdollista, mutta kukaan ei ole toteuttanut sitä vielä
  • 25:57 - 25:58
    OpenSSL:ssä, OpenSSL ei siis
  • 25:58 - 26:01
    tue sitä. Verkkopalvelimeni
  • 26:01 - 26:04
    tukee myös Mbed TLS:ää, mitä OpenSSL ei tue.
  • 26:04 - 26:06
    Voisin käyttää tähän aikaa,
  • 26:06 - 26:07
    ja itse asiassa olenkin
  • 26:07 - 26:10
    jo käyttänyt siihen aikaa, mutta
  • 26:10 - 26:11
    se ei ole vielä valmis. Se olisi
  • 26:11 - 26:13
    hyvä tapa vähentää riskiä. Saatatte
  • 26:13 - 26:15
    huomata, että työkalut, joita käytän
  • 26:15 - 26:18
    riskin vähentämiseen ovat vain muutamia samoja.
  • 26:18 - 26:22
    Ei ole mitään noituutta.
  • 26:22 - 26:25
    En keksi uusia tapoja tarkastella asioita.
  • 26:25 - 26:26
    Teen vain samoja asioita
  • 26:26 - 26:29
    uudelleen ja uudelleen. Tunnistan sen osan koodista,
  • 26:29 - 26:31
    joka on vaarallinen, ja sen jälkeen
  • 26:31 - 26:33
    mietin, miten voisin pienentää kyseistä
  • 26:33 - 26:35
    osaa koodista tai ehkä siirtää sen toiseen
  • 26:35 - 26:37
    prosessiin, jota rajoitetaan. Sama täytyy
  • 26:37 - 26:39
    tehdä myös verkkopalvelimelle,
  • 26:39 - 26:41
    tietenkin, mutta prosessi on kesken.
  • 26:43 - 26:45
    Jep, jälleen, niinpä niin.
  • 26:45 - 26:48
    Miksen ole siis tehnyt sitä vielä?
  • 26:48 - 26:51
    Verkkopalvelimessani on koodia kääntäessä tehtävä
  • 26:51 - 26:53
    päätös, haluaako SSL-tukea käyttää vaiko ei.
  • 26:53 - 26:55
    Näemme, että binaaritiedosto on
  • 26:55 - 26:57
    huomattavasti suurempi SSL:n ollessa käytössä.
  • 26:57 - 26:59
    Näytän tämän, koska se merkitsee,
  • 26:59 - 27:02
    että hyökkäyspinnasta suurin osa on SSL-koodissa,
  • 27:02 - 27:04
    ei siis minun koodissani. Jos siis voin
  • 27:04 - 27:07
    siirtää SSL-koodin toiseen prosessiin,
  • 27:07 - 27:11
    salaisen avaimen tulee silti olla näkyvillä,
  • 27:11 - 27:12
    koska sitähän TLS tarvitsee,
  • 27:12 - 27:14
    salaista avainta siis, muutoin se ei pysty
  • 27:14 - 27:16
    tarvittavaan kryptografiaan. Suurimmalla osalla
  • 27:16 - 27:18
    hyökkäyspinnasta olisi siis yhä pääsy avaimiin,
  • 27:18 - 27:20
    voisin tehdä sen silti, koska
  • 27:20 - 27:22
    omassa kodissani saattaa olla bugeja
  • 27:22 - 27:24
    SSL-koodin sijaan, mutta se on vain 5%
  • 27:24 - 27:26
    koko hyökkäyspinnasta, joten
  • 27:26 - 27:30
    teen sen luultavasti jossain vaiheessa, mutta
  • 27:30 - 27:32
    on turhaa odottaa mitään ihmeitä.
  • 27:32 - 27:35
    Bugit OpenSSL:ssä koituvat vielä kuolemakseni,
  • 27:35 - 27:38
    sille en voi oikeastaan mitään.
  • 27:40 - 27:42
    Naurua
  • 27:42 - 27:45
    Okei, tiedän siis, mitä ajattelette:
  • 27:45 - 27:48
    Äänekästä naurua
  • 27:48 - 27:51
    entä bugit käyttöjärjestelmän ytimessä?
  • 27:51 - 27:53
    Katsoin siis läpi muutamia viime aikaisia
  • 27:53 - 27:54
    ytimen bugeja ja kävi ilmi, että
  • 27:54 - 27:57
    ne yleensä tapahtuvat järjestelmäkutsuissa, joita
  • 27:57 - 28:00
    harvoin käytetään tavallisissa ohjelmissa. Koska rajoitan
  • 28:00 - 28:02
    kaikki järjestelmäkutsut, joita en oikeasti
  • 28:02 - 28:05
    tarvitse, yksikään bugeista ei koske minua.
  • 28:05 - 28:08
    Tämähän on yleinen kuvio
  • 28:08 - 28:09
    ytimen bugien suhteen.
  • 28:09 - 28:12
    On olemassa projekti nimeltä Sandstorm,
  • 28:12 - 28:17
    joka käyttää ptracea ja seccomp-seurantaa
  • 28:17 - 28:18
    järjestelmäkutsujen hyökkäyspinnan
  • 28:18 - 28:22
    vähentämiseksi ja joka laittaa tavalliset palvelut
  • 28:22 - 28:26
    verkkopalveluille tarkoitettuun hiekkalaatikkoon, ja tämä
  • 28:26 - 28:29
    auttaa kiertämään kaikenlaisia ytimen bugeja
  • 28:29 - 28:31
    jo itsessään, kyseessähän on siis
  • 28:31 - 28:33
    asia, jota varten ei tarvitse paljoa työskennellä,
  • 28:33 - 28:35
    tietenkin, jos käytössä on lista järjestelmäkutsuista,
  • 28:35 - 28:36
    niin käytetään valkoista listaa,
  • 28:36 - 28:38
    pidetään yllä listaa asioista,
  • 28:38 - 28:39
    jotka ovat erikseen sallittuja,
  • 28:39 - 28:43
    loput on kielletty, eikä toisin päin.
  • 28:43 - 28:44
    Yksikään tavanomainen ytimen bugi ei siis kosketa
  • 28:44 - 28:47
    minua, koska hyödynnän seccompia.
  • 28:47 - 28:49
    Ytimen bugit eivät ole yhtä iso
  • 28:49 - 28:52
    ongelma kuin olettaisi. Ne ovat yhä
  • 28:52 - 28:55
    olemassa, ellen ole paikannut niitä,
  • 28:55 - 28:58
    mutta blogin kautta niihin ei pääse käsiksi.
  • 28:58 - 28:59
    Minulla on pieni tunnustus:
  • 28:59 - 29:01
    Olen tavallaan trolli ja se vaikutti
  • 29:01 - 29:05
    myös tähän projektiin, käytin siis
  • 29:05 - 29:09
    huonointa ohjelmointikieltä, C:tä.
  • 29:09 - 29:12
    Trollaan siis turvallisuusporukkaa
  • 29:12 - 29:14
    ja trollaan myös Java-porukkaa,
  • 29:14 - 29:15
    joka väittää, että tulisi käyttää
  • 29:15 - 29:17
    monisäikeistystä parantamaan suorituskykyä eikä
  • 29:17 - 29:18
    yhtä prosessia pyyntöä kohden,
  • 29:18 - 29:22
    käytän siis kahta fork- ja exec-kutsua
  • 29:22 - 29:23
    jokaista pyyntöä kohden.
  • 29:23 - 29:25
    Trollaan tietokantaporukkaa,
  • 29:25 - 29:27
    en käytä välimuistia,
  • 29:27 - 29:28
    en käytä connection poolia
  • 29:28 - 29:30
    ja myös suorituskykyporukkaa, koska
  • 29:30 - 29:32
    ratkaisuni on kaikesta huolimatta nopeampi kuin suurin osa
  • 29:32 - 29:34
    tavanomaisista ratkaisuista, joten ohjelmiston
  • 29:34 - 29:38
    suunnittelemisessa tällä tavoin ei ole juuri
  • 29:38 - 29:39
    huonoja puolia,
  • 29:39 - 29:42
    ratkaisu on muita vaihtoehtoja hitaampi,
  • 29:42 - 29:45
    mutta suurin osa muista ohjelmistoista ei kuitenkaan
  • 29:45 - 29:47
    ole yhtä nopeita, joten etumatkaa on riittävästi,
  • 29:47 - 29:49
    jotta voi keskittyä turvallisuuteen
  • 29:49 - 29:52
    suorituskyvyn sijaan ollen silti nopeampi.
  • 29:53 - 29:56
    Kerrataan vielä käyttämäni metodologia.
  • 29:56 - 30:00
    Ensimmäiseksi teen listan kaikistä hyökkäyksistä,
  • 30:00 - 30:02
    joita voin kuvitella, ja tarkoitan nyt
  • 30:02 - 30:04
    konkreettisia hyökkäyksiä, jotka voisivat tapahtua,
  • 30:04 - 30:05
    ja ongelmista,
  • 30:05 - 30:07
    jotka niistä seuraisivat.
  • 30:07 - 30:09
    Jokaista listan kohtaa kohden
  • 30:09 - 30:11
    mietin: "miten tämän voisi estää?",
  • 30:11 - 30:14
    "voinko estää tämän?" ja "mitä estämiseksi on tehtävä?".
  • 30:14 - 30:16
    Sen jälkeen teen, mitä pitää, helppoa.
  • 30:16 - 30:18
    Tämä muistuttaa Feynmanin ongelmanratkaisualgoritmia
  • 30:18 - 30:21
    hengeltään. Tätä prosessia kutsutaan
  • 30:21 - 30:23
    uhkamallinnukseksi.
  • 30:23 - 30:26
    Se on kuin kirosana, koska kuulostaa
  • 30:26 - 30:28
    siltä, että siinä on kova työ
  • 30:28 - 30:29
    eikä kukaan halua tehdä sitä, mutta tosiasiassa
  • 30:29 - 30:31
    se on helppoa, pitää vain noudattaa näitä askelia.
  • 30:31 - 30:33
    Ohjelmistoa tutkitaan ja
  • 30:33 - 30:35
    mietitään, millä kaikilla tavoilla sitä kohtaan voisi hyökätä.
  • 30:35 - 30:36
    Sitten harkitaan, miten
  • 30:36 - 30:38
    hyökkäys voitaisiin estää tai toisinaan,
  • 30:38 - 30:40
    voitaisiinko sitä estää ollenkaan
  • 30:40 - 30:43
    ja jos ei, riskin kanssa on selviydyttävä.
  • 30:43 - 30:45
    Tätä kutsutaan siis uhkamallinnukseksi,
  • 30:45 - 30:47
    sitä kannattaa kokeilla, se on mahtavaa.
  • 30:47 - 30:51
    Näitte, että yritin
  • 30:51 - 30:52
    optimoida jotain tiettyä,
  • 30:52 - 30:54
    tavoittelin jotain, tässä tapauksessa
  • 30:54 - 30:57
    mahdollisimman vähäistä koodimäärää.
  • 30:57 - 31:00
    Mitä enemmän koodia on, sitä enemmän bugeja
  • 31:00 - 31:01
    siinä on. Kyseessä on vanha
  • 31:01 - 31:05
    oivallus, muistaakseni alun perin
  • 31:05 - 31:07
    IBM:n tutkimuksesta, jossa saatiin selville,
  • 31:07 - 31:09
    että koodissa olevien bugien määrä on
  • 31:09 - 31:11
    koodirivien määrän funktio.
  • 31:11 - 31:13
    Asia ei oikeasti ole aivan näin simppeli,
  • 31:13 - 31:16
    mutta pohjimmiltaan tämä on totta. Ei puhuta
  • 31:16 - 31:17
    mistä tahansa koodista, jonka määrää halutaan minimoida,
  • 31:17 - 31:20
    vaan jos koodi on vaarallista, haluan erityisesti
  • 31:20 - 31:23
    vähentää sen määrää ja tärkein
  • 31:23 - 31:25
    kategoria, jota pienentää, on
  • 31:25 - 31:28
    turvallisuustakuita yllä pitävä koodi.
  • 31:28 - 31:30
    Turvallisuustakuu on
  • 31:30 - 31:32
    esimerkiksi se, että on mahdotonta kirjautua
  • 31:32 - 31:33
    ilman oikeaa salasanaa.
  • 31:33 - 31:36
    Haluan tällaisia asioita tarkastavaa koodia
  • 31:36 - 31:39
    olevan niin vähän kuin mahdollista, ehkä yksi tai kaksi
  • 31:39 - 31:41
    riviä koodia, jos vain mahdollista,
  • 31:41 - 31:43
    jolloin on selkeää, onko koodi tehty oikein vai
  • 31:43 - 31:45
    väärin. Mitä monimutkaisempi ohjelmakoodi on,
  • 31:45 - 31:47
    sitä vaikeampaa on varmistua,
  • 31:47 - 31:49
    onko se tehty oikein vai ei. Sehän on
  • 31:49 - 31:51
    haluttu lopputulos, varmuus sitä, että
  • 31:51 - 31:54
    koodi on oikein. Kuinka pitkälle siis pääsin?
  • 31:54 - 31:55
    Tulokset ovat mielestäni melko hienot.
  • 31:55 - 31:58
    LDAP-palvelimen voi kirjoittaa 5000 koodirivillä,
  • 31:58 - 32:03
    itse blogi koostuu 3500 koodirivistä,
  • 32:03 - 32:05
    plus LDAP-asiakaskirjasto,
  • 32:05 - 32:06
    plus zlib,
  • 32:06 - 32:09
    mutta käytän zlib:tä vain pakkaamiseen enkä
  • 32:09 - 32:11
    purkamiseen, joten suurin osa hyökkäysskenaarioista
  • 32:11 - 32:14
    ei koske minun zlib-käyttöäni.
  • 32:14 - 32:17
    Verkkopalvelin on melko hidas,
  • 32:17 - 32:18
    jos keskitytään pelkkään HTTP-koodiin,
  • 32:18 - 32:21
    se valitettavasti sisältää myös
  • 32:21 - 32:23
    SSL-kirjaston, joka on useita suuruusluokkia
  • 32:23 - 32:26
    omaa koodiani isompi, ja tämähän on haluttu tilanne.
  • 32:26 - 32:28
    Suurimman riskin ei tulisi olla
  • 32:28 - 32:31
    uudessa koodissa, vaan vanhassa koodissa,
  • 32:31 - 32:34
    jonka joku muu on jo tarkastanut,
  • 32:34 - 32:37
    mikäli vain mahdollista. Tämä on
  • 32:37 - 32:39
    siis optimointistrategia, yritä minimoida
  • 32:39 - 32:41
    vaarallisen koodin määrä, mikä kuulostaa
  • 32:41 - 32:43
    helpolta jutulta, mutta kun katsoo tarkemmin
  • 32:43 - 32:45
    modernia ohjelmistokehitystä, huomaa,
  • 32:45 - 32:48
    että todellisuus on päinvastainen: käytetään
  • 32:48 - 32:50
    mahdollisimman monia ohjelmistokehyksiä.
  • 32:51 - 32:53
    Strategian nimi on TCB-minimointi,
  • 32:53 - 32:55
    sitä kannattaa kokeilla,
  • 32:55 - 32:57
    olen pitänyt aiheesta jo esitelmän ja
  • 32:57 - 32:59
    se on oikeastaan melko helppoa.
  • 32:59 - 33:02
    Kerroin jo, mitä tein
  • 33:02 - 33:06
    blogille vähentääkseni
  • 33:06 - 33:07
    vahinkoa, joka voi aiheutua,
  • 33:07 - 33:10
    jos joku onnistuu kaappaamaan sen,
  • 33:10 - 33:13
    mikä on oikeastaan osa TCB-minimointiprosessia.
  • 33:13 - 33:15
    Blogi oli varsin
  • 33:15 - 33:18
    riskialtis, mutta vähensin
  • 33:18 - 33:21
    oikeuksia ja poistin ylimääräisiä tarkastuksia.
  • 33:21 - 33:24
    Lopulta, vaikka antaisin jokaiselle
  • 33:24 - 33:26
    mahdollisuuden suorittaa koodia blogin sisällä,
  • 33:26 - 33:29
    ei silti olisi mahdollista tehdä mitään, mitä ei olisi jo valmiiksi voinut.
  • 33:29 - 33:31
    Se ei enää kuulu TCB:hen,
  • 33:31 - 33:33
    TCB on osio, joka pitää yllä
  • 33:33 - 33:35
    turvallisuustakuita, joita blogin CGI
  • 33:35 - 33:37
    ei enää pidä.
  • 33:37 - 33:39
    Tämä on siis tavoite.
  • 33:39 - 33:41
    TCB pitää saada niin pieneksi,
  • 33:41 - 33:44
    kuin vain mitenkään mahdollista ja matkan
  • 33:44 - 33:47
    joka askel on tärkeä. Yksikään askel
  • 33:47 - 33:50
    ei ole liian pieni. Jos pienenkin
  • 33:50 - 33:52
    ylimääräisen osan voi poistaa, se kannattaa.
  • 33:52 - 33:54
    Tämä on se, mitä minimoidaan
  • 33:54 - 33:57
    TCB-minimoinnissa. Onnistuin poistamaan
  • 33:57 - 34:00
    blogin TCB:stä. tinyldap:ssa
  • 34:00 - 34:05
    on yhä riskejä, näitte riskimallin:
  • 34:05 - 34:06
    jos joku onnistuu kaappaamaan
  • 34:06 - 34:07
    tinyldap:n, hän pystyy lukemaan
  • 34:07 - 34:09
    tiivisteet ja yrittämään niiden murtamista.
  • 34:09 - 34:11
    Se on yhä huono homma, mutta sen kanssa selviydytään.
  • 34:11 - 34:15
    Jos blogia vandalisoidaan, vahinko
  • 34:15 - 34:17
    voidaan perua käymättä
  • 34:17 - 34:19
    nauha-arkistossa, hyvä.
  • 34:19 - 34:23
    Jos tätä verrataan nykyisiin alan standardeihin,
  • 34:23 - 34:25
    voidaan huomata, että lähestymistapani on
  • 34:25 - 34:27
    paljon parempi. Alalla näkee
  • 34:27 - 34:29
    usein alustavalintoja,
  • 34:29 - 34:31
    jotka tekee johto, eikä tekniikan tuntija.
  • 34:31 - 34:33
    Johtoa ei kiinnosta asiantuntemus eikä
  • 34:33 - 34:36
    riskianalyysi, vaan vastuu
  • 34:36 - 34:38
    usein vain leviää, koska vaikka
  • 34:38 - 34:40
    yritettäisiin selvittää, kuka
  • 34:40 - 34:42
    on vastuussa jostakin osasta, saadaan selville,
  • 34:42 - 34:43
    että vastuussa oli tämä ja tuo tiimi,
  • 34:43 - 34:44
    mutta emme ole siitäkään aivan varmoja,
  • 34:44 - 34:47
    ja tiimi itse asiassa lakkautettiin viime viikolla,
  • 34:47 - 34:50
    tilanne on siis kamala. Ja hiljattain
  • 34:50 - 34:52
    saataville tulleet tekoälytyökalut johtavat myös
  • 34:52 - 34:53
    vastuun leviämiseen.
  • 34:56 - 34:57
    Jotkut taas puolestaan
  • 34:57 - 34:59
    väittävät, että tilanne on niin huono, ettei
  • 34:59 - 35:01
    se voi muuttua huonommaksi; siirrytään siis pilveen,
  • 35:01 - 35:02
    ja silloin tilanne tietenkin huononee
  • 35:02 - 35:07
    välittömästi. Pidän enemmän omasta ratkaisustani.
  • 35:07 - 35:09
    Loppujen lopuksi on tärkeää
  • 35:09 - 35:10
    tajuta, että tietoturvan puute,
  • 35:10 - 35:13
    jota projekteissasi ehkä tällä hetkellä on,
  • 35:13 - 35:16
    on itse aiheutettu ongelma. Kukaan ei seiso
  • 35:16 - 35:18
    haulikon kanssa takanasi
  • 35:18 - 35:21
    uhkailemassa. On mahdollista tarttua toimeen,
  • 35:21 - 35:24
    täytyy vain aloittaa. Ongelmana on itse aiheutettu avuttomuus.
  • 35:24 - 35:25
    Voit oikeasti auttaa
  • 35:25 - 35:28
    itseäsi, mutta se täytyy aloittaa.
  • 35:29 - 35:31
    Niin, miten tähän tilanteeseen päästiin?
  • 35:31 - 35:34
    Tilanne ei selvästi ole hyvä.
  • 35:34 - 35:36
    Ohjelmistot ovat huonoja ja
  • 35:36 - 35:38
    sen takana on muitakin syitä kuin se,
  • 35:38 - 35:40
    että ihmiset ovat tyhmiä. Syitä on muutamia.
  • 35:40 - 35:43
    Aiemmin käytettiin
  • 35:43 - 35:45
    mittatilausohjelmistoja, jotka tehtiin
  • 35:45 - 35:48
    tiettyä tarkoitusta varten ja käytettiin
  • 35:48 - 35:50
    vesiputousmallia. Oli
  • 35:50 - 35:52
    vaatimusspesifikaatioita ja paljon
  • 35:52 - 35:56
    byrokratiaa, eikä elämä ollut helppoa,
  • 35:56 - 35:59
    mutta se tarkoitti myös, että tiedettiin tasan,
  • 35:59 - 36:02
    mitä ohjelmiston pitää pystyä tekemään.
  • 36:02 - 36:03
    Tällöin voitiin varmistaa, että
  • 36:03 - 36:06
    kaikki muu on kiellettyä. Jos tietää,
  • 36:06 - 36:09
    mitä sovelluksen täytyy pystyä tekemään,
  • 36:09 - 36:11
    voidaan varmistaa, ettei se tee mitään muuta.
  • 36:11 - 36:13
    Se on turvallisuutta, jos asiaa tarkemmin
  • 36:13 - 36:15
    ajattelee. Estetään kaikki,
  • 36:15 - 36:17
    mitä sovelluksen ei pitäisi tehdä,
  • 36:17 - 36:20
    mikä olisi sitä, mitä hyökkääjä tekisi,
  • 36:20 - 36:21
    jos saisi koneen kaapattua, eikö?
  • 36:21 - 36:24
    Jos siis tietää etukäteen, mitä
  • 36:24 - 36:26
    tavoittelee, on mahdollista
  • 36:26 - 36:29
    toteuttaa oikeudenhallinta arkkitehtuuritasolla,
  • 36:29 - 36:31
    kuten olen näyttänyt.
  • 36:31 - 36:33
    Nykyään käytössä on enemmänkin Ikea-malli:
  • 36:33 - 36:35
    ostetaan osia, joita on suunnittelemassa
  • 36:35 - 36:38
    omat tiiminsä, eivätkä osia suunnittelevat tiimit
  • 36:38 - 36:41
    tiedä, millainen lopputuote tulee olemaan.
  • 36:41 - 36:43
    Joissain tapauksissa
  • 36:43 - 36:44
    kukaan ei tiedä, millainen
  • 36:44 - 36:46
    lopputuote on, mutta pahinta on,
  • 36:46 - 36:49
    jos tiimi, joka rakentaa
  • 36:49 - 36:50
    jotakin ohjelmiston osaa,
  • 36:50 - 36:52
    ei tiedä, miten sitä tullaan käyttämään,
  • 36:52 - 36:54
    jolloin siitä tehdään niin yleispätevä,
  • 36:54 - 36:57
    kuin mahdollista. Mitä enemmän sillä
  • 36:57 - 36:58
    voidaan saada aikaan, sitä parempi.
  • 36:58 - 37:00
    Se on turvallisuuden vastakohta. Turvallisuus
  • 37:00 - 37:03
    tarkoittaa sitä, että tiedetään, mitä pitää tehdä,
  • 37:03 - 37:05
    ja että kaikki muu estetään.
  • 37:05 - 37:08
    Tämä tarkoittaa, että ollaan niin geneerisiä, kuin mahdollista,
  • 37:08 - 37:11
    osat optimoidaan ajatellen geneerisyyttä... Mikä se sana nyt
  • 37:11 - 37:15
    on? Generismiä? En tiedä. Ne siis
  • 37:15 - 37:18
    optimoidaan joustavuutta ajatellen,
  • 37:18 - 37:20
    ne valitaan joustavuuden mukaan.
  • 37:22 - 37:24
    Osan kehittäjällä ei yleensä
  • 37:24 - 37:26
    ole aavistustakaan, mihin sitä käytetään,
  • 37:26 - 37:28
    ja se tarkoittaa, ettei vähimpien oikeuksien
  • 37:28 - 37:31
    periaatetta voida noudattaa, koska ei tiedetä, mitkä
  • 37:31 - 37:34
    nämä vähimmät tarvittavat oikeudet ovat.
  • 37:34 - 37:36
    Seuraa suuri sotku. Jos käyttää
  • 37:36 - 37:38
    toisten ohjelmoimia osia,
  • 37:38 - 37:40
    täytyy tehdä lisätyötä sen eteen,
  • 37:40 - 37:42
    että saadaan selville, mitä kaikkea
  • 37:42 - 37:46
    osalta voidaan estää, koska se varmasti pystyy
  • 37:46 - 37:48
    tekemään enemmän kuin sen tarvitsisi. Mitä enemmän
  • 37:48 - 37:50
    toimintaa rajoitetaan, sitä parempi
  • 37:50 - 37:52
    turvallisuus on. Tilanne on
  • 37:52 - 37:54
    vielä pahempi, jos käytetään ketterää kehitystä,
  • 37:54 - 37:55
    koska silloin, jo määritelmän mukaan,
  • 37:55 - 37:57
    lopputulos ei ole tiedossa ja
  • 37:57 - 38:00
    jos sitä ei tiedä, ei ole mahdollista
  • 38:00 - 38:02
    tehdä tietoturvaeristystä.
  • 38:02 - 38:04
    Toinen argumentti, jonka vuoksi nykytilanteeseen jouduttiin,
  • 38:04 - 38:06
    on suurtuotannon edut. Aiemmin oli niin,
  • 38:06 - 38:08
    että jos rakentaa jotain laitetta,
  • 38:08 - 38:09
    jonka täytyy tehdä jokin tietty asia,
  • 38:09 - 38:13
    sanotaan vaikka mikroaaltouuni,
  • 38:13 - 38:18
    etsitään osia ja
  • 38:18 - 38:19
    yhdistetään ne, juotetaan
  • 38:19 - 38:22
    ne yhteen ja ratkaistaan sitten ongelma.
  • 38:22 - 38:24
    Nykyään osia ei enää
  • 38:24 - 38:27
    juoteta yhteen, vaan kasaamiseen käytetään
  • 38:27 - 38:29
    valmisosia, jotka ovat yleensä
  • 38:29 - 38:32
    ohjelmoitavia. Pieni ARM-siru
  • 38:32 - 38:34
    maksaa sentin kymmenyksen, joten miksi käyttää
  • 38:34 - 38:37
    erikoistuneita osia, kun voi vain käyttää ARM-sirua
  • 38:37 - 38:39
    ja ohjelmoida sen. Se kuitenkin tarkoittaa,
  • 38:39 - 38:42
    että ongelma täytyy ratkaista ohjelmistolla.
  • 38:42 - 38:44
    Rauta on yleispätevää, mikä
  • 38:44 - 38:45
    tarkoittaa, että rautaa
  • 38:45 - 38:47
    voidaan hakkeroida. On hiljattain huomattu,
  • 38:47 - 38:48
    että se on ongelma.
  • 38:48 - 38:53
    20 vuotta sitten pystyi olemaan varma, että jarru jarruttaa,
  • 38:53 - 38:55
    mutta nykyään jarru onkin ohjelmoitava,
  • 38:55 - 38:57
    ja harva on tajunnut,
  • 38:57 - 38:59
    kuinka huono homma se on, mutta haitta on todellinen.
  • 38:59 - 39:00
    Se tulee vielä puremaan meitä kaikkia
  • 39:00 - 39:03
    persuksille. Hups.
  • 39:03 - 39:06
    Alan vastaus on
  • 39:06 - 39:08
    toistaiseksi ollut strutsimetodi.
  • 39:08 - 39:10
    Asennetaan siis asioita, jotka ovat
  • 39:10 - 39:12
    varmasti epäluotettavia, ja sitten
  • 39:12 - 39:15
    asennetaan niiden päälle lisää tavaraa,
  • 39:15 - 39:17
    joka on myös epäluotettavaa. Sitten puhutaan
  • 39:17 - 39:20
    telemetriasta tai big datasta ja käytetään jotakin
  • 39:20 - 39:24
    riskilokkausanalyysiohjelmaa,
  • 39:24 - 39:27
    ja yhtäkkiä hyökkäyspinta on
  • 39:27 - 39:31
    kasvanut kuin ydinräjähdyksen sienipilvi.
  • 39:31 - 39:33
    Ongelma on itse aiheutettu.
  • 39:33 - 39:34
    Kukaan ei ole pakottanut nykytilanteeseen.
  • 39:34 - 39:36
    Teidän ei tarvitse tehdä näin omissa
  • 39:36 - 39:38
    projekteissanne. Se olkoon tämän esitelmän
  • 39:38 - 39:41
    positiivinen viesti. Yhteenvetona, jos esitelmästä
  • 39:41 - 39:43
    ei jää mitään muuta päähän, muistakaa, että
  • 39:43 - 39:44
    uhkamallinnus on olemassa ja että sitä
  • 39:44 - 39:46
    kannattaa kokeilla, TCB-minimointi oikeasti
  • 39:46 - 39:49
    auttaa, vähimpien oikeuksien periaate on sama asia,
  • 39:49 - 39:51
    mutta eri näkökulmasta. Jos voitte käyttää
  • 39:51 - 39:54
    loppuun lisäävää tallennusta, sitä
  • 39:54 - 39:55
    kannattaa harkita. Hm?
  • 39:55 - 39:57
    - Lohkoketju?
    - Ei lohkoketjua.
  • 39:57 - 39:58
    Vain lisäävä tallennus.
  • 39:58 - 40:00
    Ei siis lohkoketju.
  • 40:00 - 40:02
    Naurua
  • 40:02 - 40:12
    Suosionosoituksia
  • 40:12 - 40:13
    - Vielä kaksi, enää kaksi
  • 40:13 - 40:14
    - Enää kaksi diaa?
  • 40:14 - 40:15
    - Niin, enää kaksi diaa.
  • 40:15 - 40:16
    - Anteeksi, olen toiseksi tekeytyjä.
  • 40:16 - 40:17
    - Ei se mitään.
  • 40:17 - 40:19
    Siis, muistisääntönä pitäisi
  • 40:19 - 40:22
    olla, jos jonkun pesemättömän
  • 40:22 - 40:23
    harrastelijan netissä blogi
  • 40:23 - 40:26
    noudattaa sinua parempaa IT-turvallisuutta,
  • 40:26 - 40:28
    sinun täytyy parantaa IT-turvallisuuttasi.
  • 40:28 - 40:30
    Sen ei pitäisi olla mahdollista.
  • 40:30 - 40:34
    No niin, siinä oli koko esitelmä.
  • 40:34 - 40:36
    Meillä taitaa olla vielä aikaa kysymyksille, eikö?
  • 40:36 - 40:37
    - On.
    - Okei, hienoa.
  • 40:37 - 40:41
    - Nyt on oikea hetki lyödä käsiä yhteen.
  • 40:41 - 40:47
    Suosionosoituksia
  • 40:47 - 40:50
    - Jos haluat esittää kysymyksen,
  • 40:50 - 40:52
    meillä on huoneessa neljä mikrofonia,
  • 40:52 - 40:55
    1, 2, 3, 4, ja otan ensimmäiseksi esiin
  • 40:55 - 40:57
    kysymyksen internetistä.
  • 40:57 - 40:59
    Joku netissä sanoo, että sinut
  • 40:59 - 41:02
    oikeasti hakkeroitiin. Voitko selventää,
  • 41:02 - 41:04
    mitä tapahtui?
  • 41:04 - 41:06
    - Niin, itse asiassa oli kyllä
  • 41:06 - 41:07
    tapaus, jossa joku pystyi julkaisemaan
  • 41:07 - 41:09
    tavaraa blogiini, ja koska käytin vain lisäävää
  • 41:09 - 41:11
    tallennusta, sivuutin sen oikeastaan
  • 41:11 - 41:16
    olankohautuksella. Käyttäkää siis vain lisäävää tallennusta.
  • 41:16 - 41:17
    Se pelastaa vielä nahkanne jonakin päivänä.
  • 41:17 - 41:19
    Ongelma oli bugi
  • 41:19 - 41:21
    pääsynhallintalistoissani, olin käyttänyt
  • 41:21 - 41:24
    LDAP-palvelimessani pääsynhallintalistaa,
  • 41:24 - 41:27
    jossa oli rivi, joka olisi
  • 41:27 - 41:28
    pitänyt poistaa, mutta unohdin
  • 41:28 - 41:30
    poistaa sen ja se tarkoitti, että oli mahdollista
  • 41:30 - 41:32
    tehdä julkaisuja ilman tunnistautumista.
  • 41:32 - 41:35
    Näin siis tapahtui, mutta mitään katastrofia ei käynyt,
  • 41:35 - 41:37
    koska arkkitehtuurini esti vahinkojen syntymisen.
  • 41:37 - 41:40
    - Huoneesta poistuville: Voisitteko poistua
  • 41:40 - 41:43
    hyvin hiljaisesti, kiitos?
  • 41:43 - 41:44
    Mikrofoni numero yksi.
  • 41:44 - 41:46
    - Jes, onko olemassa vaihtoehtoa
  • 41:46 - 41:47
    Windowsille ja MacOS:lle?
  • 41:47 - 41:49
    - Turvallista vaihtoehtoa? No,
  • 41:49 - 41:52
    periaatteessa on mahdollista noudattaa
  • 41:52 - 41:56
    periaatteita, jotka näytin esitelmässäni,
  • 41:56 - 42:00
    voitte noudattaa niitä kahta. Yleensä
  • 42:00 - 42:02
    hakkeroiduiksi ei tulla, koska MacOS:ssä
  • 42:02 - 42:05
    tai Windowsissa oli bugi, sitäkin tapahtuu, mutta
  • 42:05 - 42:07
    isompia ongelmia ovat bugit itse kirjoitetuissa
  • 42:07 - 42:11
    ohjelmistoissa tai käytetyissä ohjelmistoissa.
  • 42:11 - 42:13
    Yritän siis sanoa,
  • 42:13 - 42:15
    ettei Linux oikeasti ole
  • 42:15 - 42:17
    varsinaisesti turvallisempi kuin Windows,
  • 42:17 - 42:20
    pohjimmiltaan on mahdollista kirjoittaa
  • 42:20 - 42:21
    turvallisia ja turvattomia ohjelmistoja
  • 42:21 - 42:23
    millä tahansa käyttöjärjestelmällä. Silti kannattaa
  • 42:23 - 42:25
    käyttää Linuxia, koska se tarjoaa joitakin etuja, mutta
  • 42:25 - 42:28
    jos ottaa nämä tekniikat käyttöön omissa
  • 42:28 - 42:29
    ohjelmistoissa, ne ovat turvallisia myös
  • 42:29 - 42:31
    MacOS- ja Windows-laitteilla. Tämä
  • 42:31 - 42:34
    ei siis koske loppukäyttäjiä, jotka valitsevat
  • 42:34 - 42:36
    ohjelmistoja. Jos valitsee valmiin ohjelmiston,
  • 42:36 - 42:37
    täytyy luottaa sen valmistajaan.
  • 42:37 - 42:40
    Siitä ei pääse yli eikä ympäri. Jos taas
  • 42:40 - 42:43
    kirjoittaa omat ohjelmistonsa, on mahdollista
  • 42:43 - 42:44
    vähentää riskiä sellaiseen pisteeseen,
  • 42:44 - 42:47
    että sen kanssa selviytyy ja että voi itse nukkua rauhassa.
  • 42:47 - 42:48
    - Vai niin. Onko olemassa teknistä vaihtoehtoa
  • 42:48 - 42:51
    tai vastaavaa ominaisuutta kuin seccomp
  • 42:51 - 42:53
    Windowsille tai MacOS:lle, voiko siis pudottaa
  • 42:53 - 42:55
    oikeudet sen jälkeen, kun on avannut tiedoston,
  • 42:55 - 42:56
    näin esimerkiksi ottaen?
  • 42:56 - 42:58
    - MacOS:n suhteen en ole varma, mutta tiedän,
  • 42:58 - 43:02
    että FreeBSD:llä, NetBSD:llä ja OpenBSD:llä on vastaava
  • 43:02 - 43:05
    ominaisuus, luulen, että sama pätee MacOS:n kanssa, mutta
  • 43:05 - 43:09
    en ole siitä varma. Windowsilla on
  • 43:09 - 43:10
    hiekkalaatikkomenetelmiä, voit katsoa
  • 43:10 - 43:12
    esimerkiksi Chromen lähdekoodia,
  • 43:12 - 43:15
    se käyttää hiekkalaatikkoa ja lähdekoodi on avointa.
  • 43:15 - 43:16
    Sellaista voi käyttää
  • 43:16 - 43:17
    tällaisiin asioihin.
  • 43:17 - 43:18
    - Okei, kiitos.
  • 43:18 - 43:20
    - Seuraavaksi mikrofoni numero kaksi... Paitsi että
  • 43:20 - 43:22
    se meni jo. Siinä tapauksessa
  • 43:22 - 43:23
    taidan valita mikrofonin numero kolme.
  • 43:23 - 43:27
    - Tämä on numero neljä.
    - Anteeksi, numero neljä tosiaan.
  • 43:27 - 43:29
    - Kertooko seuraava esitelmäsi turvallisten
  • 43:29 - 43:32
    ohjelmistojen kirjoittamisesta Windowsille ja
  • 43:32 - 43:33
    jos ei, paljonko omaisuutta vaadit
  • 43:33 - 43:36
    korvaukseksi siitä aiheutuvasta tuskasta?
  • 43:36 - 43:38
    - Ei.
  • 43:38 - 43:39
    Naurua
  • 43:39 - 43:41
    Kysymys ei ole rahasta.
  • 43:41 - 43:42
    Naurua
  • 43:42 - 43:45
    - Selvä, mikrofoni numero yksi.
  • 43:45 - 43:47
    - Oletko kokeillut tarpeettomien
  • 43:47 - 43:49
    ominaisuuksien poistamista OpenSSL:stä?
  • 43:50 - 43:52
    - Kyllä, itse asiassa olen kokeillut sitä
  • 43:52 - 43:54
    jo melko ajoissa, mutta se on silti
  • 43:54 - 43:56
    paljon isompi kuin oma koodini.
  • 43:56 - 43:59
    Siis, esimerkiksi, OpenSSL tukee
  • 43:59 - 44:01
    UDP-pohjaista TLS:ää, mutta
  • 44:01 - 44:05
    jaettuja kryptografisia koodeja on paljon. Niistä
  • 44:05 - 44:07
    voi poistaa niitä, joita ei tarvitse, ja se auttaa
  • 44:07 - 44:09
    hieman, mutta silti jäljelle jää
  • 44:09 - 44:11
    verkkopalvelimen selkeästi suurin osa.
  • 44:11 - 44:14
    - Taisi tulla internet-kysymys?
  • 44:14 - 44:17
    Tuliko? Ei näytä siltä.
  • 44:17 - 44:21
    Ei? Kyllä? Ei? Ei? Kyllä? Okei.
  • 44:21 - 44:23
    - Sitten mikrofoni numero neljä.
  • 44:23 - 44:26
    - Ihmisenä, joka on tekemisissä
  • 44:26 - 44:29
    tai on ollut tekemisissä alan, johon kuuluu
  • 44:29 - 44:32
    ohjelmointi-
    Ohjelmoitavia jarruja,
  • 44:32 - 44:37
    mikä on mielipiteesi sellaisista asioista,
  • 44:37 - 44:39
    kuten MISRA?
  • 44:39 - 44:43
    - No siis, on olemassa standardeja,
  • 44:43 - 44:44
    esimerkiksi autoalalla, kuten
  • 44:44 - 44:47
    juuri MISRA, joiden tarkoituksena on varmistaa
  • 44:47 - 44:49
    paremman koodin kirjoittaminen, ja kyseessä
  • 44:49 - 44:51
    on pääasiassa sääntöjen noudattaminen. Annetaan sääntöjä,
  • 44:51 - 44:53
    kuten että rekursiota ei tulisi käyttää koodissa,
  • 44:53 - 44:56
    esimerkiksi, ja että
  • 44:56 - 44:58
    funktioiden pitäisi olla näin ja noin isoja
  • 44:58 - 44:59
    enimmillään, ja uskon, että
  • 44:59 - 45:02
    se auttaa hieman, mutta on paljon
  • 45:02 - 45:04
    parempi vaihtoehto investoida
  • 45:04 - 45:06
    arkkitehtuuriin. Saatoitte huomata, että
  • 45:06 - 45:09
    sanoin kirjoittaneeni koodia C:llä, mutta
  • 45:09 - 45:11
    en sanonut mitään siitä, miten varmistin,
  • 45:11 - 45:13
    että koodista tuli laadukasta.
  • 45:13 - 45:15
    Se on kokonaan eri ulottuvuus,
  • 45:15 - 45:19
    kohtisuoraan eri akselilla, siis,
  • 45:19 - 45:22
    noudattakaa standardeja, sillä tavalla
  • 45:22 - 45:23
    koodista tulee hieman parempaa,
  • 45:23 - 45:25
    luultavasti, mutta se ei ratkaise
  • 45:25 - 45:26
    kaikkia ongelmia ja itse uskon, että
  • 45:26 - 45:28
    pitäisi tehdä molemmat: Varmistaa,
  • 45:28 - 45:31
    tai ainakin yrittää varmistaa, että koodissa
  • 45:31 - 45:33
    on mahdollisimman vähän bugeja,
  • 45:33 - 45:34
    on tapoja, joilla se onnistuu, pidin siitäkin esitelmän,
  • 45:34 - 45:36
    mutta sen lisäksi pitäisi noudattaa
  • 45:36 - 45:37
    vastaavan laisia
  • 45:37 - 45:40
    arkkitehtuuririllisiä suojakaiteita,
  • 45:40 - 45:42
    jotka pitävät asiat raiteillaan, vaikka joku
  • 45:42 - 45:44
    onnistuisikin kaappaamaan prosessin.
  • 45:44 - 45:46
    - Nyt uskon, että saimme
  • 45:46 - 45:47
    internet-kysymyksen.
  • 45:47 - 45:52
    - Kyllä. Joku internetissä kysyy, miten
  • 45:52 - 45:56
    onnistuisi tämän todella vaikuttavan turvallisuusarkkitehtuurin
  • 45:56 - 45:57
    skaalaaminen suurempaan kokoluokkaan,
  • 45:57 - 45:58
    eri käyttötarkoituksiin,
  • 45:58 - 46:01
    suurempiin tarkoituksiin vai pilaisiko
  • 46:01 - 46:03
    projektin hallitsematon laajeneminen kaiken?
  • 46:03 - 46:05
    - Niin, siis...
  • 46:05 - 46:06
    - Haloo, haloo.
  • 46:06 - 46:07
    - Voi ei!
  • 46:09 - 46:11
    Naurua
  • 46:13 - 46:15
    - No, olen pahoillani.
  • 46:15 - 46:21
    Suosionosoituksia
  • 46:21 - 46:39
    [Translated by Santeri Koivisto (ITKST56 course assignment at JYU.FI)]
    Musiikkia
Title:
37C3 - Writing secure software
Description:

more » « less
Video Language:
English
Duration:
46:39

Finnish subtitles

Revisions Compare revisions