Ressourcen filtern

Blog

Wie sich Cyberkriminelle über DLL-Hijacking Systemrechte verschaffen

Bei einem kürzlich durchgeführten Red-Team-Einsatz haben wir eine DLL-Hijacking-Sicherheitslücke im Checkmk Windows-Agenten ausgenutzt, um Berechtigungen auf SYSTEM zu erweitern und Persistenz herzustellen. Obwohl CVE-2024-28827 bereits bekannt war, gab es zu diesem Zeitpunkt noch keinen öffentlichen Proof-of-Concept. Unsere Demonstration wurde in einer kontrollierten Laborumgebung mit Version 2.2.0p23 des Agenten durchgeführt und konzentrierte sich ausschließlich auf die […]

4 Minuten Lesezeit

David Kasabji

Principal Threat Intelligence Engineer

Wie sich Cyberkriminelle über DLL-Hijacking Systemrechte verschaffen – featured image

Bei einem kürzlich durchgeführten Red-Team-Einsatz haben wir eine DLL-Hijacking-Sicherheitslücke im Checkmk Windows-Agenten ausgenutzt, um Berechtigungen auf SYSTEM zu erweitern und Persistenz herzustellen. Obwohl CVE-2024-28827 bereits bekannt war, gab es zu diesem Zeitpunkt noch keinen öffentlichen Proof-of-Concept. Unsere Demonstration wurde in einer kontrollierten Laborumgebung mit Version 2.2.0p23 des Agenten durchgeführt und konzentrierte sich ausschließlich auf die Ausnutzung, nicht auf die Umgehung.

Wie funktioniert DLL-Hijacking?

DLL-Hijacking ist eine altbekannte Technik, bei der Windows‘ Such- und Ladevorgang für DLLs ausgenutzt wird. Wenn ein Angreifer eine bösartige DLL in einem Verzeichnis platzieren kann, das vor dem Speicherort der legitimen DLL durchsucht wird – und wenn dieses Verzeichnis beschreibbar ist –, kann beliebiger Code ausgeführt werden.

Die Standard-DLL-Suchreihenfolge in Windows ist wie folgt:

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\KnownDLLs
  2. Application directory
  3. C:\Windows\System32
  4. C:\Windows\System
  5. C:\Windows
  6. Aktuelles Arbeitsverzeichnis
  7. In der Umgebungsvariablen PATH aufgeführte Verzeichnisse

Aufklärung: Entdeckung eines angreifbaren Agenten

Nachdem wir uns mit einem Konto mit geringen Berechtigungen Zugang verschafft hatten, begannen wir mit unseren standardmäßigen Überprüfungen zur Berechtigungserweiterung. Unter den geplanten Aufgaben, Dienstberechtigungen und Datei-ACLs identifizierten wir eine anfällige Checkmk-Agent-Installation:

  • Ausführbare Datei: C:\Program Files (x86)\checkmk\service\check_mk_agent.exe
  • Child binary: C:\ProgramData\checkmk\agent\bin\cmk-agent-ctl.exe

Die Sicherheitsempfehlung für CVE-2024-28827 wies auf schwache Ordnerberechtigungen in C:\ProgramData\checkmk\agent\bin hin. In unserem Fall waren die ACLs nicht gehärtet worden. Da dieser Unterordner für unseren Benutzer mit geringen Berechtigungen beschreibbar war – und die Binärdatei beim Start des Dienstes als SYSTEM ausgeführt wurde –, entstand ein ideales Szenario für eine Rechteausweitung.

Suche nach hijackbaren DLLs

Wir nutzten Crassus, ein Tool von Will Dormann, um das Verhalten von cmk-agent-ctl.exe via Sysinternals` Procmon Logs zu analysieren. Crassus identifiziert fehlende DLLs, die von einer Anwendung angefordert werden, und überprüft, ob der aktuelle Benutzer Schreibzugriff auf die entsprechenden Verzeichnisse hat.

Das Tool hat folgende Ausgabe generiert:

Abbildung 1 – Identifizierung geeigneter DLL-Injektionspunkte mit Crassus

Das Tool hat mehrere fehlende DLLs gemeldet, die gehijackt werden könnten:

  • secur32.dll
  • CRYPTBASE.dll
  • SSPICLI.dll
  • OpenHardwareMonitorCLI.exe

Wiw wählten secur32.dll.

Erstellen der schädlichen DLL

Crassus generiert automatisch .cpp-Quell- und .def-Dateien für das Proxying der DLL. Es enthält eine Platzhalterfunktion Payload(), die standardmäßig calc.exe startet. Wir haben dies so geändert, dass stattdessen eine Meterpreter-Reverse-HTTPS-Payload gestartet wird.

  • Schritt 1 – Reverse Shell generieren
    Mit msfvenom von Metasploit haben wir eine Meterpreter-Ausführungsdatei erstellt.
  • Step 2 – Payload() in secur32.cpp ändern
    Wir haben den Standardcode durch eine CreateProcess-Funktion ersetzt, um die ausführbare Datei Meterpreter zu starten. Eine kurze Verzögerung (Sleep) wurde hinzugefügt, damit wir das erfolgreiche Laden der DLL in Procmon überwachen können.

Kompilieren und Einsetzen

We kompilierten das DLL mit Visual Studio Build Tools und setzten es wie folgt ein:

  • Secur32.dll wurde im anfälligen Verzeichnis abgelegt: C:\ProgramData\checkmk\agent\bin
  • Die ausführbare Datei Meterpreter (shell.exe) wurde im Desktop-Ordner des Benutzers abgelegt.

Einrichten des Listeners

Vor dem Neustart des Zielrechners haben wir einen Metasploit-Handler konfiguriert, der auf die umgekehrte Verbindung wartet.

Ausführung und SYSTEM-Shell

Nach dem Neustart wurde cmk-agent-ctl.exe als SYSTEM ausgeführt, lud unsere schädliche secur32.dll und startete shell.exe, die sich wieder mit uns verband – und uns damit vollständigen SYSTEM-Zugriff gewährte.

Die folgenden Procmon-Protokolle bestätigen, dass das Ereignis „Load Image“ auftrat, bei dem die schädliche DLL geladen wurde.

Die folgende Abbildung (ebenfalls aus Procmon) zeigt uns, dass der Prozess cmk-agent-ctl.exe den Prozess shell.exe erstellt hat.

Und schließlich haben wir eine SYSTEM-Shell auf unserem Abhörgerät.

Lessons learned

Dieses Engagement veranschaulicht, wie scheinbar geringfügige Fehlkonfigurationen – wie beschreibbare Ordner unter „ProgramData“ – in Kombination mit DLL-Hijacking in automatisch startenden Diensten auf SYSTEM-Ebene zu einer vollständigen Kompromittierung des Systems führen können.

Organisationen, die Checkmk oder ähnliche Agenten einsetzen, sollten:

  • Überwachen Sie nicht signierte DLLs, die von privilegierten Prozessen geladen werden.
  • Überprüfen Sie die Ordnerberechtigungen, insbesondere unter %ProgramData%.
  • Verstärken Sie die ACLs in Dienstverzeichnissen.
  • Führen Sie ein Upgrade auf gepatchte Versionen durch, die schwache Standardberechtigungen beheben.

Über den Autor

David Kasabji

Principal Threat Intelligence Engineer

David Kasabji ist leitender Threat Intelligence Engineer bei der Conscia Group. Seine Hauptaufgabe besteht darin, relevante Bedrohungsdaten in verschiedenen Formaten an bestimmte Zielgruppen zu liefern, angefangen bei Conscias eigener Cyberabwehr bis hin zu öffentlichen Medienplattformen. Zu seinen Aufgaben gehören die Analyse und Aufbereitung von Threat Intel aus verschiedenen Datenquellen, das Reverse Engineering von Malware-Samples, die […]

David Kasabji

Principal Threat Intelligence Engineer

Recent Blog posts

4 Dinge, über die MDR/SOC-Anbieter nicht gerne sprechen

Egal, ob Sie Ihren derzeitigen MDR/SOC-Anbieter evaluieren oder einen neuen Anbieter suchen, dieses Webinar bietet Ihnen die notwendigen Einblicke, um fundierte Entscheidungen zu treffen und die Siche...

Weiterlesen

Verwandt

Ressourcen