{"id":66183,"date":"2026-10-02T14:10:06","date_gmt":"2026-10-02T12:10:06","guid":{"rendered":"https:\/\/www.secuinfra.com\/?p=66183"},"modified":"2026-10-02T14:46:28","modified_gmt":"2026-10-02T12:46:28","slug":"innenansicht-eines-exponierten-qilin-affiliate-servers","status":"publish","type":"post","link":"https:\/\/www.secuinfra.com\/de\/techtalk\/innenansicht-eines-exponierten-qilin-affiliate-servers\/","title":{"rendered":"Innenansicht eines exponierten Qilin-Affiliate-Servers"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-flat ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">[inhalt_uebersetzt]<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/innenansicht-eines-exponierten-qilin-affiliate-servers\/#av_checkpy_und_av_check2py\" >av_check.py und av_check2.py<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/innenansicht-eines-exponierten-qilin-affiliate-servers\/#veeam_killpy\" >veeam_kill.py<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/innenansicht-eines-exponierten-qilin-affiliate-servers\/#deadmanpy\" >deadman.py<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/innenansicht-eines-exponierten-qilin-affiliate-servers\/#Die_Deployment-Reports_dokumentieren_die_Ausfuehrung\" >Die Deployment-Reports dokumentieren die Ausf\u00fchrung<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/innenansicht-eines-exponierten-qilin-affiliate-servers\/#Hashes_der_untersuchten_Artefakte\" >Hashes der untersuchten Artefakte<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">Von einem kompromittierten Server gesicherte Dateien zeichnen einen Qilin-Angriff nach \u2014 von der Sammlung aus Exchange-Postf\u00e4chern \u00fcber die Zerst\u00f6rung der Backups und das Ausrollen eines Wipers bis zu den ersten gemeldeten Ausf\u00fchrungen der Ransomware.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Zusammenfassung<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Im Juli 2026 entdeckten wir einen Mirror eines \u00f6ffentlich zug\u00e4nglichen Directory Listings unter 43.204.2.142:8888. Der Mirror umfasst 55.080 Dateien mit einem Gesamtvolumen von rund 3,8 GB und bildet offenbar das Home-Verzeichnis des root-Kontos auf einem Linux-Server ab. Er enth\u00e4lt offensives Tooling, Command-Histories, SSH-Material, C2-Dokumentation, abgelegte Daten der Opferorganisation, einen Qilin-Encryptor sowie Reports, die das Deployment-Framework des Affiliates erzeugt hat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Server war nicht einfach ein anonymer C2-Host. Artefakte in .bash_history, .ssh\/ und der Anwendungsumgebung weisen ihn als bei AWS gehosteten Server einer weiteren, legitimen Organisation aus, die wir als <strong>VICTIM-B<\/strong> bezeichnen. Bis Juni 2026 hatte ein Qilin-Affiliate root-Zugriff erlangt und nutzte das System f\u00fcr Operationen gegen einen europ\u00e4ischen Fertigungsbetrieb, den wir <strong>VICTIM-A<\/strong> nennen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die VICTIM-A-Dateien dokumentieren die Schlussphase des Angriffs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>F\u00fcnf Skripte f\u00fcr Exchange Web Services (EWS) nutzten Impersonation f\u00fcr ausgew\u00e4hlte F\u00fchrungskr\u00e4fte, durchsuchten deren Postf\u00e4cher und riefen Nachrichten und Anh\u00e4nge \u00fcber einen SOCKS-Proxy ab.<\/li>\n\n\n\n<li>veeam_kill.py zielte auf Veeam-Dienste, Backup-Repositories, Volume Shadow Copies, den Windows-Backup-Katalog und die Konfigurationsdatenbank von Veeam.<\/li>\n\n\n\n<li>deadman.py bereitete einen zeitgesteuerten Wiper f\u00fcr 37 namentlich hinterlegte Systeme vor. Der Trigger lie\u00df sich wahlweise als permanente WMI-Event-Subscription installieren oder per Group Policy dom\u00e4nenweit ausrollen.<\/li>\n\n\n\n<li>deploy_locker.py kopierte einen opferspezifischen Qilin-Encryptor in einer festgelegten Reihenfolge auf 37 Systeme.<\/li>\n\n\n\n<li>Am 5. Juni erzeugte Reports f\u00fchren 29 Hosts mit abgelegtem Payload, acht Ausf\u00fchrungsversuche und drei Systeme auf, f\u00fcr die das Tool eine Verschl\u00fcsselungswirkung meldete.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wir ordnen den Encryptor und das Deployment-Paket mit hoher Sicherheit Qilin zu. Ebenfalls mit hoher Sicherheit bewerten wir, dass der Server von VICTIM-B kompromittiert und zur Unterst\u00fctzung der Operation genutzt wurde. Die vorliegenden Dateien identifizieren den Affiliate nicht. Sie lassen ebenso wenig erkennen, wie VICTIM-A urspr\u00fcnglich kompromittiert wurde oder in welchem Endzustand sich jedes betroffene System befand.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"999\" height=\"1056\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-19.png\" alt=\"\" class=\"wp-image-66848\" style=\"aspect-ratio:0.9467455621301775\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-19.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-19-757x800.png 757w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-19-768x812.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 1:<\/strong> Offen zug\u00e4nglicher Index des Root-Verzeichnisses von VICTIM-B mit offensivem Tooling, abgelegten Daten, C2-Komponenten und Qilin-Deployment-Artefakten.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Umfang der Analyse<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Analyse beruht auf einer statischen Untersuchung des Verzeichnis-Mirrors; es wurde kein Payload ausgef\u00fchrt. Wo m\u00f6glich, verglichen wir Quellcode, Datei-Hashes, SQLite-Eintr\u00e4ge, Shell-History und eingebettete Zeitstempel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sofern nicht anders angegeben, beziehen sich alle Artefaktpfade in diesem Artikel auf das gespiegelte Root-Verzeichnis. Die bereinigten Ausschnitte in den Abbildungen erhalten den relevanten Control Flow und die Strings, ersetzen jedoch opferspezifische Werte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Namen der Opferorganisationen, Domains, Konten, Zugangsdaten, interne Adressen, personenbezogene Daten und Verhandlungsdetails haben wir redigiert. Die \u00f6ffentliche IP behalten wir bei, weil sie f\u00fcr retrospektives Hunting n\u00fctzlich ist. Sie geh\u00f6rte jedoch zu kompromittierter Infrastruktur und sollte nicht als Infrastruktur des Akteurs behandelt werden. Cloud-Adressen k\u00f6nnen au\u00dferdem bereinigt oder neu vergeben werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir verwenden den Begriff <em>Affiliate<\/em> f\u00fcr den Operator dieser Deployment-Umgebung. Die Dateien belegen weder die Identit\u00e4t dieser Person noch ihr Verh\u00e4ltnis zu den Entwicklern von Qilin oder ihre Rolle bei der Entwicklung des Encryptors.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Ein kompromittierter Server als Staging-System<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Die IP-Adresse 43.204.2.142 geh\u00f6rte VICTIM-B, nicht zwingend dem Qilin-Affiliate. Die Dateien beschreiben eine EC2-Instanz in der AWS-Region ap-south-1. Die Aktivit\u00e4t unter dem root-Konto zeigt, dass der Operator sowohl die Cloud-Umgebung als auch die auf dem Server betriebene Industrieanwendung untersuchte.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Artefakt<\/strong><\/td><td><strong>Befund<\/strong><\/td><\/tr><\/thead><tbody><tr><td>.ssh\/id_rsa.pub<\/td><td>Ein RSA-4096-Schl\u00fcssel mit dem Kommentar root@BELIIOT, zuletzt ge\u00e4ndert am 2. Juni 2026 um 18:21:11 UTC<\/td><\/tr><tr><td>.ssh\/authorized_keys<\/td><td>Der urspr\u00fcngliche AWS-ubuntu-Schl\u00fcssel sowie vier zus\u00e4tzliche autorisierte Schl\u00fcssel<\/td><\/tr><tr><td>.bash_history<\/td><td>Abfragen an 169.254.169.254, Einsicht in \/home\/ubuntu\/.bash_history, S3-Enumeration sowie SQL-Abfragen gegen Tabellen der Industrieanwendung wie systemconfigurationinfo, plantlevelconfigurationinfo und deviceconfig<\/td><\/tr><tr><td>.mysql_history<\/td><td>Kommandos, die Logs bereinigten und das Datenbank-Logging deaktivierten; Urheberschaft und Absicht bleiben unklar<\/td><\/tr><tr><td>.viminfo<\/td><td>Fr\u00fchere Bearbeitungen von SSH- und Tomcat-Konfigurationsdateien; sie k\u00f6nnen ebenso auf Administration wie auf Persistenz hindeuten<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die Unterscheidung in den letzten beiden Zeilen ist wesentlich. Das Deaktivieren des SQL-Loggings kann b\u00f6sartig sein, ebenso gut aber im Rahmen einer Notfallwartung der Datenbank erfolgen. Auch eine \u00c4nderung an sshd_config ist f\u00fcr sich genommen kein Angriffsindiz. Ab Juni 2026 verdichten sich die Hinweise: Neues Material f\u00fcr root-Zugriff, ein Callback-Dienst, Zugangsdaten der Opferorganisation, offensives Tooling und C2-Konfiguration laufen auf demselben Host zusammen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In der Gesamtschau belegen diese Artefakte, dass ein Angreifer den Server von VICTIM-B mit root-Rechten kontrollierte und als Staging- und C2-System nutzte. Eine fr\u00fchere Kompromittierung ist m\u00f6glich, doch die Eintr\u00e4ge aus 2024 und 2025 lassen sich nicht zuverl\u00e4ssig von legitimer Administration trennen. Um Weg und Zeitpunkt des Initial Access zu bestimmen, w\u00e4ren Authentifizierungslogs, CloudTrail, Systems-Manager-Aufzeichnungen und VPC Flow Logs erforderlich.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"999\" height=\"293\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-17.png\" alt=\"\" class=\"wp-image-66846\" style=\"aspect-ratio:3.404255319148936\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-17.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-17-800x235.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-17-768x225.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 2:<\/strong> Shell-History des root-Kontos mit EC2-Metadatenabfragen, S3-Enumeration, Einsicht in die History anderer Benutzer und Datenbank-Reconnaissance in der Industrieanwendung.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Identifikation des Qilin-Encryptors<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Das Verzeichnis enth\u00e4lt reichlich Qilin-bezogenes Material, doch die Zuordnung st\u00fctzt sich nicht auf Datei- oder Ordnernamen, sondern auf den Encryptor selbst.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">winbuild\/pain.exe ist eine 4.921.344 Byte gro\u00dfe PE32-Anwendung mit folgendem SHA-256-Hash:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">e1b041fee6bf591a96d135e101577214cfce0bb145c5ba1ba1064103d5d5d2c0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Statische Strings und die eingebettete Konfiguration liefern vier voneinander unabh\u00e4ngige Bez\u00fcge zu Qilin:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.&nbsp;<\/strong> Die Ransom Note nennt Qilin und enth\u00e4lt die \u00f6ffentlichen Blog-Adressen der Gruppe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.&nbsp;<\/strong> Das Binary stellt die passwortgesch\u00fctzte Kommandozeilenschnittstelle von Qilin bereit, darunter &#8211;password, &#8211;spread und &#8211;spread-vcenter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3.&nbsp;<\/strong> Die Konfiguration enth\u00e4lt eine opferspezifische Unternehmenskennung, die Ransom Note, die Dateiendung, eine Service-Kill-List sowie Zugangsdaten f\u00fcr Lateral Movement. Diese Werte ver\u00f6ffentlichen wir nicht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4.&nbsp;<\/strong> Eingebettetes PowerShell nutzt VMware PowerCLI und SSH, um den Zugriff auf ESXi zu ver\u00e4ndern, einen Linux-Payload zu \u00fcbertragen und ihn auf den Hypervisor-Hosts auszuf\u00fchren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der <a  href=\"https:\/\/attack.mitre.org\/software\/S1242\/\"  dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >Qilin-Software-Eintrag<\/a> bei MITRE dokumentiert Varianten f\u00fcr Windows, Linux und ESXi, Implementierungen in Rust und Go, passwortgesch\u00fctzte Ausf\u00fchrung sowie Funktionen f\u00fcr Lateral Movement. Zusammen mit der Ransom Note und der opferspezifischen Konfiguration st\u00fctzen diese Merkmale eine Zuordnung zu Qilin mit hoher Sicherheit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der eingebettete password_hash pr\u00fcft den an &#8211;password \u00fcbergebenen Wert, bevor der Encryptor startet. Er ist kein Verschl\u00fcsselungsschl\u00fcssel und l\u00e4sst sich nicht zur Entschl\u00fcsselung betroffener Dateien verwenden.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Rekonstruierter Zeitverlauf bei VICTIM-A<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgende Tabelle trennt, was die Artefakte zeitlich belegen, von dem, was sich daraus ableiten l\u00e4sst. Alle Zeitangaben in UTC.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Datum und Uhrzeit<\/strong><\/td><td><strong>Beleg<\/strong><\/td><td><strong>Einordnung<\/strong><\/td><\/tr><\/thead><tbody><tr><td>21.\u201330. Mai<\/td><td>In exfil\/ liegen zehn datumsgestempelte Veeam-Konfigurationsbackups<\/td><td>Belegt, dass t\u00e4gliche Backup-Artefakte gesammelt wurden; nicht jedoch, dass die Sammlung einmal pro Tag erfolgte<\/td><\/tr><tr><td>30. Mai<\/td><td>Artefakte aus Lohnbuchhaltung, ERP, Endpoint-Management, HR, Verzeichnisdienst und Exchange-Enumeration weisen zeitlich dicht beieinanderliegende \u00c4nderungszeitstempel auf<\/td><td>Daten wurden auf dem kompromittierten Server abgelegt; \u00dcbertragungsweg und urspr\u00fcnglicher Erfassungszeitpunkt sind nicht erhalten<\/td><\/tr><tr><td>2. Juni, 03:02:04<\/td><td>.sysmon_listener.py und sysmonitor.service tragen denselben \u00c4nderungszeitstempel<\/td><td>Der TCP-Callback-Dienst wurde abgelegt oder aktualisiert<\/td><\/tr><tr><td>2. Juni, 06:55:47<\/td><td>Erster Callback, umgerechnet aus dem serverlokalen Zeitstempel des Listeners<\/td><td>Eine VICTIM-A zugeordnete Quelle erreichte TCP\/4444<\/td><\/tr><tr><td>3. Juni, 06:12\u201315:54<\/td><td>F\u00fcnf EWS-Skripte zum Durchsuchen der Postf\u00e4cher von F\u00fchrungskr\u00e4ften wurden angelegt<\/td><td>Tooling f\u00fcr die gezielte Postfachsammlung wurde entwickelt oder ver\u00e4ndert<\/td><\/tr><tr><td>4. Juni, 04:20\u201304:55<\/td><td>veeam_kill.py, deadman.py, deploy_locker.py und pain.exe tragen \u00c4nderungszeitstempel innerhalb eines Fensters von 35 Minuten<\/td><td>Der Affiliate legte Tooling f\u00fcr Backup-Zerst\u00f6rung, Wiper und Ransomware gemeinsam ab<\/td><\/tr><tr><td>5. Juni, 04:14:45<\/td><td>Erster Deployment-Report: 36 Hosts im Scope, 35 \u00fcber SMB erreichbar, 29 mit abgelegtem Payload, keine Ausf\u00fchrung<\/td><td>Das Framework meldete, dass der Encryptor auf 29 Hosts kopiert, aber noch nicht gestartet worden war<\/td><\/tr><tr><td>5. Juni, 05:09:28<\/td><td>Zweiter Report: acht Ausf\u00fchrungsversuche und drei gemeldete Impact-Pr\u00fcfungen<\/td><td>Das Framework meldete, dass die Ausf\u00fchrung der Ransomware begonnen hatte<\/td><\/tr><tr><td>5. Juni, 05:19\u201316:26<\/td><td>Vier Verifikationsreports weisen 26, 26, 34 bzw. 33 nicht erreichbare Hosts aus<\/td><td>Die Verf\u00fcgbarkeit verschlechterte sich; die Reports belegen jedoch nicht, dass s\u00e4mtliche Ausf\u00e4lle durch die Ransomware verursacht wurden<\/td><\/tr><tr><td>9. Juni, 12:00<\/td><td>Voreingestellte Arm-Deadline im Usage-Text von deadman.py<\/td><td>Eine geplante Wiper-Deadline; kein Beleg daf\u00fcr, dass WMI-Subscriptions installiert oder ausgel\u00f6st wurden<\/td><\/tr><tr><td>22. Juni, 21:50:55<\/td><td>Letzte mtime einer Callback-Datei im gesicherten Listener-Bestand<\/td><td>Der letzte erhaltene Callback \u2014 nicht zwingend das Ende des Zugriffs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der 30 Zeilen lange Python-Listener liefert einen schmalen, aber n\u00fctzlichen Nachweis fortdauernden Zugriffs. Er bindet sich an 0.0.0.0:4444, protokolliert Quelladresse und lokale Zeit und verwirft die empfangenen Daten. Der Mirror enth\u00e4lt 4.273 Callback-Dateien mit 4.798 Verbindungseintr\u00e4gen von einer einzigen Adresse bei VICTIM-A. Diese Artefakte belegen wiederholte TCP-Konnektivit\u00e4t. Sie lassen weder den verbindenden Prozess erkennen noch belegen sie, dass Kommandos ausgef\u00fchrt wurden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"999\" height=\"868\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-24.png\" alt=\"\" class=\"wp-image-66855\" style=\"aspect-ratio:1.1510791366906474\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-24.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-24-800x695.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-24-768x667.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 3:<\/strong> Quellcode von .sysmon_listener.py, einem TCP\/4444-Listener, der eingehende Verbindungen protokolliert und die empfangenen Daten verwirft.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Dateiname f\u00fchrt in die Irre: .sysmon_listener.py hat nichts mit <a  href=\"https:\/\/learn.microsoft.com\/en-us\/sysinternals\/downloads\/sysmon\"  dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >Sysmon<\/a> von Sysinternals zu tun. Warum der Operator ihn w\u00e4hlte, geht aus den vorliegenden Artefakten nicht hervor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"656\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-20.png\" alt=\"\" class=\"wp-image-66849\" style=\"aspect-ratio:1.5238095238095237\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-20.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-20-800x525.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-20-768x504.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 4:<\/strong> Vom Listener erzeugte Callback-Artefakte mit 4.798 TCP-Verbindungen in 4.273 Dateien.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Gezielte Sammlung aus Exchange-Postf\u00e4chern<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In der n\u00e4chsten Phase konzentrieren sich die VICTIM-A-Artefakte auf die gezielte Sammlung von Postfachinhalten. F\u00fcnf Python-Skripte setzen Postfach-Discovery, Nachrichtensuche und das Abrufen von Anh\u00e4ngen um, indem sie rohe SOAP-Requests an EWS senden. Alle verwenden denselben hartkodierten SOCKS5-Proxy unter 127.0.0.1:11080, dasselbe \u2014 hier redigierte \u2014 Dom\u00e4nenkonto und eine deaktivierte TLS-Zertifikatspr\u00fcfung. Der Header ExchangeImpersonation w\u00e4hlt f\u00fcr jeden Request das Zielpostfach aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;t:ExchangeImpersonation&gt;<br>&nbsp; &lt;t:ConnectingSID&gt;<br>&nbsp;&nbsp;&nbsp; &lt;t:SmtpAddress&gt;[REDACTED-MAILBOX]&lt;\/t:SmtpAddress&gt;<br>&nbsp; &lt;\/t:ConnectingSID&gt;<br>&lt;\/t:ExchangeImpersonation&gt;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"708\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/Abbildung-5.png\" alt=\"\" class=\"wp-image-66857\" style=\"width:800px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 5:<\/strong> EWS-Keyword-Scanner mit SOCKS5-Proxying, Exchange-Impersonation und serverseitigen FindItem-Suchen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft dokumentiert, dass Exchange-Impersonation einem Service Account erlaubt, im Namen eines anderen Benutzers zu handeln, und in den betroffenen Exchange-Versionen die Rolle ApplicationImpersonation voraussetzt. Microsoft weist zudem darauf hin, dass der Zugriff unter dem Konto protokolliert wird, dessen Identit\u00e4t \u00fcbernommen wurde \u2014 was die Aufkl\u00e4rung erschweren kann. Siehe <a  href=\"https:\/\/learn.microsoft.com\/en-us\/exchange\/client-developer\/exchange-web-services\/how-to-configure-impersonation\"  dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >Configure impersonation<\/a> und <a  href=\"https:\/\/learn.microsoft.com\/en-us\/exchange\/client-developer\/exchange-web-services\/how-to-control-access-to-ews-in-exchange\"  dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >Control access to EWS<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Sammlung erfolgte gezielt, nicht wahllos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Artefakt<\/strong><\/td><td><strong>Beobachtetes Verhalten<\/strong><\/td><\/tr><\/thead><tbody><tr><td>ews_pull.py<\/td><td>Ruft aktuelle Nachrichten aus ausgew\u00e4hlten Postf\u00e4chern von F\u00fchrungskr\u00e4ften ab<\/td><\/tr><tr><td>ews_accounting.py<\/td><td>Ruft aktuelle Nachrichten aus dem Buchhaltungspostfach ab<\/td><\/tr><tr><td>ews_cfo_attach.py und ews_cfo_property_attach.py<\/td><td>Laden Anh\u00e4nge zu bestimmten Elementen des CFO-Postfachs herunter<\/td><\/tr><tr><td>ews_cfo_keyword_scan.py<\/td><td>F\u00fchrt serverseitige Substring-Suchen \u00fcber Inbox und Sent Items aus<\/td><\/tr><tr><td>exfil\/cfo_keyword_scan.txt<\/td><td>H\u00e4lt die zur\u00fcckgelieferten Trefferzahlen fest, darunter 177 f\u00fcr private bank, 129 f\u00fcr Luxembourg sowie jeweils 76 f\u00fcr trust und holding<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der Scanner definiert 144 Keyword-Eintr\u00e4ge, davon 141 eindeutig. Sie decken Banking, Rechts- und Steuerthemen, Immobilien, Familiennamen und Unternehmenstransaktionen ab. F\u00fcr jeden Begriff sendet er einen FindItem-Request mit serverseitigen Contains-Restrictions auf Betreff- und Body-Feld und liest anschlie\u00dfend TotalItemsInView aus. Damit konnte der Affiliate ein Postfach zun\u00e4chst anhand der Trefferzahlen priorisieren, bevor er entschied, welche Inhalte abgerufen werden sollten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Auswahl der Postf\u00e4cher und die Suchbegriffe deuten auf das Sammeln finanzieller und pers\u00f6nlicher Informationen hin, die eine Erpressung st\u00fctzen k\u00f6nnten. Skripte und gespeicherte Ausgaben belegen die Suchen und deren Trefferzahlen, nicht jedoch den Download jeder passenden Nachricht oder jedes Anhangs.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Wiederherstellung ausschalten, Wiper vorbereiten<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Mit der n\u00e4chsten Gruppe von Skripten verschiebt sich der Schwerpunkt von der Sammlung hin zur Vorbereitung der Impact-Phase. Vier Python-Programme greifen auf dasselbe Muster f\u00fcr Remote-Ausf\u00fchrung zur\u00fcck: Authentifizierung \u00fcber SMB\/RPC, Anlegen eines kurzlebigen Windows-Dienstes, Ausf\u00fchrung eines Kommandos, Abholen einer Statusdatei \u00fcber ADMIN$ und L\u00f6schen des Dienstes. Je nach Programm beginnen die Dienstnamen mit VKill, WinMnt, LDep oder AvChk.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"av_checkpy_und_av_check2py\"><\/span>av_check.py und av_check2.py<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vor dem Ausrollen des destruktiven Toolings erfasste der Affiliate f\u00fcr eine hartkodierte Host-Liste den Stand der Endpoint-Security. av_check.py f\u00fchrt ein zusammengesetztes Discovery-Kommando remote aus; av_check2.py pr\u00fcft den Dienststatus unauff\u00e4lliger \u00fcber MS-SCMR.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"420\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/Abbildung-6.png\" alt=\"\" class=\"wp-image-66858\" style=\"width:800px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 6:<\/strong> av_check.py iteriert \u00fcber die hartkodierte Zielliste, f\u00fchrt CHECK_CMD aus und serialisiert die geparsten Ergebnisse nach JSON.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr jedes Ziel nutzt av_check.py Impacket-DCE\/RPC \u00fcber die Named Pipe svcctl, bindet sich an das MS-SCMR-Interface und legt einen On-Demand-Dienst an, dessen Name sich aus AvChk und dem letzten IP-Oktett des Ziels zusammensetzt. Der Dienst f\u00fchrt das \u00fcbergebene Kommando aus und wird nach der Ausf\u00fchrung wieder entfernt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"570\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-22.png\" alt=\"\" class=\"wp-image-66852\" style=\"aspect-ratio:1.7518248175182483\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-22.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-22-800x456.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-22-768x438.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 7:<\/strong> scm_exec() legt \u00fcber Impacket-MS-SCMR-Aufrufe einen tempor\u00e4ren AvChk*-Dienst an, startet ihn und entfernt ihn wieder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Kommando pr\u00fcft die ESET-Dienste ekrn und ERAAgent, sucht nach Listenern auf TCP\/2222, fragt die Microsoft-Defender-Dienste WinDefend und WdNisSvc ab und liest Defender-Richtlinie, Ausnahmen sowie den Status von Echtzeitschutz und Tamper Protection aus. Die Ausgabe wird nach C:\\Windows\\Temp\\avchk.txt umgeleitet und \u00fcber ADMIN$ abgeholt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"233\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-21.png\" alt=\"\" class=\"wp-image-66851\" style=\"aspect-ratio:4.285714285714286\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-21.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-21-800x187.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-21-768x179.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 8:<\/strong> Kommando zur Erfassung der Endpoint-Security \u2014 abgefragt werden ESET, Microsoft Defender, TCP\/2222, Ausnahmen und der Status der Tamper Protection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">av_check2.py verzichtet auf Remote-Kommandoausf\u00fchrung. Das Skript ruft OpenServiceW und QueryServiceStatus f\u00fcr die in SVC_NAMES hinterlegten Dienstnamen auf und wertet ESET als vorhanden, wenn ekrn oder ERAAgent l\u00e4uft, Microsoft Defender bei laufendem WinDefend und Microsoft Defender for Endpoint bei laufendem Dienst Sense.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"829\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-23.png\" alt=\"\" class=\"wp-image-66854\" style=\"aspect-ratio:1.2060301507537687\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-23.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-23-800x664.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-23-768x637.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 9:<\/strong> av_check2.py fragt den Status der Dienste von ESET, Defender und Sense \u00fcber MS-SCMR ab, ohne einen Remote-Dienst anzulegen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"veeam_killpy\"><\/span>veeam_kill.py<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Veeam-Skript geht wenig subtil vor. Es adressiert einen namentlich hinterlegten Backup-Server, den wir hier redigiert haben, und baut eine Kommandokette auf, die<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zehn Veeam-Dienste stoppt;<\/li>\n\n\n\n<li>V:\\Backup, V:\\VeeamBackup, E:\\Backup und D:\\Backup l\u00f6scht;<\/li>\n\n\n\n<li>vssadmin delete shadows \/all \/quiet und wbadmin delete catalog -quiet ausf\u00fchrt;<\/li>\n\n\n\n<li>versucht, die Datenbank VeeamBackup \u00fcber VEEAMSQL2016, VEEAMSQL und lokale SQL-Instanzen zu entfernen; und<\/li>\n\n\n\n<li>die Veeam-Dienste auf disabled setzt.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"966\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-13.png\" alt=\"\" class=\"wp-image-66840\" style=\"aspect-ratio:1.0344827586206897\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-13.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-13-800x774.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-13-768x743.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 10:<\/strong> Kommandokette von veeam_kill.py gegen Veeam-Dienste, Repositories, Shadow Copies, den Backup-Katalog und die Konfigurationsdatenbank.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Aktionen entsprechen <strong>T1490 Inhibit System Recovery<\/strong>. Das Durchprobieren von drei SQL-Instanznamen erlaubte es dem Skript, ohne Kenntnis der genauen Veeam-Datenbankkonfiguration zu arbeiten. Wir fanden weder Endpoint-Telemetrie noch ein authentifiziertes Abschlussprotokoll, das belegt, dass die L\u00f6schung des Repositories oder der Datenbank erfolgreich war.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"deadmanpy\"><\/span>deadman.py<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W\u00e4hrend veeam_kill.py auf die Wiederherstellung zielt, bereitet deadman.py einen zweiten destruktiven Pfad vor: einen zeitgesteuerten Wiper-Orchestrator. Das Skript enth\u00e4lt 37 hartkodierte Ziele, gegliedert in Wellen \u2014 30 erhalten den vollst\u00e4ndigen Payload, sieben \u00e4ltere Systeme eine reduzierte Variante. \u00dcber die Kommandozeilenmodi kann der Affiliate den Trigger installieren, pr\u00fcfen, neu terminieren oder entfernen. Ein f\u00fcnfter Modus rollt ihn per Group Policy aus.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"1045\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-16.png\" alt=\"\" class=\"wp-image-66843\" style=\"aspect-ratio:0.9561752988047809\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-16.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-16-765x800.png 765w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-16-768x803.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 11:<\/strong> deadman.py legt die Wiper-Komponenten \u00fcber ADMIN$ ab und ruft den Installer \u00fcber einen kurzlebigen WinMnt*-Dienst auf.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"147\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-15.png\" alt=\"\" class=\"wp-image-66842\" style=\"aspect-ratio:5.661971830985915\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-15.png 837w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-15-800x141.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-15-768x135.png 768w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 12:<\/strong> smb_connect() baut mit hartkodierten Dom\u00e4nen-Zugangsdaten eine authentifizierte Impacket-SMB-Sitzung auf.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr jedes Ziel authentifiziert sich do_arm() \u00fcber SMB, schreibt die Ausgabe von wipe_cmd() nach ADMIN$\\Temp\\hcr.cmd, l\u00e4dt hcr_arm.ps1 hoch und ruft den Installer \u00fcber einen tempor\u00e4ren WinMnt*-Dienst auf.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Payload-Builder w\u00e4hlt zwischen einem vollst\u00e4ndigen und einem Legacy-Profil. Beide Varianten entfernen ESET-Dienste, l\u00f6schen Backup-Artefakte und nutzen powershell.exe oder reg.exe, um die L\u00f6schung von ntoskrnl.exe sowie der auf dem Datentr\u00e4ger liegenden Registry-Hives SAM und SYSTEM f\u00fcr den n\u00e4chsten Bootvorgang einzureihen. Das vollst\u00e4ndige Profil nimmt zus\u00e4tzlich die Hives SOFTWARE und SECURITY, die Boot Configuration Data, EFI-Dateien und den Rohinhalt der Datentr\u00e4ger ins Visier.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"542\" height=\"708\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/Abbildung-13.png\" alt=\"\" class=\"wp-image-66859\" style=\"width:800px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 13:<\/strong> wipe_cmd() erzeugt die Full- und Legacy-Payloads gegen Wiederherstellungsartefakte, Registry-Hives, Boot-Dateien, EFI-Daten und Datentr\u00e4ger auf Rohebene.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der tempor\u00e4re Dienst dient nur der Auslieferung. Der Installer legt eine permanente WMI-Event-Subscription unter root\\subscription an:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>WMI-Objekt<\/strong><\/td><td><strong>Name und Funktion<\/strong><\/td><\/tr><\/thead><tbody><tr><td>__EventFilter<\/td><td>SCMHealthCheck wertet Win32_LocalTime im 60-Sekunden-Takt aus<\/td><\/tr><tr><td>CommandLineEventConsumer<\/td><td>SCMHealthRemediation f\u00fchrt cmd.exe \/c C:\\Windows\\Temp\\hcr.cmd aus<\/td><\/tr><tr><td>__FilterToConsumerBinding<\/td><td>Verbindet den zeitbasierten Filter mit dem Command Consumer<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die Subscription bleibt nach dem Ende des Installers im WMI-Repository bestehen und \u00fcbersteht Neustarts. Da die WQL-Bedingung nur Jahr, Monat, Tag und Stunde auswertet, wird eine Deadline wie 12:30 bereits um 12:00 aktiv. Sie st\u00fctzt sich zudem auf die lokale Uhr des jeweiligen Hosts und kann wiederholt ausl\u00f6sen, solange die Bedingung erf\u00fcllt bleibt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Ausl\u00f6sen deaktiviert der vollst\u00e4ndige Payload Wiederherstellungsmechanismen, entfernt Backup-Artefakte, reiht die L\u00f6schung von Registry-Hives, ntoskrnl.exe und BCD-Dateien ein, l\u00f6scht EFI-Daten, schreibt 4 MB Nullen an den Anfang von PhysicalDrive0 bis PhysicalDrive7 und erzwingt einen Neustart. Bei Legacy-Zielen entf\u00e4llt die Schleife zum direkten \u00dcberschreiben der Datentr\u00e4ger; der Backup-Server erh\u00e4lt zus\u00e4tzliche Kommandos zum Abbau von Veeam. Der Quellcode implementiert diese destruktiven Aktionen, er belegt jedoch nicht, dass Schreibzugriffe auf Datentr\u00e4ger oder L\u00f6schungen auf irgendeinem Ziel tats\u00e4chlich abgeschlossen wurden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Modus gpo er\u00f6ffnet einen dom\u00e4nenweiten Deployment-Pfad \u00fcber eine erzwungene GPO mit dem Namen <strong>Windows Health Compliance<\/strong>. Er legt Payload und Startskript in SYSVOL ab, sodass Dom\u00e4nenmitglieder bei der Richtlinienverarbeitung dieselbe permanente WMI-Subscription anlegen. Dabei handelt es sich um den Missbrauch regul\u00e4rer Group-Policy-Administration, nicht um die Ausnutzung einer GPO-Schwachstelle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Artefakte belegen, dass der Affiliate einen Wiper f\u00fcr den Einsatz auf einzelnen Hosts oder dom\u00e4nenweit vorbereitete. Sie zeigen nicht, wie viele WMI-Subscriptions installiert wurden, ob Clients die GPO verarbeiteten oder ob die Deadline am 9. Juni auf irgendeinem System erreicht wurde.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Staging und Ausf\u00fchrung des Qilin-Encryptors<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem die Wiederherstellung ins Visier genommen und der Wiper vorbereitet war, wandte sich der Affiliate dem Locker zu. deploy_locker.py und deadman.py enthalten dieselben 37 Ziele. Das Deployment-Skript kopiert pain.exe nach C:\\Windows\\Temp\\svcmon.exe und startet die Datei \u00fcber tempor\u00e4re LDep*-Dienste. Kommentare in der Zielliste setzen den Backup-Server an die erste Stelle, gefolgt von Systemen, auf denen kein ESET vermutet wurde, dann weiteren Servern und Hypervisoren, schlie\u00dflich dem Management-Server der Sicherheitsl\u00f6sung und den Domain Controllern. Die Reihenfolge legt den Deployment-Plan des Affiliates offen; sie belegt jedoch nicht, dass alle 37 Systeme erreicht wurden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"444\" height=\"708\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/Abbildung-14.png\" alt=\"\" class=\"wp-image-66860\" style=\"width:800px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 14:<\/strong> deploy_locker.py steuert das wellenbasierte Ablegen und Ausf\u00fchren des Qilin-Encryptors.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"999\" height=\"1077\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-18.png\" alt=\"\" class=\"wp-image-66847\" style=\"aspect-ratio:0.9284332688588007\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-18.png 999w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-18-742x800.png 742w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-18-768x828.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 15:<\/strong> run_wave() trennt Upload und Ausf\u00fchrung des Payloads und protokolliert Fehlschl\u00e4ge je Host.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"188\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/Abbildung-16.png\" alt=\"\" class=\"wp-image-66861\" style=\"width:800px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 16:<\/strong> upload_locker() kopiert den Encryptor \u00fcber ADMIN$ in den Staging-Pfad auf dem Ziel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"864\" height=\"89\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-14.png\" alt=\"\" class=\"wp-image-66841\" style=\"aspect-ratio:9.651162790697674\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-14.png 864w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-14-800x82.png 800w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/image-14-768x79.png 768w\" sizes=\"(max-width: 864px) 100vw, 864px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abbildung 17:<\/strong> Hartkodierte Payload-Pfade, die pain.exe im Windows-Temp-Verzeichnis des Ziels in svcmon.exe umbenennen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Deployment-Ablauf ist zweistufig: run_wave() versucht zun\u00e4chst, den Encryptor auf allen Zielen der gew\u00e4hlten Welle abzulegen, und startet ihn anschlie\u00dfend nur auf den Hosts, bei denen der Upload erfolgreich war. Die Ergebnisse je Host werden in fired, fire_fail und verwandten Statusfeldern festgehalten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Die_Deployment-Reports_dokumentieren_die_Ausfuehrung\"><\/span>Die Deployment-Reports dokumentieren die Ausf\u00fchrung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Reports kommen im Mirror einer Live-Chronologie der Ausf\u00fchrung am n\u00e4chsten. Zwei maschinell erzeugte Datens\u00e4tze unter seceng_reports\/ halten den \u00dcbergang vom Staging zur Ausf\u00fchrung fest:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Erzeugt (UTC)<\/strong><\/td><td><strong>Hosts<\/strong><\/td><td><strong>SMB erreichbar<\/strong><\/td><td><strong>Staged<\/strong><\/td><td><strong>Ausf\u00fchrungsversuche<\/strong><\/td><td><strong>Gemeldeter Impact<\/strong><\/td><td><strong>Spread-Launcher<\/strong><\/td><\/tr><\/thead><tbody><tr><td>5. Juni, 04:14:45<\/td><td>36<\/td><td>35<\/td><td>29<\/td><td>0<\/td><td>0<\/td><td>None<\/td><\/tr><tr><td>5. Juni, 05:09:28<\/td><td>36<\/td><td>35<\/td><td>29<\/td><td>8<\/td><td>3<\/td><td>Redigierter Domain Controller, &nbsp;wmi_spread_domain_scan, ok=True<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der erste Report ist eine Momentaufnahme vor der Ausf\u00fchrung: Auf 29 Hosts lag der Payload bereit, gestartet wurde er auf keinem. 55 Minuten sp\u00e4ter verzeichnete das Framework acht Ausf\u00fchrungsversuche und drei positive Impact-Pr\u00fcfungen. Es handelt sich um Ergebnisse, die der Affiliate selbst erzeugt hat, nicht um unabh\u00e4ngige Endpoint-Telemetrie. Sie sind jedoch der deutlichste erhaltene Beleg daf\u00fcr, dass das Ransomware-Deployment vom Staging in die Ausf\u00fchrung \u00fcberging.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Bedeutung f\u00fcr die Verteidigung<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Vor dem Start des Encryptors erzeugte der Affiliate mehrere detektierbare Ereignisse:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.&nbsp;<\/strong> Ein einzelnes Konto f\u00fchrte \u00fcber wiederholte FindItem-Aufrufe EWS-Impersonation gegen High-Value-Postf\u00e4cher durch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.&nbsp;<\/strong> Remote angelegte Dienste traten unter charakteristischen Pr\u00e4fixen auf und starteten cmd.exe aus services.exe heraus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3.&nbsp;<\/strong> Wiederherstellungsmechanismen, Veeam-Dienste und Sicherheitsprodukte wurden abgefragt oder ver\u00e4ndert, bevor der Encryptor ausgerollt wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4.&nbsp;<\/strong> Permanente WMI-Objekte und eine neue, mit der Dom\u00e4ne verkn\u00fcpfte GPO trugen plausible administrative Namen, verwiesen aber auf ungew\u00f6hnliche, destruktive Payload-Pfade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5.&nbsp;<\/strong> Die Qilin-Executable wurde unter dem generischen Namen svcmon.exe abgelegt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das offen zug\u00e4ngliche Verzeichnis enth\u00e4lt mehr als eine Sammlung von Tools. Es h\u00e4lt einen operativen Ablauf fest: Priorisierung von Postf\u00e4chern, Discovery der Sicherheitsprodukte, Unterbinden der Wiederherstellung, Vorbereitung des Wipers und wellenbasiertes Ransomware-Deployment. Ebenso wichtig ist die verbleibende Unsicherheit \u2014 der Quellcode zeigt F\u00e4higkeiten, die Reports des Affiliates zeigen behauptete Ergebnisse, doch eine vollst\u00e4ndige Best\u00e4tigung der Auswirkungen auf Endpoint-Ebene liefern die gesicherten Artefakte nicht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hashes_der_untersuchten_Artefakte\"><\/span>Hashes der untersuchten Artefakte<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Artefakt<\/strong><\/td><td><strong>SHA-256<\/strong><\/td><\/tr><\/thead><tbody><tr><td>winbuild\/pain.exe<\/td><td>e1b041fee6bf591a96d135e101577214cfce0bb145c5ba1ba1064103d5d5d2c0<\/td><\/tr><tr><td>deadman.py<\/td><td>71fca801f0bd88a417d71aa0be5adc0a983127a063e7\u2026<\/td><\/tr><tr><td>veeam_kill.py<\/td><td>2ec5fa31d1a590daf96e998941ad1dff4efc290ff42e\u2026<\/td><\/tr><tr><td>deploy_locker.py<\/td><td>4a933c387a9228056b9dc234e64210ce254c633eabaa\u2026<\/td><\/tr><tr><td>av_check.py<\/td><td>92de01b28a3cb8c7319667635c96cfd5dc1eee73e2b7\u2026<\/td><\/tr><tr><td>av_check2.py<\/td><td>e7225880c730d190b872b60c7f109cdb56a5c7429f48\u2026<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die Analyse basiert auf einem im Juli 2026 gesicherten Mirror. Ausschlie\u00dflich statische Analyse. Alle Zeitstempel sind auf UTC normalisiert, sofern nicht ausdr\u00fccklich als serverlokal gekennzeichnet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Von einem kompromittierten Server gesicherte Dateien zeichnen einen Qilin-Angriff nach \u2014 von der Sammlung aus Exchange-Postf\u00e4chern \u00fcber die Zerst\u00f6rung der Backups und das Ausrollen eines Wipers bis zu den ersten gemeldeten Ausf\u00fchrungen der Ransomware.<\/p>\n","protected":false},"author":6,"featured_media":66862,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"dpc_author_order":[33],"footnotes":""},"categories":[66],"tags":[],"class_list":["post-66183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-techtalk"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/66183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/comments?post=66183"}],"version-history":[{"count":2,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/66183\/revisions"}],"predecessor-version":[{"id":66863,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/66183\/revisions\/66863"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/media\/66862"}],"wp:attachment":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/media?parent=66183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/categories?post=66183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/tags?post=66183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}