Social Engineering: Phishing, Vishing, and Physical Breach Patterns
Recurring social-engineering patterns across phishing, vishing, and physical intrusion attempts.
Social Engineering: Phishing, Vishing, and Physical Breach Patterns#
The most sophisticated firewall can be bypassed by a polite phone call. Social engineering targets the weakest link in any security chain: the human being.
The Psychology of Influence#
Attackers use Cialdini's principles of persuasion:
- Authority: "This is the CEO calling."
- Urgency: "Your account will be locked in 5 minutes!"
- Scarcity: "Only 2 spots left."
- Reciprocity: "I'll do you a favor if you help me out."
Attack Vectors#
1. Phishing (Email)#
- Spear Phishing: Targeted attacks using OSINT (Open Source Intelligence) to craft personalized emails.
- Clone Phishing: Copying a legitimate email and replacing the link.
2. Vishing (Voice)#
- AI Voice Cloning: In 2025, attackers use AI to clone the voice of executives to authorize fraudulent transfers.
- Caller ID Spoofing: Making the call appear to come from a trusted internal number.
3. Physical Breaches#
- Tailgating: Following an authorized person through a secure door.
- USB Drops: Leaving infected USB drives in the parking lot.
Defense#
Training is the only defense. Regular phishing simulations and security awareness training are essential to build a "human firewall."
Remember: Trust, but verify.
Phishing Patterns That Still Work#
- Credential harvest: a fake SSO page mirrors the real login portal and saves each POST.
- MFA fatigue: repeated push prompts until the target accepts one.
- Quishing: a QR code on a printed flyer sends the target to a credential page on the phone, outside the corporate web filter.
- Reply-chain hijack: the attacker joins a real thread and impersonates an internal alias.
Vishing Script Structure#
A typical call follows: build rapport, introduce urgency, cite authority (a manager, an auditor, IT), then ask for a code or a one-time password. The defense on the target side is a fixed callback number. Never trust the number the caller gives you.
C: "This is IT security. We saw a login from Russia." V: silence, then a number is "confirmed" back to them C: "I need the code your phone just showed you."
Record your own tests. Written transcripts make the finding reproducible without re-running the call.
Physical Breach Categories#
| Vector | What a tester does | Common failure |
|---|---|---|
| Tailgating | Enter behind a badge holder with "forgot my badge" | Badge checks not enforced on inner doors |
| Dumpster diving | Inspect discarded printouts for diagrams or tokens | Printers placed over open bins |
| USB drop | Leave labeled drives in the parking lot | Drives auto-mounted on old endpoints |
| Pretext entry | Pose as a courier or a fire inspection | No verification callback to the front desk |
OSINT for a Phishing Pretext#
- LinkedIn and company pages reveal reporting structure, new hires, and tool vendors.
- GitHub profiles leak email formats and internal project names.
- Job postings list the exact stack, which tells you what "IT support" would plausibly ask about.
Report Contents#
A usable social-engineering report records: scope and rules of engagement, timeline, targets reached, what worked, what failed, and the exact control gap. Recommendation sections land better when tied to a control: "enforced callback policy for MFA resets," not "more training."
Pretexting Anatomy#
Every pretext has three parts: identity (who you claim to be), reason (why you are calling), and ask (what you need). Weak pretexts fail on the ask. Test the reason: would this person plausibly have this information, at this hour, through this channel?
Identity: "Bank fraud team" Reason: "Unusual login pattern" Ask: "Read me the code on your screen"
A target that asks a verification question breaks the chain.
Email Pretext Checklist#
- Domain registered recently, typosquat of the real one.
- Reply-To differs from From.
- SPF/DKIM fail on the sending domain.
- Urgency language and a request that skips a normal channel.
| Indicator | Tool check |
|---|---|
| SPF fail | dig TXT domain + validator |
| DKIM fail | Message-ID header + selector lookup |
| Lookalike domain | Certificate Transparency logs |
Training Records#
After the test, measure the failure rate by department and by pretext type. Sales teams usually fail at vishing; engineering fails at fake invoice approvals. Write each department's failure mode into the recommendation.
Physical Security#
A tester's day on site looks like: tailgate in, observe badge checks, photograph unsecured printers, check tailgate discipline on inner doors, and log every door that held but should not have. The report maps each finding to the control it defeats.
Legal Framing#
Social engineering without written authorization is not testing. The engagement letter covers pretexts, target hours, recording consent, and data-handling rules. Nothing in the test happens without a signatory who can stop it.
Awareness Metrics#
| Metric | Target direction |
|---|---|
| Click rate on phishing | down |
| Report rate | up |
| Time to first report | shorter |
| Retry failure on second attempt | lower |
Track over time. One campaign is a snapshot; a trend is evidence.
AI-Drafted Pretexts#
LLM-written emails improve polish, not resistance. The detection cues stay the same: domain age, failed auth, urgency, and a mismatch between the ask and the normal channel. Use the tool for scale, but grade by human review of the send list.
Red-Team Handoff#
After the assessment, give security two things: the pretext that worked and the control that did not fire. A SOC alert for "user clicked" matters more than the click itself.
Internal Comms#
Brief the executive sponsors before the test. A test that surfaces mid-month as "someone is calling staff pretending to be IT" ends early. Tell them the windows and the stop word.
Records#
Every pretext, every call, every door: written down, timestamped, and tied to the engagement letter. A social-engineering report without the timeline reads as folklore.
Defense Pillars#
- Verification callback for any money-moving ask.
- Contact-list changes require an in-person check.
- USB drives found in the lot get destroyed, not mounted.
- MFA pushes come with number matching.
Campaign Cadence#
Run a campaign each quarter, vary pretexts, and never reuse the same one twice. The point is to measure drift in the failure rate, not to catch a single employee.
Program Setup#
Stand up the awareness program with:
- Quarterly pretext rotation and a fixed stop word
- Callback number policy for money-moving asks
- Printer and badging walkthrough each quarter
- Executive sponsor briefed on windows and goals
- Written logs of every call and every door
- Report rate tracked over click rate
Reference Tables#
| Pretext | Failure |
|---|---|
| IT reset | Callback to the written number |
| CEO gift card | Dual approval on requests |
| Courier entry | Check-in desk verification |
| Vendor urgency | Known-alias rule |
| Invoice change | Payment-detail freeze window |
| QR on a flyer | Students trained on phone-side risk |
Reminders#
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
- confirm before reporting
Command Cheatsheet#
gog mail search 'in:inbox from:it' curl -s https://target | grep -i 'pretext'
Final Notes#
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
- confirm, document, report
Short Notes#
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
- document the observation, then the conclusion
Rollout Cadence#
| Week | Action |
|---|---|
| 1 | Sponsor briefing and letter of authorization |
| 2 | Build pretext library from OSINT |
| 3 | Run the campaign, log every attempt |
| 4 | Debrief by department and ship recommendations |
Keep the campaign notes tidy; the timeline goes into the final report.
Closing Notes#
- Verify each observation with a second independent check.
- Prefer packet, request/response, or log evidence over prose.
- Tie the finding to the control that should have caught it.
- Redact secrets but keep the request shape visible.
- Never quote a payload you have not actually tested.
- Keep one repro per file; name it clearly.
- Update the matrix when a new tool or a new gadget appears.
- Shorten CI runs; the tool should fit in a normal deploy.
- Confirm a false positive before you report it.
- A finding without evidence is folklore.
- Document the exact time delta or row count.
- Record the binary version or framework version in the report.
- Every tool output in the report ties to a command.
- The evidence tree should let a second reader replay the finding.
- Log the encoding and the raw bytes with the finding.
- If a fix closes one probe, re-run the others to be sure.
- Closing one instance rarely closes the class.
- Rotate pretexts and rate limits so the test keeps signal.
- Track report rate, not click rate, for awareness campaigns.
- Keep capture files short; slice the interesting window.
- ZAP baselines belong in CI, full scans on staging.
- Burst the auth endpoint, then verify no lockout.
- Diff lockfiles before running a supply-chain claim.
- Parameter pollution hides in headers and cookies too.
- Checksum your dependencies and rotate keys on a schedule.
- Time-based blind is slow; always pair it with a boolean check.
- Show the GRANTS output; it proves reachability limits.
- DOM sinks are data-flow endpoints, not just payload targets.
- Trusted Types and CSP sit on the same defense line.
- Stash the tshark JSON slice with the pcap for reference.
- A short pcap with notes beats a ten-minute capture.
- Name files with date, host, and window.
- A flat periodic line in the IO graph is a beacon candidate.
- Spike bursts in Burp are usually manual, not scanner.
- Tune Nuclei rate limits so the range is not blocked.
- sqlmap risk/level flags widen the payload classes.
- Arjun finds parameters that do not appear in the URL.
- Keep WordPress plugin nonces in a separate test case.
- XML-RPC is the slow, quiet way in. Disable it if unused.
- Backup files in the docroot are findings by themselves.
- Upload extension checks should run on the normalized name.
- Homoglyphs hide inside scope lists and allowlists.
- Normalize at the edge, log raw, never filter before decode.
- UTF-7 and legacy codecs keep bypassing naive filters.
- A fullwidth probe that passes is a bug in the pipeline.
- Rotate keys, pin versions, and rotate them again after a patch.
- Prototype pollution turns one key into a global change.
__proto__is the first key to block; checkconstructortoo.- Run
npm lsdeep; the vulnerable path is rarely the top level. - Refuse
constructor.prototypekeys at every merge point. - Freeze Object.prototype for the server if you must merge.
What do you think?
React to show your appreciation