Security ist oft ein Spiel der Katz und Maus. Meistens gewinnt die Maus, solang sie schnell genug ist. Aber manchmal findet man etwas, das einen kurz innehalten lässt. Genau das ist uns vor Kurzem passiert.
Am 02. Januar 2026 war ein Kollege von mir wieder einmal tief in den Logs eines unserer Produktiv-Server verrannt, als ihm ein Prozess auffiel, der dort absolut nichts verloren hatte.
Heute möchte ich euch die volle Forensik-Analyse dieses Vorfalls teilen. Es ist ein perfektes Beispiel dafür, warum ständige Überwachung wichtig ist und wie moderne Malware arbeitet, um unentdeckt zu bleiben.
1. Die Entdeckung (Initial Detection)
Alles begann mit einer ungewöhnlichen PID: 1067376.
Ein Prozess unter dieser ID lief unter dem Pfad /var/tmp/.font/n0de. Der Pfadnamen war sofort verdächtig:
- Er versteckt sich in
/var/tmp(wo sich Skripte oft tummeln). - Er tarnt sich hinter
.font, was nach einem harmlosen System-Service aussieht. - Einer unserer Docker-Container (eine Node.js App auf
node:20-alpine) funktionierte gar nicht mehr (HTTP 503).
Der Prozess lief im User-Kontext, aber das Verhalten war nicht normal.
2. Die Autopsie (Statische Analyse)
Mein Kollege hat den Speicher des Prozesses gedumpt (n0de_dump.bin) – ca. 11,8 MB rohe Daten. Was er fand, war faszinierend und beängstigend zugleich.
Die Basics
- Typ: ELF 64-bit, Executable
- Linking: Vollständig statisch gelinkt (keine Lib-Abhängigkeiten zum Host)
- Status: Stripped (alle Symbole entfernt, Reverse Engineering wird erschwert)
- SHA256:
1939a55d8ffdd540622de73dce808855ae75959f24c9df22f5c21ff2f9f5bf0c
Der Clou? Ein Check bei VirusTotal, Hybrid Analysis und Co. lieferte 0 Treffer. Das war keine Standard-Malware wie Kinsing oder XMRig. Es war eine Custom-Build oder eine extrem seltene Variante.
Was steckt drin? (String Analysis)
Die Datei enthielt ca. 144.000 Strings. Beim Filtern fielen ihm sofort Muster auf, die auf eine hochentwickelte Backdoor (RAT) hindeuteten:
- Netzwerk:
tcp4t,tcp6t,udp4t,udp6t(IPv4 und IPv6 Unterstützung). - Krypto: Massive Indikatoren (
keyHash,_nonce,keySize,isRSAPSS). - C2 Kommunikation:
handshake,sessionKey,payloadType,encrypted_key. - Verdächtiger Key:
6K5X2lE7jfBcpE5KEHG6/...(mehrfach im Dump, vermutlich hartcodiert für Auth).
Das Ganze basierte auf Protobuf (Google Protocol Buffers) für die Befehlsstruktur und nutzte legitime Bibliotheken wie github.com/pion/webrtc und dtls, um den Verkehr wie regulären WebRTC-Verkehr aussehen zu lassen.
3. Klassifizierung: Die “Silent Observer” Malware
Basierend auf der Analyse stufte mein Kollege die Bedrohung als gezielte, modulare C2-Backdoor ein.
- Kein Cryptominer: Es gab keine Hinweise auf CPU-Auslastung für Mining.
- Fokus auf Kontrolle: Die Module deuteten auf Remote Command Execution hin (
pushAll,Marshal,Publish). - Stealth: Durch die Nutzung von DTLS/WebRTC und verschlüsselten Payloads ist der Verkehr schwer zu unterscheiden von normalem Video-Streaming.
4. Einschätzung: War das ein Desaster?
Nein. Und hier ist der wichtigste Teil für jeden SysAdmin: Defense in Depth hat funktioniert.
Wir analysierten den Host und die Container-Umgebung:
- ✅ Kein Container-Escape: Die Malware war im betroffenen Container gefangen.
- ✅ Kein Host-Zugriff: Es gab keine Artefakte auf dem Host-Dateisystem.
- ✅ Keine privilegierten Container: Der Angreifer hatte keine Rechte, um auszubrechen.
Der Angriff war beschränkt auf die Applikationsebene. Die gehostete Domain war zwar kurzzeitig down (503), aber die anderen Daten auf dem Host blieben verschlossen.
5. Remediation (Die Lösung)
Wenn man so etwas findet, gibt es nur eine Lösung: Radikale Chirurgie.
# Stoppen und Vernichten des betroffenen Containersdocker stop <container_id>docker rm <container_id>Anschließend wurde das Image neu gebaut, die Entry-Points geprüft und die Logs auf den Infektionsvektor analysiert (Hypothesen: Supply-Chain-Angriff über npm oder eine RCE in der Node.js App).
Fazit
Es war “doof”, dass es passiert ist, aber es war ein wertvolles Training. Der Vorfall zeigt, dass statisch gelinkte, “unknown” Malware oft die gefährlichste ist, weil Antiviren-Programme blind sind. Manuelle Forensik und das Verständnis des eigenen Netzwerk-Traffics sind hier der einzige Schutz.
Die Hashes und IoCs habe ich intern dokumentiert, um zukünftige Vorfälle schneller zu erkennen.
Stay safe, und checkt eure /var/tmp Ordner!
IoCs (Indicators of Compromise) für meine Fellow Nerds:
- Hash:
1939a55d8ffdd540622de73dce808855ae75959f24c9df22f5c21ff2f9f5bf0c - Path:
/var/tmp/.font/n0de - Build-ID:
3e1cf4e26f079f4506ab4f04c6cf5f25135316dc
Wenn Ihnen dieser Artikel geholfen hat, teilen Sie ihn bitte mit anderen!
Einige Informationen könnten veraltet sein









