Knight Office -- M365 AiTM Phishing Kit & Entra ID Persistence

AiTM session-token theft chained to rogue Microsoft Entra ID device registration and a Windows Hello for Business key-credential bind that survives password reset and token revocation.
Threat
Knight Office (AiTM PhaaS kit)
Severity
ACTIVE AiTM -- AUTH BYPASS
Type
Identity / M365 AiTM Phishing + Entra ID Persistence
Access
Public (Huntress, TLP:CLEAR)
Version
v0.1 (Draft) · 2026-09-15
Author
HuntPack
Confidence
High (single-source primary, high technical detail + first-party IOC list)
01

Executive Summary

Knight Office is an adversary-in-the-middle (AiTM) phishing-as-a-service kit, disclosed by Huntress on 2026-09-02 from a real intrusion its SOC opened on 2026-08-18, that steals Microsoft 365 session/OAuth tokens rather than passwords. A self-spoofed DocuSign-style lure (the From, To, and Return-Path headers are forged to the recipient's own address) routes victims through a legitimate Monday.com tracking redirect and a compromised Joomla website -- a chain built to blind email-security scanners and analysts -- to a SharePoint/Teams-themed phishing page (page title Login -- KNIGHT OFFICE, fronted by a Cloudflare Turnstile) that walks the target through Microsoft's own device-authentication code flow. A reverse proxy sitting between the victim and Microsoft captures the resulting session token and feeds it to the operator console at idoej[.]com (104.37.188[.]94), where it is replayed with a distinctive python-requests/2.34.2, OAuth2:Token client fingerprint.

What makes Knight Office worth a dedicated hunt is not the token theft itself -- that is now routine phishing-kit tradecraft, and Huntress explicitly ties it to sibling kits EvilTokens and Kali365 -- it is what happens after. The operator uses the stolen token to enroll an attacker-controlled device into the victim's Microsoft Entra ID tenant and binds a Windows Hello for Business (WHfB) passwordless key credential to the compromised account. That credential survives both a forced password reset and a full session-token revocation: the two standard "we think this account was phished" incident-response actions do not evict the attacker. Only an explicit review and removal of the rogue device and its WHfB/authentication-method registration closes the door back out.

Huntress has linked the single operator-console IP to at least nine token-replay logins against Microsoft 365 and Google Workspace identities within its own customer telemetry over a two-week window, and at least 700 phishing emails matching this lure's subject line and template reported through its Security Awareness Training platform since April 2026 -- this is an active, ongoing campaign, not a one-off intrusion.

Defender priority: this is primarily an identity hunt, not an endpoint hunt. The single highest-value action is reviewing every Microsoft Entra ID device registration and every new WHfB/passkey credential addition from the last 30 days against known onboarding baselines (Section 8, Q3-Q5) -- a rogue device registration paired with a new WHfB credential on an account that was not provisioning new hardware that day is the tell that password reset and token revocation alone will not remediate.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Forward
Tier 1 -- PrimaryHuntress -- "Inside Knight Office, a New M365 AiTM Phishing Kit" (2026-09-02)Full technical writeup from an internally-investigated attack (opened 2026-08-18): attack chain, complete IOC table, vendor MITRE mapping, and campaign-scale telemetry (9 replay logins / 2wk, 700+ lure emails since April)Yes -- attack chain, every atomic IOC, MITRE mapping, scale stats
Tier 2 -- Vendor, backgroundHuntress -- "Inside Kali365, a Device Code Phishing Ecosystem"TTP/detection context for a different device-code-phishing kit (Kali365/Octopi365) -- Microsoft's "block device code flow" recommendation and a python-requests/ASN KQL hunting patternPartial -- hardening recommendation + hunt-query shape only; no IOCs from this source were carried into Section 4/10 (different campaign, no TTP overlap confirmed beyond token-replay UA style)
Tier 1 -- Vendor docsMicrosoft Learn -- Microsoft Entra audit log activity referenceCanonical operationName strings for device registration ("Register device", "Add device") and WHfB/passkey credential events ("Add Windows Hello for Business credential", "User registered security info")Yes -- grounds the operationName values used in Q3-Q5 and Section 7

Disqualified / inaccessible: itsecurityguru.org's coverage of this story was located via search but returned HTTP 403 (Cloudflare bot-challenge) on fetch -- no verbatim snapshot could be saved, so per this pack's sourcing rule it is not cited and contributes zero claims here. No other outlet with independently-gathered (non-Huntress-derived) technical detail was found as of 2026-09-15.

Second-source policy applied: no independent confirmation of the atomic infrastructure IOCs (idoej[.]com, 104.37.188[.]94, the 25 .vu domains) was found -- expected 13 days after disclosure of a fresh campaign. Per the pack's second-source rule, every infrastructure IOC in Section 10 ships at action=detect / severity=high, not prevent/critical, until a second independent source corroborates them.

No fetched source contained instructions directed at the assistant (prompt injection); all three sources above were treated strictly as data.

03

Hunt Brief & Attack Chain

Attack chain

StepWhat HappensTelemetryHunt Angle
1Self-spoofed DocuSign-style lure email ("Reminder: Signature Required - Approval Pending Your Review!!! Ref ID-<RANDOM>" and four documented variants)Mail gateway / Exchange Online ProtectionSection 7 (native, non-CQL)
2Redirect chain: lure link → Monday.com tracking service → compromised Joomla site (now taken down) → phishing pageURL click / secure web gateway logsSection 7 (native, non-CQL)
3SharePoint/Teams-themed phishing page ("Login -- KNIGHT OFFICE", Cloudflare Turnstile sitekey 0x4AAAAAADrkE-VuOnNDfr6W) presents a device-authentication codeBrowser / proxy logs -- no Falcon EDR visibilityGap -- native/SWG only (Section 5)
4Victim pastes the code at Microsoft's real "deviceauth" screen, signs in, completes MFA; a reverse proxy captures the session token and a callback proxy relays it to the operatorEntra ID sign-in logs (azure_signinlogs)Q1, Q2, Q6
5Operator registers a rogue, attacker-controlled device into the victim's Entra ID tenant (observed from 104.37.188[.]94)Entra ID audit logs (azure_auditlogs)Q3, Q5
6Operator binds a Windows Hello for Business (WHfB) key credential to the compromised account (device-registration client string Dsreg/10.0 (Windows 10.0.19044.1826)) -- the persistence stepEntra ID audit logsQ4, Q5, Q8
7Operator signs in again using WHfB passwordless authentication -- this leg survives password reset and token revocationEntra ID sign-in logsQ5; containment runbook Section 14

Hunt hypotheses (ordered by fidelity)

#HypothesisMITREFalcon TelemetryConfidence
H1Accounts show an Entra device registration and a WHfB credential bind within a short window, with no matching IT-managed enrollment record -- the persistence signature itselfT1098.005azure_auditlogsHIGH
H2Sign-in logs carry the literal token-replay client strings python-requests/2.34.2 or OAuth2:TokenT1528, T1550.001azure_signinlogsHIGH
H3A managed endpoint resolves one of the 25 known .vu phishing domains or idoej[.]comT1566.002DnsRequest (Falcon sensor)HIGH
H4A sign-in failure citing a missing device/NGC key is immediately followed by a WHfB-bound success for the same identity -- the exact sequence Huntress observedT1556, T1098.005azure_signinlogsHIGH
H5Repeated post-MFA sign-ins to Microsoft Authentication Broker / OfficeHome share a small set of source IPs across multiple users (callback-proxy reuse)T1557, T1111azure_signinlogsMEDIUM
H6(Support signal only) sign-ins/replays sourced from Tencent Cloud's published coarse IP rangesT1090.003azure_signinlogsLOW
04

Consolidated IOC Table

TypeValueConfidenceActionContextExpiry
IPv4104.37.188[.]94highdetectKnight Office operator console; source of the rogue Entra device registration2027-03-15
Domainidoej[.]comhighdetectReverse-IP resolution of the operator console2027-03-15
Domain ×25advancedplacyncement[.]vu and 24 sibling .vu domains -- full list in Section 10highdetectPhishing landing-page domains2027-03-15
IP (partial, redacted)73.125.13.xmediumenrichResidential callback-proxy first hop (Comcast Cable, flagged by Spur as proxy-resale infrastructure) -- Huntress redacted the last octet in its own writeup; do not attempt to reconstruct it2026-10-15
ASN rangesTencent Cloud 43.x / 170.106.x / 162.62.x / 49.51.xlowpivotToken-replay hosting; far too broad to block on their own -- correlate only (see Q6 tuning)2026-10-15
User-Agentpython-requests/2.34.2highdetectToken-replay client fingerprint2027-03-15
User-AgentOAuth2:TokenhighdetectToken-replay client fingerprint (literal string)2027-03-15
User-AgentDsreg/10.0 (Windows 10.0.19044.1826)highdetectWHfB / device-registration client string added during persistence phase2027-03-15
StringLogin -- KNIGHT OFFICEhighhuntOperator console page title (pivot in SWG/proxy logs, Validin, VirusTotal)2026-12-15
StringCloudflare Turnstile sitekey 0x4AAAAAADrkE-VuOnNDfr6WhighhuntPhishing-page fingerprint2026-12-15
Email subject"Reminder: Signature Required - Approval Pending Your Review!!! Ref ID-<RANDOM>" + 4 documented variants (voicemail / document / caller-ID lures, all using lowercase "l" for "i")highhuntLure subject-line pattern2026-12-15
IPv4154.127.53[.]78mediumenrichLure sender IP observed in the example case investigated by Huntress2026-10-15
05

Affected Surface & Telemetry Matrix

SurfaceTelemetry RequiredPriorityGap Risk
Microsoft Entra ID -- sign-in logsazure_signinlogs via Falcon Identity Protection / SaaS connectorP1Requires an Identity Protection license and an active Entra connector -- a real coverage gap if unlicensed or not yet onboarded
Microsoft Entra ID -- audit logsazure_auditlogsP1Same license dependency; also parser-prefix drift per tenant (see NOTE lines on Q3-Q5)
Email / Exchange Online ProtectionMail flow logs, Safe Links time-of-click telemetryP1Not visible to Falcon EDR at all -- native M365 Defender / EOP hunting only (Section 7)
Endpoint (Falcon sensor)DnsRequest, NetworkConnectIP4P2Only sees the victim's own browsing to already-known-bad domains -- cannot see the AiTM reverse proxy itself or anything on the Entra ID side
Windows Hello for Business enrollment (local device)dsregcmd / NGC container eventsP3Honest gap: the attacker enrolls their own rogue device, not the victim's endpoint -- the Falcon sensor on the victim's machine has no visibility into that registration. This is why the hunt is identity-led, not endpoint-led.
Network egress (SWG / proxy)URL / category logs for the Monday.com redirect + compromised Joomla siteP2The compromised Joomla site was already taken down by the time Huntress published -- historical/retro-hunt value only, not a live blocking target

Falcon endpoint telemetry alone cannot detect this campaign's persistence mechanism. Section 8's identity queries (Q1-Q6, Q8) require an Entra ID / Identity Protection connector feeding LogScale; only Q7 (DNS to known phishing domains) is native Falcon-sensor telemetry with no additional licensing. Say so plainly to stakeholders before promising detection coverage.

06

ATT&CK Mapping

Tactic/technique/context reproduced from Huntress's own published mapping (attributed; IDs as published in the primary source and not independently re-derived), with a Query-or-Control column added by this pack.

TacticTechniqueContext (per Huntress)Query / Control
Resource DevelopmentStage Capabilities: Link Target (T1608.005)Threat actor stages a target page behind an open redirect parameter on Monday[.]com's tracking service, routing the victim to resources on the compromised siteSection 7 (native)
Initial AccessPhishing: Spearphishing Link (T1566.002)Phishing email lures the victim to a malicious site via a link rather than an attachmentQ7; Section 7
ExecutionUser Execution: Malicious Link (T1204.001)Social engineering urges the victim to actively click the linkQ7; Section 7
PersistenceAccount Manipulation: Device Registration (T1098.005)Actor uses the hijacked session to enroll an unauthorized host into Microsoft Entra ID, completes a rogue device registration, and binds a WHfB key credential to the compromised accountQ3, Q4, Q5 (centerpiece of this pack)
Defense EvasionValid Accounts: Cloud Accounts (T1078.004)Actor uses captured legitimate session tokens to bypass authentication controls without triggering password-based detectionQ1, Q2
Defense EvasionSocial Engineering: Email Spoofing (as mapped by Huntress)Actor modifies email header values to change the apparent identity of the senderSection 7 (native)
Credential AccessMulti-Factor Authentication Interception (T1111)A relay captures valid authentication artifacts as the victim accepts the MFA push promptQ1, Q2
Credential AccessAdversary-in-the-Middle (T1557)Actor sits between the victim and the authenticating service to hijack valid session tokens in real timeQ1, Q2
Credential AccessSteal Application Access Token (T1528)Actor intercepts and harvests legitimate session tokens for unauthorized M365 accessQ1
Command and ControlProxy: Multi-hop Proxy (T1090.003)Actor chains routing layers to hide the origin of malicious trafficQ6 (support-only)
Command and ControlHide Infrastructure (T1665)Actor masks operational servers behind trusted platforms, hijacked sites, and proxy networksSection 7; Q6
Persistence / Defense EvasionModify Authentication Process (T1556) — HuntPack addition, not in Huntress's tableWHfB key-credential binding repurposes a passwordless-auth feature as an attacker-controlled re-entry methodQ4, Q5, Q8
07

Native Audit-Log Hunts

The lure, redirect chain, and phishing page live entirely outside Falcon's telemetry surface. These native hunts cover that gap using the platforms that actually see them: Exchange Online / M365 Defender for the mail leg, and Microsoft Graph / Entra admin center for a direct audit-log review that does not depend on a LogScale connector being wired up yet.

Mail: self-spoofed lure + subject pattern (M365 Defender Advanced Hunting)

// Microsoft 365 Defender Advanced Hunting (KQL) -- self-spoofed lure subject
// Non-CQL: runs against EmailEvents in the M365 Defender / Sentinel portal, not Falcon LogScale
EmailEvents
| where Subject matches regex @"(?i)(signature required|lmportant|slgnature|verlvied).*ref[\s-]?id"
| where SenderFromAddress =~ RecipientEmailAddress
| project Timestamp, SenderFromAddress, RecipientEmailAddress, Subject, SenderIPv4

Entra sign-in UA fingerprint, Sentinel/Log Analytics variant

For organizations that also run Entra sign-in logs through Sentinel rather than (or alongside) Falcon LogScale, the same Q1 logic as a KQL starter:

// Microsoft Entra sign-in log KQL starter (Sentinel / Log Analytics) -- token-replay UA
// Non-CQL: adapt field names to your workspace schema before running
SigninLogs
| where UserAgent has_any ("python-requests/2.34.2", "OAuth2:Token")
| project TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, UserAgent, ResultType

Direct admin-center / Graph PowerShell audit pull

Usable immediately, with no SIEM connector required -- run this the same day this pack is deployed while the Falcon Entra connector is being validated:

# Entra ID device-registration + WHfB audit checklist (Microsoft Graph PowerShell)
# Non-CQL: run interactively by an admin with AuditLog.Read.All
Connect-MgGraph -Scopes "AuditLog.Read.All","Directory.Read.All"
Get-MgAuditLogDirectoryAudit -Filter "activityDisplayName eq 'Register device' or activityDisplayName eq 'Add device'" |
  Sort-Object ActivityDateTime -Descending | Select-Object ActivityDateTime, InitiatedBy, TargetResources

Get-MgAuditLogDirectoryAudit -Filter "activityDisplayName eq 'Add Windows Hello for Business credential'" |
  Sort-Object ActivityDateTime -Descending | Select-Object ActivityDateTime, InitiatedBy, TargetResources

Secure web gateway / proxy pivot

  • Grep proxy/SWG logs for the page title string Login - KNIGHT OFFICE in captured page titles or TLS SNI logs for idoej.com.
  • Grep for the Cloudflare Turnstile sitekey 0x4AAAAAADrkE-VuOnNDfr6W in any HAR captures or web-isolation logs -- a distinctive, low-FP fingerprint of this specific kit's phishing page.
  • Historical retro-hunt only: outbound clicks through a Monday.com tracking redirect immediately followed by a hit on a compromised Joomla site are worth a one-time historical pull, but the specific Joomla host Huntress observed was already taken down at publication time.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

This is an identity/SaaS-led hunt. Q1-Q6 and Q8 require Entra ID sign-in/audit logs ingested into Falcon LogScale (Identity Protection license + connector); only Q7 runs on standard endpoint sensor telemetry alone. SaaS/IdP field names and repo prefixes are parser-dependent per tenant — every identity query below carries an explicit NOTE: field unverified: validate in tenant line; confirm each against one live sample row before scheduling.

Q1 · Knight Office Token-Replay User-Agent Fingerprint
CONF HIGHFP LOWCOST LOW

Looks for: the two literal token-replay client strings Huntress observed (python-requests/2.34.2, OAuth2:Token) in Entra ID sign-in logs. FP: a dev-tenant automation account pinned to this exact library version is the only plausible false positive.

// HUNT: Knight Office Token-Replay User-Agent Fingerprint
// MITRE: T1528, T1550.001, T1557
// CONF: high  FP: low  COST: low | REQUIRES: repo=azure_signinlogs (Entra ID sign-in logs, Identity Protection / M365 connector)
// NOTE: field unverified: validate in tenant -- SaaS/IdP field names and repo prefix vary by connector; confirm against a live sample row
// FALSE POSITIVES: a first-party automation/CI job calling Graph or AAD endpoints with the Python `requests` library pinned to this exact version is rare but possible in a dev/test tenant
// TUNING: exclude documented service-principal/automation accounts that legitimately use python-requests against Graph, filtered by userPrincipalName
// LOOKBACK: 30d
userAgent = "python-requests/2.34.2" or userAgent = "OAuth2:Token"
| table([@timestamp, userPrincipalName, ipAddress, appDisplayName, clientAppUsed, userAgent, correlationId])
| sort(@timestamp, order=desc)
Q2 · Post-MFA Authentication Broker Sign-In Repeated From One Source
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: the callback-proxy pattern Huntress used to first catch this incident -- repeated post-MFA sign-ins to Microsoft Authentication Broker / OfficeHome from one IP across a short window. FP: legitimate travel, corporate VPN/NAT egress, or a shared branch-office IP will also cluster here -- triage against known-good egress ranges before acting.

// HUNT: Post-MFA Authentication Broker Sign-In Repeated From One Source (Callback-Proxy Pattern)
// MITRE: T1557, T1111, T1078.004
// CONF: medium  FP: medium  COST: low | REQUIRES: repo=azure_signinlogs
// NOTE: field unverified: validate in tenant -- confirm appDisplayName string values against a live sample row
// FALSE POSITIVES: legitimate travel, corporate VPN/NAT egress, a shared branch-office IP, or an approved third-party MDM broker
// TUNING: exclude known corporate VPN/NAT egress ranges once confirmed benign, e.g. !cidr(ipAddress, subnet=["203.0.113.0/24"])
// LOOKBACK: 30d
appDisplayName = "Microsoft Authentication Broker" or appDisplayName = "OfficeHome"
| groupBy([userPrincipalName, ipAddress], function=[count(as=Hits), collect(userAgent), collect(appDisplayName)], limit=1000)
| Hits >= 3
| sort(Hits, order=desc)
Q3 · Rogue Microsoft Entra Device Registration
CONF HIGHFP LOWCOST LOW

Looks for: the persistence step's first move -- a new device registered into Entra ID. FP: a legitimate Autopilot/Intune bulk-enrollment wave will also fire this; exclude the known enrollment service principal.

// HUNT: Rogue Microsoft Entra Device Registration
// MITRE: T1098.005
// CONF: high  FP: low  COST: low | REQUIRES: repo=azure_auditlogs (Entra ID Directory Audit logs)
// NOTE: field unverified: validate in tenant -- operationName/category strings and the targetResources.* path per Microsoft's Entra audit log activity reference; confirm against a live sample row
// FALSE POSITIVES: legitimate bulk device enrollment (Autopilot/Intune rollout) or a new-hire onboarding wave
// TUNING: exclude the known Intune/Autopilot enrollment service principal and any documented bulk-provisioning change window
// LOOKBACK: 30d
operationName = "Register device" or operationName = "Add device"
| table([@timestamp, "initiatedBy.user.userPrincipalName", "initiatedBy.user.ipAddress", "targetResources.displayName", correlationId])
| sort(@timestamp, order=desc)
Q4 · Windows Hello for Business Key Credential Bound Outside Baseline
CONF HIGHFP MEDIUMCOST LOW

Looks for: the centerpiece of this campaign -- a WHfB/passkey key credential added to an account. This is what survives password reset and token revocation. FP: legitimate first-time WHfB enrollment during scheduled onboarding.

// HUNT: Windows Hello for Business Key Credential Bound Outside Baseline
// MITRE: T1098.005, T1556
// CONF: high  FP: medium  COST: low | REQUIRES: repo=azure_auditlogs
// NOTE: field unverified: validate in tenant -- confirm the exact operationName string your connector emits for a WHfB/passkey credential add
// FALSE POSITIVES: legitimate first-time WHfB enrollment during scheduled onboarding, or a user-initiated self-service device reset
// TUNING: exclude WHfB credential adds inside the account's documented onboarding window that correlate to an Intune Autopilot enrollment record
// LOOKBACK: 30d
operationName = "Add Windows Hello for Business credential" or operationName = "User registered security info"
| table([@timestamp, "initiatedBy.user.userPrincipalName", "initiatedBy.user.ipAddress", "targetResources.userPrincipalName", correlationId])
| sort(@timestamp, order=desc)
Q5 · Correlated Persistence Chain -- Device Registration + WHfB Bind, Same Identity
CONF HIGHFP LOWCOST MEDIUM

Looks for: the single highest-fidelity signal in this pack -- Q3 and Q4 correlated on the same user inside one lookback window, exactly the sequence Huntress documented (register device → bind WHfB → sign in passwordlessly). FP: a change-managed device replacement performed by IT in the same window.

// HUNT: Correlated Persistence Chain -- Rogue Device Registration + WHfB Bind, Same Identity
// MITRE: T1098.005
// CONF: high  FP: low  COST: medium | REQUIRES: repo=azure_auditlogs; correlates Q3 and Q4 operation types on the same target user
// NOTE: field unverified: validate in tenant -- this assumes both operations resolve the same targetResources.userPrincipalName value; confirm on a sample pair before promoting to a scheduled search
// FALSE POSITIVES: a coordinated, change-managed device replacement/reimage performed by IT inside a documented window
// TUNING: exclude accounts with an open device-replacement change ticket at the time of the match
// LOOKBACK: 30d
defineTable(query={
    operationName = "Register device" or operationName = "Add device"
    | rename(field="targetResources.userPrincipalName", as=RegUser)
    | table([RegUser, @timestamp])
  }, name="rogue_device_regs", include=[RegUser, @timestamp])
| operationName = "Add Windows Hello for Business credential" or operationName = "User registered security info"
| rename(field="targetResources.userPrincipalName", as=RegUser)
| match(table="rogue_device_regs", field=RegUser, column=RegUser)
| table([RegUser, @timestamp, operationName])
| sort(@timestamp, order=desc)
Q6 · Tencent Cloud Replay-Infrastructure Correlation (Support Signal Only)
CONF LOWFP HIGHCOST MEDIUM

Looks for: sign-ins from Tencent Cloud's published coarse IP ranges. FP: extremely high on its own -- Tencent Cloud hosts huge numbers of legitimate SaaS/CDN tenants. Use only to corroborate a Q1/Q3/Q4 hit, never as a standalone trigger.

// HUNT: Tencent Cloud Replay-Infrastructure Correlation (Support Signal Only)
// MITRE: T1090.003, T1665
// CONF: low  FP: high  COST: medium | REQUIRES: repo=azure_signinlogs
// NOTE: field unverified: validate in tenant -- Falcon does not natively expose ASN on sign-in log ingest; the ranges below are first/second-octet hints from the primary source, not full CIDR blocks
// FALSE POSITIVES: extremely high -- Tencent Cloud hosts a large number of legitimate SaaS/CDN tenants; a hit here is not actionable on its own
// TUNING: AND this query's hits against Q1 (UA fingerprint) or Q3/Q4 (device/WHfB persistence) before triage -- never promote this pattern alone to a blocking IOA or Custom IOC
// LOOKBACK: 30d
ipAddress = "43.*" or ipAddress = "170.106.*" or ipAddress = "162.62.*" or ipAddress = "49.51.*"
| table([@timestamp, userPrincipalName, ipAddress, userAgent, appDisplayName])
| sort(@timestamp, order=desc)
Q7 · DNS Resolution of Known Knight Office Phishing Domains
CONF HIGHFP LOWCOST LOW

Looks for: the one genuinely endpoint-native signal in this pack -- a managed host resolving idoej[.]com or any of the 25 known .vu phishing domains. Standard Falcon sensor telemetry; no Identity Protection license required. FP: none expected -- these are single-purpose phishing domains.

// HUNT: DNS Resolution of Known Knight Office Phishing Domains
// MITRE: T1566.002, T1204.001
// CONF: high  FP: low  COST: low | REQUIRES: DnsRequest telemetry (standard Falcon sensor -- no Identity Protection license needed)
// FALSE POSITIVES: none expected -- these are single-purpose phishing domains named in the primary source
// TUNING: none required at FP low -- but re-validate this domain list at deploy time, phishing-kit landing domains commonly rotate within 30-90 days
// LOOKBACK: 30d
#event_simpleName = DnsRequest
| DomainName = /^(advancedplacyncement|amstardmzsmc|arandasoftzfdware|avisoretentiunionllc|capitalflwxinancialpartners|certififiycationedge|connectivnqzityltd|crrbcearegroup|digitaltrafwwrficsystems|exceltecbusinessbwpsolutions|genamewwgdiamarketing|globaieflsoftinc|globalmixeucbdmodetechnologyinc|globalprojectspvtltd|joinbusinessmanagementconsdjeulting|kentmanqhfufacturingcompany|kleepxrnlinecorporation|knsinternacshtional|monttmmlrustcompany|mtprormtductions|realestatecotblrp|siottxgroup|summitcapitaltrapojininggroup|techcompositnkoes|techromixsolutionlonsinc)\.vu$/i or DomainName = /^idoej\.com$/i
| table([@timestamp, aid, ComputerName, UserName, DomainName])
| sort(@timestamp, order=desc)
Q8 · Windows Hello for Business Pre-Auth Failure Fingerprint (Missing Device/NGC Key)
CONF HIGHFP LOWCOST LOW

Looks for: the exact failure Huntress documented -- two failed OAuth2 token-authentication attempts because the WHfB NGC key was not yet available, immediately preceding the successful WHfB bind. A very distinctive fingerprint of this attack's specific sequencing. FP: a legitimate WHfB provisioning race condition on a brand-new Autopilot-enrolled device, which self-resolves within minutes.

// HUNT: Windows Hello for Business Pre-Auth Failure Fingerprint (Missing Device/NGC Key)
// MITRE: T1556, T1098.005
// CONF: high  FP: low  COST: low | REQUIRES: repo=azure_signinlogs; failure/error-reason text field
// NOTE: field unverified: validate in tenant -- confirm the exact failureReason/error text your connector emits for a missing device key (commonly an AADSTS50155-class or AADSTS53003-class error); the substrings below are a starting point, not guaranteed verbatim
// FALSE POSITIVES: a legitimate WHfB provisioning race condition on a brand-new managed device during normal Autopilot enrollment, which self-resolves within minutes with no externally-sourced success afterward
// TUNING: exclude devices with an open Intune Autopilot enrollment ticket at the time of the failure
// LOOKBACK: 30d
failureReason like "*device key*" or failureReason like "*NGC*" or failureReason like "*strong auth*"
| table([@timestamp, userPrincipalName, ipAddress, userAgent, failureReason, correlationId])
| sort(@timestamp, order=desc)
09

CrowdStrike Custom IOA Recommendations

Honesty check: a classic Falcon Custom IOA is a host-based behavioral indicator (process tree pattern). Most of this hunt is identity/SaaS telemetry, which does not fit that model -- the right promotion path for those queries is an NG-SIEM Scheduled Search or Fusion SOAR workflow that raises an identity alert, not a host-based IOA that could trigger isolation. Only Q7 is a genuine endpoint Custom-IOA/Custom-IOC candidate.

QueryRecommended PathDeployment Notes
Q7 -- DNS to known .vu / idoej[.]com domainsCustom IOC (domain, block/detect)Genuine endpoint-native signal; safe to promote to a blocking Custom IOC once the domain list is validated against current resolution activity. Re-review the domain list every 30-90 days -- kit domains rotate.
Q1 -- Token-replay UA fingerprintNG-SIEM Scheduled Search → P2 identity alertHigh confidence, low FP -- safe to schedule hourly. Route to the identity/IR queue, not endpoint containment (there is no endpoint to isolate on the attacker side).
Q3, Q4 -- Rogue device reg / WHfB bind (individually)NG-SIEM Scheduled Search → P2Schedule daily; tune against the Intune/Autopilot enrollment service principal first to avoid onboarding-wave noise.
Q5 -- Correlated device+WHfB chainNG-SIEM Scheduled Search → P1, page on-callThis is the pack's highest-fidelity finding. A hit here should page identity/IR immediately and trigger the containment runbook (Section 14) -- do not wait for business hours.
Q8 -- NGC/device-key failure fingerprintNG-SIEM Scheduled Search → P2Pairs well with Q5 as a leading indicator; schedule daily.
Q2, Q6Investigate-onlyFP profile is too high to schedule as a standing alert. Keep as an on-demand pivot query analysts run when triaging a Q1/Q3/Q4/Q5 hit.
10

Machine-Readable IOC Appendix

All infrastructure IOCs below ship at action=detect / severity=high (not prevent/critical) per the second-source policy in Section 2 -- single-sourced to Huntress, 13 days post-disclosure. Every value traces to the saved source snapshot; see Section 18.

Falcon IOC Management CSVbulk import · 27 IOCs
type,value,action,severity,expiration,description,tags
domain,idoej.com,detect,high,2027-03-15,Knight Office AiTM operator console (reverse IP of 104.37.188.94),campaign:KnightOffice
ipv4,104.37.188.94,detect,high,2027-03-15,Knight Office AiTM operator console + rogue Entra device registration source,campaign:KnightOffice
domain,advancedplacyncement.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,amstardmzsmc.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,arandasoftzfdware.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,avisoretentiunionllc.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,capitalflwxinancialpartners.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,certififiycationedge.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,connectivnqzityltd.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,crrbcearegroup.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,digitaltrafwwrficsystems.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,exceltecbusinessbwpsolutions.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,genamewwgdiamarketing.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,globaieflsoftinc.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,globalmixeucbdmodetechnologyinc.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,globalprojectspvtltd.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,joinbusinessmanagementconsdjeulting.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,kentmanqhfufacturingcompany.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,kleepxrnlinecorporation.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,knsinternacshtional.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,monttmmlrustcompany.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,mtprormtductions.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,realestatecotblrp.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,siottxgroup.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,summitcapitaltrapojininggroup.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,techcompositnkoes.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
domain,techromixsolutionlonsinc.vu,detect,high,2027-03-15,Knight Office phishing landing domain,campaign:KnightOffice
Behavioral Signatureshunt / correlate
# Knight Office -- behavioral / non-atomic signatures (not bulk-importable; hunt or correlate manually)
Email self-spoof: From header == To/recipient header == Return-Path header (all three match the victim's own address)
Lure subject regex: (?i)(signature required|approval pending|ref[\s-]?id|lmportant|slgnature|verlvied)
Phishing page title: Login - KNIGHT OFFICE
Cloudflare Turnstile sitekey: 0x4AAAAAADrkE-VuOnNDfr6W
Token-replay User-Agent: python-requests/2.34.2
Token-replay User-Agent literal string: OAuth2:Token
WHfB device-registration client string: Dsreg/10.0 (Windows 10.0.19044.1826)
Lure sender IP (single example case, not for standalone blocking): 154.127.53.78
Residential callback-proxy first hop (redacted by source, partial): 73.125.13.x (Comcast Cable / Spur-flagged proxy resale)
Token-replay hosting ranges (too broad to block -- correlation only): Tencent Cloud 43.x / 170.106.x / 162.62.x / 49.51.x
Named Tooling / Kit Fingerprintcontext
# Knight Office -- operator console / kit fingerprint
Console page title: Login - KNIGHT OFFICE
Backend stack: Python Flask + Flask-WTF
Bot-filtering front end: Cloudflare Turnstile (sitekey 0x4AAAAAADrkE-VuOnNDfr6W)
TLS: self-signed certificate observed on the operator console
Console features advertised: "Capture & Management from Single place", "Webmail access & auto-refresh",
  "Deploy custom links", "Real-time visitor statistics"
Related/sibling PhaaS kits (different infrastructure -- do not merge IOCs): EvilTokens, Kali365 / Octopi365
Entra/M365 Audit ChecklistGraph PowerShell
# Entra ID / M365 hardening spot-check -- run in order, all read-only
# 1) Is device-code flow still allowed org-wide?
Get-MgIdentityConditionalAccessPolicy | Where-Object { $_.Conditions.ClientAppTypes -contains "all" } |
  Select-Object DisplayName, State

# 2) Who can register/join devices to Entra ID without restriction?
Get-MgPolicyDeviceRegistrationPolicy | Select-Object AzureADJoin, AzureADRegistration

# 3) List WHfB/passkey credentials added in the last 30 days, newest first
Get-MgAuditLogDirectoryAudit -Filter "activityDisplayName eq 'Add Windows Hello for Business credential'" |
  Where-Object { $_.ActivityDateTime -gt (Get-Date).AddDays(-30) } |
  Sort-Object ActivityDateTime -Descending | Select-Object ActivityDateTime, InitiatedBy, TargetResources

# 4) Is token protection (device-bound tokens) enforced on any Conditional Access policy?
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, SessionControls
11

Detection Validation Gates

GateWhat To ConfirmStatus
Telemetry readyEntra ID sign-in + audit logs are flowing into Falcon LogScale (Identity Protection connector active); Falcon sensor DnsRequest telemetry is enabled fleet-wideConfirm in tenant before deploying Q1-Q6, Q8
Benign baselineRun Q3/Q4 over a 30-day lookback first and manually tag every hit as Autopilot/Intune-managed vs. unmanaged before scheduling -- this builds the exclusion list Q3/Q4/Q5's TUNING lines assumeRequired, one-time
Positive testNo safe, non-destructive way to generate a true Knight Office WHfB-persistence event in a test tenant. Substitute: manually register a test device + WHfB credential on a throwaway test account and confirm Q3/Q4/Q5 all fire on itRecommended before go-live
Promotion criteriaQ5 promotes to a paging P1 only after the benign baseline above shows <1 false positive per week in the pilot tenantGate before P1 paging
IOC provenanceEvery atomic IOC in Section 10's Falcon IOC CSV traces to the saved Huntress source snapshot (see Section 2 / Section 18) -- mechanically enforced by check_ioc_provenance.py at build timePassed at build
Second-sourceNo independent corroboration of atomic infrastructure IOCs yet (13 days post-disclosure) -- all infra IOCs therefore ship at detect/high, not prevent/critical, per policyRe-check in 30 days; upgrade to prevent/critical only after a second source appears
12

Hardening — Tiered

Immediate (this week)
  • Block or tightly restrict the OAuth device-code flow via Conditional Access, with narrow named exclusions only where operationally required. Microsoft's own guidance (echoed across every device-code phishing kit Huntress has profiled) is "get as close as possible to a unilateral block." Mitigation: MITRE M1032 (Multi-factor Authentication) / M1042 (Disable or Remove Feature or Program). Verify: the Entra/M365 Audit Checklist item 1 in Section 10.
  • Restrict who can register/join devices to Entra ID to an admin-approved group rather than "All users." A rogue device registration is the first move of this campaign's persistence chain (T1098.005). Mitigation: M1018 (User Account Management). Verify: Entra/M365 Audit Checklist item 2.
  • Alert on every new WHfB/passkey credential addition for 30 days while the Q3-Q5 baseline is being built (Section 11) -- this is a low-volume event in most tenants and a manual daily review is viable immediately, before the scheduled search is tuned. Mitigation: M1047 (Audit). Verify: Entra/M365 Audit Checklist item 3.
Near-term (1-4 weeks)
  • Enable Entra ID token protection (device-bound / Continuous Access Evaluation) on Conditional Access policies covering Exchange Online and SharePoint Online. Token protection binds the session token to the issuing device, which directly defeats the reverse-proxy replay this kit depends on -- it is the single most direct technical countermeasure to Knight Office's core mechanism. Mitigation: M1032. Verify: Entra/M365 Audit Checklist item 4; pilot on an IT ring first (⚠ best-practice, no formal CIS/MS-Baseline control number yet published for this specific feature as of this pack's date -- treat as a strong vendor-recommended control).
  • Move high-value accounts to phishing-resistant MFA (FIDO2 security keys or certificate-based auth) instead of push/OTP MFA. Push-based MFA is exactly what this kit relays through the AiTM proxy; FIDO2's origin-binding cannot be relayed the same way. Mitigation: M1032. Verify: Entra ID > Authentication methods policy, confirm FIDO2 is enabled and targeted at privileged roles.
  • Anti-phishing / impersonation policies for self-spoofing in Exchange Online Protection -- specifically detect a message whose From, To, and Return-Path all resolve to the same internal recipient address, which is not a pattern a legitimate email ever produces. Mitigation: M1047 / EOP anti-phishing policy tuning (no formal CIS benchmark line item; vendor best-practice). Verify: a test self-spoofed message to a disposable mailbox is quarantined.
Strategic (1-3 months)
  • Formal device-compliance gating on Conditional Access for all sensitive apps (require hybrid-joined or compliant device), so a rogue unmanaged device registration cannot by itself satisfy sign-in requirements even if the WHfB bind succeeds. Mitigation: M1032 / M1018. Architectural change -- requires Intune compliance baseline coverage across the fleet first.
  • Quarterly Entra device + authentication-method attestation review: a recurring, change-managed audit reconciling every registered device and every WHfB/passkey credential against an authoritative asset inventory (not just a point-in-time alert response). Mitigation: M1047. Budget/process change, not a technical control.
  • Security awareness refresh targeting this specific lure family (self-spoofed "from yourself" emails, device-code "enter this code at microsoft.com" prompts) -- device-code phishing specifically relies on a legitimate-looking Microsoft prompt that most existing phishing training does not cover. Mitigation: M1017 (User Training).
13

Deployable Playbooks

All three playbooks below are read/write Graph PowerShell against Entra ID -- no endpoint agent, GPO, or registry change is involved, since this campaign's decisive control point is identity, not the endpoint.

Playbook 1: Restrict device-code flow

# Playbook 1 -- Restrict device-code flow via Conditional Access (Graph PowerShell)
# Prerequisites: Global Administrator or Conditional Access Administrator role; Microsoft.Graph PowerShell SDK installed
# Reboot required: No
# Rollback: Set the policy State back to "disabled" (see rollback command at bottom) -- reversible in seconds, no data loss

Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"

$params = @{
    DisplayName = "Block Device Code Flow - Knight Office response"
    State = "enabledForReportingButNotEnforced"   # start in report-only, then flip to "enabled" after a 1-week pilot
    Conditions = @{
        ClientAppTypes = @("all")
        Applications = @{ IncludeApplications = @("All") }
        Users = @{ IncludeUsers = @("All"); ExcludeGroups = @("<break-glass-and-documented-exception-group-id>") }
        Authentication = @{ AuthenticationFlows = @{ TransferMethods = "deviceCodeFlow" } }
    }
    GrantControls = @{ Operator = "OR"; BuiltInControls = @("block") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

# Rollback:
# Update-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId <id> -State "disabled" 

Playbook 2: Restrict Entra device registration

# Playbook 2 -- Restrict Entra device registration to an admin-approved group
# Prerequisites: Global Administrator role; a pre-created "Approved Device Enrollers" security group
# Reboot required: No
# Rollback: revert AzureADJoin/AzureADRegistration back to "all", documented below -- reversible, no data loss

Connect-MgGraph -Scopes "Policy.ReadWrite.DeviceConfiguration"

$policy = Get-MgPolicyDeviceRegistrationPolicy
Update-MgPolicyDeviceRegistrationPolicy -DeviceRegistrationPolicyId $policy.Id -BodyParameter @{
    AzureADJoin = @{ AllowedState = "restricted"; AllowedGroups = @("<approved-device-enrollers-group-id>") }
    AzureADRegistration = @{ AllowedState = "restricted"; AllowedGroups = @("<approved-device-enrollers-group-id>") }
}

# Rollback:
# Update-MgPolicyDeviceRegistrationPolicy -DeviceRegistrationPolicyId $policy.Id -BodyParameter @{
#     AzureADJoin = @{ AllowedState = "all" }; AzureADRegistration = @{ AllowedState = "all" }
# }

Playbook 3: Enable token protection (pilot ring)

# Playbook 3 -- Enable Entra ID token protection (device-bound sessions) on a pilot Conditional Access policy
# Prerequisites: Microsoft Entra ID P2, Conditional Access Administrator role, a pilot ring group
# Reboot required: No (client-side, transparent re-auth on next token refresh for pilot users)
# Rollback: remove the SignInTokenProtection session control from the policy -- reversible; pilot users simply
#           lose the device-binding requirement on next sign-in, no account lockout risk

Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"

$params = @{
    DisplayName = "Pilot - Token Protection for Exchange/SharePoint - Knight Office response"
    State = "enabled"
    Conditions = @{
        Applications = @{ IncludeApplications = @("Office365") }
        Users = @{ IncludeGroups = @("<pilot-ring-group-id>") }
    }
    SessionControls = @{ SignInTokenProtection = @{ IsEnabled = $true } }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

# Rollback:
# Update-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId <id> -SessionControls @{ SignInTokenProtection = @{ IsEnabled = $false } }
14

Containment Runbook

Critical sequencing note: for this campaign, revoking sessions and resetting the password before removing the rogue device and WHfB credential does NOT evict the attacker -- they simply sign back in passwordlessly via WHfB. Eradication must happen before (or atomically with) the standard "reset and revoke" response.

PhaseActionsOwnerEvidence to Preserve
IsolateDisable the affected user account sign-in (do NOT yet revoke sessions or reset password). Snapshot current Entra device registrations and authentication methods for the account before touching anything.Identity/IR on-callExport of Get-MgUserRegisteredDevice and Get-MgUserAuthenticationMethod for the account, timestamped
Eradicate1) Remove the rogue/unrecognized device from the account's registered devices. 2) Delete the unauthorized WHfB/passkey key credential. 3) THEN revoke all refresh tokens / sign-in sessions. 4) THEN force a password reset. 5) Review and remove any other authentication methods added in the same window (Q4/Q5 hit list).Identity/IR on-callBefore/after diff of registered devices and authentication methods; the specific operationName/timestamp of the removed entries
RecoverRe-enroll the user's legitimate device(s) through the normal, verified onboarding path. Require re-registration of MFA under supervised/verified conditions (video call or in-person), not a self-service link. Confirm no other accounts share a device/WHfB registration pattern from the same source IP (pivot with Q3/Q5 grouped by IP).Identity/IR + HelpdeskNew enrollment confirmation; sweep results across the tenant for related accounts
Post-incidentAdd the account to the 30-day heightened-monitoring list (Section 11 benign-baseline exclusions get revisited for this account). Feed the specific redirect/domain/proxy indicators observed into the Falcon IOC CSV (Section 10) if not already present. Brief the user on the self-spoofed lure pattern.Identity/IR leadUpdated IOC CSV; closed-loop note in the ticket (Section 16)
15

Detection Coverage Map

TechniqueBehaviorCQLIOA / Scheduled SearchCoverage
T1608.005 / T1566.002 / T1204.001Lure email + redirect chainNone (mail-side)Section 7 native hunt onlyGAP -- no Falcon EDR visibility
T1557 / T1111 / T1528 / T1078.004AiTM token theft & replayQ1, Q2, Q6Q1 → Scheduled Search P2Good (requires Identity Protection connector)
T1098.005Rogue Entra device registrationQ3, Q5Q3 → P2; Q5 → P1 pageGood -- centerpiece coverage
T1098.005 / T1556WHfB key-credential persistence bindQ4, Q5, Q8Q4 → P2; Q5 → P1 pageGood -- centerpiece coverage
T1090.003 / T1665Replay/proxy infrastructureQ6Investigate-onlyPartial -- support signal, high FP alone
T1566.002 (domain sighting)Endpoint resolves known phishing domainQ7Q7 → Custom IOC blockGood -- genuine endpoint-native coverage
-- (local WHfB/NGC enrollment on victim endpoint)Attacker enrolls their OWN device, not the victim'sNone possibleNoneGAP -- structurally invisible to victim-endpoint EDR by design of the attack

Telemetry-ready and benign-baseline validation gates for every query above are detailed in Section 11; the second-source/provenance status of every shipped IOC is detailed in Section 2 and enforced mechanically at build time.

16

Hunt Summary Ticket

TITLE: Knight Office -- M365 AiTM Token Theft + Entra ID / WHfB Persistence Hunt
SEVERITY: High (active campaign; persistence survives password reset and token revocation)
SCOPE: Microsoft Entra ID sign-in + audit logs (tenant-wide); Falcon endpoint DNS telemetry (fleet-wide)
HYPOTHESIS: Knight Office AiTM phishing has captured M365 session tokens and used at least one to register
  a rogue Entra ID device and bind a Windows Hello for Business key credential, giving the operator
  passwordless re-entry that a standard password-reset/token-revoke response will not remove.
QUERIES: Q1-Q8 (Section 8); native mail/audit hunts (Section 7)
DO FIRST: Run Q3, Q4, and Q5 over a 30-day lookback and manually triage every hit against known
  device-enrollment records BEFORE scheduling anything -- this is the centerpiece finding and the
  one most worth a human look on day one.
FINDINGS: [fill in after first run -- list any Q3/Q4/Q5 hits with no matching Autopilot/Intune record]
GAPS: Mail/redirect-chain leg and the phishing page itself are invisible to Falcon EDR (Section 5, 15).
  Attacker's own rogue-device enrollment cannot be seen from the victim endpoint by design.
ACTIONS: If Q5 fires, invoke the Containment Runbook (Section 14) in the documented order --
  eradicate device/WHfB BEFORE revoke/reset, not after.
OWNER: Identity/IR on-call
VERSION: v0.1 -- 2026-09-15
17

Changelog

v0.12026-09-15Initial draft release. Built from the Huntress primary-source disclosure (2026-09-02) plus Microsoft Entra audit-log activity reference; 8 CQL hunt queries covering token-replay, rogue device registration, and WHfB persistence; 27 atomic IOCs shipped at detect/high pending a second independent source.
18

References

TierSourceUsed ForAccess Date
Tier 1 -- PrimaryHuntress -- "Inside Knight Office, a New M365 AiTM Phishing Kit" (published 2026-09-02)Attack chain, all atomic IOCs, MITRE mapping, campaign-scale statistics2026-09-15
Tier 2 -- Vendor backgroundHuntress -- "Inside Kali365, a Device Code Phishing Ecosystem"Device-code-flow hardening recommendation; UA/ASN hunting pattern shape (no IOCs carried over -- different campaign)2026-09-15
Tier 1 -- Vendor docsMicrosoft Learn -- Microsoft Entra audit log activity referenceCanonical operationName strings for device registration and WHfB credential events (Q3-Q5, Section 7)2026-09-15
itsecurityguru.org coverage of the same story (URL located via search, not cited)Not used -- HTTP 403 (Cloudflare bot-challenge) on every fetch attempt; no snapshot could be savedAttempted 2026-09-15

Full verbatim source snapshots (fetched 2026-09-15) are archived alongside this pack in KnightOffice-M365-AiTM-Hunt-sources/: 01-huntress-knight-office.txt, 02-huntress-kali365-context.txt, 03-msft-entra-audit-activities.txt.

Generated: 2026-09-15 · HuntPack v0.1 (Draft) · Author: HuntPack