Käyttöjärjestelmän eheys
Tietoturva on Applen käyttöjärjestelmäohjelmistojen suunnittelun keskiössä. Suunnitteluun kuuluvat laitetason luottamuksen perusta (RoT, Root of Trust), jota käytetään mahdollistamaan suojattu käynnistys, sekä nopea ja turvallinen suojattu ohjelmistopäivitysprosessi. Applen käyttöjärjestelmät käyttävät myös siruun pohjautuvia laitteisto-ominaisuuksiaan, jotka on erityisesti tehty auttamaan estämään hyväksikäyttöä, kun käyttöjärjestelmä on toiminnassa. Nämä ajonaikaiset ominaisuudet suojaavat luotetun koodin eheyttä, kun sitä suoritetaan. Lyhyesti sanottuna Applen käyttöjärjestelmäohjelmisto auttaa torjumaan hyökkäys- ja hyväksikäyttötekniikoita riippumatta siitä, tulevatko ne haitallisesta apista, verkosta tai mistä tahansa muusta kanavasta. Tässä luetellut suojaukset ovat saatavilla tuetulla Applen suunnittelemalla järjestelmäpiirillä varustetuissa laitteissa iOS:ssä, iPadOS:ssä, tvOS:ssä, watchOS:ssä sekä uusimpana macOS:ssä Apple siliconilla varustetussa Macissa.
Ominaisuus | A10 | A11, S3 | A12, A13, A14 S4–S9 | A15, A16, A17 | M1, M2, M3 |
Katso huomautus 1 alla. | |||||
Katso huomautus 2 alla. |
Huomautus 1: Page Protection Layer (PPL) vaatii, että alusta suorittaa ainoastaan allekirjoitettua ja luotettua koodia. Tämä suojausmalli ei ole käytössä macOS:ssä.
Huomautus 2: Secure Page Table Monitor (SPTM) on tuettu seuraavissa: A15, A16 ja A17. Se korvaa Page Protection Layerin tuetuilla alustoilla.
Kernelin eheyden suojaus
Kun käyttöjärjestelmän kernel saa valmistelun tehtyä, otetaan käyttöön kernelin eheyden suojaus (KIP), jonka tehtävä on auttaa estämään kernelin ja ajurien koodin muutoksia. Muistiohjain tarjoaa suojatun fyysisen muistitilan, jota iBoot käyttää kernelin ja kernelin laajennusten lataamiseen. Kun käynnistys on valmis, muistiohjain kieltää kirjoittamisen suojatulle fyysiselle muistialueelle. Appeja suorittavan prosessorin muistinhallintayksikkö (MMU) on määritetty auttamaan estämään etuoikeutetun koodin peilaus suojatun muistialueen ulkopuolella olevasta fyysisestä muistista ja auttamaan estämään fyysisen muistin kirjoitettavat peilaukset kernelin muistialueelle.
Uudelleenmäärityksen estämiseksi kernelin eheyden suojauksen käyttöönottanut laitteisto lukitaan käynnistysprosessin valmistumisen jälkeen.
Nopeat luparajoitukset
Apple A11 Bionic- ja S3-järjestelmäpiireistä lähtien, piireihin on lisätty uusi laitteiston primitiivi nimeltään nopeat luparajoitukset. Nämä rajoitukset sisältävät prosessorirekisterin, jolla voidaan rajoittaa lupia nopeasti ja säiekohtaisesti. Nopeiden luparajoitusten (joita kutsutaan myös APRR-rekistereiksi) ansiosta tuetut käyttöjärjestelmät voivat nopeasti rajoittaa muistin lupia ilman järjestelmäkutsun mukanaan tuomaa lisäkuormaa ja sivutaulukon läpikäyntiä tai tyhjennystä. Nämä rekisterit vähentävät vielä yhdellä tasolla verkosta tulevien hyökkäysten vaaraa erityisesti ajonaikaisesti käännettävän (JIT-käännettävän) koodin tapauksessa, koska muistia ei voida suorittaa tehokkaasti samaan aikaan kuin sitä luetaan tai siihen kirjoitetaan.
Järjestelmän lisäprosessorin eheyden suojaus
Lisäprosessorin laiteohjelmisto käsittelee monia tärkeitä järjestelmätehtäviä, kuten Secure Enclavea, kuvasensoriprosessoria ja liikeapuprosessoria. Siksi sen suojaus on tärkeä osa järjestelmän tietoturvaa. Lisäprosessorin laiteohjelmiston muutosten estämiseksi Apple käyttää mekanismia nimeltä järjestelmän lisäprosessorin eheyden suojaus (System Coprocessor Integrity Protection, SCIP).
SCIP toimii pitkälti kuten kernelin eheyden suojaus (KIP): Käynnistyksessä iBoot lataa jokaisen lisäprosessorin laiteohjelmiston suojatulle muistialueelle, joka on tarkoitukseen varattu ja erotettu kernelin eheyden suojausalueesta. iBoot määrittää jokaisen lisäprosessorin muistiyksiköt auttaakseen estämään seuraavia:
suoritettavat peilaukset (mapping) sen suojatun muistialueen ulkopuolella
kirjoitettavat peilaukset sen suojatun muistialueen sisäpuolella
Myös Secure Enclaven käyttöjärjestelmää käytetään Secure Enclaven SCIPin määritystä varten käynnistyksen aikana. Kun käynnistymisprosessi on valmis, järjestelmän lisäprosessorin eheyden suojauksen käyttöönottoon käytetty laitteisto lukitaan. Tämä on suunniteltu estämään uudelleenmääritystä.
PAC-koodit
PAC (Pointer Authentication Codes) -koodeja käytetään suojaamaan muistin korruptoitumisvirheiden hyödyntämiseltä. Järjestelmäohjelmisto ja sisäiset apit käyttävät PAC-koodia apuna estämään funktio-osoittimien ja paluuosoitteiden (koodiosoittimien) muokkausta. PAC käyttää viittä salaista 128-bittistä arvoa kernelin käskyjen ja datan allekirjoittamiseen, ja jokaisella käyttäjätilaprosessilla on omat B-avaimet. Kohteet on suolattu ja allekirjoitettu alla kuvatulla tavalla:
Kohde | Avain | Suola |
---|---|---|
Funktion paluuosoite | IB | Tallennustilan osoite |
Funktio-osoittimet | IA | 0 |
Lohkon kutsufunktio | IA | Tallennustilan osoite |
Objective-C-menetelmän välimuisti | IB | Tallennustilan osoite + luokka + valitsin |
C++ V-tauluarvot | IA | Tallennustilan osoite + tiiviste (sekoitettu menetelmän nimi) |
Laskettu Goto-etiketti | IA | Tiiviste (funktion nimi) |
Kernel-säikeen tila | GA | • |
Käyttäjäsäikeen tilarekisterit | IA | Tallennustilan osoite |
C++ V-taulu-osoittimet | DA | 0 |
Allekirjoitusarvo säilytetään 64-bittisen osoittimen yläosan käyttämättömissä täytebiteissä. Allekirjoitus varmennetaan ennen käyttöä, ja täyte palautetaan, mikä auttaa varmistamaan osoittimen osoitteen toimivuuden. Tulosten tarkistuksen epäonnistuminen johtaa keskeytymiseen. Tämä vahvistus lisää monien hyökkäysten vaikeutta, kuten ROP-hyökkäysten (return-oriented programming), jotka yrittävät huijata laitteen suorittamaan olemassa olevaa haitallista koodia manipuloimalla toiminnon paluuosoitetta, joka on tallennettu pinoon.
Page Protection Layer (PPL)
iOS:n, iPadOS:n ja watchOS:n Page Protection Layer -ominaisuus (PPL) on suunniteltu estämään käyttäjätilan koodin muokkaukset sen jälkeen, kun koodin allekirjoituksen tarkistus on valmis. PPL perustuu kernelin eheyden suojaukseen ja nopeisiin luparajoituksiin, ja se hallitsee sivutaulukkojen oikeuksien ohituksia. Näin varmistetaan, että vain PPL voi muokata suojattuja sivuja, jotka sisältävät käyttäjän koodia ja sivutaulukkoja. PPL pienentää hyökkäysmahdollisuuksia merkittävästi tukemalla järjestelmänlaajuista koodin eheyden vahvistusta silloinkin, kun kernel on vaarantunut. Tätä suojausta ei ole tarjolla macOS:ssä, koska PPL on käytettävissä ainoastaan järjestelmissä, joissa vaaditaan kaiken suoritettavan koodin olevan allekirjoitettua.
Secure Page Table Monitor ja Trusted Execution Monitor
Secure Page Table Monitor (SPTM) ja Trusted Execution Monitor (TXM) on suunniteltu toimimaan yhdessä niin, että ne auttavat suojaamaan sekä käyttäjän että kernelin prosessien sivutaulukoita muokkaamista vastaan myös silloinkin, kun hyökkääjillä on kernelin kirjoitusominaisuudet ja he voivat ohittaa hallinnan kulun suojaukset. SPTM tekee tämän hyödyntämällä korkeampaa oikeustasoa kerneliin nähden ja lisäksi hyödyntämällä TXM:n matalampia oikeustasoja. Näin se toimeenpanee koodin suorittamista hallitsevat käytännöt. Tämä järjestelmä on suunniteltu siten, että TXM:n vaarantuminen ei muutu automaattisesti SPTM:n ohitukseksi johtuen tästä oikeustasojen erottamisesta ja niiden välisen luottamuksen hallinnasta. A15-, A16- ja A17-järjestelmäpiireissä SPTM (yhdessä TXM:n kanssa) korvaa PPL:n. Näin hyökkäyspintaa on vähemmän eikä se ole kernelin luottamuksesta riippuvainen edes käynnistyksen alkuvaiheessa. SPTM nojaa lisäksi uuden sirun primitiiveihin, jotka edustavat PPL:n hyödyntämien nopeiden luparajoitusten kehitysvaihetta.