Phishing Infrastructure and Interactive Exfiltration
An adversary is operating the Iron Man System phishing kit to harvest credentials in real-time, using specific domains for infrastructure management and Telegram for automated exfiltration.
Based on research by Microsoft 2026-10-15 10 steps · 4 queries T1041 T1090.003 T1566
Brief
Why now
Microsoft's recent report, The hidden network: Inside the phishing infrastructure ecosystem powering global cybercrime, exposes how adversaries like Storm-2990 and Storm-3119 use the Iron Man System phishing kit. These actors do not just steal static credentials; they use interactive proxying to bypass MFA in real-time. This hunt identifies those active harvesting sessions by looking for the specific infrastructure and behavioral markers left behind on the endpoint.
How the Hunt Flows
The hunt first identifies hosts running business productivity software, such as SharePoint, OneDrive, and Google Drive. These applications represent the primary targets for the Storm-2990 ecosystem. Narrowing the scope to these hosts ensures the hunt focuses on high-value beachheads where credential harvesting is most likely to occur.
Once scoped, the hunt launches three parallel queries to gather evidence. The first query checks DNS logs for resolutions of known management infrastructure, including jewishchoice.org. Any hit here indicates the host is interacting directly with the attacker's command-and-control surface.
The second query looks for behavioral heuristics in network traffic. It identifies hosts with sustained, high-packet outbound traffic on port 443. Because Iron Man System relies on real-time operator-victim interaction, these sessions often exhibit high packet counts characteristic of WebSockets used for interactive harvesting.
The third query searches for direct connections to the Telegram Bot API. The kit uses this channel to send real-time notifications to the operator when a victim enters credentials. Finding requests to api.telegram.org/bot on a host that also shows the previous network heuristics confirms the exfiltration phase.
A final triage step synthesizes these signals. An analyst or agent examines the converged evidence to distinguish legitimate application traffic from an active phishing session. If the hunt finds concurrent DNS hits and Telegram exfiltration, it triggers immediate host isolation.
What the Hunt Cannot See
This hunt relies heavily on network and HTTP telemetry. If the adversary uses a non-HTTP method or the MTProto protocol for Telegram communication, it will not appear in the HTTP activity logs. Furthermore, identifying WebSockets specifically requires TLS decryption at the network proxy; without it, the hunt must rely on packet-volume heuristics which may catch other high-traffic applications.
In this series
Steps
-
Scope to hosts with targeted productivity software
Query · scopingFind hosts running business productivity software that are the reported targets for this infrastructure abuse.
reads hb_software_inventorysqlSELECT DISTINCT device_hostname, package_name, package_version FROM hb_software_inventory WHERE (instr(',' || '{{target_software_keywords}}' || ',', ',' || package_name || ',') > 0 OR LOWER(package_name) LIKE '%microsoft 365%' OR LOWER(package_name) LIKE '%sharepoint%')What a hit looks like. A list of hosts that run the software targeted for hijacking. Silence does not prove absence of threat but narrows the hunt to the most likely beachheads.
-
DNS lookups to reported management infrastructure
Query · triageFind any host resolving domains linked to the Storm-3119 management infrastructure.
reads hb_dns_activitysqlSELECT device_hostname, query_hostname, query_type, time FROM hb_dns_activity WHERE (instr(',' || '{{reported_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0 OR LOWER(query_hostname) LIKE '%jewishchoice.org%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. A resolution of jewishchoice.org or other reported domains. This is a high-confidence lead for interaction with the management infrastructure.
-
Interactive high-packet outbound sessions
Query · baselineIdentify hosts with sustained, high-packet outbound traffic on port 443, characteristic of interactive phishing sessions.
reads hb_network_connectionsqlSELECT device_hostname, dst_endpoint_ip, COUNT(*) as connection_count, SUM(traffic_packets) as total_packets, MIN(time) as first_seen FROM hb_network_connection WHERE dst_endpoint_port = 443 AND state_kind = 'log' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, dst_endpoint_ip HAVING total_packets > 500What a hit looks like. High packet volume to an external IP seen on few hosts suggests a long-lived session like a WebSocket used for interactive harvesting.
-
Telegram Bot API exfiltration
Query · enrichmentDetect direct connections to the Telegram Bot API used for real-time exfiltration notifications.
reads hb_http_activitysqlSELECT device_hostname, url_hostname, url_path, user_agent, time FROM hb_http_activity WHERE (LOWER(url_hostname) = 'api.telegram.org' AND LOWER(url_path) LIKE '/bot%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. Requests to api.telegram.org/bot are the primary channel for the Iron Man System's real-time exfiltration alerts.
-
Phishing session triage
Agent triageSynthesize infrastructure leads and behavioral exfiltration signals to identify compromised hosts.
-
Route on triage verdict
DecisionRoute findings for immediate containment or analyst review.
-
Isolate compromised host
Response actionStop further exfiltration of credentials during an active session.
-
Investigate interactive phishing lures
Analyst taskAnalyze the victim's interaction and identify the specific phishing template used.
-
Hunt close-out
Analyst taskDocument results and update blocklists.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| DNS Management and Domain Routing T1090.003 · T1568 |
Yes | dns-infrastructure-leads |
| Real-time Phishing and Exfiltration T1566 · T1041 |
Yes | interactive-websocket-heuristics, telegram-bot-exfiltration |
| Automated Cloud Tenant Reconnaissance T1090.003 · T1595 |
Out of scope | Belongs to another part of the 'The hidden network: Inside the phishing infrastructure ecosystem powering global cybercrime' series. |
| Application-Level Environment Takeover T1078.004 |
Out of scope | Belongs to another part of the 'The hidden network: Inside the phishing infrastructure ecosystem powering global cybercrime' series. |
| Silent Password Resets and License Assignment T1098 |
Out of scope | Belongs to another part of the 'The hidden network: Inside the phishing infrastructure ecosystem powering global cybercrime' series. |
| Graph API Privilege Escalation T1098.003 |
Out of scope | Belongs to another part of the 'The hidden network: Inside the phishing infrastructure ecosystem powering global cybercrime' series. |
| SharePoint and OneDrive Storage Abuse T1560 |
Out of scope | Belongs to another part of the 'The hidden network: Inside the phishing infrastructure ecosystem powering global cybercrime' series. |
Blind spots
- Needs TLS decryption at the network proxy. Standard endpoint telemetry shows encrypted 443 traffic but not the protocol upgrade, necessitating reliance on packet-volume heuristics. It would answer Are the high-volume outbound connections confirmed to be WebSocket (HTTP Upgrade) traffic?.
- Needs hb_network_connection with destination IP attribution for Telegram. If the kit bypasses the HTTPS Bot API, it will not appear on the hb_http_activity surface. It would answer Is the actor using a non-HTTP method or MTProto for Telegram exfiltration?.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
lookback_days | number | 14 | Days of history to examine. |
reported_domains | list[domain] | jewishchoice.org | Malicious domains linked to Storm-3119 infrastructure management. |
scope_hosts | list[host] | — | Optional list of hostnames to focus the hunt; leave empty to scan the estate. |
target_software_keywords | list[string] | Google Drive, SharePoint, OneDrive, Microsoft 365 | Software keywords to identify high-value target hosts. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Network telemetry | network | network |
| Web server / proxy logs | siem | network |
Source
---
analysis: A simple detection rule for jewishchoice.org is easily bypassed. This hunt
combines specific scoping, behavioral network heuristics for WebSockets, and exfiltration
pattern analysis into a single decision, which avoids the false positives a single
heuristic rule would generate.
blind_spots:
- id: encrypted-websocket-blind-spot
question: Are the high-volume outbound connections confirmed to be WebSocket (HTTP
Upgrade) traffic?
requires: TLS decryption at the network proxy
risk: Standard endpoint telemetry shows encrypted 443 traffic but not the protocol
upgrade, necessitating reliance on packet-volume heuristics.
stage: exfiltration-interactive-credential-harvesting
- id: non-http-telegram
question: Is the actor using a non-HTTP method or MTProto for Telegram exfiltration?
requires: hb_network_connection with destination IP attribution for Telegram
risk: If the kit bypasses the HTTPS Bot API, it will not appear on the hb_http_activity
surface.
stage: exfiltration-interactive-credential-harvesting
coverage:
- stage: command-and-control-dns-routing
status: covered
steps:
- dns-infrastructure-leads
- stage: exfiltration-interactive-credential-harvesting
status: covered
steps:
- interactive-websocket-heuristics
- telegram-bot-exfiltration
- reason: 'Belongs to another part of the ''The hidden network: Inside the phishing
infrastructure ecosystem powering global cybercrime'' series.'
stage: reconnaissance-automated-cloud-profiling
status: out_of_scope
- reason: 'Belongs to another part of the ''The hidden network: Inside the phishing
infrastructure ecosystem powering global cybercrime'' series.'
stage: initial-access-app-only-auth
status: out_of_scope
- reason: 'Belongs to another part of the ''The hidden network: Inside the phishing
infrastructure ecosystem powering global cybercrime'' series.'
stage: persistence-account-manipulation
status: out_of_scope
- reason: 'Belongs to another part of the ''The hidden network: Inside the phishing
infrastructure ecosystem powering global cybercrime'' series.'
stage: privilege-escalation-graph-abuse
status: out_of_scope
- reason: 'Belongs to another part of the ''The hidden network: Inside the phishing
infrastructure ecosystem powering global cybercrime'' series.'
stage: collection-resource-hosting-abuse
status: out_of_scope
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: keep-as-periodic-hunt
justification: PaaS products like the Iron Man System bypass traditional MFA through
real-time victim interaction. A negative result confirms that these sophisticated
harvesting sessions are not active in the high-value software scope.
methodology: model-assisted
trigger: intel-report
hypothesis: An adversary is operating the Iron Man System phishing kit to harvest
credentials in real-time, using specific domains for infrastructure management and
Telegram for automated exfiltration.
labels:
- hunt
- attack.t1566
- attack.t1041
- attack.t1090.003
- collection
- command and control
- exfiltration
- initial access
- persistence
- privilege escalation
- reconnaissance
name: Phishing Infrastructure and Interactive Exfiltration
parameters:
lookback_days:
default: '14'
description: Days of history to examine.
from:
kind: manual
observed: '2026-10-14'
ref: Standard retention window
type: number
reported_domains:
default:
- jewishchoice.org
description: Malicious domains linked to Storm-3119 infrastructure management.
from:
kind: article
observed: '2026-10-14'
ref: Microsoft Storm-3119 Report
type: list[domain]
scope_hosts:
default: []
description: Optional list of hostnames to focus the hunt; leave empty to scan
the estate.
from:
kind: manual
observed: '2026-10-14'
ref: Analyst scoping
type: list[host]
target_software_keywords:
default:
- Google Drive
- SharePoint
- OneDrive
- Microsoft 365
description: Software keywords to identify high-value target hosts.
from:
kind: manual
observed: '2026-10-14'
ref: Reported target platforms
type: list[string]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://www.microsoft.com/en-us/security/blog/2026/10/14/the-hidden-network-inside-the-phishing-infrastructure-ecosystem-powering-global-cybercrime/
gates:
- dry-run
- lint
- critic
model: hb_google/gemini-3-flash-preview
rationale: Focus on departments with high-value cloud access, such as finance or executive
administration, as these are the primary targets for tenant hijacking.
references:
- name: 'The hidden network: Inside the phishing infrastructure ecosystem powering
global cybercrime'
url: https://www.microsoft.com/en-us/security/blog/2026/10/14/the-hidden-network-inside-the-phishing-infrastructure-ecosystem-powering-global-cybercrime/
related:
- hunt: cloud-tenant-takeover-graph-abuse
reason: This hunt focuses on the endpoint exfiltration side; cloud-side resource
and Graph abuse belong to the infrastructure takeover hunt.
relation: out-of-scope-alternative
- hunt: cloud-tenant-hijacking-service-principal-abuse
relation: follows
scenario:
stages:
- name: Automated Cloud Tenant Reconnaissance
observables:
- Flask-based reconnaissance tooling
- Tor infrastructure for anonymity
- Profiling of M365 tenant enrollment opportunities
- Discovery of Azure cloud information
slug: reconnaissance-automated-cloud-profiling
tactic: reconnaissance
techniques:
- T1090.003
- T1595
- name: Application-Level Environment Takeover
observables:
- Application-only authentication flows
- Usage of stolen client secrets
- PHP, Java/Spring, and Cloudflare Workers admin panels
- Client secret-based directory control
slug: initial-access-app-only-auth
tactic: initial-access
techniques:
- T1078.004
- name: Silent Password Resets and License Assignment
observables:
- Silent password resets (without force-change requirement)
- Assignment of education licenses
- Granting of privileged account attributes
slug: persistence-account-manipulation
tactic: persistence
techniques:
- T1098
- name: Graph API Privilege Escalation
observables:
- Self-provisioning of PnP Management Shell service principal
- Granting AppCatalog.ReadWrite.All permission
- Broad Microsoft Graph permissions grant
- Full control over SharePoint API
slug: privilege-escalation-graph-abuse
tactic: privilege-escalation
techniques:
- T1098.003
- name: SharePoint and OneDrive Storage Abuse
observables:
- Abuse of SharePoint as bulk hosting platform
- Abuse of OneDrive for phishing content hosting
- Conversion of hijacked storage into sellable products
slug: collection-resource-hosting-abuse
tactic: collection
techniques:
- T1560
- name: DNS Management and Domain Routing
observables:
- Custom DNS management platform
- Cloudflare domain-routing configurations
- jewishchoice.org
- AI-generated nonprofit web presence
slug: command-and-control-dns-routing
tactic: command-and-control
techniques:
- T1090.003
- T1568
- name: Real-time Phishing and Exfiltration
observables:
- WebSocket connections for real-time victim interaction
- Telegram bot tokens and chat IDs for exfiltration
- Iron Man System phishing kit
- Credential harvesting (usernames, passwords, credit card info)
slug: exfiltration-interactive-credential-harvesting
tactic: exfiltration
techniques:
- T1566
- T1041
summary: Storm-3119 (YAM Store) functions as an infrastructure broker that hijacks
Microsoft 365 and Azure environments through automated reconnaissance and application-level
credential abuse. These compromised environments and PaaS phishing kits (Storm-2990)
are then used by downstream actors to conduct large-scale credential and financial
theft, leveraging real-time victim interaction via WebSockets and Telegram.
series:
index: 2
slug: the-hidden-network-inside-the-phishing-infrastructure-ecosystem-powering-global-cybercrime
title: 'The hidden network: Inside the phishing infrastructure ecosystem powering
global cybercrime'
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
network:
category: network
name: Network telemetry
telemetry:
- network
web:
category: siem
name: Web server / proxy logs
telemetry:
- network
tlp: clear
type: investigation
---
# Phishing Infrastructure and Interactive Exfiltration
This hunt targets the interactive phases of the Storm-2990 and Storm-3119 phishing ecosystem. It focuses on the behavioral hallmarks of the Iron Man System: high-frequency WebSocket-like traffic for real-time operator-victim interaction and exfiltration via the Telegram Bot API. The hunt first scopes to hosts running core productivity software targeted by this group, then fans out to identify connections to reported infrastructure and behavioral exfiltration patterns. An agent triages the converged evidence to distinguish legitimate application traffic from active phishing sessions.
## scoping-targeted-software
<!-- Scope to hosts with targeted productivity software -->
Find hosts running business productivity software that are the reported targets for this infrastructure abuse.
```sqlite target=endpoint role=scoping params=(target_software_keywords=target_software_keywords)
~~~yaml
expected: A list of hosts that run the software targeted for hijacking. Silence does
not prove absence of threat but narrows the hunt to the most likely beachheads.
reads:
- device_hostname
- package_name
- package_version
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT DISTINCT device_hostname, package_name, package_version FROM hb_software_inventory WHERE (instr(',' || '{{target_software_keywords}}' || ',', ',' || package_name || ',') > 0 OR LOWER(package_name) LIKE '%microsoft 365%' OR LOWER(package_name) LIKE '%sharepoint%')
```
## parallel-signal-search
<!-- Parallel search for C2 and exfiltration signals -->
parallel:
- → dns-infrastructure-leads
- → interactive-websocket-heuristics
- → telegram-bot-exfiltration
join: → triage-phishing-activity
## dns-infrastructure-leads
<!-- DNS lookups to reported management infrastructure -->
Find any host resolving domains linked to the Storm-3119 management infrastructure.
```sqlite target=endpoint role=triage params=(reported_domains=reported_domains, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: A resolution of jewishchoice.org or other reported domains. This is a high-confidence
lead for interaction with the management infrastructure.
reads:
- device_hostname
- query_hostname
- query_type
- time
silence: not_evidence_of_absence
source: hb_dns_activity
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, query_hostname, query_type, time FROM hb_dns_activity WHERE (instr(',' || '{{reported_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0 OR LOWER(query_hostname) LIKE '%jewishchoice.org%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## interactive-websocket-heuristics
<!-- Interactive high-packet outbound sessions -->
Identify hosts with sustained, high-packet outbound traffic on port 443, characteristic of interactive phishing sessions.
```sqlite target=network role=baseline params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
baseline:
compare: new_this_window
window: '{{lookback_days}}d'
expected: High packet volume to an external IP seen on few hosts suggests a long-lived
session like a WebSocket used for interactive harvesting.
prevalence:
by: device_hostname
key:
- dst_endpoint_ip
rare_below: 3
reads:
- device_hostname
- dst_endpoint_ip
- dst_endpoint_port
- traffic_packets
- time
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, dst_endpoint_ip, COUNT(*) as connection_count, SUM(traffic_packets) as total_packets, MIN(time) as first_seen FROM hb_network_connection WHERE dst_endpoint_port = 443 AND state_kind = 'log' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, dst_endpoint_ip HAVING total_packets > 500
```
## telegram-bot-exfiltration
<!-- Telegram Bot API exfiltration -->
Detect direct connections to the Telegram Bot API used for real-time exfiltration notifications.
```sqlite target=web role=enrichment params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Requests to api.telegram.org/bot are the primary channel for the Iron Man
System's real-time exfiltration alerts.
reads:
- device_hostname
- url_hostname
- url_path
- user_agent
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-10-15'
~~~
SELECT device_hostname, url_hostname, url_path, user_agent, time FROM hb_http_activity WHERE (LOWER(url_hostname) = 'api.telegram.org' AND LOWER(url_path) LIKE '/bot%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## triage-phishing-activity
<!-- Phishing session triage -->
```agent target=hunter
cite: required
context:
- scoping-targeted-software
- dns-infrastructure-leads
- interactive-websocket-heuristics
- telegram-bot-exfiltration
max_iterations: 4
objective: Determine if any host shows signs of interactive phishing through a combination
of Storm-3119 management domain hits, high-volume WebSocket heuristics, and Telegram
exfiltration.
success_criteria: A verdict of malicious, suspicious, or benign per host, citing specific
rows from the DNS and HTTP surfaces.
tools:
- endpoint
- network
- web
```
## route-on-verdict
<!-- Route on triage verdict -->
if~: "the triage verdict is malicious for at least one host based on concurrent DNS and HTTP exfiltration signals" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → analyst-investigation
unavailable: → analyst-investigation (blind_spot: encrypted-websocket-blind-spot)
else: → close-out
## isolate-host
<!-- Isolate compromised host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host immediately. Revoke any active Microsoft 365 or Google cloud sessions for the user logged in at the time of the exfiltration signal.
```
→ analyst-investigation
## analyst-investigation
<!-- Investigate interactive phishing lures -->
```manual target=analyst
Review browser history and cache on the isolated host to find the initial phishing URL. Extract bot tokens from the Telegram API request paths if visible in the HTTP logs.
```
→ close-out
## close-out
<!-- Hunt close-out -->
```manual target=analyst
Record the findings. Update organizational blocklists with any newly identified malicious domains or IPs found during the analyst investigation.
```
→ 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, critic, then reviewed by a person.