GoSerpent - Go-Based Espionage Backdoor & Multi-Tool Chain

A previously undocumented Go-based backdoor and integrated toolset (GoSerpent → ThumbcacheService → Stowaway → TmcLoader/TmcPayload) used against government and diplomatic entities in Southeast Asia. Active since ~2021, evolved through 2025–2026. Disclosed by Kaspersky / Securelist on 2026-07-16; possible overlap with the TetrisPhantom actor.
Severity
Cyber-Espionage · Suspected APT
Type
Backdoor / RAT / Data Theft
Region
Southeast Asia (gov / diplomatic)
Primary Platform
Windows / Active Directory
Atomic IOCs
11 C2 IPs · 11 MD5 · 3 files
Version
v0.2 (Draft) · 2026-07-22
Author
HuntPack
01

Executive Summary

GoSerpent is a Go-based remote access Trojan with proxy capabilities that serves as the entry stage of a carefully staged, multi-tool espionage operation. The most recent variant receives an AES-CBC encrypted, Base64-encoded command-line argument (fixed IV 31323334353637383930616263646566) carrying its C2 address and communication password, then beacons over a ChaCha20-encrypted channel keyed by the SHA256 of that password. Older 2021-era variants that take plaintext command-line arguments are still deployed alongside the newer build.

The operation is deliberately phased over months. In the initial phase GoSerpent drops ThumbcacheService (a DLL Windows service that harvests .doc/.docx/.pdf/.xls/.xlsx documents, archives them with 7-Zip under a hardcoded password, and stages them in C:\Users\Public\thumbcache_605a.db) plus the credential dumpers Mimikatz (LSASS) and QuarksDumpLocalHash (SAM hive). Weeks later the actor returns with Stowaway (an SSH-capable proxy/RAT) which delivers TmcLoader/TmcPayload, a C++ service loader that injects into svchost.exe, reads an encrypted config ({BBF061R2-BE25-4F6D-8B2D-1A6A39C3FSA2}.db), and exfiltrates the staged archive over network shares using the previously stolen credentials.

Why this pack matters: the indicators are cheap to rotate but the behavioral chain is not. Staging a distinctively named DB in C:\Users\Public\, 7-Zip archiving with a fixed password, service-installed DLLs, credential dumping, and svchost injection followed by SMB egress are the durable signals. Hunt the chain, block the atomic IOCs, and harden service creation + LSASS/SAM access.
02

Source Review & Web-Hunter Notes

Two sources were fetched and saved verbatim to GoSerpent-Hunt-sources/. Securelist is the IOC-authoritative primary; The Hacker News corroborates the narrative and toolset.

TierSourceKey FindingCarry Fwd
1 (Primary)Securelist / Kaspersky GReAT (Noushin Shabab), 2026-07-16Full technical writeup + IOC appendix: 11 C2 IPs, 11 MD5 hashes, tool internals, encryption schemes, staging artifacts.yes
2 (Corroborating)The Hacker News, 2026-07Confirms toolset, attack phases, command set, and TetrisPhantom overlap. No additional atomic IOCs.partial
Perishability: the 11 C2 IPs sit on Alibaba Cloud / UCLOUD HK VPS hosting and will rotate quickly. Treat IPs as short-lived detections; treat the behavioral hunts (Q3–Q9) as durable. Attribution to TetrisPhantom is unconfirmed.
03

Hunt Brief & Attack Chain

#StageBehaviorTelemetryHunt Angle
1FootholdGoSerpent runs, masquerading as lass.exe / updates.exe; decrypts AES-CBC arg; beacons ChaCha20.ProcessRollup2, NetworkConnectIP4Masqueraded names; C2 IP callbacks (Q1–Q3)
2ToolingGoSerpent downloads ThumbcacheService, Mimikatz, QuarksDumpLocalHash. McMx config built via echo batch.ProcessRollup2, ServiceInstalledService install; cred-dump sigils (Q6, Q8)
3CollectionThumbcacheService harvests documents, 7-Zip archives them under a fixed password into thumbcache_605a.db.File-write, ProcessRollup2Staging DB write; archive password (Q4, Q7)
4Cred accessMimikatz dumps LSASS; QuarksDumpLocalHash reads the SAM hive.ProcessRollup2LSASS/SAM access command lines (Q8)
5Re-entryWeeks later Stowaway deploys with SOCKS5 / SSH tunneling; delivers TmcLoader + encrypted config DB.ProcessRollup2, NetworkListenIP4Proxy/tunnel listeners; config DB write (Q5, Q9)
6ExfilTmcLoader injects TmcPayload into svchost; reads share creds; copies the archive out over SMB.ProcessRollup2, NetworkConnectIP4svchost SMB egress after config DB (Q5, Q9)
04

Consolidated IOC Table

All indicators below are drawn verbatim from the saved Securelist snapshot. IPs are shown defanged for safety; the machine-readable appendix (§10) ships fanged, import-ready values.

TypeValueAttributionConfAction
MD5EBFFD5A76AAA690BCDB922F82E0BACC5GoSerpenthighBlock + hunt
MD5DC506FF7BB72735444FB3703A6BEE6D8GoSerpenthighBlock + hunt
MD5D6E86BF8A90E9B632ADD5FA495F97FBCMcMx RAThighBlock + hunt
MD5CB6C4C70A3B171FA3404B8E1A3382116ThumbcacheServicehighBlock + hunt
MD564E9D1950E42BC98486DFD9919463D1CThumbcacheServicehighBlock + hunt
MD5CBBB6D483737EA3566726E51752DFF40StowawayhighBlock + hunt
MD57F223EE0716CE2AD56F55D3744419449StowawayhighBlock + hunt
MD519F8BEFCB035F52BF70094E6B4F5779AStowawayhighBlock + hunt
MD5846EF7C1C7323849B2A778C5E4CDA162StowawayhighBlock + hunt
MD5D08A059E8B815E3B891505BC8777FC28TmcLoaderhighBlock + hunt
MD593A1569D5D5AB2C4761FEDF84F83709ETmcLoaderhighBlock + hunt
C2 IP152.32.160[.]239C2 (Alibaba/UCLOUD)highBlock + hunt
C2 IP8.220.194[.]108C2highBlock + hunt
C2 IP8.220.214[.]132C2highBlock + hunt
C2 IP8.220.209[.]155C2highBlock + hunt
C2 IP8.220.193[.]189C2highBlock + hunt
C2 IP101.36.104[.]87C2highBlock + hunt
C2 IP144.48.6[.]46C2highBlock + hunt
C2 IP103.138.13[.]30C2highBlock + hunt
C2 IP47.80.22[.]58C2highBlock + hunt
C2 IP152.32.222[.]113C2highBlock + hunt
C2 IP43.106.30[.]226C2highBlock + hunt
Filenamelass.exeGoSerpent masquerademedHunt
Filenameupdates.exeGoSerpent masquerademedHunt
Filenamethumbcache_605a.dbThumbcacheService staging archivehighHunt
Config file{BBF061R2-BE25-4F6D-8B2D-1A6A39C3FSA2}.dbTmcLoader confighighHunt
Archive pw@vx0a9n5W2M0c3D6.#7-Zip password (ThumbcacheService)highHunt
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryFalcon EventsPriorityGap Risk
Endpoint process execProcess create + command lineProcessRollup2, SyntheticProcessRollup2highlow
File staging / collectionFile write to C:\Users\PublicFile-write events (TargetFileName)highmedium
Windows servicesService install / startServiceInstalled, ServiceStartedhighmedium
Network C2 / proxyOutbound conns + listenersNetworkConnectIP4, NetworkListenIP4highlow
Credential accessLSASS / SAM accessProcessRollup2 (cmdline)highmedium
Lateral / exfil (SMB)Network logon + share accessUserLogon, NetworkConnectIP4 (445)medhigh
06

ATT&CK Mapping

TacticTechniqueIDObserved
ExecutionCommand & Scripting InterpreterT1059.003McMx config built via echo batch files
Persistence / Priv-EscSystem Service: Windows ServiceT1543.003ThumbcacheService & TmcLoader registered as services
Command & ControlIngress Tool TransferT1105GoSerpent downloads ThumbcacheService, Mimikatz, QuarksDumpLocalHash
Defense EvasionMasquerading: Match Legitimate NameT1036.005lass.exe, updates.exe
Defense EvasionProcess InjectionT1055TmcPayload injected into svchost.exe
Defense EvasionObfuscated/Encrypted InfoT1027XOR 0x13, circular XOR + Base64 API hiding
Credential AccessOS Credential Dumping: LSASST1003.001Mimikatz LSASS memory dump
Credential AccessOS Credential Dumping: SAMT1003.002QuarksDumpLocalHash SAM hive extraction
CollectionData from Local SystemT1005ThumbcacheService document harvesting
CollectionArchive via UtilityT1560.0017-Zip password-protected archive
CollectionLocal Data StagingT1074.001thumbcache_605a.db staging DB
Command & ControlEncrypted ChannelT1573AES-CBC / ChaCha20 / AES-256-GCM
Command & ControlProxy: Internal ProxyT1090.001SOCKS5 via GoSerpent / McMx / Stowaway
Command & ControlProtocol TunnelingT1572Stowaway SSH-based tunneling
Lateral MovementRemote Services: SMB Admin SharesT1021.002Exfil via network shared drives
ExfiltrationExfil Over Alternative Protocol (SMB)T1048TmcPayload copies the staged archive to a remote SMB share (not over the C2 channel)
07

Native Audit-Log Hunts (non-CQL)

  • Windows Service creation — Security 4697 / System 7045: review new services whose ImagePath is a DLL under svchost -k or an EXE in C:\Users\Public. Maps to ThumbcacheService / TmcLoader.
  • SAM hive access — Security 4663 on HKLM\SAM and reg save hklm\sam process events (QuarksDumpLocalHash).
  • LSASS access — Sysmon EventID 10 with GrantedAccess=0x1410/0x1010 targeting lsass.exe (Mimikatz).
  • Staging file — File-system auditing on C:\Users\Public\ for creation of thumbcache_605a.db or files under C:\Users\Public\Libraries\.
  • SMB egress — Security 5140/5145 network share access correlated with newly-dumped local accounts.
08

CrowdStrike LogScale CQL Hunt Queries

Nine queries ordered high-fidelity first. Pick your cloud, then Copy CQL or Open in Falcon per card. Validate field names against your tenant data model before scheduling.

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Known-bad GoSerpent toolset hashes (MD5)
T1204 / T1543.003CONF HIGHFP LOWCOST LOW
// HUNT: GoSerpent / McMx / ThumbcacheService / Stowaway / TmcLoader known MD5 hashes
// MITRE: T1204, T1543.003
// CONF: high   FP: low   COST: low
// REQUIRES: ProcessRollup2 with MD5HashData
// FALSE POSITIVES: none expected for exact hash matches
#event_simpleName=/^(ProcessRollup2|PeFileWritten)$/
| MD5HashData=/^(EBFFD5A76AAA690BCDB922F82E0BACC5|DC506FF7BB72735444FB3703A6BEE6D8|D6E86BF8A90E9B632ADD5FA495F97FBC|CB6C4C70A3B171FA3404B8E1A3382116|64E9D1950E42BC98486DFD9919463D1C|CBBB6D483737EA3566726E51752DFF40|7F223EE0716CE2AD56F55D3744419449|19F8BEFCB035F52BF70094E6B4F5779A|846EF7C1C7323849B2A778C5E4CDA162|D08A059E8B815E3B891505BC8777FC28|93A1569D5D5AB2C4761FEDF84F83709E)$/i
| table([ComputerName, UserName, FileName, ImageFileName, MD5HashData, CommandLine], limit=max)
Q2 · C2 callbacks to known GoSerpent infrastructure
T1071 / T1573CONF HIGHFP LOWCOST LOW
// HUNT: Outbound connections to the 11 published C2 IPs
// MITRE: T1071, T1573
// CONF: high   FP: low   COST: low
// REQUIRES: NetworkConnectIP4
// FALSE POSITIVES: none expected; IPs are dedicated C2 (rotate quickly)
#event_simpleName=/^NetworkConnectIP4$/
| RemoteAddressIP4=/^(152\.32\.160\.239|8\.220\.194\.108|8\.220\.214\.132|8\.220\.209\.155|8\.220\.193\.189|101\.36\.104\.87|144\.48\.6\.46|103\.138\.13\.30|47\.80\.22\.58|152\.32\.222\.113|43\.106\.30\.226)$/
| table([ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort, Protocol], limit=max)
Q3 · GoSerpent masquerade: lass.exe / updates.exe
T1036.005CONF MEDFP MEDCOST LOW
// HUNT: Execution of masqueraded GoSerpent process names
// MITRE: T1036.005
// CONF: medium   FP: medium   COST: low
// REQUIRES: ProcessRollup2
// FALSE POSITIVES: legit updater binaries also named updates.exe
// TUNING: exclude signed updates.exe under \Program Files\ and known vendor paths;
//         lass.exe (note: NOT lsass.exe) is high-signal on its own
#event_simpleName=/^ProcessRollup2$/
| FileName=/^(lass|updates)\.exe$/i
| ImageFileName!=/\\Program Files/i
| table([ComputerName, UserName, FileName, ImageFileName, ParentBaseFileName, CommandLine, MD5HashData], limit=200)
Q4 · ThumbcacheService staging DB in C:\Users\Public
T1074.001CONF MEDFP LOWCOST LOWDETECT-AND-VALIDATE
// HUNT: Creation of the distinctive collection archive thumbcache_605a.db
// MITRE: T1074.001, T1005
// CONF: medium   FP: low   COST: low
// TELEMETRY: thumbcache_605a.db is a 7-Zip archive renamed .db, so the matching
//   event is SevenZipFileWritten (Falcon types archive writes by content, not by
//   extension). ZipFileWritten/PE variants are kept for the loader binaries.
// FALSE POSITIVES: legit thumbcache_*.db live in AppData, NOT C:\Users\Public
#event_simpleName=/^(SevenZipFileWritten|ZipFileWritten|NewExecutableWritten|PeFileWritten)$/
| TargetFileName=/thumbcache_605a\.db$/i
| table([ComputerName, UserName, ContextBaseFileName, TargetFileName], limit=200)
Q5 · TmcLoader config DB in C:\Users\Public\Libraries
T1074CONF MEDFP LOWCOST LOWHUNT/ENRICH
// HUNT: Encrypted TmcLoader configuration DB (GUID-named)
// MITRE: T1074   (NOTE: the T1055 svchost injection that TmcPayload performs is NOT
//   observed by this file-write query -- see the Detection Coverage Map gap row.)
// CONF: medium   FP: low   COST: low
// TELEMETRY: same SevenZipFileWritten reasoning as Q4.
// SOURCE CAVEAT: the config filename below is reproduced VERBATIM from Securelist and
//   contains non-hex characters (R, S) -- it may be an OCR artifact in the source. If
//   the real on-disk name is a valid GUID, this literal will not match. Hunt/enrich only.
#event_simpleName=/^(SevenZipFileWritten|ZipFileWritten|NewExecutableWritten|PeFileWritten)$/
| TargetFileName=/\{BBF061R2-BE25-4F6D-8B2D-1A6A39C3FSA2\}\.db$/i
| table([ComputerName, UserName, ContextBaseFileName, TargetFileName], limit=200)
Q6 · 7-Zip archiving with the hardcoded collection password
T1560.001CONF HIGHFP LOWCOST LOW
// HUNT: 7-Zip invoked with the ThumbcacheService archive password
// MITRE: T1560.001
// CONF: high   FP: low   COST: low
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: none; password literal is campaign-specific
#event_simpleName=/^ProcessRollup2$/
| CommandLine=/@vx0a9n5W2M0c3D6/
| table([ComputerName, UserName, FileName, CommandLine, MD5HashData], limit=200)
Q7 · Suspicious Windows service install (Public-dir binary)
T1543.003CONF MEDFP LOWCOST MED
// HUNT: Service install whose ImagePath resolves under C:\Users\Public
// MITRE: T1543.003
// CONF: medium   FP: low   COST: medium
// REQUIRES: ServiceInstalled
// NOTE: the earlier svchost.*-k branch was removed -- "svchost.exe -k <group>" is the
//       normal ImagePath of nearly every built-in Windows service and matched all of
//       them. A service binary under a user-writable path is the real anomaly here.
// FALSE POSITIVES: rare legit installers that stage under Public; exclude signed ones.
#event_simpleName=/^(CreateService|ModifyServiceBinary)$/
| ServiceImagePath=/\\Users\\Public\\/i
| table([ComputerName, UserName, ServiceDisplayName, ServiceImagePath], limit=200)
Q8 · Credential dumping: LSASS / SAM (Mimikatz, QuarksDump)
T1003.001 / T1003.002CONF MEDFP MEDCOST LOW
// HUNT: Command-line sigils of LSASS/SAM credential dumping
// MITRE: T1003.001, T1003.002
// CONF: medium   FP: medium   COST: low
// REQUIRES: ProcessRollup2 with CommandLine
// FALSE POSITIVES: admins running reg save / backup of SAM legitimately
// TUNING: scope to non-admin or unexpected parent processes; exclude sanctioned
//         backup/IR tooling by MD5HashData allowlist
#event_simpleName=/^ProcessRollup2$/
| CommandLine=/sekurlsa|lsadump|privilege::debug|reg(\.exe)?\s+save\s+hk(lm|ey_local_machine)\\sam|QuarksDump/i
| table([ComputerName, UserName, FileName, ParentBaseFileName, CommandLine, MD5HashData], limit=200)
Q9 · Proxy/tunnel listeners & McMx echo-built config
T1090.001 / T1572CONF MEDFP HIGHCOST MED
// HUNT: SOCKS5/SSH tunnel setup and McMx plaintext-config creation
// MITRE: T1090.001, T1572, T1059.003
// CONF: medium   FP: high   COST: medium
// REQUIRES: ProcessRollup2 (cmdline)
// FALSE POSITIVES: legit admin ssh -R/-D tunnels; batch scripts using echo
// TUNING: restrict to non-IT hosts; require an uncommon parent (cmd spawned by a
//         Public-dir binary) and exclude sanctioned jump-box / bastion accounts
#event_simpleName=/^ProcessRollup2$/
| CommandLine=/ssh(\.exe)?\s+.*-[RDL]\s|socks5|echo\s+.*(secret|rhost|rport).*>/i
| ParentBaseFileName!=/^(devenv|code|WindowsTerminal)\.exe$/i
| table([ComputerName, UserName, FileName, ParentBaseFileName, CommandLine], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOABasisRule TypeAction
Public-dir staging DBQ4 — file thumbcache_605a.db created in C:\Users\PublicFile CreationDetect → Block (high conf)
TmcLoader config DBQ5 — GUID-named .db in Public\LibrariesFile CreationDetect (high conf)
Fixed archive passwordQ6 — command line contains @vx0a9n5W2M0c3D6Process CreationDetect → Block
lass.exe executionQ3 — process named lass.exeProcess CreationDetect (medium conf)
Public-dir service installQ7 — service ImagePath under \Users\PublicService CreationDetect (tune first)
Promote Q4, Q5 and Q6 to blocking Custom IOAs first: distinctive, low-FP, and each severs a different link of the collection–exfil chain. Keep Q3/Q7/Q8/Q9 as Investigate-only until tuned.
10

Machine-Readable IOC Appendix

Grouped Quick-Copy grid for fast pivoting, plus an import-ready CSV for Falcon IOC Management.

C2 IPs (11)block / hunt
152.32.160.239
8.220.194.108
8.220.214.132
8.220.209.155
8.220.193.189
101.36.104.87
144.48.6.46
103.138.13.30
47.80.22.58
152.32.222.113
43.106.30.226
MD5 hashes (11)block / hunt
EBFFD5A76AAA690BCDB922F82E0BACC5
DC506FF7BB72735444FB3703A6BEE6D8
D6E86BF8A90E9B632ADD5FA495F97FBC
CB6C4C70A3B171FA3404B8E1A3382116
64E9D1950E42BC98486DFD9919463D1C
CBBB6D483737EA3566726E51752DFF40
7F223EE0716CE2AD56F55D3744419449
19F8BEFCB035F52BF70094E6B4F5779A
846EF7C1C7323849B2A778C5E4CDA162
D08A059E8B815E3B891505BC8777FC28
93A1569D5D5AB2C4761FEDF84F83709E
Host artifactshunt
lass.exe
updates.exe
thumbcache_605a.db      (C:\Users\Public\)
{BBF061R2-BE25-4F6D-8B2D-1A6A39C3FSA2}.db  (C:\Users\Public\Libraries\)
7-Zip archive password: @vx0a9n5W2M0c3D6.#
AES-CBC fixed IV: 31323334353637383930616263646566
Falcon IOC-Management CSVbulk import
type,value,action,severity,description
ipv4,152.32.160.239,detect,high,GoSerpent C2
ipv4,8.220.194.108,detect,high,GoSerpent C2
ipv4,8.220.214.132,detect,high,GoSerpent C2
ipv4,8.220.209.155,detect,high,GoSerpent C2
ipv4,8.220.193.189,detect,high,GoSerpent C2
ipv4,101.36.104.87,detect,high,GoSerpent C2
ipv4,144.48.6.46,detect,high,GoSerpent C2
ipv4,103.138.13.30,detect,high,GoSerpent C2
ipv4,47.80.22.58,detect,high,GoSerpent C2
ipv4,152.32.222.113,detect,high,GoSerpent C2
ipv4,43.106.30.226,detect,high,GoSerpent C2
md5,EBFFD5A76AAA690BCDB922F82E0BACC5,detect,high,GoSerpent
md5,DC506FF7BB72735444FB3703A6BEE6D8,detect,high,GoSerpent
md5,D6E86BF8A90E9B632ADD5FA495F97FBC,detect,high,McMx RAT
md5,CB6C4C70A3B171FA3404B8E1A3382116,detect,high,ThumbcacheService
md5,64E9D1950E42BC98486DFD9919463D1C,detect,high,ThumbcacheService
md5,CBBB6D483737EA3566726E51752DFF40,detect,high,Stowaway
md5,7F223EE0716CE2AD56F55D3744419449,detect,high,Stowaway
md5,19F8BEFCB035F52BF70094E6B4F5779A,detect,high,Stowaway
md5,846EF7C1C7323849B2A778C5E4CDA162,detect,high,Stowaway
md5,D08A059E8B815E3B891505BC8777FC28,detect,high,TmcLoader
md5,93A1569D5D5AB2C4761FEDF84F83709E,detect,high,TmcLoader
filename,lass.exe,detect,medium,GoSerpent masquerade
filename,updates.exe,hunt,medium,GoSerpent masquerade (generic name; hunt-only to avoid FP on legit updaters)
filename,thumbcache_605a.db,detect,high,ThumbcacheService staging archive
11

Detection Validation Gates

  • Every atomic IOC (11 IPs, 11 MD5, 3 filenames) traces to the saved Securelist snapshot in GoSerpent-Hunt-sources/.
  • All CQL fields validated against the Falcon data model (ProcessRollup2, NetworkConnectIP4, ServiceInstalled, file-write events).
  • Regexes match basenames via FileName / TargetFileName — no unescaped path slashes inside /.../.
  • Every FP medium/high card (Q3, Q7, Q8, Q9) carries a // TUNING: exclusion.
  • Date stamped 2026-07-22 across sidebar, header, changelog, ticket and footer.
  • Before deploy: confirm your tenant emits ServiceInstalled and a file-write event carrying TargetFileName (Q4/Q5/Q7 depend on these).
12

Hardening — Tiered

Immediate (this week)

ControlMITREAuthorityVerify
Enable LSASS protection (RunAsPPL) to block Mimikatz memory readsM1043MS Security Baseline; CIS Win 18.xreg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL
Block untrusted executables in C:\Users\Public\ via WDAC/AppLocker path + publisher rulesM1038CIS Win; MS WDAC guidanceGet-AppLockerPolicy -Effective
Push the 11 C2 IPs + 11 MD5 to Falcon IOC Management (detect/block)M1031CrowdStrike IOC MgmtFalcon → IOC Management → search hash/IP

Near term (1–4 weeks)

ControlMITREAuthorityVerify
Restrict new service creation to admins; alert on service ImagePath under user-writable dirsM1028CIS Win 2.2 / 5.xEvent 4697 monitoring; Q7
Enable SAM/SECURITY hive object-access auditing; deny non-admin reg saveM1041CIS Win 17.x; DISA STIGauditpol /get /subcategory:"Registry"
Segment SMB — restrict admin-share access to jump hosts; enable SMB signingM1037 / M1035CIS Win; MS SMB hardeningGet-SmbServerConfiguration | select RequireSecuritySignature

Strategic (1–3 months)

ControlMITREAuthorityVerify
Tiered administration model; LAPS for local accounts to blunt SAM-hash reuseM1026 / M1027MS Enterprise Access ModelLAPS policy applied; unique local pw per host
Egress filtering / proxy allowlisting to break SOCKS5 & SSH tunnelingM1037NIST 800-41; vendor FW guidesDeny-by-default outbound; log tunnel attempts
13

Deployable Playbooks

Enable LSASS RunAsPPL (blocks Mimikatz)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPLBoot /t REG_DWORD /d 1 /f
# Reboot required. Verify after reboot:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL

AppLocker deny rule for user-writable staging dir (PowerShell)

<!-- Deny execution from C:\Users\Public, where GoSerpent drops its collection tooling. -->
<!-- Import: Group Policy -> Computer Configuration -> Windows Settings -> Security
     Settings -> Application Control Policies -> AppLocker -> Executable Rules -->
<!-- SHIPS AS AuditOnly ON PURPOSE. Run it for at least a week and review EventID
     8003 before flipping EnforcementMode to "Enabled". -->
<RuleCollection Type="Exe" EnforcementMode="AuditOnly">
  <!-- Microsoft default allow rules -- DO NOT REMOVE. Without them, enforcing this
       collection blocks every executable on the machine, including your RMM agent. -->
  <FilePathRule Id="921cc481-6e17-4653-8f75-050b80acca20" Name="(Default) All files in Program Files"
                Description="Allows Everyone to run applications in Program Files."
                UserOrGroupSid="S-1-1-0" Action="Allow">
    <Conditions><FilePathCondition Path="%PROGRAMFILES%\*" /></Conditions>
  </FilePathRule>
  <FilePathRule Id="a61c8b2c-a319-4cd0-9690-d2177cad7b51" Name="(Default) All files in Windows"
                Description="Allows Everyone to run applications in the Windows folder."
                UserOrGroupSid="S-1-1-0" Action="Allow">
    <Conditions><FilePathCondition Path="%WINDIR%\*" /></Conditions>
  </FilePathRule>
  <FilePathRule Id="fd686d83-a829-4351-8ff4-27c7de5755d2" Name="(Default) All files -- Administrators"
                Description="Allows local Administrators to run all applications."
                UserOrGroupSid="S-1-5-32-544" Action="Allow">
    <Conditions><FilePathCondition Path="*" /></Conditions>
  </FilePathRule>

  <!-- Some installers stage to Users\Public. Audit for a week, then enforce and confirm the collection tooling cannot run from that path. -->
  <FilePathRule Id="e58a1c94-6d20-47b3-bf09-2a4c8e1d5f77" Name="Deny execution from Users\Public for standard users"
                Description="GoSerpent drops and runs collection tooling from the Public profile"
                UserOrGroupSid="S-1-5-32-545" Action="Deny">
    <Conditions>
      <FilePathCondition Path="%SYSTEMDRIVE%\Users\Public\*" />
    </Conditions>
  </FilePathRule>
</RuleCollection>

Prerequisites: the Application Identity service (AppIDSvc) must be Running/Automatic, set via GPO -- AppLocker evaluates nothing without it. Pilot OU. Reboot required: no (gpupdate /force to refresh policy).

Verify: during the AuditOnly week, review Applications and Services Logs > Microsoft > Windows > AppLocker > EXE and DLL for EventID 8003 (would-have-blocked). Zero unexpected entries means it is safe to set EnforcementMode="Enabled"; a real block then logs EventID 8004.

Rollback: set EnforcementMode="NotConfigured" and re-import, or unlink the GPO and run gpupdate /force. If a host is already locked out by an over-broad policy, boot to Safe Mode (AppLocker does not enforce there) and stop AppIDSvc, or delete %WINDIR%\System32\AppLocker\*.AppLocker.

Audit SAM hive access (deny non-admin reg save)

auditpol /set /subcategory:"Registry" /success:enable /failure:enable
# Then set a SACL on HKLM\SAM for the Everyone principal (read/enumerate)
# and alert on Security event 4663 targeting the SAM key.
14

Containment Runbook

Isolate

  • Network-contain any host matching Q1/Q2 (known hash or C2 callback) via Falcon RTR.
  • Block the 11 C2 IPs at the perimeter and the 11 MD5 in Falcon IOC Management.

Eradicate

  • Remove the ThumbcacheService and TmcLoader Windows services; delete thumbcache_605a.db and the GUID config DB.
  • Hunt for and kill masqueraded lass.exe/updates.exe and any svchost with injected TmcPayload.
  • Assume all local + cached domain credentials on affected hosts are compromised.

Recover

  • Force-reset local account passwords (deploy LAPS) and rotate any domain creds that logged on interactively to affected hosts.
  • Review SMB share access logs (5140/5145) for exfil of the staged archive; notify data owners.
  • Enable RunAsPPL + AppLocker deny rules before returning hosts to service.
15

Detection Coverage Map

Chain StepCoverageQueryNotes
Foothold (GoSerpent)StrongQ1, Q2, Q3Hash + C2 + masquerade
Tooling / service installPartialQ7Depends on ServiceInstalled telemetry
Collection / archivingPartialQ4, Q6Q4 depends on Falcon emitting a write event for a 7-Zip .db (may not); Q6 depends on 7-Zip running as a child process with the password on the cmdline (may be in-process via 7z.dll). Validate both in-tenant.
Credential accessPartialQ8Cmdline sigils; add Sysmon 10 for LSASS handle
Re-entry (Stowaway/TmcLoader)PartialQ5Config-DB file-write hunt only (telemetry- and source-string-dependent, see Q5 caveats). The re-entry EXECUTION is not covered -- see the two gap rows below.
TmcPayload → svchost injection (T1055)GapIn-memory process injection into svchost.exe has no query. The encrypted C2 beaconing that follows is likewise not observable from process/file telemetry.
Stowaway proxy listenerGapNo query uses NetworkListenIP4 despite it being named in the telemetry matrix; Q9 is command-line-only and does not catch the standalone Stowaway proxy binary.
Exfil over SMBGapNo direct query; rely on 5140/5145 audit + egress logs. Requires network-share telemetry not consistently present.
Known gap: SMB-based exfiltration of the staged archive has no reliable EDR query without network-share access telemetry. Cover it with native Windows 5140/5145 auditing and perimeter egress logging.
16

Hunt Summary Ticket

TITLE:    GoSerpent Go-based backdoor + collection/exfil chain (SE Asia gov/diplomatic)
VERSION:  v0.3 (Draft) — 2026-07-22
SEVERITY: HIGH — nation-state espionage, credential theft, staged exfil
SCOPE:    Windows / Active Directory endpoints

HYPOTHESES / QUERIES:
  Q1 hashes        CONF high  FP low   — 11 toolset MD5
  Q2 C2 IPs        CONF high  FP low   — 11 C2 callbacks
  Q3 masquerade    CONF med   FP med   — lass.exe / updates.exe
  Q4 staging DB    CONF med   FP low   — thumbcache_605a.db in Public (validate telemetry)
  Q5 config DB     CONF med   FP low   — GUID .db in Public\Libraries (hunt/enrich)
  Q6 archive pw    CONF high  FP low   — 7-Zip @vx0a9n5W2M0c3D6.#
  Q7 svc install   CONF med   FP med   — Public-dir service ImagePath
  Q8 cred dump     CONF med   FP med   — LSASS/SAM cmdline sigils
  Q9 tunnels       CONF med   FP high  — SOCKS5/SSH + McMx echo config

ATOMIC IOCS:  11 C2 IPs · 11 MD5 · 3 filenames (all provenance-traced)
PROMOTE IOA:  Q4, Q5, Q6 (block)
KNOWN GAP:    SMB exfil — cover via 5140/5145 + egress logs
AUTHOR:       HuntPack
17

Changelog

v0.32026-07-24CQL correctness fix. Q7 hunted ServiceInstalled, which is not a Falcon event (it is a Sysmon/Windows-7045 mental model) and does not carry ServiceImagePath — the query could never return a row; now CreateService|ModifyServiceBinary. Q4/Q5 referenced DocumentFileWritten and ElfFileWritten, neither of which exists (the latter is ELFFileWritten); since thumbcache_605a.db is a 7-Zip archive and Falcon types archive writes by content rather than extension, they now use SevenZipFileWritten, which removes the earlier "may emit no telemetry" caveat. All 9 table() calls now carry an explicit limit: the two atomic-IOC sweeps (Q1 hashes, Q2 C2 IPs) use limit=max so a wide infection is never silently under-scoped, and the behavioural hunts use limit=200 — the default was already 200 but invisible, so a truncated result was indistinguishable from a complete one. No detection logic or IOCs changed.
v0.22026-07-22QC revision. Q4/Q5: removed non-existent Falcon event names (FileCreateInfo, NewFileWritten), added the 7-Zip/.db write-telemetry caveat, and demoted from block to detect-and-validate / hunt-enrich. Q5: flagged the config-DB filename as verbatim-from-source but non-hex. Q7: dropped the svchost.*-k branch that matched every legit service. Coverage Map: re-rated Collection and Re-entry to Partial and added explicit Gap rows for svchost injection (T1055) and the Stowaway listener. ATT&CK: corrected exfil T1041→T1048 (SMB) and added T1105. IOC CSV: updates.exe demoted to hunt-only. Corrected "18 MD5"→"11" and softened the attribution badge. No IOCs added or removed; all 26 still trace to source.
v0.12026-07-22Initial HuntPack. 9 CQL hunts, 5 IOA recommendations, tiered hardening + playbooks, containment runbook. Built from Securelist (primary) + The Hacker News (corroborating) snapshots.
18

References

GoSerpent · v0.2 · Generated 2026-07-22 · Author: HuntPack · Defensive detection content only