← All hunts high TLP:CLEAR Part 2 of 2

Interlock RAT C2 and RDP Lateral Movement

An intruder has established a PHP-based RAT beachhead and is using Cloudflare Tunnels for C2 before moving laterally via RDP.

Based on research by The DFIR Report 2026-09-20 10 steps · 4 queries T1021.001 T1071.001 T1572

Brief

Why Now

The DFIR Report recently detailed a campaign where attackers deploy a modular PHP payload and maintain access through encrypted tunnels. You can read their full analysis in KongTuke FileFix Leads to New Interlock RAT Variant. This hunt identifies the specific indicators of this Interlock RAT variant.

How the Hunt Flows

The hunt starts by examining DNS activity. The first query searches for any resolution of specific trycloudflare.com subdomains identified in the campaign. These resolutions serve as the primary indicator of a potential beachhead system communicating with attacker infrastructure.

When the hunt identifies a lead, it triggers a parallel investigation across three surfaces. It searches for network connections to hardcoded fallback IP addresses, looks for the php.exe process executing with specific configuration flags from user roaming profiles, and identifies rare RDP logon events. This phase gathers the behavioral evidence needed to confirm the RAT's presence and activity.

An automated agent then correlates these results. It compares the hosts resolving C2 domains with the hosts showing suspicious PHP execution or initiating outbound RDP sessions. This correlation joins network-level leads with host-level behavior to provide a high-confidence verdict.

Confirmed infections route to an isolation step to prevent further spread. The hunt concludes with a manual task for an analyst to review the intrusion timeline and identify any accounts the intruder compromised during their lateral movement.

What This Hunt Cannot See

This hunt faces visibility gaps regarding local authentication. If an intruder moves between systems using local accounts or sessions not captured by centralized authentication providers, the RDP queries will not show that movement.

Legitimate administrative use of Cloudflare Tunnels also creates potential noise. While the hunt targets specific subdomains, the behavior of the tunnel itself can look similar to authorized activity. The hunt relies on the presence of the PHP behavioral artifacts to differentiate the RAT from legitimate tools.

In this series

Steps

  1. DNS leads to Cloudflare Tunnels

    Query · triage

    Identify potential beachheads by resolution of known C2 domains.

    reads hb_dns_activitysql
    SELECT device_hostname, query_hostname, COUNT(*) AS resolution_count, MIN(time) AS first_seen FROM hb_dns_activity WHERE instr(',' || '{{c2_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, query_hostname

    What a hit looks like. Hosts resolving attacker subdomains indicate a likely beachhead. Silence proves no resolution attempts to these specific subdomains occurred.

  2. Connections to fallback C2 IPs

    Query · triage

    Check for direct IP connections to hardcoded fallback C2 infrastructure.

    reads hb_network_connectionsql
    SELECT device_hostname, dst_endpoint_ip, dst_endpoint_port, time FROM hb_network_connection WHERE instr(',' || '{{fallback_ips}}' || ',', ',' || dst_endpoint_ip || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Network connections to hardcoded IPs correlate with the report's fallback mechanism.

  3. PHP execution with config files

    Query · detection candidate

    Find behavioral signs of the PHP Interlock variant executing from roaming profiles.

    reads hb_process_activitysql
    SELECT device_hostname, process_name, process_cmd_line, user_name, time FROM hb_process_activity WHERE (LOWER(process_path) LIKE '%\appdata\roaming\php\php.exe' OR LOWER(process_name) = 'php.exe') AND (LOWER(process_cmd_line) LIKE '%.cfg%' OR LOWER(process_cmd_line) LIKE '%extension=zip%') AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. PHP executing with .cfg files from a user profile is highly suspicious in this context.

  4. Anomalous RDP logon prevalence

    Query · baseline

    Identify rare RDP logons; the agent will filter these for movement originating from beachheads.

    reads hb_auth_signinsql
    SELECT dst_endpoint_name, actor_user_name, src_endpoint_ip, MIN(time) AS first_seen, COUNT(*) AS logon_count FROM hb_auth_signin WHERE (LOWER(auth_protocol) = 'rdp' OR activity_id = 1) AND status_id = 1 AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY dst_endpoint_name, actor_user_name, src_endpoint_ip HAVING logon_count < 5

    What a hit looks like. Rare RDP logons reveal lateral movement. The agent will compare these source IPs to the identified C2 beachheads.

  5. Correlate C2 and movement

    Agent triage

    The agent evaluates all results to confirm the intrusion chain from beaconing to movement.

  6. Route on infection verdict

    Decision

    Direct confirmed infections to isolation and ambiguous cases to analyst review.

  7. Isolate host

    Response action

    Stop further spread by isolating the identified beachhead.

  8. Manual investigation

    Analyst task

    Review the intrusion chain and confirm all impacted accounts.

  9. Close out

    Analyst task

    Finalize the hunt and record findings.

Coverage

Scenario coverage

StageCoveredHow, or why not
Cloudflare Tunnel C2
T1071.001 · T1572
Yes dns-c2-leads, fallback-network-connections
Lateral Movement via RDP
T1021.001
Yes anomalous-rdp-logons
Social Engineering via Web-Inject
T1189 · T1204.002
Out of scope Belongs to another part of the 'KongTuke FileFix Leads to New Interlock RAT Variant' series.
PowerShell Stager Execution
T1059.001 · T1105
Out of scope Belongs to another part of the 'KongTuke FileFix Leads to New Interlock RAT Variant' series.
Interlock RAT (PHP) Deployment
T1059
Out of scope Belongs to another part of the 'KongTuke FileFix Leads to New Interlock RAT Variant' series.
Automated and Manual Discovery
T1082 · T1057 · T1018 · T1087 · T1069 · T1016
Out of scope Belongs to another part of the 'KongTuke FileFix Leads to New Interlock RAT Variant' series.
Registry Run Key Persistence
T1547.001
Out of scope Belongs to another part of the 'KongTuke FileFix Leads to New Interlock RAT Variant' series.

Blind spots

  • Needs hb_auth_signin with logon type and local session tracking. Lateral movement between servers using local accounts would not appear in centralized authentication logs. It would answer Did the attacker move between systems using local accounts or sessions not captured by the central provider?.
  • Needs Proxy logs with SNI and HTTP header inspection. Legitimate use of Cloudflare Tunnels can create false positives, requiring correlation with PHP behavioral artifacts to confirm the RAT. It would answer Is the Cloudflare Tunnel traffic malicious or legitimate administrative usage?.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
c2_domainslist[domain]existed-bunch-balance-councils.trycloudflare.com, ferrari-rolling-facilities-lounge.trycloudflare.com, galleries-physicians-psp-wv.trycloudflare.com, evidence-deleted-procedure-bringing.trycloudflare.com, nowhere-locked-manor-hs.trycloudflare.com, ranked-accordingly-ab-hired.trycloudflare.comKnown TryCloudflare subdomains used by Interlock RAT.
fallback_ipslist[ip]64.95.12.71, 184.95.51.165Hardcoded fallback IP addresses for Interlock RAT C2.
lookback_daysnumber14Days of history to examine.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Identity / sign-in telemetryidentityidentity
Network telemetrynetworknetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: Simple rules for Cloudflare traffic are often suppressed. This hunt correlates
  DNS leads with fallback IP connections and a specific PHP execution pattern across
  three telemetry surfaces, providing the context an analyst needs to differentiate
  a RAT from legitimate tunneling.
blind_spots:
- id: limited-rdp-visibility
  question: Did the attacker move between systems using local accounts or sessions
    not captured by the central provider?
  requires: hb_auth_signin with logon type and local session tracking
  risk: Lateral movement between servers using local accounts would not appear in
    centralized authentication logs.
  stage: lateral-movement-rdp
- id: cloudflare-legitimate-usage
  question: Is the Cloudflare Tunnel traffic malicious or legitimate administrative
    usage?
  requires: Proxy logs with SNI and HTTP header inspection
  risk: Legitimate use of Cloudflare Tunnels can create false positives, requiring
    correlation with PHP behavioral artifacts to confirm the RAT.
  stage: c2-cloudflare-tunneling
coverage:
- stage: c2-cloudflare-tunneling
  status: covered
  steps:
  - dns-c2-leads
  - fallback-network-connections
- stage: lateral-movement-rdp
  status: covered
  steps:
  - anomalous-rdp-logons
- reason: Belongs to another part of the 'KongTuke FileFix Leads to New Interlock
    RAT Variant' series.
  stage: initial-access-web-inject
  status: out_of_scope
- reason: Belongs to another part of the 'KongTuke FileFix Leads to New Interlock
    RAT Variant' series.
  stage: powershell-stager-execution
  status: out_of_scope
- reason: Belongs to another part of the 'KongTuke FileFix Leads to New Interlock
    RAT Variant' series.
  stage: php-rat-deployment
  status: out_of_scope
- reason: Belongs to another part of the 'KongTuke FileFix Leads to New Interlock
    RAT Variant' series.
  stage: automated-and-manual-discovery
  status: out_of_scope
- reason: Belongs to another part of the 'KongTuke FileFix Leads to New Interlock
    RAT Variant' series.
  stage: persistence-registry-run
  status: out_of_scope
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: Interlock RAT is a precursor to ransomware. Detecting its C2 and
    movement early prevents wide-scale encryption and data theft.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An intruder has established a PHP-based RAT beachhead and is using Cloudflare
  Tunnels for C2 before moving laterally via RDP.
labels:
- hunt
- attack.t1071.001
- attack.t1572
- attack.t1021.001
name: Interlock RAT C2 and RDP Lateral Movement
parameters:
  c2_domains:
    default:
    - existed-bunch-balance-councils.trycloudflare.com
    - ferrari-rolling-facilities-lounge.trycloudflare.com
    - galleries-physicians-psp-wv.trycloudflare.com
    - evidence-deleted-procedure-bringing.trycloudflare.com
    - nowhere-locked-manor-hs.trycloudflare.com
    - ranked-accordingly-ab-hired.trycloudflare.com
    description: Known TryCloudflare subdomains used by Interlock RAT.
    from:
      kind: article
      observed: '2025-07-14'
      ref: dfir-report-2025-07-14
    type: list[domain]
  fallback_ips:
    default:
    - 64.95.12.71
    - 184.95.51.165
    description: Hardcoded fallback IP addresses for Interlock RAT C2.
    from:
      kind: article
      observed: '2025-07-14'
      ref: dfir-report-2025-07-14
    type: list[ip]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    type: number
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://thedfirreport.com/2025/07/14/kongtuke-filefix-leads-to-new-interlock-rat-variant/
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Start with hosts resolving trycloudflare subdomains. The hunt dynamically
  pivots by having the agent correlate these hosts with network and process telemetry.
references:
- name: The DFIR Report - KongTuke FileFix Leads to New Interlock RAT Variant
  url: https://thedfirreport.com/2025/07/14/kongtuke-filefix-leads-to-new-interlock-rat-variant/
related:
- hunt: interlock-rat-persistence-and-discovery
  reason: Persistence via Run keys and automated discovery are handled in a separate
    hunt focused on local endpoint artifacts.
  relation: out-of-scope-alternative
- hunt: interlock-rat-endpoint-execution-recon
  relation: follows
scenario:
  stages:
  - name: Social Engineering via Web-Inject
    observables:
    - captcha verification prompt
    - human verification steps
    - clipboard paste into run command
    slug: initial-access-web-inject
    tactic: initial-access
    techniques:
    - T1189
    - T1204.002
  - name: PowerShell Stager Execution
    observables:
    - schtasks /delete /tn Updater /f
    - New-Object System.Net.WebClient
    - DownloadString
    - deadly-programming-attorneys-our.trycloudflare.com
    - 'User-Agent: PowerShell'
    slug: powershell-stager-execution
    tactic: execution
    techniques:
    - T1059.001
    - T1105
  - name: Interlock RAT (PHP) Deployment
    observables:
    - AppData\Roaming\php\php.exe
    - wefs.cfg
    - php.exe -d extension=zip -d extension_dir=ext
    - 28a9982cf2b4fc53a1545b6ed0d0c1788ca9369a847750f5652ffa0ca7f7b7d3
    - 8afd6c0636c5d70ac0622396268786190a428635e9cf28ab23add939377727b0
    slug: php-rat-deployment
    tactic: execution
    techniques:
    - T1059
  - name: Automated and Manual Discovery
    observables:
    - Get-NetNeighbor -AddressFamily IPv4
    - systeminfo /FO CSV
    - tasklist /svc
    - Get-Service
    - Get-PSDrive
    - '[Security.Principal.WindowsIdentity]::GetCurrent()'
    - '[adsiSearcher]"(ObjectClass=computer)"'
    - 'nltest /dclist:'
    - net user %USERNAME% /domain
    slug: automated-and-manual-discovery
    tactic: discovery
    techniques:
    - T1082
    - T1057
    - T1018
    - T1087
    - T1069
    - T1016
  - name: Registry Run Key Persistence
    observables:
    - HKCU\Software\Microsoft\Windows\CurrentVersion\Run
    - php.exe AppData\Roaming\php\wefs.cfg
    slug: persistence-registry-run
    tactic: persistence
    techniques:
    - T1547.001
  - name: Cloudflare Tunnel C2
    observables:
    - existed-bunch-balance-councils.trycloudflare.com
    - ferrari-rolling-facilities-lounge.trycloudflare.com
    - galleries-physicians-psp-wv.trycloudflare.com
    - evidence-deleted-procedure-bringing.trycloudflare.com
    - nowhere-locked-manor-hs.trycloudflare.com
    - ranked-accordingly-ab-hired.trycloudflare.com
    - 64.95.12.71
    - 184.95.51.165
    slug: c2-cloudflare-tunneling
    tactic: command-and-control
    techniques:
    - T1071.001
    - T1572
  - name: Lateral Movement via RDP
    observables:
    - Remote Desktop Protocol usage
    slug: lateral-movement-rdp
    tactic: lateral-movement
    techniques:
    - T1021.001
  summary: The Interlock ransomware group utilizes KongTuke web-injects to deliver
    a PHP-based RAT through a multi-stage PowerShell stager executed via social engineering.
    The malware conducts extensive automated and manual reconnaissance of system profiles
    and Active Directory, maintains persistence through registry Run keys, and leverages
    Cloudflare Tunnels for resilient C2 before facilitating lateral movement via RDP.
series:
  index: 2
  slug: kongtuke-filefix-leads-to-new-interlock-rat-variant
  title: KongTuke FileFix Leads to New Interlock RAT Variant
  total: 2
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
  identity:
    category: identity
    name: Identity / sign-in telemetry
    telemetry:
    - identity
  network:
    category: network
    name: Network telemetry
    telemetry:
    - network
tlp: clear
type: investigation
---


# Interlock RAT C2 and RDP Lateral Movement

This hunt identifies the post-exploitation phases of the Interlock RAT campaign, specifically targeting command-and-control communication through Cloudflare Tunnel subdomains and hardcoded fallback IP addresses. It correlates these network indicators with behavioral evidence of PHP execution from user-writable paths and subsequent RDP lateral movement originating from the beachhead hosts. The hunt provides a holistic view of the intrusion lifecycle from the first beacon to internal spread.

## dns-c2-leads
<!-- DNS leads to Cloudflare Tunnels -->
Identify potential beachheads by resolution of known C2 domains.

```sqlite target=endpoint role=triage params=(c2_domains=c2_domains, lookback_days=lookback_days)
~~~yaml
expected: Hosts resolving attacker subdomains indicate a likely beachhead. Silence
  proves no resolution attempts to these specific subdomains occurred.
reads:
- device_hostname
- query_hostname
- time
silence: not_evidence_of_absence
source: hb_dns_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, query_hostname, COUNT(*) AS resolution_count, MIN(time) AS first_seen FROM hb_dns_activity WHERE instr(',' || '{{c2_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, query_hostname
```

## investigate-activity
<!-- Gather multi-surface evidence -->
parallel:
- → fallback-network-connections
- → php-execution-indicators
- → anomalous-rdp-logons
join: → agent-triage

## fallback-network-connections
<!-- Connections to fallback C2 IPs -->
Check for direct IP connections to hardcoded fallback C2 infrastructure.

```sqlite target=network role=triage params=(fallback_ips=fallback_ips, lookback_days=lookback_days)
~~~yaml
expected: Network connections to hardcoded IPs correlate with the report's fallback
  mechanism.
reads:
- device_hostname
- dst_endpoint_ip
- dst_endpoint_port
- time
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, dst_endpoint_ip, dst_endpoint_port, time FROM hb_network_connection WHERE instr(',' || '{{fallback_ips}}' || ',', ',' || dst_endpoint_ip || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days')
```

## php-execution-indicators
<!-- PHP execution with config files -->
Find behavioral signs of the PHP Interlock variant executing from roaming profiles.

```sqlite target=endpoint role=detection-candidate params=(lookback_days=lookback_days)
~~~yaml
expected: PHP executing with .cfg files from a user profile is highly suspicious in
  this context.
reads:
- device_hostname
- process_cmd_line
- process_name
- process_path
- time
- user_name
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_name, process_cmd_line, user_name, time FROM hb_process_activity WHERE (LOWER(process_path) LIKE '%\appdata\roaming\php\php.exe' OR LOWER(process_name) = 'php.exe') AND (LOWER(process_cmd_line) LIKE '%.cfg%' OR LOWER(process_cmd_line) LIKE '%extension=zip%') AND time >= datetime('now', '-{{lookback_days}} days')
```

## anomalous-rdp-logons
<!-- Anomalous RDP logon prevalence -->
Identify rare RDP logons; the agent will filter these for movement originating from beachheads.

```sqlite target=identity role=baseline params=(lookback_days=lookback_days)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Rare RDP logons reveal lateral movement. The agent will compare these source
  IPs to the identified C2 beachheads.
prevalence:
  by: dst_endpoint_name
  key:
  - actor_user_name
  - src_endpoint_ip
  rare_below: 5
reads:
- activity_id
- actor_user_name
- auth_protocol
- dst_endpoint_name
- src_endpoint_ip
- status_id
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT dst_endpoint_name, actor_user_name, src_endpoint_ip, MIN(time) AS first_seen, COUNT(*) AS logon_count FROM hb_auth_signin WHERE (LOWER(auth_protocol) = 'rdp' OR activity_id = 1) AND status_id = 1 AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY dst_endpoint_name, actor_user_name, src_endpoint_ip HAVING logon_count < 5
```

## agent-triage
<!-- Correlate C2 and movement -->
```agent target=hunter
cite: required
context:
- dns-c2-leads
- fallback-network-connections
- php-execution-indicators
- anomalous-rdp-logons
max_iterations: 4
objective: Determine if any host exhibits Cloudflare C2 traffic or fallback IP connections,
  and whether those hosts coincide with the Interlock RAT PHP execution pattern or
  initiate RDP lateral movement.
success_criteria: A per-host verdict of malicious | suspicious | benign citing specific
  rows from all four queries.
tools:
- endpoint
- identity
- network
```

## route-infection
<!-- Route on infection verdict -->
if~: "The triage verdict is malicious for at least one host, indicating confirmed C2 traffic and suspicious lateral movement." (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → manual-investigation
unavailable: → manual-investigation (blind_spot: limited-rdp-visibility)
else: → close-out

## isolate-host
<!-- Isolate host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the identified host using the endpoint agent and revoke active user sessions.
```
→ manual-investigation

## manual-investigation
<!-- Manual investigation -->
```manual target=analyst
Review the process logs on isolated hosts for evidence of NodeSnake (Node.js variant) deployment. Map all accounts used for RDP from the beachheads.
```
→ close-out

## close-out
<!-- Close out -->
```manual target=analyst
Document impacted systems and recommend blocks for the identified subdomains. Promote the PHP behavioral query to a standing rule.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.