Identifikation af sårbarheder i binære filer
Identificér almindelige sårbarheder som bufferoverløb, formatstrengsfejl og heltalsoverløb i binære filer.
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!
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
- Identifikation af sårbarheder i binære filer
- Introduktion til fuzzing
- Oversigt over exploit-primitiver
- Moderne exploit-mitigeringer og omgåelser