- COMP.SEC.100
- 21. Laitteiston tietoturvallisuus
- 21.3 Sivukanava- ja vikahyökkäykset (syventävä)
Sivukanava- ja vikahyökkäykset (syventävä)¶
Tämä osio antaa ensin yleiskatsauksen fyysisistä hyökkäyksistä algoritmien salaustoteutuksiin. Toisessa osassa käsitellään monenlaisia vastatoimia ja joitakin avoimia tutkimusongelmia.
Fyysiset hyökkäykset, enimmäkseen sivukanava- ja vikahyökkäykset, olivat alunperin suuri huolenaihe pienten laitteiden kehittäjille erityisesti älykorttien ja maksutelevisiojärjestelmien suojaamiseksi hyökkääjiä vastaan. Näiden hyökkäysten ja vastatoimien merkitys kasvaa, kun entistä enemmän elektronisia laitteita on helposti saatavilla IoT toteutusten myötä.
Hyökkäykset (syventävä)¶
Nykyisellä tietämyksellä salausalgoritmeista on tullut erittäin suojattuja matemaattisia ja kryptoanalyyttisia hyökkäyksiä vastaan: tämä pätee varmasti algoritmeihin, jotka ovat standardoituja tai jotka ovat saaneet laajan tarkastelun ja hyväksynnän avoimessa tutkimuskirjallisuudessa. Tällä hetkellä heikoin lenkki on enimmäkseen algoritmien toteuttaminen laitteistoissa ja ohjelmistoissa. Tietoa vuotaa laitteistototeutuksesta sivukanava- ja vikahyökkäysten kautta.
Hyökkäysten jaottelua voidaan tehdä aktiivisten tai passiivisten sivukanavahyökkäysten tai vikahyökkäysten välillä. Toinen jaottelu voidaan tehdä hyökkääjän etäisyyden perusteella laitteeseen: Hyökkäykset voivat tapahtua etänä tai lähellä laitetta, mikä ei silti ole toimintaa lamauttavaa.
Passiiviset sivukanavahyökkäykset: Yleiset sivukanavahyökkäykset ovat passiivisia laskenta-alustan tarkasteluja. Suoritusajan ja virrankulutuksen datariippuvaisten vaihteluiden kautta tai laitteen sähkömagneettisesta säteilystä, hyökkääjä voi päätellä salaisia tietoja alustan sisäosista. Suoritusajan, virrankulutuksen tai sähkömagneettisen säteilyn vaihtelut havaitaan tyypillisesti laitteen läheltä, kun sitä käytetään normaalisti. On tärkeää huomata, että laitteen normaali toiminta ei häiriinny. Näin ollen laite ei ole tietoinen siitä, että sitä vastaan hyökätään, mikä tekee tästä hyökkäyksestä varsin tehokkaan ja voimakkaan.
Virrankulutuksen vaihteluihin perustuvat sivukanavahyökkäykset ovat olleet laajasti tiedostettuja ja tiedettyjä. Tyypillisesti ne suoritetaan lähellä laitetta, jossa on pääsy virtalähteeseen tai virtalähteen kytkentänastoihin. Virrankulutukseen kohdistuvien sivukanavahyökkäysten alalajeja ovat yksinkertainen tehoanalyysi (SPA), differentiaalinen ja korkeamman järjestyksen tehoanalyysi (DPA) ja mallihyökkäykset. SPA:ssa ideana on ensin tutkia kohde ja sen käyttäytyminen avaimesta riippuville ominaisuuksille. Esim. tyypillinen kohde ajoituksessa ja voimahyökkäyksessä if-then-else haarat, jotka ovat riippuvaisia avainbiteistä. Julkisen avaimen algoritmien toteutuksissa kuten RSA tai ECC, algoritmi etenee peräkkäin kaikkien avainbittien läpi. Kun jos-haara vie enemmän tai vähemmän laskenta-aikaa kuin muu-haara tämä voidaan havaita järjestelmän ja laskentasirun ulkopuolelta. SPA-hyökkäykset eivät rajoitu julkisen avaimen algoritmeihin, vaan niitä on myös sovellettu salaisen avaimen algoritmeihin tai alkulukujen luomiseen käytettäviin algoritmeihin (jos niiden on säilytettävä salaisuus). Joten kun tiedetään laitteen sisäinen toiminta, SPAn tarvitsee vain kerätä yksi tai muutama jälki analyysiä varten.
DPA:lla hyökkääjä kerää useita jälkiä, jotka vaihtelevat muutamasta kymmenestä suojaamattomasta laitetoteutuksesta aina miljooniin suojattuihin laitteistototeutuksiin. Tässä tilanteessa hyökkääjä käyttää hyväkseen sitä tosiasiaa, että hetkellinen virrankulutus tai sen muutos tilanteesta riippuen sisältää tietoja siitä mitä laitteella ollaan tekemässä ja mahdollisesti mitä tietoja laitteella käsitellään. Sama toiminto, riippuen samasta tuntemattomasta aliavaimesta, suoritettuna eri tiedoilla, johtaa erilaisiin virrankulutusprofiileihin. Hyökkääjän on mahdollista toteuttaa ja rakentaa laitteesta tilastollinen malli arvioimaan virrankulutusta sen funktiona mitä tietoja ja aliavaimen eri arvoja käsitellään. Näiden jälkien tilastollinen analyysi perustuu korrelaatioanalyysiin. Keskinäistä tietoa ja muita tilastollisia testejä käytetään korreloimaan mitattuja arvoja tilastolliseen malliin.
Sähkömagneettiseen säteilyyn perustuvat sivukanavahyökkäykset on tunnistettu jo varhain sotilaallisen viestintä- ja radiolaitteiden yhteydessä. Reaktiona tähän Nato ja monien maiden hallitukset ovat julkaisseet TEMPESTin. Se koostuu spesifikaatioista laitteiden suojaamiseen tahattomalta sähkömagneettiselta säteilyltä, mutta myös sitä vastaan, että tieto vuotaisi tärinän tai äänen kautta. Sähkömagneettiset säteilyhyökkäykset voivat olla toteutettavissa kaukaa, mutta myös integroidun laitteen lähellä. Integroidun piirin päällä oleva sähkömagneettinen impulssi voidaan vapauttaa erittäin paikallisesti ja kohdistaa mikropiirin tiettyjä osia kohtaan, käyttämällä 2D-askelinta ja hienoja sähkömagneettisia impulsseja tuottavilla laitteilla.
Ajoitushyökkäykset ovat toinen sivukanavahyökkäysten alaluokka. Kun arkaluontoisia tietoja käsiteltäessä suoritusaika salauslaskennassa tai ohjelmiston käsittelyarvoissa muuttuu/vaihtelee, hyökkääjä voi poimia tämän aikaeron. Ajoitushyökkäys voi olla yhtä yksinkertainen kuin avaimesta riippuva if-haaran eri suoritusaika verrattuna else-haaran aikaeroon rajallisessa koneessa. Välimuistihyökkäykset, jotka käyttävät väärin välimuistin osuman välistä aikaeroa, ja välimuistin puuttuminen, ovat tärkeä ajoitushyökkäysluokka.
Mallihyökkäyksessä hyökkääjä luo ensin kopion tai mallin kohdelaitteesta. Tätä mallia käytetään laitteen käyttäytymisen tutkimiseen kaikille tai suurelle joukolle tuloja ja salaisia data-arvoja. Sitten yhtä tai muutamaa näytettä kohdelaitteesta verrataan malleihin tietokannassa, jotta voidaan päätellä salaisia tietoja laitteesta. Mallihyökkäyksiä käytetään tyypillisesti, kun alkuperäisessä laitteessa on vastatoimia useita suorituksia vastaan. Esim. siinä saattaa olla sisäinen laskuri epäonnistuneiden yritysten lukumäärän kirjaamiseksi. Mallit voidaan tehdä ajoituksen, tehon tai sähkömagneettisen tiedon perusteella. Kun koneoppiminen ja tekoälytekniikat tulevat tehokkaammiksi, samoin myös mallihyökkäykset kehittyvät ja tulevat tehokkaammin hyökkääjän hyödynnettäviksi.
Mikroarkkitehtuuriset sivukanavat: Prosessorin arkkitehtuurit ovat erittäin herkkiä ajoitushyökkäyksille. Tietovuotojen ongelma ja ohjelmien välisen toimintojen eristämisen vaikeus tunnistettiin jo varhain. Myöhemmin ajoitusvaihtelut välimuistin osumissa ja epäonnistumisissa tuli tärkeäksi ajoitushyökkäysten luokaksi. Viime aikoina paljon huomiota ovat saaneet mikroarkkitehtoniset sivukanavahyökkäykset, kuten Spectre, Meltdown, Foreshadow. Ne perustuvat ajoituserojen havaitsemiseen. Hyökkäysten vahvuus ja tehokkuus muodostuu siitä, että ne voidaan asentaa etänä ohjelmistosta. Nykyaikaiset prosessorit sisältävät useita optimointitekniikoita suorituskyvyn parantamiseksi, esim. välimuistien käyttö, ja myös ns. spekulointien avulla (Spekulatiivinen suoritus, epäjärjestyksessä suoritus, haaran ennustajat jne). Kun useita prosesseja suoritetaan samalla laitteistoalustalla, virtualisoinnit ja muut ohjelmistotekniikat eristävät tiedot eri osapuolten välillä eri muistipaikoissa. Haavoittuvuuksia voi esiintyä epäkunnossa olevan toteutuksen kautta tai spekulatiivista suoritusta tehtäessä, kun laitteiston prosessori käyttää muistipaikkaa, jota ei ole tarkoitettu kyseiselle prosessille ns. transienttikäskyjen avulla. Mikäli käskyjä toteutetaan, mutta niitä ei koskaan suoriteta loppuun asti, ne kuitenkin ovat kirjautuneet laitteistomuistiin. Tämä voi aiheuttaa sivukanavatoimintoja kuten pääsyaikojen vaihtelua tai muuten vuotaa tietoja.
Aktiiviset vikahyökkäykset: Vikahyökkäykset ovat aktiivisia laitteiston laskenta-alustojen manipulaatioita. Seurauksena on, että itse laskenta tai ohjelman ohjausvirta häiriintyy esim. viallisen toiminnon avulla, tai jos lähtöjä ei vapauteta. Vaikka lähtöä ei vapauteta tai laite nollaa itsensä, tämä toteutunut päätös saattaa vuotaa arkaluonteisia tietoja. Yksi yleinen esimerkki kuvaa RSA-allekirjoituksen toteutusta, joka hyödyntää kiinalaista jäännöslausetta (CRT). Yhdellä virheellisellä ja yhdellä oikealla tuloksen allekirjoituksella ja muutamalla yksinkertaisella matemaattisella laskelmalla, voidaan johtaa salainen allekirjoitusavain. Fyysiset vikahyökkäykset voivat olla yksinkertaista kellon häiriötä, virrankatkaisua, laitteen lämmittämistä tai jäähdyttämistä. Nämä edellyttävät läheisyyttä laiteeseen, mutta ne ovat tunkeutuvia tai laajalle leviäviä.
Muistin skaalautumisen myötä hyökkäyspintoja tulee lisää. RowHammer-hyökkäys on hyvin erityinen hyökkäys DRAM muistia vastaan. Lukemalla tietyt muistipaikat toistuvasti DRAM-muistista, läheiset naapuripaikat menettävät arvonsa. Joten tiettyjä muistipaikkoja hallitusti “vasaroimalla” on mahdollista aiheuttaa bittien kääntymisiä käsiteltävän muistialueen lähialueilla.
Kalliimmilla laitteilla, integroidun piirin kannen avaamisella, tai syövytyksellä piikerroksesta alaspäin, on mahdollista saada vielä tarkempaa tietoa piiristä. Laitteet, joita hyökkäyksissä on käytetty, ovat: tahallisesti aiheutettu optinen vika, laserhyökkäykset, Focused Ion Beam (FIB), pyyhkäisyelektronimikroskooppi (SEM) ja muita mahdollisia laitteita. Jälkimmäiset ovat tyypillisesti laitteita, jotka ovat suunniteltu sirun luotettavuuden ja vika-analysointien tarkasteluun. Näitä laitteita voidaan käyttää myös tahallaan väärin tai käänteisesti, toteutusten rakenteiden ja toiminnallisuuksien selvittämiseen (reverse engineering).
Vastatoimet (syventävä)¶
Ei ole olemassa yleisiä vastatoimia, jotka suojaisivat ja tehoaisivat kaikkia sivukanavahyökkäyksiä vastaan. Riippuen uhkamallista ja oletuksista (etä/paikallinen käyttö, passiivinen/aktiivinen jne.) tehtynä luotetulla laskentapohjalla (eli mikä on ja mikä ei sisälly luottamuksen juureen), voidaan vastatoimia ehdottaa useilla abstraktiotasoilla. Yhteenveto tärkeimmistä ja keskeisimmistä on alla.
Ajoitushyökkäysten eliminoimiseksi ensimmäinen tavoite on tarjota laitteisto, joka sisäisestä tilasta riippumatta suorittaa sovelluksen tai ohjelman vakioajassa riippumatta salaisista syötteistä ja -avaimista. Riippuen hyökkääjän mittauslaitteiston aikatarkkuudesta, jatkuvien aikalaskelmien on oltava tarkempia ja niitä tulee olla mahdollista myös hienosäätää. Prosessoriarkkitehtuurin tasolla vakioaika tarkoittaa vakiomäärää käskyjä. RTL-tasolla vakioaika tarkoittaa vakio kellojaksojen määrää. Logiikka- ja piiritasolla vakioaika tarkoittaa vakiota loogiikansyvyyden tai riippumattomuutta kriittisen polun syötteestä. Toimintojen tasolla vakioaika voidaan saada tasapainottamalla suorituspolut ja lisäämällä valekäskyjä. Käytettävien resurssien jakaminen, mm. välimuistien kautta, tekevät jatkuvan ajan toteutuksista erittäin vaikeita hyökkääjien tarkkailtaviksi.
RTL-tasolla on varmistettava, että kaikki toiminnot toimivat samalla syklien kellomäärällä. Erityisesti jos suojaukseen käytetään dummy-operaatioita tai valeportteja, toteutuksen tasosta riippuen. Nämä toteutukset ovat haasteena suojauksessa kun suunnittelutyökaluina käytetään RTL-tasolla vakioajastuksia ja -porttitoteutuksia. Sekä laitteisto- että ohjelmistokääntäjät syntetisoivat suorituskykysyistä pois juuri suojauksien käyttämiä dummy-operaatioita tai -logiikkaa, jotka lisättiin tehtyjen laskelmien tasapainottamiseksi.
Koska monet sivukanavahyökkäykset perustuvat suureen määrään havaintoja tai näytteitä, satunnaistaminen on suosittu vastatoimi. Sitä käytetään suojaamaan virta-, sähkömagneettista- ja ajoitussivukanavahyökkäystä vastaan. Satunnaistaminen on tekniikka, jota voidaan soveltaa algoritmien tasolla: se on erityisen suosittu julkisen avaimen algoritmeissa, jotka käyttävät tekniikoita, kuten skalaarisokaiseminen tai viestin sokaiseminen. Rekisterinsiirrossa ja porttitasolla sovellettua satunnaistamista kutsutaan maskaamiseksi (peittämiseksi). Peitemallit satunnaistavat laskelmien väliarvot niin, että esimerkisksi laitteen virrankulutusta ei voida enää yhdistää toteutuksen sisäisiin salaisuuksiin. Saatavilla on paljon tutkimusmateriaalia ja -julkaisuja porttitason maskausmenetelmistä aina yksinkertaisesta Boolen maskauksesta kynnystoteutuksiin, jotka ovat todistettavasti turvallisia tietyissä vuotomalleissa. Satunnaistaminen on ollut käytännössä tehokasta erityisesti julkisen avaimen suojaustoimissa. Salaisen avaimen algoritmien suojaaminen peittämällä on haastavampaa. Jotkut peittojärjestelmät vaativat valtavan määrän satunnaislukuja, toiset olettavat vuotomalleja, jotka eivät aina vastaa todellisuutta. Tässä yhteydessä uutta salaustekniikkaa, joka tunnetaan vasta käsitteellä leakage resilient cryptography on suunnitteilla. Tälläisellä salauksen toteutuksella on luontainen vastustuskyky sivukanavahyökkäyksiä vastaan. Tässä vaiheessa on vielä suuria haasteita teorian ja käytännön välillä.
Häivyttäminen on toinen suuri vastatoimien luokka. Ideana on häivyttää hyötysignaali kohinaksi esimerkiksi vähentämällä signaalin voimakkuutta. Suojaus TEMPESTin yhteydessä on yksi tällainen esimerkki. Vastaavasti porttitasolla, käyttäen erilaisia logiikkamoduuleita on mahdollista vähentää standardien teho- tai sähkömagneettisen laitteiden tunnistettavuutta, joka lisää vastustuskykyä sähkömagneettisia hyökkäyksiä vastaan.
Yksinkertaisia tekniikoita, esim. värinää tai ajautuvaa kelloa ja suuria irrotuskapasitansseja, käyttämällä on myös mahdollista pienentää signaali-kohinasuhdetta.
Joskus signaalivuotojen ratkaiseminen tapahtuu yhdellä abstraktiotasolla ja esim. tehopuolen kanavat voidaan käsitellä eri abstraktiotasolla. Siksi, jos on olemassa vaara, että salausavain vuotaa sulautetusta järjestelmästä, salausprotokolla joka vaihtaa avainta riittävän useasti saattaa välttää myös sivukanavan tietovuodot.
Yleiskäyttöisiä prosessoreita, kuten suorittimia, GPU:ita ja mikro-ohjaimia ei voi muokata sen jälkeen kun ne kerran on valmistettu. Siten mikroarkkitehtonisilta hyökkäyksiltä suojautuminen valmistuksen jälkeen tarjoamalla ohjelmistokorjauksia ja -päivityksiä on äärimmäisen vaikeaa ja useimmiten kustannusten pitämiseksi pienenä menetetään suorituskykyä. Mikrokoodipäivitykset ovat myös eräs ohjelmistomuoto, eli toteutetaan laiteohjelmistopäivitys ilman laitteiston rautapäivitystä. Suurin ero näillä on, että mikrokoodin avulla tehtyjen päivitysten mukanaan tuomat uudet toiminnallisuudet näyttäytyvät käyttäjälle jopa laitteistopäivitykseltä vaikka sitä se ei ole. Tarjoamalla ohjelmoitavia laitteistoja yleisenä ratkaisuna on iso haaste turvallisuuden kannalta, koska etukäteen ei aina edes tiedetä mitä laitteistolla halutaan lopulta tehdä ja mitä sovelluksia halutaan käynnistää. Ratkaisuja tähän ongelmaan etsitään ohjelmistotekniikoista ja laitteistojen yhteisvaikutuksista.
Vikahyökkäyksiä vastaan suojaudutaan rekisterien siirtotasolla sekä piirien tasolla. RTL:ssä vikahyökkäyksiltä suojautuminen perustuu enimmäkseen redundanssiin joko etäisyydellä tai ajassa ja lisäämällä koodaukseen perustuvia tarkistuksia, kuten pariteettitarkistuksia. Hinta näille toteutuksille on kallis, koska laskelmat suoritetaan useita kertoja. Yksi ongelma redundanssin lisäämisessä on, että se lisää sivukanavien hyökkäyspintaa. Itse asiassa tarpeettomien laskelmien vuoksi hyökkääjällä on käytettävissä enemmän jälkiä ajan, tehon tai sähkömagneettisen sivukanavahyökkäysten suorittamiseen. Piiritasolla kellon tai virtalähteen monitorointi saattaa havaita poikkeamia normaalista toiminnasta ja hälyttää.
Integroituihin piireihin lisätään monenlaisia piirien tasoantureita. Esimerkkejä ovat vaikka valoanturit, jotka havaitsevat, että pakkauksen kansi on avattu. Seosmetallisensorit, jotka on asennettu ylimmän tason metallikerroksiin voivat havaita murtoyrityshyökkäykset. Lämpötila-anturit havaitsevat lämpenemisen tai integroidun piirin jäähdytyksen. Antennianturit on kehitetty havaitsemaan laitteen lähellä tapahtuvat sähkömagneettisten kenttien muutokset. Laitteistototeutuksiin voidaan lisätä myös muita antureita, jotka havaitsevat esim. virtalähteen tai kellon manipuloinnin. Huomaa, että antureiden lisääminen aktiivisen manipuloinnin havaitsemiseksi voi kuitenkin myös itsessään vuotaa ylimääräistä tietoa sivukanavan hyökkääjille.
Yhteiset vastatoimet sivukanava- ja vikahyökkäyksiä vastaan ovat haastava ja aktiivinen tutkimusalue.