CL-UNK-1211: SysGoRAT, Web Shells and Reverse Shells on Government Linux Servers

Espionage-style intrusion tracked by Unit 42, October 2025 to April 2026: PHP web shells, auto_prepend_file persistence, a custom Go RAT, sudo password capture and heavy log cleanup. Attribution unknown
Threat
CL-UNK-1211 (SysGoRAT)
Severity
HIGH
Type
Linux intrusion · Web shell · RAT · Credential theft
Access
TLP:CLEAR, public sources
Version
v0.1 (Draft) · 2026-10-17
Author
HuntPack
Confidence
Medium: one detailed primary report (Unit 42), three derivative write-ups, no independent corroboration
01

Executive Summary

Unit 42 (Palo Alto Networks, published 2026-10-15) tracks CL-UNK-1211, a campaign against government entities and state-affiliated infrastructure observed from October 2025 to April 2026. The attackers worked almost entirely on Linux servers, mixing web shells, a custom Go remote access Trojan Unit 42 named SysGoRAT, open-source tools, in-memory reverse shells and heavy cleanup. The objective was intelligence gathering: dumping databases and taking government mailboxes to reach linked social media accounts.

Attribution is unknown. The UNK designation means Unit 42 has not determined whether the cluster is nation-state or cybercrime. This pack makes no nation-state claim. Unit 42 also reports AI-generated payloads (conversational comments inside scripts) and says that suggests an LLM or an automated agent, not that either was proven.

Persistence and access: web shells under a php-fpm parent, auto_prepend_file rewritten under /etc/php/ and /opt/plesk/php/ (including a fake /usr/lib/php/plesk_sys_driver.php), a sudo alias in .bashrc that captures passwords, SSH key injection, and SysGoRAT with six persistence methods. Evasion: pkill against Cortex XDR components (Unit 42 says these attempts were detected and mitigated), deletion of auth, history, mail and web logs, timestomping with touch -t, and planted red-team markers.

This pack hunts Linux process, network and DNS telemetry from the Falcon Linux sensor, and says plainly what the sensor cannot see. File contents of PHP web shells, .bashrc edits made by file copy, PHP configuration writes, and the HTTP requests that reach a web shell need a web-server-log and file-integrity review (Sections 7 and 15). All 31 atomic indicators ship as detect because every one comes from a single vendor report.

Defender priority: on every Linux web or mail server, run Q1, Q4, Q6, Q7 and Q10 fleet-wide for 30 days, run the Playbook A read-only audit for auto_prepend_file, hidden SUID files and alias sudo, and review web-server logs for requests to plesk_sys_driver.php and search_social.php. If any hit lands, treat sudo passwords, database and SMTP credentials and mailbox-linked accounts on that host as exposed.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
T1Unit 42, AI-Powered Espionage Campaign Targets Government Linux Infrastructure (2026-10-15)Primary report: TTPs, SysGoRAT command and persist tables, reverse shell forms, evasion, full IOC table (10 SHA-256, 17 IPs, 4 domains) with paths and file names in the bodyYes (primary for every indicator; saved as 01-unit42.txt)
T2GridinSoft, Linux sudo password theft write-upRestates the Unit 42 findings with extra defender framing on .bashrc and auto_prepend_file. Adds no new indicators. Unit 42 is its only cited research sourcePartial: context only, not independent
T2GBHackers, AI-assisted hackers compromise government Linux serversRewrite of the Unit 42 report. No indicators, no original analysisPartial: context only, not independent
T2Cybersecurity News, AI-generated scripts hijack Linux sudoRewrite of the Unit 42 report. No indicators, no original analysisPartial: context only, not independent

Web hunter decisions

  • No independent corroboration was found. Searches returned only outlets that cite Unit 42. Because no indicator has two independent sources, nothing is set to prevent or critical. All 31 atomic indicators are detect.
  • Every hash, IP and domain was re-derived from the saved Unit 42 snapshot, not from search summaries. The 10 hashes, 17 IPs and 4 domains in the snapshot match the task brief exactly.
  • Unit 42 does not label any hash as the SysGoRAT sample. The hash table covers the React2Shell scanner, a shell backdoor, GSocket, PwnKit and PHP web shells only. This is carried as a gap (Section 15), not filled in.
  • The IPs are not mapped to roles except 104.194.158.65, the SysGoRAT default. Unit 42 says reverse shells used at least seven C2 servers; it does not say which of the 17 IPs those are.
  • Legitimate services (gsocket.io relay, transfer.sh, bashupload.com, filebin.net, catbox.moe) appear in hunt queries only and are not imported as IOCs. Stock tools (python3, bash, nc, curl) are never indicators.
  • Attribution stays at "unknown". The planted RedTeamOps2025 and pentest123 markers are deception artifacts, not evidence of an authorized assessment.
  • The page body said the SolarWinds name in Solarwinds.StatusLog.txt is camouflage. Unit 42 states there is no evidence SolarWinds was compromised.
03

Hunt Brief & Attack Chain

Hypotheses

IDHypothesisTelemetryConf
H1A web server worker (php-fpm, Apache, nginx) spawns a shell, matching the interactive web shell activity Unit 42 shows (Q1)Process creation with command line and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Medium
H2Reverse shells use mkfifo /tmp/f with nc, bash to /dev/tcp, or a Python socket (Q2, Q3)Process creation with command line (same as H1)High
H3The attackers run disguised binaries and stage GSocket in /dev/shm (Q4, Q5)Process creation (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents). Execution only: the write itself is a labelled gap, so pair with file integrity monitoring on /dev/shmHigh
H4Root is obtained with PwnKit, LinPEAS, a setuid(0) Python wrapper or a SUID hidden file (Q6)Process creation with command lineHigh
H5Passwords are captured by a sudo alias and logged to Solarwinds.StatusLog.txt (Q7)Process creation with command lineHigh
H6Cleanup runs history and log deletion commands (Q8) and tries to kill the security agent (Q9)Process creation with command lineMedium
H7PHP persistence appears as auto_prepend_file edits or the plesk_sys_driver.php file name (Q10)Process creation with command lineHigh
H8Mail and database data is enumerated, staged and uploaded (Q11, Q12)Process creation with command lineMedium
H9SysGoRAT persists with sys-update.service or sys-control-client and calls out to campaign infrastructure (Q13 to Q16)Process creation; network connection (CrowdStrike: NetworkConnectIP4. Defender: DeviceNetworkEvents); DNS lookup (CrowdStrike: DnsRequest)High
H10Lateral movement uses sshpass and SOCKS tunnels, and SSH keys are injected (Q18)Process creation with command lineMedium

Attack chain

StepBehaviorTelemetryHunt angle
1Initial access is not detailed by Unit 42. The attackers ran a custom React2Shell (CVE-2025-55182) scanner and dropped web shellsWeb server and WAF logs (outside endpoint telemetry)Section 7 web-server log review
2Web shells deployed; auto_prepend_file rewritten for persistenceProcess creation under php-fpm; file integrityQ1, Q10, Section 7
3Credential harvesting: .bashrc sudo alias, PHP login logger, cleartext password searchProcess creation with command line; file integrityQ7, Section 7
4Privilege escalation: LinPEAS, PwnKit, setuid helpersProcess creation with command lineQ4, Q5, Q6
5SysGoRAT and GSocket persistence, in-memory reverse shellsProcess creation, network connection, DNS lookupQ2, Q3, Q4, Q13 to Q16
6Mailbox and database discovery, staging and exfiltrationProcess creation with command lineQ11, Q12
7Lateral movement with sshpass, SSH keys, SOCKS tunnels, MSSQL xp_cmdshell hopsProcess creation; database audit logs (outside endpoint telemetry)Q18, Section 7
8Defense evasion and cleanup: agent kill, log and history deletion, timestomping, planted markersProcess creation with command lineQ7, Q8, Q9; timestomping is a gap
04

Consolidated IOC Table

All indicators come from the Unit 42 IOC table (snapshot 01). Unit 42 defangs them; they are shown fanged here for import. Every row is detect: one vendor, no independent second source.

TypeValueConfidenceActionContextExpiry
sha2562bf7992e6260c1a98c709fa98ec766fb9f27692f338b30b43ac821b824fd849eHighdetectReact2Shell (CVE-2025-55182) scanner build (Unit 42 IOC table)2027-04-17
sha25627d799ceadb570bfca890d4c2572314afe57eecf14083d30409da15afdfc4704HighdetectReact2Shell (CVE-2025-55182) scanner build (Unit 42 IOC table)2027-04-17
sha256d73186cea6cf2cf3d48c09139a9d15521365aab675787b4e7a6f81767331c9fdHighdetectReact2Shell (CVE-2025-55182) scanner build (Unit 42 IOC table)2027-04-17
sha2569e45830171eb607cf2c0fc80f5cc9cc3db39bb937032136990383a595f6f151eHighdetectReact2Shell (CVE-2025-55182) scanner build (Unit 42 IOC table)2027-04-17
sha256c527b94e3d21824a674face4cd9d862e536b60ccbf54573839e3360f99188343Highdetectcustom shell backdoor for privilege escalation (Unit 42 IOC table)2027-04-17
sha256d94f75a70b5cabaf786ac57177ed841732e62bdcc9a29e06e5b41d9be567bcfaHighdetectGSocket reverse shell binary (Unit 42 IOC table)2027-04-17
sha25644e83f84a5d5219e2f7c3cf1e4f02489cae81361227f46946abe4b8d8245b879HighdetectPwnKit (CVE-2021-4034) exploit binary (Unit 42 IOC table)2027-04-17
sha2561505a3a727f8899b2ad343519f7bf9c438b8b802f8d6b854f5db3b52f857c76aHighdetectPHP web shell (Unit 42 IOC table)2027-04-17
sha25676c58fad4f70cf277a15a499b9a2151ac60e7a6b5c7a9ab684843dcc19f0d0a5HighdetectPHP web shell (Unit 42 IOC table)2027-04-17
sha256b1e82c6b0caea177e8bb71ad826867f509c65f0a43a651b50253e7c726566eacHighdetectPHP web shell (Unit 42 IOC table)2027-04-17
ipv445.88.188.140Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4198.23.185.234Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4138.68.244.146Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4185.21.136.6Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv472.61.89.179Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4104.194.158.65MediumdetectSysGoRAT default C2 (hardcoded, port 443)2027-04-17
ipv4109.224.53.140Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4162.243.175.162Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4154.93.37.228Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4141.164.58.87Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv488.80.150.232Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv488.119.167.57Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4173.212.247.23Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4104.248.131.53Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4147.182.224.216Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv493.93.112.57Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
ipv4192.210.183.17Mediumdetectlisted C2 or reverse-shell infrastructure (per-IP role not published)2027-04-17
domainmagento.inkHighdetectcampaign domain listed by Unit 42 (role not published)2027-04-17
domainsolidmonpe.comHighdetectcampaign domain listed by Unit 42 (role not published)2027-04-17
domainwibu-bau-bawang.onlineHighdetectcampaign domain listed by Unit 42 (role not published)2027-04-17
domainberaskencur.siteHighdetectcampaign domain listed by Unit 42 (role not published)2027-04-17
05

Affected Surface & Telemetry Matrix

SurfaceTelemetryPriorityGap risk
Linux web servers (Apache, nginx, php-fpm, Plesk)Process creation with command line and parent; network connection; DNS lookup (Falcon Linux sensor)HighMedium: no sensor, no data. Also outside endpoint telemetry: HTTP requests to web shells
Linux mail servers (qmail under Plesk)Process creation with command lineHighMedium: mailbox file reads are not a sensor event
Linux database and application hostsProcess creation; network connectionHighMedium: SQL-level activity (xp_cmdshell) is in database audit logs
PHP configuration and web rootsFile integrity monitoring, auditd, or a scheduled hash sweepHighHigh: file content and config writes are outside endpoint telemetry
Hosts without a Linux sensor, or unsupported kernelsauditd and syslog onlyMediumHigh: Q1 to Q18 cannot run there
Windows hosts running SysGoRATProcess creation; network connectionLowLow: only Q13 to Q16 apply; Unit 42 reports Windows support but no Windows intrusion detail
06

ATT&CK Mapping

TacticTechniqueBehaviorQuery or control
PersistenceT1505.003 Web ShellPHP web shells, plesk_sys_driver.php, php-fpm parentQ1, Q10, Section 7
PersistenceT1546 Event Triggered Executionauto_prepend_file rewritten in every PHP configQ10, Playbook D
PersistenceT1543.002 / T1053.003 / T1547.001SysGoRAT systemd unit, cron, Windows Run keyQ13
PersistenceT1098.004 SSH Authorized KeysPublic key appended to authorized_keysQ18
ExecutionT1059.004 Unix Shell / T1059.006 PythonReverse shells, bash -i from Python, Base64 commandsQ1, Q2, Q3
Privilege EscalationT1068 / T1548.001PwnKit (CVE-2021-4034), LinPEAS, setuid(0) helpers, SUID bash copyQ6, Q4, Q5
Credential AccessT1056.001 / T1546.004 / T1552.001sudo alias in .bashrc, PHP login logger, cleartext password searchQ7, Section 7
Defense EvasionT1036.005 Masqueradingsys-control-client, pip2.7, ea_install, .libpython-helper, fake Plesk fileQ4, Q5
Defense EvasionT1562.001 Impair Defensespgrep/pkill against Cortex XDR componentsQ9
Defense EvasionT1070.002 / T1070.003 / T1070.006Log and history deletion, touch -t timestompingQ8; timestomp is a gap
Discovery / CollectionT1114.001 / T1074.001Mailbox enumeration, search_social.php, zip_mails.sh, database dumpsQ11, Q12
Command and ControlT1071.001 / T1090 / T1095WebSocket C2 to wss://addr/ws, GSocket, revsocks, pysoxy, ncQ14, Q15, Q16, Q4, Q18
Lateral MovementT1021.004 SSHsshpass with hard-coded credentialsQ18
ExfiltrationT1567.002 / T1048transfer.sh, bashupload.com, filebin.net, catbox.moe, ncQ12, Q17
Resource DevelopmentT1587.001 / T1588.002Custom Go RAT and scanner, open-source toolsQ4, Q6, Q14
07

Native Audit-Log Hunts

Run these outside Falcon. They cover what the Linux sensor cannot see and the web-server-log review the Coverage Map depends on. All commands are read-only.

Web-server log review (outside endpoint telemetry)

# Requests to the named web shell and mailbox script (adjust log paths for your stack)
grep -E 'plesk_sys_driver\.php|search_social\.php' /var/log/apache2/*access* /var/log/nginx/*access* /var/www/vhosts/system/*/logs/*access* 2>/dev/null
# POST requests to PHP files that were modified recently (web shell candidates)
find /var/www -name '*.php' -mtime -90 -printf '%TY-%Tm-%Td %p\n' | sort | tail -50
# Compare against the CVE-2025-55182 scanner exposure: review your framework advisory and WAF logs for exploit attempts

PHP configuration and web shell files

grep -rn "auto_prepend_file" /etc/php /opt/plesk/php 2>/dev/null
php -i 2>/dev/null | grep -i auto_prepend_file
ls -la /usr/lib/php/plesk_sys_driver.php 2>/dev/null
# Hash sweep of web roots for the three PHP web shell hashes in Section 10
find /var/www -type f -name '*.php' -exec sha256sum {} + 2>/dev/null | grep -F -f /path/to/php-webshell-hashes.txt

Credential, persistence and staging artifacts

grep -n "alias sudo" /home/*/.bashrc /root/.bashrc /etc/bash.bashrc 2>/dev/null
find / -xdev -name 'Solarwinds.StatusLog.txt' 2>/dev/null
find / -xdev -perm -4000 -type f -name '.*' 2>/dev/null
ls -la /dev/shm /usr/lib/x86_64-linux-gnu/.libpython-helper 2>/dev/null
systemctl status sys-update.service 2>/dev/null; ls -la /etc/systemd/system/sys-update.service 2>/dev/null
crontab -l 2>/dev/null; ls -la /etc/cron.d 2>/dev/null
grep -n "ssh-" /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null
getent passwd | grep -i pentest
ls -ld /var/qmail/mailnames/* 2>/dev/null

Logs the attackers tried to delete

  • Compare auth.log or secure, btmp, wtmp and mail logs against off-host copies (syslog server or SIEM). A gap or a truncated file is itself a finding.
  • Check shell history files for zero length or recent truncation on privileged accounts.
  • Check file timestamps against inode change time: stat on suspect scripts shows a change time that postdates the claimed modification time when touch -t was used.

Database audit logs

  • On MSSQL, search for sp_configure 'xp_cmdshell' being enabled and for xp_cmdshell invoking sqlcmd against a second server (the double-hop chain Unit 42 describes).
  • Look for new SQLite files such as dump.sqlite in /tmp and bulk CSV exports followed by tar archives.
08

Hunt Queries: CrowdStrike CQL, SentinelOne PowerQuery and Defender XDR KQL

Show all queries in
Pick your tenant's cloud first: every "Open in Falcon" button below uses this selection.

These queries target the Falcon Linux sensor (event_platform=Lin). Add a host-group or ComputerName filter for your Linux servers to cut cost. Section 15 states what they cannot see.

Q1 · Web server worker spawns a shell or download tool
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: A php-fpm, Apache or nginx worker whose child is a shell, interpreter or download tool. Unit 42 shows interactive web shell activity under a php-fpm parent. FP: Applications that call shell_exec or system on purpose, Plesk and cPanel helpers, PHP queue workers. Baseline 14 days first.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Web server worker spawns a shell or download tool
// MITRE: T1505.003, T1059.004
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: apps that shell out by design, Plesk and cPanel helper jobs, PHP queue workers
// TUNING: after a 14-day baseline add !(CommandLine=*your-known-app-script*) exclusions per application
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| ParentBaseFileName=/^(php-fpm[0-9.]*|php[0-9.]*-fpm|lsphp[0-9]*|apache2|httpd|nginx)$/i
| FileName=/^(sh|bash|dash|zsh|ash|busybox|nc|ncat|python[0-9.]*|perl|wget|curl)$/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q2 · Reverse shell command patterns (named pipe, /dev/tcp, Python socket)
CONF HIGHFP LOWCOST LOW

Looks for: The three reverse shell forms Unit 42 reports: mkfifo /tmp/f piped through nc, bash redirected to /dev/tcp, and a Python script that duplicates a socket onto bash. FP: Rare. Authorized red team or penetration test activity.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Reverse shell command patterns (named pipe, /dev/tcp, Python socket)
// MITRE: T1059.004, T1095
// CONF: high  FP: low  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: authorized penetration tests, security training labs
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(mkfifo\s+\/tmp\/f|\/tmp\/f\s*[|]\s*(\/bin\/)?(ba)?sh|\/dev\/tcp\/[0-9a-z.-]+\/[0-9]+|import\s+socket.{0,200}dup2.{0,200}bash)/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q3 · Interactive bash spawned by a Python process
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: A Python parent whose child is a shell run with -i, the shape of the Python subprocess reverse shell. FP: Admin and automation tooling that wraps a shell in Python (pexpect, Ansible helpers, pty wrappers).

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
// HUNT: Interactive bash spawned by a Python process
// MITRE: T1059.006, T1059.004
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: pexpect or pty-based automation, Ansible helper modules, developer tooling
// TUNING: exclude known automation accounts with !(UserName=svc-automation) and known parent command lines after baselining
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| ParentBaseFileName=/^python[0-9.]*$/i
| FileName=/^(bash|sh|dash|zsh)$/i
| CommandLine=/\s-i(\s|$)/
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q4 · Disguised SysGoRAT, hidden root helpers and GSocket staging
CONF HIGHFP LOWCOST LOW

Looks for: Execution of the file names Unit 42 reports: sys-control-client, ea_install, .libpython-helper, .libsystemd-helper, .tourch, gs-netcat, gs-dbus, and anything running from a /dev/shm/.gs- directory. FP: Low. The hidden dot-names and the /dev/shm path are not used by stock Linux packages. gs-netcat is also a legitimate open-source tool, so treat a hit as a lead, not proof of this campaign.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.name holds the file name including the leading dot of a hidden file.
  • PowerQuery assumes: The /dev/shm path test is case-insensitive here; the CQL path test is case-sensitive.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process on Linux sensors.
  • KQL – Defender XDR assumes: FileName keeps the leading dot of a hidden file.
// HUNT: Disguised SysGoRAT, hidden root helpers and GSocket staging
// MITRE: T1036.005, T1090, T1548.001
// CONF: high  FP: low  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: an admin who legitimately runs gs-netcat; a product that ships a binary called ea_install
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| (FileName=/^(sys-control-client|ea_install|\.libpython-helper|\.libsystemd-helper|\.tourch|gs-netcat|gs-dbus)$/i or ImageFileName=/\/dev\/shm\/\.gs-[0-9]+\//)
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData])
Q5 · Executable written to /dev/shm or under a hidden helper name
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Execution out of /dev/shm, or execution under the hidden helper names Unit 42 reports. FP: Software that stages and runs executables in /dev/shm (some installers, memfd-style tooling). Note: this card catches the binary at first execution, not at write time. The write-time angle is a labelled gap in the Coverage Map.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery: The CQL title says written; the CQL itself, and so this query, tests process execution only.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.image.path holds the full path of the created image.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR: The CQL title says written; the CQL itself, and so this query, tests process execution only.
  • KQL – Defender XDR assumes: FolderPath holds the full image path of the created process on Linux sensors.
// HUNT: Execution from /dev/shm or under a hidden helper name
// MITRE: T1620, T1036.005
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: installers or runtimes that stage and execute binaries in /dev/shm
// TUNING: exclude known staging processes with !(ParentBaseFileName=your-installer) after a 14-day baseline
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| ImageFileName=/(\/dev\/shm\/|\/\.(libpython-helper|libsystemd-helper|tourch)$|\/sys-control-client$)/i
| table([@timestamp, ComputerName, aid, UserName, ImageFileName, CommandLine, SHA256HashData, ParentBaseFileName])
Q6 · Local privilege escalation: setuid(0) wrapper, LinPEAS, PwnKit, SUID on hidden file
CONF HIGHFP LOWCOST LOW

Looks for: Python one-liners that call os.setuid(0) and os.setgid(0), LinPEAS or PwnKit names, and chmod u+s on the hidden helper names Unit 42 reports. FP: Low. Authorized assessments that run LinPEAS.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Local privilege escalation: setuid(0) wrapper, LinPEAS, PwnKit, SUID on hidden file
// MITRE: T1068, T1548.001
// CONF: high  FP: low  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: authorized penetration tests running LinPEAS
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(os\.setuid\(0\)|os\.setgid\(0\)|linpeas|pwnkit|CVE-2021-4034|chmod\s+(u\+s|[0-7]?4[0-7]{3})\s+\S*\.(tourch|libsystemd-helper|libpython-helper))/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q7 · sudo alias hijack, password log file and planted red-team markers
CONF HIGHFP LOWCOST LOW

Looks for: Commands that define an alias for sudo or write to .bashrc with a sudo alias, the Solarwinds.StatusLog.txt password log, and the RedTeamOps2025 and pentest123 markers the attackers planted. FP: Low. A user who aliases sudo for a harmless reason will show as a lead to review.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: sudo alias hijack, password log file and planted red-team markers
// MITRE: T1056.001, T1546.004, T1036
// CONF: high  FP: low  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: users who alias sudo for convenience (for example alias sudo='sudo -E')
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(alias\s+sudo\s*=|Solarwinds\.StatusLog|RedTeamOps2025|pentest123|\.bashrc.{0,200}alias\s+sudo|alias\s+sudo.{0,200}\.bashrc)/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q8 · Shell history and log clearing
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Commands that clear history or delete the authentication, mail, web server and PHP session logs Unit 42 lists, plus HISTFILE set to /dev/null (used by the GSocket sessions). FP: Log rotation scripts, image build jobs and admins who run history -c. Expect noise from rotation tooling.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Shell history and log clearing
// MITRE: T1070.002, T1070.003
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: logrotate and cleanup jobs, golden-image build scripts, admins running history -c
// TUNING: exclude the parent of your log rotation jobs with !(ParentBaseFileName=logrotate) and known maintenance accounts
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(history\s+-c|unset\s+HISTFILE|HISTFILE=\/dev\/null|HISTSIZE=0|(rm|shred|truncate|unlink)\s.{0,120}(\.bash_history|\.zsh_history|\/var\/log\/(auth\.log|secure|btmp|wtmp|lastlog|maillog|mail\.log|apache2|httpd|nginx)|\/var\/lib\/php\/sessions)|>\s*\/var\/log\/(auth\.log|secure|wtmp|btmp|lastlog))/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q9 · Attempts to kill or stop endpoint security agents
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: pkill, killall, pgrep, kill or systemctl stop against security agent names. Unit 42 reports pgrep and pkill against Cortex XDR components. The other agent names are this pack's extension of the same behavior, not named in the source. FP: Admins restarting agents, upgrade scripts and uninstall jobs. pgrep alone is often benign reconnaissance.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Attempts to kill or stop endpoint security agents
// MITRE: T1562.001
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: agent upgrade or uninstall jobs, admins restarting services, config management runs
// TUNING: exclude your patching and config-management parents (for example !(ParentBaseFileName=ansible-playbook)) and review pgrep-only hits separately
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(\b(pkill|killall|pgrep|kill)\b.{0,120}(cortex|cyserver|cytool|falcon-sensor|falcond|sentinelagent|sentinelone|mdatp|wdavdaemon|wazuh|ossec|osqueryd|auditd|clamd|elastic-agent)|systemctl\s+(stop|disable|mask)\s+\S*(cortex|cyserver|falcon-sensor|sentinel|mdatp|wazuh|ossec|osqueryd|auditd|clamd|elastic-agent))/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q10 · PHP auto_prepend_file tampering and the plesk_sys_driver.php web shell
CONF HIGHFP MEDIUMCOST LOW

Looks for: Command lines that set or search auto_prepend_file, or reference the plesk_sys_driver.php file name. Unit 42 reports the attackers rewrote auto_prepend_file in every PHP configuration under /etc/php/ and /opt/plesk/php/. FP: Config management that sets auto_prepend_file on purpose (application firewalls, profilers) and admins auditing the setting with grep.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
// HUNT: PHP auto_prepend_file tampering and the plesk_sys_driver.php web shell
// MITRE: T1505.003, T1546
// CONF: high  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: WAF or profiler products that use auto_prepend_file, admin audit greps, Ansible template runs
// TUNING: exclude approved prepend files with !(CommandLine=*your-approved-prepend.php*) and your config-management parent
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(auto_prepend_file|plesk_sys_driver\.php)/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q11 · Mailbox enumeration, search and archive staging
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Enumeration of /var/qmail/mailnames/ or Maildir/cur/ with find, ls, wc, grep, zip or tar, and the search_social.php and zip_mails.sh script names Unit 42 reports. FP: Plesk mail backup agents, migration jobs and admins sizing mailboxes.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Mailbox enumeration, search and archive staging
// MITRE: T1114.001, T1074.001
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: mail backup agents, mailbox migrations, quota reporting scripts
// TUNING: exclude your backup service account and parent process with !(UserName=svc-mailbackup)
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(search_social\.php|zip_mails\.sh|\b(find|ls|wc|grep|zip|tar|cat)\b.{0,200}(\/var\/qmail\/mailnames|Maildir\/cur))/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q12 · Database dump staging and exfiltration to file-hosting services or netcat
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: curl or wget uploads to transfer.sh, bashupload.com, filebin.net or catbox.moe, a tar of a *_dump.tar.gz sent with nc, and the dump.sqlite staging file. These are the exfiltration methods Unit 42 lists. FP: Developers and admins who use transfer.sh or filebin.net for legitimate file sharing.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: Database dump staging and exfiltration to file-hosting services or netcat
// MITRE: T1567.002, T1048, T1074.001
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: staff who share files through public hosting services, support bundles sent with curl
// TUNING: allow-list approved upload destinations or users with !(UserName=jdoe) after a 14-day baseline
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/((curl|wget)\b.{0,300}(transfer\.sh|bashupload\.com|filebin\.net|catbox\.moe)|\bnc\b.{0,60}<\s*\S*_dump\.tar\.gz|tar\s+-czf\s+\/tmp\/\S+_dump\.tar\.gz|dump\.sqlite)/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
Q13 · SysGoRAT persistence artifacts (systemd unit, binary name, Windows updater path)
CONF HIGHFP LOWCOST LOW

Looks for: References to the sys-update.service unit and the sys-control-client binary on Linux, and the Onedrive Update\Updater.exe path on Windows. Unit 42 documents these as SysGoRAT persist sub-actions. Not limited to the Linux sensor because SysGoRAT also runs on Windows. FP: Low. The unit name and install paths are attacker-chosen masquerades.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: The separator in the Windows updater path is matched by a single non-alphanumeric character class.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
// HUNT: SysGoRAT persistence artifacts (systemd unit, binary name, Windows updater path)
// MITRE: T1543.002, T1053.003, T1547.001
// CONF: high  FP: low  COST: low | REQUIRES: Linux or Windows sensor, ProcessRollup2
// FALSE POSITIVES: none expected beyond analysts running these names in a lab
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2
| CommandLine=/(sys-update\.service|sys-control-client|Onedrive Update\\Updater\.exe)/i
| table([@timestamp, ComputerName, aid, event_platform, UserName, ParentBaseFileName, FileName, CommandLine])
Q14 · Known campaign hashes executing or written
CONF HIGHFP LOWCOST LOW

Looks for: Any of the ten SHA-256 values Unit 42 publishes seen on a process start. Only ELF binaries (the PwnKit binary, the scanner builds, the GSocket binary and any compiled backdoor) can match here. PHP web shell hashes are script files that a process-start event never carries, so pair this card with a file-system hash sweep. FP: Very low. Hash matches are exact.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The CQL tests process execution only; a hash on a file that is written but never run is not matched.
  • PowerQuery assumes: tgt.process.image.sha256 is populated on the tenant; confirm with the readiness test.
  • PowerQuery assumes: in:anycase makes the hash comparison case-insensitive.
  • KQL – Defender XDR: Microsoft marks SHA256 as usually not populated in this table, so an empty result is not proof of absence.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days of data, the same window as the CQL.
  • KQL – Defender XDR: The CQL tests process execution only; a hash on a file that is written but never run is not matched.
  • KQL – Defender XDR assumes: SHA256 is populated in DeviceProcessEvents on the tenant; confirm with the readiness test.
// HUNT: Known campaign hashes executing
// MITRE: T1204, T1105
// CONF: high  FP: low  COST: low | REQUIRES: Linux or Windows sensor, ProcessRollup2
// FALSE POSITIVES: none expected for an exact hash match
// LOOKBACK: 30d
#event_simpleName=ProcessRollup2
| in(SHA256HashData, values=["2bf7992e6260c1a98c709fa98ec766fb9f27692f338b30b43ac821b824fd849e", "27d799ceadb570bfca890d4c2572314afe57eecf14083d30409da15afdfc4704", "d73186cea6cf2cf3d48c09139a9d15521365aab675787b4e7a6f81767331c9fd", "9e45830171eb607cf2c0fc80f5cc9cc3db39bb937032136990383a595f6f151e", "c527b94e3d21824a674face4cd9d862e536b60ccbf54573839e3360f99188343", "d94f75a70b5cabaf786ac57177ed841732e62bdcc9a29e06e5b41d9be567bcfa", "44e83f84a5d5219e2f7c3cf1e4f02489cae81361227f46946abe4b8d8245b879", "1505a3a727f8899b2ad343519f7bf9c438b8b802f8d6b854f5db3b52f857c76a", "76c58fad4f70cf277a15a499b9a2151ac60e7a6b5c7a9ab684843dcc19f0d0a5", "b1e82c6b0caea177e8bb71ad826867f509c65f0a43a651b50253e7c726566eac"])
| table([@timestamp, ComputerName, aid, event_platform, UserName, FileName, ImageFileName, SHA256HashData])
Q15 · Outbound connections to the listed campaign IPs
CONF MEDIUMFP LOWCOST LOW

Looks for: NetworkConnectIP4 to any of the 17 IPs Unit 42 lists. SysGoRAT defaults to 104.194.158.65 on port 443, but the operator can change it on the command line, so a miss does not clear a host. FP: IPs on shared hosting providers can be reused by other tenants over time, so confirm the process and timing before acting.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Connections the agent did not record are not captured.
  • PowerQuery assumes: dst.ip.address holds the remote address of the connection.
  • PowerQuery assumes: Both inbound and outbound IP Connect events are matched, as the CQL remote-address test does not test direction.
  • KQL – Defender XDR: Connections the sensor did not record are not captured.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days of data, the same window as the CQL.
  • KQL – Defender XDR assumes: RemoteIP holds the remote address of the connection.
// HUNT: Outbound connections to the listed campaign IPs
// MITRE: T1071.001, T1095, T1571
// CONF: medium  FP: low  COST: low | REQUIRES: Linux or Windows sensor, NetworkConnectIP4
// FALSE POSITIVES: reuse of the same IP by an unrelated hosting tenant after the campaign ended
// LOOKBACK: 30d
#event_simpleName=NetworkConnectIP4
| in(RemoteAddressIP4, values=["45.88.188.140", "198.23.185.234", "138.68.244.146", "185.21.136.6", "72.61.89.179", "104.194.158.65", "109.224.53.140", "162.243.175.162", "154.93.37.228", "141.164.58.87", "88.80.150.232", "88.119.167.57", "173.212.247.23", "104.248.131.53", "147.182.224.216", "93.93.112.57", "192.210.183.17"])
| table([@timestamp, ComputerName, aid, event_platform, ContextProcessId, RemoteAddressIP4, RemotePort])
Q16 · DNS lookups for the four campaign domains
CONF HIGHFP LOWCOST LOW

Looks for: DnsRequest for magento.ink, solidmonpe.com, wibu-bau-bawang.online or beraskencur.site and their subdomains. FP: Very low. Validate that your Linux sensor version emits DnsRequest before relying on this query; DNS resolver or firewall logs are the fallback.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The DNS Resolved event on Linux agents has to be confirmed on the tenant; if it is not emitted this query returns nothing.
  • PowerQuery: The field is event.dns.request; some schema versions name it dns.request, so the readiness test prints both.
  • PowerQuery assumes: event.dns.request holds the queried name.
  • PowerQuery assumes: DNS Resolved events are emitted for Linux agents on the tenant.
  • KQL – Defender XDR: DnsQueryResponse coverage on Linux sensors has to be confirmed on the tenant.
  • KQL – Defender XDR: Advanced Hunting keeps 30 days of data, the same window as the CQL.
  • KQL – Defender XDR assumes: DnsQueryResponse events are recorded for the hosts in scope.
  • KQL – Defender XDR assumes: The queried name is in the DnsQueryString or QueryName key of AdditionalFields; the readiness test shows which one the tenant fills.
// HUNT: DNS lookups for the four campaign domains
// MITRE: T1071.004, T1583.001
// CONF: high  FP: low  COST: low | REQUIRES: Linux or Windows sensor, DnsRequest (validate Linux emission in tenant)
// FALSE POSITIVES: researchers or sinkholes resolving the domains
// LOOKBACK: 30d
#event_simpleName=DnsRequest
| DomainName=/(^|\.)(magento\.ink|solidmonpe\.com|wibu-bau-bawang\.online|beraskencur\.site)$/i
| table([@timestamp, ComputerName, aid, event_platform, ContextProcessId, DomainName])
Q17 · GSocket relay and file-hosting DNS lookups (hunt only)
CONF LOWFP MEDIUMCOST LOW

Looks for: DNS lookups for gsocket.io, the public relay GSocket's gs-netcat connects out to, and for the four file-hosting services used for exfiltration. These are legitimate services, so this is a hunt lead, never an IOC import. FP: transfer.sh, filebin.net and catbox.moe have many legitimate users. Treat results as leads to correlate with Q4 and Q11.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The DNS Resolved event on Linux agents has to be confirmed on the tenant; if it is not emitted this query returns nothing.
  • PowerQuery: The field is event.dns.request; some schema versions name it dns.request, so the readiness test prints both.
  • PowerQuery assumes: event.dns.request holds the queried name.
  • PowerQuery assumes: DNS Resolved events are emitted for Linux agents on the tenant.
  • KQL – Defender XDR: DnsQueryResponse coverage on Linux sensors has to be confirmed on the tenant.
  • KQL – Defender XDR assumes: DnsQueryResponse events are recorded for the hosts in scope.
  • KQL – Defender XDR assumes: The queried name is in the DnsQueryString or QueryName key of AdditionalFields; the readiness test shows which one the tenant fills.
// HUNT: GSocket relay and file-hosting DNS lookups (hunt only)
// MITRE: T1090, T1567.002
// CONF: low  FP: medium  COST: low | REQUIRES: Linux or Windows sensor, DnsRequest (validate Linux emission in tenant)
// FALSE POSITIVES: staff using public file-hosting services, developers testing GSocket
// TUNING: scope to server host groups only with a ComputerName or host group filter, where outbound web browsing should not occur
// LOOKBACK: 14d
#event_simpleName=DnsRequest
| DomainName=/(^|\.)(gsocket\.io|transfer\.sh|bashupload\.com|filebin\.net|catbox\.moe)$/i
| groupBy([ComputerName, DomainName], function=count(as=lookups))
| sort(lookups, order=desc, limit=200)
Q18 · sshpass lateral movement, SOCKS proxy tools and authorized_keys injection
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: sshpass with StrictHostKeyChecking=no, the revsocks and pysoxy proxy tools, GSOCKET_ARGS set inline, and echo appending a key to authorized_keys. All appear in Unit 42's lateral movement and persistence sections. FP: Automation that uses sshpass, and admins who add keys by echo.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A process the agent did not observe starting is not captured.
  • PowerQuery: The match is on the command line text only; an obfuscated or encoded command line is not decoded.
  • PowerQuery assumes: endpoint.os holds the lowercase value linux for Linux agents.
  • PowerQuery assumes: tgt.process.cmdline holds the full command line of the created process.
  • PowerQuery assumes: matches is case-insensitive by default, which reproduces the CQL /i flag.
  • KQL – Defender XDR: DeviceProcessEvents has no platform column, so the query is not limited to Linux hosts; scope it with a Linux device group.
  • KQL – Defender XDR: A process the sensor did not observe starting is not captured.
  • KQL – Defender XDR assumes: ProcessCommandLine holds the full command line of the created process on Linux sensors.
  • KQL – Defender XDR assumes: matches regex with the (?i) prefix reproduces the CQL /i flag.
// HUNT: sshpass lateral movement, SOCKS proxy tools and authorized_keys injection
// MITRE: T1021.004, T1098.004, T1090
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux sensor, ProcessRollup2
// FALSE POSITIVES: legacy automation that uses sshpass, admins appending keys manually
// TUNING: exclude known jump hosts and automation accounts with !(UserName=svc-automation) after baselining
// LOOKBACK: 7d
#event_simpleName=ProcessRollup2 event_platform=Lin
| CommandLine=/(sshpass\s+-p\s.{0,200}StrictHostKeyChecking=no|\b(revsocks|pysoxy)\b|GSOCKET_ARGS=|echo\s.{0,600}>>\s*\S*\.ssh\/authorized_keys)/i
| table([@timestamp, ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine])
09

CrowdStrike Custom IOA Recommendations

These IOA candidates map to Linux process-creation behavior that survives infrastructure rotation. Linux Custom IOA rule-type support depends on sensor and platform version, so confirm in your tenant before building. Every IOA starts in detect mode; none is set to prevent.

IOA-1 · Reverse shell command line HIGH PRIORITY

Promote Q2. Pattern: Process Creation (Linux), command line matches mkfifo /tmp/f, /dev/tcp/ redirect or the Python socket and dup2 form. Exclusions: approved red team hosts. Deployment: detect first.

IOA-2 · Hidden root helpers and SysGoRAT binary names

Promote Q4. Pattern: Process Creation, image name is .libpython-helper, .libsystemd-helper, .tourch, sys-control-client or ea_install, or image path under /dev/shm/.gs-. Exclusions: none identified. Deployment: detect first; never use prevent on gs-netcat by name because it is a legitimate open-source tool.

IOA-3 · sudo alias and password log

Promote Q7. Pattern: command line contains alias sudo= together with .bashrc, or Solarwinds.StatusLog. Exclusions: approved sudo wrappers. Deployment: detect.

IOA-4 · auto_prepend_file change

Promote Q10. Pattern: command line contains auto_prepend_file with sed, echo, tee or php -d. Exclusions: config-management parents and approved WAF prepend files. Deployment: detect, tune two weeks.

IOA-5 · Security agent termination attempt

Promote Q9. Pattern: pkill, killall or systemctl stop against security agent service names. Exclusions: patching and upgrade parents. Deployment: detect.

IOC Management

Import the Section 10 CSV. Every row is detect. Do not import python3, bash, nc, curl, gs-netcat by name, gsocket.io, transfer.sh, bashupload.com, filebin.net or catbox.moe as IOCs.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import, all detect
type,value,action,severity,expiration,description,tags
sha256,2bf7992e6260c1a98c709fa98ec766fb9f27692f338b30b43ac821b824fd849e,detect,high,2027-04-17,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,campaign:CL-UNK-1211
sha256,27d799ceadb570bfca890d4c2572314afe57eecf14083d30409da15afdfc4704,detect,high,2027-04-17,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,campaign:CL-UNK-1211
sha256,d73186cea6cf2cf3d48c09139a9d15521365aab675787b4e7a6f81767331c9fd,detect,high,2027-04-17,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,campaign:CL-UNK-1211
sha256,9e45830171eb607cf2c0fc80f5cc9cc3db39bb937032136990383a595f6f151e,detect,high,2027-04-17,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,campaign:CL-UNK-1211
sha256,c527b94e3d21824a674face4cd9d862e536b60ccbf54573839e3360f99188343,detect,high,2027-04-17,CL-UNK-1211 custom shell backdoor for privilege escalation,campaign:CL-UNK-1211
sha256,d94f75a70b5cabaf786ac57177ed841732e62bdcc9a29e06e5b41d9be567bcfa,detect,high,2027-04-17,CL-UNK-1211 GSocket reverse shell binary,campaign:CL-UNK-1211
sha256,44e83f84a5d5219e2f7c3cf1e4f02489cae81361227f46946abe4b8d8245b879,detect,high,2027-04-17,CL-UNK-1211 PwnKit (CVE-2021-4034) exploit binary,campaign:CL-UNK-1211
sha256,1505a3a727f8899b2ad343519f7bf9c438b8b802f8d6b854f5db3b52f857c76a,detect,high,2027-04-17,CL-UNK-1211 PHP web shell,campaign:CL-UNK-1211
sha256,76c58fad4f70cf277a15a499b9a2151ac60e7a6b5c7a9ab684843dcc19f0d0a5,detect,high,2027-04-17,CL-UNK-1211 PHP web shell,campaign:CL-UNK-1211
sha256,b1e82c6b0caea177e8bb71ad826867f509c65f0a43a651b50253e7c726566eac,detect,high,2027-04-17,CL-UNK-1211 PHP web shell,campaign:CL-UNK-1211
ipv4,45.88.188.140,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,198.23.185.234,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,138.68.244.146,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,185.21.136.6,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,72.61.89.179,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,104.194.158.65,detect,high,2027-04-17,CL-UNK-1211 SysGoRAT default C2,campaign:CL-UNK-1211
ipv4,109.224.53.140,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,162.243.175.162,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,154.93.37.228,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,141.164.58.87,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,88.80.150.232,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,88.119.167.57,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,173.212.247.23,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,104.248.131.53,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,147.182.224.216,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,93.93.112.57,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
ipv4,192.210.183.17,detect,medium,2027-04-17,CL-UNK-1211 C2 or reverse-shell infrastructure,campaign:CL-UNK-1211
domain,magento.ink,detect,high,2027-04-17,CL-UNK-1211 campaign domain,campaign:CL-UNK-1211
domain,solidmonpe.com,detect,high,2027-04-17,CL-UNK-1211 campaign domain,campaign:CL-UNK-1211
domain,wibu-bau-bawang.online,detect,high,2027-04-17,CL-UNK-1211 campaign domain,campaign:CL-UNK-1211
domain,beraskencur.site,detect,high,2027-04-17,CL-UNK-1211 campaign domain,campaign:CL-UNK-1211
Microsoft Defender indicators CSVSettings, Endpoints, Indicators, Import: audit only
indicatorType,indicatorValue,action,title,description,expirationTime,severity,recommendedActions,rbacGroups,category,mitretechniques,GenerateAlert
FileSha256,2bf7992e6260c1a98c709fa98ec766fb9f27692f338b30b43ac821b824fd849e,Audit,CL-UNK-1211 React2Shell,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,27d799ceadb570bfca890d4c2572314afe57eecf14083d30409da15afdfc4704,Audit,CL-UNK-1211 React2Shell,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,d73186cea6cf2cf3d48c09139a9d15521365aab675787b4e7a6f81767331c9fd,Audit,CL-UNK-1211 React2Shell,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,9e45830171eb607cf2c0fc80f5cc9cc3db39bb937032136990383a595f6f151e,Audit,CL-UNK-1211 React2Shell,CL-UNK-1211 React2Shell (CVE-2025-55182) scanner build,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,c527b94e3d21824a674face4cd9d862e536b60ccbf54573839e3360f99188343,Audit,CL-UNK-1211 custom shell backdoor for privilege escalation,CL-UNK-1211 custom shell backdoor for privilege escalation,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,d94f75a70b5cabaf786ac57177ed841732e62bdcc9a29e06e5b41d9be567bcfa,Audit,CL-UNK-1211 GSocket reverse shell binary,CL-UNK-1211 GSocket reverse shell binary,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,44e83f84a5d5219e2f7c3cf1e4f02489cae81361227f46946abe4b8d8245b879,Audit,CL-UNK-1211 PwnKit,CL-UNK-1211 PwnKit (CVE-2021-4034) exploit binary,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,1505a3a727f8899b2ad343519f7bf9c438b8b802f8d6b854f5db3b52f857c76a,Audit,CL-UNK-1211 PHP web shell,CL-UNK-1211 PHP web shell,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,76c58fad4f70cf277a15a499b9a2151ac60e7a6b5c7a9ab684843dcc19f0d0a5,Audit,CL-UNK-1211 PHP web shell,CL-UNK-1211 PHP web shell,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,b1e82c6b0caea177e8bb71ad826867f509c65f0a43a651b50253e7c726566eac,Audit,CL-UNK-1211 PHP web shell,CL-UNK-1211 PHP web shell,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,45.88.188.140,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,198.23.185.234,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,138.68.244.146,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,185.21.136.6,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,72.61.89.179,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,104.194.158.65,Audit,CL-UNK-1211 SysGoRAT default C2,CL-UNK-1211 SysGoRAT default C2,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,109.224.53.140,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,162.243.175.162,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,154.93.37.228,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,141.164.58.87,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,88.80.150.232,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,88.119.167.57,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,173.212.247.23,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,104.248.131.53,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,147.182.224.216,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,93.93.112.57,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
IpAddress,192.210.183.17,Audit,CL-UNK-1211 C2 or reverse-shell infrastructure,CL-UNK-1211 C2 or reverse-shell infrastructure,2027-04-17T00:00:00.0Z,Medium,Investigate the device and pivot into the pack's queries,,,,True
DomainName,magento.ink,Audit,CL-UNK-1211 campaign domain,CL-UNK-1211 campaign domain,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,solidmonpe.com,Audit,CL-UNK-1211 campaign domain,CL-UNK-1211 campaign domain,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,wibu-bau-bawang.online,Audit,CL-UNK-1211 campaign domain,CL-UNK-1211 campaign domain,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
DomainName,beraskencur.site,Audit,CL-UNK-1211 campaign domain,CL-UNK-1211 campaign domain,2027-04-17T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True

Column names and allowed values are from Microsoft's documented parameter table. Check each expirationTime before importing: an indicator whose date has passed is already expired. Download the sample CSV from the Import page to confirm the column order before a bulk import. Each file takes at most 500 indicators. Learn describes the import per entity type, so if a mixed file is rejected, split it by indicatorType. An imported indicator does nothing unless the matching Advanced features are on (for example Custom network indicators and Allow or block file).

SentinelOne IOC importnot included

This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.

SHA-256 list10 hashes, one per line
2bf7992e6260c1a98c709fa98ec766fb9f27692f338b30b43ac821b824fd849e
27d799ceadb570bfca890d4c2572314afe57eecf14083d30409da15afdfc4704
d73186cea6cf2cf3d48c09139a9d15521365aab675787b4e7a6f81767331c9fd
9e45830171eb607cf2c0fc80f5cc9cc3db39bb937032136990383a595f6f151e
c527b94e3d21824a674face4cd9d862e536b60ccbf54573839e3360f99188343
d94f75a70b5cabaf786ac57177ed841732e62bdcc9a29e06e5b41d9be567bcfa
44e83f84a5d5219e2f7c3cf1e4f02489cae81361227f46946abe4b8d8245b879
1505a3a727f8899b2ad343519f7bf9c438b8b802f8d6b854f5db3b52f857c76a
76c58fad4f70cf277a15a499b9a2151ac60e7a6b5c7a9ab684843dcc19f0d0a5
b1e82c6b0caea177e8bb71ad826867f509c65f0a43a651b50253e7c726566eac
IP and domain list17 IPs and 4 domains
45.88.188.140
198.23.185.234
138.68.244.146
185.21.136.6
72.61.89.179
104.194.158.65
109.224.53.140
162.243.175.162
154.93.37.228
141.164.58.87
88.80.150.232
88.119.167.57
173.212.247.23
104.248.131.53
147.182.224.216
93.93.112.57
192.210.183.17
magento.ink
solidmonpe.com
wibu-bau-bawang.online
beraskencur.site
Behavioral Signatureshunt, not import
# Behavioral signatures (hunt, never IOC import). Source: Unit 42, 2026-10-15
file    /usr/lib/php/plesk_sys_driver.php              web shell dropped as a fake Plesk file
file    /usr/lib/x86_64-linux-gnu/.libpython-helper    renamed Python 3, run with os.setuid(0)
file    .libsystemd-helper                             custom SUID root shell
file    .tourch                                        renamed /bin/bash with u+s set
file    /dev/shm/.gs-10085/                            GSocket gs-netcat and gs-dbus staging
file    /etc/systemd/system/sys-update.service         SysGoRAT systemd persistence
file    Solarwinds.StatusLog.txt                       sudo password capture log
file    search_social.php, zip_mails.sh, dump.sqlite   mailbox and database staging
dir     /var/qmail/mailnames/                          mailbox enumeration target
pipe    /tmp/f                                         mkfifo named pipe for the nc reverse shell
string  auto_prepend_file                              rewritten under /etc/php/ and /opt/plesk/php/
string  RedTeamOps2025, pentest123                     planted red-team markers
proc    php-fpm parent -> sh/bash                      interactive web shell
proc    python parent -> bash -i                       Python subprocess reverse shell
proc    pgrep/pkill vs Cortex XDR components           agent kill attempt
cmd     touch -t                                       timestomping of long-lived scripts
Named Malware and Toolingfrom the Unit 42 report
# Named malware and tooling in the Unit 42 report
SysGoRAT      custom Go RAT, Windows and Linux, WebSocket C2 wss://<addr>/ws, default 104.194.158.65:443
              binary names: sys-control-client, pip2.7, ea_install, ./semanage
              persist: systemd (sys-update.service), cron (5 min), HKCU Run (Onedrive Update\Updater.exe), schtasks (Onedrive)
GSocket       gs-netcat, gs-dbus, process name [kcached], GSOCKET_ARGS env var, relay gsocket.io
LinPEAS       open-source local privilege escalation checker
PwnKit        open-source CVE-2021-4034 exploit
revsocks      open-source reverse SOCKS5 tunnel
pysoxy        open-source Python SOCKS proxy
sshpass       used with StrictHostKeyChecking=no for lateral SSH
React2Shell   custom Go scanner for CVE-2025-55182
Patch and Config Auditread-only checks
# Patch / config audit checklist (read-only)
polkit / pkexec       patched for CVE-2021-4034 (PwnKit)?     rpm -q polkit  or  dpkg -l policykit-1
php auto_prepend_file empty or approved on every PHP SAPI?    grep -rn auto_prepend_file /etc/php /opt/plesk/php
/dev/shm, /tmp        mounted nodev,nosuid,noexec?            findmnt -no OPTIONS /dev/shm
SUID inventory        no hidden or unexpected SUID files?     find / -xdev -perm -4000 -type f -name ".*"
React2Shell           CVE-2025-55182 patched on exposed apps? (check vendor advisory for your framework version)
egress                web servers cannot reach arbitrary internet hosts?
11

Detection Validation Gates

GateRequirement
Telemetry readyConfirm the Falcon Linux sensor is installed on web, mail and database servers and that process creation with command line and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents) flows for event_platform=Lin. Confirm network connection (NetworkConnectIP4) and DNS lookup (DnsRequest) events appear for a Linux test host. No card here depends on a file-write event, so pair these queries with file integrity monitoring to cover payloads that land on disk without executing.
Benign baselineRun Q1, Q3, Q8, Q9, Q10, Q11, Q12 and Q18 for 14 days and fill the TUNING exclusions with observed automation, backup agents, log rotation and config management.
Positive testsSafe simulation only on a lab Linux host: run bash -c "alias sudo=true" to hit Q7, create a copy of /bin/true named sys-control-client and run it for Q4, and run pkill -0 nonexistent-agent for Q9. Do not run any real payload, reverse shell or exploit.
Promotion pathInvestigate-only to Custom IOA after two clean baseline weeks. IOA-1 and IOA-2 are the strongest candidates. No IOA moves to prevent without a second independent source and a legitimate-tool review.
12

Hardening: Tiered

Immediate (this week)
  • Restrict outbound traffic from web, mail and database servers to an allowlist; log first, then drop (Playbook E logs only). MITRE M1037 Filter Network Traffic. Best-practice, no formal benchmark for this exact control.
  • Patch polkit for CVE-2021-4034 (PwnKit) and confirm with the package manager (Playbook F). MITRE M1051 Update Software; the Linux vendor advisory is the authority.
  • Audit auto_prepend_file, hidden SUID files, alias sudo and authorized_keys (Playbook A). MITRE M1047 Audit.
  • Rotate the sudo, database, SMTP and mailbox credentials on any host with a hit (Section 14). MITRE M1027 Password Policies.
Near term (1 to 4 weeks)
  • Mount /dev/shm and /tmp with nodev,nosuid,noexec (Playbook C). MITRE M1038 Execution Prevention, M1028 Operating System Configuration; CIS Linux Benchmark covers the partition mount options.
  • Disable PHP command execution functions (disable_functions) for sites that do not need them (Playbook B). MITRE M1042 Disable or Remove Feature. Vendor/PHP best-practice, no formal benchmark; pilot per site.
  • Deploy auditd watches on PHP configuration, systemd units, authorized_keys and log files (Playbook D). MITRE M1047 Audit; DISA Linux STIG auditd requirements.
  • Enable Falcon sensor tamper protection and alert on stop attempts. MITRE M1040 Behavior Prevention on Endpoint.
Strategic (1 to 3 months)
  • Ship auth, mail and web logs to an off-host collector so on-host deletion does not erase evidence. MITRE M1029 Remote Data Storage.
  • Replace hard-coded credentials and sshpass use with SSH certificates or a secrets manager; require key-based SSH and restrict who can sudo. MITRE M1026 Privileged Account Management, M1032 Multi-factor Authentication; CIS Linux Benchmark SSH and sudo sections.
  • Segment web servers from mail and database tiers so a web shell cannot reach internal SQL servers directly. MITRE M1030 Network Segmentation.
  • Deploy file integrity monitoring on web roots and PHP configuration. MITRE M1022 Restrict File and Directory Permissions, M1047 Audit.
13

Deployable Playbooks

Playbook A · read-only host audit

# Playbook A: read-only audit for CL-UNK-1211 artifacts on a Linux host
# Prerequisites: root or sudo, bash, standard coreutils; run on the suspect host
# Reboot required: No
# Rollback: none required, this playbook only reads files
echo "== auto_prepend_file =="; grep -rn "auto_prepend_file" /etc/php /opt/plesk/php 2>/dev/null
echo "== fake Plesk file =="; ls -la /usr/lib/php/plesk_sys_driver.php 2>/dev/null
echo "== hidden SUID files =="; find / -xdev -perm -4000 -type f -name '.*' 2>/dev/null
echo "== GSocket staging =="; ls -la /dev/shm 2>/dev/null
echo "== sudo alias =="; grep -n "alias sudo" /home/*/.bashrc /root/.bashrc /etc/bash.bashrc 2>/dev/null
echo "== password log =="; find / -xdev -name 'Solarwinds.StatusLog.txt' 2>/dev/null
echo "== SysGoRAT unit =="; ls -la /etc/systemd/system/sys-update.service 2>/dev/null
echo "== authorized_keys =="; ls -la /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null

Playbook B · disable PHP command functions

# Playbook B: disable PHP command execution functions via a conf.d drop-in
# Prerequisites: test on a staging site first; the application must not call exec, system or shell_exec; adjust PHP_CONF_DIR for your distribution
# Reboot required: No (reload php-fpm only)
# Rollback: delete the drop-in file and reload php-fpm (command below)
PHP_CONF_DIR=/etc/php/8.2/fpm/conf.d   # example path, verify with: php-fpm8.2 -i | grep 'Scan this dir'
cat > "$PHP_CONF_DIR/99-huntpack-disable-exec.ini" <<'EOF'
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec
EOF
systemctl reload php8.2-fpm
# Verify:
php-fpm8.2 -i 2>/dev/null | grep disable_functions
# Rollback:
#   rm "$PHP_CONF_DIR/99-huntpack-disable-exec.ini" && systemctl reload php8.2-fpm
# Note: Plesk per-domain PHP settings can override this; set them in the Plesk panel as well.

Playbook C · harden /dev/shm mount options

# Playbook C: mount /dev/shm noexec,nosuid,nodev
# Prerequisites: confirm no workload runs executables from /dev/shm (check with: findmnt -no OPTIONS /dev/shm)
# Reboot required: No for the remount; the fstab line makes it persistent across reboots
# Rollback: remount with exec and restore the saved fstab copy
cp /etc/fstab /etc/fstab.bak-huntpack
mount -o remount,noexec,nosuid,nodev /dev/shm
grep -q '^tmpfs /dev/shm' /etc/fstab || echo 'tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0' >> /etc/fstab
# Verify:
findmnt -no OPTIONS /dev/shm
# Rollback:
#   mount -o remount,exec /dev/shm && cp /etc/fstab.bak-huntpack /etc/fstab

Playbook D · auditd watches

# Playbook D: auditd watches for CL-UNK-1211 persistence and cleanup
# Prerequisites: auditd installed and running; root
# Reboot required: No (note: if your policy sets -e 2 the rules are immutable until reboot)
# Rollback: remove the rules file and reload (command below)
cat > /etc/audit/rules.d/huntpack-cl-unk-1211.rules <<'EOF'
-w /etc/php -p wa -k huntpack_php_conf
-w /opt/plesk/php -p wa -k huntpack_php_conf
-w /etc/systemd/system -p wa -k huntpack_systemd
-w /root/.ssh/authorized_keys -p wa -k huntpack_ssh_keys
-w /var/log/auth.log -p wa -k huntpack_logs
-w /var/log/secure -p wa -k huntpack_logs
-w /etc/bash.bashrc -p wa -k huntpack_bashrc
EOF
augenrules --load
# Verify:
auditctl -l | grep huntpack
# Rollback:
#   rm /etc/audit/rules.d/huntpack-cl-unk-1211.rules && augenrules --load

Playbook E · log-only egress rule for campaign IPs

# Playbook E: LOG (not drop) outbound traffic to the listed campaign IPs with nftables
# Prerequisites: nftables installed; root; this rule only logs and counts, it does not block
# Reboot required: No (rule is not persistent unless you add it to nftables.conf)
# Rollback: delete the table (command below)
nft add table inet huntpack_cl_unk_1211
nft add set inet huntpack_cl_unk_1211 c2 '{ type ipv4_addr; }'
nft add element inet huntpack_cl_unk_1211 c2 '{ 45.88.188.140, 198.23.185.234, 138.68.244.146, 185.21.136.6, 72.61.89.179, 104.194.158.65, 109.224.53.140, 162.243.175.162, 154.93.37.228, 141.164.58.87, 88.80.150.232, 88.119.167.57, 173.212.247.23, 104.248.131.53, 147.182.224.216, 93.93.112.57, 192.210.183.17 }'
nft add chain inet huntpack_cl_unk_1211 out '{ type filter hook output priority 0; }'
nft add rule inet huntpack_cl_unk_1211 out ip daddr @c2 counter log prefix \"CL-UNK-1211 \"
# Verify:
nft list table inet huntpack_cl_unk_1211
# Rollback:
#   nft delete table inet huntpack_cl_unk_1211
# Posture: this matches the detect-only IOC import. Change to 'drop' only after a second independent source and a hosting-reuse check.

Playbook F · PwnKit patch check

# Playbook F: confirm polkit is patched for CVE-2021-4034 (PwnKit); temporary mitigation if it is not
# Prerequisites: root; package manager access; nothing on the host depends on pkexec
# Reboot required: No
# Rollback: restore the SUID bit (command below)
rpm -q polkit 2>/dev/null || dpkg -l policykit-1 2>/dev/null
# Apply the vendor update for your distribution first (preferred):
#   dnf update polkit   or   apt-get install --only-upgrade policykit-1
# Only if you cannot patch yet, remove the SUID bit from pkexec:
#   chmod 0755 /usr/bin/pkexec
# Rollback after patching:
#   chmod 4755 /usr/bin/pkexec
# Verify:
ls -l /usr/bin/pkexec
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the Linux host in Falcon (or pull it from the network at the hypervisor). Before any reboot, capture volatile data: process list, /dev/shm contents, network connections, and a memory image where policy allows. Preserve web and system logs off-host.SOC / IRContainment timestamp, volatile capture, log copies
Isolate: by platformCrowdStrike: network-contain the host. SentinelOne: network quarantine (Disconnect from Network; confirm the label in your console version). Microsoft Defender: Isolate device (full network isolation). Keep the host powered on for memory capture on all of them.SOC / IRContainment timestamp, volatile capture, log copies
ScopeRun Q1 to Q18 for 30 days across all Linux servers; run Playbook A on hosts with no sensor; review web logs for the web shell paths; list every host that shares credentials with the affected one (sshpass targets, database logins).SOC / IRHit list, host inventory
EradicateRemove attacker entries from every PHP config under /etc/php and /opt/plesk/php, and delete the files they point to; remove plesk_sys_driver.php and other web shells; delete hidden SUID files (.libsystemd-helper, .tourch, .libpython-helper); stop and remove sys-update.service and the cron entry; remove GSocket files under /dev/shm; restore .bashrc from a clean copy; remove injected authorized_keys and any account such as pentest123. Prefer a rebuild from a known-good image for any host where root was obtained.IR / SysadminFile and unit removal log, config diff
CredentialsFrom a clean system, rotate sudo and root passwords, database, SMTP and application credentials, SSH keys and any shared secrets on the host. Treat mailboxes in /var/qmail/mailnames/ as exposed: force password resets and review the linked social media accounts of the affected government addresses.IAM / Mail adminRotation tickets, account review notes
RecoverRebuild or restore from a pre-October-2025 known-good backup, patch polkit and the web framework, apply Playbooks B to E, and re-baseline with Q1, Q7 and Q10 for 14 days.EngineeringClean query results, patch report
15

Detection Coverage Map

TechniqueBehaviorCQLIOACrowdStrike coverageSentinelOneDefender XDR
T1505.003 / T1059.004Web shell command execution under a php-fpm parentQ1NoPartial sees the child process, not the web shell file or the HTTP request. Needs the Linux sensor plus web-server-log reviewPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1505.003PHP web shell files on disk and in web rootsQ14NoGAP file content is outside endpoint telemetry. Use the Section 7 hash sweep and file integrity monitoringGAP: same limit as CrowdStrikeGAP: same limit as CrowdStrike
T1546auto_prepend_file tamperingQ10IOA-4Partial catches command-line edits; a PHP script or editor writing the config directly is not visiblePartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1059.004 / T1095Reverse shells (named pipe, /dev/tcp, Python)Q2, Q3, Q15IOA-1Good needs the Linux sensor; the network leg depends on NetworkConnectIP4 on LinuxGood, with assumptionsGood, with assumptions
T1036.005 / T1090SysGoRAT and GSocket disguised binariesQ4, Q5, Q13, Q14IOA-2Partial name-based; the operator can rename again. No SysGoRAT sample hash is publishedPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1068 / T1548.001PwnKit, LinPEAS, setuid helpersQ6NoGoodGood, with assumptionsGood, with assumptions
T1056.001 / T1546.004sudo alias password captureQ7IOA-3Partial visible only when the alias is written by a command; a replaced .bashrc file copy is notPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1552.001Cleartext password search in configs and historyn/aNoGAP grep and cat are too common to hunt by name without noise; use auditd read watchesGAPGAP
T1070.002 / T1070.003Log and history deletionQ8NoPartial command line only; unlink from a script or PHP is invisible. Compare off-host log copiesPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1070.006Timestomping with touch -tn/aNoGAP touch -t is common in build tooling; check ctime against mtime in Section 7GAPGAP
T1562.001Security agent kill attemptsQ9IOA-5Partial only the Cortex XDR behavior is named by the source; other agent names are an extensionPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1114.001 / T1074.001Mailbox enumeration and stagingQ11NoPartial command lines only; reading Maildir files from a web shell is not a sensor eventPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1567.002 / T1048Exfiltration to file hosts or ncQ12, Q16, Q17NoPartial command line and DNS; legitimate hosting services make DNS-only results leadsPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1071 / T1571SysGoRAT WebSocket C2 (TLS) and operator-changed IPsQ15, Q16NoPartial IP list is static; the operator can change the C2 on the command line and the WebSocket body is encryptedPartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1021.004 / T1098.004sshpass, SOCKS tools, authorized_keysQ18NoPartial key injected through a script file is not visiblePartial: same limit as CrowdStrikePartial: same limit as CrowdStrike
T1190Initial access (React2Shell CVE-2025-55182 and web shell upload)n/aNoGAP Unit 42 does not detail initial access. This is web-server-log, WAF and patch-level work, outside endpoint telemetryGAPGAP
T1505 / T1059MSSQL xp_cmdshell double hop and SQL dumpsn/aNoGAP database audit logs, outside endpoint telemetryGAPGAP
Sensor reachHosts without the Linux sensor or on unsupported kernelsn/aNoGAP Q1 to Q18 cannot see these hosts at all; auditd and syslog are the only sourceGAPGAP

What needs the Linux sensor and what needs something else. Q1 to Q14 and Q18 depend on process creation events from the Falcon Linux sensor (event_platform=Lin), and Q16 and Q17 on DnsRequest on Linux; validate that DNS events emit in your tenant. Write-time visibility is a gap. Every query here catches a binary at execution, not at the moment it lands on disk, so a payload written and then deleted without running leaves no trace in these cards. Close that gap with file integrity monitoring on /dev/shm, /tmp and the web roots, plus the hash sweep in Section 11. A web-server-log review has to cover the HTTP side (web shell requests, exploit attempts), file integrity or a hash sweep has to cover web shell and config contents, and database audit logs have to cover the SQL hops. Validation gates are in Section 11.

16

Hunt Summary Ticket

TITLE:      CL-UNK-1211: SysGoRAT and web shell intrusion against Linux government servers
SEVERITY:   HIGH, espionage-style activity on Linux web and mail servers, attribution unknown
SCOPE:      Linux web, mail and database servers (Apache, nginx, php-fpm, Plesk, qmail);
            hosts running SysGoRAT on Windows are secondary
HYPOTHESIS: A compromised host shows a shell under a php-fpm parent, an auto_prepend_file
            change, a sudo alias or Solarwinds.StatusLog.txt, a hidden SUID helper,
            SysGoRAT persistence (sys-update.service), log deletion, or traffic to the
            listed IPs and domains.
QUERIES:    Q1-Q18 (Section 8); IOA-1 to IOA-5 (Section 9)
DO FIRST:   1. Run Playbook A on every Linux web and mail server.
            2. Run Q1, Q4, Q6, Q7, Q10 fleet-wide for 30 days.
            3. Run Q14 to Q16 for the hash, IP and domain indicators.
            4. Review web-server logs for plesk_sys_driver.php and search_social.php.
FINDINGS:   REPLACE_WITH_FINDINGS_SUMMARY_AFTER_HUNT_EXECUTION
GAPS:       Web shell file contents, PHP config writes, HTTP requests, initial access,
            database audit logs, hosts without the Linux sensor, timestomping,
            no published SysGoRAT sample hash (Section 15).
ACTIONS:    Deploy IOA-1 to IOA-5 in detect mode; rotate credentials on any hit host;
            apply Playbooks B to F; all IOCs stay detect (single vendor).
OWNER:      REPLACE_WITH_HUNT_OWNER
VERSION:    v0.1 (Draft) 2026-10-17
17

Changelog

v0.12026-10-17Initial pack build from the Unit 42 primary report (snapshot 01) with three secondary write-ups that restate it and add no indicators (snapshots 02 to 04). 18 CQL queries, 5 IOA candidates, 31 atomic indicators all at detect because no independent second source exists. No SysGoRAT sample hash is published, so none ships. Legitimate services and stock tools are hunt-only. Attribution stays unknown. SentinelOne PowerQuery and Microsoft Defender KQL tabs added to Q1-Q18: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

TierSourceUsed forAccess date
T1Unit 42, AI-Powered Espionage Campaign Targets Government Linux InfrastructureAll TTPs and every atomic indicator2026-10-17
T2GridinSoft, Linux sudo password theft write-upContext only (restates Unit 42)2026-10-17
T2GBHackers, AI-assisted hackers compromise government Linux serversContext only (restates Unit 42)2026-10-17
T2Cybersecurity News, AI-generated scripts hijack Linux sudoContext only (restates Unit 42)2026-10-17

Four fetched sources were saved to SysGoRAT-CL-UNK-1211-Hunt-sources/ for the provenance gate. The three T2 sources are derivative of the Unit 42 report and are not counted as independent corroboration.

Generated 2026-10-17 by HuntPack · defensive content only