Protectieringen en privileges
Leer meer over de x86-privilegeniveaus (ringen) en hoe deze scheiding en beveiliging tussen het besturingssysteem en gebruikerstoepassingen afdwingen.
Protectieringen en privileges is een gratis Assemblytaal en x86-programmeren voor systemen op laag niveau-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Assemblytaal en x86-programmeren voor systemen op laag niveau. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Assemblytaal en x86-programmeren voor systemen op laag niveau bevat in totaal 4 lessen.
Introductie: beschermingsringen
Heb je je ooit afgevraagd hoe je apps gescheiden worden gehouden van het besturingssysteem? Of hoe een kwaadaardig programma niet zomaar je computer kan overnemen?
Het antwoord ligt in privilegeringen, een belangrijke beveiligingsfunctie van x86-processors!
Waarom ringen? Beveiliging!
Privilegeringen creëren een hiërarchische structuur voor het uitvoeren van software. Zie ze als beveiligingsniveaus.
- Isolatie: voorkomt dat gebruikersprogramma's het besturingssysteem laten crashen.
- Beveiliging: beschermt kritieke systeembronnen.
- Stabiliteit: zorgt ervoor dat het systeem betrouwbaar werkt.
Ring 0: de kernel
Ring 0 is het niveau met de meeste bevoegdheden. Hier bevindt zich de kernel van het besturingssysteem.
De kernel heeft rechtstreeks toegang tot alle hardware, het geheugen en de functies van de CPU. Hij is de hoogste autoriteit en beheert alles zonder beperkingen.
Ring 3: gebruikerstoepassingen
Ring 3 is het niveau met de minste bevoegdheden. Hier worden de meeste dagelijkse toepassingen uitgevoerd.
Gebruikerstoepassingen hebben beperkte toegang tot hardware en geheugen. Ze moeten de kernel (Ring 0) om diensten vragen om bewerkingen met extra bevoegdheden uit te voeren.
De x86-ringhiërarchie
De x86-architectuur definieert 4 bevoegdheidsniveaus: Ring 0, Ring 1, Ring 2 en Ring 3.
Moderne besturingssystemen zoals Linux en Windows gebruiken echter meestal alleen:
- Ring 0: voor de kernel van het besturingssysteem.
- Ring 3: voor gebruikerstoepassingen.
Ring 1 en Ring 2 worden meestal niet gebruikt, waardoor het model voor de meeste systemen eenvoudiger blijft.
CPL: huidige bevoegdheid
De CPU houdt het Current Privilege Level (CPL) bij van de code die momenteel wordt uitgevoerd.
Het CPL wordt opgeslagen in het Code Segment (CS)-register, specifiek in de laagste twee bits. Het vertelt de CPU in welke ring het programma momenteel werkt.
DPL: bevoegdheid van segment
Elke segmentdescriptor, die geheugensegmenten definieert, heeft een Descriptor Privilege Level (DPL).
Het DPL geeft het minimale bevoegdheidsniveau aan dat nodig is om toegang te krijgen tot dat segment. Een codesegment van Ring 0 heeft bijvoorbeeld een DPL van 0.
RPL: bevoegdheid van aanvrager
Het Requestor Privilege Level (RPL) geeft het bevoegdheidsniveau aan van de code die toegang tot een segment heeft aangevraagd.
De CPU gebruikt CPL, DPL en RPL om beveiligingsregels af te dwingen. Een programma in Ring 3 kan bijvoorbeeld geen codesegment van Ring 0 laden, zelfs niet als het probeert het systeem te misleiden.
Ringovergangen: systeemaanroepen
Hoe vraagt een toepassing in Ring 3 aan de kernel in Ring 0 om iets met extra bevoegdheden te doen, zoals naar een bestand schrijven?
Daarvoor gebruikt de toepassing een gecontroleerd mechanisme dat een systeemaanroep of syscall wordt genoemd. Systeemaanroepen zijn als "poorten" die veilige, beperkte overgangen naar een hoger bevoegdheidsniveau en terug mogelijk maken.
IOPL: beheer van I/O-poorten
Rechtstreekse hardware-I/O via de instructies IN en OUT vereist zeer veel bevoegdheden. Een programma in gebruikersmodus (Ring 3) dat dit probeert, veroorzaakt meestal een General Protection Fault.
De CPU controleert het I/O Privilege Level (IOPL) in het EFLAGS-register. Als het Current Privilege Level (CPL) numeriek kleiner dan of gelijk aan IOPL is, is rechtstreekse I/O toegestaan. Anders wordt de bewerking geblokkeerd.
Dit voorbeeld probeert uit een I/O-poort te lezen. Op een modern besturingssysteem mislukt dit waarschijnlijk met een beveiligingsfout of wordt het programma beëindigd. Het toont de beperking:
; 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)Controle van de privilegering
Laten we testen of je de privilegeringen begrijpt!
Samenvatting: ringen en beveiliging
Goed gedaan! Je hebt de x86-privilegeringen geleerd.
- Ring 0: kernel van het besturingssysteem, hoogste bevoegdheid.
- Ring 3: gebruikerstoepassingen, laagste bevoegdheid.
- CPL, DPL, RPL: mechanismen van de CPU voor bevoegdheidscontroles.
- Systeemaanroepen: gecontroleerde overgangen naar hogere bevoegdheidsniveaus.
- IOPL: beperkt rechtstreekse toegang tot I/O.
Deze ringen zijn essentieel voor de beveiliging en stabiliteit van het systeem, omdat ze verschillende softwareonderdelen van elkaar isoleren.
Leer Assembly met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Protectieringen en privileges” gratis?
Ja — de volledige tekst van “Protectieringen en privileges” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Assemblytaal en x86-programmeren voor systemen op laag niveau wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Assemblytaal en x86-programmeren voor systemen op laag niveau bevat in totaal 4 lessen.
Wat leer ik in “Protectieringen en privileges”?
Leer meer over de x86-privilegeniveaus (ringen) en hoe deze scheiding en beveiliging tussen het besturingssysteem en gebruikerstoepassingen afdwingen. Je oefent met Assemblytaal en x86-programmeren voor systemen op laag niveau door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Assemblytaal en x86-programmeren voor systemen op laag niveau te beginnen?
Ervaring vooraf is niet nodig. Assemblytaal en x86-programmeren voor systemen op laag niveau op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Protectieringen en privileges”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Assemblytaal en x86-programmeren voor systemen op laag niveau?
Ja. Elke les over Assemblytaal en x86-programmeren voor systemen op laag niveau bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Paging en Memory Management Unit (MMU)
- Protectieringen en privileges
- Basisprincipes van hypervisors en virtualisatie
- Segmentatie en de Global Descriptor Table (GDT)