< 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:20
    Siitä on kirjoitettu oppikirjoja,
  • 0:20 - 0:25
    on pidetty lukematon määrä esitelmiä, jotka
  • 0:25 - 0:30
    ovat valistaneet meitä kaikista
  • 0:30 - 0:34
    tekemistämme virheistä, ja silti kaikenlaisia huonoja
  • 0:34 - 0:40
    ohjelmistoja on yhä olemassa, mutta
  • 0:40 - 0:47
    Fefe, täällä näin, sankarimme,
  • 0:47 - 0:55
    on ottanut huomioon kaikki parhaat
  • 0:54 - 0:59
    käytännöt, tiedättehän, työskennellessään
  • 0:59 - 1:02
    tehdäkseen turvallisen verkkosivun, hän
  • 1:02 - 1:13
    nyt seuraavaksi näyttää meille miten se tehdään, jotta
  • 1:13 - 1:20
    voimme kaikki nukkua yömme rauhassa ja
  • 1:18 - 1:22
    ottaa mallia, miten voimme
  • 1:20 - 1:24
    tehdä omat ohjelmistomme turvallisiksi.
  • 1:22 - 1:26
    Siispä annan puheenvuoron nyt
  • 1:24 - 1:28
    Fefelle, antakaa hänelle aplodit!
  • 1:26 - 1:30
    Suosionosoituksia
  • 1:28 - 1:33
    Kiitos, minun täytyy aloittaa
  • 1:30 - 1:35
    anteeksipyynnöllä, sillä ehdotin esitelmää,
  • 1:33 - 1:37
    mutta se hylättiin, joten
  • 1:35 - 1:39
    diat eivät ole ihan niin valmiita, kuin
  • 1:37 - 1:43
    niiden pitäisi olla.
  • 1:39 - 1:45
    Nämä diat on tehty esitelmän edellistä versiota varten, jotka pitävät
  • 1:43 - 1:48
    sisällään kaiken materiaalin, yritin päivittää niitä, mutta
  • 1:45 - 1:51
    se tuhosi sulavuuden, joten
  • 1:48 - 1:53
    joudumme pärjäämään tämän version kanssa.
  • 1:51 - 1:55
    Suurin ero on yleisö, sillä
  • 1:53 - 1:57
    odotan tällä kertaa paikalla olevan enemmän ohjelmistokehittäjiä,
  • 1:55 - 2:02
    toisessa yleisössä olisi ollut enemmän hakkereita ja
  • 1:57 - 2:02
    bisnesmiehiä, joten yritän auttaa heitä
  • 2:02 - 2:06
    nykyisestä tilanteestaan eteenpäin, ja pääkysymys
  • 2:04 - 2:10
    on yleensä: "Onko jo valmista?", eikö niin?
  • 2:06 - 2:12
    Joten, hieman minusta, olette varmaankin
  • 2:10 - 2:14
    nähneet tämän jo aiemmin, olen koodin tarkastaja
  • 2:12 - 2:15
    ammatiltani, omistan pienen yrityksen ja
  • 2:14 - 2:18
    yritykset näyttävät meille koodia, ja minä puolestani
  • 2:15 - 2:19
    näytän heille bugeja, jotka löydän, melko helppoa.
  • 2:18 - 2:25
    Mutta ennen kuin aloitamme, minulla on
  • 2:19 - 2:25
    himan syytä juhlaan, tämä oikeastaan tapahtui
  • 2:27 - 2:31
    vain päivää ennen kuin
  • 2:29 - 2:33
    puhuin siitä ensi kertaa, siis tämä viesti Kasperskyltä,
  • 2:31 - 2:36
    he löysivät haittaohjelman
  • 2:33 - 2:38
    liittyen libc:hen,
  • 2:36 - 2:40
    jota olen ollut kirjoittamassa, joten
  • 2:38 - 2:44
    tämä on...
  • 2:40 - 2:47
    Suosionosoituksia
  • 2:44 - 2:50
    Haittaohjelmaporukalla on
  • 2:47 - 2:52
    selvästi hyvä maku.
  • 2:50 - 2:54
    Niin, oikeastaan suurin kysymys, joka tulee vastaan kun
  • 2:52 - 2:57
    keskustelen asiakkaiden kanssa on: "käytämme todella paljon
  • 2:54 - 2:59
    rahaa tähän, miksei se toimi"?
  • 2:57 - 3:00
    Ja vastaus on, että "te toimitte väärin".
  • 2:59 - 3:02
    Yritän nyt siis näyttää, että mitä tarkalleen menee väärin
  • 3:00 - 3:05
    ja tässä on pieni johdanto: yleensä sanotaan,
  • 3:02 - 3:07
    ettei ole aikaa tehdä asioita
  • 3:05 - 3:10
    kunnolla, eikä se pidä paikkaansa lainkaan.
  • 3:07 - 3:12
    Aikaa päivässä on tasan yhtä paljon kuin kaikilla niillä,,
  • 3:10 - 3:15
    jotka ovat pystyneet suuriin saavutuksiin, joten
  • 3:12 - 3:17
    jokainen varmasti pystyy moneen, kunhan ryhtyy hommiin.
  • 3:15 - 3:20
    Pelataan sitten pientä lämmittelypeliä,
  • 3:17 - 3:22
    sen nimi on "miten se alkoi ja
  • 3:20 - 3:25
    miten nyt menee", aloitetaan siis harjoittelukierroksella:
  • 3:22 - 3:28
    "IBM:n Watson mullistaa
  • 3:25 - 3:30
    kymmenen toimialaa", ja nyt menee näin:
  • 3:28 - 3:34
    "Mitä kävi IBM:n Watsonille?". Kyseessä on
  • 3:30 - 3:35
    tyypillinen kuvio tietoturva-alalla.
  • 3:34 - 3:37
    Okei, tässä seuraava, näin se alkoi:
  • 3:35 - 3:40
    "Mullista tietoturva tekoälyllä",
  • 3:37 - 3:41
    no niin, emmeköhän kaikki tiedä, mihin tämä on menossa...
  • 3:40 - 3:43
    Naurua
  • 3:41 - 3:45
    Niin, sehän se kuvio on.
  • 3:43 - 3:47
    Pelataan IT-turvallisuuden miinaharavaa,
  • 3:45 - 3:51
    siis, kaikki täällä varmaankin
  • 3:47 - 3:54
    tuntevat Gartnerin, se julkaisee
  • 3:51 - 3:55
    suosituksia ja sillä on jopa
  • 3:54 - 4:02
    äänestysosio, jossa ihmiset voivat sanoa, että
  • 3:55 - 4:03
    "Tämä on paras tuote tähän tarkoitukseen",
  • 4:02 - 4:05
    joten vilkaistaanhan muutamaa ja
  • 4:03 - 4:08
    katsotaan, miten kävi niille, jotka luottivat Gartneriin.
  • 4:05 - 4:10
    Ensimmäisenä aiheena ovat palomuurit, siis:
  • 4:08 - 4:12
    näin se alkoi: ykkössijan suositus on
  • 4:10 - 4:13
    Fortinet, ja heillä on paljon
  • 4:12 - 4:16
    markkinointi- siansaksaa
  • 4:13 - 4:19
    Naurua
  • 4:16 - 4:21
    Ja jos taas katsotaan, miten nyt menee, niin
  • 4:19 - 4:24
    ei kovin hyvin.
  • 4:21 - 4:27
    Siis, jatketaan kuviota hiukan:
  • 4:24 - 4:28
    Mitä kävi minulle tämän suhteen?
  • 4:27 - 4:30
    En tarvitse palomuuria, koska
  • 4:28 - 4:33
    minulla ei ole yhtään porttia, jolle pääsy pitäisi estää, niinhän.
  • 4:30 - 4:36
    Joten sitä ei tarvita,
  • 4:33 - 4:37
    tarkasti ottaen sitä ei tarvita.
  • 4:36 - 4:39
    Seuraava ala: päätepisteiden suojaus,
  • 4:37 - 4:43
    se alkoi siis Trellix:llä, se on
  • 4:39 - 4:45
    Gartnerin ykkössuositus.
  • 4:43 - 4:47
    En ollut kuullu siitä,
  • 4:45 - 4:49
    joku yhteishanke tai jotain sellaista,
  • 4:47 - 4:52
    ketä kiinnostaa.
  • 4:49 - 4:55
    Heilläkin on hienoa markkinointi- siansaksaa
  • 4:52 - 4:55
    Ja jos katsotaan, mitä tapahtui:
  • 4:56 - 5:02
    se pahensi vain asiaa.
  • 5:00 - 5:05
    Okei, tämäkään ei vaikuta minuun,
  • 5:02 - 5:07
    koska en käytä humpuukkituotteita.
  • 5:05 - 5:09
    Katsotaanhan, kolmanneksi salasananhallintaohjelmistot,
  • 5:07 - 5:11
    myöskin hyvin suosittuja,
  • 5:09 - 5:15
    miten se alkoi: suositeltiin LastPassia,
  • 5:11 - 5:16
    tiedätte varmaan mihin tämä on menossa...
  • 5:15 - 5:20
    Naurua
  • 5:16 - 5:23
    Jep, se hakkeroitiin
  • 5:20 - 5:26
    ja monet joutuivat ongelmiin.
  • 5:23 - 5:27
    Voitte siis huomata kuvion:
  • 5:26 - 5:29
    tämäkään ei vaikuttanut minuun, koska
  • 5:27 - 5:30
    poistin käytöstä salasanatunnistautumisen ja
  • 5:29 - 5:33
    käytän julkisen avaimen menetelmiä, jotka ovat
  • 5:30 - 5:35
    olleet jo vuosikymmeniä saatavilla. Pieni bonus,
  • 5:33 - 5:37
    viimeinen näistä: kaksivaiheinen tunnistautuminen,
  • 5:35 - 5:39
    Gartner suosittelee Duoa, jonka
  • 5:37 - 5:41
    Cisco on ostantut tosin omakseen, mutta sillä ei ole väliä.
  • 5:39 - 5:44
    Katsotaan siis, mitä Duo tekee:
  • 5:41 - 5:47
    palvelimesi pyytää pilvipalvelusta
  • 5:44 - 5:49
    lupaa, pilvipalvelin näyttää
  • 5:47 - 5:51
    puhelimella ilmoituksen, josta painetaan "kyllä",
  • 5:49 - 5:52
    ja pilvipalvelu kertoo palvelimelle:
  • 5:51 - 5:53
    "okei, voit päästä sen sisään". Jos katsot
  • 5:52 - 5:55
    oikein tarkkaan, huomaat, ettei pilvipalvelun
  • 5:53 - 5:58
    ole pakko näyttää ilmoitusta ollenkaan, se voi vain
  • 5:55 - 6:01
    sanoa suoraan "kyllä". Se on siis valmiiksi
  • 5:58 - 6:02
    ongelmainen, mitään ei tarvitse edes hakkeroida.
  • 6:01 - 6:06
    Naurua
  • 6:02 - 6:06
    ja harva tajuaa, että
  • 6:08 - 6:12
    kaksivaiheista tunnistautumista ei tarvita,
  • 6:15 - 6:21
    jos käyttää julkista avainta, se on jo itsessään toinen vaihe.
  • 6:18 - 6:22
    Selvä, niin,
  • 6:21 - 6:25
    jep. Vilkaistaan tämä nopeasti.
  • 6:22 - 6:28
    Splunk on suositeltu vaihtoehto
  • 6:25 - 6:30
    ja se tekee organisaatiosta
  • 6:28 - 6:31
    kestävämmän, kunhan sitä ei asenna.
  • 6:30 - 6:33
    Naurua
  • 6:31 - 6:36
    Suosionosoituksia
  • 6:33 - 6:40
    Okei, tämä aihe on lähellä sydäntäni,
  • 6:36 - 6:42
    sillä usein väitellään siitä,
  • 6:40 - 6:44
    pitäisikö paikkauksia asentaa ja
  • 6:42 - 6:46
    mitkä paikkaukset asentaa ensimmäiseksi ja aiemmin
  • 6:44 - 6:48
    tämä oli yksinkertaista, etsittiin ongelmia
  • 6:46 - 6:49
    ja asennettiin paikkauksia, mutta sitten
  • 6:48 - 6:52
    asioista tuli monimutkaisempia ja
  • 6:49 - 6:55
    tulos oli tämä -
  • 6:52 - 6:56
    kuuluisa podcasti Saksassa,
  • 6:55 - 6:59
    joka kertoo kunnasta, joka joutui
  • 6:56 - 7:01
    kiristysohjelmahyökkäyksen uhriksi ja joutui kutsumaan
  • 6:59 - 7:04
    armeijan apuun
  • 7:01 - 7:07
    Epäselvää puhetta yleisössä
  • 7:04 - 7:07
    Ja mitä pitäisi tehdä, sanon tämän
  • 7:08 - 7:12
    täydellisyyden vuoksi, asentaa kaikki paikkaukset
  • 7:11 - 7:15
    välittömästi, mutta se jääköön toisen esitelmän aiheeksi.
  • 7:12 - 7:17
    Saatatte siis huomata kuvion:
  • 7:15 - 7:20
    IT-turvallisuusala
  • 7:17 - 7:21
    suosittelee jotakin
  • 7:20 - 7:24
    ja jos suositukseen uskoo, on pian kusessa, joten ei kannata.
  • 7:21 - 7:27
    Jos ette näe kunnolla, tässä lukee "käärme-
  • 7:24 - 7:31
    karkoterakeet", ja sen vieressä
  • 7:27 - 7:33
    nukkuu käärme.
  • 7:31 - 7:34
    Naurua
  • 7:33 - 7:38
    Yskäisy
  • 7:34 - 7:39
    Niin, jos emme voi luottaa
  • 7:38 - 7:42
    alan suosituksiin, niin mitä pitäisi tehdä?
  • 7:39 - 7:45
    Ja minulla oli paljon
  • 7:42 - 7:48
    aikaa, koska minun ei tarvinnut
  • 7:45 - 7:50
    siivota kehnojen IT-turvallisuusalan
  • 7:48 - 7:52
    suositustuotteiden jälkiä, joten
  • 7:50 - 7:54
    mihin kulutin aikaani?
  • 7:52 - 7:56
    Päätin, että tarvitsen blogin
  • 7:54 - 7:59
    jo jonkin aikaa sitten, ja aloin
  • 7:56 - 8:00
    miettimään, mitä tarvitsen,
  • 7:59 - 8:02
    itse asiassa ei kovin paljoa, koska olisin
  • 8:00 - 8:05
    voinut vain tarjota staattista sisältöä ja pieni
  • 8:02 - 8:07
    hakutoimintokin olisi hyväksi, muttei kuitenkaan
  • 8:05 - 8:09
    pakollinen. En tarvinnut kommentteja
  • 8:07 - 8:13
    laillisista syistä, koska ihmiset tapaavat
  • 8:09 - 8:15
    lähetellä linkkejä haittaohjelmiin ja
  • 8:13 - 8:17
    mitä lie, mitä en halua,
  • 8:15 - 8:20
    joten ensimmäinen versio oli
  • 8:17 - 8:23
    oikeastaan hyvin helppo toteuttaa, se oli pieni
  • 8:20 - 8:25
    tavanomainen verkkopalvelin ja
  • 8:23 - 8:28
    blogin julkaisut olivat staattisia HTML-tiedostoja,
  • 8:25 - 8:30
    yksi tiedosto kuukautta kohden. Se oli oikeastaan
  • 8:28 - 8:32
    helppoa, jos haluaa hakea joitain voi vain
  • 8:30 - 8:32
    kysyä Googlelta rajoittaen haun kyseiseen verkkosivuun.
  • 8:34 - 8:38
    Julkaiseminenkin oli helppoa, minulla oli pieni
  • 8:36 - 8:41
    skripti, jonka pystyin ajamaan palvelimella
  • 8:38 - 8:44
    ja kirjauduin SSH:lla, ja SSH:n luotan
  • 8:41 - 8:47
    autentikaation suhteen, joten uutta
  • 8:44 - 8:49
    pintaa hyökkäyksille ei ole, käytin sitä muutenkin. Tämä on
  • 8:47 - 8:51
    mahtava kokonaisuus, se on turvallinen ja yksinkertainen,
  • 8:49 - 8:53
    riskit ovat pieniä ja se on suorituskyvyltään
  • 8:51 - 8:55
    erinomainen, mutta sitä ei voisi pitää esitelmää
  • 8:53 - 8:58
    CCC:ssä, koska
  • 8:55 - 9:01
    se on liian tylsä, joten aloin lisäämään
  • 8:58 - 9:03
    riskejä kokoonpanoon.
  • 9:01 - 9:05
    Naurua
  • 9:03 - 9:08
    Joten ensimmäinen ideani oli, että
  • 9:05 - 9:10
    olin kirjoittanut pienen web-palvelimen ja voisin
  • 9:08 - 9:12
    vain käyttää blogia vareten kyseistä palvelinta,
  • 9:10 - 9:14
    koska sehän on minun koodiani joka tapauksessa,
  • 9:12 - 9:16
    mutta siinä on huonoja puolia. Jos blogi
  • 9:14 - 9:18
    pyörii web-palvelimella, sillä on
  • 9:16 - 9:19
    pääsy kaikkeen web-palvelimen muistiin,
  • 9:18 - 9:22
    erityisesti se pääsee käsiksi TLS:n salaiseen
  • 9:19 - 9:23
    avaimeen, enkä halua, että sitä saataisiin
  • 9:22 - 9:25
    vietyä, joten se ei voi olla
  • 9:23 - 9:27
    web-palvelimen moduuli
  • 9:25 - 9:29
    ja ilmiselvä ratkaisu on, että
  • 9:27 - 9:30
    sen täytyy pyöriä toisella käyttäjä-ID:llä
  • 9:29 - 9:33
    Linuxilla, käytän siis Linuxia, mutta minkä tahansa
  • 9:30 - 9:35
    Unixin tai Windowsin suhteen asia olisi sama.
  • 9:33 - 9:38
    Se siis pyörii eri käyttäjällä,
  • 9:35 - 9:39
    ja jos sitten kaappaa
  • 9:38 - 9:42
    blogin prosessin jonkin
  • 9:39 - 9:43
    bugin avulla, TLS-avaimeen ei pääse käsiksi.
  • 9:42 - 9:45
    Ja samaan aikaan kun tein sitä,
  • 9:43 - 9:47
    ala teki tätä.
  • 9:45 - 9:51
    Puheensorinaa
  • 9:47 - 9:53
    Sehän on tämän esitelmän virsi,
  • 9:51 - 9:54
    näytän kaikenlaista kiinnostavaa,
  • 9:53 - 9:56
    mitä ala tekee, ja sitten näytän,
  • 9:54 - 9:58
    mitä itse tein siinä samalla.
  • 9:56 - 10:00
    Seuraava kysymys:
  • 9:58 - 10:03
    Missä sisältöä säilytetään? Voisin vain pitää
  • 10:00 - 10:07
    tiedostoja levyllä staattisena HTML:nä kuten aiemminkin,
  • 10:03 - 10:07
    mutta uskon, ettei se ole riittävän ammattimainen ratkaisu.
  • 10:07 - 10:12
    Hyvää CCC-esitelmää varten täytyy
  • 10:09 - 10:15
    olla ammattimaisempi.
  • 10:12 - 10:18
    Olin myös toista
  • 10:15 - 10:21
    projektia varten kirjoittanut LDAP-palvelimen,
  • 10:18 - 10:22
    joten päätin uudelleenkäyttää sitä, ja
  • 10:21 - 10:24
    samalla kuin tein sitä, ala teki tätä.
  • 10:22 - 10:27
    Otin tämän kuvan Jerusalemin
  • 10:24 - 10:30
    lentokentällä, tämä on siis oikea mainos
  • 10:27 - 10:32
    eikä photoshopattu. Sen omistaa
  • 10:30 - 10:35
    Northrop Grumman, joka on
  • 10:32 - 10:37
    armeijatavarantoimittaja ja se kertoo koko
  • 10:35 - 10:37
    spektrin kyberistä, kattaen kaikki alueet.
  • 10:38 - 10:44
    Puheensorinaa
  • 10:41 - 10:44
    Siis, miksi kirjoittaisin oman LDAP-palvelimeni?
  • 10:44 - 10:52
    Pääasiassa siksi, että se on pieni ja
  • 10:49 - 10:55
    koska olen ammatiltani tarkastaja, ja tiedän,
  • 10:52 - 10:57
    että jos haluaa mahdollisuuden oikeasti
  • 10:55 - 11:00
    tarkastaa koodia, sen täytyy olla vähäistä,
  • 10:57 - 11:03
    sillä rajallinen resurssi on
  • 11:00 - 11:06
    aika, jota voi käyttää koodin tarkastamiseen.
  • 11:03 - 11:08
    SIis, Postgres on yleinen SQL-
  • 11:06 - 11:09
    tietokanta. Slapd on palvelimen
  • 11:08 - 11:10
    avoin LDAP-toteutus ja tinyldap on
  • 11:09 - 11:13
    omani ja näette, että se on paljon hitaampi
  • 11:10 - 11:14
    ja paljon pienempi.
  • 11:13 - 11:17
    Niin, mainoskapanja oli laajempi
  • 11:14 - 11:19
    keräsin tähän muutamia hauskoja kuvia.
  • 11:17 - 11:21
    Siis, jos joku onnistuu
  • 11:19 - 11:24
    hakkeroimaan blogin CGI:n tai mitä hyvänsä moduulia
  • 11:21 - 11:27
    käytänkään yhdistääkseni blogin
  • 11:24 - 11:30
    verkkopalvelimeen, hän pystyy avaaman minkä tahansa tiedoston, jonka
  • 11:27 - 11:32
    blogi itsessään pystyy lukemaan, jonka sen UID pystyy lukemaan,
  • 11:30 - 11:33
    joten minun pitäisi varmaankin tehdä
  • 11:32 - 11:36
    asialle jotakin, se oli seuraava vaihe.
  • 11:33 - 11:38
    Ala puolestaa alkoi miettimään
  • 11:36 - 11:40
    haavoittuvuuksien hallintaa.
  • 11:38 - 11:45
    Unixilla, Linuxilla on mekanismi,
  • 11:40 - 11:47
    josta pidin erillisen esitelmän
  • 11:45 - 11:49
    viime Kongressissa,
  • 11:47 - 11:52
    se on nimeltään seccomp ja seccom on kuin
  • 11:49 - 11:55
    palomuuri järjestelmäkutsuille, joten voin käyttää
  • 11:52 - 11:58
    seccompia estääkseni open-järjestelmäkutsun, jota käytetään
  • 11:55 - 12:00
    tiedostojen avaamiseen, mutta jos minun täytyy
  • 11:58 - 12:03
    itse käyttää open-funktiota,
  • 12:00 - 12:06
    en voi estää sitä, joten mitä
  • 12:03 - 12:09
    tehdä sen suhteen? Esimerkiksi blogini
  • 12:06 - 12:12
    kutsuu localtime-funktiota, joka muuttaa Unix-ajan
  • 12:09 - 12:14
    paikallisen aikavyöhykkeen ajaksi ja sitä
  • 12:12 - 12:17
    varten se avaa tiedoston, joka sisältää
  • 12:14 - 12:19
    kuvauksen järjestelmän aikavyöhykkeestä,
  • 12:17 - 12:21
    ja se kutsuu openia. Siis,
  • 12:19 - 12:24
    jos ottaisin vain open-järjestelmäkutsun pois käytöstä
  • 12:21 - 12:26
    blogistani, niin se ei voisi tehdä
  • 12:24 - 12:28
    tarvittavaa aikamuunnosta, mikä on
  • 12:26 - 12:29
    oikeastaan vanha ongelma, joka pätee myös
  • 12:28 - 12:32
    setuid-ohjelmiin ja on pätenyt niihin jo
  • 12:29 - 12:34
    vuosikymmeniä, joten voi tehdä niin, että
  • 12:32 - 12:36
    koodi järjestetään uudelleen siten, että ennen kuin
  • 12:34 - 12:38
    estää tai, yleisesti ottaen, pudottaa oikeuksia,
  • 12:36 - 12:42
    ensin tehdään open-kutsut,
  • 12:38 - 12:45
    tässä esimerkissä, ja
  • 12:42 - 12:48
    sitten poistetaan open käytöstä ja sitten katsotaan
  • 12:45 - 12:50
    hyökkääjän tarjoamaa dataa,
  • 12:48 - 12:52
    koska jos hyökkääjä tai mikä tahansa lähde,
  • 12:50 - 12:54
    johon ei luoteta, yrittää hakkeroida palveluasi, se tapahtuu
  • 12:52 - 12:58
    palvelullesi annetun datan avulla,
  • 12:54 - 13:02
    ympäristö on vaarannettu, joten katsotaan,
  • 12:58 - 13:04
    minkälaiset elementit ympäristössä
  • 13:02 - 13:07
    hyökkääjä voi määrätä ja
  • 13:04 - 13:09
    enne kuin koskee yhteenkään tavuun niistä, täytyy
  • 13:07 - 13:10
    tehdä kaikki vaaralliset toimenpiteet, jos vain voi.
  • 13:09 - 13:12
    Siis, tässä tapauksessa, kutsun localtime-funktiota
  • 13:10 - 13:14
    kerran ennen kuin pudotan pois open-järjestelmäkutsun,
  • 13:12 - 13:16
    ja libc tallentaa välimuistiin
  • 13:14 - 13:19
    aikavyöhykedatan ja ensi kerralla, kun kutsun sitä
  • 13:16 - 13:21
    sen jälkeen, kun olen käsitellyt hyökkääjän
  • 13:19 - 13:25
    määrittelemää koodia, ei ole enää tarvetta käyttää
  • 13:21 - 13:28
    open-funktiota. Tämä on suuri etu
  • 13:25 - 13:30
    seccomp:n hyödyksi ja muita vastaavia teknologioita,
  • 13:28 - 13:35
    kuten SELinuxia, vastaan, sillä ne asettavat
  • 13:30 - 13:38
    estot järjestelmäkutsuille
  • 13:35 - 13:41
    koko prosessin tasolla, joten tämä
  • 13:38 - 13:42
    olkoon esimerkkinä siitä, mitä
  • 13:41 - 13:44
    pitäisi tehdä: Pitäisi katsoa
  • 13:42 - 13:46
    prosessia ja, ainakin jos on
  • 13:44 - 13:48
    pääsy lähdekoodiin, pitää katsoa, mitä
  • 13:46 - 13:51
    kaikkea täytyy tehdä ennen kuin voin
  • 13:48 - 13:53
    luopua oikeuksista, ja siirtää niitä aiempiin vaiheisiin.
  • 13:51 - 13:56
    Näin siis tein.
  • 13:53 - 13:59
    Tämä tässä on malli
  • 13:56 - 14:01
    Viron kyberturvallisuuskeskukselta,
  • 13:59 - 14:03
    tämäkin on siis aito.
  • 14:01 - 14:06
    Okei, siis,
  • 14:03 - 14:09
    seuraava aihe. Sanotaan, että
  • 14:06 - 14:12
    joku hakkeri blogimoduulin, ja
  • 14:09 - 14:15
    että joku toinen käyttää samaa moduulia, mutta
  • 14:12 - 14:18
    omaa salasanaansa.
  • 14:15 - 14:21
    Tämä on yleinen ongelma verkkosivuilla,
  • 14:18 - 14:24
    joilla on jonkinlainen kirjautumistoiminto,
  • 14:21 - 14:27
    josta saa jonkinlaisen istuntotunnisteen tai
  • 14:24 - 14:30
    jonkin vastaavan, ja jos joku onnistuu
  • 14:27 - 14:32
    kaappaamaan väliohjelmiston
  • 14:30 - 14:36
    tai palvelinkomponentin,
  • 14:32 - 14:38
    hän pystyy näkemään kaikki muutkin yhteydet,
  • 14:36 - 14:39
    jos sama prosessi käsittelee niitä.
  • 14:38 - 14:42
    Se on siis merkittävä ongelma,
  • 14:39 - 14:45
    jonka voi korjata, mikä
  • 14:42 - 14:48
    on meille varsin hyvä asia.
  • 14:45 - 14:51
    Ja minun esimerkissäni tämä sai minut käyttämään CGI:tä
  • 14:48 - 14:53
    FastCGI:n sijaan, FastCGI on siis
  • 14:51 - 14:54
    uudempi versio CGI:stä,
  • 14:53 - 14:57
    ja sen idea on, ettei
  • 14:54 - 14:59
    uutta prosessia käynnistetä jokaista
  • 14:57 - 15:02
    pyyntöä varten, vaan käytetään Unix domain
  • 14:59 - 15:06
    socketia, tai muuta pistoketta FastCGI-prosessiin,
  • 15:02 - 15:08
    joka avaa ehkä yhden säikeen
  • 15:06 - 15:11
    pyyntöä kohden tai jotain sellaista, mutta yleensä
  • 15:08 - 15:13
    FastCGI:n kanssa yritetään käsitellä
  • 15:11 - 15:17
    pyynnöt samassa prosessissa, jotta
  • 15:13 - 15:20
    voidaan käyttää kyseistä prosessia välimuistin ylläpitoon,
  • 15:17 - 15:22
    joten FastCGI on suorituskyvyn kannalta edullinen valinta,
  • 15:20 - 15:24
    mutta tietoturvasyistä en
  • 15:22 - 15:27
    käytä FastCGI:tä, joten en voi käyttää
  • 15:24 - 15:27
    välimuistia, mikä on merkittävä haittapuoli
  • 15:27 - 15:32
    ja blogista tulee lopulta luultavasti
  • 15:30 - 15:34
    todella, todella hidas. Siis,
  • 15:32 - 15:38
    ensiksi, minun täytyy käyttää CGI:tä
  • 15:34 - 15:40
    FastCGI:n sijaan ja toiseksi, on yhä mahdollista
  • 15:38 - 15:43
    käyttää debuggaukseen tarkoitettuja API:ta. Siis, jos käyttää GDB:tä tai
  • 15:40 - 15:45
    jotain muuta debuggeria toisen
  • 15:43 - 15:49
    prosessin seurantaan, se käyttää ptrace-API:ta,
  • 15:45 - 15:51
    mutta se on pohjimmiltaan järjestelmäkutsu, joten voin käyttää seccompia
  • 15:49 - 15:54
    ptracen kieltämiseksi. Jos noudatan näitä kahta taktiikkaa, ja
  • 15:51 - 15:56
    hyökkääjä kaappaa blogin prosessin, kaikki
  • 15:54 - 15:59
    mitä hän voi nähdä, on hänen itse lähettämänsä data.
  • 15:56 - 16:04
    Kysessä on siis suuri etu.
  • 15:59 - 16:06
    Okei, ENISA on itse asiassa EU:n virasto,
  • 16:04 - 16:08
    mikä on mielestäni hyvin häiritsevää,
  • 16:06 - 16:10
    sillä se kuluttaa paljon veronmaksajien rahoja,
  • 16:08 - 16:13
    mutta ei siitä sen enempää. Oletataan, että hyökkääjä
  • 16:10 - 16:16
    pystyy hakkeroimaan blogini. Silloin tämä pystyy kiertämään
  • 16:13 - 16:19
    kaiken pääsynhallinnan, jota blogissani käytetään.
  • 16:16 - 16:21
    Siis esimerkiksi, jos minulla on ylläpitosivu tai
  • 16:19 - 16:22
    jokin kirjautumista vaativa osa verkkosivusta,
  • 16:21 - 16:24
    ja sitä hallitsee sama ohjelma, ja
  • 16:22 - 16:26
    pääsynhallintaa tehdään siis blogin
  • 16:24 - 16:28
    CGI:ssä, ja joku onnistuu
  • 16:26 - 16:29
    hakkeroimaan blogini CGI:n, hän voi
  • 16:28 - 16:31
    halutessaan vain ohittaa hallinnan, joten on
  • 16:29 - 16:33
    hyvin haastavaa tehdä pääsynhallintatoimenpiteitä, joita ei ole
  • 16:31 - 16:35
    mahdollista kiertää, jos ne toteuttaa omassa
  • 16:33 - 16:37
    koodissaan. Ratkaisu on siis olla tekemättä sitä
  • 16:35 - 16:41
    omassa koodissasi. En rajoita mitenkään
  • 16:37 - 16:45
    pääsyä omassa blogissani, vaan teen sen
  • 16:41 - 16:47
    LDAP-palvelimen puolella. Jos siis yhdistää blogiini
  • 16:45 - 16:48
    ja antaa salasanan, blogi itse ei tiedä,
  • 16:47 - 16:50
    onko salasana oikein
  • 16:48 - 16:53
    vaiko väärin. Esimerkiksi, jos
  • 16:50 - 16:55
    on käyttöliittymä, jonka avulla voi lisätä
  • 16:53 - 16:56
    uusi blogijulkaisuja tai muokata vanhoja
  • 16:55 - 17:00
    sellaisia ja sitä varten täytyy tunnistautua,
  • 16:56 - 17:02
    mutta blogin CGI ei tiedä, ovatko tunnukset
  • 17:00 - 17:04
    oikein vai väärin ja avaa
  • 17:02 - 17:07
    yhteyden LDAP-palvelimeen käyttäen
  • 17:04 - 17:09
    annettuja tunnuksia ja vasta LDAP-palvelin
  • 17:07 - 17:11
    sanoo kyllä tai ei. Koska estimme pääsyn
  • 17:09 - 17:13
    ptrace-järjestelmäkutsu ja prosessit
  • 17:11 - 17:16
    on eristetty toisistaan, se tarkoittaa,
  • 17:13 - 17:19
    ettei mitään jää kierrettäväksi.
  • 17:16 - 17:22
    Siis, jos joku hakkeroi blogini,
  • 17:19 - 17:24
    hän ei juuri hyödy, koska
  • 17:22 - 17:26
    hän voi käytännössä tehdä vain samoja asioita
  • 17:24 - 17:29
    kuin jo valmiiksi. Hän voi vain kommunikoida
  • 17:26 - 17:31
    LDAP-palvelimen kanssa.
  • 17:29 - 17:33
    Jes, nyt aletaan jo puhua
  • 17:31 - 17:36
    James Bond -tason jutuista
  • 17:33 - 17:38
    hyökkäyksien monimutkaistuessa entisestään.
  • 17:36 - 17:42
    Samalla IT-turvallisuusala innostui
  • 17:38 - 17:45
    uhkatiedustelufiideistä, jotka
  • 17:42 - 17:49
    ovat täysin turhia. Älkää käyttäkö niihin rahaa.
  • 17:45 - 17:51
    Sanotaan siis, että hyökkääjä hakkeroi
  • 17:49 - 17:53
    blohini ja siirtyi tinyldapin pariin ja
  • 17:51 - 17:55
    nyt siis hyökkää tinyldapiin. Silloin hän pystyykin
  • 17:53 - 17:59
    pääsemään käsiksi toisiin tileihin, koska tinyldap
  • 17:55 - 18:01
    käsittelee myös yhteyksiä toisiin blogin ilmentymiin,
  • 17:59 - 18:04
    joten ongelma on sama kuin aiemminkin,
  • 18:01 - 18:06
    maaliviivaa on vain siirretty
  • 18:04 - 18:08
    hieman eteenpäin. Tämä täytyy estää,
  • 18:06 - 18:11
    ja itsestäänselvä ratkaisu on
  • 18:08 - 18:13
    tehdä sama homma kuin blogin kanssa
  • 18:11 - 18:14
    ja käyttää yhtä LDAP-palvelimen prosessia
  • 18:13 - 18:17
    pyyntöä kohden, ja sitten vain kiellämme
  • 18:14 - 18:20
    ptracen käytön. Siis, enää ei ole mahdollista
  • 18:17 - 18:22
    nähdä, vaikka pystyisikin ajamaan mielivaltaista koodia
  • 18:20 - 18:25
    LDAP-palvelimen sisällä, ei olisi siis mahdollista nähdä,
  • 18:22 - 18:28
    mitä salasanoja toiset käyttäjät käyttävät.
  • 18:25 - 18:32
    On siis yhä mahdollista nähdä-
    Okei, ala tekee
  • 18:28 - 18:35
    taas jotain hevonpaskaa. On yhä mahdollista nähdä
  • 18:32 - 18:35
    salasana LDAP:n muistista, koska
  • 18:35 - 18:39
    LDAP-palvelimella täytyy olla tallessa versio
  • 18:38 - 18:42
    salasanasta, jota vastaan salasanoja voi tarkistaa ja
  • 18:39 - 18:43
    alan käytäntö, paras käytäntö, on
  • 18:42 - 18:45
    käyttää suolattuja (salted) tiivisteitä, joten itse salasanaa
  • 18:43 - 18:47
    ei olekaan muistissa ollenkaan.
  • 18:45 - 18:50
    Silti, jos joku onnistuu hyökkäyksessä
  • 18:47 - 18:54
    tinyldapia kohtaan blogin kautta, hän pystyy
  • 18:50 - 18:56
    varastamaan tiivisteet ja yrittämään niiden murtamista,
  • 18:54 - 18:58
    mutta koska olen ainoa, joka lisää käyttäjiä,
  • 18:56 - 19:01
    voin vapaasti hallita salasanojen turvallisuusvaatimuksia,
  • 18:58 - 19:03
    joten onnea vaan väsytyshyökkäyksen kanssa.
  • 19:01 - 19:05
    Okei, tämä on oikeastaan aito ongelma,
  • 19:03 - 19:08
    ei kuitenkaan nimenomaan blogini suhteen
  • 19:05 - 19:10
    vaan toisten verkkopalvelujen tai siis
  • 19:08 - 19:11
    kaikkien palvelujen, joihin voi yhdistää internetin kautta:
  • 19:10 - 19:14
    Mitä jos hyökkääjä ei haluakaan varastaa
  • 19:11 - 19:16
    dataa, vaan salata sen?
  • 19:14 - 19:18
    Kyseessä on siis kiristysohjelma. Mitä sille voi
  • 19:16 - 19:19
    siis tehdä? Minun ideani oli tallentaa
  • 19:18 - 19:22
    data lukumuistiin, siis
  • 19:19 - 19:25
    LDAP-palvelimella on muisti, joka sisältää
  • 19:22 - 19:27
    kaikki blogimerkinnät ja se on saatavilla vain luettavaksi
  • 19:25 - 19:29
    LDAP-prosessille. Sitä voi vain lukea,
  • 19:27 - 19:32
    ja jos siihen haluaa kirjoittaa,
  • 19:29 - 19:34
    jos esimerkiksi pitää lisätä uusi merkintä,
  • 19:32 - 19:36
    se lisätäänkin toiseen tiedostoon, jota
  • 19:34 - 19:39
    kutsun journaliksi. SQL-tietokannoille on käytössä
  • 19:36 - 19:42
    vastaava idea, ja sitä käytetään transaktioiden
  • 19:39 - 19:44
    kumoamiseen. Voin tehdä samoin,
  • 19:42 - 19:44
    kyseessä on periaatteessa lokitiedosto,
  • 19:45 - 19:50
    mikä tarkoittaa, että kaikki muutokset
  • 19:48 - 19:51
    viime kerrasta, kun muisti,
  • 19:50 - 19:55
    lukumuisti, luotiin, kaikki eroavaisuudet
  • 19:51 - 19:57
    tallennetaan peräkkäin lokitiedostoon,
  • 19:55 - 19:59
    eli journaliin. Suorituskyky
  • 19:57 - 20:01
    huononee sitä mukaa, kun journal kasvaa,
  • 19:59 - 20:04
    joten silloin tällöin täytyy yhdistää
  • 20:01 - 20:06
    lukumuistiosio ja journal
  • 20:04 - 20:09
    uudeksi, isommaksi lukumuistiosioksi ja
  • 20:06 - 20:13
    sen teen itse manuaalisesti,
  • 20:09 - 20:16
    koska tinyldap ei pystyisi siihen,
  • 20:13 - 20:19
    koska siltä on kielletty muistiin kirjoittaminen.
  • 20:16 - 20:21
    Sehän oli osa turvallisuusmekanismia.
  • 20:19 - 20:22
    Käyttäen seccompia voin vain poistaa käytöstä
  • 20:21 - 20:25
    järjestelmäkutsuja, voin asentaa suodattimia, joten
  • 20:22 - 20:27
    voin siis sanoa, että open on sallittu toimenpide, mutta vain, jos
  • 20:25 - 20:30
    käyttää O_APPENDia. O_APPEND Unixin open-järjestelmäkutsun
  • 20:27 - 20:33
    yhteydessä tarkoittaa, että jokainen muutos, jonka
  • 20:30 - 20:35
    tiedostonkuvaukseen tekee, tallentuu automaattisesti
  • 20:33 - 20:38
    aina loppuun. Siis, jos tiedän, että jos joku
  • 20:35 - 20:41
    onnistuu pääsemään käsiksi tinyldapin
  • 20:38 - 20:43
    binaaritiedostoon ja pystyy sen avulla kirjoittamaan journaliin, niin
  • 20:41 - 20:46
    ainoa paikka, johon muutoksia voi tehdä,
  • 20:43 - 20:47
    on aivan tiedoston lopussa, mikä on oikeastaan
  • 20:46 - 20:49
    todella hyvä asia, sillä se tarkoittaa, että
  • 20:47 - 20:51
    jos joku saattu hakkeroimaan minut ja lisää roskaa
  • 20:49 - 20:53
    blogiini, voin vain poistaa palan lopusta ja
  • 20:51 - 20:56
    tilanne on sillä selvä. Jos tätä verrataan
  • 20:53 - 20:56
    tavanomaiseen SQL-tietokantaa, jos silloin joku kirjoittaa
  • 20:56 - 21:00
    tietokantaan, muutosten kumoamiseksi täytyy ladata
  • 20:59 - 21:02
    varmuuskopio, koska mikä tahansa
  • 21:00 - 21:05
    on saattanut muuttua missä tahansa.
  • 21:02 - 21:09
    Tinyldapilla ei kuitenkaan ole edes
  • 21:05 - 21:10
    pääsyä tiedostojärjestelmään eikä se siis pysty
  • 21:09 - 21:13
    muuttamaan mitään muistin sisältöä, joten
  • 21:10 - 21:15
    voin palata rauhassa nukkumaan.
  • 21:13 - 21:16
    IT-turvallisuusala tuhlasi rahaa
  • 21:15 - 21:19
    kyberturvallisuusverkostoarkkitehtuuriin.
  • 21:16 - 21:21
    Jep. Journalin päivitys on asia,
  • 21:19 - 21:23
    joka minun täytyy manuaalisesti tehdä kaistan ulkopuolisesti.
  • 21:21 - 21:25
    Se ei siis ole mikään automaattinen prosessi,
  • 21:23 - 21:27
    koska teen sen manuaalisesti ja
  • 21:25 - 21:30
    kun teen sen,
  • 21:27 - 21:33
    dataahan ei ole paljoa, vain viikon
  • 21:30 - 21:35
    tai parin ajalta, voin vain lukea sen
  • 21:33 - 21:38
    läpi ja tarkistaa, että kaikki näyttää
  • 21:35 - 21:41
    siltä, miltä pitäisi. Tämä ei välttämättä ole vaihtoehto
  • 21:38 - 21:44
    kaikissa muissa skenaarioissa, mutta on tärkeää
  • 21:41 - 21:46
    ymmärtää, että vaikka dataa on enemmän,
  • 21:44 - 21:48
    kaikkea dataa ei yleensä olekaan paljoa enempää.
  • 21:46 - 21:51
    Suurin osa sisällöstä on muuttumatonta lukusisältöä,
  • 21:48 - 21:51
    ja lisäksi on joitain lokitiedostoja, joihin
  • 21:53 - 21:59
    lisätään jatkuvasti dataa ja jotka kasvavat kasvamistaan,
  • 21:56 - 22:02
    mutta yleensä on olemassa osa datasta,
  • 21:59 - 22:04
    osa, johon siis...
  • 22:02 - 22:07
    henkilötiedot kuuluvat, kuten myös
  • 22:04 - 22:09
    laskutustiedot ja tämä data on yleensä
  • 22:07 - 22:12
    määrältään vähäistä ja siihen voidaan
  • 22:09 - 22:14
    soveltaa samaa strategiaa.
  • 22:12 - 22:16
    Jaa, no niin.
  • 22:14 - 22:19
    Hyökkääjä voi siis yhä kirjoittaa roskaa
  • 22:16 - 22:21
    blogiini, mikä ei ole ideaalinen tilanne,
  • 22:19 - 22:24
    mutta koska kaikki, mitä tämä voi tehdä, on lisätä
  • 22:21 - 22:26
    dataa journalin loppuun, voin käyttää tekstieditoria
  • 22:24 - 22:30
    ja avata journalin sekä rajata sen sisällön johonkin kohtaan.
  • 22:26 - 22:33
    Saan siis datan palautettua
  • 22:30 - 22:35
    tilanteseen, jossa blogia alettiin saastuttamaan.
  • 22:33 - 22:37
    Tilanne ei ole ideallinen,
  • 22:35 - 22:39
    mutta kuitenkin hyvä hätätapauksien kannalta,
  • 22:37 - 22:41
    koska on mahdollista
  • 22:39 - 22:43
    tutkia tilannetta ensin rauhassa.
  • 22:41 - 22:46
    Ensin poistetaan käytöstä kirjoitusoikeudet,
  • 22:43 - 22:49
    sitten vandalismi poistetaan journalista,
  • 22:46 - 22:51
    ja tässä kohtaa voidaan olla varmoja, ettei mitään ole menetetty,
  • 22:49 - 22:53
    koska jos blogista haluaa poistaa merkinnän,
  • 22:51 - 22:56
    sekin on mahdollista, mutta se tarkoittaa käytännössä,
  • 22:53 - 22:58
    että journalin loppuun lisätään
  • 22:56 - 23:01
    merkintä, joka sanoo "tämä tieto
  • 22:58 - 23:03
    poistetaan", ja tämän merkinnän voi vain poistaa,
  • 23:01 - 23:06
    jolloin poistettu tieto saadaan takaisin. Ei siis ole
  • 23:03 - 23:08
    mahdollista vandalisoida mitään blogin
  • 23:06 - 23:10
    dataa, joka oli siellä ennen vandalisointia.
  • 23:08 - 23:13
    On mahdollista ainostaan lisätä loppuun roskaa,
  • 23:10 - 23:15
    ja tämän mahdollisuuden kanssa jo pärjätään.
  • 23:13 - 23:17
    Pitäisi olla johtavana ajatuksena
  • 23:15 - 23:19
    kaiken turvallisuuden lomassa, että
  • 23:17 - 23:23
    jos joutuu hakkeroinnin uhriksi, tilanne on
  • 23:19 - 23:25
    hyvin stressaava, pomo tulee olemaan
  • 23:23 - 23:28
    olan takana hengittelemässä niskaasi kyselemässä, että
  • 23:25 - 23:31
    "Onko jo valmista?" ja että "Onko se nyt korjattu?", ja sillä hetkellä
  • 23:28 - 23:33
    tulisi olla mahdollisimman vähän asioita, joista huolehtia.
  • 23:31 - 23:35
    Kaikki stressi kannattaa siirtää
  • 23:33 - 23:39
    hakkerointia edeltävälle ajalle, koska
  • 23:35 - 23:41
    silloin aikaa on enemmän.
  • 23:39 - 23:43
    Okei, ala teki taas kaikenlaista.
  • 23:41 - 23:47
    Siis, entä jos hyökkääjä ei kirjoitakaan
  • 23:43 - 23:49
    roskaa journaliin, vaan kirjoittaa jotain
  • 23:47 - 23:51
    haitallista journaliin, joka aiheuttaa sen,
  • 23:49 - 23:54
    että kun jokin tinyldap-ilmentymä lukee sitä
  • 23:51 - 23:57
    seuraavan kerran, ilmentymä joutuukin vaarannetuksi.
  • 23:54 - 24:00
    Se on mahdollisuus, joka on
  • 23:57 - 24:02
    meille hyvin epäedullinen,
  • 24:00 - 24:06
    mutta on tajuttava, kuinka uskomaton skenaario
  • 24:02 - 24:09
    on kyseessä. Nyt puhutaan hyökkääjästä,
  • 24:06 - 24:11
    joka on löytänyt vakaan nollapäivähaavoittuvuuden blogista,
  • 24:09 - 24:13
    ja käyttänyt sitä sekä toista
  • 24:11 - 24:15
    vakaata nollapäivähaavoittuvuutta tinyldapissa kirjoittaakseen journaliin,
  • 24:13 - 24:18
    ja käyttänyt vielä
  • 24:15 - 24:21
    kolmatta nollapäivähaavoittuvuutta journalin
  • 24:18 - 24:23
    lukukoodia vastaan. No,
  • 24:21 - 24:25
    kyllä, kyseessä on yhä ongelma, mutta
  • 24:23 - 24:29
    riskiä on vähennetty merkittävästi.
  • 24:25 - 24:32
    Tämä on juuri sitä,
  • 24:29 - 24:34
    mitä yritän sanoa:
  • 24:32 - 24:37
    kyseessä ei ole kaikki tai ei mitään -tilanne. Riittää,
  • 24:34 - 24:40
    että riski saadaan puolitettua, se on jo hyvin
  • 24:37 - 24:42
    tärkeää ja sitä pitäisi tehdä aina,
  • 24:40 - 24:44
    kun on mahdollista: Mitä enemmän riskiä saa kavennettua,
  • 24:42 - 24:47
    sitä paremmassa tilanteessa ollaan,
  • 24:44 - 24:49
    kun käy huonosti.
  • 24:47 - 24:50
    Koska mitä pienempi määrä koodia,
  • 24:49 - 24:53
    jota kohtaaan voi yhä hyökätä, on,
  • 24:50 - 24:55
    sitä paremmin tätä koodia voi tarkastaa ja varmistua,
  • 24:53 - 24:56
    että koodi on kunnossa. Koodia voi näyttää ystäville ja
  • 24:55 - 25:00
    hekin voivat tarkastaa sitä. On ehdottoman tarpeellista,
  • 24:56 - 25:02
    että tätä aikaa säästetään, koska
  • 25:00 - 25:05
    silloin tällöin käy niin, että pääsen
  • 25:02 - 25:07
    näkemään koko koodikannan, ja
  • 25:05 - 25:11
    tavanomainen koodikanta kaupallisille
  • 25:07 - 25:13
    tuotteille koostuu gigatavuista lähdekoodia.
  • 25:11 - 25:16
    Kukaan ei pysty lukemaan sitä kokonaisuudessaan.
  • 25:13 - 25:19
    Olen hyvä työssäni, mutten aivan niin hyvä.
  • 25:16 - 25:23
    Siis, tämä on hyvä tilanne.
  • 25:19 - 25:24
    IT-turvallisuusala taisi myydä suojausta
  • 25:23 - 25:26
    hajautettuja palvelunestohyökkäyksiä kohtaan, juu, niinpä niin.
  • 25:24 - 25:28
    Mitä siis tapahtuu, jos joku hyökkää verkkopalvelinta kohtaan?
  • 25:26 - 25:31
    Kyseessä on edelleen suuri ongelma.
  • 25:28 - 25:32
    Pahinta on siis
  • 25:31 - 25:34
    täydellinen vahinko, eikö niin?
  • 25:32 - 25:37
    Se on pahin mahdollinen asia, mitä voi tapahtua
  • 25:34 - 25:40
    jos joku onnistuu hyökkäyksessä verkkopalvelinta kohtaan.
  • 25:37 - 25:45
    Hyökkääjä näkee kaiken kulkevan verkkoliikenteen,
  • 25:40 - 25:46
    hän pystyy vakoilemaan TLS-suojattuja
  • 25:45 - 25:48
    yhteyksiä ja nuuskimaan sieltä
  • 25:46 - 25:49
    salasanoja, mikä on todella huono homma.
  • 25:48 - 25:52
    Valitettavasti ei ole paljoakaan,
  • 25:49 - 25:55
    jota asialle voisi tehdä.
  • 25:52 - 25:56
    Olisi mahdollista tehdä jako,
  • 25:55 - 25:58
    mikä on asia, josta on puhuttu
  • 25:56 - 26:01
    jo hetken aikaa OpenSSL:n suhteen. Se tarkoittaisi, että
  • 25:58 - 26:03
    OpenSSL tekee kaiken riskialttiin kryptografian
  • 26:01 - 26:05
    toisessa prosessissa, ja käyttää
  • 26:03 - 26:07
    hiekkalaatikkoa kyseisen prosessin rajoittamiseen.
  • 26:05 - 26:09
    Se olisi mahdollista, mutta kukaan ei ole toteuttanut sitä vielä
  • 26:07 - 26:11
    OpenSSL:lle, OpenSSL ei siis
  • 26:09 - 26:13
    tue sitä. Verkkopalvelimeni
  • 26:11 - 26:16
    tukee myös Mbed TLS:ää, mitä OpenSSL ei tue.
  • 26:13 - 26:19
    Voisin käyttää tähän aikaa,
  • 26:16 - 26:21
    ja itse asiassa olenkin
  • 26:19 - 26:23
    jo käyttänyt siihen aikaa, mutta
  • 26:21 - 26:26
    se ei ole vielä valmista. Se olisi
  • 26:23 - 26:28
    hyvä tapa vähentää riskiä. Saatatte
  • 26:26 - 26:30
    huomata, että työkalut, joita käytän
  • 26:28 - 26:33
    riskin vähentämiseen ovat vain muutamia samoja.
  • 26:30 - 26:35
    Se ei ole mitään noituutta.
  • 26:33 - 26:37
    En keksi uusia tapoja tarkastella asioita.
  • 26:35 - 26:39
    Teen vain samoja asioita
  • 26:37 - 26:42
    uudelleen ja uudelleen. Tunnistan sen osan koodista,
  • 26:39 - 26:47
    joka on vaarallinen, ja sen jälkeen
  • 26:42 - 26:50
    mietin, miten voisin pienentää kyseistä
  • 26:47 - 26:51
    osaa koodista tai ehkä siirtää sen toiseen
  • 26:50 - 26:53
    prosessiin, jota rajoitetaan. Sama täytyy
  • 26:51 - 26:55
    tehdä myös verkkopalvelimelle,
  • 26:53 - 26:58
    tietenkin, mutta prosessi on kesken.
  • 26:55 - 26:59
    Jep, jälleen, niinpä niin.
  • 26:58 - 27:01
    Miksen ole siis tehnyt sitä vielä?
  • 26:59 - 27:05
    Verkkopalvelimessani on koodia kääntäessä tehtävä
  • 27:01 - 27:07
    päätös, halutaanko SSL-tukea vaiko ei.
  • 27:05 - 27:10
    Näemme, että binaaritiedosto on
  • 27:07 - 27:12
    huomattavasti suurempi SSL:n ollessa käytössä.
  • 27:10 - 27:14
    Näytän tämän, koska se merkitsee,
  • 27:12 - 27:16
    että hyökkäyspinnasta suurin osa on SSL-koodissa,
  • 27:14 - 27:18
    ei siis minun koodissani. Jos siis voin
  • 27:16 - 27:20
    siirtää SSL-koodin toiseen prosessiin,
  • 27:18 - 27:21
    salaisen avaimen tulee silti olla näkyvillä,
  • 27:20 - 27:25
    koska sitähän TLS tarvitsee,
  • 27:21 - 27:28
    salaista avainta siis, muutoin se ei pysty
  • 27:25 - 27:30
    tarvittavaan kryprografiaan. Suurimmalla osalla
  • 27:28 - 27:32
    hyökkäyspinnasta olisi siis yhä pääsy avaimiin,
  • 27:30 - 27:36
    voisin tehdä sen silti, koska
  • 27:32 - 27:39
    omassa kodissani saattaa olla bugeja
  • 27:36 - 27:39
    SSL-koodin sijaan, mutta se on vain 5%
  • 27:41 - 27:46
    koko hyökkäyspinnasta, joten
  • 27:47 - 27:52
    teen sen luultavasti jossain vaiheessa, mutta
  • 27:50 - 27:55
    on turhaa odottaa mitään ihmeitä.
  • 27:52 - 27:57
    Bugit OpenSSL:ssä koituvat vielä kuolemakseni,
  • 27:55 - 28:00
    sille en voi oikeastaan mitään.
  • 27:57 - 28:02
    Naurua
  • 28:00 - 28:05
    Okei, tiedän siis mitä ajattelette:
  • 28:02 - 28:07
    Voimakasta naurua
  • 28:05 - 28:11
    entä bugit käyttöjärjestelmän ytimessä?
  • 28:07 - 28:12
    Katsoin siis muutamia viime aikaisia
  • 28:11 - 28:16
    ytimen bugeja ja kävi ilmi, että
  • 28:12 - 28:20
    ne yleensä tapahtuvat järjestelmäkutsuissa, joita
  • 28:16 - 28:23
    harvoin käytetään tavallisissa ohjelmissa. Koska rajoitan
  • 28:20 - 28:25
    kaikki järjestelmäkutsut, joita en oikeasti
  • 28:23 - 28:28
    tarvitse, yksikään bugeista ei koske minua.
  • 28:25 - 28:30
    Tämähän on yleinen kuvio
  • 28:28 - 28:33
    ytimen bugien suhteen.
  • 28:30 - 28:34
    On olemassa projekti nimeltä Sandstorm,
  • 28:33 - 28:37
    joka käyttää ptracea ja seccomp-seurantaa
  • 28:34 - 28:38
    järjestelmäkutsujen hyökkäyspinnan
  • 28:37 - 28:40
    vähentämiseksi ja laittaa tavalliset palvelut
  • 28:38 - 28:43
    verkkopalveluille tarkoitettuun hiekkalaatikkoon, ja tämä
  • 28:40 - 28:45
    auttaa kiertämään kaikenlaisia ytimen bugeja
  • 28:43 - 28:47
    itsessään, kyseessähän on siis
  • 28:45 - 28:50
    asia, jota varten ei tarvitse paljoa työskennellä,
  • 28:47 - 28:52
    tietenkin, jos käytössä on lista järjestelmäkutsuista,
  • 28:50 - 28:54
    niin käytetään valkoista listaa,
  • 28:52 - 28:56
    pidetään yllä listaa asioista,
  • 28:54 - 28:59
    jotka ovat erikseen sallittuja,
  • 28:56 - 29:01
    eikä toisin päin.
  • 28:59 - 29:05
    Yksikään tavanomainen ytimen bugi ei siis kosketa
  • 29:01 - 29:07
    minua, koska hyödynnän seccompia.
  • 29:05 - 29:11
    Ytimen bugit eivät ole yhtä iso
  • 29:07 - 29:13
    ongelma kuin olettaisi. Ne ovat yhtä
  • 29:11 - 29:14
    ongelmassa, ellen ole paikannut niitä,
  • 29:13 - 29:16
    mutta blogin kautta niihin ei pääse käsiksi.
  • 29:14 - 29:17
    Minulla on pieni tunnustus:
  • 29:16 - 29:20
    Olen pieni trolli ja se vaikutti
  • 29:17 - 29:24
    myös tähän projektiin, käytin siis
  • 29:20 - 29:26
    huonointa ohjelmointikieltä, C:tä.
  • 29:24 - 29:29
    Trollaan siis turvallisuusporukkaa
  • 29:26 - 29:30
    ja trollaan myös Java-porukkaa,
  • 29:29 - 29:32
    joka väittää, että tulisi käyttää
  • 29:30 - 29:35
    monisäikeistystä parantamaan suorituskykyä eikä
  • 29:32 - 29:37
    yhtä prosessia pyyntöä kohden,
  • 29:35 - 29:40
    käytän siis kahta fork- ja exec-kutsua
  • 29:37 - 29:42
    jokaista pyyntöä kohden.
  • 29:40 - 29:44
    Trollaan tietokantaporukkaa,
  • 29:42 - 29:48
    en käytä välimuistia,
  • 29:44 - 29:50
    en käytä connection poolia
  • 29:48 - 29:52
    ja myös suorituskykyporukkaa, koska
  • 29:50 - 29:55
    ratkaisuni on kaikesta huolimatta nopeampi kuin suurin osa
  • 29:52 - 29:58
    tavanomaisista ratkaisuista, joten ohjelmiston
  • 29:55 - 30:01
    suunnittelemisessa tällä tavoin ei ole juuri
  • 29:58 - 30:03
    huonoja puolia,
  • 30:01 - 30:04
    ratkaisu on muita vaihtoehtoja hitaampi,
  • 30:03 - 30:07
    mutta suurin osa muista ohjelmistoista ei kuitenkaan
  • 30:04 - 30:09
    ole yhtä nopeita, joten etumatkaa on riittävästi,
  • 30:07 - 30:12
    jotta voi keskittyä turvallisuuteen
  • 30:09 - 30:14
    suorituskyvyn sijaan ollen silti nopeampi.
  • 30:12 - 30:16
    Kerrataan vielä käyttämäni metodologia.
  • 30:14 - 30:18
    Ensimmäiseksi teen listan kaikistä hyökkäyksistä,
  • 30:16 - 30:20
    joita voin kuvitella, ja tällä tarkoitan
  • 30:18 - 30:23
    konkreettisia hyökkäyksiä, jotka voisivat tapahtua,
  • 30:20 - 30:26
    ja ongelmista,
  • 30:23 - 30:27
    jotka niistä seuraisi.
  • 30:26 - 30:29
    Jokaista listan kohtaa kohden
  • 30:27 - 30:31
    mietin: "miten tämän voisi estää?",
  • 30:29 - 30:33
    "voinko estää tämän?" ja "mitä estämiseksi on tehtävä?".
  • 30:31 - 30:34
    Sen jälkeen teen, mitä pitää, helppoa.
  • 30:33 - 30:36
    Tämä muistuttaa Feynmanin ongelmanratkaisualgoritmia
  • 30:34 - 30:38
    hengeltään. Tätä prosessia kutsutaan
  • 30:36 - 30:40
    uhkamallinnukseksi.
  • 30:38 - 30:41
    Se on kuin kirosana, koska kuulostaa
  • 30:40 - 30:44
    siltä, että siinä on kova työ
  • 30:41 - 30:47
    eikä kukaan halua tehdä sitä, mutta tosiasiassa
  • 30:44 - 30:50
    se on helppoa, pitää vain noudattaa näitä askelia.
  • 30:47 - 30:53
    Ohjelmistoa tutkitaan ja
  • 30:50 - 30:55
    mietitään, millä kaikilla tavoilla sitä kohtaan voisi hyökätä.
  • 30:53 - 30:58
    Sitten harkitaan, miten
  • 30:55 - 31:00
    hyökkäys voitaisiin estää tai toisinaan,
  • 30:58 - 31:03
    voitaisiinko sitä estää ollenkaan
  • 31:00 - 31:05
    ja jos ei, riskin kanssa on selviydyttävä.
  • 31:03 - 31:07
    Tätä kutsutaan siis uhkamallinnukseksi,
  • 31:05 - 31:09
    sitä kannattaa kokeilla, se on mahtavaa.
  • 31:07 - 31:10
    Näitte, että yritin
  • 31:09 - 31:13
    optimoida jotain tiettyä,
  • 31:10 - 31:15
    tavoittelin jotain, tässä tapauksessa
  • 31:13 - 31:18
    mahdollisimman vähäistä määrää koodia.
  • 31:15 - 31:20
    Mitä enemmän koodia on, sitä enemmän bugeja
  • 31:18 - 31:22
    siinä on. Kyseessä on vanha
  • 31:20 - 31:25
    oivallus, muistaakseni alun perin
  • 31:22 - 31:27
    IBM:n tutkimuksesta, jossa saatiin selville,
  • 31:25 - 31:30
    että koodissa olevien bugien määrä on
  • 31:27 - 31:32
    koodirivien määrän funktio.
  • 31:30 - 31:33
    Asia ei oikeasti ole aivan näin simppeli,
  • 31:32 - 31:35
    mutta pohjimmiltaan tämä on totta. Ei puhuta
  • 31:33 - 31:39
    mistä tahansa koodista, jonka määrä halutaan minmoida,
  • 31:35 - 31:41
    jos koodi on vaarallista, haluan erityisesti
  • 31:39 - 31:43
    vähentää sen määrää ja tärkein
  • 31:41 - 31:45
    kategoria, jota pienentää, on
  • 31:43 - 31:48
    turvallisustakuita yllä pitävä koodi.
  • 31:45 - 31:49
    Turvallisuustakuu on
  • 31:48 - 31:51
    esimerkiksi se, että on mahdotonta kirjautua
  • 31:49 - 31:54
    ilman oikeaa salasanaa.
  • 31:51 - 31:55
    Haluan tällaisia asioita tarkastavaa koodia
  • 31:54 - 31:57
    olevan niin vähän kuin mahdollista, ehkä yksi tai kaksi
  • 31:55 - 32:01
    riviä koodia, jos vain mahdollista,
  • 31:57 - 32:04
    jolloin on selkeää, onko koodi tehty oikein vai
  • 32:01 - 32:07
    väärin. Mitä monimutkaisempi ohjelmakoodi on,
  • 32:04 - 32:09
    sitä vaikeampaa on varmistua,
  • 32:07 - 32:11
    onko se tehty oikein vai ei. Sehän on
  • 32:09 - 32:14
    haluttu lopputulos, varmuus sitä, että
  • 32:11 - 32:16
    koodi on oikein. Kuinka pitkälle siis pääsin?
  • 32:14 - 32:19
    Tulokset ovat mielestäni melko hienot.
  • 32:16 - 32:21
    LDAP-palvelimen voi kirjoittaa 5000 koodirivillä,
  • 32:19 - 32:24
    itse blogi koostuu 3500 koodirivistä,
  • 32:21 - 32:26
    plus LDAP-asiakaskirjasto,
  • 32:24 - 32:28
    plus zlib,
  • 32:26 - 32:32
    mutta käytän zlib:tä vain pakkaamiseen enkä
  • 32:28 - 32:35
    purkamiseen, joten suurin osa hyökkäysskenaarioista
  • 32:32 - 32:36
    ei koske minun zlib-käyttöäni.
  • 32:35 - 32:39
    Verkkopalvelin on melko hidas,
  • 32:36 - 32:41
    jos keskitytään pelkkään HTTP-koodiin,
  • 32:39 - 32:43
    se valitettavasti sisältää myös
  • 32:41 - 32:45
    SSL-kirjaston, joka on useita suuruusluokkia
  • 32:43 - 32:47
    omaa koodiani isompi, ja tämähän on haluttu tilanne.
  • 32:45 - 32:50
    Suurimman riskin ei tulisi olla
  • 32:47 - 32:53
    uudessa koodissa, vaan vanhassa koodissa,
  • 32:50 - 32:56
    jonka joku muu on jo tarkastanut,
  • 32:53 - 32:57
    mikäli vain mahdollista. Tämä on
  • 32:56 - 33:01
    siis optimisaatiostrategia, yritä minimoida
  • 32:57 - 33:05
    vaarallisen koodin määrä, mikä kuulostaa
  • 33:01 - 33:08
    helpolta jutulta, mutta kun katsoo tarkemmin
  • 33:05 - 33:10
    modernia ohjelmistokehitystä, huomaa,
  • 33:08 - 33:12
    että todellisuus on päinvastainen: käytetään
  • 33:10 - 33:15
    mahdollisimman monia ohjelmistokehyksiä.
  • 33:12 - 33:18
    Strategian nimi on TCB-minimointi,
  • 33:15 - 33:21
    sitä kannattaa kokeilla,
  • 33:18 - 33:24
    olen pitänyt aiheesta jo esitelmän ja
  • 33:21 - 33:26
    se on oikeastaan melko helppoa.
  • 33:24 - 33:28
    Kerroin jo, mitä tein
  • 33:26 - 33:31
    blogille vähentääkseni
  • 33:28 - 33:34
    vahinkoa, joka voi aiheutua,
  • 33:31 - 33:36
    jos joku onnistuu kaappaamaan sen,
  • 33:34 - 33:37
    mikä on oikeastaan oisa TCB-minimointiprosessia.
  • 33:36 - 33:39
    Blogi oli varsin
  • 33:37 - 33:41
    riskialtis, mutta vähensin
  • 33:39 - 33:44
    oikeuksia ja poistin ylimääräisiä tarkastuksia.
  • 33:41 - 33:47
    Lopulta, vaikka antaisin jokaiselle
  • 33:44 - 33:49
    mahdollisuuden suorittaa koodia blogin sisällä,
  • 33:47 - 33:52
    ei silti olisi mahdollista tehdä mitään, mitä ei olisi jo valmiiksi voinut.
  • 33:49 - 33:55
    Se ei enää kuulu TCB:hen,
  • 33:52 - 33:57
    TCB on osio, joka pitää yllä
  • 33:55 - 34:00
    turvallisuustakuita, joita blogin CGI
  • 33:57 - 34:04
    ei enää pidä.
  • 34:00 - 34:05
    Tämä on siis tavoite.
  • 34:04 - 34:07
    TCB pitää saada niin pieneksi,
  • 34:05 - 34:09
    kuin vain mitenkään mahdollista ja matkan
  • 34:07 - 34:11
    joka askel on tärkeä. Yksikään askel
  • 34:09 - 34:15
    ei ole liian pieni. Jos pienenkin
  • 34:11 - 34:17
    ylimääräisen osan voi poistaa, se kannattaa.
  • 34:15 - 34:20
    Tämä on se minimointi
  • 34:17 - 34:22
    TCB-minimoinnissa. Onnistuin poistamaan
  • 34:20 - 34:24
    blogin TCB:stä. tinyldap:ssa
  • 34:22 - 34:27
    on yhä riskejä, näitte riskimallin:
  • 34:24 - 34:29
    jos joku onnistuu kaappaamaan
  • 34:27 - 34:31
    tinyldap:n, hän pystyy lukemaan
  • 34:29 - 34:33
    tiivisteet ja yrittämään niiden murtamista.
  • 34:31 - 34:35
    Se on silti huono homma, mutta sen kanssa selviydytään.
  • 34:33 - 34:38
    Jos blogia vandalisoidaan, vahinko
  • 34:35 - 34:40
    voidaan perua käymättä
  • 34:38 - 34:42
    nauha-arkistossa, hyvä.
  • 34:40 - 34:43
    Jos tätä verrataan nykyisiin teknisiin standardeihin.
  • 34:42 - 34:45
    voidaan huomata, että lähestymistapani on
  • 34:43 - 34:47
    paljon parempi. Alalla näkee
  • 34:45 - 34:48
    usein alustavalintoja,
  • 34:47 - 34:51
    jotka tekee johto, eikä tekniikan tuntija.
  • 34:48 - 34:55
    Alaa ei häiritse asiantuntemus eikä
  • 34:51 - 34:55
    riskianalyysi, vaan usein vastuu
  • 34:55 - 34:59
    usein leviää, koska vaikka
  • 34:57 - 35:01
    yritettäisiin selvittää, kuka
  • 34:59 - 35:03
    on vastuussa jostakin, saadaan selville,
  • 35:01 - 35:07
    että vastuussa oli tämä ja tuo tiimi,
  • 35:03 - 35:09
    mutta emme ole aivan varmoja,
  • 35:07 - 35:11
    ja tiimi itse asiassa lakkautettiin viime viikolla,
  • 35:09 - 35:13
    tilanne on siis kamala. Ja hiljattain
  • 35:11 - 35:16
    saataville tulleet tekoälytyökalut johtavat myös
  • 35:13 - 35:18
    vastuun leviämiseen.
  • 35:16 - 35:20
  • 35:18 - 35:24
  • 35:20 - 35:26
  • 35:24 - 35:29
  • 35:26 - 35:29
  • 35:29 - 35:34
  • 35:32 - 35:36
  • 35:34 - 35:38
  • 35:36 - 35:40
  • 35:38 - 35:43
  • 35:40 - 35:45
  • 35:43 - 35:48
  • 35:45 - 35:50
  • 35:48 - 35:52
  • 35:50 - 35:56
  • 35:52 - 35:58
  • 35:56 - 36:00
  • 35:58 - 36:03
  • 36:00 - 36:06
  • 36:03 - 36:08
  • 36:06 - 36:10
  • 36:08 - 36:12
  • 36:10 - 36:16
  • 36:12 - 36:17
  • 36:16 - 36:19
  • 36:17 - 36:22
  • 36:19 - 36:25
  • 36:22 - 36:26
  • 36:25 - 36:29
  • 36:26 - 36:30
  • 36:29 - 36:33
  • 36:30 - 36:36
  • 36:33 - 36:38
  • 36:36 - 36:39
  • 36:38 - 36:42
  • 36:39 - 36:44
  • 36:42 - 36:46
  • 36:44 - 36:48
  • 36:46 - 36:50
  • 36:48 - 36:51
  • 36:50 - 36:54
  • 36:51 - 36:56
  • 36:54 - 36:58
  • 36:56 - 37:01
  • 36:58 - 37:03
  • 37:01 - 37:05
  • 37:03 - 37:09
  • 37:05 - 37:11
  • 37:09 - 37:12
  • 37:11 - 37:16
  • 37:12 - 37:18
  • 37:16 - 37:21
  • 37:18 - 37:21
  • 37:22 - 37:25
  • 37:24 - 37:28
  • 37:25 - 37:31
  • 37:28 - 37:34
  • 37:31 - 37:36
  • 37:34 - 37:39
  • 37:36 - 37:40
  • 37:39 - 37:43
  • 37:40 - 37:45
  • 37:43 - 37:48
  • 37:45 - 37:49
  • 37:48 - 37:52
  • 37:49 - 37:54
  • 37:52 - 37:55
  • 37:54 - 37:58
  • 37:55 - 38:00
  • 37:58 - 38:01
  • 38:00 - 38:03
  • 38:01 - 38:06
  • 38:03 - 38:08
  • 38:06 - 38:11
  • 38:08 - 38:13
  • 38:11 - 38:17
  • 38:13 - 38:20
  • 38:17 - 38:21
  • 38:20 - 38:24
  • 38:21 - 38:27
  • 38:24 - 38:30
  • 38:27 - 38:32
  • 38:30 - 38:35
  • 38:32 - 38:37
  • 38:35 - 38:39
  • 38:37 - 38:41
  • 38:39 - 38:43
  • 38:41 - 38:45
  • 38:43 - 38:47
  • 38:45 - 38:50
  • 38:47 - 38:53
  • 38:50 - 38:55
  • 38:53 - 38:57
  • 38:55 - 38:59
  • 38:57 - 39:01
  • 38:59 - 39:05
  • 39:01 - 39:08
  • 39:05 - 39:10
  • 39:08 - 39:13
  • 39:10 - 39:15
  • 39:13 - 39:18
  • 39:15 - 39:21
  • 39:18 - 39:24
  • 39:21 - 39:27
  • 39:24 - 39:30
  • 39:27 - 39:32
  • 39:30 - 39:34
  • 39:32 - 39:36
  • 39:34 - 39:39
  • 39:36 - 39:41
  • 39:39 - 39:43
  • 39:41 - 39:44
  • 39:43 - 39:47
  • 39:44 - 39:48
  • 39:47 - 39:52
  • 39:48 - 39:54
  • 39:52 - 39:56
  • 39:54 - 39:58
  • 39:56 - 40:01
  • 39:58 - 40:01
  • 40:01 - 40:09
  • 40:09 - 40:13
  • 40:11 - 40:15
  • 40:13 - 40:18
  • 40:15 - 40:20
  • 40:18 - 40:23
  • 40:20 - 40:26
  • 40:23 - 40:28
  • 40:26 - 40:30
  • 40:28 - 40:34
  • 40:30 - 40:35
  • 40:34 - 40:38
  • 40:35 - 40:42
  • 40:38 - 40:42
  • 40:45 - 40:50
  • 40:47 - 40:51
  • 40:50 - 40:56
  • 40:51 - 40:57
  • 40:56 - 41:00
  • 40:57 - 41:02
  • 41:00 - 41:03
  • 41:02 - 41:06
  • 41:03 - 41:07
  • 41:06 - 41:09
  • 41:07 - 41:11
  • 41:09 - 41:15
  • 41:11 - 41:17
  • 41:15 - 41:19
  • 41:17 - 41:22
  • 41:19 - 41:24
  • 41:22 - 41:26
  • 41:24 - 41:28
  • 41:26 - 41:30
  • 41:28 - 41:33
  • 41:30 - 41:35
  • 41:33 - 41:38
  • 41:35 - 41:40
  • 41:38 - 41:42
  • 41:40 - 41:45
  • 41:42 - 41:47
  • 41:45 - 41:51
  • 41:47 - 41:53
  • 41:51 - 41:56
  • 41:53 - 42:00
  • 41:56 - 42:03
  • 42:00 - 42:05
  • 42:03 - 42:07
  • 42:05 - 42:09
  • 42:07 - 42:12
  • 42:09 - 42:14
  • 42:12 - 42:17
  • 42:14 - 42:19
  • 42:17 - 42:21
  • 42:19 - 42:23
  • 42:21 - 42:25
  • 42:23 - 42:27
  • 42:25 - 42:29
  • 42:27 - 42:32
  • 42:29 - 42:34
  • 42:32 - 42:36
  • 42:34 - 42:37
  • 42:36 - 42:40
  • 42:37 - 42:42
  • 42:40 - 42:44
  • 42:42 - 42:47
  • 42:44 - 42:49
  • 42:47 - 42:51
  • 42:49 - 42:53
  • 42:51 - 42:55
  • 42:53 - 42:58
  • 42:55 - 43:00
  • 42:58 - 43:03
  • 43:00 - 43:05
  • 43:03 - 43:08
  • 43:05 - 43:10
  • 43:08 - 43:12
  • 43:10 - 43:13
  • 43:12 - 43:16
  • 43:13 - 43:19
  • 43:16 - 43:22
  • 43:19 - 43:24
  • 43:22 - 43:27
  • 43:24 - 43:29
  • 43:27 - 43:32
  • 43:29 - 43:34
  • 43:32 - 43:36
  • 43:34 - 43:38
  • 43:36 - 43:42
  • 43:38 - 43:46
  • 43:42 - 43:48
  • 43:46 - 43:49
  • 43:48 - 43:52
  • 43:49 - 43:55
  • 43:52 - 43:57
  • 43:55 - 44:00
  • 43:57 - 44:03
  • 44:00 - 44:05
  • 44:03 - 44:07
  • 44:05 - 44:09
  • 44:07 - 44:12
  • 44:09 - 44:15
  • 44:12 - 44:18
  • 44:15 - 44:22
  • 44:18 - 44:23
  • 44:22 - 44:27
  • 44:23 - 44:30
  • 44:27 - 44:32
  • 44:30 - 44:34
  • 44:32 - 44:38
  • 44:34 - 44:39
  • 44:38 - 44:42
  • 44:39 - 44:44
  • 44:42 - 44:45
  • 44:44 - 44:48
  • 44:45 - 44:50
  • 44:48 - 44:53
  • 44:50 - 44:55
  • 44:53 - 44:57
  • 44:55 - 44:59
  • 44:57 - 45:02
  • 44:59 - 45:03
  • 45:02 - 45:06
  • 45:03 - 45:09
  • 45:06 - 45:11
  • 45:09 - 45:14
  • 45:11 - 45:16
  • 45:14 - 45:18
  • 45:16 - 45:21
  • 45:18 - 45:22
  • 45:21 - 45:25
  • 45:22 - 45:27
  • 45:25 - 45:29
  • 45:27 - 45:31
  • 45:29 - 45:33
  • 45:31 - 45:34
  • 45:33 - 45:36
  • 45:34 - 45:38
  • 45:36 - 45:40
  • 45:38 - 45:42
  • 45:40 - 45:44
  • 45:42 - 45:46
  • 45:44 - 45:47
  • 45:46 - 45:51
  • 45:47 - 45:54
  • 45:51 - 45:56
  • 45:54 - 45:59
  • 45:56 - 46:01
  • 45:59 - 46:05
  • 46:01 - 46:09
  • 46:05 - 46:09
  • 46:09 - 46:16
  • 46:12 - 46:16
  • 46:25 - 46:28
  • 46:28 - 46:37
  • 46:38 - 46:41
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • Not Synced
  • 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