1. Executive summary
Cisco Talos has documented NIK C2, a Go-based 64-bit Windows remote access tool with a dual-channel command-and-control architecture (TLS WebSocket on port 443 plus an HTTP polling loop every 250 milliseconds) and more than 52 operator commands covering credential theft, surveillance, lateral movement and a screen-locking extortion module. The architecturally distinct feature is an embedded OpenAI Chat Completions client: the ai_generate command sends actor prompts from the infected host to https://api.openai.com/v1/chat/completions, and when the actor supplies no key the implant reads the victim's OPENAI_API_KEY environment variable, so the victim's account funds the inference and OpenAI's access logs record the victim's key. No CVE has been assigned and the item carries no CVSS score, no EPSS estimate and no CISA KEV entry; this is a malware capability assessment, not a patchable vulnerability. For EMEA financial services the exposure is to estates where developer or data-science workstations hold OpenAI API keys and where egress to api.openai.com is permitted, because in those environments the AI channel blends into legitimate traffic. Talos assesses with moderate confidence that NIK C2 is a functional framework rather than a proof of concept, based on an active server observed in the wild; no threat actor is named and no attribution is made.
2. Regulatory framing
No specific DORA/NIS2 article is directly engaged by this item.
3. Technical analysis & attack chain
Talos does not describe the initial access vector. The report covers the implant's behaviour after execution, the C2 architecture, and one server observed hosting the framework. The chain below is confirmed from the source; the entry point is not.
- The implant starts and inspects its command-line arguments.
watchdogactivates supervisory monitoring that relaunches the core process if terminated;copywatchdogtracks file copy operations; with neither argument it runs in primary agent mode. - In primary mode it takes a named mutex to enforce single-instance execution, logs
[NIK] Starting, generates a 32-byte session key if uninitialised, decodes its obfuscated C2 address, and sets its masquerade name tosvchost.exeorsimvol.exe. - It records its PID in the victim's temporary application folder, then runs persistence and evasion: copies itself to
%appdata%/Roaming/Microsoft/Networkwith modified access controls, writes Windows autostart registry entries, and masquerades its process. - It starts a local proxy server, opens the WebSocket communication loop in a separate goroutine, and enters a continuous heartbeat polling loop on the main thread.
- On WebSocket handshake, before receiving any command, it sends a registration message containing hostname, local LAN IP, Windows username, user SID, the local reverse-proxy port, and the upstream proxy configuration read from the Windows registry proxy settings.
- The HTTP polling channel posts a fresh state snapshot (hostname, watchdog status, local IP, username, timestamp, uptime) to
/api/c2/updateroughly every 250 milliseconds. - The dispatcher maps incoming commands by byte-level string matching to modules launched as concurrent goroutines, so multiple operations run in parallel.
C2 architecture. Two channels operate independently. The primary is a persistent WebSocket over TLS: a TCP dial with an eight-second timeout, port 443 appended if the address carries no port, then a TLS session that pins to a specific certificate instead of validating against the system CA store. That pinning defeats standard TLS interception proxies. The fallback is the HTTP polling loop. Resilience comes from three prioritised C2 tiers: runtime-updated URLs, an embedded encrypted server list, and a hardcoded fallback address. If an HTTP POST fails, the agent rotates to the next server address before retrying.
Wire format. Every message in both directions uses AES-256-GCM with a static key derived from a hardcoded seed stored obfuscated in the binary data section. The routine serialises JSON, generates 12 random bytes as nonce, encrypts, concatenates nonce + ciphertext + 16-byte authentication tag, Base64-encodes the result, and places it in a wrapper object under the e key alongside the plaintext agent ID (format ag_<16 hex chars>). Results go over the live WebSocket if present, otherwise by HTTP POST to /api/c2/result.
The report publishes the decoded seed and key. The decoded AES seed is d791dd0ff3228ed29a8d7333d4567be829159c5632ea347780992006f91c5295 and the resulting 32-byte AES key is 4887AFC0A574E9419A9695EF083460F58E4EF9A1C40793523CE112251273BDF9. These are in §5 because they let a defender decrypt captured NIK C2 traffic offline.
C2 endpoints.
| Endpoint | Purpose |
|---|---|
| /api/c2/update | Reconnaissance beacon, victim system info |
| /api/c2/result | Command output exfiltration |
| /api/c2/screen | Screenshot upload |
| /api/c2/file_chunk | File exfiltration |
| /api/c2/rproxy_up | Reverse proxy upstream data |
| /api/c2/ws | WebSocket, actor command channel |
AI module (ai_generate). The implant extracts three fields from the C2 command payload: prompt (the actor's text), api_key (optional), and model (optional). A zero-length prompt returns an error without any outbound call. If no key is supplied, the implant calls the OS environment variable reader for OPENAI_API_KEY and uses the victim's key. If no model is supplied it falls back to a five-character default in the binary data section, which decodes to gpt-4; the actor can pass any valid OpenAI model identifier, so newer models can be selected without a binary update. The request body is a four-field map: model, messages (a two-element array, system message first then user message), temperature (a float constant from the binary), and max_tokens (an integer constant from the binary). The system message content is a hardcoded 68-byte string that sets the model's operational role and response style for the session. The JSON is POSTed to https://api.openai.com/v1/chat/completions from the victim's IP address, synchronously, with a 60-second timeout. On HTTP 200 the handler decodes the response into a generic map without a typed schema, walks choices then message then content, and returns a result map with status set to generated, code holding the model's reply text, model holding the resolved model name, and usage holding the raw token counts (prompt, completion, total). The result is encrypted and sent to C2 over WebSocket or the HTTP fallback.
The billing and logging consequence is the point: the victim's payment method is charged, and OpenAI's access logs show the victim's key as the requester, leaving no trace attributable to the actor.
Collection. The theft commands run as goroutines and assemble a labelled report with sections such as === CRYPTO ===, === WIFI === and === BROWSER ===.
Wi-Fi harvesting runs netsh wlan show profiles and netsh wlan show profile name="" key=clear through Go's exec.Command with discrete argument tokens rather than a shell string. Results are labelled Key Content: for plaintext passwords and WiFi Profiles: for saved network names, with per-entry misses flagged as [%s] not found and failures returning [WiFi] no wireless adapter or access denied or No WiFi profiles found.
Browser theft stages the databases below plus the Local State file, which holds the AES master key protected by DPAPI. The implant imports and calls CryptUnprotectData to unwrap the key and decrypt locally; otherwise it exfiltrates the raw encrypted databases for offline extraction.
| Browser | Targeted files |
|---|---|
| Chrome | Login Data, Cookies, Web Data, Local State, Bookmarks |
| Edge | Login Data, Cookies, Web Data, Local State |
| Brave | Login Data, Cookies, leveldb file |
| Opera | Login Data from Opera Software\Opera Stable\ |
| Firefox | key4.db, logins.json, places.sqlite, formhistory.sqlite, Secure Preferences |
Discord tokens and session cookies are pulled from the levelDB store and the copied Cookies database, labelled === Discord Tokens === and DISCORD TOKENS, with cookies as Discord_Cookies. Desktop wallets are collected from their storage paths; browser extension wallets are extracted from chromium LevelDB by extension ID.
| Wallet | Extension ID |
|---|---|
| MetaMask (Chrome/Brave) | nkbihfbeogaeaoehlefnkodbefgpgknn |
| MetaMask (Edge) | nkbihfbeogaeaoehlefnkodbefgpgknn |
| Coinbase Wallet | hnbohgpbmfldddohgoiefkeifpjficbk |
| Phantom (Chrome) | lnbcamaoebkogjmdnaofbeemigaalhlp |
| Brave Wallet | odbfpeeihodbihlmhbnhakoadhilfibh |
Two case-insensitive regexes scan the entire filesystem for seed material and private keys, matched data is labelled seed candidates, and the archive is written as browserdata.zip:
(?i)(seed|phrase|mnemonic|recovery|backup|wallet).*(\.txt|\.md|\.csv|\.dat)
(?i)(private|privkey|secret).*(\.txt|\.md|\.key|\.pem)
Both are unanchored and greedy, so they capture any file where the sensitive term precedes the extension.
Reconnaissance runs with a chcp 65001 prefix to force UTF-8 output:
chcp 65001 >nul 2>&1 & systeminfo
chcp 65001 >nul 2>&1 & wmic os get lastbootuptime /value
chcp 65001 >nul 2>&1 & wmic /namespace:\\root\SecurityCenter2 path AntiVirusProduct get displayName 2>nul
chcp 65001 >nul 2>&1 & Get-Process | Select-Object Id, ProcessName | ConvertTo-Json -Compress
Surveillance. The keylogger polls all 256 Windows virtual key codes through dynamically resolved API calls. Each valid keypress is streamed live as an AES-256-GCM encrypted JSON payload over WebSocket and appended to an in-memory buffer capped at 10,000 entries, halved when full. An actor dump command concatenates the buffer and returns it over WebSocket or HTTP fallback. The command set also covers full-screen and continuous screen capture, camera snapshot and stream, microphone recording and live audio, clipboard interception and replacement, and HVNC for desktop control invisible to the victim.
Lateral movement. An embedded SOCKS5/HTTP proxy routes actor traffic through the victim into the internal network. A reverse proxy tunnel relays bidirectional TCP over the C2 WebSocket for LAN pivoting. RDP operations interact with sessions for movement to other Windows hosts.
Evasion. At launch the implant hides its console via ShowWindow, renames the binary to csrss.exe in the Windows temp directory, disables Windows Recent Documents telemetry by registry write, and sets the critical-process flag via NtSetInformationProcess with parameter 0x1D (ProcessBreakOnTermination), so terminating it through Task Manager or taskkill causes a blue screen. Two anti-debug checks, IsDebuggerPresent and CheckRemoteDebuggerPresent, call os.Exit(0) on detection, leaving no exception record or crash evidence. On C2 direction it escalates without a UAC prompt through the fodhelper.exe COM hijack: it writes the implant path into HKCU\Software\Classes\ms-settings\Shell\Open\command, triggers elevation, and cleans the key within two seconds. It bypasses AMSI by running an embedded PowerShell script that patches memory inside System.Management.Automation.dll, overwriting the AmsiInitFailed field with a six-byte stub (MOV EAX, E_INVALIDARG; RET) so initialisation reports failure and content inspection is disabled for the rest of the PowerShell session. The command set also lists process hollowing and a stealth mode.
Screen-locking extortion module. This is a multi-stage controller the actor runs in sequence. It uses PowerShell to read the first sector of \\.\PhysicalDrive0 (the MBR) and write it to mbr_backup.bin in the Windows temp directory. It builds a self-contained HTML lock screen at runtime from a hardcoded format string parameterised with actor-supplied Bitcoin and USDT wallet addresses, prices, contact email, timer duration and custom text from the C2 command, and writes it to lock_screen.html in the system temp directory. It generates lock_start.bat, which calls mshta.exe with the HTML path inside an infinite loop with a five-second timeout, so a closed window reopens within five seconds. It runs reg add to write a Run key named SystemLock under the current user's autostart path pointing to a cmd /c invocation of the batch file, so the lock screen runs at every logon, and spawns a goroutine that continuously monitors and relaunches the lock screen process. It then confirms to C2 with the deployed HTML path and timer value.
The module encrypts no files. It leaves no file-modification timestamps or encryption markers, deploys faster than file-encrypting ransomware, and survives both dismissal attempts and restart through the Run key and self-healing loop. The ransom demand is in Bitcoin or USDT. Talos does not describe data theft followed by extortion, so this is screen-lock extortion, not double extortion.
Bootkit preparation. The implant runs bcdedit /enum with the console window hidden and searches the output in sequence for EFI, Windows Boot Manager and Windows Legacy OS Loader; a match classifies the boot type as UEFI, and a fallback search for ntldr classifies BIOS. It runs PowerShell Confirm-SecureBootUEFI and searches for True or False, recording unknown if neither appears. It returns a map of boot type and Secure Boot status to C2. It then writes a 16-byte placeholder bootkit.bin to the system temp directory containing the ASCII string NIK_BOOTKIT_PREP. The placeholder is a staging marker: it confirms the target path is writable and establishes the location that a real bootkit delivered through the file-upload or file-write handlers can overwrite.
Build and versioning. Observed samples embed the build path /opt/nik_panel/data/build_52b79724a1fc4b8f/main.go, identifying the project as nik_panel and showing cross-compilation for Windows from Linux. An embedded eight-byte hex token matching the build identifier indicates the actor's infrastructure tracks and versions implants. All observed binaries were compiled with Go 1.23.4, released December 2024, so the sample set is no earlier than late 2024. PE TimeDateStamp fields are zeroed and filesystem timestamps are near-epoch (manifesting as 29 November 1979) across all samples. Talos tracks at least three versions.
Infrastructure. Talos observed the framework hosted at 87.120.196[.]120, resolving total-sitevv[.]lol, with a TLS certificate whose Common Name is nik-panel, matching strings embedded in the implant binary. The certificate serial number is 7d16381a9de823943b5a0987dbd0f26edf22052b and the JARM is 28d28d28d00000000042d42d0000001f361a1bf80ed39a1e352adeb016a07b.
Confidence and gaps. This section rests on a single source, the Talos report. The active-server observation and the moderate-confidence assessment that NIK C2 is functional rather than a proof of concept are Talos's, not corroborated here. No threat actor is named and no attribution is made; there is no MITRE ATT&CK profile for any actor in this item, so any actor attribution a client encounters elsewhere should be treated as unconfirmed. The initial access vector, the delivery mechanism, the identity of any victim and the volume of infections are not stated. The report gives no file hashes. The ClamAV signature Win.Trojan.GoDiscorder-10060526-0 is the only vendor detection named, and its GoDiscorder naming does not obviously match the nik_panel project name; treat the signature as the vendor's label and verify it detects the samples in your estate before relying on it.
4. Mitigation & containment
P1, within 24 hours.
- Hunt for the implant's persistence and staging artefacts across Windows endpoints: files under
%appdata%/Roaming/Microsoft/Network,csrss.exeorsimvol.exerunning from a temp directory,mbr_backup.bin,lock_screen.html,lock_start.batandbootkit.binin temp directories, and a Run key namedSystemLockunderHKCU\Software\Microsoft\Windows\CurrentVersion\Run. Any hit is a confirmed compromise, not a lead. - Search endpoint and proxy logs for POSTs to
/api/c2/update,/api/c2/result,/api/c2/screen,/api/c2/file_chunk,/api/c2/rproxy_upand/api/c2/ws. The 250-millisecond polling cadence to/api/c2/updateis a strong signal on its own. - Block the observed infrastructure at egress and DNS:
87.120.196[.]120andtotal-sitevv[.]lol. This is one server from a single source; it will not cover other deployments, so pair it with the behavioural detections in §6. - Inventory which endpoints hold an
OPENAI_API_KEYenvironment variable, and check OpenAI usage and billing records for requests the account owner did not make, particularly requests originating from corporate egress IPs at times that do not match the key owner's activity. The victim's key appears as the requester in OpenAI's logs, so this is the only place the abuse surfaces on the provider side. - If a host is confirmed infected, treat every credential and session on it as stolen: browser-stored passwords and cookies, Discord tokens, Wi-Fi PSKs, desktop and extension wallet seeds and keys, and anything typed during the keylogger session. Rotate them. Do not rely on terminating the implant process, because the
ProcessBreakOnTerminationflag will bugcheck the host; isolate at the network and hypervisor layer instead.
P2, within 72 hours.
- Restrict egress to
api.openai.comto approved hosts and approved service accounts, and alert on requests to/v1/chat/completionsfrom endpoints that are not sanctioned AI workstations. This directly removes the victim-funded inference path and gives you a detection surface. - Because the implant pins to a specific TLS certificate rather than the system CA store, TLS interception proxies will not see its traffic. Do not treat "no proxy hit" as absence; rely on endpoint telemetry and the HTTP fallback endpoint paths.
- Add EDR detections for the AMSI patch (memory writes to
System.Management.Automation.dlloverwritingAmsiInitFailed), thefodhelper.exeCOM hijack writing toHKCU\Software\Classes\ms-settings\Shell\Open\command,bcdedit /enumandConfirm-SecureBootUEFIinvoked by a non-administrative, non-management process, andmshta.exelaunched against an HTML file in a temp directory. - Deploy the vendor signature
Win.Trojan.GoDiscorder-10060526-0where ClamAV is in use, and confirm your primary AV/EDR has equivalent coverage; the report names no other detection.
P3, within 7 days.
- Review DORA Art. 28 third-party arrangements for AI providers: an OpenAI account funded by a corporate payment method is an ICT third-party dependency, and the abuse path here runs through it. Confirm you can obtain usage logs from the provider on request.
- Add the filesystem regex patterns in §3 to DLP or file-scanning policy so seed phrases and private keys in
.txt,.md,.csv,.dat,.keyand.pemfiles on user endpoints are flagged before an implant finds them. - Test the screen-lock scenario in tabletop form: the module leaves no encryption markers, so standard ransomware playbooks keyed on file entropy and extension changes will not fire. Detection has to come from the
SystemLockRun key,mshta.exebehaviour and the MBR backup file.
5. Indicators of compromise
| Type | Value | Confidence | Source |
|---|---|---|---|
| ipv4 | 87.120.196[.]120 | moderate (single source, observed in the wild) | Talos |
| domain | total-sitevv[.]lol | moderate (single source, observed in the wild) | Talos |
| ja3s / jarm | 28d28d28d00000000042d42d0000001f361a1bf80ed39a1e352adeb016a07b | moderate (single source) | Talos |
| x509 serial | 7d16381a9de823943b5a0987dbd0f26edf22052b | moderate (single source) | Talos |
| x509 CN | nik-panel | moderate (single source) | Talos |
| aes key | 4887AFC0A574E9419A9695EF083460F58E4EF9A1C40793523CE112251273BDF9 | high (published by source for traffic decryption) | Talos |
| aes seed | d791dd0ff3228ed29a8d7333d4567be829159c5632ea347780992006f91c5295 | high (published by source for traffic decryption) | Talos |
| file path | %appdata%/Roaming/Microsoft/Network | moderate (single source) | Talos |
| file path | /opt/nik_panel/data/build_52b79724a1fc4b8f/main.go | moderate (single source, embedded build path) | Talos |
| file name | mbr_backup.bin | moderate (single source) | Talos |
| file name | lock_screen.html | moderate (single source) | Talos |
| file name | lock_start.bat | moderate (single source) | Talos |
| file name | bootkit.bin | moderate (single source) | Talos |
| file name | browserdata.zip | moderate (single source) | Talos |
| registry key | HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemLock | moderate (single source) | Talos |
| registry key | HKCU\Software\Classes\ms-settings\Shell\Open\command | moderate (single source) | Talos |
| url path | /api/c2/update | moderate (single source) | Talos |
| url path | /api/c2/result | moderate (single source) | Talos |
| url path | /api/c2/screen | moderate (single source) | Talos |
| url path | /api/c2/file_chunk | moderate (single source) | Talos |
| url path | /api/c2/rproxy_up | moderate (single source) | Talos |
| url path | /api/c2/ws | moderate (single source) | Talos |
No file hashes are published in the source. The report references a Talos GitHub repository for IOCs but does not list hashes inline; retrieve them from that repository rather than treating the table above as complete.
ipv4 87.120.196[.]120
domain total-sitevv[.]lol
jarm 28d28d28d00000000042d42d0000001f361a1bf80ed39a1e352adeb016a07b
x509_serial 7d16381a9de823943b5a0987dbd0f26edf22052b
x509_cn nik-panel
aes_key 4887AFC0A574E9419A9695EF083460F58E4EF9A1C40793523CE112251273BDF9
aes_seed d791dd0ff3228ed29a8d7333d4567be829159c5632ea347780992006f91c5295
file_path %appdata%/Roaming/Microsoft/Network
file_path /opt/nik_panel/data/build_52b79724a1fc4b8f/main.go
file_name mbr_backup.bin
file_name lock_screen.html
file_name lock_start.bat
file_name bootkit.bin
file_name browserdata.zip
registry_key HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemLock
registry_key HKCU\Software\Classes\ms-settings\Shell\Open\command
url_path /api/c2/update
url_path /api/c2/result
url_path /api/c2/screen
url_path /api/c2/file_chunk
url_path /api/c2/rproxy_up
url_path /api/c2/ws
Behavioural indicators
| Behaviour | Where to observe | Confidence |
|---|---|---|
HTTP POST to /api/c2/update roughly every 250 ms from a single host |
Web proxy, firewall, Zeek HTTP logs | moderate (single source) |
| TLS session pinned to a specific certificate, not the system CA store, so interception proxies see no plaintext | Endpoint TLS telemetry, EDR network events | moderate (single source) |
Process named csrss.exe or simvol.exe running from a temp directory |
EDR process telemetry, file path | moderate (single source) |
Termination of the implant process triggers a blue screen (ProcessBreakOnTermination set via NtSetInformationProcess 0x1D) |
Endpoint crash telemetry | moderate (single source) |
netsh wlan show profile name="" key=clear executed by a non-administrative or unexpected parent process |
EDR command-line telemetry | moderate (single source) |
bcdedit /enum and PowerShell Confirm-SecureBootUEFI run by a non-management process |
EDR command-line telemetry | moderate (single source) |
mshta.exe launched against an HTML file in a temp directory in a repeating loop |
EDR process telemetry | moderate (single source) |
Outbound POST to api.openai.com/v1/chat/completions from an endpoint that is not a sanctioned AI workstation |
Web proxy, firewall | moderate (single source) |
Memory write to System.Management.Automation.dll overwriting AmsiInitFailed |
EDR memory or AMSI telemetry | moderate (single source) |
Registry write to HKCU\Software\Classes\ms-settings\Shell\Open\command followed by fodhelper.exe elevation and key deletion within about two seconds |
EDR registry and process telemetry | moderate (single source) |
6. Detection
The YARA rule below keys on strings the implant carries in its binary: the startup log line, the build path, the bootkit staging marker, the C2 endpoint paths, the masquerade names and the default model string. It will not match samples where the actor has changed these, and it is written against a single source's description rather than a sample set, so validate it against known-good Go binaries before production use.
rule NIK_C2_Go_Implant_Strings
{
meta:
author = "Adverse Trace"
date = "2026-10-29"
reference = "https://blog.talosintelligence.com/nik-c2-new-ai-enabled-framework/"
description = "String-based detection for the NIK C2 Go implant (nik_panel), covering startup log, build path, bootkit staging marker and C2 endpoint paths"
confidence = "moderate, single source, validate before enforcement"
strings:
$startup = "[NIK] Starting" ascii wide
$buildpath = "/opt/nik_panel/data/build_" ascii
$bootmark = "NIK_BOOTKIT_PREP" ascii
$ep_update = "/api/c2/update" ascii
$ep_result = "/api/c2/result" ascii
$ep_screen = "/api/c2/screen" ascii
$ep_chunk = "/api/c2/file_chunk" ascii
$ep_rproxy = "/api/c2/rproxy_up" ascii
$ep_ws = "/api/c2/ws" ascii
$masq1 = "simvol.exe" ascii wide
$masq2 = "nik-panel" ascii wide
$defmodel = "gpt-4" ascii
$openai = "OPENAI_API_KEY" ascii
$oaiurl = "https://api.openai.com/v1/chat/completions" ascii
$lockkey = "SystemLock" ascii wide
$mbrbackup = "mbr_backup.bin" ascii wide
$lockscr = "lock_screen.html" ascii wide
$lockbat = "lock_start.bat" ascii wide
$bootfile = "bootkit.bin" ascii wide
$browzip = "browserdata.zip" ascii wide
condition:
uint16(0) == 0x5A4D and filesize < 30MB and
(
$startup or
$buildpath or
$bootmark or
(2 of ($ep_*)) or
($masq1 and $masq2) or
($oaiurl and $openai) or
(2 of ($lockkey, $mbrbackup, $lockscr, $lockbat, $bootfile, $browzip))
)
}
The Sigma rule targets the process and registry behaviour a defender can see without the binary. It assumes Sysmon with command-line and registry event logging.
title: NIK C2 Implant Behavioural Indicators
id: 8f3c2a71-4b6d-4e2a-9c1f-7d5e0a3b6c92
status: experimental
description: Detects process, registry and network behaviour attributed to the NIK C2 Go implant, including boot survey, Wi-Fi credential harvesting, screen-lock deployment and OpenAI API abuse from non-sanctioned hosts
author: Adverse Trace
date: 2026/10/29
references:
- https://blog.talosintelligence.com/nik-c2-new-ai-enabled-framework/
logsource:
product: windows
category: process_creation
detection:
selection_bootsurvey:
CommandLine|contains:
- 'bcdedit /enum'
- 'Confirm-SecureBootUEFI'
selection_wifi:
CommandLine|contains|all:
- 'netsh wlan show profile'
- 'key=clear'
selection_lockscreen:
Image|endswith: '\mshta.exe'
CommandLine|contains: 'lock_screen.html'
selection_lockbat:
CommandLine|contains|all:
- 'lock_start.bat'
- 'cmd /c'
selection_fodhelper:
Image|endswith: '\fodhelper.exe'
selection_masquerade:
Image|endswith:
- '\csrss.exe'
- '\simvol.exe'
Image|startswith:
- 'C:\Users\'
- 'C:\Windows\Temp\'
condition: 1 of selection_*
falsepositives:
- Legitimate boot configuration management tools invoking bcdedit or Confirm-SecureBootUEFI
- Administrative Wi-Fi profile audits using netsh with key=clear
- Software installers using mshta.exe
level: high
---
title: NIK C2 Screen Lock Run Key Persistence
id: 2b7e9d14-6c3a-4f81-a5d2-0e8c4b1f7a63
status: experimental
description: Detects creation of the SystemLock Run key used by the NIK C2 screen-locking extortion module
author: Adverse Trace
date: 2026/10/29
references:
- https://blog.talosintelligence.com/nik-c2-new-ai-enabled-framework/
logsource:
product: windows
category: registry_set
detection:
selection:
TargetObject|endswith: '\CurrentVersion\Run\SystemLock'
condition: selection
falsepositives:
- Unlikely
level: critical
---
title: NIK C2 Fodhelper UAC Bypass Registry Write
id: 5a1d8c36-9e4b-4a27-b3f0-6d2c8e5a1b47
status: experimental
description: Detects the fodhelper COM hijack registry path used by the NIK C2 implant for UAC bypass
author: Adverse Trace
date: 2026/10/29
references:
- https://blog.talosintelligence.com/nik-c2-new-ai-enabled-framework/
logsource:
product: windows
category: registry_set
detection:
selection:
TargetObject|endswith: '\Software\Classes\ms-settings\Shell\Open\command'
condition: selection
falsepositives:
- Legitimate ms-settings protocol handlers
level: high
7. Sources
- Cisco Talos, "NIK C2: The new AI-enabled command-and-control framework", https://blog.talosintelligence.com/nik-c2-new-ai-enabled-framework/, 2026-10-29. Single source for all technical detail, infrastructure and the ClamAV signature in this advisory.
8. Adverse Trace position
No CVE, CVSS score, EPSS estimate or CISA KEV entry applies to this item; it is a malware capability assessment, and we have not assigned a severity score the data does not support. Our assessment is that NIK C2 is a functional, actively developed Windows RAT with an unusually broad command set and one feature that changes defender economics: the victim-funded OpenAI channel means AI-assisted post-exploitation leaves no attacker-attributable trace in provider logs and blends into egress that many financial services firms already permit for developer and data-science teams. The exposure is highest where OpenAI API keys sit in endpoint environment variables and egress to api.openai.com is unrestricted. Everything in §3 rests on a single Talos report; the active-server observation and the moderate-confidence "functional, not proof of concept" judgement are Talos's, and we have not independently corroborated them. No actor is named and no attribution is made; any actor attribution a client sees elsewhere should be treated as unconfirmed. We will monitor for additional reporting, for the IOC set in the Talos GitHub repository, and for any named actor or MITRE ATT&CK profile that would let us raise confidence, and we will issue an update if the initial access vector or victim profile becomes known. Clients with developer or AI workstations holding OpenAI keys should treat the P1 hunts in §4 as the priority this week.
Published via PulseTrace — Adverse Trace threat intelligence.