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