8.4 KiB
Cascades Tucson — Spoofed Email Hunt
Date: 2026-04-21
Tenant: Cascades of Tucson (cascadestucson.com, 207fa277-e9d8-4eb7-ada1-1064d2221498)
Subject: Tenant-wide email spoofing posture (inbound + domain authentication)
Tool: Remediation-tool skill (public-DNS only — see Gaps)
Scope: READ-ONLY
Analyst: Howard Enos (ACG-Tech03L)
Summary
- Public domain-auth posture is largely solid. SPF is strict (
-all), DKIM publishes both M365 selectors, DMARC is atp=quarantine; pct=100. - One real finding: DMARC aggregate + forensic reports route to
info@cascadestucson.com— an internal mailbox. No third-party DMARC aggregator is parsing failures. We have zero visibility into who is trying to spoof this domain. - Lookalike domain landscape is clean for common variants (no A records on
cascadetuscon.com,cascadestuscon.com,cascadestucson.co/.net/.org,cascades-tucson.com). Worth a deeper scan if concern warrants. - Inbound-side hunt is BLOCKED — Cascades is only consented to the deprecated app (
fabb3421), and the new tiered-app secrets are missing from Howard's local vault. Cannot run message trace, anti-phishing policy review, transport-rule audit, or quarantine review without one of: (a) syncing the new app secrets from Mike's vault, or (b) consenting Security Investigator in Cascades. - SPF includes one non-Microsoft IP (
72.194.62.5) — identified asix.azcomputerguru.com(our own iXsystems host). Authorized, not a finding.
Target details
| Field | Value |
|---|---|
| Domain | cascadestucson.com |
| Tenant ID | 207fa277-e9d8-4eb7-ada1-1064d2221498 |
| M365 base domain | NETORGFT4257522.onmicrosoft.com |
| MX | cascadestucson-com.mail.protection.outlook.com (M365 only) |
| App suite status | Old app only (fabb3421); tiered suite not consented |
Per-check findings
1. SPF
v=spf1 ip4:72.194.62.5 include:spf.protection.outlook.com -all
- Mechanism: strict
-all(hard fail) — correct posture. - Authorized senders: M365 (
spf.protection.outlook.com) + one explicit IP72.194.62.5. - 72.194.62.5 identification: rDNS
ix.azcomputerguru.com, ARIN blockNETBLK-PH-CBS-72-194-48-0(Cox Business). This is ACG's own ix-server — presumably used for on-prem scan-to-email or a mail relay for Cascades. Not a finding. - No third-party SPF includes (no MailChimp, Constant Contact, HubSpot, etc.). Clean.
2. DKIM
selector1._domainkey.cascadestucson.com->selector1-cascadestucson-com._domainkey.NETORGFT4257522.onmicrosoft.com(M365 standard).selector2._domainkey.cascadestucson.com->selector2-cascadestucson-com._domainkey.NETORGFT4257522.onmicrosoft.com(M365 standard).- Both DKIM selectors are published. Can't confirm Exchange is actually signing without Exchange access (
Get-DkimSigningConfig— blocked, see Gaps). Publish state is a prerequisite but not proof of enforcement.
3. DMARC
v=DMARC1; p=quarantine; pct=100; rua=mailto:info@cascadestucson.com; ruf=mailto:info@cascadestucson.com; ri=86400; fo=1;
| Tag | Value | Assessment |
|---|---|---|
p |
quarantine | Acceptable — quarantines failures. reject is stronger but higher-risk to deploy without monitoring. |
pct |
100 | Full enforcement — good. |
rua |
info@cascadestucson.com | FINDING — aggregate reports go to an internal mailbox. No one is parsing them. |
ruf |
info@cascadestucson.com | FINDING — forensic reports (full failing messages) go to an internal mailbox. Privacy/noise risk + no analysis. |
ri |
86400 (24h) | Standard reporting interval. |
fo |
1 | Forensic generated on ANY SPF/DKIM fail — aggressive, OK for investigation. |
sp |
(unset) | Subdomain policy inherits from p — acceptable. |
adkim/aspf |
(unset, relaxed default) | Acceptable. |
Subdomain DMARC: no subdomain-specific record observed at _dmarc.sub.cascadestucson.com, so subdomain behavior falls back to the org policy — fine.
4. Lookalike-domain quick scan
No A records for any of these obvious variants:
| Candidate | Status |
|---|---|
| cascadetuscon.com | no A record |
| cascadestuscon.com | no A record |
| cascadestucson.co | no A record |
| cascadestucson.net | no A record |
| cascadestucson.org | no A record |
| cascades-tucson.com | no A record |
Not exhaustive — a proper lookalike hunt would also check registrations without A records (squatters parking domains), homoglyphs (Cyrillic "а", "ᴄ"), and newly-registered variants. Not done in this pass.
5. Inbound spoofing attempts — BLOCKED (see Gaps)
Needed but not collected (require Exchange Online access):
- Message trace for last 7–30 days filtering on
SenderAddressmatching internal-spoofing patterns (same domain, but from external IP). - Anti-phishing policy review — spoof intelligence enabled? Impersonation protection configured for executives (Meredith, etc.)?
- Quarantine review — currently-quarantined messages tagged as spoofing.
- Transport rules — any rule bypassing SCL/anti-phish for specific senders (a known attacker persistence technique).
- Accepted domains — verify no unauthorized domains added as internal.
- Connection filter policy — any IPs improperly on the Allow list.
- Defender for O365 alerts (if licensed) — MDO spoof detections.
Suspicious items (from public data)
- DMARC reports are a blind spot.
rua=mailto:info@cascadestucson.commeans aggregate reports from every receiver on the internet are flowing into the same mailbox Cascades uses for external-facing communication — nobody is aggregating them. If someone is actively spoofing cascadestucson.com at scale, we'd have no idea unless a user happened to read those XML attachments. High-leverage fix — pointrua(and optionallyruf) at a DMARC aggregator (dmarcian, EasyDMARC, Valimail — all have free tiers for small-volume domains).
Gaps — checks not completed
All inbound / Exchange-side checks are blocked by tooling state:
- Cascades is not onboarded to the new app suite. Per
references/tenants.md(rowcascadestucson.com): "Old app only; IdentityRiskyUser not consented". Tiered Security Investigator never got consent in this tenant. - Even if consented, Howard's vault is missing the new-suite client secrets. Expected at
D:/vault/msp-tools/computerguru-security-investigator.sops.yaml— file does not exist. These secrets live in Mike's vault (DESKTOP-0O8A1RL) and have not been committed/synced to the shared vault repo. - The old app (
fabb3421) IS consented in Cascades and its secret IS present atD:/vault/msp-tools/claude-msp-access-graph-api.sops.yaml. Howeverget-token.shhas no tier mapping for the old app (intentional — it's deprecated). Using it would require a one-off script. The remediation-tool design explicitly pushes toward migrating off it.
Recommended unblock (pick one):
- Option A (preferred): Mike commits/pushes new-suite SOPS files from his vault to the shared vault repo, then Howard pulls. Enables running this hunt on ANY tenant from Howard's box going forward.
- Option B: Consent Security Investigator in Cascades now (send Global Admin the consent URL below), then Option A is still needed to acquire a token on Howard's box.
Security Investigator consent URL for Cascades:
https://login.microsoftonline.com/207fa277-e9d8-4eb7-ada1-1064d2221498/adminconsent?client_id=bfbc12a4-f0dd-4e12-b06d-997e7271e10c&redirect_uri=https://azcomputerguru.com&prompt=consent
Next actions
- Decision on unblock path — Howard to coordinate with Mike on vault sync (Option A above). Blocks full inbound hunt.
- DMARC reporting fix — update
_dmarc.cascadestucson.comTXT record to routerua(andruf) at a DMARC aggregator. Pending client approval. Requires DNS access at cascadestucson.com registrar. Est. 15 min. - Deeper lookalike-domain scan — out of scope for this pass; consider running dnstwist or a registrar monitoring service if spoofing pressure is elevated.
- Once unblocked, re-run with: message trace last 30d for
cascadestucson.comspoofing indicators, anti-phishing policy inventory, transport rules, quarantine review, Defender alerts (if MDO licensed).
Remediation actions
None taken. This pass was read-only / public-DNS only.
Data artifacts
No raw JSON produced (tokens were not acquired). DNS lookups are reproducible from the commands in the Per-check findings section.