Windows Internals
Processer, Threads, Virtuelt Adresserum og Paging
En proces er et program under udførelse. Den fungerer som en container for ressourcer:
-
Hukommelsesområde (adresserum)
-
Filhåndtag og netværksforbindelser
-
Sikkerhedstokens og rettigheder
-
Mindst én thread til at udføre kode
En proces kan ikke selv udføre kode - den har brug for mindst én thread.
Vigtige punkter om processer:
-
Hver proces er isoleret fra andre processer
-
Har sit eget virtuelt adresserum
-
Deler ikke hukommelse direkte med andre processer
-
Når processen afsluttes, frigives alle dens ressourcer
Threads (Tråde)
En thread er den faktiske udførbare enhed inden i en proces:
-
Kontrollerer udførelsen af processens kode
-
Hver proces har minimum én thread (main thread)
-
Operativsystemet planlægger threads, ikke processer
-
Threads inden for samme proces deler hukommelse og ressourcer
Main Thread
-
Oprettes automatisk når processen starter
-
Starter udførelsen ved programmets entry point (f.eks.
main()funktion) -
Når main thread afsluttes, terminerer hele processen typisk
Multithreading
-
En proces kan oprette flere threads
-
Alle threads i samme proces deler det samme virtuelt adresserum
-
Gør det muligt at udføre flere opgaver samtidig
Hvorfor threads er mål for angreb:
-
Kontrollerer udførelsen af kode
-
Kan misbruges til at udføre ondsindet kode
-
Bruges ofte i kombination med andre API-kald som del af angrebsteknikker
Virtuelt Adresserum
Virtuelt adresserum er et abstraktionslag mellem processen og fysisk RAM.
Størrelser:
- 32-bit systemer: 4 GB virtuelt adresserum pr. proces
-
Typisk 2 GB til brugermode
-
2 GB til kernelmode
-
64-bit systemer: Teoretisk enorm størrelse (f.eks. 128 TB på Windows x64)
Abstraktion:
Processen ser:
-
Et kontinuerligt, stort adresserum
-
Normale læse/skrive operationer
-
Ingen forskel på RAM vs. disk
Processen ved IKKE:
-
Om data er i RAM eller på disk
-
Hvor meget fysisk RAM der er tilgængeligt
-
At andre processer deler den fysiske hukommelse
-
At hukommelsen bliver swappet til/fra disk
MMU
MMU (Memory Management Unit) er hardware i CPU'en der oversætter virtuelle adresser til fysiske RAM-adresser.
Paging (Sideveksel)
Paging er mekanismen operativsystemet bruger når der ikke er nok fysisk RAM.
Hvad sker der:
-
Hukommelsen opdeles i 4 KB blokke kaldet "pages"
-
Når RAM bliver fuld, flyttes mindst brugte pages til disken (page file)
-
Hvis en process har brug for en page der er på disk, indlæses den ind i RAM igen
-
Processen opdager aldrig denne forskel - alt håndteres automatisk af OS
Page Fault:
Når en proces prøver at tilgå data der er på disk i stedet for RAM, stopper CPU'en kort, OS indlæser data fra disk, og processen fortsætter.
Hvorfor Dette er Vigtigt for Malware Analyse?
-
Process Injection: Malware kan inject kode i andre processers adresserum
-
Thread Hijacking: Malware kan kapre eksisterende threads
-
Memory Dumping: Analyse af proceshukommelse for at finde skjult malware
-
Paging analyse: Malware kan gemme sig i swapped pages
-
Virtual Memory: Forståelse af hvordan malware allokerer og bruger hukommelse
DLL (Dynamic Link Library)
Hvad er en DLL?
-
Dynamic Link Library
-
En fil med "reusable"" kode som flere programmer kan bruge på samme tid
-
Filendelse:
.dll
Fordele
-
Genanvendelse: Samme kode bruges af flere programmer
-
Mindre plads: Programmer bliver mindre (deler fælles kode)
-
Opdateringer: Ret en bug ét sted, alle programmer får rettelsen
-
Modulært: Opdel program i mindre dele
To måder at indlæse DLL'er
1. Load-time linking (indlæsning ved opstart)
-
DLL indlæses automatisk når programmet starter
-
Hvis DLL mangler → programmet starter ikke
-
Enkleste metode
2. Run-time linking (indlæsning under kørsel)
-
Programmet indlæser DLL'en når den skal bruges
-
Mere fleksibelt
-
Kan håndtere manglende DLL'er elegant
-
Bruges med
LoadLibrary()funktion
Ulemper
-
DLL Hell: Konflikter mellem forskellige versioner
-
Afhængigheder: Program kræver specifikke DLL'er for at virke
-
Sikkerhed: DLL'er kan udskiftes med ondsindede versioner
Grundlæggende API koncept
-
Windows API = interface til at kommunikere med Windows operativsystem
-
Primært Win32 API (også Win64 API findes)
-
Windows kernel styrer alle programmer og hardware-interaktioner
Processor modes
User Mode (Brugerland)
-
Ingen direkte hardware-adgang
-
Hver proces får sit eget private virtuelle adresserum
-
Adgang kun til "egen" hukommelse
-
Her kører normale programmer som standard
Kernel Mode
-
Direkte hardware-adgang
-
Kører i ét delt virtuelt adresserum
-
Adgang til hele den fysiske hukommelse
-
Her kører Windows kernen
Switching Point
- Programmer skifter fra user mode til kernel mode når de laver:
-
System calls
-
API calls
-
Dette er "switching point", altså skiftepunktet mellem modes
Eksempel: Hukommelsesmanipulation
Fire trin til at inject en message box i proces-hukommelse:
1. OpenProcess()
-
Få et "handle" (reference) til processen
-
Specificer adgangsrettigheder
2. VirtualAllocEx()
-
Allokér (reservér) hukommelse i processen
-
Definér størrelse og rettigheder (læse/skrive/eksekvere)
3. WriteProcessMemory()
- Skriv data (payload) til den allokerede hukommelse
4. CreateRemoteThread()
-
Eksekvér koden fra hukommelsen
-
Starter en ny tråd der kører din kode
Sikkerhedsperspektiv
Windows internals kan misbruges af angribere fordi: - De er fundamentale for OS - kan ikke ændres
-
Giver kraftfulde muligheder for hukommelsesmanipulation
-
Samme koncepter findes i Unix/Linux systemer
Selvom ethvert User Mode-program teknisk set kan kalde OpenProcess(), som udløser et skifte til Kernel Mode, garanterer dette ikke succes. Windows-kernen håndhæver strenge adgangsrettigheder ved at tjekke det kaldende programs sikkerhedstoken og dets integritetsniveau mod den proces, der forsøges åbnet. Hvis det angribende program ikke kører med tilstrækkelige privilegier (f.eks. som Administrator eller System), vil kernen afvise anmodningen om at få et handle med de nødvendige rettigheder (som f.eks. PROCESS_VM_WRITE), og OpenProcess() vil fejle med en ACCESS_DENIED-fejl. Derfor vil trusselsaktører forsøge at øge deres brugerrettigheder via "Privilege Escalation".
Sources
https://learn.microsoft.com/en-us/windows/win32/procthread/about-processes-and-threads
https://learn.microsoft.com/en-us/windows/win32/memory/virtual-address-space
https://learn.microsoft.com/en-us/troubleshoot/windows-client/performance/introduction-to-the-page-file
https://learn.microsoft.com/en-us/windows/win32/dlls/about-dynamic-link-libraries
https://johndcyber.com/the-most-commonly-exploited-windows-apis-a-security-professionals-guide-d53acf201034
https://tryhackme.com/room/windowsinternals
Bemærkning
Noterne er struktureret og rettet med hjælp af LLM'en Claude.