Skip to content

Führen Sie mich durch das Windows-PE-Dateiformat und welche Teile Sie beim Triage eines Samples untersuchen.

Kurzantwort

Eine PE-Datei beginnt mit dem DOS-Header und seinem e_lfanew-Zeiger auf die PE/NT-Header, die den File Header und den Optional Header enthalten (Einsprungpunkt, Image Base, Subsystem). Sie ist in Sektionen unterteilt — .text für Code, .data, .rdata, .rsrc für Ressourcen — jede mit virtueller Adresse und Rohgröße. Beim Triage liest man die Importtabelle nach verdächtigen APIs, die Sektionstabelle nach seltsamen Namen und hoher Entropie, die auf Packen hindeuten, den Timestamp und den Rich Header, eingebettete Ressourcen und jede digitale Signatur. Diskrepanzen zwischen diesen verraten viel, noch bevor man die Datei ausführt.

Das Portable-Executable-Format (PE) ist der Container, den Windows für .exe-, .dll- und .sys-Dateien verwendet. Interviewer fragen danach, weil die meiste Windows-Malware als PE ausgeliefert wird und ein versierter Analyst die Absicht eines Samples direkt aus seiner Struktur lesen kann, bevor er etwas ausführt.

Die Struktur

Jedes PE beginnt mit dem überkommenen DOS-Header (dem MZ-Magic und dem Stub «This program cannot be run in DOS mode»). Sein e_lfanew-Feld zeigt auf die PE/NT-Header: den File Header (Maschinentyp, Anzahl der Sektionen, Timestamp) und den Optional Header (den Einsprungpunkt, die Image Base, das Subsystem sowie die Data Directories, die Import- und Exporttabellen, Ressourcen und Relokationen lokalisieren). Nach den Headern folgt die Sektionstabelle — typischerweise .text (Code), .data und .rdata (Daten und schreibgeschützte Daten), .rsrc (Ressourcen wie Icons und eingebettete Payloads) und .reloc.

Was man untersucht und warum

  • Importtabelle. Welche DLLs und APIs das Binary einbindet, ist der klarste Fähigkeitshinweis. VirtualAlloc + WriteProcessMemory + CreateRemoteThread schreit nach Prozessinjektion; InternetOpen/WinHttpConnect bedeutet Netzwerk; CryptEncrypt deutet auf Ransomware. Eine nahezu leere Importtabelle mit nur LoadLibrary/GetProcAddress impliziert dynamische API-Auflösung, um die Absicht zu verbergen.
  • Sektionen. Seltsame Namen (.UPX0, zufällige Strings), eine zugleich schreibbare und ausführbare Sektion oder eine Rohgröße von null bei großer virtueller Größe deuten alle auf einen Packer hin. Hohe Entropie (nahe 8,0) signalisiert Kompression oder Verschlüsselung — ein starker Pack-Indikator, obwohl auch legitime komprimierte Ressourcen hoch punkten.
  • Ressourcen, Timestamp, Rich Header, Signatur. Eingebettete Executables in .rsrc, ein gefälschter oder genullter Timestamp, ein inkonsistenter Rich Header oder eine fehlende/ungültige Authenticode-Signatur fügen jeweils Gewicht hinzu.

Die besten Antworten verknüpfen ein Feld mit der Schlussfolgerung, die es stützt, statt nur Header-Namen aufzuzählen.

Wahrscheinliche Anschlussfragen

  • Was deutet eine von GetProcAddress und LoadLibrary dominierte Importtabelle an?
  • Warum ist hohe Sektionsentropie ein Warnsignal, und worin liegt ihre Grenze als Signal?
  • Was können der Rich Header oder der Kompilierungs-Timestamp über ein Sample verraten?

Quellen

Zertifizierungen

Erhalte 100 Cybersecurity-Interviewfragen + Antworten

Gib deine E-Mail-Adresse ein und wir senden dir das kostenlose PDF-Paket und das Flashcard-Deck.

Kein Spam. Jederzeit abbestellbar.