Suojausrenkaat ja käyttöoikeudet
Oppikaa x86:n käyttöoikeustasot eli renkaat ja ymmärtäkää, miten ne erottavat käyttöjärjestelmän käyttäjäsovelluksista ja parantavat tietoturvaa.
Suojausrenkaat ja käyttöoikeudet on ilmainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.
Johdanto: suojausrenkaat
Oletteko koskaan pohtineet, miten sovellukset pidetään erillään käyttöjärjestelmästä? Tai miten haitallinen ohjelma ei voi vain ottaa tietokonetta hallintaansa?
Vastaus ovat etuoikeusrenkaat, jotka ovat x86-suorittimien keskeinen suojausominaisuus!
Miksi renkaat? Tietoturva!
Etuoikeusrenkaat muodostavat hierarkkisen rakenteen ohjelmistojen suorittamista varten. Niitä voi ajatella suojaustasoina.
- Eristys: Estää käyttäjäohjelmia kaatamasta käyttöjärjestelmää.
- Tietoturva: Suojaa kriittisiä järjestelmäresursseja.
- Vakaus: Varmistaa järjestelmän luotettavan toiminnan.
Rengas 0: ydin
Rengas 0 on etuoikeuksiltaan korkein taso. Siellä sijaitsee käyttöjärjestelmän ydin.
Ytimellä on suora pääsy kaikkeen laitteistoon, muistiin ja suorittimen ominaisuuksiin. Se on ylin auktoriteetti ja hallitsee kaikkea rajoituksetta.
Rengas 3: käyttäjäsovellukset
Rengas 3 on etuoikeuksiltaan alhaisin taso. Siellä suoritetaan useimmat jokapäiväiset sovellukset.
Käyttäjäsovellusten pääsy laitteistoon ja muistiin on rajoitettu. Niiden on pyydettävä palveluita ytimestä (renkaasta 0) etuoikeutettujen toimintojen suorittamista varten.
x86:n rengashierarkia
x86-arkkitehtuuri määrittelee neljä etuoikeustasoa: renkaat 0, 1, 2 ja 3.
Nykyaikaiset käyttöjärjestelmät, kuten Linux ja Windows, käyttävät kuitenkin yleensä vain seuraavia:
- Rengas 0: käyttöjärjestelmän ytimelle.
- Rengas 3: käyttäjäsovelluksille.
Renkaat 1 ja 2 ovat yleensä käyttämättömiä, mikä yksinkertaistaa useimpien järjestelmien mallia.
CPL: nykyinen etuoikeustaso
Suoritin seuraa parhaillaan suoritettavan koodin nykyistä etuoikeustasoa (Current Privilege Level, CPL).
CPL tallennetaan Code Segment (CS) -rekisteriin, tarkemmin sen kahteen alimpaan bittiin. Se kertoo suorittimelle, missä renkaassa ohjelma parhaillaan toimii.
DPL: segmentin etuoikeustaso
Jokaisella segmentin kuvaajalla, joka määrittelee muistisegmentit, on kuvaajan etuoikeustaso (Descriptor Privilege Level, DPL).
DPL määrittää segmentin käyttämiseen vaadittavan vähimmäisetuoikeustason. Esimerkiksi renkaan 0 koodisegmentin DPL-arvo olisi 0.
RPL: pyytäjän etuoikeustaso
Pyytäjän etuoikeustaso (Requestor Privilege Level, RPL) ilmaisee sen koodin etuoikeustason, joka pyysi pääsyä segmenttiin.
Suoritin käyttää CPL-, DPL- ja RPL-arvoja suojaussääntöjen valvontaan. Esimerkiksi renkaan 3 ohjelma ei voi ladata renkaan 0 koodisegmenttiä, vaikka se yrittäisi huijata järjestelmää.
Siirtymät renkaiden välillä: järjestelmäkutsut
Miten renkaan 3 sovellus pyytää renkaan 0 ydintä suorittamaan jonkin etuoikeutetun toiminnon, kuten tiedostoon kirjoittamisen?
Se käyttää hallittua mekanismia nimeltä järjestelmäkutsu (system call eli syscall). Järjestelmäkutsut toimivat kuin "portit", jotka sallivat turvalliset ja rajatut siirtymät korkeammalle etuoikeustasolle ja takaisin.
IOPL: I/O-porttien hallinta
Suora laitteiston I/O IN- ja OUT-käskyillä vaatii korkeat etuoikeudet. Käyttäjätilan ohjelma (rengas 3), joka yrittää tätä, aiheuttaa yleensä yleisen suojauspoikkeuksen (General Protection Fault).
Suoritin tarkistaa EFLAGS-rekisterin I/O-etuoikeustason (I/O Privilege Level, IOPL). Jos nykyinen etuoikeustaso (CPL) on numeerisesti pienempi tai yhtä suuri kuin IOPL, suora I/O sallitaan. Muussa tapauksessa toiminto estetään.
Tässä esimerkissä yritetään lukea I/O-portista. Nykyaikaisessa käyttöjärjestelmässä tämä todennäköisesti epäonnistuu suojauspoikkeukseen tai ohjelma lopetetaan. Esimerkki havainnollistaa rajoitusta:
; This example illustrates a privileged I/O attempt.
; It is specific to Linux (using int 0x80 for syscalls).
section .data
msg db "Attempting privileged I/O...", 0xA
len equ $ - msg
section .text
global _start
_start:
; Print message using a system call (Ring 3 -> Ring 0 transition)
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout file descriptor
mov ecx, msg ; address of string
mov edx, len ; length of string
int 0x80 ; Invoke Linux kernel (syscall)
; Attempt to read from I/O port 0x60 (e.g., keyboard data)
; This instruction requires sufficient privilege (IOPL <= CPL)
; In a typical Ring 3 user program, this will cause a fault.
in al, 0x60 ; !!! PRIVILEGED INSTRUCTION !!!
; Exit program using a system call
mov eax, 1 ; sys_exit
xor ebx, ebx ; exit code 0
int 0x80 ; Invoke Linux kernel (syscall)Etuoikeusrenkaan tarkistus
Testataan ymmärrystänne etuoikeusrenkaista!
Yhteenveto: renkaat ja tietoturva
Hienoa! Olette oppineet x86:n etuoikeusrenkaista.
- Rengas 0: käyttöjärjestelmän ydin, korkein etuoikeustaso.
- Rengas 3: käyttäjäsovellukset, matalin etuoikeustaso.
- CPL, DPL, RPL: suorittimen mekanismit etuoikeuksien tarkistamiseen.
- Järjestelmäkutsut: hallitut siirtymät korkeammille etuoikeustasoille.
- IOPL: rajoittaa suoraa I/O-käyttöä.
Nämä renkaat ovat olennaisia järjestelmän tietoturvan ja vakauden kannalta, sillä ne eristävät ohjelmiston eri osat toisistaan.
Opi Assembly tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Suojausrenkaat ja käyttöoikeudet” ilmainen?
Kyllä – oppitunnin ”Suojausrenkaat ja käyttöoikeudet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssin, päivitä CoddyKit PROhon. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Suojausrenkaat ja käyttöoikeudet”?
Oppikaa x86:n käyttöoikeustasot eli renkaat ja ymmärtäkää, miten ne erottavat käyttöjärjestelmän käyttäjäsovelluksista ja parantavat tietoturvaa. Harjoittelet Assembly-kieli ja x86-tason järjestelmäohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Assembly-kieli ja x86-tason järjestelmäohjelmointi-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Suojausrenkaat ja käyttöoikeudet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunnilla?
Kyllä. Jokainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Sivutus ja muistinhallintayksikkö (MMU)
- Suojausrenkaat ja käyttöoikeudet
- Hypervisorit ja virtualisoinnin perusteet
- Segmentointi ja Global Descriptor Table (GDT)