Postmortem: How a Phish Exploited a Cascade of Weak Signals
A newly registered domain, permissive SPF, and a generic cloud IP address combined to bypass standard filters, landing a credential phish in an executive's inbox.

The alert was mundane. A user-reported phish, another credential harvesting attempt aimed at an executive. The link, a plausible-looking SharePoint impersonation, was already dead. Case closed, right? Not quite. The real question wasn't what the phish was, but why it landed in the inbox in the first place.
This wasn't a sophisticated zero-day or a complex bypass of authentication protocols. It was the opposite. Every individual security signal, viewed in isolation, was weak but technically passing. There was no single smoking gun. The SPF record checked out. The sending IP wasn't on a blocklist. Yet, the combination of these 'okay' signals created a high-risk event that sailed right past automated defenses.
This postmortem unpacks that failure. It's a story about the danger of relying on checklists and the critical importance of correlating context in email security analysis. The attacker won not by breaking the rules, but by following them just enough.
The Initial Triage: Green Lights on a Malicious Payload
When the SOC analyst first picked up the ticket, the initial indicators from the email headers looked deceptively benign. The target was the CFO. The email purported to be a file-sharing notification from Microsoft, a common and effective lure. The from address was `notifications@secure-docdelivery[.]com`, a domain that, on its own, doesn't scream 'evil'.
The first step in any email investigation is to check the authentication results. Did the sender prove they were who they claimed to be? This is the core promise of standards like SPF, DKIM, and DMARC. In this case, the `Authentication-Results` header provided a very misleading picture of safety.
Authentication-Results: mta.examplecorp.com; spf=pass (sender IP is 54.240.8.23) smtp.mailfrom=notifications@secure-docdelivery.com; dkim=none; dmarc=none (p=none)
Why SPF 'Passed'
The `spf=pass` verdict is the first trap. As defined in RFC 7208, Sender Policy Framework (SPF) allows a domain owner to publish a list of IP addresses authorized to send email on its behalf. When our mail server received this email, it checked the SPF record for `secure-docdelivery[.]com`, saw the sending IP (54.240.8.23) was on the authorized list, and stamped it with a 'pass'.
The problem? The attacker was using Amazon Simple Email Service (SES). Their SPF record was likely `v=spf1 include:amazonses.com -all`. This is a perfectly valid configuration. The IP belongs to Amazon, and the SPF record delegates permission to Amazon. The pass is technically correct but contextually useless. The check verifies that Amazon sent the email, not that the *tenant using Amazon* is legitimate.
The 'Clean' but Anonymous Sending IP
The second trap was the IP reputation. The address, 54.240.8.23, is part of a massive AWS IP block. It has a neutral-to-positive reputation because it's used by thousands of legitimate businesses for everything from marketing newsletters to transactional receipts. It will never appear on a standard IP blocklist unless there's catastrophic, widespread abuse from that specific address.
Relying on the IP reputation of a major cloud provider is like judging a single apartment resident by the cleanliness of the entire skyscraper's lobby. It tells you nothing meaningful. For attackers, these platforms are a form of reputation laundering. They can burn through accounts and IPs, always staying one step ahead of reputation-based blocking.
Hidden in Plain Sight: The Domain's Shady Origins
The real story of this phish wasn't in the authentication headers. It was in the metadata of the domain itself. The passing SPF and clean IP were distractions. An experienced analyst knows that the most powerful indicators are often the ones that require an extra query, the ones that automated scanners frequently miss.
Domain Age: The Loudest Quiet Signal
A quick WHOIS lookup on `secure-docdelivery[.]com` revealed the truth: the domain was registered two days before the attack. This is perhaps the single most potent indicator of malicious intent for a domain masquerading as a corporate service. Legitimate businesses do not launch services on domains registered 48 hours ago. They have history, procurement processes, and established infrastructure.
Attackers, on the other hand, operate on a burn-and-churn model. They register dozens of lookalike or plausible-sounding domains, use them for a short, aggressive campaign, and then discard them once they are blocked or burned. A domain age of less than 30 days, especially when paired with a generic email service provider, should immediately elevate an email's risk score to critical.
The Missing Authentication Layers
Look back at the header snippet. Notice `dkim=none` and `dmarc=none`. The attacker didn't bother setting up DKIM (DomainKeys Identified Mail, RFC 6376), which would have cryptographically signed the message. More importantly, they didn't publish a DMARC record (Domain-based Message Authentication, Reporting, and Conformance, RFC 7489).
DMARC connects SPF and DKIM to the 'From' address the user actually sees, preventing spoofing. The absence of a DMARC record, especially a strict one (`p=reject`), is a signal in itself. It tells you the domain owner has not committed to an anti-spoofing policy. For a two-day-old domain, this isn't surprising—it's confirmatory evidence. They have no reputation to protect and no intention of building one.
The Uncategorized Domain: A Bet on Anonymity
Beyond authentication and age, there's another crucial data point that many security stacks underutilize: domain categorization. Every major security vendor maintains a database that sorts websites into categories like 'News', 'Finance', 'Social Media', or, importantly, 'Malware' and 'Phishing'.
When a domain is brand new, it has no history. It hasn't been crawled, analyzed, or visited by enough users to be placed in any category. It exists in a state of digital anonymity. Its category is, simply, 'Uncategorized'.
An 'Uncategorized' domain isn't a neutral signal; it's a risk factor. It signifies a lack of history, and in the world of email security, history is trust.
Many email gateways and web filters treat 'Uncategorized' domains permissively. They don't want to block a legitimate new business or website. Attackers know this and exploit it mercilessly. The entire lifecycle of their phishing domains is designed to exist within this 'uncategorized' window. They register the domain, launch the attack, and achieve their objective before categorization engines can catch up and flag the domain as malicious.
Your security policy should reflect this reality. An email from an 'Uncategorized' domain that is also newly registered and contains a hyperlink should not be treated as routine. It warrants, at minimum, aggressive sandboxing and link detonation. A better policy might be to quarantine such messages by default, pending analyst review.
A Playbook for Composite Reputation Analysis
The lesson from this incident is clear: relying on a single indicator, especially a simplistic `pass/fail` verdict from SPF, is a recipe for failure. Effective triage requires building a composite picture of risk from multiple, sometimes conflicting, signals. It's about synthesis, not a checklist.
Step 1: Ingest All The Signals, Not Just the Easy Ones
An effective triage workflow must automate the collection of a broader set of data points for any suspicious inbound email. Don't stop at the `Authentication-Results` header. Your process, whether manual or automated, must pull:
First, full authentication data, including not just the SPF/DKIM/DMARC verdicts but the *reasons* for them. Was SPF `pass` because of a direct IP match or a broad `include` mechanism? Was DMARC absent or set to `p=none`? Second, domain metadata, primarily the registration date (domain age). Third, sender infrastructure data, such as the ASN of the sending IP. Is it a dedicated server or a massive cloud provider? And finally, web reputation signals like domain categorization.
Step 2: Think in Weights, Not Binary Verdicts
Instead of a binary good/bad judgment, assign a mental risk weight to each signal. This allows you to build a more nuanced picture.
Consider the weights for this incident: SPF `pass` via AWS SES is a very low-risk signal, almost noise. 'Clean' IP reputation from AWS is also a very low-risk signal. But a domain age of two days is a high-risk signal. The 'Uncategorized' domain category is a medium-to-high risk signal. And the lack of a DMARC record is a medium-risk signal. When you sum these weights, the picture flips from 'mostly okay' to 'extremely suspicious'. The low-risk signals are vastly outweighed by the high-risk ones.
The takeaway
This phishing attempt succeeded initially not because of its technical brilliance, but because of our own analytical shortcuts. It exploited the gaps between individual security controls, knowing that a system looking at any single piece would see nothing definitively wrong. The passing SPF record was a deliberate distraction, drawing the analyst's eye away from the far more telling evidence of the domain's youth and anonymity.
The operational takeaway is to stop treating email triage as a sequential checklist. It's a process of data fusion. You must automate the enrichment of inbound messages with these composite signals. Your analysts' time is too valuable for manual WHOIS queries and IP lookups on every alert. This is why platforms that automatically correlate signals like domain age, ASN data, and DMARC posture are so critical. An analyst using a tool like MailSleuth.AI would see these correlated risks on a single screen, turning a 15-minute investigation into a 30-second verdict.
We dissect phishing campaigns and email infrastructure so you don't have to.


