← Back to Portfolio XAVIER RICHERT GRC Portfolio · Item 01 · 2026
GRC Portfolio — Write-up #01

Phishing Campaign Analysis
& GRC Control Gap Assessment

Detection, technical decomposition, and governance response for a credential-harvesting phishing attempt targeting a mid-size organisation's finance department. Findings mapped to ISO 27001, NIST CSF, and GDPR Article 32.

Author
Xavier Richert
Date
March 2026
Environment
Home lab / simulated dataset
Credential
ISC² CC (2026, 80%)
Classification
Portfolio — Public
Executive Summary

A simulated phishing email targeting the finance department of a mid-size organisation was intercepted and analysed. The message impersonated the organisation's internal IT helpdesk and attempted to harvest Microsoft 365 credentials via a spoofed login page. Technical analysis identified four distinct indicators of compromise. The incident exposed three governance control gaps: absent SPF/DMARC enforcement, no mandatory phishing simulation programme, and an incomplete Data Breach Response procedure. Risk is rated High. Five prioritised recommendations are provided with framework mapping.

01

Scenario & Scope

This write-up analyses a fictional but technically realistic phishing scenario constructed for portfolio purposes using open-source intelligence methods and publicly documented attack patterns. All domain names, IP addresses, and organisational details are fabricated. The analysis methodology and GRC framework mappings reflect real-world practice.

Scenario: A member of the finance department at Nexara Solutions (fictional) received an email appearing to originate from the internal IT helpdesk, requesting urgent re-authentication due to a "suspicious login attempt." The link directed to a credential-harvesting page mimicking the organisation's Microsoft 365 login portal.

Why this matters for GRC Phishing is the most common initial access vector in data breaches (DBIR 2024). A GRC analyst's role is not only to triage the technical incident but to identify which governance controls failed or were absent — and to produce actionable, policy-level recommendations that reduce recurrence risk.
02

Email Artefact — Annotated

The intercepted message was examined in full including raw headers. Key fields are annotated below. Suspicious elements are flagged inline.

03

Technical Header Analysis

Email headers were parsed programmatically using Python to extract authentication results, routing hops, and domain registration data. The following script reproduces the key extraction steps.

Python — header parsing & domain lookup (extract)
# Parse raw email headers and extract authentication signals
import email
import whois
import dns.resolver
from datetime import datetime

with open('sample_phish.eml', 'r') as f:
    msg = email.message_from_file(f)

sender_domain = 'nexara-support.com'
legit_domain  = 'nexara.com'

# --- SPF check ---
try:
    spf_record = dns.resolver.resolve(sender_domain, 'TXT')
    spf_found  = any('v=spf1' in str(r) for r in spf_record)
except:
    spf_found = False

# --- DMARC check ---
try:
    dmarc = dns.resolver.resolve(f'_dmarc.{sender_domain}', 'TXT')
    dmarc_found = True
except:
    dmarc_found = False

# --- WHOIS domain age ---
w = whois.whois(sender_domain)
creation_date = w.creation_date[0] if isinstance(w.creation_date, list) \
                else w.creation_date
domain_age_days = (datetime.now() - creation_date).days

# --- Output ---
print(f"SPF present    : {spf_found}")     # → False
print(f"DMARC present  : {dmarc_found}")   # → False
print(f"Domain age     : {domain_age_days} days")  # → 8 days

## FLAG: Newly registered domain (8 days). No SPF. No DMARC.
## Consistent with purpose-built phishing infrastructure.
Indicator of Compromise Value Severity Notes
Lookalike sender domain nexara-support.com HIGH Registered 8 days prior. No affiliation to nexara.com.
Absent SPF / DMARC NEUTRAL / MISSING HIGH Sender domain carries no email authentication policy.
Credential-harvest URL nexara-m365-verify.pages.dev HIGH Cloudflare Pages hosting. Mimics M365 login UI. Domain ≠ Microsoft.
Urgency & deadline framing "within 2 hours" MEDIUM Social engineering vector. Designed to suppress critical evaluation.
Non-corporate mailer PHPMailer 6.7.1 LOW Inconsistent with enterprise mail infrastructure. Corroborating signal only.
04

Risk Assessment

Risk is assessed using a standard likelihood × impact matrix. The finance department is a high-value target: successful credential theft could enable fraudulent payment authorisation, access to ERP systems, or internal Business Email Compromise (BEC) escalation.

LIKELIHOOD → / IMPACT ↓

LOW / LOW
MED / LOW
HIGH / LOW
LOW / MED
MED / MED
HIGH / MED
LOW / HIGH
MED / HIGH
★ HIGH / HIGH
Low likelihood Medium likelihood High likelihood
Risk Rating HIGH. Likelihood is rated HIGH: phishing targeting finance departments is prolific, this email bypassed gateway filters, and no DMARC policy was in place to reject it automatically. Impact is rated HIGH: successful credential harvest against a finance user carries direct financial fraud risk and potential GDPR data breach notification obligations under Article 33 (72-hour notification window).
05

GRC Framework Mapping

Each identified control gap is mapped to the relevant clause or control in ISO 27001:2022, NIST Cybersecurity Framework (CSF 2.0), and GDPR where applicable. This mapping is the core deliverable from a governance perspective — it connects a technical observation to a policy obligation.

Gap 01 No DMARC / SPF enforcement
ISO 27001:2022 — Control 8.23 (Web filtering) & 8.28 (Secure coding — email auth).
NIST CSF 2.0 — PR.PS-01 (Protective technology — email security configuration).
Finding: Organisation has no published SPF record on primary domain and no DMARC policy, permitting trivial domain spoofing. Remediation: publish SPF, deploy DMARC at p=quarantine moving to p=reject after monitoring period.
Gap 02 No phishing simulation programme
ISO 27001:2022 — Control 6.3 (Information security awareness, education and training).
NIST CSF 2.0 — PR.AT-01 (Awareness and training — all personnel).
Finding: No documented phishing simulation or awareness training programme exists. Users have no baseline resistance to social engineering. Remediation: implement quarterly simulation programme with role-specific training for finance, HR, and executive staff.
Gap 03 Incomplete breach response procedure
ISO 27001:2022 — Control 5.26 (Response to information security incidents).
NIST CSF 2.0 — RS.MA-01 (Incident management — response execution).
GDPR Art. 33 — 72-hour supervisory authority notification obligation.
Finding: Existing incident response procedure does not address credential-harvest phishing specifically, nor does it define the threshold at which a phishing incident constitutes a personal data breach under GDPR Art. 4(12). Remediation: expand IR procedure with phishing-specific playbook and GDPR breach assessment checklist.
06

Recommendations

Recommendations are prioritised by risk reduction impact and implementation effort. Each is assigned a timeframe and framework reference. This section is written for a mixed audience: IT teams require the technical detail; business and legal stakeholders require the risk and regulatory framing.

07

Lessons Learned & GRC Reflection

The technical indicators in this email were not sophisticated. The lookalike domain, absent email authentication, and PHPMailer fingerprint would be caught by any email security gateway configured to check them — and by any user trained to verify sender domains before clicking. The attack succeeded (in the simulation) not because it was technically advanced, but because the governance layer failed: no DMARC policy, no simulation training, and no clear playbook for response.

This is the core GRC observation: most preventable incidents are not prevented by better technology alone, but by better governance of the technology that already exists. The organisation already had an email gateway. It already had MFA. The controls existed — they were simply not configured, enforced, or supported by adequate policy and training.

A GRC practitioner's value in this scenario is not to diagnose the email headers — that is a SOC function. It is to identify that three policy gaps existed before the attack landed, connect them to the specific regulatory obligations they create, and produce actionable guidance that closes them before the next attempt.

That is what this write-up demonstrates.

Skills demonstrated in this write-up
ISO 27001:2022 mapping NIST CSF 2.0 mapping GDPR Art. 33 / 32 Risk assessment (likelihood × impact) Policy gap analysis Python — DNS / WHOIS / header parsing Email authentication (SPF / DKIM / DMARC) Phishing IOC identification Incident response procedure writing Stakeholder-facing documentation