Grunderna i reverse engineering och binäranalys · Lektion

Introduktion till fuzzning

Lär er grunderna i fuzzningstekniker för att automatiskt upptäcka buggar och krascher i programvara.

Lektion 2 av 411 steg

Introduktion till fuzzning är en gratis lektion i Grunderna i reverse engineering och binäranalys på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i reverse engineering och binäranalys, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i reverse engineering och binäranalys innehåller totalt 4 lektioner.

Introduktion till fuzzning

Fuzzning är en kraftfull teknik för programvarutestning. Den innebär att man matar ett program med stora mängder halvslumpmässiga, felaktiga eller oväntade data. Målet är att få programmet att krascha eller bete sig oväntat.

Tänk på det som att kasta allt utom köksvasken på ett program för att se vad som går sönder!

Varför fuzzar man programvara?

Fuzzning är utmärkt för att hitta säkerhetssårbarheter och fel som traditionella testmetoder kan missa. Den upptäcker ofta:

  • Krascher: Programmet avslutas oväntat.
  • Minnesläckor: Programmet använder för mycket minne.
  • Logiska fel: Felaktigt beteende.
  • Säkerhetsbrister: Till exempel buffertspill.

Fuzzningsprocessen

I grunden består fuzzning av tre huvudsteg:

  1. Generera indata: Skapa många varierade indata.
  2. Mata in data: Skicka dessa indata till målprogrammet.
  3. Övervaka: Observera programmets beteende för att upptäcka krascher eller fel.

Om en krasch inträffar rapporterar fuzzaren den indata som orsakade den, vilket hjälper utvecklare att åtgärda felet.

Dum fuzzning (genereringsbaserad)

Dum fuzzning, även kallad genereringsbaserad fuzzning eller black-box-fuzzning, skapar indata utan kunskap om programmets interna struktur eller förväntade indataformat.

Det är som att trycka slumpmässigt på ett tangentbord och se vad som händer. Metoden är enkel att implementera men mindre effektiv när det gäller att hitta djupa fel.

Smart fuzzning (mutationsbaserad)

Smart fuzzning (eller mutationsbaserad fuzzning) börjar med giltiga indata och ändrar dem sedan något. Den använder viss förståelse för indataformatet eller programmets struktur.

Metoden är effektivare eftersom muterade indata har större chans att nå djupare delar av programmets kod.

Vad kan vi fuzza?

Fuzzning kan riktas mot många typer av programvarugränssnitt:

  • Filparsrar: Till exempel bildvisare och dokumentläsare.
  • Nätverksprotokoll: Till exempel webbservrar och nätverkstjänster.
  • API:er: Application Programming Interfaces.
  • Kommandoradsverktyg: Program som tar emot argument.

Överallt där ett program förväntar sig indata finns ett potentiellt mål för fuzzning.

En fuzzers anatomi

En grundläggande fuzzer består vanligtvis av följande delar:

  • Indatagenerator: Skapar testfall.
  • Målkörning: Kör programmet med indata.
  • Övervakare: Upptäcker krascher (till exempel genom att kontrollera avslutningskoder och loggar).
  • Krashrapportör: Sparar indata som orsakar krascher och loggar.

Avancerade fuzzers innehåller även analys av kodtäckning.

Fuzzning i praktiken (Python)

Här är ett litet Python-exempel som visar hur ni kan generera slumpmässig indata för att ”fuzza” en enkel funktion. Vid verklig fuzzning skulle ”target_function” vara ett externt program.

import random
import string

def target_function(data):
    # A dummy function that might crash on certain inputs
    if len(data) > 5 and data[2] == 'X':
        print("Potential issue found!")
        # Simulate a crash for demonstration
        raise ValueError("Bad input detected!")
    print(f"Processed: {data}")

def simple_fuzzer(iterations=5):
    print("Starting simple fuzzer...")
    for i in range(iterations):
        # Generate random string input
        length = random.randint(1, 10)
        random_string = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))
        try:
            target_function(random_string)
        except ValueError as e:
            print(f"Crash detected with input: '{random_string}' - {e}")
    print("Fuzzing finished.")

if __name__ == "__main__":
    simple_fuzzer()

Fördelar och nackdelar med fuzzning

Fördelar:

  • Effektivt för att hitta okända buggar.
  • Kräver minimala kunskaper om programmets interna funktion (särskilt vid dumb fuzzing).
  • Kan i hög grad automatiseras.

Begränsningar:

  • Kan vara långsamt för komplexa program.
  • Kan missa logiska fel om inga krascher utlöses.
  • Falska positiva resultat kan förekomma.

Kontroll av fuzzningsbegrepp

Vilket av följande beskriver bäst det huvudsakliga målet med fuzzning?

Sammanfattning: Grunderna i fuzzning

I den här lektionen introducerade vi fuzzning. Ni har lärt er att:

  • Fuzzning innebär att program matas med oväntad indata.
  • Huvudmålet är att hitta buggar och säkerhetsbrister.
  • Det finns olika typer, till exempel dumb fuzzing (genereringsbaserad) och smart fuzzing (mutationsbaserad).
  • Fuzzers har komponenter som indatageneratorer och övervakare.

Fuzzning är en viktig teknik inom sårbarhetsforskning!

Gratis att börja

Lär dig Assembly med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Introduktion till fuzzning” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i reverse engineering och binäranalys, inklusive ”Introduktion till fuzzning”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i reverse engineering och binäranalys innehåller totalt 4 lektioner.

Vad lär jag mig i ”Introduktion till fuzzning”?

Lär er grunderna i fuzzningstekniker för att automatiskt upptäcka buggar och krascher i programvara. Ni övar på Grunderna i reverse engineering och binäranalys med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i reverse engineering och binäranalys?

Du behöver inga förkunskaper. Utbildningen i Grunderna i reverse engineering och binäranalys på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Introduktion till fuzzning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i reverse engineering och binäranalys-lektionen?

Ja. Varje Grunderna i reverse engineering och binäranalys-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Identifiera sårbarheter i binärfiler
  2. Introduktion till fuzzning
  3. Översikt över exploit-primitiver
  4. Moderna exploit-skydd och kringgående
← Tillbaka till Grunderna i reverse engineering och binäranalys