T1597

Search Closed Sources

Reconnaissance Last updated:

This detection identifies potential adversary reconnaissance activity involving closed or paid data sources, including commercial threat intelligence vendors, dark web markets, and business intelligence databases. Since T1597 activity primarily occurs outside victim networks, direct detection is limited to second-order indicators: corporate endpoints accessing known data broker or OSINT aggregator platforms (potential insider threat or attacker using compromised access), network egress to dark web proxy services, and external threat intelligence alerting on organizational data appearing in closed criminal marketplaces. Detection confidence is low due to the pre-network nature of this technique, but behavioral patterns such as bulk querying of business intelligence APIs (RocketReach, ZoomInfo, CrunchBase) from non-business-role accounts, or Tor/I2P connectivity from corporate assets, can indicate reconnaissance or insider data harvesting activity.

What is T1597 Search Closed Sources?

Search Closed Sources (T1597) maps to the Reconnaissance tactic — the adversary is trying to gather information they can use to plan future operations in MITRE ATT&CK.

This page provides production-ready detection logic for Search Closed Sources, covering the data sources and telemetry it touches: Microsoft Defender for Endpoint. The queries below are rated medium severity at low confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Reconnaissance
Technique
T1597 Search Closed Sources
Canonical reference
https://attack.mitre.org/techniques/T1597/
Microsoft Sentinel / Defender
kusto
let DataBrokerDomains = dynamic([
    "rocketreach.co", "zoominfo.com", "crunchbase.com", "hoovers.com",
    "dun.com", "dnb.com", "spokeo.com", "intelius.com", "pipl.com",
    "beenverified.com", "whitepages.com", "clearbit.com", "hunter.io",
    "fullcontact.com", "datanyze.com", "apollo.io", "lusha.com",
    "seamless.ai", "slintel.com", "demandbase.com"
]);
let TorRelayIndicators = dynamic([
    "torproject.org", "tor2web.org", "onion.to", "onion.link",
    "darkfail.net", "dark.fail"
]);
let ObservedWindow = 24h;
DeviceNetworkEvents
| where Timestamp > ago(ObservedWindow)
| where ActionType in ("ConnectionSuccess", "InboundConnectionAccepted", "HttpConnectionInspected")
| where RemoteUrl has_any (DataBrokerDomains) or RemoteUrl has_any (TorRelayIndicators)
| extend DomainCategory = case(
    RemoteUrl has_any (TorRelayIndicators), "TorOrDarkWebProxy",
    RemoteUrl has_any (DataBrokerDomains), "CommercialDataBroker",
    "Unknown"
  )
| join kind=leftouter (
    DeviceLogonEvents
    | where Timestamp > ago(ObservedWindow)
    | where LogonType in ("Interactive", "RemoteInteractive")
    | summarize LastLogon=max(Timestamp), LogonCount=count() by DeviceName, AccountName
  ) on DeviceName
| project
    Timestamp,
    DeviceName,
    InitiatingProcessAccountName,
    InitiatingProcessFileName,
    InitiatingProcessCommandLine,
    RemoteUrl,
    RemoteIP,
    RemotePort,
    DomainCategory,
    LocalIPType,
    LocalPort
| summarize
    QueryCount=count(),
    FirstSeen=min(Timestamp),
    LastSeen=max(Timestamp),
    UniqueURLs=dcount(RemoteUrl),
    URLList=make_set(RemoteUrl, 20),
    ProcessList=make_set(InitiatingProcessFileName, 10)
    by DeviceName, InitiatingProcessAccountName, DomainCategory
| where QueryCount > 3 or DomainCategory == "TorOrDarkWebProxy"
| extend RiskScore = case(
    DomainCategory == "TorOrDarkWebProxy", 90,
    QueryCount > 50, 75,
    QueryCount > 20, 60,
    QueryCount > 5, 40,
    25
  )
| sort by RiskScore desc

Detects corporate endpoints making network connections to known commercial data broker platforms (RocketReach, ZoomInfo, CrunchBase, Apollo.io, etc.) and Tor/dark web proxy services. High-volume querying of data broker APIs from non-standard processes, or any Tor proxy connectivity, may indicate insider threat activity or a compromised endpoint being used to conduct reconnaissance against the organization or third parties. Aggregates connection counts per device/account to surface bulk querying patterns.

medium severity low confidence

Data Sources

Microsoft Defender for Endpoint

Required Tables

DeviceNetworkEvents DeviceLogonEvents

False Positives

  • Sales and marketing teams legitimately using ZoomInfo, Apollo.io, or CrunchBase for lead generation and prospecting
  • HR and recruiting professionals using Clearbit, RocketReach, or Lusha to source candidates
  • Security researchers or threat intelligence analysts accessing dark web proxy services as part of authorized threat hunting
  • Automated CI/CD pipelines or marketing automation tools that enrich contact data via data broker APIs
  • Executives or business development staff conducting due diligence research on acquisition targets via Dun & Bradstreet or Hoovers

Sigma rule & cross-platform mapping

The detection logic for Search Closed Sources (T1597) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: network_connection
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Bulk Data Broker API Querying via Python Script

    Expected signal: Sysmon Event ID 22 (DNS Query) entries for api.hunter.io and hunter.io; DeviceNetworkEvents entries showing python.exe initiating connections to hunter.io; DeviceProcessEvents showing python3 execution with inline script containing data broker domain references

  2. Test 2Tor Browser DNS Resolution and Connection Attempt

    Expected signal: Sysmon Event ID 22 (DNS Query) for torproject.org subdomains; Sysmon Event ID 3 (Network Connection) to torproject.org on port 9030; DeviceNetworkEvents showing powershell.exe connecting to torproject.org; Windows Security Event 4688 for powershell.exe process creation

  3. Test 3Simulate EXOTIC LILY-Style Business Database Reconnaissance

    Expected signal: Linux audit logs (auditd) showing curl/dig/nslookup execution; syslog DNS resolution entries for all six data broker domains; stream:http events showing HEAD requests to rocketreach.co, crunchbase.com, zoominfo.com, apollo.io, lusha.com, clearbit.com


Response Playbook

Triage

  1. Step 1: Identify the initiating process — examine InitiatingProcessFileName and InitiatingProcessCommandLine to determine whether a browser, script interpreter (python.exe, powershell.exe, node.exe), or API client generated the connection. Browser-initiated queries to data broker sites are lower risk than scripted bulk API calls.
  2. Step 2: Check the user account's role — query HR/IAM systems or Active Directory to determine whether the account belongs to a sales, recruiting, marketing, or security team with a legitimate business reason to access commercial data broker platforms.
  3. Step 3: Quantify query volume and velocity — review the aggregated QueryCount and UniqueURLs over the past 7 days. A sudden spike (e.g., 200+ queries in one session versus a typical baseline of 10/day) is a stronger indicator of bulk harvesting than steady low-volume access.
  4. Step 4: For Tor or dark web proxy DNS resolution — immediately treat as high priority. Confirm whether the host is an authorized security research workstation. Check DeviceNetworkEvents for successful connections to Tor guard relays (port 9001, 9030, 9050) or known Tor IP ranges.
  5. Step 5: Examine what data was queried — if possible, review HTTP proxy or DLP logs for the specific search terms or API parameters sent to data broker endpoints. Queries containing employee PII, organizational charts, executive contact details, or technology stack information are higher concern.
  6. Step 6: Correlate with recent authentication events — check AADSignInLogs for the account: any impossible travel, new device sign-ins, or MFA bypass events in the 72 hours preceding the data broker access could indicate account compromise rather than insider threat.
  7. Step 7: Review process ancestry — check if the initiating process was spawned by an unusual parent (e.g., a browser spawned by an Office document macro, or a Python script launched from an email attachment directory) which would indicate malware-driven reconnaissance.

Containment

  1. If Tor access is confirmed from a non-authorized host: isolate the endpoint immediately via Defender for Endpoint Live Response or network quarantine, and initiate full malware scan.
  2. If bulk data broker querying is confirmed as unauthorized: disable the user account in Azure AD and revoke active sessions/tokens via 'Revoke-AzureADUserAllRefreshToken' to terminate any active API sessions.
  3. If account compromise is suspected: force password reset, require re-enrollment of MFA, and review all OAuth application grants for the compromised account in Azure AD Enterprise Applications.
  4. Block outbound DNS and HTTP/HTTPS to identified data broker domains at the web proxy or DNS firewall layer if bulk unauthorized harvesting is confirmed, pending investigation completion.
  5. Preserve the endpoint forensic image before any remediation if insider threat is suspected, as legal proceedings may require chain-of-custody evidence.

Evidence Collection

  1. Export full DeviceNetworkEvents for the affected device covering the 30-day period prior to detection, filtered to all external connections — capture RemoteUrl, RemoteIP, BytesSent, BytesReceived to assess data exfiltration volume.
  2. Collect browser history artifacts from the endpoint: Chrome (C:\Users\<user>\AppData\Local\Google\Chrome\User Data\Default\History), Firefox (C:\Users\<user>\AppData\Roaming\Mozilla\Firefox\Profiles\*.default\places.sqlite), Edge (C:\Users\<user>\AppData\Local\Microsoft\Edge\User Data\Default\History).
  3. Extract PowerShell ScriptBlock logs (Event ID 4104) and command history (%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt) to identify any scripted API calls to data brokers.
  4. Collect web proxy or Zscaler/Netskope logs for the user account covering the investigation window, including full URL paths and HTTP method (GET/POST) which may reveal specific API endpoints and search parameters used.
  5. If API keys or credentials for data broker platforms are suspected to be stored on the endpoint, collect credential store artifacts: Windows Credential Manager (cmdkey /list), browser saved passwords export, and .env or config files in user home directories.
  6. Capture memory dump of any suspicious process (e.g., Python or Node.js process making bulk API calls) using ProcDump for later analysis of in-memory API tokens or query parameters.
  7. Export Azure AD audit logs (AuditLogs table) for the user account's OAuth application authorizations and delegated permission grants, which may reveal third-party apps authorized to access organizational data.

Escalation Criteria

  • ! Escalate to Incident Response if Tor or dark web proxy access is confirmed from any non-authorized corporate endpoint, as this indicates either a compromised host or a deliberate attempt to obscure reconnaissance activity.
  • ! Escalate to Insider Threat team if a user account with data access privileges (HR, finance, engineering) is found making bulk API queries to people-search or business intelligence platforms, particularly outside business hours.
  • ! Escalate if the queried domains or API parameters contain references to the organization's own employees, executives, IP ranges, or technology stack — indicating the organization itself may be the reconnaissance target (self-reconnaissance by threat actor using a compromised internal account).
  • ! Escalate if external threat intelligence feeds (e.g., CISA advisories, FS-ISAC alerts, vendor threat reports) indicate that organizational data has appeared in a criminal marketplace or closed threat intelligence feed, suggesting a prior breach enabling closed-source reconnaissance.
  • ! Escalate if the process making data broker connections was spawned by a suspicious parent process chain involving Office applications, script interpreters, or processes executing from user-writable directories (AppData, Temp, Downloads).

Investigation Guide

Forensic Artifacts

  • > Browser history databases (Chrome History SQLite, Firefox places.sqlite, Edge History SQLite) — contain timestamps, URLs, and visit counts for data broker domains
  • > Windows Prefetch files (C:\Windows\Prefetch\) — evidence of execution of OSINT tools or scripts (theHarvester, Maltego, custom Python scrapers)
  • > PowerShell ConsoleHost history (%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt) — API call syntax and parameters
  • > Network proxy logs (Zscaler, BlueCoat, Squid) — full URL paths including API query parameters sent to data broker endpoints
  • > Azure AD sign-in logs — authentication timestamps, IP addresses, device identifiers used to access data broker web portals
  • > Windows Credential Manager entries (cmdkey /list) — stored credentials for data broker platform accounts
  • > Python/Node.js virtual environment directories (.venv, node_modules) containing data broker SDK packages (python-rocketreach, zoominfo-sdk, clearbit)
  • > Scheduled task definitions (schtasks /query /fo LIST /v) — automated data harvesting scripts set to run periodically
  • > DNS cache (ipconfig /displaydns) — recently resolved data broker and dark web proxy domains

Tuning Guidance

The primary source of false positives is legitimate business use of commercial data broker platforms by sales, marketing, and recruiting teams. Create allowlist entries based on approved business applications (e.g., CRM integration service accounts, known marketing automation platform IP ranges) using a watchlist in Sentinel or a lookup table in Splunk. Baseline normal query volumes per user role over a 30-day period and adjust the QueryCount threshold accordingly — a recruiter querying LinkedIn or RocketReach 50 times per day may be normal, while the same volume from an engineer is anomalous. For Tor detection, whitelist security research workstations or dedicated threat intelligence analyst machines that have documented authorization for dark web monitoring. If your organization uses a web proxy, augment DNS-based detections with HTTP proxy category logs to reduce false positives — proxy solutions often already categorize data broker sites, enabling role-based allow policies. Consider enriching alerts with user department data from HR systems to automatically suppress sales/recruiting team activity while maintaining high-fidelity detection for engineering, finance, and executive roles.


Hunting Queries

Hunts for accounts accessing three or more distinct commercial data broker platforms within a single day, indicating systematic multi-source OSINT harvesting rather than incidental single-platform use.

Hunting — KQL
kql
// Hunt: Identify accounts making bulk API calls to multiple distinct data broker domains in a single day
// (different pattern from main detection which focuses on volume to single domains)
DeviceNetworkEvents
| where Timestamp > ago(30d)
| where RemoteUrl has_any (
    "rocketreach.co", "zoominfo.com", "apollo.io", "lusha.com",
    "clearbit.com", "hunter.io", "fullcontact.com", "datanyze.com",
    "seamless.ai", "crunchbase.com", "pipl.com", "intelius.com",
    "spokeo.com", "beenverified.com"
  )
| extend Day = bin(Timestamp, 1d)
| summarize
    DailyQueryCount=count(),
    UniquePlatforms=dcount(RemoteUrl),
    PlatformList=make_set(RemoteUrl, 15),
    ProcessList=make_set(InitiatingProcessFileName, 5)
    by InitiatingProcessAccountName, DeviceName, Day
| where UniquePlatforms >= 3
| extend MultiPlatformRisk = case(
    UniquePlatforms >= 6, "High",
    UniquePlatforms >= 4, "Medium",
    "Low"
  )
| sort by UniquePlatforms desc, DailyQueryCount desc
Hunting — SPL
spl
index=* (sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=22)
| eval domain=QueryName
| where match(domain, "(?i)(rocketreach\.co|zoominfo\.com|apollo\.io|lusha\.com|clearbit\.com|hunter\.io|fullcontact\.com|datanyze\.com|seamless\.ai|crunchbase\.com|pipl\.com|intelius\.com|spokeo\.com|beenverified\.com)")
| eval day=strftime(_time, "%Y-%m-%d")
| stats count AS QueryCount, dc(domain) AS UniquePlatforms, values(domain) AS PlatformList by User, Computer, day
| where UniquePlatforms >= 3
| eval MultiPlatformRisk=case(UniquePlatforms >= 6, "High", UniquePlatforms >= 4, "Medium", true(), "Low")
| sort - UniquePlatforms

Hunts for execution of known OSINT tool names and data broker SDK imports in process command lines. Identifies programmatic bulk-querying tooling that targets commercial closed data sources beyond simple browser access.

Hunting — KQL
kql
// Hunt: Detect execution of known OSINT/data-harvesting tools via process name and path patterns
// These tools are often used to query closed/commercial data sources programmatically
DeviceProcessEvents
| where Timestamp > ago(30d)
| where FileName has_any ("theharvester", "maltego", "recon-ng", "osrframework", "phoneinfoga", "holehe", "sherlock")
    or ProcessCommandLine has_any (
        "theHarvester.py", "recon-ng", "maltego",
        "import rocketreach", "from clearbit", "import apollo",
        "zoominfo", "lusha", "hunter.io"
    )
    or (FileName == "python.exe" and ProcessCommandLine has_any ("rocketreach", "apollo", "zoominfo", "clearbit", "lusha"))
| extend ToolIndicator = case(
    ProcessCommandLine has "theHarvester", "TheHarvester",
    ProcessCommandLine has "recon-ng", "Recon-NG",
    ProcessCommandLine has "rocketreach", "RocketReach-SDK",
    ProcessCommandLine has "apollo", "Apollo-SDK",
    "OSINT-Tool"
  )
| project
    Timestamp,
    DeviceName,
    AccountName,
    FileName,
    ProcessCommandLine,
    FolderPath,
    InitiatingProcessFileName,
    ToolIndicator
| sort by Timestamp desc
Hunting — SPL
spl
index=* sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| where match(CommandLine, "(?i)(theHarvester|recon-ng|maltego|osrframework|phoneinfoga|holehe|sherlock|rocketreach|clearbit|zoominfo|lusha|apollo\.io)")
| eval ToolIndicator=case(
    match(CommandLine, "(?i)theHarvester"), "TheHarvester",
    match(CommandLine, "(?i)recon-ng"), "Recon-NG",
    match(CommandLine, "(?i)rocketreach"), "RocketReach-SDK",
    match(CommandLine, "(?i)apollo"), "Apollo-SDK",
    match(CommandLine, "(?i)maltego"), "Maltego",
    true(), "OSINT-Tool"
  )
| table _time, Computer, User, Image, CommandLine, ToolIndicator
| sort - _time

Hunts for outbound connections to Tor guard relay ports (9001, 9030) and SOCKS proxy ports (9050, 9150) which indicate usage of the Tor network — a common access mechanism for dark web criminal marketplaces selling stolen data and organizational intelligence.

Hunting — KQL
kql
// Hunt: Detect outbound connections to Tor guard relay IPs or known dark web marketplace IP ranges
// Indicates possible access to criminal closed-source data markets
let TorRelayPorts = dynamic([9001, 9030, 9050, 9051, 9150]);
DeviceNetworkEvents
| where Timestamp > ago(30d)
| where RemotePort in (TorRelayPorts)
    or RemoteUrl has_any ("torproject.org", "tor2web", ".onion.")
| extend ConnectionType = case(
    RemotePort in (9050, 9150), "TorSOCKSProxy",
    RemotePort in (9001, 9030), "TorGuardRelay",
    RemoteUrl has ".onion.", "OnionProxyHTTP",
    "TorRelated"
  )
| join kind=leftouter (
    DeviceProcessEvents
    | where Timestamp > ago(30d)
    | project Timestamp, DeviceName, ProcessId, FileName, FolderPath, ProcessCommandLine
  ) on DeviceName
| project
    Timestamp,
    DeviceName,
    InitiatingProcessAccountName,
    InitiatingProcessFileName,
    RemoteIP,
    RemotePort,
    RemoteUrl,
    ConnectionType
| sort by Timestamp desc
Hunting — SPL
spl
index=* sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=3
| where DestinationPort IN (9001, 9030, 9050, 9051, 9150)
    OR match(DestinationIp, "^10\.")==false AND match(DestinationIp, "^192\.168")==false AND match(DestinationIp, "^172\.(1[6-9]|2[0-9]|3[01])")==false
| eval ConnectionType=case(
    DestinationPort IN (9050, 9150), "TorSOCKSProxy",
    DestinationPort IN (9001, 9030), "TorGuardRelay",
    true(), "SuspiciousPort"
  )
| where DestinationPort IN (9001, 9030, 9050, 9051, 9150)
| table _time, Computer, User, Image, DestinationIp, DestinationPort, ConnectionType
| sort - _time

Atomic Red Team Tests

Test 1 Bulk Data Broker API Querying via Python Script
windows

Simulates an adversary or malicious insider using a Python script to make programmatic bulk API calls to a commercial data broker platform, generating the DNS queries and network connections that the detection targets. Uses hunter.io free API tier (no actual paid subscription required for testing).

Command

powershell
python3 -c "
import urllib.request
import json
import time
# Simulate bulk querying pattern to data broker API endpoint
# Using hunter.io domain search (free tier, no credentials exposed)
target_domains = ['microsoft.com', 'google.com', 'amazon.com', 'apple.com', 'meta.com']
for domain in target_domains:
    url = f'https://api.hunter.io/v2/domain-search?domain={domain}&api_key=ATOMIC_TEST_PLACEHOLDER'
    try:
        req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
        # Only resolve DNS, do not complete connection
        import socket
        socket.getaddrinfo('api.hunter.io', 443)
        print(f'DNS resolved for {domain} query target')
    except Exception as e:
        print(f'DNS resolution attempted: {e}')
    time.sleep(1)
print('Atomic test complete - DNS queries to data broker generated')
"

Cleanup

powershell
Remove any Python cache files: del /q %TEMP%\*.pyc 2>nul

Expected Telemetry

Sysmon Event ID 22 (DNS Query) entries for api.hunter.io and hunter.io; DeviceNetworkEvents entries showing python.exe initiating connections to hunter.io; DeviceProcessEvents showing python3 execution with inline script containing data broker domain references

Expected Detection

SPL hunt query for OSINT tool execution should fire on 'hunter.io' in CommandLine; KQL main detection should flag python.exe connections to hunter.io domain if connection succeeds

Test 2 Tor Browser DNS Resolution and Connection Attempt
windows

Simulates an adversary attempting to access dark web criminal marketplaces by initiating a Tor Browser connection. This generates the characteristic Tor guard relay port 9001/9001 connection attempts and torproject.org DNS resolution that the detection monitors.

Command

powershell
powershell -ExecutionPolicy Bypass -Command "
# Simulate Tor connection attempt DNS pattern (no actual Tor install required)
# Resolve torproject.org to generate DNS telemetry
$domains = @('www.torproject.org', 'bridges.torproject.org', 'metrics.torproject.org')
foreach ($domain in $domains) {
    try {
        $result = [System.Net.Dns]::GetHostAddresses($domain)
        Write-Host "Resolved $domain to: $($result[0].IPAddressToString)"
    } catch {
        Write-Host "DNS query attempted for: $domain (Error: $($_.Exception.Message))"
    }
    Start-Sleep -Seconds 2
}
# Attempt TCP connection to standard Tor guard relay port (will fail without actual relay IP)
try {
    $tcpClient = New-Object System.Net.Sockets.TcpClient
    $connect = $tcpClient.BeginConnect('www.torproject.org', 9030, $null, $null)
    $wait = $connect.AsyncWaitHandle.WaitOne(3000, $false)
    Write-Host 'Tor relay port 9030 connection attempted'
    $tcpClient.Close()
} catch {
    Write-Host "Tor port connection attempted (expected failure in test environment)"
}
Write-Host 'Atomic test complete'
"

Cleanup

powershell
No cleanup required — no persistent artifacts created

Expected Telemetry

Sysmon Event ID 22 (DNS Query) for torproject.org subdomains; Sysmon Event ID 3 (Network Connection) to torproject.org on port 9030; DeviceNetworkEvents showing powershell.exe connecting to torproject.org; Windows Security Event 4688 for powershell.exe process creation

Expected Detection

KQL hunting query for Tor relay ports should fire; SPL Tor port hunt should detect DestinationPort 9030 connection attempt; main KQL detection should flag RemoteUrl matching torproject.org with RiskScore 90

Test 3 Simulate EXOTIC LILY-Style Business Database Reconnaissance
linux

Replicates the reconnaissance pattern used by threat group EXOTIC LILY (G1011), which searched RocketReach and CrunchBase for targeted individual information. Simulates multi-platform data broker access from a corporate endpoint using curl to generate realistic HTTP traffic patterns.

Command

bash
#!/bin/bash
# Simulate EXOTIC LILY reconnaissance pattern - multi-platform data broker querying
# Using only DNS resolution and HTTP HEAD requests (no credentials, no actual data retrieval)
echo '[*] Simulating EXOTIC LILY closed-source reconnaissance pattern'

TARGET_DOMAINS=(
    'www.rocketreach.co'
    'www.crunchbase.com'
    'www.zoominfo.com'
    'api.apollo.io'
    'www.lusha.com'
    'www.clearbit.com'
)

for domain in "${TARGET_DOMAINS[@]}"; do
    echo "[*] Querying data broker: $domain"
    # DNS resolution only
    dig +short "$domain" 2>/dev/null || nslookup "$domain" 2>/dev/null | grep 'Address'
    # HTTP HEAD request to generate network telemetry (no data retrieved)
    curl -s -o /dev/null -w "HTTP %{http_code} for %{url_effective}\n" \
        --head \
        --max-time 5 \
        --user-agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' \
        "https://$domain" 2>/dev/null || echo "Connection attempted to $domain"
    sleep 2
done

echo '[*] Atomic test complete - multi-platform broker DNS/HTTP telemetry generated'

Cleanup

bash
No cleanup required — no files written, no persistent state created

Expected Telemetry

Linux audit logs (auditd) showing curl/dig/nslookup execution; syslog DNS resolution entries for all six data broker domains; stream:http events showing HEAD requests to rocketreach.co, crunchbase.com, zoominfo.com, apollo.io, lusha.com, clearbit.com

Expected Detection

SPL main detection should aggregate DNS queries across all six domains for the test host user, triggering MultiPlatformRisk=High in the hunting query (6+ unique platforms); KQL hunting query for 3+ unique data broker platforms should fire

Related Detections