Skip to content

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

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.