Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/med0x2e/sigflip
DefensivwerkzeugePersistenzmechanismenCode-AnalyseExploitationLaterale BewegungBinäranalyseRed TeamingPayload-Entwicklung
GitHubmed0x2e/sigflip

SigFlip

SigFlip ist ein Tool zum Patchen von mit Authenticode signierten PE-Dateien (exe, dll, sys, usw.), ohne die bestehende Signatur zu ungültig zu machen oder zu beschädigen.

Repository anzeigen
1.3k2095vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Was ist das?

SigFlip ist ein Tool zum Patchen von mit Authenticode signierten PE-Dateien (exe, dll, sys usw.), ohne die vorhandene Authenticode-Signatur zu beeinträchtigen oder zu brechen. Mit anderen Worten: Sie können die Prüfsumme/den Hash einer PE-Datei ändern, indem Sie Daten (z. B. Shellcode) einbetten, ohne die Dateisignatur, Integritätsprüfungen oder die Funktionalität der PE-Datei zu beeinträchtigen.

SigInject verschlüsselt Shellcode und injiziert ihn in die [WIN_CERTIFICATE]-Zertifikatstabelle einer PE-Datei. Der Verschlüsselungsschlüssel wird zur Verwendung mit einem einfachen BOF/C/C#-Loader (SigLoader) ausgegeben. SigInject speichert die Änderungen in einer modifizierten PE-Datei und bewahrt ihre Signatur und Zertifikatsgültigkeit.

SigLoader ist ein einfacher Loader, der als Parameter den Pfad einer modifizierten PE-Datei (erstellt von SigInject) und den Entschlüsselungsschlüssel nimmt, dann den eingebetteten Shellcode extrahiert und entschlüsselt, um ihn mit einer beliebigen Shellcode-Injection zu verwenden.

SigFlip prüft, ob der PE-Hash erfolgreich geändert wurde, und beendet sich bei Endpunkten, die gegen solche häufigen Fehlkonfigurationen gehärtet sind, ordnungsgemäß (siehe Abschnitt „Details“).

Kurzer Hinweis: SigFlip, SigInject und SigLoader sind als BOF-Skripte und .NET-Assemblys verfügbar. Der einzige Unterschied besteht darin, dass die SigInject-Funktionalität als Teil von SigFlip (-i) implementiert ist, falls Sie sich für .NET-Artefakte anstelle von BOFs entscheiden.

Warum?

Es kann hauptsächlich für Persistenz, laterale Bewegung oder Code-/Befehlsausführung verwendet werden und kann helfen bei:

  • Umgehung von Anwendungs-Whitelisting, Ändern des PE-Datei-Hashs (z. B. msbuild.exe), ohne die Signatur zu brechen.
  • Umgehung von EDRs, die zur Erkennung von schädlichem Code/Befehlsausführung auf Hashes bestimmter LOLBINs angewiesen sind.
  • Laden signierter Treiber mit einem anderen Hash; könnte helfen, EDRs zu umgehen, die mit einer vordefinierten Hash-Liste nach häufigen anfälligen signierten Treibern suchen.
  • Einbetten verschlüsselten Shellcodes in eine signierte PE-Datei und Verwendung eines von Ihnen bevorzugten Stagers (SigLoader) zum Parsen, Entschlüsseln, Laden und Ausführen.
  • Sicherheitsanbieter von Endpunkten neigen dazu, signierte PE-Dateien meist als gutartig einzustufen; das Einbetten Ihres unsignierten Codes (Shellcode usw.) in eine signierte PE-Datei erschwert die Erkennung/Kennzeichnung.
  • Umgehung von Sicherheitsanbietern, die sich hauptsächlich auf die standardmäßige WinVerifyTrust zur Signaturvalidierung verlassen.
  • Verbesserung der OPSEC und Herausforderung von Verteidigern, die sich allein auf typische Signaturverifizierungsprogramme wie signtool, sigcheck, Get-AuthenticodeSignature usw. verlassen, um die Authenticode-Signatur von PE-Dateien zu validieren.
  • Verwendung & Beispiele:

    Kompilieren/Bauen:

    Vorkompilierte BOFs werden in diesem Projekt nicht bereitgestellt. Sie können mit Mingw-w64 kompiliert werden. Für .NET verwenden Sie VS oder csc.exe zum Kompilieren der .NET-Projekte (SigFlip, SigLoader). Für BOF führen Sie die folgenden Schritte aus:

    • ➜ i686-w64-mingw32-gcc -c sigflip.c -o sigflip.x86.o
    • ➜ x86_64-w64-mingw32-gcc -c sigflip.c -o sigflip.x64.o
    • ➜ x86_64-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x64.o
    • ➜ i686-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x86.o

    Stellen Sie sicher, dass sich alle Objektdateien im selben Verzeichnis wie sigflip.cna befinden, und laden Sie dann das Skript sigflip.cna in Cobalt Strike.

    Kurzer Hinweis: Vorkompilierte BOFs wurden getestet und sind kompatibel mit mingw-64 v8.0.0_3. Die Verwendung von mingw-64 >= v9 könnte funktionieren, aber aktive Beacons könnten abstürzen. Weitere Details finden Sie unter https://github.com/med0x2e/SigFlip/issues/2.

    Cobalt Strike:

    1. Execute-Assembly

      • execute-assembly SigFlip.exe -h
      • execute-assembly SigLoader -h
    2. BOF

      • Zur Verwendung mit Cobalt Strike: Sobald Sie das SigFlip.cna-Skript geladen haben, werden zwei neue Befehle registriert: SigFlip und SigInject. Verwenden Sie sie wie folgt:
        • SigFlip: Ändert den Hash einer PE-Datei (DLL, EXE, SYS, OCX usw.), ohne die Signatur oder die Gültigkeit des Zertifikats zu brechen:

          • SigFlip "<PE\_FILE\_PATH>" "<OUTPUT\_PE\_FILE\_PATH (mit Erweiterung)>"
        • SigInject: Verschlüsselt Shellcode und injiziert ihn in die [WIN_CERTIFICATE]-Zertifikatstabelle einer PE-Datei. Der Verschlüsselungsschlüssel wird zur Verwendung mit einem einfachen C/C#-Loader ausgegeben. Signatur und Zertifikatsgültigkeit bleiben erhalten:

          • SigInject "<PE\_FILE\_PATH> <OUTPUT\_PE\_FILE\_PATH (mit Erweiterung)>" "<SHELLCODE\_FILE>"
        • SigLoader: Lädt verschlüsselten Shellcode aus von SigInject erstellten PE-Dateien und verwendet dann Early Bird QueueUserAPC, um Shellcode in einen Opferprozess zu injizieren. Die Shellcode-Injektionslogik kann angepasst oder durch eine beliebige andere Code-Injektionstechnik ersetzt werden:

          • SigLoader <PE_FILE_PATH_WITH_SH> <DECRYPTION_KEY> <SPAWNTO_PROCESS_PATH> <PARENT_PROCESS_ID>
    3. Beispiele

      • BOF:

        • Zufällige Daten in msbuild.exe injizieren (auch Bit-Flip von msbuild.exe):
          • SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"
        • Shellcode in kernel32.dll injizieren (Argumentreihenfolge ist anders; notieren Sie sich den Entschlüsselungsschlüssel):
          • SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
          • Sigloader "C:\random\modified-kernel32.dll" "DECRYPTION_KEY" "C:\Windows\System32\werfault.exe" 6300
      • Execute-Assembly:

        • Zufällige Daten in msbuild.exe injizieren:
          • execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exe
        • Shellcode in kernel32.dll injizieren (Argumentreihenfolge ist anders; notieren Sie sich den Entschlüsselungsschlüssel):
          • execute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKey
          • execute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354

    Details:

    Dies ist eine bekannte Technik, die von APT#10 in mehreren Kampagnen oder Angriffssets verwendet wird.

    Authenticode-Digitale Signaturen?

    Authenticode ist eine Microsoft-Technologie zur Code-Signierung, die den Herausgeber von mit Authenticode signierter Software identifiziert. Authenticode überprüft auch, ob die Software seit ihrer Signierung und Veröffentlichung nicht manipuliert wurde.

    Wie funktioniert es?

    Microsoft verlässt sich hauptsächlich auf das Authenticode-Signierungsformat zur Überprüfung der Integrität und Herkunft von PE-Binärdateien. Gemäß der Authenticode-Portable-Executable-Formatspezifikation können die Authenticode-Signaturen in einer Windows-PE-Datei „eingebettet“ werden, und zwar an einer Stelle, die durch den Eintrag der Zertifikatstabelle in den Optional-Header-Datenverzeichnissen angegeben wird. Wenn Authenticode zum Signieren einer Windows-PE-Datei verwendet wird, schließt der Algorithmus, der den Authenticode-Hashwert der Datei berechnet, bestimmte PE-Felder aus. Wenn die Signatur in die Datei eingebettet wird, kann der Signierungsprozess diese Felder ändern, ohne den Hashwert der Datei zu beeinflussen. Diese Felder sind: **die Prüfsumme, die RVA der Zertifikatstabelle, die Größe der Zertifikatstabelle und die Attributzertifikatstabelle. Die Attributzertifikatstabelle enthält eine PKCS#7-SignedData-Struktur mit dem Hashwert der PE-Datei, einer Signatur, die mit dem privaten Schlüssel des Softwareherausgebers erstellt wurde, und den X.509 v3-Zertifikaten, die den Signaturschlüssel des Herausgebers an eine juristische Person binden.

    Einfach ausgedrückt: Wir können Daten in Felder ändern oder einbetten, die von der Authenticode-Hashberechnung ausgeschlossen sind, ohne uns Gedanken über das Brechen der Authenticode-Signatur und der Dateiintegritätsprüfungen machen zu müssen.

    Weitere Details zu diesen ausgeschlossenen Feldern:

    • RVA und Größe der Zertifikatstabelle: Die optionale Header-Struktur einer signierten PE-Datei enthält ein Array von Datenverzeichnissen, einschließlich des Sicherheitsverzeichniseintrags IMAGE_DIRECTORY_ENTRY_SECURITY, der zwei Felder hat: RVA und Größe.

      • RVA: ein Datei-Offset (kein Speicher-Offset) zur Attributzertifikatstabelle.
      • Größe: Größe der Attributzertifikatstabelle.
    • Attributzertifikatstabelle: eine Datenstruktur WIN_CERTIFICATE, die die Signatur und Zertifikate kapselt und die folgenden Felder hat:

      • dwLength: Größe der Zertifikatstabelle.
      • wRevision: die „Revision“ des WIN_CERTIFICATE.
      • wCertificateType: die Art der gekapselten Zertifikatsdaten.
      • bCertificate: die eigentlichen Zertifikatsdaten. Für WIN_CERT_TYPE_PKCS_SIGNED_DATA ist dies die oben erwähnte PKCS#7-SignedData-Struktur (die den PE-Hashwert, die Signatur und das X.509-Zertifikat enthält). Genau hier bettet SigFlip zufällige Daten oder Shellcode ein.

    Vor diesem Hintergrund führt SifFlip nun Folgendes aus:

    1. Überprüfung der Systemkonfiguration
    2. Laden der PE-Datei und Überprüfung der PE-Dateisignatur und Berechnung des SHA1-Hashs
    3. Ermitteln des „e_lfanew“-Offsets (zeigt auf den PE-Datei-Header -> IMAGE_NT_HEADERS)
    4. IMAGE_OPTIONAL_HEADER von IMAGE_NT_HEADERS abrufen
    5. IMAGE_DATA_DIRECTORY von IMAGE_OPTIONAL_HEADER abrufen
    6. Das Feld IMAGE_DIRECTORY_ENTRY_SECURITY abrufen und die RVA und GRÖSSE der Attributzertifikatstabelle (WIN_CERTIFICATE) ermitteln.
    7. Patchen des PE-Datei-Blobs, indem die Zertifikatstabelle mit zusätzlichen Bytes (zufällig/Shellcode) nach Wahl aufgefüllt wird.
    8. Aktualisieren der Größe des Datenverzeichnisses IMAGE_DIRECTORY_ENTRY_SECURITY im optionalen Header
    9. Aktualisieren von dwLength von WIN_CERTIFICATE (Zertifikatstabelle)
    10. Neue PE-Prüfsumme generieren und aktualisieren. (OPT Header Checksum)
    11. Speichern der endgültigen PE-Datei mit neuer Größe.
    12. Überprüfen der modifizierten PE-Dateisignatur

    Der erste Schritt ist entscheidend, um zu bestätigen, ob das System so fehlkonfiguriert ist, dass das Auffüllen und Injizieren von Shellcode in mit Authenticode signierte PE-Dateien möglich ist. Daher werden die folgenden Integritätsprüfungen durchgeführt:

    1. Überprüfen, ob der MS13-098-Fix (KB2893294) nicht installiert ist. Beachten Sie: ER KÖNNTE INSTALLIERT SEIN, ABER DIE REGISTRIERUNGSSCHLÜSSEL SIND NICHT RICHTIG GESETZT, WAS DEN PATCH NUTZLOS MACHT
    2. Überprüfen der Registrierungsschlüssel
      1. X86:

        • Überprüfen, ob der Registrierungsschlüssel "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config" nicht vorhanden ist
          • -> wenn vorhanden, dann überprüfen, ob der Registrierungswert "EnableCertPaddingCheck" nicht vorhanden ist
      2. X64:

        • Überprüfen, ob der Registrierungsschlüssel "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config" nicht vorhanden ist
          • -> wenn vorhanden, dann überprüfen, ob der Registrierungswert "EnableCertPaddingCheck" nicht vorhanden ist.

    Warum können die injizierten Daten nicht gelesen werden, wenn die modifizierte PE als Modul in ihren eigenen Adressraum oder den Adressraum anderer Prozesse geladen wird?

    Der Windows-Lader lädt Zertifikatsdaten nicht in den Prozessadressraum. Daher benötigen Sie einen benutzerdefinierten Lader, um Daten wie Shellcode zu extrahieren und zu verwenden (z. B. SigLoader). Dies erklärt auch, warum der RVA des Datenverzeichniseintrags IMAGE_DIRECTORY_ENTRY_SECURITY ein Datei-Offset und kein typischer Speicher-Offset ist.

    Erkennung/Prävention:

    • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
    • Sobald der Patch installiert und die entsprechenden Registrierungsschlüssel gesetzt sind, sind keine Systemneustarts erforderlich. Sie müssen nur die Kryptografiedienste neu starten. Der Applocker-Dienst wird ebenfalls neu gestartet, da er von den Kryptografiediensten abhängt. (@p0w3rsh3ll)
    • Yara-Regel von Adrien; https://twitter.com/Int2e_/status/1330975808941330432

    Referenzen

    • https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2013/ms13-098?redirectedfrom=MSDN
    • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
    • http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/authenticode_pe.docx
    • https://msrc-blog.microsoft.com/2013/12/10/ms13-098-update-to-enhance-the-security-of-authenticode/
    • https://www.specterops.io/assets/resources/SpecterOps_Subverting_Trust_in_Windows.pdf
    • https://p0w3rsh3ll.wordpress.com/2014/05/24/testing-ms13-098-certificate-padding-check/
    • http://jsac.jpcert.or.jp/archive/2021/pdf/JSAC2021_202_niwa-yanagishita_en.pdf
    Tool herunterladen