14. November 2026
„FAKE MAILS!!!“ steht in der Signatur: Fake-Bestellung lädt Agent Tesla über LuaJIT und Donut
Tobias Wilke
@wilketob
Die Signatur dieser Mail endet mit einem roten Warnhinweis: „FAKE MAILS!!! Wir werden Ihnen niemals …“. Die Firma, der diese Signatur gehört, warnt ihre Kunden also ausdrücklich vor gefälschten Mails. Und genau diese Signatur haben Kriminelle kopiert, um eine gefälschte Mail zu verschicken. Ironie kann man sich nicht ausdenken.
Es ist die dritte Mail aus einer Serie, die ich hier schon zweimal zerlegt habe: die Bestellung mit Agent Tesla und das Fake-Angebot mit LuaJIT. Diesmal schließt sich der Kreis. In Welle 2 musste ich zugeben, dass ich nicht weiß, was am Ende der Kette rauskommt. Jetzt weiß ich es. (Täter-Adressen sind defangt, damit nichts versehentlich klickbar ist.)
Was steht in der Mail?

Betreff Enclosed attached our new PO. Der Text ist vier Sätze lang:
Enclosed attached our new PO for bulk order, please issue us
Proforma Invoice accordingly.
[...]
We need to order urgently. Also please send estimated dates for shipping
Awaiting your urgent response.
Großbestellung, Zahlung kommt nach der Proforma-Rechnung, bitte schnell. Für jeden, der im Vertrieb ein info@-Postfach betreut, ist das ein Satz, auf den man gewartet hat. Welche Artikel, welche Mengen? Steht angeblich im Anhang.
Darunter hängt die komplette Signatur eines technischen Leiters einer deutschen Firma für Kunststoff-Schweißtechnik aus NRW. Name, Adresse, drei Telefonnummern, Geschäftsführer, Handelsregister, Logo und ein Banner mit Heißluft-Schweißgeräten. Absenderadresse ist aber info[@]<fremddomain>[.]com, ein Händler für Rollstuhlzubehör. Zwei Firmen, die nichts miteinander zu tun haben, und keine davon hat diese Mail geschrieben.
Die Signatur ist per Copy & Paste aus Gmail gekommen. Im HTML stehen noch Gmail-Weiterleitungsattribute mit Zeitstempel: 11. Juli 2026, zehn Tage vor dem Versand. Irgendwo hat jemand eine echte Mail dieser Firma in Gmail geöffnet und die Signatur abgeschöpft.
Warum ist das dieselbe Bande?
Die Mail kam am 21. Juli von 141[.]98[.]10[.]189, gemietet beim litauischen Hoster Host Baltic, ohne Reverse-DNS. Welle 1 kam von .108, Welle 2 von .164, alles dasselbe Netz. Die Message-ID 20260721092423.553A75F23D256E84@… folgt exakt dem bekannten Schema: Datum, Uhrzeit, Punkt, 16 Hex-Zeichen, Absenderdomain.
Ein Unterschied zu den beiden bisher analysierten Wellen: Dort waren die gefälschten Domains mit DMARC p=reject geschützt. Diesmal steht die Spoof-Domain auf p=none, SPF endet auf ~all. Ergebnis: softfail, aber kein Postfach der Welt weist die Mail deswegen ab. DMARC hätte hier also nichts gerettet. Der Spamfilter meines Hosters hat die Mail trotzdem korrekt als Spam markiert, unter anderem wegen der .js-Datei im Anhang.
Was steckt im Anhang?
Enclosed attached our new PO.zip enthält eine Datei: Enclosed attached our new PO.JS, 3,3 MB JavaScript. Ein Doppelklick startet den Windows Script Host. Ich habe alles statisch zerlegt, nichts ausgeführt.
Das JavaScript besteht zu 99 Prozent aus Füllmaterial: 79 identische Zeilen mit thailändischen, chinesischen und Cherokee-Zeichen und dem Füllwort MTIMZIILWRDBZHQR. In Zeile 40 versteckt sich hinter dem Zeichensalat der eigentliche, stark verschleierte Code. Er schreibt zwei Dateien in den Ordner Dokumente:
MTIMZIILWRDBZHQR.PIF, das ist LuaJIT 2.1, ein legitimer Interpreter für die Skriptsprache Lua. Bit für Bit dieselbe Datei wie in Welle 2.MTIMZIILWRDBZHQR.ttf, angeblich eine Schriftart, tatsächlich ein Lua-Skript.
Dann startet es LuaJIT in einem unsichtbaren Fenster und gibt ihm die „Schrift“ als Skript.
Netter Fund am Rande: Das JS enthält einen kompletten Persistenz-Block. Selbstkopie, .url-Verknüpfung, geplanter Task alle 15 Minuten. Der läuft aber nur, wenn eine Variable "YESSSSSSSS" enthält. Gesetzt ist "BBBBBSTBBBBB". Im Baukasten der Täter war das Häkchen für Persistenz schlicht nicht gesetzt.
Das Lua-Skript ist dasselbe Kit wie in Welle 2, in einer älteren Version. Die Entwickler waren hier noch weniger vorsichtig: Funktionen heißen im Klartext PolyRotDecode oder ScrambleLuaJITStrings. Das Skript überschreibt den Anfang von EtwEventWrite und AmsiScanBuffer mit drei Bytes, die sofort „alles in Ordnung“ zurückgeben. Damit sind die Windows-Ereignisprotokollierung und die Malware-Scan-Schnittstelle AMSI für diesen Prozess blind. Es prüft auf Debugger, sucht nach DLLs von Defender, CrowdStrike, SentinelOne und Co. und dekodiert dann einen 370 KB langen String zu 277 KB Shellcode. Der läuft direkt im Speicher.
Und was kommt am Ende raus?
In Welle 2 bin ich genau hier stecken geblieben. Diesmal passt der Kopf des Shellcodes zu Donut, einem Open-Source-Werkzeug, das .NET-Programme in Shellcode verpackt. Der Schlüssel liegt bei Donut praktischerweise gleich mit im Paket. Nach der Entschlüsselung (Chaskey-Verfahren im Zählermodus) liegt eine .NET-Anwendung vor mir: Agent Tesla.
Agent Tesla ist ein seit Jahren verkaufter Passwortdieb. Er liest gespeicherte Passwörter aus Browsern, Mailprogrammen, FTP-Clients, VPN-Software und dem Windows-Tresor. Dazu kommen Tastatureingaben, Zwischenablage und Screenshots. Die Konfiguration steht im Klartext drin: Die Beute geht per FTP an ftp[.]altatsradgez[.]com.
Und das ist der eigentliche Knackpunkt. Diesen FTP-Server kenne ich schon aus Welle 1. Dort hatte ich gezeigt, dass die Domain seit dem 24. Juli gesperrt ist, die Täter also ins Leere geklaut haben. Diese Mail ging aber am 21. Juli raus. Drei Tage vor der Sperre. Wer in diesem Fenster doppelgeklickt hat, dessen Passwörter sind sehr wahrscheinlich angekommen.
Die Agent-Tesla-Datei ist übrigens exakt so groß wie die aus Welle 1, aber ein neuer Build, bei VirusTotal bisher unbekannt. Gleicher Stealer-Kunde, gleiches FTP-Konto, wechselnde Verpackung: erst LuaJIT mit Donut, später PowerShell mit .NET-Injektor. Das sieht nach eingekauften Crypter-Diensten aus, die vor ein festes Stealer-Abo geschaltet werden.
Woran ihr's erkannt hättet
Wieder das stärkste Signal: Eine Bestellung kommt nicht als .JS-Datei. Wer im ZIP etwas anderes als PDF, Excel oder Word findet, löscht die Mail.
Dann: Die Absenderadresse gehört einem Rollstuhlhändler, die Signatur einer Schweißtechnik-Firma. Keine Artikel, keine Mengen, aber „urgent“, zweimal. „Good day,“ statt eines Namens. Und, ehrlich gesagt: Wenn in der Signatur „FAKE MAILS!!!“ steht, darf man das ruhig mal wörtlich nehmen.
Was ihr tun könnt
.js mit dem Editor verknüpfen. Per Gruppenrichtlinie oder Intune .js, .jse, .vbs und .wsf auf Notepad statt wscript.exe legen. Diese Kette, und die der beiden anderen Wellen, endet dann beim ersten Doppelklick.
Archive mit Skripten am Gateway blocken. ZIP, RAR und 7z mit .js, .exe, .pif, .bat oder .lnk darin gehören in Quarantäne. Das hätte alle drei Wellen abgefangen.
Spam-Markierungen ernst nehmen. DMARC half hier nicht, der Spamfilter schon. Mails mit X-Spam: Yes und ausführbarem Anhang sollten nie im Posteingang landen. Wie eure eigene Domain aufgestellt ist, zeigt der Mail-Check hier auf der Seite.
Programme aus Benutzerordnern sperren. AppLocker, WDAC oder Smart App Control verhindern, dass eine EXE aus Dokumente startet. Dann hilft LuaJITs saubere Weste den Tätern nichts.
Keine Passwörter im Browser speichern. Agent Tesla klaut genau diese Speicher. Ein Passwortmanager plus Zwei-Faktor-Anmeldung macht die Beute weitgehend wertlos. Wer den Verdacht hat, dass geklickt wurde: Nach Dokumente\MTIMZIILWRDBZHQR.PIF und %APPDATA%\eXCXES.exe suchen, Rechner vom Netz, alle dort je genutzten Passwörter ändern.
Fazit
Drei Wellen, drei Verpackungen, ein Passwortdieb. Die Mail ist Fließbandware mit geklauter Signatur, der Loader dahinter ist es nicht. Und ausgerechnet die älteste Welle der Serie ist die gefährlichste, weil ihr Exfil-Server noch lief. Gekostet hätte die Abwehr eine Dateizuordnung für .js.
Name, Firma, Anschrift, Telefonnummern und Registerdaten der angeblichen Absenderfirma sind im Artikel und im Screenshot unkenntlich gemacht, Logo und Produktbanner entfernt. Auch die als Absender eingetragene Domain ist redigiert (<fremddomain>[.]com). Beide Firmen haben mit der Kampagne nichts zu tun, ihre Identität wurde nur als Kulisse benutzt. Die vollständigen IOCs liegen intern.