Translated by Lauri Lyytinen
(ITKST56 course assignment at JYU.FI)
♪ (36C3 intromusiikki) ♪
Juontaja: Seuraavan esityksen aihe on
käytännön välimuistihyökkäykset verkossa
Puhujana on Michael Kurth. Hän tunnisti
tämän hyökkäystavan. Hyökkäystapa on
ensimmäinen laatuaan. Hän on tutkimuksen
pääkirjoittaja ja hänen esityksensä
tulee olemaan suurenomoinen! Meille on
luvattu huonoja sanaleikkejä kissoista ja
odotan niitä sinulta. Annetaan iso käsi
Michael Kurthille!
(taputusta)
Michael: Hei kaikille ja paljon kiitoksia
kun pääsitte kuuntelemaan esitystäni.
Nimeni on Michael ja haluan jakaa kansanne
tutkimuksemme, jonka toteuttamisen
mahdollisti mahtava VUSec grup osana
Pro gradu -tutkimustani. Hieman itsestäni.
Suoritin tietotekniikan maisteriopintojani
ETH Zürichin ja pystyin tekemään graduni
Amsterdamissa. Nykyään työskentelen
turvallisuusanalyytikkona infoGuardilla.
Tässä näette ihmiset, jotka oikeasti
mahdollistivat tämän tutkimuksen.
He ovat esimiehiäni ja tutkimus-
kollegoitani, jotka tukivat minua
koko ajan ja panostivat aikaa ja vaivaa
tutkimukseen. Joten he ovat oikeat
rokkistarat tämän tutkimuksen taustalla.
Mutta aloitetaanpa välimuistiyökkäyksistä.
Tapa tunnettiin paikallisesti suoritet-
tavan koodin hyökkäyksenä. Esimerkiksi
vasemmalla näkyvässä virtuaaliympäristössä
on kaksi virtuaalikonetta, jotka jakavat
laitteiston. Eli ne jakavat aikapaikat
CPU:n ja välimuistin osalta. Siksi
VM2 käyttävä hyökkääjä voi suorittaa
välimuistihyökkäyksen VM1 vastaan. Samoin
myös JavaScriptillä. Haitallinen skripti
syötetään selaimelle, joka sitten
suorittaa sen. Koska se jakaa resursseja
koneen kanssa se voi myös
hyökätä muihin prosesseihin.
Tämä JavaScript tapa luo tunteen
verkon yli tapahtuvasta toiminnasta, eikö?
Mutta se vaatii skriptin suorittamisen
koneellasi ollakseen oikeasti onnistunut.
Joten halusimme kehittää tätä ja toteuttaa
oikean välimuistihyökkäyksen verkon yli.
Tässä perusasetelmassa asiakas käyttää SSH
yhteyttä palvelimeen ja meillä on kolmas,
hyökkääjän käyttämä kone. Kuten tulen
tänään todistamaan, voimme murtaa tämän
SSH-istunnon luottamuksen käyttämällä
kolmatta konetta ilman haitallista koodia
tai ohjelman suorittamista asiakkaalla
tai palvelimella. Lisäksi palvelimen
CPU:lla ei ole mitään tekemistä tämän
välimuistihyökkäyksen kanssa. Joten se
vain on, eikä huomaa, kun siltä vuotaa
salaisuuksia. Katsotaanpa hieman tarkemmin.
Tässä meillä on kiva kissa suorittamassa
SSH-istuntoa palvelimen kanssa ja aina,
kun kissa painaa nappia yksi paketti
lähtee palvelimelle. Tämä toteutuu aina
interaktiivisessa SSH-istunnossa. Kuten
nimikin kertoo, se luo interaktiivisuuden
tunteen. Kun kurkkaamme hieman
konepellin alle nähdäksemme mitä palveli-
mella tapahtuu, huomamme näiden pakettien
oikeasti aktivoivan viimeisen tason
välimuistia (LLC). Tästä lisää hieman
myöhemmin. Nyt hyökkääjä toteuttaa saman-
aikaisen välimuistihyökkäyksen LLC:een
vain lähettämällä verkkoliikennepaketteja.
Ja näin voimme oikeasti vuotaa
saapumisajat yksittäisistä SSH-paketeista.
Nyt varmaan kysyt itseltäsi miten
SSH-pakettien saapumisajat vaikuttavat
SSH-istunnon luottamuksellisuuteen. No,
ihmisillä on omintakeisia tapoja kirjoit-
taa. Ja tässä näemme esimerkin käyttäjän
kirjoittaessa sanaa "because". Huomamme,
että E:n painallus B:n jälkeen on nopeampi
kuin esimerkiksi C A:n jälkeen. Tämä
voidaan yleistää ja sitä voidaan käyttää
tilastollisessa analyysissä. Näillä orans-
seilla pisteillä, jos saamme mallinnettua
saapumisajat moitteettomasti — ja mitä
moitteeton tarkoittaa: voimme mallintaa
tarkat ajat, kun käyttäjä näppäili —,
voimme toteuttaa tämän tilastollisen
analyysin saapumisien välisistä ajoista.
Ja näin voimme vuotaa mitä olit
kirjoittamassa yksityisessä SSH-istunnossa.
Kuulostaa pelottavalta ja futuristiselta,
mutta minä selkeytän asian esityksen
aikana. Hyvä! Haluan tuoda yhden seikan
esille heti näin alussa: Kuten on tapana
ja kirjoittamien helpottamiseksi
tutkimukselle annetaan nimi. Ja jos olette
seuranneet InfoSecin twitteriä tarkasti,
tunnistatte varmaan mistä olen puhumassa.
Koska meidän tapauksessa nimesimme
tutkimuksen NetCAT:ksi. Tämä oli tietenkin
sanaleikki. Tässä NetCAT tarkoittaa
"Network Cache Attack" ja se oli tietenkin
huumoria, joka voi joskus kostautua.
Ja tässä tapauksessa se kostautui pahasti.
Näin saimme aikaan hieman twitter-draamaa
viime syyskuussa. Yksi tykätyimmistä
twiiteistä tutkimukseen liittyen oli
Jakelta. Nämä esitykset ovat hyviä, koska
tällaiset twiitit voidaan henkilöidä ja
kyllä: Minä olen tämä idiootti. Korjataanpa
tämä! Intel tunnusti työmme palkitsemalla
ja lisäksi CVE-numerolla, joten nykyään
voimme vain käyttää CVE-numeroa. Tai,
jos se on hankalaa, twitter draaman
aikana joku lähetti meille tällaisen
kivan pienen vaihtoehtoisen nimen ja
lisäsi logon, josta minä jopa pidän.
Sen nimi on NeoCAT. Jokatapuksessa,
opimme läksymme nimeämisjutusta.
Siirrytäänpä eteenpäin. Palataan tutkimuk-
semme varsinaisesti kiinnostavimpiin
asioihin! Nopea hahmottelu:
Aion ensin kertoa taustoista eli
välimuistihyökkäykset yleisesti. Sitten
DDIO ja RDMA, tärkeät teknologiat joita
hyväksikäytimme verkon yli tapahtuvassa
hyökkäyksessä. Sitten itse hyökkäys ja kuinka
käänteisesti suunnittelimme DDIO:n,
päästä-päähän hyökkäys ja pieni demo.
Välimuistihyökkäykset perustuvat mikro-
arkkitehtuurin tilan havainnointiin, jonka
pitäisi säilyä salassa ohjelmistolta. Tämä
onnistuu pakottamalla jaetut resurssit
vuotamaan tietoa. Analogiana voidaan pitää
kassakaapin murtamista stetoskoopilla,
jossa jaettuna resurssina on ilma,
joka välittää lukosta tulevat äänet
kun sitä käsitellään. Tämä tapahtuu
jokseenkin samalla tavalla
tietokoneissa. Mutta, nyt vain välimuis-
tissa. Välimuisti ratkaisee pahatkin
viiveongelmat keskusmuistista ladattaessa,
eikö? Nämä tekevät karkeasti neljänneksen
kaikista komennoista. Ja välimuistin avulla
voimme käyttää uudelleen datan ja käyttää
paikkatietoa ohjelmissa. Moderneissa CPU:issa
on yleensä 3-kerroksinen välimuistihierarkia:
L1 on jaettu datan ja komentoväli-
muistin kanssa. L2, ja sitten L3, joka
on jaettu ytimien kesken. Jos käsiteltävä
data on jo ladattu välimuistiin, se
aiheuttaa välimuistiosuman. Jos data
pitää ladata keskusmuistista, sitä pidetään
välimuistihutina. Joten, miten saame
oikeasti tietää milloin tapahtuu osuma tai
huti? Koska emme voi lukea dataa
suoraan välimuistista. Voimme tehdä
tämän esimerkiksi alustamalla ja
tutkaamalla. Se on tunnettu tekniikka, jota
käytimme verkkoympäristössä.
Haluan pikaisesti kertoa siitä, mitä
tässä tapahtuu. Alustamisen ja tutkaamisen
ensimmäisessä vaiheessa hyökkääjä saattaa
välimuistin tunnettuun tilaan. Periaat-
teessa alustaa välimuistin. Se täyttää sen
omalla datallaan, jonka jälkeen hyökkääjä
odottaa uhrin toimia. Viimeinen vaihe on
tutkaaminen, joka tekee alustamisen
uudelleen, mutta tällä kertaa mittaa
kirjautumisajat. Nopeat osumat tar-
koittavat ettei välimuistia oltu muutettu
välissä. Ja hutiosumat tuottavat,
kuten nyt tiedämme, että uhri
on todella käyttänyt yhtä välimuistiriviä
alustuksen ja tutkaamisen välissä.
Mitä voimme siis tehdä näillä osumilla ja
hutiosumilla? Voimme analysoida niitä!
Tämä aikatieto kertoo meille paljon
uhrin käyttäytymisestä ja ohjelmista.
Perustuen pelkästään osumiin ja huteihin
voimme— tai tutkijat pystyivät —vuotamaan
salausavaimistoja, arvaamaan nettisaitteja
tai muistin sisältöä. Näin siis SPECTRE:llä
ja MELTDOWN:lla. Katsotaanpa kuinka oike-
astaan saamme toteutettua hyökkäyksen
verkon yli! Toinen tärkeistä teknologioista
on DDIO. Mutta ensin haluan kertoa DMA:sta
koska se on kuin sen edeltäjä.
DMA on periaatteessa teknologia, joka
sallii PCIe-laitteen, kuten esimerkiksi
verkkokortin, vaikuttaa suoraan
keskusmuistiin ilman CPU:n keskeytystä.
Joten esimerkiksi, jos paketti on
vastaanotettu, PCIe-laite vain laittaa
sen keskusmuistiin ja sitten, kun
ohjelma tai sovellus haluaa käyttää dataa,
silloin se voi hakea sen keskusmuistista.
Nyt DDIO:n kanssa tämä käy hieman toisella
tavalla. DDIO:n avulla PCIe-laite voi
laittaa suoraan dataa viimeisen tasan
välimuistiin. Tämä on hienoa, sillä nyt
kun sovellus työskentelee datan kanssa,
sen ei tarvitse tehdä kallisarvoista hakua
keskusmuistista vaan se voi suoraan
työstää dataa — tai noutaa sen —
LLC:sta. DDIO tarkoittaa "Data Direct
I/O Technology" ja se on käytössä
kaikissa Intelin palvelintason prosesso-
rissa vuodesta 2012 lähtien. Se on päällä
oletuksena ja läpinäkyvä ajureille ja
käyttöjärjestelmille. Arvaan ettei monikaan
edes huomannut, että jokin muuttui kone-
pellin alla. Muutos oli kuitenkin hyvin
merkittävä. Miksi oikeastaan DDIO:ta
tarvitaan? Se on käytössä suorituskyvyn
takia. Tässä meillä on kiva Intelin
tutkimus, joka alimpana osoittaa
NIC:n eriävät ajat. Tässä meillä on ase-
telma, jossa on 2, 4, 6 ja 8 NIC:a
Ja meillä on läpimenoajat niille.
Kuten voitte nähdä tässä tumman sinisellä
että ilman DDIO:ta se pysäyttää
skaalautuvuuden 4 NIC:n jälkeen.
Vaaleansinisellä voimme nähdä että skaalau-
tuvuus jatkuu verkkokortteja lisättäessä.
Niinpä DDIO on rakennettu erityisesti
verkkosovellusten skaalautuvuudeksi. Toinen
teknologia, jota hyväksikäytämme on RDMA.
Se tarkoittaa "Remote Direct Memory Access"
ja se pohjimmiltaan purkaa
siirtokerroksen tehtävät piirilevylle.
Se on periaatteessa Kernelin ohitus. Eikä
siinä ole CPU käyttöä, jolloin ohjelmisto
voi käyttää etänä muistia ilman, että
kuluttaa CPU aikaa palvelimella.
Toin tähän lyhyen kuvauksen RDMA:sta
tarkasteltavaksi. Tässä vasemmalla meillä
on toiminnon aloittaja ja oikealla meillä
on kohdepalvelin. Muistialue
määräytyy palvelimen avauksessa ja tästä
eteen päin ohjelmistot voivat tehdä
tiedonsiirtoa ilman vaikutusta verkko-
ohjelmistopinoon. Eli nyt on tehty
TCP/IP pino kokonaisuudessaan. Yksipuoli-
sissa RDMA operaatioissa sallitaan myös
toiminnon aloittajan lukea ja kirjoittaa
mielivaltaisiin kohtiin määrätyssä tilassa
kohteessa. Lainaan nyt lausuntoa
eräältä markkinajohtajalta näistä korkean
suorituskyvyn käärmeistä: "Lisäksi,
välimuisti etä-CPU:ssa ei täyty
käytetyllä muistisisällöllä." No, tämä
ei pidä enää paikkaansa DDIO:n kohdalta ja
se on juuri se johon hyökkäsimme. Saatat
kysyä itseltäsi "missä RDMA:ta käytetään"?
Voin kertoa, että RDMA on yksi niistä
teknologioista joista et kuule
kovinkaan usein, mutta ovat oikeasti laa-
jassa käytössä datakeskusten backendissa
ja pilvi-infrastruktuurissa. Joten voit
saada omat RDMA infrastruktuuriksi
julkisesta pilvestä, kuten Azurelta,
Oraclelta, Huaweilta tai AliBabalta. Myös
muistiprotokollat kuten SMB ja NFS voivat
tukea RDMA:ta. Muita ohjelmistoja ovat
Suurtehotietokoneet, Big Data, kone-
oppiminen, datakeskukset, pilvi ja muut.
Mennäänpä tarkemmin tutkimuksen sisältöön
ja siihen, kuinka hyväksikäytimme näitä
kahta teknologiaa. Tiedämme nyt, että
meillä on verkolle avoin jaettu resurssi
DDIO:n ansiosta ja RDMA antaa meillä tar-
vittavat luku- ja kirjoitusoikeudet tehdäksemme
välimuistihyökkäyksen verkon yli. Mutta
ensin meidän täytyy selkeyttää pari asiaa.
Tietenkin teimme monia kokeita ja
testasimme laajasti DDIO porttia
ymmärtääksemme sen salat. Mutta tässä
toin mukanani kaksi isoa kysymystä,
joihin meidän on vastattava. Ensinnäkin
tietysti, voimmeko erottaa välimuistin
osumat ja hutiosumat verkon yli? Meillä
on edelleen verkkoviive ja pakettijonotus
ja niin edelleen. Olisiko todella mahdol-
lista saada ajoitus oikein? Se on kuitenkin
ehdoton vaatimus avatakseen sivukanavan.
Ja niinpä toinen kysymys on sitten:
Voimmeko oikeasti päästä käsiksi LLC:hen?
Tämä liittyy ennemminkin
hyökkäyspintaan kuin itse hyökkäykseen.
Niinpä ensimmäiseen kysymykseen voimme
vastata tällä yksinkertaisella kokeella:
Vasemmalla meillä on erittäin pieni koodin
palanen. Meillä on ajastettu RDMA luku
tiettyyn offsettiin. Sitten kirjoitamme
siihen offsettiin ja luemme sen uudelleen
samasta offsetista. Kuten näette, kun
teemme tämän vaikka 50 000 kertaa useisiin
eri offsetteihin, voimme selkeästi
erottaa kaksi eri jakaumaa.
Sininen vastaa dataa, joka oli
haettu muistista ja oranssi on
dataa, joka oli haettu LLC:sta
verkon yli. Voimme myös nähdä verkon
vaikutukset toimintaan.
Esimerkiksi, voimme nähdä pitkät hännät,
jotka liittyvät joihinkin paketteihin, jotka
hidastuivat verkossa tai olivat jonossa.
Sivuhuomautuksena kaikille sivukanava
asiantuntijoille: Tarvitsemme todella
kirjoitusoikeuden, koska DDIO luku ei
kohdenna mitään LLC:hen. Periaatteessa
tämä on perusta jonka avulla
suoritamme alustamisen ja tutkaamisen
verkon yli. Tarvitsemme kuitenkin vielä
todellisen kohteen profiilin rakenta-
miseksi. Katsotaanpa millainen
hyökkäyspinta meillä onkaan. Tämä tuokin
meidät kysymykseen: voimmeko päästä
täysin LLC:hen sisälle?
Epäonneksemme näin ei tapahdu.
DDIO:ssa kohdennukset on rajoitettu
kahteen kohtaan. Tässä esimerkissä 20:stä.
Joten noin 10%. Eikä se ole määritetty
kohta, jota CPU käyttää. Meillä olisi
pääsy vain 10 prosenttiin CPU:n toimin-
noista välimustin viimeisellä tasolla.
Tämäei toiminut kovin hyvinensimmäisenä
hyökkäyksenä. Mutta hyvä uutinen on, että
muut PCIe-laitteet—kuten vaikkapa toinen
verkkokortti—käyttävät samoja kahta
välimuistin kohtaa. Ja niinpä meillä
on 100% näkyvyys mitä muut PCIe-laitteet
tekevät välimuistissa. Katsotaanpa päästä-
päähän hyökkäystä! Kuten jo mainitsin
aiemmin, meillä on asiakkaan ja palvelimen
perusjärjestely. Ja meillä on kone,
jota me, hyökkääjänä, hallitsemme.
Niinpä asiakas vain lähettää tämän
paketin normaalisti ethernet NIC:nä ja
siellä on myös toinen NIC liitettynä
palvelimeen, mikä sallii hyökkääjän
suorittaa RDMA-operaatioita. Tiedämme myös
että kaikki paketit... tai kaikki näppäin-
painallukset, jotka käyttäjä tekee,
lähtevät yksittäisinä paketteina, jotka
aktivoituvat alimman tason välimuistissa
DDIO:n läpi. Mutta miten voimme nyt saada
näiden pakettien tuloajat? Koska
niistä me olemme kiinnostuneita! Nyt
meidän on katsottava tarkemmin miten
tämä verkkoliikenne pakettien saapuminen
oikein toimii. IP pinossa on rengaspuskuri,
joka periaatteessa suorittaa
asynkronisia operaatioita
laitteiston- eli NIC:N- ja CPU:n välissä.
Kun paketti saapuu, se sijoittaa paketin
rengaspuskurin ensimmäiseen paikkaan.
Oikealla näette näkymän hyökkääjän
näkökulmasta, joka voi vain seurata väli-
muistin toimintaa. Näemme, että muistirivi
ensimmäisessä paikassa syttyy. Näemme siis
toimintaa siinä. Voisi olla myös välimuistin
rivillä 2, tätä... emme tiedä mille riville
tämä oikeastaan ilmestyy. Mutta,
tärkeintä on: Mitä tapahtuu
toiselle paketille? Sillä toinen
paketti sytyttää myös yhden muistiriveistä,
mutta toisen tällä kertaa. Se on oikeastaan
seuraava rivi ensimmäiseen pakettiin ver-
rattuna. Jos teemme tämän kolmannelle
ja neljännelle paketille, huomamme, että
meillä on kaunis porraskuvio. Nyt voimme
nähdä ennustettavan kaavan, jota voimme
hyväksikäyttää saadaksemme tietoa pakettien
saapuessa. Ja tämä vain siksi, että
rengaspuskuri on varattu tavalla,
joka ei kiellä itseään, eikö? Se ei kiellä
kun toinen paketti saapuu. Se ei
kiellä ensimmäisen paketin välimuistin si-
sältöä. Tämä on huikeaa meille hyökkääjänä
koska nyt voimme muodostaa laadukkaan pro-
fiilin. Katsotaan elävän elämän esimerkki.
Tässä on välimuistin toiminta kun se vas-
taanottaa jatkuvia pingejä. Voitte nähdä
hienon porraskuvion ja näette myös, että
rengaspuskuri uudelleenkäyttää paikkoja
koska se on rengas. Nyt on
tärkeää tietää, että rengaspuskuri
ei pidä datasisältöä vaan ainoastaan
datakuvauksen. Ja se käytetään uudelleen
Epäonneksemme kun käyttäjä näppäilee
SSH:lla, kuvio ei ole yhtä kaunis kuin tämä.
Koska muutenhan tämä olisi
selvä peli ja voisimme edetä sillä.
Koska käyttäjä kirjoittaa, meillä on
enemmän viivettä pakettien välillä.
Yleisesti ottaen emme voi tietää milloin
käyttäjä näppäilee, joten täytyy profiloida
jatkuvasti saadaksemme ajoitukset kohdil-
leen. Joten, meidän rakennettava hieman
kehittyneempi järjestely. Se on periaat-
tessa kaksi-vaiheinen järjestely, joka
koostuu verkkotrackerista, joka vain
seuraa useita välimuistirivejä
jatkuvasti. Ja kun se huomaa
tietyn muistirivin tulevan
aktiiviseksi, se siirtää sen ikkunan
eteenpäin seuraavaan kohtaan, jossa
se arvaa aktivoinnin tapahtuvan. Tämä
onnistuu, koska meillä on etu nopeudessa.
Meidän on profiloitava paljon nopeammin
kuin SSH-istunnon verkkopaketit saapuvat.
Tässä vasemmalla voitte nähdä
kuvituksen siitä, mitä
verkkotrackeri tekee. Se vain profiloi
tätä ikkunaa, joka näkyy punaisella.
Jos katsotte tarkasti, voitte nähdä
kirkkaamman kohdan keskellä, joka
tarkoittaa saapuneitta verkkopaketteja.
Voitte myös nähdä, että siellä on paljon
kohinaa mukana ja siksi emme
voi suoraan saada pakettien
saapumisaikoja siitä. Siksi tarvitsemme
toisen vaiheen. Offline poimijan.
Offline poimija vastaa todennäköisimpien
tapahtumien laskennasta, joissa tekijänä
on käyttäjän SSH-paketti. Se käyttää
verkkotrackerin keräämää dataa ja
rengaspuskurin ennustettavuutta.
Sitten se esittää pakettien
saapumisien väliajat eri sanoille
kuten tässä oikealla. Hienoa. Nyt
olemme jälleen tilanteessa, jossa meillä
on pelkät saapumisajat muttei sanoja,
joita me tarvitsemme rikkoaksemme
SSH-istunnon luottamuksellisuuden.
Kuten totesin aiemmin, käyttäjillä tai
oikeastaan ihmisillä on omalaatuinen
kirjoitustapa. Ja sen avulla me onnis-
tuimme tilastollisessa hyökkäyksessä.
Lähemmin tarkasteltuna käytämme kone-
oppimista ja kartoitusta käyttäjien
kirjotustyylien ja oikeiden sanojen välillä.
Lopulta voimme todeta ne kaksi sanaa,
jotka kirjoitit SSH-istunnossasi. Käytimme
20:tä kohdehenkilöä, jotka kirjoittivat
vapaasti ja käsikirjoituksen mukaan ja
saimme 4574 uniikkia sanaa. Ja jokainen
niistä edusti pistettä moniulotteisessa
tilassa. Ja käytimme todella
yksinkertaista koneoppimistekniikkaa, kuten
"k-nearest neighbour" algoritmia, joka
luokittelee mittauksia Euklidisen tilan
kannalta muihin sanoihin.
Syy, miksi käytimme hyvin yksinkertaista
koneoppialgoritmia oli se,
että halusimme vain todistaa, että
signaalin, jota yritimme ottaa talteen
välimuistista olisi oikeasti kyllin vahva
hyökkäyksen toteuttamiseksi. Emme halunneet
yleisesti parantaa tällaista käyttäjien ja
kirjoittamiskäytöksen välistä kartoitusta.
Katsotaanpa miten tämä onnistui!
Eli aluksi, tässä vasemmalla
näette meidän käyttäneen luokittelua
puhtaalle näppäilydatalle. Tarkoittaa, että
käytimme vain kirjoituksen aikana lähetet-
tyä signaalia. Eli kun painalluksia tehtiin
paikallisella näppäimistöllä. Tämä antaa
täydellistä ja tarkkaa aikadataa. Voimme
nähdä, että tämä on aika vaikeaa
käyttää. Tarkkuudeksi saamme
karkeasti 35%. Mutta, jos katsomme kor-
keinta 10:tä prosenttia, joka tarkoittaa,
että hyökkääjä arvaa kymmenen sanaa ja
oikea sana kuuluu joukkoon, sitten sen
todetaan olevan tarkka. Ja kymmenellä
parhaalla arvauksella saamme tarkkuudeksi
58%. Tämä on vain puhdasta näppäily-
dataa. Sitten käytimme samaa dataa ja
samaa luokittelua verkon yli tulevaan
signaaliin. Tämä ei tietenkään ole yhtä
tarkkaa, koska siinä on kohinaa ja voimme
lisätä tai kadottaa näppäinpainalluksia.
Tarkkuus on karkeasti 11% vähemmän ja
parhaan 10:n tarkkuus karkeasti 60%.
Kun käytimme yksinkertaista koneoppimista,
useita koehenkilöitä ja suhteellisen
laajaa sanakirjastoa, uskomme pystyvämme
todistamaan, että signaali on kyllin vahva
toteuttaaksemme hyökkäyksen. Tietenkin
haluamme nähdä tämän nyt toiminnassa,
eikö? Koska olen hieman hermostunut täällä
lavalla, en näytä livedemoa koska se
vaatisi, että kirjoittaisin itse ja se
varmaankin sekoittaisi minua ja
tietenkin koneoppimismallia.
Siksipä toin mukanani videon.
Tässä oikealla näette uhrin.
Se aloittaa kohta
SSH-istunnon. Ja vasemmalla puolella
näette hyökkääjän.
Alalaidassa näätte verkkotrakkerin ja
ylälaidassa näätte poimijan,
sekä toivottavasti ennustetut sanat. Nyt
uhri aloittaa SSH-istunnon
palvelimeen nimeltä "father". Ja hyök-
kääjä, joka käyttää konetta "son"
aloittaa hyökkäyksen. Näitte, että profi-
loimme rengaspuskurin kohdan ja nyt
uhri alkaa kirjoittaa. Ja koska tällä jär-
jestelyllä kestää hieman käsitellä sanat
ja tehdä oikea ennustus, näette kohta,
että pikkuhiljaa sanat alkavat
muodostumaan oikeaan -toivottavasti
oikeaan- järjestykseen. Kuten näette, voimme
arvata oikeat sanat verkon yli vain
lähettämällä verkkopaketteja
samaan palvelimeen. Ja näin saamme
tärkeän informaation kun sen
SSH- paketit saapuvat.
(aplodeja)
Nyt varmaan kysyt itseltäsi: Miten tältä
hyökkäykseltä suojaudutaan? Noh,
onneksi tämä koskee vain palvelintason
prosessoreja, eli ei asiakkaita tai muita.
Mutta meidän mielestämme oikea suo-
jautuminen tällä hetkellä on DDIO:n poistaminen
tai ettei käytä RDMA:ta. Molemmat vaikuttavat
suorituskykyyn paljonkin. DDIO:n kohdalla
puhutaan karkeasti 10-18% vähemmän suori-
tuskykyä riippuen tietenkin ohjelmistosta.
Ja, jos päätät olla käyttämättä RDMA:ta,
joudut varmaankin uudelleenkirjoittamaan
koko ohjelmasi. Intel kertoi asian hieman
toisin tiedoksiannon julkaisussaan.
Lukekaapa itse! "Epäluotettavan verkon"
määritelmä voi varmaankin
olla hieman kyseenalainen. No joo.
Sillä mennään. Olen todella ylpeä,
että meidät hyväksyttiin Security and
Privacy 2020:een. Myös Intel tunnusti
löydöksemme, julkistustilaisuus oli
syyskuussa, ja saimme myös rahapalkinnon.
(yksittäinen huuto katsomossa)
(naurua)
Oheislaitteiden lisääntynyt suorituskyky on
pakottanut Intelin asettamaan LLC:n
nopeisiin I/O polkuihin prosessoreissa.
Ja näin on paljastunut yhä enemmän
mikroarkkitehtuurikomponentteja, joiden
tunnistamme vaikuttavan suoraan turvalli-
suuteen. Tutkimuksemme on ensimmäinen
DDIO sivukanavahaavoittuvuus, mutta uskom-
me raapaisseemme tässä vain pintaa.
Muistakaa, että niihin liittyy monia PCIe-
laitteita! Joten siellä voi olla
muistilaitteita - voitaisiin profiloida
välimuistin toimintaa muistilaitteissa!
On olemassa jopa GPUDirect, joka
antaa pääsyn GPU:n välimuistiin.
Mutta se onkin jo toinen tarina. Eli näin.
Luulen, että aiheessa on paljon löydettävää
eli pysykää kuulolla! Totean enää
vain, että iso kiitos kaikille
ja tietenkin kaikille vapaaehtoisille
täällä konferenssissa. Kiitos!
(aplodeja)
Juontaja: Kiitos, Michael! Meillä on aikaa
kysymyksille. Eli voitte muodostaa jonoa
mikrofoneille. Ja näenkin jonkun
mikrofonilla seitsemän!
Kysymys: Kiitos esityksestä! Minulla
on kysymys - kun työskentelen
verkon yli SSH:ta käyttämällä, en
kovinkaan usein käytä noin helppoja sanoja,
mutta yleensä se on jotain omituisempaa,
kuten valuuttamerkkejä, viivoja ja jotain.
Oletteko tutkineet myös sitä?
Michael: No, veikkaan ... Tarkoitan
tietenkin mitä olisimme halunneet näyttää,
oli se, että miten vuodetaan salasanoja,
eikö? Jos kirjottaisit vaikka "sudo".
Salasanojen kohdalla kyseessä
on omanlaisensa dynamiikka. Painat
näppäintä... kirjoitat salasanan eri tavoin
kuin normaalisti avainsanoja. Ja sitten se
muuttuu vaikeammaksi, kun halutaan
tutkia laajemmin kuinka käyttäjät kirjoit-
tavat salasanoja, täytyy joko kysyä
heidän oikeita salasanoja -joka ei ole
kovin eettistä- tai opettaa heille erilaisia
salasanoja. Ja sekin on vaikeaa, koska
he voivat omaksua erilaisen tyylin
kuinka kirjoittavat salasanoja ennemmin
kuin ne olisivat oikeita salasanoja.
Ja tietenkin sama olisi kyseessä yleisesti
komentojen kohdalla, eikä meillä ollut
käytössä sanavarastoa totuttaaksemme
sellaista hyökkäystä.
Juontaja: Kiitos! Mikrofoni yksi!
K: Terve. Kiitos esityksestä! Haluaisin
kysyä: Alkuperäinen SSH-aikoja käsittelevä
tutkimus on vuodelta 2001?
Michael: Kyllä, totta. Todellakin!
K: Onko sinulla käsitystä miksi ei ole
kiertotapaa SSH-asiakkaan puolella
lisäämällä "pehmustetta" tai satunnaista
viivettä tai jotain vastaavaa? Tiedätkö
miksi tällaista ei ole toteutettu?
Onko se jonkin teknisen rajoitteen takia
vai mikä on kyseessä?
Michael: Pelkäsimme, että 2001 ja tämän
päivän välissä tapahtui jotain lisäyksiä
jonkun viiveen tai jonkun muun suhteen.
En ole varma, onko kyse vain
vaihtokaupasta SSH-istunnon inter-
aktiivisuudessa vai onko jotain
todellista syytä tälle. Mutta tiedän,
että on usein kovin vaikeaa
lisätä keinotekoisia paketteja väliin.
Koska, jos ei ole satunnaista
ollenkaan, ei voitaisi edes suodattaa
lisättyjä paketteja, jotka lisättiin
SSH:n toimesta. Mitään muita syytä en
tiedä, miksi he eivät sopeutuneet,
tai miksi he eivät tutkineet tätä.
Juontaja: Kiitos! Mikrofoni neljä.
K: Kuinka paljon nojaatte kirjoittajien
taitoihin? Mielestäni käyttäjän, kenen
on etsittävä näppäimiä näppäimistöstä tai
jonkun, joka tulee häirityksi kirjoittaessaan,
ei ole mitään oikeaa kirjoitusmallia.
Michael: Me oikeastaan luotamme täysin
siihen, että mallin on oltava pelkistettävä.
Kuten sanoin: Käytimme vain hyvin yksin-
kertaista koneoppimisalgoritmia joka vain
katselee edellisen sanan Euklidista
etäisyyttä verrattuna uuteen sanaan
tai uuteen saapumisaikaan, joka
huomattiin. Jos se on täysin
eriävä, tarkkuus laskee.
Juontaja: Kiitos! Mikrofoni kahdeksan!
K: Jatkokysymyksenä edelliseen. Eikö
tämä tee siitä kohdistetun hyökkäyksen,
koska täytyy opettaa koneoppimis-
algoritmi tarkasti sille henkilölle,
jolta data halutaan vuotaa?
Michael: Kyllä. Tavoitteemme
tutkimukselle ei ollut muodostaa
seuraavan luokan koneoppimistunnistusta
eri kirjoitustavoille. Me käytimme
tosiasiallisesti informaatiota, jota
käyttäjä kirjoitti, jotta profilointi
muodostuisi oikein. Uskon silti, että
voidaan ehkä yleistää. Toinen tutkimus
osoittaa, että voidaan luokitella
käyttäjät eri tyylisiin kirjoittajiin ja
jos muistan oikein, he keksivät, että
voidaan jokainen henkilö voidaan
luokitella 7:ään eri luokkaan.
Tiedän myös, että on olemassa verkko-
trakkereita, jotka seuraavat kirjoitustyyliäsi
uudelleen identifioidakseen sinut. Tavoitteena
vain tarjota sinulle kohdistettuja mainoksia.
Mutta silti, tarkoitan, että emme halunneet
mennä niin syvälle kehittääksemme
tätä koko juttua.
Juontaja: Kiitos! Ja otamme
seuraavan kysymyksen Internetin puolelta.
Signal angel: Kokeilitteko tätä koskaan
korkean viiveen verkossa kuten internetissä?
Michael: Tietenkin tukeudumme - sanotaan
vaikka- jatkuvaan viiveeseen. Koska muuten
se periaatteessa pilaisi aikautetun
hyökkäyksemme. Kuten puhuimme RDMA:sta,
sitä käytetään datakeskuksissa. Testasimme
myös datakeskusmaisia topologioita.
Se tekisi tästä luultavasti
kovinkin haasteellista, joka tarkoittaa
että pitäisi tehdä paljon toistoja, joka
on oikeastaan huono asia, koska emme voi
sanoa käyttäjille: "voisitteko kirjoittaa sen
uudelleen koska se on profiloitava uudelleen",
eikö? Joten vastaus on: Ei.
Juontaja: Kiitos! Mikki yksi, kiitos.
K: Jos uhri liittää jotain
SSH-istuntoon. Voitaisiinko hyökkäys
toteuttaa silloin onnistuneesti?
Michael: Ei. Jos liität jonkin jutun,
se lähetetään tunnuksena
kun painetaan enter.
K: Okei, kiitos!
Juontaja: Kiitos! Enkelit kertovat, että
mikrofonin kuusi takana on henkilö, jota
en ollenkaan voi nähdä
valaistuksen takia.
K: Jos ymmärsin oikein, hyökkääjä
voi nähdä, että jokin paketti saapui
heidän NIC:iin. Jos menossa on toinenkin
SSH-istunto samaan aikaan kohteena
olevassa koneessa, häiritseekö
se hyökkäystä?
Michael: Kyllä, täysin! Edes SSH-pakettien
erottaminen normaalista
verkkopaketeista on haastavaa. Joten
käytämme tässä heuristiikkaa, koska
SSH-paketteja lähtee aina kaksi
peräkkäin. Eli ei vain yksi,
vaan kaksi. Jätin tämän kohdan pois yksin-
kertaistaakseni esitystä. Tukeudumme myös
tällaiseen heuristiikkaan suodattaaksemme
SSH-paketteja. Ja jos olisi toinenkin
SSH-istunto, voisin kuvitella, että se
onnistuisi ollenkaan... eli emme voi
erottaa kumman SSH-istunto oli kyseessä.
Juontaja: Kiitos. Mikki seitsemän taas!
K: Mainitsit, että käytitte aina kahta
yhdistäjää, kuten- mitä ne olivatkaan? NIC?
Michael: Kyllä, juuri niin.
K: Täytyykö niiden olla kaksi eri osaa?
Voisivatko ne olla sama? Vai miten se toimii?
Michael: Järjestelyssämme käytimme yhtä
NIC:iä, joka kykeni tekemään RDMA:ta.
Meidän tapauksessa, se oli Fabric eli
IinfiniBand. Ja toinen niistä oli tavallinen
ethernet-yhteys.
K: Mutta voisivatko ne olla samassa tai
voisiko molemmat olla InfiniBand esimerkiksi?
Michael: Kyllä. Tarkoitan, että
InfiniBand ei käytä rengaspuskuria
joten meidän tulisi keksiä jokin toinen
seuraamistapa jotta saisimme sen.
Siitä voisi muodostua vieläkin
monimutkaisempaa, koska se ohittaa
Kernelin. Mutta, jos olisi olemassa
ennustettava kaava, voisimme ehkä tehdä sen.
Juontaja: Kiitos. Mikki yksi?
K: Terve taas! Haluaisin kysyä, tiedän
ettei pääkohteenne ollut
tutkimuksesi, mutta onko sinulla arviota,
siitä kuinka käytännöllinen tämä hyökkäys on?
Kuten, jos teette tosi elämän simulaation
ettekä valmisteltua?
Kuinka iso ongelma se voisi olla?
Mitä uskoisit, mikä on
tämän alan huippu? Miltä tällainen
riski tuntuu?
Michael: Viittaa ilmeisesti vain
näppäinhyökkäykseen, eikö?
K: Aikautushyökkäykseen. SSH aikoihin. Ei
välttämättä välimuistiin liittyvään.
Michael: Alkuperäinen tutkimus on
ollut esillä vuodesta 2001.
Ja sen jälkeen moni tutkija on osoittanut,
näppäinhyökkäyksen mahdolliseksi
erilaisissa skenaarioissa, esimerkiksi
JavaScripti on yksi. Se on
aina hieman haastavaa arvioida, koska
eri tutkijat käyttävät erilaisia
datasettejä, joten niitä ei voida vertailla.
Yleisesti ottaen, olemme käyttäneet
Melko suurta sanavarastoa ja se toimi
silti. Ei kovin tarkasti, mutta se
toimi silti. Joten, kyllä. Luulen, että
se on mahdollista. Mutta ollakseen oikea
hyökkäys, jossa hyökkääjä tavoittelee
korkeaa tarkkuutta, tarvittaisiin varmaankin
paljon dataa ja siltikin kehittyneempiä
tekniikoita. Joita on kuitenkin olemassa.
On olemassa pari erilaista koneoppimis-
tekniikkaa, joita voitaisiin käyttää,
joilla on eri hyödyt ja haitat.
K: Kiitos.
Juontaja: Kiitos! Naiset ja herrat!
Mies, joka nimesi hyökkäyksen
"netCAT": Michael Kurth! Annetaan hänelle
isot aplodit, olkaa hyvä!
(aplodeja)
Michael: Kiitos paljon!
♪ (36C3 outromusiikki) ♪
Translated by Lauri Lyytinen
(ITKST56 course assignment at JYU.FI)
Subtitles created by c3subtitles.de
in the year 2021. Join, and help us!