-
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äsytapa 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 itsetä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 tunnettin 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 pavelimen
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 moittettomasti — 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
-
kirjoittamssa yksityisessä SSH-istunnossa.
Kuuolstaa 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
-
tutkimuskelle annetaan nimi. Ja jos olette
seuranneet InfoSecin twitteriä tarkasti,
-
tunnistatte varmaan mistä olen puhumassa.
Koska miedä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 himean 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 tukimuk-
semme varsinaisesti kiinnostavimpiin
-
asioihin! Nopea hamottelu:
Aion ensin kertoa taustoista eli
-
välimuistihyökkäykset yleisesti. Sitten
DDIO ja RDMA, tärketä 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 pakottamlla jaetut resurssit
-
vuotamaan tietoa. Analogiana voidaan pitää
kassakaapin murtamista stetoskoopilla,
-
jossa jeattuna 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 keskusmistista ladattaessa,
eikö? Nämä tekevät karkeasti neljänneksen
-
kaikista komennoista. Ja välimuistin avulla
voimme käyttää uudelleen datan ja käyttää
-
paikaktietoa ohjelmissa. Moderneissa CPU:issa
on yleensä 3-kerroksinen välimusitihierarkia:
-
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
-
aiheittaa 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 teknikka, jota
-
käytimme verkkoympäsristössä.
Haluan paikaisesti 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
-
keksusmuistista 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 tutki-
mus, joka alimpana osoittaa
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-