-
[Translated by Kari Kananoja (ITKST56 course assignment at JYU.FI)] Alkumusiikkia
-
Seuraavassa keskustelussamme on mukana Jo Van Bulk ja Fritz Adler
belgialaisesta Leuvenin
-
yliopistosta ja David Oswald, kyberturvallisuuden
professori Birminghamista.
-
He ovat täällä keskustelemassa luotetusta toiminto/ajoympäristöstä (TEE)
(laitteen eristetty prosessorin osa, johon esim. laitteen käyttöjärjestelmällä ei ole pääsyä).
-
Tiedättekin varmasti Intelin ja vastaavien perusteella, että siihen eli luultavasti pitäisi luottaa lainkaan,
-
koska se on ohjelmoitua ja siinä on virheensä. Niinpä he puhuvatkin nyt
-
prosessorin enklaaviportteihin iskemisestä,
mikä on aina hyvä, järjestelmällisen haavoittuvuuden
-
arviointikohde TEEn suojauksessa. Olkaa hyvät ja jatkakaa.
-
Hei kaikille. Tervetuloa mukaan keskusteluun. Olen Jo, imec-DistriNet
-
tutkimusryhmän perustaja Leuvenin yliopistolla.
Ja tänään mukana on myös Fritz, myös Leuvenista
-
ja David Birminghamin yliopistosta. Meillä on tämä hyvin kiinnostava
-
aihe keskusteltavana, enklaaviportteihin iskeminen. Mutta ennen kuin syvennymme siihen,
-
uskon että suurin osa teistä
ei tiedä mitä ovat enklaavit, tai yleensä TEEt
-
Joten aloitankin tässä analogialla. Enklaavit ovat eräänlaisia
-
turvallisuuslinnakkeita prosessoreissa, CPUissa.
Se on siis kryptattu muistialue,
-
johon on pääsy vain TEEn sisäpuolelta. Mitä tiedämme
-
linnoitusten puolustautumisen ja niihin hyökkäysten historiasta, kun et
-
pääse linnoitukseen koska seinät ovat korkeita ja paksuja. parasta onkin suunnata porteille.
-
Se on linnoituksen heikoin kohta. Ja se on
-
tämän aiheemme idea. Se siis pätee myös enklaaveihin. Me olemme
-
iskeneet enklaavien portteihin, olemme hyökänneet syöte- ja tulosterajapintoihin.
-
Siis hyvin yksinkertainen idea, mutta dramaattiset vaikutukset, sanoisin.
-
Tämä on siis jonkinlainen päätelmä tutkimuksistamme. 40 rajapinnan
-
huoltoon liittyvää
haavoittuvuutta jotka löysimme kahdeksassa paljon käytetyssä openvapaan lähdekoodin
-
projektissa. Menemme tähän hiukan syvemmälle lopuissa dioissa.
-
On mukavaa sanoa, että
se on johtanut kahteen akateemiseen julkaisuun,
-
enemmän kuin 7 CVE-tietoon ja
kokonaisuudessaan melko hallittuun loppuun käsittelyyn ja
-
pitkiin käytön rajoituksiin.
OK, Meidän täytynee
-
keskustella miksi me yleensä tarvitsemme moisia enklaavi linnoituksia.
Jos mietitään
-
Jos mietitään perinteistä käyttöjärjestelmä-tai tietokonearkkitehtuuria, siinä on
-
käytössä
hyvin laaja luotettu toimintoperusta. Esimerkiksi, jos katselet tätä keskustelua esim. kannettavalta
-
luotat kerneliin,
luotat ehkä
-
virtuaalikoneeseen jos sinulla on koko ympäristö toteutettuna: CPU,
-
muisti, ehkä kovalevy
ja niin edelleen. Toisin sanoen
-
ongelma on tällaisen laajan luotetun ympäristön kanssa se, että myös
-
haavoittuvuuksia voi olla
kaikkialla. Ja myös haittaohjelmia piiloutuneena missä tahansa osassa.
-
Enklaavissa ajamisen ideana on siis, esimerkiksi Intel SQX:ssä,
-
yhdessä viimeisimmistä Intelin prosessoreista,
että voit ottaa
-
varsinaisen sovelluksen ohjelmistopinon osan suoritettavaksi enklaavin
-
ulos koko koneen
luotetusta ympäristöstä. Nyt sinun tarvitsee luottaa ainoastaan CPU:hun ja tietenkin
-
omaan koodiisi, mutta itse
käyttöjärjestelmään ei enää tarvitse luottaa. SGX
-
esimerkiksi lupaa suojella toimintoa hyökkääjältä, joka on saanut
haltuunsa pääkäyttäjän tiedot.
-
Ja riippuen myös siitä, ketä vastaan olet puolustautumassa, esimerkiksi,
-
haitallisten pilvipalveluiden toimittajilta. Joten ajattelepa, että voit ajaa applikaatiota pilvessä
-
ja voit silti ajaa koodiasi luotettavasti laitteistotason
eristyksellä.
-
Ja sinulla on myös todisteet siitä. Eikä enää tarvitse luottaa edes
-
pääkäyttäjään. Näin ollen ongelma on tietenkin, että hyökkäyspinta
-
säilyy. Niinpä ainakin osa aiemmista hyökkäyksistä, joita
esitellään tässäkin
-
etäkongressissa tänä vuonna, on suuntautunut CPU:n
-
mikroarkkitehtuuria kohtaan.Eli hyökätään
periaatteessa laitetasolle. Teillä oli
-
oli siis ennakointia, mikroarkkitehturaalista tiedon keruuta, haamuja, ladatun
arvon injektointia jne.
-
Mutta mihin on vähemmän kiinnitetty huomiota ja mihin kiinnitämme enemmän huomiota tässä
-
huomiota tässä esittelyssä, on ohjelmistotaso
enklaavin sisällä. Siellä on viitattu olevan
-
luotettua koodia. Mutta nyt voidaankin katsoa tarkemmin,
-
mitä enklaavin
sisällä on. Nyt ohjelmistonäkökulmasta. Siis voiko
-
hyökkääjä hyväksikäyttää mitään perinteistä
ohjelmistohaavoittuvuutta enklaavissa?
-
Kyllä, David. Tämä on mielenkiintoinen näkökulma, eikö totta? Puhutaanpa siis
-
ohjelmistoista. Meidän täytyy ymmärtää mikä on ohjelmistoympäristö näille
-
SGX enklaaveille ja
luotetuille ajoympäristöille yleisesti. Ja tätä me selvitimme. Aloitimme
-
analysoinnilla ja tässä muutamia
kuvakaappauksia. Tämä on itse asiassa kasvava
-
vapaan lähdekoodin ekosysteemi, monia ajo-ohjelmistoja,
kirjastokäyttöjärjestelmiä ja ohjelmistokehitysympäristöjä.
-
Ja ennen kuin menemme syvemmälle, haluan painottaa, että mikä on yhteinen tekijä
-
joka kaikkia näitä yhdistää?
Mikä on näiden ympäristöjen alkuperäinen ajatus ja idea?
-
Mikä tahansa TEE, luotettu ajoympäristö,
-
antaa käsityksen
siitä, mikä on turvallinen suojapaikka vihamielisessä
-
ympäristössä. Ja voit suorittaa toimintoja suojatussa osiossa
kun
-
ympäröivä maailma palaa. Minkä tahansa suojausmekanismin kohdalla, kuten jo aiemmin mainitsin,
-
paholainen piilee
yksityiskohdissa ja tyypillisesti portilla, eikö totta? Miten siis välität tietoa
-
tämän epäluotettavan maailman joka palaa, ja enklaavissa olevan turvapaikan välillä?
-
Ja
intuitio kertoo, että että tarvitset jonkinlaisen välillä olevan ohjelmistokerroksen,
-
jota kutsumme suojaustasoksi.
Se tekee tavallaan turvallisen
-
sillan liikkua ympäristöstä toiseen. Ja siitä
-
olemme kiinnostuneita. Nähdäksemme, millaisia tarkistuksia siellä tarvitaan.
-
Sinulla on melko kaunis kuva asiasta, toisaalla hedelmällinen enklaavi ja
-
toisaalla vihamielinen aavikko. Ja tähän
tehdään turvallinen silta väliin. Ja mistä
-
olemme kiinnostuneita, kun jokin menee vikaan? Mitä jos sinun siltasi onkin viallinen?
-
Vastataksemme kysymykseen, katsotaan sitä välissä olevaa laatikkoa ja kysytään,
-
millaista ylläpitoa ja millaisia tarkistuksia täytyy olla jotta edestakainen
-
liikenne on mahdollista?
Ja yksi
-
pääasiallisista tuloksistamme, joita olemme saavuttaneet tämän tutkimuksen kahtena viimeisenä vuotena, on mielestäni
-
että tuo välilaatikko voidaan jakaa kahteen alemman tason kerrokseen.
-
Näistä ensimmäinen on ABI, sovelluksen binäärirajapinta, hyvin alhainen CPUn tila. Ja
-
toinen on mitä kutsumme APIksi,
sovelluksen ohjelmointirajapinta.
-
Tuo tila tai vaiheet on jo nähtävissä ohjelmointikielissä. Kuten
-
esittelyssä mainittiin, me tavallaan ohjaamme teidät
läpi molempiin tasoihin asiaankuuluvien
-
haavoittuvuuksien avulla, jotta ymmärrettäisiin mitä tämä tarkoittaa.
-
Ensiksi Fritz ohjaa teidät mielenkiintoiseen ABI-tason alempaan toimintakenttään.
-
Kyllä vaan. Ja kuten Jo jo mainitsitkin,
-
se on CPUn tila ja sovelluksen binäärirajapinta. Mutta katsotaanpa
-
hiukan mistä puhutaan. Periaatteessa se tarkoittaa sitä, että hyökkääjä
-
hallitsee CPUn rekistereiden sisältöä....Jokaisella enklaavin sisään- ja ulostulolla
-
täytyy suorittaa tehtäviä. Eli enklaavilla ja
-
luotetulla ajoympäristöllä
on tietty CPU vaihe ja kääntäjä voi
-
työskennellä niiden kutsujen kanssa, joita se odottaa. Nämä ovat siis avainosia.
-
Meidän täytyy alustaa CPU rekisterit enklaaviin saapuessamme ja
-
siivota ne poistuessamme. emme voi siis olettaa mitään
-
hyökkääjän meille antamaa annetuksi. Meidän täytyy alustaa se joksikin kunnolliseksi ja käytettäväksi.
-
Tutkimme useita TEE ajoympäristöjä ja löysimme paljon
-
haavoittuvuuksia tältä ABI kerrokselta. Ja yksi tämän tutkimuksen
pääoivalluksista onkin se
-
että monet näistä haavoittuvuuksista sijoittuu monimutkaisien ohjesarjojen prosessoreihin,
-
siis CISC ja SGT TEE:issä. Tutkimme myös joitain
-
RISC prosessoreita, ja vaikka ei pidä yleistää, niin on heti huomattavissa,
-
että monimutkaisella x86 ABIlla on huomattavasti suurempi
-
hyökkäyspinta-ala kuin yksinkertaisemmissa
RISC arkkitehtuureissa. Katsotaanpa yhtä esimerkkiä tästä
-
monimutkaisesta arkkitehtuurista.
Esimerkiksi x86:ssa merkkijono ohjeistus,
-
jota säätelevät suuntaliput. X86:ssa on erityinen ohjeistus, joka
-
periaatteessa mahdollistaa striimatut muistitoiminnot. Jos bufferiin
-
tehdään muistin käsittelyyn toimintosarja, se käännetään merkkijonon toiminto-ohjeeksi.
-
Merkkijono siis luetaan vasemmalta oikealle ja ylikirjoitetaan
-
muistin käsittelysarjan toiminnolla. Mutta tuo lippu mahdollistaa myös käsittelyn päinvastoin,
-
takaperin. Ei ajatella sitä miksi tämä oli hyvä ajatus tai mihin sitä
-
tarvitaan. Mutta varmasti on siis mahdollisuus kääntää lippu toiseen asentoon ja lukea
-
bufferin sisältö takaperin. Ja mitä me
huomasimme: System-V ABIn mukaan
-
tämä lippu täytyy olla asettamatta tai olla asetettu eteenpäin(vasemmalta oikealle).
-
Ja kääntäjä olettaa tämän olevan näin. Katsotaanpa kuinka tämä tapahtuu
-
enklaavissa. Jos ajamme tämän enklaavin sisällä, luotetussa ympäristössä
-
normaalilla syötteellä normaalilla
-
normaalilla lipulla, voimme nähdä, että ajo
-
tapahtuu aivan oletetusti oikein päin. Jos hyökkääjä kuitenkin pääsee
-
ja muuttaa lippuasetuksen toiseksi,
-
ja pointerin kohdasta riippuen näemme ajon nyt menevän takaisinpäin luennassa.
-
Siinä on ongelma. ja sitä emme selvästikään
-
halua tapahtuvan luotetussa sovelluksessamme, koska
-
koska kuten voitte kuvitella,
se mahdollistaa niiden avainten ylikirjoittamisen,
-
jotka ovat muistipaikassa, jossa voit lukea takaperin.
-
Se mahdollistaa tiedon ulosluvun eikä se ole hyödyllistä. Kun saimme tämän raportoitua, se
-
johti CVE:n syntymiseen korkealla score-arvolla, kuten näette seuraavalla dialla.
-
Ja se on vain yksi instanssi. Täytyyhän tässä ajatella nyt
-
kaikkia lippuasetuksia joita täytyy ylläpitää ja tarkistaa. Mutta, tietenkin
-
on aina vielä jotain muutakin, eikö totta?
Huomasimme myös,
-
että FPU:ssa (matemaattisten toimintojen osaprosessointi) on paljon muita rekistereitä ja paljon
muita
-
haavoittuvuuksia hyväksikäytettävänä. Enkä mene nyt yksityiskohtiin. Mutta tähän nyt
-
vielä lisäksi, on olemassa
vanhempi x86 ja ja uudempi SSE
-
jotka suorittavat liukulukulaskentaa.
Eli on olemassa FPU ohjaussana ja MXCSR
-
rekisteri näitä uudempia ohjeita varten. Ja tämä x86 on vanhempi, mutta sitä yhä käytetään
-
esim. pitkien double muuttujien laskennassa. Eli ikä ei
-
tässä kohtaa ole määrittelevää, koska niin vanha kuin uusikin on tässä tapauksessa yhä ajankohtaisia.
-
X86 ja x87 ovat yhä olemassa ja se että voitaisiin sanoa että vanhat muinaiset jotka ovat
-
vanhentuneita, ovatkin yhä
käytössä ja siten huomioitava. Jos katsotaan
-
System-V ABIa, huomasimme että nämä ohjausbitit ovat kutsujatallenteisia.
Niitä siis
-
säilytetään läpi funktiokutsujen.
Ja ideanahan on, mitä pidetään jossain määrin saavutuksena,
-
että nämä ovat globaaleja tiloja, niitä välitetään
-
koko sovellukselle. Yksi sovellus voi siis asettaa arvon
-
ja se pysyy läpi niiden käyttöajan.
Mutta ongelma on, kuten näette
-
on että sovelluksemme tai enklaavimme on periaatteessa yksi sovelluskokonaisuus, emmekä todellakaan halua
-
hyökkääjän ottavan haltuunsa luotettua sovellustamme, eikö totta?
-
Mitä siis tapahtuu jos FPU asetukset säilytetään eri kutsujen ajan?
-
Sanotaanko että normaalikäyttäjälle, teemme laskentaa enklaavissa. Kuten
-
2.1 kertaa 3.4 on 7.14, mikä on tyyppinä pitkä double.
-
Tämä on OK? Mutta mitä tapahtuu jos hyökkääjä saapuu enklaaviin
-
mukanaan saastutettuja määritelmiä FPU:lle? Saamme vääristyneitä
-
tuloksia ja huonommalla tarkkuudella.
-
Itse asiassa tässä se pyöristää alaspäin, aina kun
-
tulos ylittää tarkkuuden. Ja sitähän emme halua? Tämä on jotain,
-
missä kehittäjä odottaa tiettyä tarkkuutta tai pitkän doublen tarkkuutta,
-
mutta hyökkääjä itse asiassa
supistaa tulosta ja sen tarkkuutta.
-
Raportoimme tästä ja itse asiassa löysimme tämän aiheen myös Microsoft OpenEnclavesta. Siksi
-
tätä ei ole merkitty hyväksikäytön mahdollisuudeksi. Mutta mitä huomioimme mielenkiintoisena kohtana on, että Intel
-
SGX SDK, joka oli haavoittuvainen, korjasi tämän xrstore
ohjeella.
-
Tämä säilyttää täysin tilan tiettynä arvona, kun taas OpenEnclave
-
säilytti vain tietyn rekisteriarvon, joka oli kohteena, ldmxcst ohjeessa.
-
Ohitetaanpa muutama dia tässä vaiheessa, koska haluan
-
painottaa, että tämä ei ollut tarpeeksi.
Huomiomme mukaan, vaikka tämä tietty rekisteri säilytettiin,
-
on muita rekistereitä,
-
joita voi merkitä käytössä oleviksi
ennen enklaaviin saapumista, ja johon hyökkääjä voi
-
muuttaa laskentatuloksen ei-numeraaliseksi. Tämä on hiljaista,
-
eikä siis ohjelmointikieliriippuvaista, eikä kehittäjäriippuvaista. Tämä on
-
hiljainen ABI asia, että laskenta ei ole ainoastaan numeroita.
-
Raportoimme myös tämän. Ja nyt, onneksi, kaikki enklaaviympäristöt käyttävät tätä täyttä xrstor ohjetta.
-
säilyttääkseen tämän laajennetun tilan. Siihen vaadittiin kaksi CVE:tä, mutta nyt
-
ne suorittavat täyden hallinnan. En halua mennä nyt tutkimustemme ytimeen, vaan
-
haluan nyt osoittaa näiden tutkimuksiemme tarkoituksen.
-
Tutkimme näitä tapahtumia ja halusimme selvittää,
-
ovatko ne vain vaikeita vaiko huonoja toteutuksia. Huomasimmekin,
että
-
ylivuotoja voidaan käyttää sivukanavana salaisuuksien päättelemiseen. Esimerkiksi,
-
hyökkääjä voisi käyttää
rekisteriä poikkeusten paljastamiseen jotta
-
sitten enklaavin sisällä voitaisiin laukaista syöteriippuvaisesti kerrontaa.
-
Lisäksi havaitsimme, että näiden sivukanavien kautta voidaan
-
käyttää syötetilan binäärietsintään.
-
Ja me voimme
palauttaa tämän moninkertaistamisen määriteltyihin
-
määrään vaiheita. Jos meillä on vain yksi maski, jonka käännämme voimme
-
itse asiassa palauttaa toiminnon määriteltyihin vaiheisiin.
-
Ja jotta tietäisimme, voimme tehdä myös enemmän. Voimme suorittaa myös koneoppimista
-
enklaavissa.
Jo mainitsikin, että sitä voidaan tehdä TEEn sisällä, pilvessä. Ja
-
se on koneoppimisessa mukavaa, eikö totta? Tehdäänpä hiukan käsinkirjoitetun luvun
-
tunnistamista. Jos ajattelemme mallia, jossa toinen
-
käyttäjä käyttää
koneoppimismallia
-
ja toinen käyttää enklaavia.
-
Kaikki on turvallista, mutta huomasimme, että voimme saastuttaa näitä FPU
-
rekistereitä ja näin alentaa
koneoppimisen suorituskykyöä
-
siten, että vain 8 prosenttia merkeistä tulkitaan oikein. Ja
-
kaikki luvut olivat itse asiassa tuloksissa samoja,
-
joten tämä koneoppiminen on tässä kohtaa hyödytöntä, eikö vain? Lisäksi voimme
-
hyökätä kuvamuutoksia sekoittamalla, pienien kuvamuutosten ja sekoitettujen kuvien
-
välillä. Tämä, jotta nähtäisiin, että on pieni mutta monimutkainen asia
-
ja ilmaisee että kaikki voi mennä pieleen nopeasti ABI tasolla, jos siellä puuhailee.
-
Tässä on kyse siis CPU tiloista. Nyt voidaankin puhua lisää
-
sovellusten ohjelmointi rajapinnasta, joka onkin
hiukan mukavampi
-
aihe olettaisin.
Joo, otetaan vaan, kiitos
-
Otetaanpa tähän melko yksinkertainen esimerkki.
-
Oletetaan, että lataamme standardin unix binäärin enklaaviin, ja siellä on toiminnot sitä varten,
-
vaikkapa graphene.
Ja mitä haluan esittää tällä esimerkillä;
-
On hyvin tärkeää tarkistaa, mistä osoittimet ovat lähtöisin. Koska
-
enklaavi tavallaan osittaa muistin luotettuun enklaaviin ja ei-luotettuun muistiin,
-
ne ovat erillisissä muistialueissa. Ongelma tässä on seuraava; Oletetaan että
-
meillä on binäärin kaiutus, joka ainoastaan tuo näytölle input-arvon. Annamme toiminnolle argumenttinä
merkkijonon
-
ja se normaalisti kaiuttaa sanotaanko "Hello, world", merkkijonon joka on ei-luotetussa
-
muistissa. Kaikki sujuu kuten pitääkin,
-
enklaavissa ajetaan komennot, se saa pointerin ulkopuoliseen muistiin ja printtaa merkkijonon.
-
Ongelmana on kuitenkin se, että enklaavilla on pääsy
-
myös omaan suojattuun muistiinsa. Jos hyökkääjä pääsee
-
käsiksi pointeriin ja ohjaa sen jonkin suojattavan tiedon kohtaan,
-
toiminto printtaa tiedon ulos, eikö niin? Eli äkkiä tämä onkin muuttunut muistin
-
sulku haavoittuvuudeksi. Ja se nähdään tässä
-
tapahtumassa mainitsemassani graphene ympäristössä. Meillä on siis
-
yksinkertainen hello world -merkkijono ja sitä käsitellään parin argumentin avulla.
-
Ja nyt, muutamme enklaavin ulkopuolella pointeria
-
enklaavin muistissa. Seurauksena se printtaa halutun
-
sijasta enklaavin
muistissa sijaitsevan suojatun tiedon.
-
suojatun tiedon. Tämän tyyppiset haavoittuvuudet
-
ovat melko tunnettuja kernelien tutkinnasta ja muistakin yhteyksistä. Niitä
-
kutsutaan niemllä confused deputy ( hämmentynyt apulaissheriffi). Sheriffillä on ase lukemiseen,
mutta ei
-
tiedäkään ongelman sattuessa mitä tehdä,
-
kun ei alun perin tarkistanut kenelle muistipaikka kuuluu tai kuka sitä hallitsee.
-
Tämä haavoittuvuus tuntuisi olevan helposti ratkaistavissa. Yksinkertaisesti
-
tarkistetaan koko ajan mitä osoitin tulee. Mutta kuten sanottu,
-
se ei aina ole helppoa. Kyllä David, on melko
tarkkanäköistä,
-
jos sanoo että meidän tulisi tarkistaa kaikki osoittimet. Niinpä me teimmekin.Tarkistimme kaikki
-
pointereihin liittyvät tarkistukset ja huomasimme että Endolla on mielenkiintoinen tapa
-
tarkistaa nämä kaikki. Toki, koodi on korkealaatuista. He tarkistivat
-
kaikki pointerit, mutta asioiden eteen on tehtävä jotain erityistä. Puhumme nyt
-
C ohjelmointikielestä. Käsittelyä ei siis erityisesti päätetä.
-
Ne loppuvat uuteen tavuun ja funktiota voidaan käyttää samalla kun taistellaan
-
tiedon pituuden kanssa. Ja miten tarkistus tehdään, kun tieto
-
on täysin muistialueen ulkopuolella?
Ensimmäinen askel on käsitellä pituus,
-
se on 10, ja sitten tarkistetaan alkaako ja loppuuko tietoalue
-
kokonaan kohteen ulkopuolella. Kuulostaa paikkansapitävältä. Sitten päästetään
-
höyryä. Tuntuu toimivan hienosti. Kuinka tämä toimii,
-
kun yhdistetään eri ajoympäristöt. Emmekä nyt ajattele sitä, että koko setup on enklaavin ulkopuolella,
-
johon salattu merkkijono välitetään.
Ensimmäinen askel
-
on enklaavin aloittama käsittely merkkijonon pituuden suhteen.
-
Kuulostaa melko mehukkaalta, mutta
onneksi kaikki
-
menee hyvin, kun huomataan että koko toimintoa ei olisi pitänyt tehdäkään ja
-
koko toiminto on itse asiassa enklaavin sisällä. Pyyntö siis hylätään
-
merkkijonon suhteen. Eli OK. Mutta kuten jotkut teistä tietävät,
-
tämä on mielenkiitoista, koska
English kilpaili asiasta,
-
mistä ei koskaan pitänyt.
Ja tuon kilpailun pituus määrittyy
-
1-bittien määrästä tehtäväannossa. Eli meillä on tässä sivukanava, jossa English
-
palauttaa aina arvon False. Mutta aika, joka
-
tuon arvon määrittämiseen menee, riippuu 0-tavujen määrästä Arncliffe
-
muistiblokissa. Sen me löysimme. Olimme innoissamme ja sanoimme sen olevan yksinkertainen aikaikkunaongelma.
-
Tällä mennään, eli tuon teimme ja näette sen tässä graafissa,
-
ja se osoittautui hankalammaksi kuin miltä näyttää. Sininen
-
1 mittaisen merkkijonon ja tuo on 2-mittaisen merkkijonon. Mutta
-
mitenkään ei voida graafista päätellä, koska siinä 6 prosessoria toimii
-
kovalla vauhdilla ja että yksi lisäys on täysin
-
hävinnyt kanavaan. Sitä ei pysty selvittämään mittamalla käsittelyaikaa.
-
Tarvitaan siis jotain muuta. Meillähän on viisaita kirjoituksia
-
kirjallisuudessa, esimerkiksi hyvin yleisistä hyökkäyksistä ASICeihin, joista myös Intel kirjoittaa.
-
Voitte nähdä, mitkä muistiblokkien sivut ovat käytössä, kun
-
English ajaa, koska hallitset käyttöjärjestelmää ja
sivutusmekanismeja.
-
Sitä siis yritimme tehdä ajatellen että se onkin mukava sivukanava.
-
Raavimme päätämme katsoessamme yksinkertaista ja lyhyttä luuppia koodissa,
-
ja lyhyttä merkkijonoa joka sopii kokonaisuudessaan yhdelle muistisivulle.
-
Vaikka meillä on pääsy muistiin, se ei auta meitä tässä, koska
-
koodi ja data mahtuvat molemmat samalla sivulle.
-
Tämä on siis väliaikainen ratkaisu, se ei ole tarpeeksi tarkka.
-
Eli paljon on käsiteltävää ja olemme toimineet mielenkiintoisessa
-
ympäristössä. Se käyttää epäsuoria osoituksia ja sitä sanotaan isoksi askeleeksi. Se on siis
-
täydellinen viitekehys esimerkiksi Hadoopissa. Ja mitä se itse asiallisesi mahdollistaa
-
sinun tehdä, on ajaa enklaavia askel kerrallaan, nimestään huolimatta.
Se siis myös mahdollistaa
-
hyökkääjän puuttumisen koodin ajoon jokaisen ohjeen tai käskyn välissä.
-
Ja miten me sen esitämme, on hyvin teknistä. Meillä on Linuxin kernelin
-
ajo pienen kirjastokäyttöjärjestelmän ympärillä, mutta se
-
ei ole ihan asian ydin. Asia on siinä, että voimme pysäyttää enklaavin
-
jokaisen komennon jälkeen ja rauhassa pohtia, mitä voisimme tehdä.
-
Mitä me ite asiassa voimme tehdä, on ajaa ja seurata tätä lisäkoodia
-
yksi kerrallaan ja jokaisen keskeytyksen jälkeen
yksinkertaisesti tarkistaa,
-
saavuttaako enklaavi merkkijonon sieltä mihin olemme sen osoittaneet.
Se on toinen
-
tapa ajatella asiaa, että meillä on ajo enklaavissa ja se voidaan rikkoa
-
osiin ja laskea osat.
-
Päättäväistä ajoittamista. Tosin sanoen meillä on ennustaja joka kertoo
-
missä 0-tavut sijaitsevat. En tiedä onko se käytännöllistä, itse asiassa on.
Osoittautuu
-
olevan niin, että jotkut jotka ovat syntyneet hyökkääjiksi,
-
tietävät jo, että on hyvä tietää, missä kohta
muistia nollat ovat. Ja
-
nyt osoitamme esimerkin, missä rikomme A-S:n ja Iowan, jotka ovat kiihdytyskovona
-
yrityksen AI prosesseissa. Ja
nämä toimivat ainoastaan rekistereissä.
-
Juuri mainittiin, että tavallaan pidetään tuosta yksittäisestä osoituksesta muistiin,
-
mutta heti on olemassa toinenkin
temppu. Eli aina kun enklaavi on
-
keskeytetty, se säilöö senhetkiset rekisterinsä ja ajan johonkin muistilokeroonsa kehyksenä,
-
joten voimme keskeyttää ja verifioida sen tekevän oikein.
-
Ja sitten voimme ajaa tämän 0-tavu ennustajan tässä
-
SSA muistissa. Ja mitä löydämme; missä 0 on tai onko siellä nollia lainkaan.
-
En kuitenkaan halua mennä tarkemmin siihen, jos vastaus
on kyllä. Mutta mitä
-
itse asiassa teemme, kun löydämme nollan viimeisestä vaiheesta
-
ennen viimeistä lisäyskierrosta ja sitten huomaamme että nolla kaatuu ja muuttuu X:ksi
-
tai avaintavuksi, ja saamme tulokseksi salattua tekstiä. Me kuitenkin tiedämme
-
salatekstin tavun, ja voimme palata takaisin päin.
-
salatekstin tavun, ja voimme palata takaisin päin.
-
Tämä ketju toistetaan 16 kertaa, kunnes on löydetty jokainen 0,
-
ja meillä on käsissämme koko avain.
-
Ja ne jotka tietävät, jos on käsissä yksi avainkooste on käsissä myös koko avain.
-
Jos siis saat alkuperäisen avaimen, voit ajaa takaperin. Kuulostaa
-
monimutkaiselta, mutta se on hyvin nopea hyökkäys minkä voit seuratessa todeta.
-
Tässä on siis esimerkki tämän hyökkäyksen tekemisestä, ja kuten huomasitte muutamassa sekunnissa
-
ja noin 520 Asirin hyödyntämisellä, saamme koko KeIson.
-
Se on melko vaikuttavaa. Yksi keskeisimmistä
-
asioista on se, että muistiin ei itse asiassa laiteta mitään, mutta
-
toiminnassa SGX:n kanssa voit manipuloida sitä.
-
Haluankin tässä vaiheessa päättää tämän, olemme kuitenkin löytäneet useita muitakin haavoittuvuuksia.
-
Sekä tutkimus- että tuotantokoodissa, kuten Intelin tai
-
Microsoftin SDK:ssa.
Ja ne menevät läpi koko alueen käyttäen
-
vieraita kykyjä, joita on nähty muuallakin tutkimuksessa.
-
Mutta, on olemassa myös uudenlaisia mielenkiintoisia esittämiimme aspekteihin liittyviä haavoittuvuuksia.
-
Oli myös ongelmia kaikkien kutsuvälitysten kohdalla,
-
kun enklaavi kutsui ulkopuolellaan olevia osia.
-
Kutsuja joita käytetään emuloimaan järjestelmäkutsuja ja niin edelleen.
Ja jos palautat
-
tässä yhteydessä ollain tavalla väärän tuloksen, voidaan taas lipsahtaa rajojen ulkopuolelle. Ne myös
-
olivat erittäin, erittäin laajalle levinneitä. Ja lopuksi löysimme jotain tapauksia
-
liittyen paddingiin (kryptauksen toiminto). en taaskaan halua mennä yksityiskohtiin.
-
Olemme todenneet tässä asiassa, että voimme tehdä vertauksia oikeaan maailmaan.
-
On tärkeää pestä kätensä, eli on tärkeää huoltaa ja tiloittaa osoittimet
-
ja niin edelleen. Se on eräänlainen
poistumisviesti,
-
jolla kääntää ja ottaa yhteys turvallisesti.
-
Kyllä, kaikki kovo-ongelmat täytyy ratkaista, mutta koodin täytyy olla turvallista.
-
Enklaavien tapauksessa se tarkoittaa kunnollisia APIa ja APIen huoltoa. Tämä on itse asiassa erittäin
-
vaikea tehtävä, mielestäni
-
hyökkäyspinta-ala on suuri, erityisesti älykkään X:n
-
tapauksessa, missä voit keskeyttää jokaisen toimen ja niin edelleen. Mielestäni tutkimuksen
-
näkökulmasta, tarvitaan siis enemmän. Näkökulmasta jatkat jos haluat,
-
ehkä voimme oppia
jotain käyttäjästä analogiaan johon viittasin.
-
Luullakseni tätä tarvitaan, jotta ymmärretään mitä
-
enklaavin pitäisi tehdä verrattuna siihen mitä colonelin pitäisi
tehdä.
-
Ne ovat kuitenkin tärkeitä eroavaisuuksia, jotka tulisi ottaa huomioon. Joten luulisin,
-
kuten sanoit, kaikki koodimme
on avointa lähdekoodia.
-
Joten kaiken esitellyn voit löytää allaolevien Github -linkkien kautta
-
ja tietenkin voitte esittää kysymyksiä tämän esityksen katsomisen jälkeen.
Eli kiitoksia paljon.
-
No niin, olemme palanneet jälleen. Ja tässä kysymyksiä?
-
Ei vielä kysymyksiä....Voitte siis laittaa kysymyksiä tulemaan... Suljenpa nyt tämän
-
ja kysynkin nyt kysymyksiä teiltä. Miten päädyitte tähän aiheeseen ja miten tapasitte toisenne?
-
No se onkin melko mielenkiintoista. Ajattelen sen olevan
-
rakentuneen pitkällä aikavälillä vuosien saatossa.
Luulisin sen olevan tulosta
-
alkuperäisten suunnitelmiemme haavoittuvuuksista, Aloitin itse asiassa väitöskirjassani perusteiden keräämiseksi.
-
Emme itse asiassa nähneet koko kuvaa ennenkuin tapasimme
-
Davidin ja hänen kollegfansa Birminghamista Lontooseen.
Mukava konferenssi.
-
Ja sitten aloimme tehdä yhteistyötä ja toimia
-
systemaattisemmin. Aloitin tämän haavoittuvuuksien listaamisen
-
ja sen jälkeen teimme Davidin kanssa systemaattisemman analysoinnin.
-
Ja se oli se Pandoran lipas,
-
samoja virheitä toistaen. Sitten Fitzhugh, joka liittyi seuraamme hiljattain
-
Lontoossa, alkoi työskennellä kanssamme
-
matalan tason Sebu ominaisuuksien kanssa. Ja se itsessään on jo Pandoran lipas.
-
Sanoisin että erityisesti yksi opetus, kuten sanoimme, oli tuo tietty kuutonen, joka on erityisen monimutkainen.
-
Ja tuota kaikkea kompleksisuutta voidaan hyväksikäyttää, erityisesti
-
biodiversiteettiä. Se on kuin osa moniosaisuudesta,
-
missä avaat laatikon ja saat vastaukseksi yhä lisää kysymyksiä.
-
On mielestäni reilua sanoa, että tämä tutkimus ei ole
-
lopullinen vastaus aiheeseen, mutta se on yritys löytää järjestelmällinen tapa
-
tarkastella loputtomia perusteita.
-
Netin kautta on tullut kysymys. Onko muita olosuhteita missä
-
Mianus kirjoittaa rekistereihin, kuin juuri SGX?
-
Täytyy sanoa, etten myöskään ymmärrä kysymystä, mutta kokisin sen niin
-
että onko tulos taktinen häviö? Vankila riippuu siitä, että kun on muistin huollon
-
yhteydessä meitä syytetään sisällön muistiin
-
pakottamisesta.
-
Eli se on ehdottomasti hmmm.
-
Sanoisin kuitenkin että yksi opetuksista viimeisen viiden tutkimusvuoden aikana on,
-
että usein nämä asiat
yleistyvät kuutosen jälkeen
ja ainakin yleisesti,
-
oivallus SEBUsta, että oikeellisuus muistin käsittelyssä saavutetaan tavalla tai toisella,
ennemmin tai myöhemmin.
-
Mielestäni tuo pätee järjestelmien luomisessa, että jos jotenkin voi pakottaa
-
käyttöjärjestelmän kompleksisuuten
sovellusten osalta,
-
rekistereitten käyttö muistissa on pakollista. Jos teillä olisi jotain samankaltaista mitä
-
meillä on käyttöjärjestelmässä, Colonelissä, teillä olisi
potentiaalinen hyväksikäytön paikka.
-
Mutta ehkä David haluaa jotain käyttöjärjestelmistä myös.
-
Ei en oikeastaan.
Ajattelisin, että eräs asia mikä helpottaa SGX:n
-
kanssa on tiukka kontrolli, kuten mainitsit, keskeytysten ja muun
kanssa,
-
kun olette matkallanne enklaavin ulkopuolella. Voitte siis askeltaa käytännössä koko
-
enklaavin, kuten keskeyttämällä koko käyttöjärjestelmän.
-
Tarkoin toistettuna
oikeassa kohdassa joku toinen prosessi
-
on taipuvainen olemaan vaikeampi suunnittelultaan. Mutta kontekstissa, jossa
-
meidän täytyy tallentaa jotain turvaan, se on
-
rekisterit joista se päätyy muistiin,
joissain tilanteissa
-
vähemmän kontrolloidusti kuin esim. Asgeirssonin tapauksessa. On siis olemassa kysymys, entä muut CPU -arkkitehtuurit
-
kuin Intel, testasitteko niitä? Ehkä voin mennä hiukan tähän, mielenkiintoista.
-
Intelhän on suurin, sillä on suurin ohjelmistoalusta ja eniten ajossa olevia ympäristöjä.
-
Sitähän me voisimme tutkia.
Mutta tietenkin on olemassa muutakin,
-
kuten muutama vuosi sitten kehittämämme Sancho's.
-
Ja tietenkin silläkin on
samat aiheet. Eli aina tarvitaan
-
ohjelmistokerros jonka täytyy päästä enklaaviin.
Luullakseni
-
David aikaisemmassa työssään löysi ongelmakohtia TEE:sämme
Eli tämä ei ole ainoastaan
-
Intel-sidonnaisten projektien sotkun paikka. Mutta mitä me
-
varmasti huomasimme, on helpompaa ajatella kaikkia tapauksia yksinkertaisemmissa ympäristöissä
-
kuin viitosessa ja sitä helpommissa, kuin kompleksisemmaassa kuutosessa.
-
Joten nyt ei ole paljoa ympäristöjä vähemmille tempuille.
-
Heillä on siis etu ja haitta olla ensimmäisiä laajasti
-
levinneitä, mutta luulen että kun muutkin alkavat kasvaa
-
ja yksinkertaisemmat arkkitehtuurit yleistyvät,näemme että
-
on helpompi korjata väitettyjä ongelmia niissä. OK, mikä on
-
järkevä vaihtoehto TEElle vai onko sitä.
-
Meillä molemmilla on asiaan omat perspektiivimme, näin ajattelisin.
-
Kysymyksen vakiintuessa, tarvitsemmeko
-
vaihtoehtoja vai tarvitsemmeko systemaattisempia tapoja huoltaa
-
Australians? Se on mielestäni osavastaus tähän, että meidän ei tarvitse
-
heittää tätä hukkaan, vaikka sen kanssa on ongelmiakin.
-
Voimme myös miettiä miten ratkaista nuo ongelmat. Mutta sen ulkopuolella meillä on jännittävää
-
tutkimusta. OK, ehkä David myös haluaa sanoa hieman lisää esimerkiksi
-
ominaisuuksista, mutta se ei välttämättä ole niin erilaista
tähän verrattuna.
-
Silloin kun on high tech tukea kuten Cherry
-
Borjessonin tietokoneen osalla, joka itsesiallisesti yhdistää metadatan
-
metadatapisteisiin, kuten tilaustarkistuksia
-
silloin puhumiemme aiheiden saastutushyökkäyksiä voitaisiin saada
-
kiinni ilman itse ilman tukea. Mutta se on hyvin korkean tason idea. Ehkä David
-
jhaluaasanoa jotain. Kyllä, ajattelisin että vaihtoehtona TEE:lle,
-
haluat osittaa järjestelmäsi, mikä on mielestäni hyvä ajatus. Jza
-
Ja kaikki tekevät sitä nyt, miten online palveluita tehdään ja niin edelleen.
-
Nämä ovat järjestelmiä jotka ovat yleistyneet
-
matkapuhelimissa tai vaikkapa pankkikorttijärjestelmissä,
-
jotka ovat suojattu ympäristö yksinkertaisille toimille. Mutta
-
ongelmat alkavat, kun laitetaan paljon toiminnallisuuksia tähän ympäristöön.
-
Kuten näimme, luotettu koodipohja
tulee yhä monimutkaisemmaksi ja saadaan ympäristöstä perinteinen laatikko.
-
On todellinen kysymys, tarvitaanko vaihtoehto vaiko
-
parempi lähestymiskulma aiheeseen. Miten voitte, ositusohjelmistot? Ja kuten mainitsit
-
on asioita joita voi hoitaa arkkitehtuurilla.
-
Näin voidaan laajentaa arkkitehtuureita
ominaisuuksilla
-
ja sitten aloittaa komponenttien eristäminen.
-
Esimerkiksi, ohjelmistoprojektissa, sanotaanko Web-serverilläsi, sinä eristät stackin tai jotain vastaavaa. Ja
-
kiitokset katsojille salalisen salasanan huomaamisesta,
sehän tehdään vain näön tähden,
-
antaaksemme ihmisille jotain katseltavaa.
-
Mutta sehän ei ole perusteiltaan viallinen?
Tarkoitan että niitä on niin monia,
-
ettet voi sanoa niiden olevan perusteiltaan viallinen, mutta
-
erityisesti SGX:ää
ajatellen, koska signaali käyttää mobiilikolikoita
-
kryptovaluutta käyttää sitä, ja niin edelleen ja niin edelleen. Onko se perusteiltaan viallinen
-
vai haluatko mieluummin sanoa niin? Sehän riippuu perusteiltaan kunnossa olevan
määritelmästä.
-
Menneisyydessä olemme työskennelleet myös
-
asenteiden rikkomisen parissa, mutta ne on saatu korjattua ja on aika kaunis
-
ja hyvin tutkittu kokonaisuus jolla on myös lyhytaikaisia vaikutuksia tuotantoon.
-
Löydät siis haavoittuvuuden, toimittajan on tehtävä korjaus jota ei ole olemassa
-
tai siihen tulee väliaikainen
korjaus. Sitten myöhemmin
-
tarvitaan uusia prosesseja jotta saataisiin lopullinen korjaus ongelmaan
-
ja kuitenkin siihen
saadaan taas
-
väliaikaisia korjauksia. Jos esimerkiksi yhtiö kuten Signeul käyttää
-
niitä, et saa oletuksena turvallisuutta. Mutta täytyy ajatella
-
ohjelmistoja. niihin keskitytään tässä tapauksessa.
Täytyy ajatella
-
myös laitteistoja, mikropaikkauksia ja prosessoreita joissa täytyy huolehtia kaikista
-
tunnetuista haavoittuvuuksista. Ja silti täytyy aina kysyä, että entä
-
ne mahdollisuudet joita emme vielä tunne, missään turvallisessa järjestelmässä.
-
Ehkä David haluaa sanoa jotain viimeisimmästä työstään.
-
Hiukan mielenkiintoista.
Ajattelenpa, että mikä tahansa lähtökohtasi
-
tai minun vastaukseni tähän kysymykseen olisi, riippuu tietenkin
uhkamallista.
-
Jotkut käyttävät SGX:ää siirtääkseen luotetut asiat pilvipalvelun tuottajalle,
-
kuten RSS tai Signaler. Siirretään
siis kaikki nämä toiminnot
-
jollekin pilvitoimittajalle enklaaviin. Tällöin minun ei tarvitse
-
luottaa pilvitoimittajaan, koska myös fyysiseen turvallisuuteen on jotain.
-
luottaa pilvitoimittajaan, koska myös fyysiseen turvallisuuteen on jotain.
Vähän aikaa sitten paljastimme kuitenkin haavoittuvuuden,
-
joka osoittaa, että jos sinulla on fyysinen pääsy SGX:ään,
-
voit injektoida prosessorin pelaamalla voting rajapinnalla, joka on laitteistossa.
-
Siinä todellakin nähtiin, että pari johtoa emolevyn väylältä
-
jännitteen säätimeen. Saadaan aikaan jännitepiikki,
-
kuten
voitte tietääkin.
-
Sillä tavalla voidaan kääntää bittejä enklaavissa
-
ja näin tietenkin tehdä kaikenlaista
-
pahuutta, kuten injektoida,
jonka avulla taas voidaan saada avaimia, kaapata ohjaus, tai jotakin. Se siis riippuu
-
uhkamallista. En sanoisi niin, että ASX on täysin turha. Sekin
-
on parempi kuin ei mitään. Mutta
ehdottomasti, et voi olla
-
täysin turvassa jos jollain on fyysinen pääsy palvelimellesi.
-
Nyt minun täytyy lopettaa keskustelu, pahus sentään. Ja kysyisin kaikki kysymykset
-
jotka sain. Mutta hyvin lyhyt
vastaus, kiitos. Mikä tuo juttu on tuon
-
salasanan kanssa tuolla taustalla?
Minähän selitin sen, se on vaan puhdas vitsi.
-
Sanon sen vielä kerran, koska jotkut näyttävät ottaneen sen vakavasti.
Se on
-
vain tilan täytteeksi.
Laitoin sen vaan sinne sen takia. Se ei muutoin olekaan kokonaan sieltä luettavissa, onneksi.
-
Minun täytyy varmasti ottaa ja avata David Oswaldin kirja.
-
Kiitokset hyvätä keskustelusta ja nyt siirrytäänkin seuraavaan
-
esitykseen.
-
[Translated by Kari Kananoja (ITKST56 course assignment at JYU.FI)] 2023