Grundlæggende reverse engineering og binæranalyse · Lektion

Identifikation af sårbarheder i binære filer

Identificér almindelige sårbarheder som bufferoverløb, formatstrengsfejl og heltalsoverløb i binære filer.

Lektion 1 af 411 trin

Identifikation af sårbarheder i binære filer er en gratis Grundlæggende reverse engineering og binæranalyse-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Grundlæggende reverse engineering og binæranalyse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende reverse engineering og binæranalyse-kurset indeholder 4 lektioner i alt.

Introduktion til binære sårbarheder

Velkommen! I reverse engineering er det afgørende at forstå sårbarheder. Det er fejl i software, som en angriber kan udnytte til at få kontrol eller forårsage skade.

Vi undersøger almindelige typer, der findes i kompilerede binærfiler, med fokus på hvordan de opstår, og hvordan de ser ud.

Bufferoverløb forklaret

En buffer er en sammenhængende blok hukommelse, der er allokeret til at indeholde data som et array eller en streng. Tænk på den som en beholder med fast størrelse.

  • Bufferoverløb: Opstår, når et program forsøger at skrive flere data til en buffer, end den kan indeholde.
  • De ekstra data "flyder over" i tilstødende hukommelsesområder og kan potentielt ødelægge andre data eller endda overskrive vigtige programinstruktioner.

En enkel buffer i C

Her er et grundlæggende C-program, der bruger en buffer med fast størrelse. Bemærk linjen char buffer[10];, som reserverer 10 bytes til vores streng.

Kør denne kode for at se, hvordan en streng passer ind i bufferen.

#include <stdio.h>
#include <string.h>

int main() {
  char buffer[10]; // A buffer of 10 characters
  strcpy(buffer, "Hello"); // Copy "Hello" into buffer
  printf("Buffer content: %s\n", buffer);
  return 0;
}

Udløsning af et bufferoverløb

Hvad sker der, hvis vi forsøger at kopiere en streng, der er længere end 10 tegn, ind i vores buffer? Funktionen strcpy kontrollerer ikke grænserne, så den bliver bare ved med at skrive.

Det kan føre til:

  • Programnedbrud (segmenteringsfejl).
  • Ødelæggelse af tilstødende data.
  • Mulig udførelse af skadelig kode (avanceret udnyttelse).

Moderne compilere og operativsystemer har beskyttelse, men selve sårbarheden består.

Fejl i formatstrenge

Sårbarheder i formatstrenge opstår, når et program bruger brugerleveret input som argumentet for formatstrengen i funktioner som printf() eller sprintf().

Formatstrengen (f.eks. "%s", "%d") fortæller printf, hvordan efterfølgende argumenter skal fortolkes og udskrives. Hvis en angriber kontrollerer denne streng, kan vedkommende:

  • Læse data fra stakken.
  • Skrive vilkårlige data til vilkårlige hukommelsesadresser.

Sårbarhed i formatstreng

Dette eksempel viser, hvordan en angriber kan bruge formatspecifikationer til at kigge på hukommelsen i stakken. Funktionen printf forventer argumenter, der passer til dens formatstreng.

Hvis formatstrengen kommer fra input, der ikke er pålideligt, kan den misbruges.

#include <stdio.h>
#include <string.h>

int main() {
  char input[20];
  strcpy(input, "%p %p %p %p"); // Malicious input

  printf("User input as format string:\n");
  printf(input); // Vulnerable call: no format string provided by developer
  printf("\n");
  return 0;
}

Forståelse af heltalsoverløb

Computere gemmer tal ved hjælp af et fast antal bits. Et heltalsoverløb opstår, når en aritmetisk operation forsøger at danne en numerisk værdi, der er for stor til at kunne repræsenteres inden for den tilgængelige lagerplads.

  • For heltal uden fortegn "ruller" værdien rundt til nul.
  • For heltal med fortegn kan den rulle rundt til et stort negativt tal.

Det kan føre til uventet adfærd, bufferoverløb (f.eks. hvis en beregnet størrelse er for lille) eller omgåelse af sikkerhedskontroller.

Heltalsoverløb i praksis

Se, hvad der sker, når vi lægger 1 til den størst mulige værdi for en unsigned int. Den "flyder over" og ruller tilbage til nul.

Denne uventede adfærd kan udnyttes, hvis resultatet bruges til allokering af hukommelse eller som tæller i løkker.

#include <stdio.h>
#include <limits.h> // For UINT_MAX

int main() {
  unsigned int max_val = UINT_MAX; // Maximum unsigned int value
  unsigned int overflow_val = max_val + 1;

  printf("Max unsigned int: %u\n", max_val);
  printf("Max unsigned int + 1: %u\n", overflow_val); // Will be 0
  return 0;
}

Forebyggelse af sårbarheder

Disse sårbarheder skyldes ofte usikre programmeringsmetoder, især i sprog som C/C++, der giver direkte adgang til hukommelsen.

  • Bufferoverløb: Brug funktioner, der kontrollerer grænser (f.eks. strncpy, snprintf), eller sprog/biblioteker på højere niveau.
  • Fejl i formatstrenge: Angiv altid en konstant formatstrengsliteral til funktioner, der minder om printf, og brug aldrig brugerinput.
  • Heltalsoverløb: Validér input, udfør intervalkontroller, og brug større datatyper eller aritmetik med vilkårlig præcision, når det er nødvendigt.

Tjek af sårbarheder

Hvilke af følgende scenarier beskriver en almindelig binær sårbarhed?

Opsummering og næste trin

Godt gået! Du er nu blevet introduceret til tre grundlæggende binære sårbarheder:

  • Bufferoverløb: Skrivning ud over en buffers allokerede hukommelse.
  • Fejl i formatstrenge: Forkert brug af formatspecifikationer i udskrivningsfunktioner.
  • Heltalsoverløb: Tal, der overskrider deres lagerkapacitet og ruller rundt.

Det er afgørende at forstå disse for at kunne analysere binærfiler og identificere potentielle svage punkter. Nu ser vi på, hvordan du kan finde disse fejl ved hjælp af automatiserede værktøjer!

Gratis at komme i gang

Lær Assembly med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Identifikation af sårbarheder i binære filer” gratis?

Ja — alle 3 lektioner i læringssporet Grundlæggende reverse engineering og binæranalyse, inklusive “Identifikation af sårbarheder i binære filer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Grundlæggende reverse engineering og binæranalyse-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Identifikation af sårbarheder i binære filer”?

Identificér almindelige sårbarheder som bufferoverløb, formatstrengsfejl og heltalsoverløb i binære filer. Du øver dig i Grundlæggende reverse engineering og binæranalyse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Grundlæggende reverse engineering og binæranalyse?

Der kræves ingen tidligere erfaring. Grundlæggende reverse engineering og binæranalyse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Identifikation af sårbarheder i binære filer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Grundlæggende reverse engineering og binæranalyse-lektion?

Ja. Alle Grundlæggende reverse engineering og binæranalyse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Identifikation af sårbarheder i binære filer
  2. Introduktion til fuzzing
  3. Oversigt over exploit-primitiver
  4. Moderne exploit-mitigeringer og omgåelser
← Tilbage til Grundlæggende reverse engineering og binæranalyse