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 suurenmoinen! 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 group 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!