Cyber Security Academy · Lektion

Threat hunting med strings og hex

Find matchende malware-artefakter.

Lektion 3 af 413 trin

Threat hunting med strings og hex er en gratis Cyber Security Academy-lektion på CoddyKit. Dette er lektion 3 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 Cyber Security Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cyber Security Academy-kurset indeholder 4 lektioner i alt.

Fra prøve til regel

En jagt begynder med et prøveeksemplar. Du udtrækker karakteristiske artefakter, afgør hvilke der er robuste, og omsætter dem til en regel, der finder familien uden at markere legitime filer.

Arbejdsgangen er: triagér prøveeksemplaret, udtræk strenge og strukturelle kendetegn, adskil signal fra støj, udarbejd reglen, og test den derefter mod både familien og et rent korpus, før den tages i brug.

Udtrækning af kandidatstrenge

Begynd med værktøjet strings for at opliste udskrivbare sekvenser og medtage både ASCII- og UTF-16-tekst (wide). Windows-skadevare gemmer ofte strenge som wide-tekst.

Gennemgå resultatet for C2-URL'er, mutex-navne, registreringsdatabasestier, tilpassede fejlmeddelelser, PDB-stier og påfaldende specifik tekst. Ignorér generiske strenge fra kørselsmiljøer og kompilatorer.

strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt   # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txt

Valg af robuste strenge

Ikke alle strenge hører hjemme i en regel. Foretræk artefakter, som forfatteren ikke kan ændre uden en betydelig indsats:

  • Hårdkodede mutex- eller pipenavne, der er unikke for familien
  • Tilpassede protokolmarkører eller konfigurationsnøgler
  • Usædvanlige fejlfindings- eller panikmeddelelser
  • Indlejrede PDB-stier, der afslører byggemiljøet

Undgå standardskode fra biblioteker, almindelige API-navne og versionsstrenge, der deles af legitim software, da de giver falske positiver.

strings:
  $mutex = "Global\\Zx7yQ_lock" wide
  $cfgkey = "x0r_cfg_begin" ascii
  $pdb = "C:\\build\\loader\\release\\loader.pdb"

Omgåelse af simpel sløring

Mange familier XOR-koder eller koder på anden vis strenge let. Hvis der kun findes få klartekster, skal du lede efter den kodede form eller afkodningsrutinen.

Du kan beregne XOR-kodede bytes for en kendt klartekst og matche dem eller bruge YARAs xor-modifikator til automatisk at matche en streng med en vilkårlig XOR-nøgle på én byte.

strings:
  // matches "http://" under any single-byte XOR key
  $u = "http://" xor
  // or a fixed key range
  $k = "config" xor(0x01-0xff)

Jagt med hex-mønstre

Når strenge er slørede, men koden ikke er det, skal du matche bytemønstre fra skadevarens egen logik: en dekrypteringsstub, en udpakningsløkke eller en unik konstant.

Disassemblér prøveeksemplaret, find en karakteristisk instruktionssekvens, og omsæt opkoderne til en hex-streng. Brug jokertegn for de bytes, der varierer (adresser, immediate-værdier), så mønsteret overlever rekompilering.

strings:
  // XOR decrypt loop with wildcarded counter/address
  $decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }

Jokertegn og spring i praksis

Kunsten ved hex-jagt er at vælge, hvad der skal erstattes med jokertegn. Et for stramt mønster går i stykker ved en rekompilering, mens et for løst mønster matcher alt.

  • Brug jokertegn for relative forskydninger og immediate-værdier, som kompilatoren ændrer
  • Bevar opkoder, fordi algoritmen er stabil
  • Brug spring [n-m], når instruktionslængder varierer

Gå efter et mønster, der er langt nok til at være unikt (ofte mindst 8 betydningsfulde bytes), men fleksibelt, hvor det er nødvendigt.

strings:
  $stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }

Strukturelle og PE-indikatorer

Statiske kendetegn ud over rå bytes giver stærke betingelser med lavt støjniveau. Med modulet pe kan du matche:

  • imphash — hashværdi for importtabellen, ofte stabil på tværs af familiens builds
  • sektionsnavne — tilpassede pakkere tilføjer afslørende sektioner
  • specifikke importer — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread signalerer injektion
import "pe"
condition:
  pe.imphash() == "4e3a9f..." or
  for any s in pe.sections : ( s.name == ".x0rsec" )

Entropi som signal

Pakkede eller krypterede områder har høj entropi. Modulet math måler den, så du kan markere prøveeksemplarer, hvis payload-sektion ser krypteret ud, hvilket er karakteristisk for pakkere.

Entropi alene giver meget støj (komprimerede installationsprogrammer har også høj entropi), så kombinér den med andre indikatorer i stedet for at udløse en alarm på den alene.

import "math"
condition:
  math.entropy(0, filesize) >= 7.2 and $loader_stub

Kombination af indikatorer

De stærkeste regler kræver flere uafhængige indikatorer, så intet enkelt sammenfald udløser et match. Kombinér en streng, et kodemønster og et strukturelt kendetegn.

Denne lagdelte betingelse modstår både falske positiver (alle dele skal stemme overens) og omgåelse (forfatteren skal ændre flere kendetegn på én gang).

condition:
  uint16(0) == 0x5A4D and
  filesize < 800KB and
  $mutex and
  $decrypt and
  pe.imports("kernel32.dll", "CreateRemoteThread")

Navngivning, meta og versionsstyring

En jagtregel er kun nyttig, hvis andre kan have tillid til den og vedligeholde den. Giv hver regel et tydeligt navn med navnerum og en komplet meta.

  • Registrér hashværdierne for de prøveeksemplarer, som reglen blev bygget ud fra
  • Notér familien, forfatteren, datoen og en reference
  • Forøg et versionsfelt, når du finjusterer logikken

Når reglen udløses måneder senere, fortæller disse metadata den, der håndterer hændelsen, hvad den betyder, og hvor meget der kan stoles på den. Dermed bliver en engangsjagt til robust detektion, der kan deles.

meta:
  family = "X0rLoader"
  author = "ir-team"
  date = "2026-06-04"
  hash = "9f1c...e2"
  version = "2"

Test før du stoler på reglen

Validér altid en ny regel mod to korpora:

  • Sande positiver — alle kendte prøveeksemplarer af familien skal matche
  • Legitim software — et stort, rent datasæt (systembinære filer, almindelige programmer) må IKKE matche

Et enkelt falsk positivt fund i en Windows-DLL kan sætte kritiske filer i karantæne på tværs af et helt miljø. Kør reglen, optæl resultaterne, gennemgå de manglende fund og træfferne, og finjustér den, før den rulles bredt ud.

yara -r family.yar /malware_corpus/   # expect all to hit
yara -r family.yar /clean_corpus/     # expect zero hits

Hurtigt tjek

Vælg den mest modstandsdygtige indikator.

Opsummering

Praktisk YARA-jagt fra start til slut:

  • Udtræk ASCII- og wide-strenge, og behold robuste artefakter (mutexer, konfigurationsnøgler, PDB-stier)
  • Omgå let sløring med xor-modifikatoren eller kodede mønstre
  • Match kodebytemønstre (dekrypterings- og udpakningsstubber), når strenge er skjulte
  • Brug jokertegn for foranderlige bytes, behold opkoderne, og brug spring til variable længder
  • Brug PE-imphash, sektioner og importer samt entropi som strukturelle signaler
  • Kombinér flere indikatorer for at modstå falske positiver og omgåelse
  • Test altid mod korpora med familien og legitim software, før reglerne rulles ud

Næste: kørsel af disse regler på tværs af et helt miljø.

Gratis at komme i gang

Lær Cyber Security Academy 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
76
Lektioner
303

Ofte stillede spørgsmål

Er lektionen “Threat hunting med strings og hex” gratis?

Ja — alle 3 lektioner i læringssporet Cyber Security Academy, inklusive “Threat hunting med strings og hex”, 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. Cyber Security Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Threat hunting med strings og hex”?

Find matchende malware-artefakter. Du øver dig i Cyber Security Academy 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å Cyber Security Academy?

Der kræves ingen tidligere erfaring. Cyber Security Academy 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 3 af 4.

Hvor lang tid tager lektionen “Threat hunting med strings og hex”?

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 Cyber Security Academy-lektion?

Ja. Alle Cyber Security Academy-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. Hvad bruges YARA til
  2. Syntaks for YARA-regler
  3. Threat hunting med strings og hex
  4. Skalering og automatisering af scanninger
← Tilbage til Cyber Security Academy