Cybersecurity-onderzoekers hebben details onthuld van een voorheen ongedocumenteerd Python-implantaatframework genaamd TWINLOOT.
“TWINLOOT is een modulair, PyArmor-gehard Python-implantaat dat is ontworpen om de volledige command-and-control-infrastructuur binnen vertrouwde Microsoft-services te laten werken”, aldus Ontinue in een technisch rapport gedeeld met The Hacker News. “Taken stromen via SharePoint Online-bestandsdeaddrops via de Microsoft Graph API. Interactieve toegangsroutes voor operators via WebRTC DataChannels doorgegeven door Microsoft Teams TURN-servers.”
Verkeer van en naar de Graph API wordt aangestuurd door middel van een headless exemplaar van de eigen Edge-browser van het slachtoffer, waardoor deze vrijwel niet te onderscheiden is van legitieme netwerkactiviteit. Het implantaat is uitgerust om Windows-referenties te verzamelen met behulp van pixel-perfecte nep-vergrendelingsschermen, een omgekeerde SOCKS5-draai in slachtoffernetwerken te bieden, willekeurige opdrachten uit te voeren en persistentie op de host tot stand te brengen.
Ontinue’s Cyber Defense Center zei dat het het implantaat ontdekte tijdens zijn onderzoek naar een lopende campagne in juli 2026. Een bepalend aspect van de malware is het gebruik van meerdere command-and-control (C2) kanalen, die allemaal gebruik maken van Microsoft-services –
- SharePoint Online (Graph API) voor taken
- Teams TURN-relais voor interactieve toegang
- Victim’s Edge-browser voor het verwerken van Graph-verkeer
De initiële toegangsvector wordt beoordeeld als een social engineering-aanval via Microsoft Teams, waarbij de bedreigingsacteur, vermomd als IT-ondersteuning, een doelwit overhaalde om een PowerShell-opdracht uit te voeren die verantwoordelijk is voor het downloaden van een archiefbestand met de Python-runtime en een gecompileerde payload van 39 MB (“bootstrap-fat.pyc”), die dient als lader voor TWINLOOT.
Ontinue beschrijft de bedreigingsacteur als deskundig op het gebied van offensief vakmanschap en de cloudarchitectuur van Microsoft en zei dat het Python-framework de eerste tool is die Microsoft 365 dead drop C2, Teams TURN relay-misbruik en headless browsertransport onder één paraplu combineert.
TWINLOOT voert twee parallelle kanalen uit vanaf de slachtoffermachine: één is een dead drop van SharePoint die zich authenticeert bij de Azure-tenant van een aanvaller en elke 15 seconden een SharePoint-schijf opvraagt voor opdrachten, waardoor de operator instructies kan ontvangen, uitvoeren en gegevens terug naar de server kan exfiltreren.
Het tweede kanaal maakt gebruik van een omgekeerde SOCKS5-tunnel om interactieve toegang en zijdelingse beweging mogelijk te maken. “Het loopt via een directe TLS/WebSocket-verbinding met de server van de aanvaller of via de Teams TURN WebRTC-relay”, aldus Ontinue.
“De operator krijgt een SOCKS5-listener op zijn eigen machine (127.0.0.1:1080) en stuurt verkeer er doorheen naar het interne netwerk van het slachtoffer. Deze verbindingen vertrekken vanuit pythonw.exe op de host van het slachtoffer naar interne doelen op poorten zoals 445 (SMB), 3389 (RDP), 5985 (WinRM) en 1433 (MSSQL). Voor het interne netwerk van het slachtoffer lijkt het op het gecompromitteerde host maakt normale laterale verbindingen.”

Om zijdelingse beweging mogelijk te maken, verzamelt de operator het wachtwoord van het slachtoffer via valse aanwijzingen op het vergrendelscherm en exfiltreert dit via het SharePoint-kanaal. Het nepscherm wordt weergegeven wanneer de opdracht “credz_waiting” wordt gegeven door de bedreigingsacteur.
Het is vermeldenswaard dat het ingevoerde wachtwoord niet wordt gevalideerd aan de hand van Windows-authenticatie om te controleren of het slachtoffer het juiste systeemwachtwoord heeft ingevoerd. Ongeacht wat er wordt aangeboden, krijgt het slachtoffer de foutmelding ‘Het wachtwoord is onjuist. Probeer het opnieuw’ te zien, waardoor het slachtoffer waarschijnlijk de tweede keer het juiste wachtwoord invoert.
Zodra de inloggegevens zijn ingevoerd, wordt het nep-vergrendelscherm automatisch gesloten. Elk wachtwoord dat op het scherm wordt vastgelegd, wordt gecodeerd en geüpload naar de SharePoint-schijf. Deze inloggegevens worden vervolgens misbruikt via de SOCKS5-tunnel om naar de volgende host te gaan met behulp van Remote Desktop Protocol (RDP) of WinRM.
Dit is niet de eerste keer dat slechte actoren een op TURN gebaseerd mechanisme gebruiken om met de dreigingsactor te communiceren. In juni 2026 hebben Symantec en Carbon Black, eigendom van Broadcom, gedetailleerd beschreven hoe de DragonForce-ransomware een Go-gebaseerde trojan voor externe toegang (RAT) genaamd Backdoor.Turn gebruikte om command-and-control (C2)-verkeer binnen de relaisinfrastructuur van Microsoft Teams te verbergen.
Hoewel de algemene modus operandi hetzelfde is, is de manier waarop ze worden geïmplementeerd in beide tools verschillend: Backdoor.Turn maakt gebruik van een QUIC-sessie via het relais. TWINLOOT daarentegen maakt gebruik van WebRTC DataChannels via aiortc.
Toen, eind vorige maand, werd een nieuwe op Rust gebaseerde RAT, msaRAT genaamd, waargenomen met dezelfde TURN-methode, maar tegen Twilio in plaats van Teams. De malware wordt toegeschreven aan de Chaos-ransomwaregroep en wordt geïmplementeerd met behulp van de asynchrone runtime van Tokio om een headless browsersessie te controleren en een geheime tunnel naar de server van de aanvaller tot stand te brengen.
De DLL-malware (“lib.dll”) wordt voorafgaand aan de implementatie van de ransomware gelanceerd door middel van een MSI-installatieprogramma dat wordt gedownload van een externe host. Vervolgens lokaliseert het het Chrome- of Edge-installatiepad, start de browser in de headless-modus en injecteert JavaScript-code in een nieuw browsertabblad om een WebRTC-communicatiekanaal met de C2-server te initialiseren.
“Deze RAT raakt nooit rechtstreeks het netwerk – hij bestuurt zijn C2-communicatiekanaal uitsluitend via Chrome DevTools Protocol (CDP), een API voor het debuggen van browsers”, merkte Cisco Talos eind vorige maand op. “Het binaire bestand bevat een Cloudflare Workers-eindpunt, maar maakt nooit HTTP-verbindingen met dat domein zelf; het verplaatst dat werk volledig naar de browser.”
“msaRAT manipuleert de browser via CDP, voert signalering uit (SDP Offer/Answer exchange) met Cloudflare Workers en brengt een WebRTC DataChannel tot stand tussen de browser en de C2-server met behulp van Twilio TURN (Traversal Using Relays around NAT) als relay.”
De nieuwste bevindingen van Ontinue geven aan hoe meerdere bedreigingsactoren onafhankelijk hetzelfde TURN-relaismisbruik hebben overgenomen binnen een jaar nadat de techniek, met de codenaam Ghost Calls, openbaar werd gemaakt door Praetorian.
Net als in het geval van msaRAT start TWINLOOT de Edge-browser van het slachtoffer in headless-modus, activeert de interface voor foutopsporing op afstand en maakt er verbinding mee via CDP. Zodra deze stap is voltooid, navigeert het via een browsertabblad naar “graph.microsoft(.)com” en maakt vervolgens gebruik van de Drive API om te communiceren met de SharePoint van de bedreigingsacteur.
“De msaRAT van de Chaos-groep gebruikt dezelfde headless-browser-via-CDP-architectuur, maar voor WebRTC-signalering via Cloudflare Workers”, legt Ontinue uit. “De convergentie is opmerkelijk: twee niet-verwante actoren kwamen onafhankelijk van elkaar binnen dezelfde maand tot het ‘aansturen van de eigen browser van het slachtoffer als C2-transport’.”
Persistentie wordt ingesteld op basis van de build (PERSIST_ENABLED=True of False). Er worden vier methoden gebruikt:
- TypeLib COM-scriptletkaping
- TaskCache-manipulatie in GhostTask-stijl
- Zelf bijwerken met behulp van een reobf.json-manifest
De vierde methode maakt gebruik van een open-source tool Swarmer, die vorig jaar door Praetorian werd uitgebracht als een manier om “exportbestanden van het Windows-register om te zetten in Windows-hive-bestanden die kunnen worden gebruikt om NTUSER.MAN te vervangen.” De methode maakt het mogelijk om heimelijke registersleutels voor HKEY_CURRENT_USER (ook bekend als HKCU) te maken zonder te worden gedetecteerd door beveiligingssoftware, zelfs als er geen beheerderstoegang is.
“Het implantaat bouwt een verplichte Windows-profielcomponent volledig offline met behulp van twee API’s: RegLoadAppKeyW (die een registercomponent in een privéapplicatienaamruimte laadt zonder beheerdersrechten te vereisen) en Microsoft’s offline registerbibliotheek offreg.dll (ORCreateKey, ORSetValue, ORSaveHive)”, aldus Ontinue.
“De resulterende component wordt geschreven naar %USERPROFILE% NTUSER.MAN. Wanneer Windows een gebruikersprofiel laadt, wordt gecontroleerd op NTUSER.MAN (een verplichte profieloverschrijving) vóór NTUSER.DAT. Als NTUSER.MAN bestaat, heeft de inhoud voorrang.”
De ontwikkeling markeert het eerste geregistreerde kwaadwillige gebruik van deze persistentiemethode in het wild. Naast deze mogelijkheden ondersteunt TWINLOOT verkenning, ontdekking, screenshot-opname en de mogelijkheid om terug te vallen op een EtherHiding-stijl mechanisme om de runtime-configuratie te verkrijgen als de dead drop-methode van Azure Blob Storage mislukt. De op Ethereum gebaseerde resolutie wordt niet gebruikt in de build, wat erop wijst dat het raamwerk actief wordt ontwikkeld.
Het is niet duidelijk wie er achter de toolkit zit, maar Ontinue zegt dat het operationele parallellen deelt met een cluster genaamd STAC4749, dat een trackrecord heeft in het orkestreren van Teams voice phishing-campagnes om Chaos-ransomware in te zetten.
“De STAC4749-overlappingen zijn opmerkelijk, de levering door Teams, een PyArmour-verduisterende python-achterdeur, een omgekeerde SOCKS5-proxy, HKCU Run Key-persistentie en een aangrenzende tijdlijn”, aldus het cyberbeveiligingsbedrijf. “De onderliggende implementatie verschilt echter aanzienlijk.”
“STAC4749 maakt gebruik van PyInstaller, packing, Go-Based implantaten, stand-alone SOCKS5 proxy-tooling en .top-domeinen achter Cloudflare. TWINLOOT gebruikt onbewerkte .pyc-uitvoering, pure Python, een geïntegreerde SOCKS5-multiplexer en drop-caught verouderde domeinen met SharePoint dead-drop C2. Als dit dezelfde operator is, is de tooling helemaal opnieuw opgebouwd in plaats van geëvolueerd.”