Reporting & Professional Practice · beginner · ~10 min

Social engineering awareness

**What you will learn** - Name and recognise the main human-factor attacks — phishing, spear-phishing, smishing, vishing, pretexting, baiting, and tailgating — by the psychological lever each one pulls. - Draw a simple threat model that shows people as an entry point past technical controls, and identify where the trust boundary really sits. - Explain how an *authorized* social-engineering assessment is scoped, consented to, and run so that no real person or real data is harmed. - Turn findings into constructive defences: awareness training, phishing-resistant MFA (FIDO2/WebAuthn), reporting channels, and out-of-band verification of urgent requests. - Log and detect suspected social-engineering attempts without recording secrets, and measure the improvement over time using non-punitive, aggregate metrics.

Overview

Security objective. The asset you are protecting here is not a server or a database directly — it is the decision a human makes when they receive a message or a request: whether to click, whether to hand over a credential, whether to hold a door. The threat is an attacker who bypasses firewalls, patches, and encryption entirely by persuading a trusted insider to act for them. By the end of this lesson you will be able to detect the tell-tale patterns of a social-engineering attempt and prevent the most common ones with process and technology, and you will understand how professionals test this risk without turning employees into casualties.

What it is. Social engineering is the manipulation of people into performing actions or revealing information that compromises security. It works on humans, not code. A perfectly patched network still falls if someone with legitimate access is talked into opening a door.

Why it sits in Reporting & Professional Practice. This lesson has no code prerequisites (prereqs is empty) because the skill is judgement, not syntax. It builds directly toward your next lesson, "Ethics, legality, and knowing when to stop" (pro-ethics-scope): social engineering is the area where the line between an authorized test and a harmful act is thinnest, so the ethics you meet next are non-negotiable here. It also follows on from evidence-and-remediation reporting (report-evidence-remediation) — because the output of a phishing simulation is a report, and how you write that report determines whether people become allies or start hiding incidents.

Where you will see it. Simulated phishing campaigns, security-awareness programmes, physical red-team engagements, and the human-factors section of nearly every penetration-test report. In defensive roles, the same knowledge drives training content, mail-filtering rules, and identity policy.

Why it matters

People are consistently one of the most-used routes into an organisation. It is often cheaper and faster for an attacker to convince a person than to find a software flaw — no zero-day required, just a convincing email and a moment of pressure.

In real, authorized professional work this knowledge cuts both ways:

Perspective What the skill is used for
Authorized offensive testing Running consented phishing/vishing simulations to measure how susceptible an organisation is, under a signed scope.
Defensive / blue-team Building training, tuning mail filters, deploying phishing-resistant MFA, and writing verification procedures so susceptibility drops.
Reporting & leadership Translating human risk into constructive, non-punitive recommendations executives can fund and act on.

Because real people and their personal data are involved, the ethical bar is higher than for any purely technical test. A careless simulation can damage trust, cause genuine distress, or leak the very data you were hired to protect. Handled well, a programme turns the workforce from the softest target into a distributed sensor network that reports attacks early. That outcome — not a list of who clicked — is the professional deliverable.

Core concepts

Each concept below is taught on its own: what it is, how it works in plain terms, when it applies (and when it does not), and a pitfall to watch for.

1. Phishing (and its relatives)

Definition. A deceptive message that impersonates a trusted sender to lure the recipient into clicking a link, opening an attachment, or entering credentials on a fake page. How it works. The message borrows a real brand's look, adds a reason to act now, and points to an attacker-controlled destination. Variants:

Term Channel Targeting
Phishing Email Broad, many recipients
Spear-phishing Email One person/team, personalised
Whaling Email A senior executive specifically
Smishing SMS/text Broad or targeted
Vishing Voice call Often targeted, uses a live pretext

When it applies / not. It is the default technique against large workforces. It is less effective where phishing-resistant MFA and strong verification culture exist — which is exactly why those defences matter. Pitfall. Assuming "our spam filter catches it." Filters reduce volume; well-crafted spear-phishing routinely lands in the inbox.

2. Pretexting

Definition. Inventing a believable scenario (a pretext) to justify a request for information or access. Plain explanation. "Hi, IT here — we're migrating mailboxes tonight and I need to confirm your login to keep your account active." The story creates a reason the target wants to comply. How it works. It stacks credibility signals (jargon, a real project name, a spoofed caller ID) so the request feels routine. When it applies / not. Central to vishing and physical engagements. It fails against a habit of independent verification. Pitfall. Treating a plausible story as proof of identity. A story is not authentication.

3. Baiting, tailgating, and impersonation

Definition. Physical or in-person lures. Baiting leaves tempting media (a labelled USB drive) for someone to pick up and plug in. Tailgating is following an authorized person through a secure door. Impersonation is posing as a courier, contractor, or staff member. How it works. They exploit curiosity, courtesy, and the reluctance to challenge someone who "looks like they belong." When it applies / not. Relevant to on-site red-team work and facility security; irrelevant to a purely remote-email test. Pitfall. Focusing all defence on email and forgetting the front door and the lobby.

4. The psychological levers

Every technique above pulls one or more of these:

  • Authority — a request appears to come from a boss, IT, or a regulator.
  • Urgency / scarcity — "act in the next 10 minutes or your account is locked."
  • Trust / familiarity — a spoofed name or a stolen logo.
  • Helpfulness / reciprocity — people want to assist and to return favours.
  • Fear — threat of penalty, embarrassment, or loss.

Recognising the lever is faster than memorising every scam, because the levers rarely change.

5. Authorized social-engineering assessment

Definition. A consented, scoped exercise (e.g., a simulated phishing email) that measures human susceptibility to improve defences. Non-negotiables: explicit written scope and consent from leadership; protect the people (aggregate, non-punitive reporting); careful data handling (never exfiltrate real data); realistic but harmless (no illegal pretexts such as impersonating real police or emergency services). Pitfall. Running a "gotcha" campaign that names and shames. It destroys the reporting culture you depend on and can breach employment and privacy law.

Threat model

THREAT MODEL — human-factor attack path

  Assets to protect
    - Employee credentials / MFA secrets
    - Business systems reachable with those credentials
    - Confidential data and funds (e.g., payment approvals)

  Entry points (how the human is reached)
    - Email inbox        (phishing, spear-phishing)
    - Phone / voicemail  (vishing)
    - SMS / chat apps     (smishing)
    - Physical lobby/door (tailgating, baiting)

  ┌─────────────── OUTSIDE / UNTRUSTED ───────────────┐
  │  Attacker crafts pretext + spoofed sender         │
  └───────────────────────────────────────────────────┘
                     │  message / call / visit
                     ▼
  ====================== TRUST BOUNDARY ======================
   The boundary is the PERSON's decision, not the firewall.
   Technical controls were already passed or bypassed.
  ============================================================
                     │  human clicks / tells / lets in
                     ▼
  ┌──────────────── INSIDE / TRUSTED ─────────────────┐
  │  Credential entered on fake page → attacker login │
  │  Detection: mail logs, auth logs, EDR, user report│
  └───────────────────────────────────────────────────┘

Knowledge check.

  1. In the diagram, where is the trust boundary — the firewall, or the human's decision? (Answer: the human's decision; the technical layer was already bypassed.)
  2. What insecure assumption lets pretexting succeed? (Answer: that a plausible story proves identity — a story is not authentication.)
  3. Which logs would help you detect a successful credential-phish after the fact? (Answer: mail gateway logs, authentication/sign-in logs showing a new location or impossible travel, and user reports to the abuse mailbox.)
  4. Why only in an authorized lab or engagement? (Answer: real people and their data are involved; testing without written consent can cause genuine harm and is illegal.)

Syntax notes

This is a concept lesson, so the "syntax" is the anatomy of a phishing message and the shape of a safe report — not program code.

Anatomy of a phishing email (what to point at when teaching detection):

From:  "IT Service Desk" <helpdesk@it-support-secure.example>   <-- lookalike domain, not the real one
Subject: [ACTION REQUIRED] Mailbox will be deactivated in 2 hours  <-- urgency + authority
Body:
  We are migrating accounts tonight. Confirm your password here
  to avoid losing access:  https://portal-login.example/verify    <-- link text != real login host
Reply-To: attacker@mail.example                                    <-- differs from From:

Teaching points, in order: (1) sender domain is a lookalike, (2) subject manufactures urgency and authority, (3) the link's real host is not your identity provider, (4) Reply-To differs from From, (5) the ask itself — "confirm your password" — is something no legitimate IT team requests.

Header check a defender can run (read-only, on your own mailbox): view the raw message source and compare the authentication results line. A safe pattern to look for:

Authentication-Results: spf=fail dkim=fail dmarc=fail   <-- spoofing indicators

Note: passing SPF/DKIM/DMARC does NOT prove a message is safe — a genuinely attacker-owned domain can pass all three. These checks catch spoofing of your domain, not phishing in general.

Lesson

People are part of the attack surface.

Social engineering manipulates humans into actions that compromise security. It is behind a large share of real breaches.

Common techniques (awareness)

  • Phishing — deceptive emails or messages that lure victims into entering credentials or running malware. Spear-phishing is a targeted version aimed at a specific person. Smishing and vishing are the SMS and voice-call variants.
  • Pretexting — inventing a believable scenario to extract information or access. For example: "IT support needs your password to fix your account."
  • Baiting, tailgating, and impersonation — physical and psychological lures, such as leaving an infected USB drive where someone will find it.

These attacks exploit trust, authority, urgency, and helpfulness. They target people, not technical flaws.

Testing it ethically

Authorized social-engineering assessments, such as simulated phishing, measure human risk. Because they involve real people, they carry extra ethical weight.

  • Explicit, written scope and consent from leadership, with clear rules on what is allowed.
  • Protect the people. The goal is to improve defenses, not shame employees. Report aggregate results. Do not single out individuals punitively.
  • Care with data. Handle anything collected responsibly. Never actually exfiltrate real data.
  • Realistic but safe. Cause no genuine harm. Use no illegal pretexts, such as impersonating real police.

The defensive payoff

The deliverable is improved security awareness:

  • Training.
  • Phishing-resistant MFA (FIDO2).
  • Reporting channels.
  • Process changes, such as verifying urgent requests out-of-band before acting on them.

Report human-factor risk constructively, paired with defenses. Never present it as a "gotcha."

Code examples

Because this is a human-factors lesson, the "code" is a lab-safe simulation workflow plus the defensive detection logic, in the INSECURE → SECURE → VERIFY shape. Run any of this only inside an authorized programme or a personal lab you fully own.

(1) WARNING: intentionally vulnerable — use only in a local, isolated, authorized lab. Do not deploy.

A naive awareness-test process that is itself harmful:

BAD PROCESS (do not use)
1. Send a fake "you're getting a bonus" email to all staff, no consent, no scope.
2. Capture every password anyone types into the fake page, in cleartext.
3. Email a leaderboard naming everyone who clicked.

Why this is dangerous: no authorization (legally exposed), it collects real credentials (creates the breach it was meant to prevent), and it shames individuals (destroys the reporting culture, may violate employment/privacy law).

(2) SECURE: a consented, harm-free simulation

Parameterised, consent-gated pseudocode for the sending side of a lab simulation:

CONSENT and SCOPE are signed BEFORE any send.

for recipient in scoped_group:            # only in-scope accounts
    send_simulated_email(
        to        = recipient,
        template  = approved_template,     # reviewed, no illegal pretext
        link      = training_landing_page  # NEVER captures a password
    )
    log(event="sim_sent", to=hash(recipient), campaign=id, ts=now())

# The landing page teaches; it does not harvest.
on_click(recipient):
    show_training_page()                   # "This was a simulation. Here's how to spot it."
    record(metric="clicked", user=hash(recipient), campaign=id)   # pseudonymous
    # NO password field, NO real credential ever accepted or stored

And the defensive detection side (blue-team), safe to run on systems you own:

A parameterised rule that flags likely inbound phishing without logging secrets:

# Lab/demo detection heuristic. Runs on YOUR OWN mailbox metadata only.
# It logs a security DECISION and evidence -- never message bodies or passwords.

def looks_like_phish(msg, our_domains, our_login_hosts):
    reasons = []
    if msg["from_domain"] not in our_domains and msg["display_name_claims_internal"]:
        reasons.append("external sender claiming to be internal")
    if msg["dmarc"] == "fail":
        reasons.append("dmarc fail (possible spoof)")
    for host in msg["link_hosts"]:
        if host not in our_login_hosts and msg["asks_for_credentials"]:
            reasons.append(f"credential ask points to non-login host: {host}")
    if msg["reply_to_domain"] != msg["from_domain"]:
        reasons.append("reply-to differs from from")
    return reasons

# --- VERIFY: prove the rule REJECTS bad input and ACCEPTS good input ---
ours   = {"example-corp.com"}
logins = {"login.example-corp.com"}

phish = {"from_domain": "it-support-secure.example",
         "display_name_claims_internal": True, "dmarc": "fail",
         "link_hosts": ["portal-login.example"], "asks_for_credentials": True,
         "reply_to_domain": "mail.example"}

good  = {"from_domain": "example-corp.com",
         "display_name_claims_internal": True, "dmarc": "pass",
         "link_hosts": ["login.example-corp.com"], "asks_for_credentials": True,
         "reply_to_domain": "example-corp.com"}

assert looks_like_phish(phish, ours, logins) != []   # bad input -> flagged
assert looks_like_phish(good,  ours, logins) == []    # good input -> allowed
print("detection rule verified")

Expected output: detection rule verified. The first assertion confirms the crafted phishing metadata is flagged (several reasons); the second confirms a legitimate internal message is not. Note this is a heuristic for teaching — real gateways combine many more signals, and no single rule is ever "complete."

Line by line

Walkthrough of the detection example, which is the load-bearing part.

  1. looks_like_phish(msg, our_domains, our_login_hosts) — the function takes message metadata (not the body) plus two allow-lists: the domains you own and the hosts where your real login lives. Passing these in as parameters is what makes the rule reusable and testable.
  2. reasons = [] — we accumulate evidence rather than returning a bare true/false. A defender needs the "why," and the report needs it too.
  3. External-sender-claiming-internal check — if the sending domain is not yours but the display name pretends to be internal IT, that mismatch is a classic spoof tell.
  4. dmarc == "fail" — a DMARC failure suggests someone is spoofing your domain. Important nuance covered later: a pass does not prove safety.
  5. Link-host loop — for each link, if it points somewhere that is not your login host and the message asks for credentials, that is the core credential-phish pattern. It records the offending host as evidence.
  6. reply_to != from — legitimate mail rarely redirects replies to a different domain; attackers do this to catch responses.
  7. Return value — a non-empty list means "flag it." An empty list means no indicators fired.

Trace table for the two test inputs:

Check phish input good input
External claiming internal fires (domain not ours) no (domain is ours)
DMARC fail fires no (pass)
Credential ask to non-login host fires (portal-login.example) no (login.example-corp.com)
Reply-To differs fires (mail.example) no (same domain)
Result list of 4 reasons → flagged empty list → allowed
  1. The two asserts — the first proves the rule rejects the malicious sample; the second proves it accepts the benign one. This ACCEPT-good / REJECT-bad pair is the minimum evidence that a control actually works. If either assertion failed, the rule would be wrong and you would know immediately.

Common mistakes

Real mistakes teams make, each as WRONG → WHY → CORRECTED → how to recognise/prevent.

1. Naming and shaming who clicked.

  • WRONG: publishing a leaderboard of employees who fell for the simulation.
  • WHY: it makes people hide real incidents to avoid embarrassment, killing your earliest detection signal; it can also breach employment and privacy law.
  • CORRECTED: report only aggregate click/report rates and trends; offer supportive micro-training to those who clicked.
  • RECOGNISE/PREVENT: if a report contains an individual's name next to a "failure," stop and re-scope.

2. Treating "the email passed our spam filter / DMARC" as proof it is safe.

  • WRONG: whitelisting anything that authenticates.
  • WHY: an attacker sending from their own legitimately-configured domain passes SPF/DKIM/DMARC cleanly. Those controls stop spoofing of your domain, not phishing in general.
  • CORRECTED: combine authentication results with content, link-host, and behaviour signals; keep a human-report channel.
  • RECOGNISE/PREVENT: whenever someone says "but it passed DMARC," ask "whose domain does it prove?"

3. Confusing a plausible story with authentication.

  • WRONG: resetting a password or approving a payment because the caller "knew the CFO's name and the project."
  • WHY: pretext details are cheap to gather (LinkedIn, out-of-office replies) and prove nothing.
  • CORRECTED: mandate out-of-band verification via a known-good number/channel before any sensitive action.
  • RECOGNISE/PREVENT: any urgent + sensitive + unusual-channel request is the trigger to verify, every time.

4. Running a simulation with no written scope.

  • WRONG: "we'll just send a quick test, it's for their own good."
  • WHY: without documented authorization it can be unlawful and expose you and the organisation.
  • CORRECTED: obtain signed scope and consent from leadership before the first send.
  • RECOGNISE/PREVENT: no signed scope = no send. Full stop.

5. Building a simulation that harvests real passwords.

  • WRONG: capturing whatever credentials users type to "prove" they entered them.
  • WHY: you have now created a plaintext-credential store — the exact breach you were hired to prevent.
  • CORRECTED: landing pages teach; they never contain a working credential field or store secrets.
  • RECOGNISE/PREVENT: audit the landing page — if it has a password input that stores anything, redesign it.

Debugging tips

"Debugging" a social-engineering programme means diagnosing why detection or the simulation misbehaves.

Common problems and concrete steps:

  • Simulation emails never arrive. Check whether your own mail gateway quarantined them; add the sending infrastructure to an allow-list scoped to the campaign only, and confirm with the mail admin who is in the loop. Verify the recipient list matches the signed scope.
  • Everyone "passes" and you suspect it's too easy. Inspect the template: is the pretext realistic? Are links obviously fake? Compare click and report rates — a very low report rate with low clicks can mean people ignored it, not that they spotted it.
  • Detection rule flags legitimate mail (false positive). Log the specific reason that fired, then check your allow-lists (our_domains, our_login_hosts). A common cause is a real third-party sender (payroll, benefits) that legitimately hosts login elsewhere — add a reviewed exception rather than disabling the whole rule.
  • Detection rule misses a real phish (false negative). Pull the message metadata and ask which signal should have fired. Often the sender used a brand-new lookalike domain that passed authentication — remember, a DMARC pass is not proof of safety.

Questions to ask when it fails:

  1. Was this action actually inside the signed scope and time window?
  2. Does the alert include evidence (which host, which mismatch) or just a verdict?
  3. Am I about to log anything I must never store (a password, a token)?
  4. Could a legitimate business process explain this before I call it an attack?
  5. If this were real, which log would confirm a successful compromise — and do I have it?

Memory safety

Security & safety: detection, logging, and privacy. For this human-factors topic, "safety" is about logging enough to detect abuse while never becoming a breach yourself.

What to log (for every suspected or simulated event):

Field Example
Timestamp (UTC) 2026-07-07T14:03:11Z
Source sending domain / caller ID / hashed recipient
Resource / action "credential-ask link to non-login host"
Result / security decision flagged, allowed, reported-by-user
Correlation / campaign id sim-2026-07, case-4821

What to NEVER log: passwords or anything typed into a credential field, MFA codes or tokens, session cookies, private keys, full payment card numbers (PANs), or unnecessary personal data. In a simulation, pseudonymise recipients (hash the address) and store only the decision (clicked / reported), not content they entered.

Events that signal abuse (watch these):

  • A spike in the abuse-mailbox reports of similar messages — often the earliest real signal.
  • Authentication logs showing sign-in from a new country immediately after a credential-ask email, or "impossible travel."
  • Multiple failed MFA prompts (MFA-fatigue / push-bombing).
  • Help-desk password-reset requests clustered around a vishing campaign.

How false positives arise: legitimate marketing mail with urgent tone; real third-party portals that host login on a different domain; an employee travelling (explains the new-country sign-in). Always seek a benign explanation before escalating — and tune allow-lists rather than muting whole rules.

Real-world uses

Concrete authorized use case. A company hires a tester under a signed scope to run a quarterly phishing simulation and a small vishing test against volunteers. The tester sends a consented, brand-neutral "mailbox migration" email to an in-scope group; the landing page immediately reveals it was a simulation and teaches the three tells. No password is ever captured. The tester reports aggregate click and report rates, benchmarks them against last quarter, and recommends FIDO2 MFA plus an out-of-band verification rule for payment changes. The blue team then tunes mail filtering and updates training. The measurable win is a rising report rate and a falling click rate over successive quarters.

Professional best-practice habits:

Habit Beginner Advanced
Authorization Never test without signed scope; keep the document handy. Maintain reusable rules-of-engagement templates and legal review per campaign.
Least privilege Only send to the scoped group. Segment data so sim results are pseudonymous and access-controlled.
Secure defaults Landing page teaches, never harvests. Enforce phishing-resistant MFA (FIDO2/WebAuthn) org-wide; number-matching on push.
Logging Record decision + timestamp, not secrets. Correlate mail, auth, and EDR logs; alert on impossible travel and MFA fatigue.
Error handling Have a rollback/apology plan if a sim causes distress. Run a post-campaign debrief and feed lessons into the next scope.
Reporting Aggregate, non-punitive, constructive. Tie human risk to business impact and track trend lines for leadership.

Authorization checklist (before any lab or engagement): signed scope naming systems/groups and dates; named point of contact for stop/pause; agreed pretexts (no impersonating real police, banks, or emergency services); data-handling and retention agreed; a rollback/notification plan.

Practice tasks

All tasks are lab-only or paper exercises. Use accounts, mailboxes, or VMs you fully own, or an intentionally-vulnerable training environment. Each ends by remediating and verifying, not exploiting.

Beginner 1 — Spot the tells.

  • Objective: analyse three phishing samples (use a public awareness gallery or ones you write yourself).
  • Requirements: for each, list the sender/domain issue, the psychological lever, the risky ask, and the link-host mismatch.
  • Output: a short table of indicators.
  • Constraints: do not click any live link; work from the raw text only.
  • Hints: compare From vs Reply-To; read the real link host, not the display text.
  • Concepts: phishing anatomy, levers.

Beginner 2 — Verification playbook.

  • Objective: write a one-page "before you act" procedure for urgent, sensitive requests.
  • Requirements: define which requests trigger verification and the out-of-band channel to use (known-good number, not the one in the message).
  • Output: the procedure plus two worked examples (a payment-change email, an IT password call).
  • Constraints: must be usable by a non-technical colleague.
  • Hints: the trigger pattern is urgent + sensitive + unusual channel.
  • Concepts: pretexting, out-of-band verification.

Intermediate 1 — Extend the detection rule.

  • Objective: add two new signals to the lesson's looks_like_phish heuristic (e.g., recently-registered lookalike domain, attachment with a macro-enabled extension).
  • Requirements: keep it metadata-only; add ACCEPT-good and REJECT-bad assertions for each new signal.
  • Input/output: crafted metadata dicts → list of reasons.
  • Constraints: log evidence, never bodies or secrets.
  • Hints: model the new fields the same way existing ones are passed in.
  • Concepts: detection, verification-by-test.

Intermediate 2 — Design a harm-free simulation.

  • Objective: draft the scope and workflow for a consented phishing simulation on a mailbox you own.
  • Requirements: authorization checklist, an approved template with no illegal pretext, a landing page that teaches and stores no credentials, and a pseudonymous metrics plan.
  • Output: the scope document plus the metric definitions (click rate, report rate).
  • Constraints: aggregate, non-punitive reporting only.
  • Hints: decide up front what you will and will not log.
  • Concepts: authorized assessment, data handling.

Challenge — Programme scorecard and remediation loop.

  • Objective: design a quarter-over-quarter awareness scorecard and a matching remediation plan.
  • Requirements: define non-punitive metrics, a detection/logging spec (fields to keep, fields to never keep), thresholds that signal abuse, and how false positives are triaged; then specify the defensive changes (training, FIDO2 MFA, verification rule) and a mitigation-verification step proving each change reduced susceptibility.
  • Output: a one-page scorecard template plus the verification method (e.g., report rate up and click rate down across two cycles).
  • Constraints: lab or paper only; no real targets, no real secrets.
  • DEFENSIVE conclusion: state exactly how you would confirm the fixes worked and how you would keep individuals protected throughout.
  • Concepts: reporting, detection/logging, remediation and verification.

Summary

  • Core idea: social engineering attacks the person's decision, bypassing technical controls; the trust boundary sits at the human, not the firewall.
  • Know the map: phishing / spear-phishing / smishing / vishing / whaling, pretexting, baiting, tailgating — and the levers behind them all (authority, urgency, trust, helpfulness, fear).
  • Key "syntax": read a message's real sender domain, Reply-To vs From, and the true link host; remember that passing SPF/DKIM/DMARC proves your domain wasn't spoofed, not that the message is safe.
  • Testing is a privilege, not a right: no signed scope = no send; protect people with aggregate, non-punitive reporting; never harvest real credentials; no illegal pretexts.
  • Detect and log the decision (timestamp, source, resource, result, correlation id) and never log passwords, tokens, cookies, keys, or full PANs. Watch for report spikes, impossible travel, and MFA fatigue.
  • Common mistakes: naming-and-shaming, trusting a filter pass, mistaking a story for authentication, testing without consent, building a credential-harvesting page.
  • Remember: the deliverable is constructive defence — training, phishing-resistant MFA (FIDO2/WebAuthn), reporting channels, and out-of-band verification — with every fix verified by a falling click rate and a rising report rate. Nothing is ever "completely secure."