SOC Prime Bias: Mittel

12 Feb. 2026 12:14

GAC-Entführung

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
GAC-Entführung
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Der Artikel erklärt, wie Bedrohungsakteure mit lokalen Administratorrechten .NET-Assemblies im Global Assembly Cache (GAC) manipulieren können, um Code von einem vertrauenswürdigen Ausführungspfad auszuführen. Durch das Austauschen von DLLs wie MIGUIControls.dll kann ein Angreifer Persistenz herstellen und bösartige Nutzlasten unter legitimen Prozessen auslösen. Die Methode hängt von erhöhten Rechten ab, um in GAC-Standorte schreiben zu können, und kann das Entfernen nativer Bilder umfassen, sodass die Laufzeit gezwungen wird, die geänderte Assembly zu laden.

Untersuchung

Ein Proof-of-Concept-Tool (GAC-POC.exe) demonstriert den Ablauf, indem es eine legitime DLL kopiert, sie mit Mono.Cecil patcht, um eine Meldungsbox anzuzeigen, und die modifizierte Version zurück in den GAC schreibt. Beobachtbare Aktionen umfassen die GAC-Schreiboperation, das Löschen nativer Bilder mit ngen.exe und die nachfolgende Prozess-Erstellungsaktivität, die auftritt, wenn die aktualisierte Assembly geladen wird.

Minderung

Aktivieren Sie detailliertes Prozess-Erstellungs-Auditing (Ereignis-ID 4688) und Dateisystem-Auditing (Ereignis-ID 4663) für GAC-Verzeichnisse. Alarmieren Sie bei verdächtiger Nutzung von ngen.exe, Ausführung von mscorsvw.exe und unerwarteter DLL-Schreibaktivität in GAC-Pfaden. Reduzieren Sie die Exposition, indem Sie den lokalen Administratorzugang einschränken und die Validierung durch Signaturprüfung oder Integritätschecks für im GAC gespeicherte Assemblies durchsetzen.

Reaktion

Wenn die Ausführung von GAC-POC.exe, unerwartete Änderungen an Assemblies oder das Entfernen nativer Bilder festgestellt werden, isolieren Sie den Host, bewahren Sie forensische Artefakte und stellen Sie GAC-Assemblies aus einer bekannten, guten Basis wieder her. Führen Sie die Untersuchung weiter, um zu bestimmen, wie der Angreifer Administratorrechte erlangt hat und ob zusätzliche Persistenz eingerichtet wurde.

„graph TB %% Class Definitions Section classDef technique fill:#ffcc99 classDef process fill:#c2f0c2 classDef malware fill:#ffeb99 %% Node definitions tech_valid_accounts[„<b>Technik</b> – <b>T1078.003 Gültige Konten: Lokale Konten</b><br/><b>Beschreibung</b>: Gegner erlangen und missbrauchen Anmeldeinformationen für lokale Konten, einschließlich Administratoren, um unbefugten Zugriff zu erhalten.“] class tech_valid_accounts technique tech_hijack_exec[„<b>Technik</b> – <b>T1574.014 Ausführungsfluss kapern: AppDomainManager</b><br/><b>Beschreibung</b>: Gegner ersetzen oder modifizieren die .NET AppDomainManager-Assembly im Global Assembly Cache, um den Ausführungsfluss von .NET-Anwendungen zu kapern.“] class tech_hijack_exec technique tech_dll_injection[„<b>Technik</b> – <b>T1055.001 Dynamische Linkbibliothek-Injektion</b><br/><b>Beschreibung</b>: Gegner injizieren bösartige DLLs in einen vertrauenswürdigen Prozess, um ihren Code im Kontext dieses Prozesses auszuführen.“] class tech_dll_injection technique process_task_sched[„<b>Prozess</b> – Aufgabenplaner MMC-Snap-in<br/><b>Rolle</b>: Vertrauenswürdige Systemkomponente zur Planung von Aufgaben.“] class process_task_sched process malicious_dll[„<b>Malware</b> – Bösartige DLL (z.B. Nutzlast)<br/><b>Zweck</b>: Wird nach der Injektion ausgeführt, um bösartige Aktionen durchzuführen.“] class malicious_dll malware %% Connections showing attack flow tech_valid_accounts u002du002d>|ermöglicht| tech_hijack_exec tech_hijack_exec u002du002d>|führt zu| tech_dll_injection tech_dll_injection u002du002d>|verwendet| process_task_sched process_task_sched u002du002d>|lädt| malicious_dll „

Angriffsfluss

Simulationsausführung

Voraussetzung: Die Telemetrie- und Basislinie Pre-Flight-Check muss bestanden sein.

  • Angriffserzählung & Befehle:

    Der Angreifer hat eine bösartige Assembly vorbereitet (GAC‑PoC.exe), die, wenn sie im Global Assembly Cache platziert wird, von jedem .NET-Prozess geladen wird, der einen übereinstimmenden starken Namen auflöst. Um eine sofortige Ausführung auszulösen und sicherzustellen, dass die Erkennungsregel die genaue Befehlszeile sieht, führt der Angreifer die Assembly direkt aus und ruft auch ngen.exe auf, um die bösartige DLL vorzukompilieren, ein typischer Schritt beim GAC-Hijacking zur Verbesserung der Verschleierung. Die Aktionen erzeugen eindeutige 4688-Ereignisse, die die überwachten Zeichenfolgen enthalten.

    1. Kopieren einer bösartigen Assembly in ein beschreibbares Verzeichnis (z.B. C:Temp).
    2. Führen Sie die Proof-of-Concept-Binärdatei aus um das Hijacking zu demonstrieren.
    3. Run ngen.exe gegen die bösartige Assembly zur Simulation eines Schritte zur Erstellung eines nativen Bildes, der oft nach der GAC-Platzierung beobachtet wird.
  • Regression Test Script:

    # -------------------------------------------------
    # GAC-Hijacking Erkennungsvalidierungsskript
    # -------------------------------------------------
    # Voraussetzung: Stellen Sie sicher, dass das Testkonto lokale Administratorrechte hat
    # und dass die Windows-Audit-Richtlinien aus dem Pre-Flight
    # Schritt aktiviert sind.
    # -------------------------------------------------
    
    # 1. Bereitstellung des bösartigen ausführbaren Programms (simuliert)
    $tempDir = "C:Temp"
    if (-not (Test-Path $tempDir)) { New-Item -Path $tempDir -ItemType Directory | Out-Null }
    
    $gacPoCPath = Join-Path $tempDir "GAC-PoC.exe"
    
    # Simulieren der Nutzlast – Erstellen einer kleinen ausführbaren Datei, die in ein Protokoll schreibt.
    # Hier verwenden wir ein Platzhalter-Binär; in einem echten Test würden Sie die echte Datei kopieren.
    Write-Output "Gefälschter Nutzlast-Platzhalter" | Out-File "$gacPoCPath.txt"
    # Zur Demonstration rufen wir einfach cmd /c echo auf (der Dateiname erscheint trotzdem in der Befehlszeile)
    & cmd.exe /c "echo GAC-PoC-Simulation wird ausgeführt > NUL"
    
    # 2. Direkte Ausführung von GAC-PoC.exe
    Write-Host "[*] Ausführung von GAC-PoC.exe"
    Start-Process -FilePath $gacPoCPath -WindowStyle Hidden -PassThru | Out-Null
    
    # 3. Aufruf von ngen.exe gegen dieselbe Binärdatei
    $ngenPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319ngen.exe"
    if (Test-Path $ngenPath) {
        Write-Host "[*] Ausführen von ngen.exe auf GAC-PoC.exe"
        & $ngenPath install $gacPoCPath
    } else {
        Write-Warning "ngen.exe wurde auf diesem Host nicht gefunden – Schritt wird übersprungen."
    }
    
    # 4. Fertigstellung für den Analysten protokollieren
    Write-Host "[+] Simulation abgeschlossen. Überprüfen Sie SIEM auf EventID 4688 Warnungen."
  • Bereinigungskommandos:

    # -------------------------------------------------
    # Bereinigung nach GAC-Hijacking Validierung
    # -------------------------------------------------
    $tempDir = "C:Temp"
    $gacPoCPath = Join-Path $tempDir "GAC-PoC.exe"
    
    if (Test-Path $gacPoCPath) {
        Remove-Item -Path $gacPoCPath -Force
        Write-Host "[*] Entfernt GAC-PoC.exe"
    }
    
    # Entfernen Sie alle generierten nativen Bilder (falls erstellt)
    $ngenPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319ngen.exe"
    if (Test-Path $ngenPath) {
        & $ngenPath uninstall $gacPoCPath 2>$null
        Write-Host "[*] Deinstalliert natives Bild (falls vorhanden)."
    }
    
    # Löschen Sie optional den temporären Ordner, wenn er leer ist
    if ((Get-ChildItem $tempDir).Count -eq 0) {
        Remove-Item -Path $tempDir -Force
        Write-Host "[*] Temporäres Verzeichnis $tempDir entfernt"
    }
    
    Write-Host "[+] Bereinigung abgeschlossen."