Zum Inhalt springen

YARA-Module: pe, elf, dotnet, math, hash und mehr

YARA-Module nutzen: pe-Imports und Sektionen, elf, macho, dotnet, lnk, Entropie mit math, hash und console — mit Hinweisen zu YARA-X und der Browser-Version.

Veröffentlicht am 2 Min. Lesezeit

Module erweitern Bedingungen um Formatparser und Hilfsfunktionen: Statt Offsets im PE-Header zu berechnen, fragen Sie pe.number_of_sections ab oder ob eine DLL VirtualAllocEx importiert.

Modul importieren

Ein Modul parst nur Dateien, die es erkennt: Bei einer Textdatei ist pe.is_pe falsch und die meisten pe-Felder sind undefiniert.

import "pe"
import "math"

rule Module_Import_Example
{
    condition:
        pe.is_pe and math.entropy(0, filesize) > 7.2
}

Die WebAssembly-Version von YARA-X in Scanner und Editor enthält pe, elf, macho, dotnet, lnk, math, hash, time, console, string, dex, crx, cuckoo und vt — nicht magic.

pe — Windows-Programmdateien

AusdruckZweck
pe.is_pe, pe.is_dll(), pe.is_64bit()Dateiart
pe.number_of_sections, pe.sections[i].nameSektionen
pe.imports("kernel32.dll", "VirtualAllocEx")Importierte Funktion
pe.exports("ServiceMain")Exportierte Funktion
pe.imphash()Import-Hash (Hex, Kleinbuchstaben)
pe.entry_point, pe.timestampEinsprungpunkt, Kompilierzeit
pe.number_of_signaturesAuthenticode-Signaturen
import "pe"

rule PE_Injection_Imports
{
    condition:
        uint16(0) == 0x5A4D and filesize < 2MB and
        pe.imports("kernel32.dll", "VirtualAllocEx") and
        pe.imports("kernel32.dll", "WriteProcessMemory") and
        pe.imports("kernel32.dll", "CreateRemoteThread")
}

rule PE_Odd_Section_Name
{
    condition:
        uint16(0) == 0x5A4D and
        for any s in pe.sections : ( s.name == ".detourd" or s.name == "UPX0" )
}

elf, macho, dotnet, lnk

import "elf"
import "dotnet"
import "lnk"

rule ELF_Small_x64_Executable
{
    condition:
        uint32(0) == 0x464C457F and elf.type == elf.ET_EXEC and elf.machine == elf.EM_X86_64 and filesize < 1MB
}

rule DotNet_Assembly_Name
{
    condition:
        dotnet.is_dotnet and dotnet.assembly.name == "SharpExample"
}

rule LNK_Launches_Mshta
{
    condition:
        lnk.is_lnk and lnk.local_base_path contains "mshta"
}

macho leistet für macOS dasselbe wie elf, inklusive Fat-Binaries. Modul-GUID und Assembly-Name von .NET-Tools bleiben oft über Builds hinweg stabil.

math und hash

math.entropy(offset, größe) liefert die Shannon-Entropie (0–8); über etwa 7,2 sind Daten meist komprimiert oder verschlüsselt. hash.md5/sha1/sha256(offset, größe) liefern Hex in Kleinbuchstaben.

import "math"
import "hash"

rule Encrypted_Overlay_Or_Known_Blob
{
    condition:
        filesize < 5MB and (
            math.entropy(filesize - 4096, 4096) > 7.5 or
            hash.sha256(0, 1024) == "0000000000000000000000000000000000000000000000000000000000000000"
        )
}

Hash oder Entropie über die ganze Datei sind teuer — vorher mit filesize absichern (siehe Performance).

console, string, time, dex, crx, cuckoo, vt

console.log() hilft beim Debuggen, string.to_int() wandelt Werte um, time.now() liefert die Unix-Zeit. dex parst Android-Bytecode, crx Chrome-Erweiterungen. cuckoo und vt benötigen externe Daten und sind nur dort sinnvoll, wo diese geliefert werden (siehe YARA auf VirusTotal).

Unterschiede in YARA-X

Modul- und Feldnamen entsprechen weitgehend YARA 4.x; einige wurden umorganisiert, und unbekannte Felder sind in YARA-X Kompilierfehler. yr dump -m pe probe.exe zeigt die genaue Struktur. Die Seiten der Bibliothek zeigen, ob jede Regel mit YARA-X kompiliert.

Modul oder Bytes?

Für „ist das ein PE?“ genügt uint16(0) == 0x5A4D und ist schneller. Module lohnen sich für Imports, Signaturen, Ressourcen und Sektionstabellen. Der Linter meldet pe- oder elf-Aufrufe ohne vorherige Magic-Byte-Prüfung.

FAQ

Muss ich ein Modul importieren?
Ja. import "pe" (bzw. das benötigte Modul) gehört an den Dateianfang; pe.xyz ohne Import ist ein Kompilierfehler.
Wie sehe ich, was ein Modul extrahiert?
Mit yr dump datei.exe auf der YARA-X-Kommandozeile; yr dump -m pe datei.exe beschränkt die Ausgabe auf pe.
Gibt es das magic-Modul in YARA-X?
Je nach Build: Es benötigt libmagic und fehlt u. a. in der WebAssembly-Version, die die Tools dieser Website verwenden.