- COMP.SEC.100
- 21. Laitteiston tietoturvallisuus
- 21.1 Suunnitteluprosessin ja laitteiston tietoturvallisuuden yhteys (syventävä)
Suunnitteluprosessin ja laitteiston tietoturvallisuuden yhteys (syventävä)¶
Laitteiston tietoturva on erittäin laaja aihe, ja monet aiheet kuuluvat keskeisinä sen ylätasolle. Tässä osiossa nämä näennäisesti toisiinsa liittymättömät aiheet on ryhmitelty ja järjestetty suunnittelutasoiksi Gajski & Kuhnin Y-kaavion esittämän abstraktion mukaan. Gajski & Kuhn ehdottavat yleisen lähestymistavan laitteistosuunnitteluun. Tässä luvussa sitä sovelletaan turvallisuusnäkökohtiin laitteistosuunnittelussa ja se on linkitetty uhkamalleihin ja siihen liittyvään luottamusankkurikäsitteeseen.
Laitteistosuunnittelun historia lyhyesti (syventävä)¶
Suunnittelun abstraktiokerrokset otetaan käyttöön laitteiston suunnittelussa monimutkaisuuden vähentämiseksi. Kuten kuvassa 21.1 on esitetty, transistorit kuvan keskellä ovat alin abstraktiotaso, jonka suunnittelija ajettelee olevan omana kokonaisuutenaan suunnittelussa. Nämä transistorit on koottu yhteen muodostamaan peruslogiikkaportit, kuten NAND-, NOR-portit tai flip-flops, joita kutsutaan logiikkatasoksi. Menetäessä abstraktiokerroksellä ylöspäin, rekisterin siirtotasolle, portit ryhmitellään yhteen muodostaen moduuleja, rekistereitä, ALU:ita, jne. ja niiden keskinäinen toiminta synkronoidaan kellon avulla. Lopuksi nämä moduulit yhdistetään eri käskyjoukkojen ja määritysten mukaisesti prosessoreiksi, joita sovellukset ja algoritmit voivat käyttää ja hyödyntää eri tarpeiden mukaisesti.
Kun abstraktiokerroksissa mennään ylöspäin, alla olevien kerrosten yksityiskohdat piilotetaan. Tämä vähentää suunnittelun monimutkaisuutta korkeammilla abstraktiotasoilla. Eri abstraktiokerroksia edustavat samankeskiset ympyrät kuvassa 21.1.
Kuva 21.1 Gajski & Kuhnin Y-kaavio
Näillä ympyröillä Gajski & Kuhnin Y-kaavio esittelee suunnittelutoiminnot, joita edustaa kolme akselia:
- käyttäytymisakseli, joka kuvaa käyttäytymistä tai mitä tulee toteuttaa (kuten spesifikaatiot)
- rakenteellinen akseli, joka kuvaa kuinka jokin on toteutettu
- fyysinen akseli, joka kuvaa kuinka asettelut kootaan yhteen portissa, moduulissa, sirulla, ja piirilevyllä
Varsinainen suunnittelutoiminta on “kävely” tämän suunnittelutilan läpi. Suunnittelu alkaa tyypillisesti käyttäytymisalueen yläosassa olevista määrittelyistä. Nämä määrittelyt ja spesifikaatiot (=mitä) hajoavat komponenteiksi, jotka ovat samalla abstraktiotasolla (=miten) ja liikkuvat käyttäytymisakselista rakenteelliseen akseliin. Ja edelleen yhdellä abstraktiotasolla oleva rakennekomponentti muuttuu akselilla liikuttaessa samalla tasolla olevaksi käyttäytymiskomponentiksi.
Esimerkkinä suunnittelutilan läpikäymisestä: Oletetaan, että laitteistosuunnittelijaa pyydetään toteuttamaan kevyt, vähän virtaa käyttävä suojausprotokolla Internet of Things (IoT) -laitteelle. Suunnittelija saa tiedot vain siitä, mitä on suunniteltava: suojausprotokollan tavoitteena on tarjota luottamuksellisuus ja eheys (=mitä) ja joukon salausalgoritmeja (=komponentit) tukemaan protokollaa. Salausalgoritmit tarjotaan eriteltynä käyttäytymismallina laitteistosuunnittelijalle, jolla on mahdollisuus toteuttaa se apuprosessorilla, kokoonpanoohjelmana tai sitä tukevalla mukautetuilla ohjeilla. Kustannuksista ja volyymeistä riippuen valitaan toteutuksena CMOS-tekniikka tai FPGA-alusta. Tämä käyttäytymistaso muunnetaan ja kuvataan yksityiskohtaisemmaksi rekisterinsiirtotasoksi (esim. VHDL tai Verilog). Rekisterinsiirtotasolla (RTL) on tehtävä joukko päätöksiä mitä tehdään, onko tämä rinnakkais- tai peräkkäinen versio, itse toteutettu tai ohjelmoitava malli tai toteutetaanko suojauksia sivukanava- ja vikahyökkäyksiä vastaan jne.
Olennaista suunnittelussa on abstraktiokerrosten jakamisen toteuttaminen sen mukaisesti miten komponentit käyttäytyvät. Esim. simuloitaessa aritmeettista suorituskykyä tai laitteiston energiankulutusta, alla olevien yksittäisten porttien tiedot on oltava saatavilla laadukkaan mallinnuksen ja laadun takaamiseksi. Samoin ohjelmistoarkkitehtuuri on ohjelmoijan käytettävissä oleva prosessorin malli.
Luottamusankkuri (syventävä)¶
Turvallisuutta tarkasteltaessa luottamusankkuri on malli, jonka avulla pyritään selvittämään miten turvallisuuden arviointia voidaan toteuttaa ja olla selvillä turvallisuustilanteesta. Andersonin mukaan: “Luottamusankkuri on käytetty komponentti, jolla voidaan toteuttaa turvatoiminto, johon suunnittelija luottaa, mutta jonka luotettavuutta ei voida nimenomaisesti todentaa. Suunnittelija käyttää yhtä tai useampaa komponenttia rakentaakseen suojaustoiminnon, joka sitten määrittää luotetun laskentakannan. Sen määrittelee luotettu laskentaryhmä seuraavasti: koko yksikköön voi luottaa, jos se käyttäytyy aina odotetulla tavalla aiottuun tarkoitukseen käytettynä.”
Esim. sovelluskehittäjälle Trusted Platform Module (TPM) tai Subscriber Identity Moduulit (SIM) ovat luottamuksen juuri, jota kehittäjä käyttää tietoturvasovelluksen rakentamiseen. TPM-suunnittelijalle TPM on yhdistelmä pienempiä komponentteja, jotka yhdessä tarjoavat turvatoiminnot. Alimmilla laitteiston abstraktiokerroksilla perusluottamuksen juuret ovat avaimen turvallinen tallentaminen muistiin tai todellisen satunnaislukugeneraattorin laatu.
Laitteistosuojausta käytetään ohjelmisto- ja järjestelmäturvallisuuden mahdollistajana. Tästä syystä laitteisto tarjoaa perusturvapalveluita, kuten suojatun varastoinnin, eristyksen tai todistuksen. Ohjelmisto tai järjestelmä pitää laitteistoa luotettavana laskentapohjana. Laitteiston on toimittava luotettuna komponenttina alkaen järjestelmien tai sovellusten näkökulmasta. Laitteistototeutus voi kuitenkin rikkoa luottamusolettamaa. Esim. Troijan piirit tai sivukanavahyökkäykset voivat vuotaa avaimen tai muita arkaluonteisia tietoja hyökkääjälle. Eli itse laitteisto tarvitsee myös turvaa. Lisäksi laitteisto tarvitsee suojausta kaikilla abstraktiotasoilla. Siksi jokainen abstraktiokerros, uhkamalli ja siihen liittyvät luottamusoletukset on tehtävä ja suunniteltava turvaisiksi. Vaihtoehtoinen määritelmä luottamuksen juurelle suunnittelun abstraktiokerrosten yhteydessä on: ”Luottamuksen juuri on alemman abstraktiokerroksen komponentti, johon järjestelmä luottaa ja tukeutuu sen turvallisuuteen. Jos luotettavuutta ei voida joko varmistaa tai se varmistetaan pienemmällä laitteistolla, on suunnitteltava abstraktiokerros.”
Uhkamalli (syventävä)¶
Uhkamalli liittyy jokaiseen luottamuksen juureen. Kun käytetään luottamuksen juurta, oletetaan, että uhkamallia ei rikota. Tämä tarkoittaa, että uhkamalliin liittyy myös laitteiston abstraktiokerrokset. Jos tarkastelemme luottamuksen juurta tietyssä abstraktiokerroksessa, silloin kaikki osat, jotka muodostavat tämän luottamuksen juuren, katsotaan myös luotettaviksi.
Esimerkki 1: Suojausprotokollat olettavat, että salainen avain on tallennettu turvallisesti, eikä se ole käytettävissä hyökkääjälle. Luottamuksen juuri, johon protokolla perustuu, on suojatun tiedon saatavuus muistista tämän avaimen suojaamiseksi. Protokollasuunnittelijalle tämä suojattu muisti on musta laatikko. Laitteistosuunnittelijan on hajotettava tämä suojatun muistin vaatimus pienempään vaatimuksien joukkoon alemmalla abstraktiokerroksella:
- Millaista muistia käytetään?
- Millä väylärakenteilla avainta siirretään?
- Millä muilla laitteisto- tai ohjelmistokomponenteilla on pääsy tallennustilaan?
- Voiko sivukanavassa olla vuotoja?
Esimerkki 2: Mallina ohjelmoitaville prosessoreille laitteiston ja ohjelmiston välillä on perinteisesti pidetty Instruction Set Architecture (ISA) -arkkitehtuuria. ISA on se, mikä näkyy ohjelmoijalle ja ISA:n käyttöönotto on jätetty laitteistosuunnittelijan tehtäväksi. ISA:a pidettiin aiemmin ohjelmistosuunnittelijan luottamusrajana. Kun huomioidaan mikroarkkitehtuuriset sivukanavahyökkäykset, kuten Spectre, Meltdown, Foreshadow, ISA-malli ei ole enää musta laatikko, vaan kuten myös mikroarkkitehtuuritiedot ja vuodot, se on hyökkääjän hyödynnettävissä.
Abstaktiotasot (syventävä)¶
Suunnittelussa abstratkiotasoilla tapahtuva hajauttaminen ja pilkkominen yhdessä Electronic Design Automationin (EDA) työkalujen kanssa, on yksi tärkeimmistä syistä, miksi Mooren lain eksponentiaalinen kasvu oli kestävää (ja toteutui) viime vuosikymmeninä ja edelleenkin. Tämä lähestymistapa toimii hyvin erityisesti optimoitaessa suorituskykyä, pinta-alaa, energiaa tai tehonkulutusta. Silti laitteistoturvallisuuden kannalta - suunnittelussa tapahtuva osakokonaisuuksien pilkkominen - ei ole kovinkaan yleistä mutta sitä esiintyy. Turvallisuuden kannalta se on myös huomioitava.
Tässä luvussa järjestetään eri laitteistoturva-aiheet uhkamallien ja luottamuksen juuren mukaisesti laitteistosuunnittelun abstraktiokerroksille, koska muita yleisiä toteutusmekanismeja ei ole saatavilla. Tämän organisoinnin etuna on, että sitä voidaan käyttää eri ala-aiheiden laitteistoturvallisuuden tason tunnistamiseen.
Esimerkkinä salausalgoritmit laitteiston toteutusten kontekstissa. Tekniikan taso on pitkälle kehittynyt ja vahvoja suojatoimia on olemassa salaustoteutuksien suojaamiseen sivukanavahyökkäyksiä vastaan, ks. myöhempi luku. Silti yleisen prosessorien turvallisuuden yhteydessä (esim. prosessin eristämiseen liittyviä tietoja tai turvallisen suorituskyvyn varmistaminen), uusia turvallisuusriskejä havaitaan säännöllisesti.
Taulukossa 21.1 on yhteenvetona koostetu nämä aiheet. Eri abstraktiokerrokset tunnistetaan (ensimmäinen sarake) laitteiston näkökulmasta. Korkein taso (järjestelmä ja ohjelmisto) sijaitsee laitteistoalustan päällä.
Esim. järjestelmän suunnittelija olettaa että suojattu alusta on käytettävissä. Suojattu alusta on luottamuksen perusta, joka tarjoaa turvatoiminnot. Toisessa sarakkeessa kuvataan juuren tarjoamat toiminnoista luottamus. Kolmannessa sarakkeessa kuvataan, kuinka tämä toiminto voidaan toteuttaa.
Esim. osoitteessa korkein abstraktiokerros tämä voi olla luotetun suoritusmoduulin tai suojatun moduulin tarjoama elementti jne. Neljännessä sarakkeessa kuvataan uhkamallit ja hyökkäyskategorian abstraktiokerros.
Esim. järjestelmätasolla järjestelmän suunnittelija olettaa, että he saavat moduulin, joka tarjoaa eristyksen, eheyden, todistuksen jne. Viimeinen sarake kuvaa tyypillistä suunnittelutoimintoa tällä tietyllä suunnittelun abstraktiokerroksella.
Tämä harjoitus toistetaan jokaiselle abstraktiokerrokselle ja kuvataan yksityiskohtaisesti jokaisessa seuraavat osat.
Taulukko 21.1: Uhkamalleihin liittyvät suunnittelun abstraktiotasot, luottamuksen juuret ja suunnittelutoiminnot
Prosessoritasolla voidaan erottaa yleiskäyttöiset ohjelmoitavat prosessorit ja verkkoaluekohtaiset prosessorit. Yleiskäyttöisten prosessorien tulisi tukea laajaa valikoimaa sovelluksia, jotka valitettavasti sisältävät yleensä ohjelmiston haavoittuvuuksia. Laitteiston ominaisuuksia on lisätty näiden ohjelmistohaavoittuvuuksien löytämiseksi (kuten varjopino tai mittaukset), sekä laitteiston eheyden varmistamiseksi. Verkkotunnuskohtaiset prosessorit keskittyvät yleensä rajattuun käyttöön ja niillä on rajoitettu toiminnallisuus. Ne on tyypillisesti kehitetty apuprosessoreiksi suuremmissa järjestelmissä. Tyypillisiä esimerkkejä ovat apuprosessorit, jotka tukevat julkisen avaimen- tai salaisen avaimen -algoritmeja. Prosessoritasolla aika mitataan tyypillisesti käskyjaksoissa.
Sekä yleiskäyttöiset että verkkoaluekohtaiset prosessorit muodostavat laitteen, kertoimet ja ALU:t, muistin ja liitännät. Nämä moduulit ovat tyypillisesti kuvattu rekisterin siirtotasolla: vakioaika ja vastustuskyky sivukanavahyökkäyksiä vastaan ovat keskiössä kun tarkastellaan höykkäyksiä. Aika tällä tasolla mitataan tyypillisesti kellojaksoissa.
Porteista luodaan kertoimet, ALU:t, muistit, yhteenliittymien, väyläinfrastruktuurin ja flip-floppien logiikkatasolla. Tällä suunnittelun abstraktiotasolla painopiste on läpivuodoissa fyysiset sivukanavat, teho-, sähkömagneettiset ja vikahyökkäykset. Aika yleensä mitataan absoluuttisessa ajassa (nsec) käytettävissä olevien standardisolukirjastojen tai FPGA-alustojen perusteella.
Entropialähteiden suunnittelu vaatii tietoa ja näkemystä transistorien käyttäytymisestä ja taustalla olevasta täydentävästä metallioksidipuolijohdetekniikasta (CMOS). Laitteiston turvaprimitiivien merkki on siksi sijoitettu piiriin ja transistoreihin tasolle. Vastaavasti anturien- ja suojausten suunnittelu fyysistä peukalointia vastaan edellyttää syvällisempää näkemystä ja ymmärrystä teknologisista toteuksista. Piiri- ja teknologiatasolla se mitataan absoluuttisessa ajassa, esim. nsec viive tai GHz kellotaajuus.
Taulukon 21.1 tavoitteena ei ole olla täysin täydellinen. Keskeisenä ajatuksena on havainnollistaa jokaista abstraktiokerrosta esimerkin kanssa. Seuraavissa osissa laitteiston tietoturvatavoitteet ja niihin liittyvistä uhkamalleista keskustellaan yksityiskohtaisesti kunkin abstraktiokerroksen suhteen.