X86- ja ARMv8-A-käskykanta-arkkitehtuurien suojausrenkaat ja niiden tarjoama tietoturva
Järvilehto, Joel (2022)
Järvilehto, Joel
2022
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. Only for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2022-06-03
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202205315390
https://urn.fi/URN:NBN:fi:tuni-202205315390
Tiivistelmä
Moderneissa käskykanta-arkkitehtuureissa toimii yhtenä järjestelmän tietoturvallisuutta edistävänä komponenttina suojausrenkaat (engl. protection rings). Suojausrenkaiden avulla järjestelmässä voidaan jakaa eri käyttöoikeuksille rajattuja resursseja ja turvata käyttöjärjestelmän ytimen tärkeitä prosesseja sekä muistia väärältä käytöltä. Työssä tutkitaan kahden erittäin laajasti käytetyn käskykanta-arkkitehtuurin suojausrenkaiden toimintaa, eroavaisuuksia suojausrenkaiden toteutuksissa sekä esitellään mahdollisia parannuksia suojausrenkaiden toimintaan järjestelmässä.
Käskykanta-arkkitehtuuri määrittää, kuinka konekieliset käskyt tulisi muotoilla, jotta suorittimen ohjausyksikkö osaa tulkita niitä. Tutkielmassa tarkastellaan x86-käskykanta-arkkitehtuuria, joka perustuu CISC-arkkitehtuuriin (Complex Instruction Set Computer) sekä ARMv8-A-käskykanta-arkkitehtuuria, joka perustuu RISC-arkkitehtuuriin (Reduced Instruction Set Computer).
Tutkielmassa käytettävä materiaali perustuu suojausrenkaista löytyvään kirjallisuuteen sekä käskykanta-arkkitehtuurien valmistajien dokumentaatioon. Suojausrenkaat ovat käskykanta-arkkitehtuureissa esiintyneet jo pitkään, joten kirjallisuutta aiheesta on laajasti saatavilla.
Tutkielman aikana huomataan, että vaikka suojausrenkaiden toteutus ja terminologia hieman eroavat kahden tutkittavan käskykanta-arkkitehtuurin välillä, on suojausrenkaiden toiminnallisuus molemmissa arkkitehtuureissa hyvin samankaltainen. Järjestelmässä molempien arkkitehtuurien suojausrenkaat tarjoavat saman primaarisen funktion, eli rajattujen resurssien suojaamisen tietylle käyttöoikeustasolle. X86-arkkitehtuuri tarjoaa selkeän hierarkkisen jaon käyttöoikeustasojensa välillä, kun ARMv8-A-arkkitehtuuri mahdollistaa enemmän erilaisia toteutuksia käyttöoikeustasoille. Yleisesti järjestelmässä käytetään vain kahta eri käyttöoikeustasoa: käyttäjätasoa sekä suojattua tasoa. Suojautulla tasolla toimii yleensä käyttöjärjestelmän ydin ja käyttöjärjestelmän ajurit. Käyttäjätasolla puolestaan suoritetaan ohjelmat, jotka eivät vaadi suojatun tason resursseja.
Suojausrenkaiden toimintaa järjestelmässä voidaan parantaa ottamalla käyttöön useampia eri käyttöoikeustasoja. Järjestelmän ydin sekä itse käyttöjärjestelmä voisivat toimia eri tasoilla, jolloin ytimen kriittisimmät resurssit olisivat vielä yhden käyttöoikeustason takana irtautettuna käyttöjärjestelmästä. Suojausrenkaat voitaisiin myös erotella toisistaan hyödyntämällä virtualisointia, jonka avulla yksittäinen haavoittuva ajuri ei vaaranna koko järjestelmän luotettavuutta.
Käskykanta-arkkitehtuuri määrittää, kuinka konekieliset käskyt tulisi muotoilla, jotta suorittimen ohjausyksikkö osaa tulkita niitä. Tutkielmassa tarkastellaan x86-käskykanta-arkkitehtuuria, joka perustuu CISC-arkkitehtuuriin (Complex Instruction Set Computer) sekä ARMv8-A-käskykanta-arkkitehtuuria, joka perustuu RISC-arkkitehtuuriin (Reduced Instruction Set Computer).
Tutkielmassa käytettävä materiaali perustuu suojausrenkaista löytyvään kirjallisuuteen sekä käskykanta-arkkitehtuurien valmistajien dokumentaatioon. Suojausrenkaat ovat käskykanta-arkkitehtuureissa esiintyneet jo pitkään, joten kirjallisuutta aiheesta on laajasti saatavilla.
Tutkielman aikana huomataan, että vaikka suojausrenkaiden toteutus ja terminologia hieman eroavat kahden tutkittavan käskykanta-arkkitehtuurin välillä, on suojausrenkaiden toiminnallisuus molemmissa arkkitehtuureissa hyvin samankaltainen. Järjestelmässä molempien arkkitehtuurien suojausrenkaat tarjoavat saman primaarisen funktion, eli rajattujen resurssien suojaamisen tietylle käyttöoikeustasolle. X86-arkkitehtuuri tarjoaa selkeän hierarkkisen jaon käyttöoikeustasojensa välillä, kun ARMv8-A-arkkitehtuuri mahdollistaa enemmän erilaisia toteutuksia käyttöoikeustasoille. Yleisesti järjestelmässä käytetään vain kahta eri käyttöoikeustasoa: käyttäjätasoa sekä suojattua tasoa. Suojautulla tasolla toimii yleensä käyttöjärjestelmän ydin ja käyttöjärjestelmän ajurit. Käyttäjätasolla puolestaan suoritetaan ohjelmat, jotka eivät vaadi suojatun tason resursseja.
Suojausrenkaiden toimintaa järjestelmässä voidaan parantaa ottamalla käyttöön useampia eri käyttöoikeustasoja. Järjestelmän ydin sekä itse käyttöjärjestelmä voisivat toimia eri tasoilla, jolloin ytimen kriittisimmät resurssit olisivat vielä yhden käyttöoikeustason takana irtautettuna käyttöjärjestelmästä. Suojausrenkaat voitaisiin myös erotella toisistaan hyödyntämällä virtualisointia, jonka avulla yksittäinen haavoittuva ajuri ei vaaranna koko järjestelmän luotettavuutta.