Learn Ethical Hacking (#49) - Deepfakes and AI Deception - The New Social Engineering
Learn Ethical Hacking (#49) - Deepfakes and AI Deception - The New Social Engineering

What will I learn
- What deepfakes are and how generative AI creates convincing fake audio, video, and images;
- Voice cloning attacks -- replicating a person's voice from minutes of public audio for vishing at scale;
- Video deepfakes -- real-time face swapping for video call impersonation;
- AI-generated phishing -- how LLMs create personalized, context-aware social engineering at scale;
- Detecting deepfakes -- technical and procedural methods for identifying AI-generated content;
- The $25 million deepfake heist -- the 2024 Hong Kong case where a CFO was impersonated on a video call;
- Synthetic identity fraud -- AI-generated personas that pass KYC checks;
- Defense: out-of-band verification, code words, AI detection tools, procedural controls for high-value actions.
Requirements
- A working modern computer running macOS, Windows or Ubuntu;
- Understanding of social engineering from episodes 8 and 46;
- No specific lab needed for this episode;
- The ambition to learn ethical hacking and security research.
Difficulty
- Intermediate
Curriculum (of the Learn Ethical Hacking Series):
- Learn Ethical Hacking (#1) - Why Hackers Win
- Learn Ethical Hacking (#2) - Your Hacking Lab
- Learn Ethical Hacking (#3) - How the Internet Actually Works - For Attackers
- Learn Ethical Hacking (#4) - Reconnaissance - The Art of Not Being Noticed
- Learn Ethical Hacking (#5) - Active Scanning - Mapping the Attack Surface
- Learn Ethical Hacking (#6) - The AI Slop Epidemic - Why AI-Generated Code Is a Security Disaster
- Learn Ethical Hacking (#7) - Passwords - Why Humans Are the Weakest Cipher
- Learn Ethical Hacking (#8) - Social Engineering - Hacking the Human
- Learn Ethical Hacking (#9) - Cryptography for Hackers - What Protects Data (and What Doesn't)
- Learn Ethical Hacking (#10) - The Vulnerability Lifecycle - From Discovery to Patch to Exploit
- Learn Ethical Hacking (#11) - HTTP Deep Dive - Request Smuggling and Header Injection
- Learn Ethical Hacking (#12) - SQL Injection - The Bug That Won't Die
- Learn Ethical Hacking (#13) - SQL Injection Advanced - Extracting Entire Databases
- Learn Ethical Hacking (#14) - Cross-Site Scripting (XSS) - Injecting Code Into Browsers
- Learn Ethical Hacking (#15) - XSS Advanced - Bypassing Filters and CSP
- Learn Ethical Hacking (#16) - Cross-Site Request Forgery - Making Users Attack Themselves
- Learn Ethical Hacking (#17) - Authentication Bypass - Getting In Without a Password
- Learn Ethical Hacking (#18) - Server-Side Request Forgery - Making Servers Betray Themselves
- Learn Ethical Hacking (#19) - Insecure Deserialization - Code Execution via Data
- Learn Ethical Hacking (#20) - File Upload Vulnerabilities - When Users Upload Weapons
- Learn Ethical Hacking (#21) - API Security - The New Attack Surface
- Learn Ethical Hacking (#22) - Business Logic Flaws - When the Code Works But the Logic Doesn't
- Learn Ethical Hacking (#23) - Client-Side Attacks - Beyond XSS
- Learn Ethical Hacking (#24) - Content Management Systems - Hacking WordPress and Friends
- Learn Ethical Hacking (#25) - Web Application Firewalls - Bypassing the Guards
- Learn Ethical Hacking (#26) - The Full Web Pentest - Methodology and Reporting
- Learn Ethical Hacking (#27) - Bug Bounty Hunting - Getting Paid to Hack the Web
- Learn Ethical Hacking (#28) - The AI Web Attack Surface - AI Features as Vulnerabilities
- Learn Ethical Hacking (#29) - Network Sniffing - Seeing Everything on the Wire
- Learn Ethical Hacking (#30) - Wireless Network Attacks - Breaking Wi-Fi
- Learn Ethical Hacking (#31) - Privilege Escalation - Linux
- Learn Ethical Hacking (#32) - Privilege Escalation - Windows
- Learn Ethical Hacking (#33) - Active Directory Attacks - The Crown Jewels
- Learn Ethical Hacking (#34) - Pivoting and Lateral Movement - Spreading Through Networks
- Learn Ethical Hacking (#35) - Cloud Security - AWS Attack and Defense
- Learn Ethical Hacking (#36) - Cloud Security - Azure and GCP
- Learn Ethical Hacking (#37) - Container Security - Docker and Kubernetes Attacks
- Learn Ethical Hacking (#38) - Infrastructure as Code - Securing the Automation
- Learn Ethical Hacking (#39) - Email Security - Phishing Infrastructure and Defense
- Learn Ethical Hacking (#40) - DNS Attacks - Exploiting the Internet's Foundation
- Learn Ethical Hacking (#41) - Exploitation Frameworks - Metasploit and Cobalt Strike
- Learn Ethical Hacking (#42) - Custom Exploit Development - Writing Your Own
- Learn Ethical Hacking (#43) - Exploit Development Advanced - Modern Mitigations and Bypasses
- Learn Ethical Hacking (#44) - Reverse Engineering - Understanding Binaries
- Learn Ethical Hacking (#45) - Supply Chain Attacks - Poisoning the Source
- Learn Ethical Hacking (#46) - The Human Factor - Why Security Training Fails
- Learn Ethical Hacking (#47) - Physical Security and OSINT - The Forgotten Attack Vectors
- Learn Ethical Hacking (#48) - Insider Threats - When the Call Is Coming from Inside the House
- Learn Ethical Hacking (#49) - Deepfakes and AI Deception - The New Social Engineering (this post)
Learn Ethical Hacking (#49) - Deepfakes and AI Deception - The New Social Engineering
Solutions to Episode 48 Exercises
Exercise 1: Insider threat SIEM detection rules.
Rule 1: Mass file download
Source: SharePoint/OneDrive audit logs
Logic: user downloads >100 files in 1 hour
FP rate: Medium (legitimate for some roles like data migration)
Action: alert SOC, check if user is in notice period
Rule 2: After-hours access to sensitive systems
Source: authentication logs + HR schedule data
Logic: login to finance/HR systems between 22:00-06:00
FP rate: Low (few legitimate reasons for night access)
Action: alert + require manager confirmation within 4 hours
Rule 3: USB mass storage on restricted endpoints
Source: endpoint agent (USB device events)
Logic: USB storage device connected to classified workstation
FP rate: Low (USB should be blocked by policy anyway)
Action: alert + auto-block device + notify security
Rule 4: Email forwarding rule creation
Source: Exchange/O365 audit logs
Logic: new auto-forward rule to external domain
FP rate: Medium (some legitimate use cases exist)
Action: alert + check if destination is personal email
Rule 5: Anomalous database query volume
Source: database audit logs
Logic: user runs SELECT queries returning >10x daily baseline
FP rate: Medium (report generation can trigger this)
Action: alert + inspect query content for PII/financial data
The key to writing good SIEM rules is accepting the false positive problem upfront. A rule with a high FP rate is not a bad rule -- it just needs to feed into a scoring system rather than generate standalone alerts. As we discussed in episode 48, layered risk scoring (UEBA) beats binary alerting every time because it lets you combine five "maybe suspicious" signals into one "definitely investigate" alert.
Exercise 2: Tesla and Twitter insider cases.
Tesla (2018):
Category: malicious insider (revenge motivation)
Access abused: Manufacturing OS source code, production data
Motivation: passed over for promotion, resentment
Detection: tip from another employee + internal investigation
What failed: no DLP on engineering workstations, no behavioral
baseline monitoring, no automated export alerts
Prevention: code review for large exports, UEBA baseline for
each engineer's normal data access patterns, exit monitoring
for employees with negative performance reviews
Twitter (2020):
Category: mix of compromised + recruited insiders
Access abused: internal admin tools ("God Mode") for account
password resets and MFA disabling on high-profile accounts
Motivation: paid by external party ($100K+ in Bitcoin)
Detection: public incident (scam tweets from verified accounts)
What failed: no tiered admin access, no rate limiting on
admin actions, no separation of duties (one person could
reset password AND disable MFA), no real-time alerting
Prevention: dual-authorization for account changes on verified
accounts, rate limiting (>3 resets/hour = lockout), real-time
SOC alerting on any admin action touching verified accounts
Common thread: both cases exploited the gap between the access
level granted and the monitoring applied at that access level.
The people with the most dangerous access had the least oversight.
The uncomfortable pattern: organizations grant their most privileged users the least monitoring. Sysadmins, engineers with production access, support staff with admin tools -- these are the people who can do the most damage, and they are the people whose activity is least scrutinized. This is backwards. Monitoring should be proportional to access level, not inversely proportional to it.
Exercise 3: DLP bypass difficulty ratings.
Channel Detectability Volume Best counter-measure
Email 4/5 (high) High DLP content inspection
Cloud storage 3/5 High CASB + SSL inspection
USB 4/5 High Endpoint agent + port block
Screenshots 1/5 (very low) Low Camera detection (expensive)
Printing 2/5 Medium Print logging + watermarks
Steganography 1/5 Medium Specialized stego detection
Encrypted cont. 2/5 High Block unknown file types
Hardest to defend: screenshots/phone photos of screens. No
technology can prevent someone from photographing their screen
with a personal device. The only mitigations are physical: no
phones in secure areas (enforced how?), cameras monitoring
screens (privacy nightmare), visible watermarks that survive
photography (traceable but not preventative).
Layered strategy: endpoint DLP + network DLP + CASB + USB
blocking + print monitoring + metadata watermarking + behavioral
analytics. No single layer catches everything, but combined
coverage makes high-volume exfiltration across any channel
significantly harder without triggering at least one alert.
The screenshot/phone camera channel is the great equalizer. You can spend millions on DLP, CASB, endpoint agents, network inspection, and a determined insider defeats ALL of it by pointing their phone at the screen for 30 seconds. This is why the cultural and process controls from episode 48 (background checks, financial wellness programs, positive workplace culture, exit procedures) aren't optional extras -- they're the only defense against the channel that technology cannot close.
Learn Ethical Hacking (#49) - Deepfakes and AI Deception - The New Social Engineering
Episode 48 covered insider threats -- the attacks that come from people who are already past every perimeter defense because they have a badge, credentials, and a legitimate reason to be on the network. We walked through the three categories (malicious, negligent, compromised), data exfiltration channels that range from trivially detectable (email DLP catches it) to fundamentally undetectable (phone cameras pointed at screens), User and Entity Behavior Analytics for baseline anomaly detection, DLP deployment at endpoint, network, and cloud layers, the Snowden and Twitter case studies, and the uncomfortable truth that the people with the most dangerous access typically receive the least monitoring. The core defensive model was layered: technical controls (UEBA, DLP, USB blocking, PAM) combined with process controls (separation of duties, least privilege, mandatory vacations) combined with cultural controls (anonymous reporting, non-punitive culture, addressing grievances before they become motives).
Today the ground shifts under our feet. Everything we've relied on to verify identity -- voice, face, writing style, video presence -- is now replicable by machines. And not expensive military-grade machines either. Consumer hardware. Open-source software. An afternoon of setup.
Here we go.
The Trust Collapse
Think about how you verify identity in everyday professional life. Someone calls you -- you recognise their voice. Someone joins a video call -- you see their face. Someone sends you an email -- the writing sounds like them, the email address looks right, the context makes sense. These are the trust anchors that human communication has depended on for all of history. Voice, face, writing style, contextual knowledge.
Every single one of them is now spoofable with consumer-grade AI.
Voice? Cloneable from 30 seconds of audio. Face? Real-time deepfake on video calls with an RTX 3060. Writing style? Any LLM can replicate a person's email voice given a few examples. Email headers? Spoofable since 1982 (we covered that in episode 39). And the critical point: these capabilities aren't locked behind classified government programs or million-dollar budgets. They're open-source, free, and getting better every month.
#!/usr/bin/env python3
"""trust_anchor_assessment.py -- evaluate which trust signals still hold"""
# Conceptual framework: for each traditional identity verification
# method, assess whether AI can now defeat it, and what remains.
TRUST_ANCHORS = {
'voice_recognition': {
'traditional_reliability': 'HIGH',
'ai_defeat_capability': 'COMPLETE',
'tools': ['RVC', 'So-VITS-SVC', 'XTTS', 'ElevenLabs'],
'data_required': '3-30 seconds of clean audio',
'cost': 'Free (open source) to $22/month (commercial)',
'latency': '50-200ms (real-time conversation possible)',
'current_status': 'BROKEN -- voice is no longer proof of identity'
},
'video_face_recognition': {
'traditional_reliability': 'HIGH',
'ai_defeat_capability': 'HIGH',
'tools': ['DeepFaceLive', 'SimSwap', 'FaceSwap'],
'data_required': 'A few photos or minutes of video',
'cost': 'Free (open source), consumer GPU required',
'latency': 'Real-time at 720p (standard video call quality)',
'current_status': 'BROKEN for video calls -- artifacts visible '
'only at high res with good lighting'
},
'writing_style': {
'traditional_reliability': 'MEDIUM',
'ai_defeat_capability': 'COMPLETE',
'tools': ['Any LLM (GPT-4, Claude, Llama, etc.)'],
'data_required': '5-10 example emails/messages',
'cost': 'Free to pennies per email',
'latency': 'Seconds',
'current_status': 'BROKEN -- LLMs replicate any writing voice'
},
'email_headers': {
'traditional_reliability': 'LOW',
'ai_defeat_capability': 'N/A (always been spoofable)',
'tools': ['Any SMTP client'],
'data_required': 'None',
'cost': 'Free',
'latency': 'Instant',
'current_status': 'BROKEN since 1982 -- DMARC/SPF help but '
'are not universally deployed'
},
'shared_secret_challenge': {
'traditional_reliability': 'HIGH',
'ai_defeat_capability': 'NONE (attacker lacks the secret)',
'tools': 'N/A',
'data_required': 'N/A',
'cost': 'Free',
'latency': 'Instant',
'current_status': 'INTACT -- still works'
},
'cryptographic_signature': {
'traditional_reliability': 'VERY HIGH',
'ai_defeat_capability': 'NONE (requires private key)',
'tools': 'N/A',
'data_required': 'N/A',
'cost': 'Free (software) to $50 (hardware key)',
'latency': 'Instant',
'current_status': 'INTACT -- still works'
},
'out_of_band_callback': {
'traditional_reliability': 'HIGH',
'ai_defeat_capability': 'LOW (caller ID spoofing possible, '
'but answering a callback is hard)',
'tools': 'N/A',
'data_required': 'N/A',
'cost': 'Free',
'latency': 'Minutes',
'current_status': 'MOSTLY INTACT -- works if you call THEIR '
'known number, not the number they gave you'
},
}
print("=== Trust Anchor Status Report ===\n")
for anchor, data in TRUST_ANCHORS.items():
status = data['current_status']
marker = 'X' if 'BROKEN' in status else 'OK'
print(f"[{marker}] {anchor.replace('_', ' ').title()}")
print(f" Status: {status}")
print()
# Output:
# [X] Voice Recognition
# Status: BROKEN -- voice is no longer proof of identity
# [X] Video Face Recognition
# Status: BROKEN for video calls -- artifacts visible only...
# [X] Writing Style
# Status: BROKEN -- LLMs replicate any writing voice
# [X] Email Headers
# Status: BROKEN since 1982 -- DMARC/SPF help but...
# [OK] Shared Secret Challenge
# Status: INTACT -- still works
# [OK] Cryptographic Signature
# Status: INTACT -- still works
# [OK] Out Of Band Callback
# Status: MOSTLY INTACT -- works if you call THEIR known number
Look at that output. Four of seven traditional trust anchors are broken. The three that survive are the three that do NOT depend on biometric or stylistic recognition -- they depend on something the person knows (shared secret), something the person has (cryptographic key), or verification through a separate channel (callback). The pattern is clear: anything based on "does this look/sound/read like the right person" is defeated. Only mechanisms based on secrets or independent verification remain viable.
Voice Cloning -- Your Voice Is Not Your Password Anymore
Modern voice cloning has reached a point where the technology itself is no longer the bottleneck. The hard part used to be quality. Now the hard part is that there IS no hard part.
The evolution of voice cloning:
2018: Requires ~20 hours of high-quality studio recordings.
Cost: $50,000+ for custom model training.
Quality: recognizable but uncanny -- sounds "off."
Use case: entertainment industry only.
2020: Requires 5-10 minutes of clean audio.
Cost: cloud compute ($50-100 in GPU hours).
Quality: convincing on phone calls, not in person.
Use case: proof-of-concept attacks, some fraud cases.
2023: Requires 30 seconds to 3 minutes of audio.
Cost: free (open-source tools, consumer GPU).
Quality: indistinguishable on phone calls.
Use case: widespread criminal fraud, vishing at scale.
2025: Requires as little as 3 seconds of reference audio.
Cost: free.
Quality: indistinguishable in most conditions.
Use case: anyone can do this. No technical skill required.
Some commercial services offer it as a feature.
Here's what that means in practice. Your CEO gave a 20-minute talk at a conference last year. That talk is on Youtube. From that single video, an attacker can extract enough clean audio to produce a voice clone that is indistinguishable from the real CEO on a phone call. Not "close." Not "reminds you of." Indistinguishable.
Real attack workflow (2024):
1. Find target voice sample:
- Conference talk on YouTube (most common source)
- Podcast interview
- Earnings call recording (publicly available for
any public company)
- Voicemail greeting (call their desk phone after hours)
- Social media videos
2. Clone the voice:
- Download audio, extract clean speech segments
- Feed to voice cloning tool (RVC, XTTS, or commercial)
- 30 minutes of compute on a consumer GPU
- Result: a model that speaks in the target's voice
3. Deploy:
Option A -- pre-recorded messages:
Type text, voice model speaks it as the target.
Good for voicemail, one-way audio messages.
Option B -- real-time voice conversion:
Attacker speaks into microphone normally.
AI converts to target's voice in real-time (<200ms).
Enables live, interactive phone conversations.
The attacker controls what is said, the AI controls
how it SOUNDS. Lethal combination.
4. Execute the social engineering:
Call the target's assistant/finance team/family.
"Hi, it's [CEO name]. I need you to process a wire
transfer for me -- it's urgent, the deal closes today."
The person on the other end hears a voice they know
and trust. They comply.
Documented case (2019):
UK energy company CEO received a call from his "boss"
(parent company CEO in Germany). Voice was AI-generated.
Instructed to wire $243,000 to a Hungarian supplier.
He did. The money was gone within hours.
This was 2019 -- the technology has improved enormously.
The real-time conversion is the one that keeps me up at night. A pre-recorded deepfake message is concerning, but it's one-directional -- the victim can't have a conversation with it, can't ask unexpected questions, can't verify by asking something only the real person would know. Real-time voice conversion destroys that defense. The attacker IS having a conversation with you. They're thinking, responding, improvising -- the AI just makes them sound like someone else. You ask "what did we discuss at lunch yesterday?" and a skilled attacker who has done their OSINT homework (episode 47) can answer correctly while sounding exactly like the person they're impersonating ;-)
#!/usr/bin/env python3
"""voice_clone_risk_assessment.py -- evaluate organizational exposure"""
import json
def assess_voice_exposure(executives):
"""Score how vulnerable an org's leadership is to voice cloning.
For each executive, check how much public audio exists that
could be used to train a voice clone.
"""
results = []
for exec_info in executives:
risk_score = 0
sources = []
# Conference talks (highest quality audio)
talks = exec_info.get('public_talks', 0)
if talks > 0:
risk_score += min(talks * 15, 40)
sources.append(f"{talks} conference talks on YouTube")
# Podcast appearances
podcasts = exec_info.get('podcast_appearances', 0)
if podcasts > 0:
risk_score += min(podcasts * 10, 30)
sources.append(f"{podcasts} podcast episodes")
# Earnings calls (public companies only)
if exec_info.get('public_company', False):
risk_score += 25
sources.append("quarterly earnings calls (public record)")
# Social media video presence
if exec_info.get('social_media_videos', False):
risk_score += 15
sources.append("social media videos (LinkedIn, Twitter)")
# Voicemail accessibility
if exec_info.get('direct_phone_public', False):
risk_score += 10
sources.append("voicemail greeting accessible")
level = ('CRITICAL' if risk_score >= 60
else 'HIGH' if risk_score >= 40
else 'MEDIUM' if risk_score >= 20
else 'LOW')
results.append({
'name': exec_info['name'],
'title': exec_info['title'],
'risk_score': min(risk_score, 100),
'risk_level': level,
'audio_sources': sources,
'recommendation': _get_recommendation(level)
})
return results
def _get_recommendation(level):
recs = {
'CRITICAL': 'Implement code word protocol immediately. '
'All financial requests verified out-of-band.',
'HIGH': 'Establish challenge phrases with finance team. '
'Train staff that voice alone is not verification.',
'MEDIUM': 'Include in security awareness briefing. '
'Monitor for voice phishing attempts.',
'LOW': 'Standard awareness training sufficient.'
}
return recs[level]
# Example assessment
leadership = [
{
'name': 'Sarah Mitchell',
'title': 'CEO',
'public_talks': 5,
'podcast_appearances': 3,
'public_company': True,
'social_media_videos': True,
'direct_phone_public': False
},
{
'name': 'David Park',
'title': 'CFO',
'public_talks': 2,
'podcast_appearances': 0,
'public_company': True,
'social_media_videos': False,
'direct_phone_public': True
},
{
'name': 'Lisa Torres',
'title': 'VP Engineering',
'public_talks': 0,
'podcast_appearances': 1,
'public_company': True,
'social_media_videos': False,
'direct_phone_public': False
}
]
for result in assess_voice_exposure(leadership):
print(f"\n{result['name']} ({result['title']})")
print(f" Risk: {result['risk_level']} (score: {result['risk_score']})")
print(f" Audio sources: {', '.join(result['audio_sources'])}")
print(f" Action: {result['recommendation']}")
That assessment script is simplified, but the underlying principle is sound: the more public audio exists for a person, the easier their voice is to clone, and the more urgently they need procedural safeguards. A CEO who keynotes four conferences a year and appears on podcasts monthly is a trivial voice cloning target. The CFO whose voice has never appeared in public media is significantly harder (though a single voicemail greeting may be enough with current technology).
Video Deepfakes -- Seeing Is No Longer Believing
If voice cloning breaks phone trust, video deepfakes break the last remaining "high-assurance" verification method most organisations rely on: the video call.
The Hong Kong case (January 2024):
A finance worker at a multinational firm received a message
from the company's UK-based CFO requesting a secret transaction.
The worker was suspicious -- the request came out of nowhere and
involved a large amount. So he did the responsible thing: he
joined a video call with the CFO and several other colleagues
to verify the request in person.
Everyone on the video call looked right. Sounded right.
The CFO explained the transaction. Other colleagues nodded
along, asked questions, responded naturally.
Satisfied, the worker transferred $25.6 million across
15 separate transactions over the following days.
Every single person on that video call was a deepfake.
The attackers had used publicly available video footage of
the real employees (from corporate videos, conference talks,
LinkedIn) to create real-time face and voice clones. They
ran a multi-person deepfake video call -- something that
was considered science fiction just two years earlier.
$25.6 million. Gone.
The worker did everything "right" by conventional security
wisdom: he was suspicious, he demanded visual verification,
he held a multi-person call. The problem is that "visual
verification via video call" is no longer verification.
Let that sink in. The victim was CAUTIOUS. He didn't just wire the money on an email request -- he demanded a video call. He saw faces he recognized. He heard voices he knew. Multiple people, not just one. And it was all fake. The standard security advice of "verify by video call" failed completely because the advice assumed that video calls cannot be faked.
Real-time deepfake tools (all open-source, all free):
1. DeepFaceLive
- Real-time face swapping during video calls
- Uses OBS Studio as a virtual camera
- Feed the deepfake output into Zoom/Teams/Meet
- The other participants see the swapped face
- Requirements: source photos/video of target,
RTX 3070+ GPU, OBS Studio
2. SimSwap
- Face swapping from a single photograph
- Lower quality than DeepFaceLive but needs less data
- One clear photo of the target is sufficient
3. Wav2Lip
- Lip-sync a face to any audio track
- Combine with voice cloning: clone the voice, then
lip-sync the deepfake face to the cloned speech
- Result: a video of someone saying words they never said,
in a voice that matches their real voice, with lip
movements that sync perfectly
Why video calls are particularly vulnerable:
- Standard video call quality is 720p, often lower
- Compression artifacts mask deepfake artifacts
- Mediocre webcam lighting hides inconsistencies
- Small video windows mean faces occupy few pixels
- Network jitter provides cover for rendering delays
- People expect slight video glitches in calls
What can still expose a video deepfake:
- Ask the person to hold their hand in front of their face
(occlusion breaks most current face-swap models)
- Ask them to turn completely sideways (profile view is
harder to generate)
- Extreme close-up (reveals boundary artifacts)
- Unusual lighting changes (hold a phone flashlight to face)
- But asking your CFO to wave their hand in front of their
face during a call about wire transfers... is awkward at best
AI-Generated Phishing -- The Death of Bad Grammar as a Red Flag
For 20 years, security awareness training taught people to spot phishing by looking for poor grammar, awkward phrasing, and generic greetings. "Dear Valued Customer" and "Please to verify your informations" were the hallmarks of a phishing email. That detection method is now completely obsolete.
#!/usr/bin/env python3
"""phishing_evolution.py -- compare old vs AI-generated phishing"""
PHISHING_COMPARISON = {
'traditional': {
'example': (
"Dear Sir/Madam,\n\n"
"We are needing you to verify your account informations "
"by clicking the below link. Failing to do will result "
"in permanent account suspension.\n\n"
"Click here: http://secur1ty-verify.com/login\n\n"
"Regards,\nIT Department"
),
'red_flags': [
'Generic greeting (no name)',
'Grammatical errors ("are needing", "informations")',
'Urgency threat ("permanent suspension")',
'Suspicious URL (misspelled, .com TLD)',
'Vague sender ("IT Department" -- which one?)',
],
'detection_rate': '70-80% by trained users',
'personalization': 'None -- same email to 10,000 people',
'cost_per_target': '$0.001 (bulk email)',
},
'ai_generated': {
'example': (
"Hi Sarah,\n\n"
"Quick heads up -- the security team flagged an issue "
"with your Azure AD token during last night's maintenance "
"window. Nothing urgent, but could you re-authenticate "
"through the portal when you get a chance? Here's the "
"direct link so you don't have to hunt for it.\n\n"
"https://portal.azure-auth-refresh.com/sso\n\n"
"Thanks!\nJames Wilson\n"
"IT Security, Building 3"
),
'red_flags': [
'Domain looks plausible but is not microsoft.com',
'No grammatical errors to trigger suspicion',
'Casual tone avoids urgency red flag',
'Specific details make it feel real',
],
'detection_rate': '10-20% by trained users (estimated)',
'personalization': 'First name, specific technology, '
'manager name, building number',
'cost_per_target': '$0.002 (LLM API call)',
}
}
for style, data in PHISHING_COMPARISON.items():
print(f"=== {style.upper()} PHISHING ===")
print(f"\nExample:\n{data['example']}")
print(f"\nRed flags: {', '.join(data['red_flags'])}")
print(f"Detection rate: {data['detection_rate']}")
print(f"Personalization: {data['personalization']}")
print(f"Cost per target: {data['cost_per_target']}")
print()
The AI-generated version uses the target's first name (from LinkedIn), references the specific technology stack (from job postings -- remember episode 47's OSINT section), mentions the manager's name (also LinkedIn), and adopts a casual, non-urgent tone that deliberately avoids the "urgency" red flag that training programs emphasize. There are zero grammatical errors. The domain looks plausible. The writing style matches what a real IT department email sounds like.
Spear Phishing at Scale
Before AI, there was a fundamental tradeoff in phishing: quality versus quantity. Bulk phishing hit thousands of inboxes but was generic and easy to spot. Spear phishing was highly targeted and effective but required hours of manual work per target. You couldn't have both.
AI eliminates that tradeoff entirely.
The old economics:
Bulk phishing: 1 template x 10,000 targets = 10,000 emails
Cost: $10 (email infrastructure)
Quality: terrible (generic, broken English)
Success rate: 1-3%
Yield: 100-300 compromised accounts
Spear phishing: 1 custom email per target, 2 hours per email
Cost: $100/hour x 2 hours = $200 per target
Quality: excellent (researched, personalized)
Success rate: 30-50%
Scale limit: ~5 targets per day per operator
The new economics with AI:
AI spear phishing: 1 custom email per target, 3 seconds per email
Cost: $0.002 per email (API call)
Quality: excellent (OSINT-enriched, personalized)
Success rate: 30-50% (same as manual spear phishing)
Scale: 10,000 perfectly personalized emails in
minutes. For twenty dollars.
The workflow:
1. Scrape target company's LinkedIn (employee names, roles,
reporting structure, projects, technology stack)
2. Feed each employee profile to LLM:
"Write a phishing email to [name], [role] at [company],
working on [project]. Email should appear from [manager].
Reference [specific context from OSINT]."
3. LLM generates a unique, contextual, personalized email
for each of the 500 employees in the organization
4. Each email references real projects, real colleagues,
real technology -- because the OSINT is real
5. Send all 500 simultaneously
This used to require a team of skilled red team operators
working for days. Now it requires a Python script and an API key.
#!/usr/bin/env python3
"""phishing_cost_model.py -- the economics have changed"""
def compare_phishing_economics(target_count):
"""Compare cost and yield of phishing approaches."""
approaches = {
'bulk_template': {
'label': 'Bulk (one template)',
'cost_per_target': 0.001,
'success_rate': 0.02,
'time_per_target_seconds': 0.01,
},
'manual_spear': {
'label': 'Manual spear phishing',
'cost_per_target': 200.00,
'success_rate': 0.40,
'time_per_target_seconds': 7200, # 2 hours
},
'ai_spear': {
'label': 'AI-generated spear phishing',
'cost_per_target': 0.01, # OSINT + LLM API
'success_rate': 0.35,
'time_per_target_seconds': 5, # scrape + generate
},
}
print(f"Target organization: {target_count} employees\n")
for key, approach in approaches.items():
total_cost = approach['cost_per_target'] * target_count
expected_compromised = int(
target_count * approach['success_rate']
)
total_time_hours = (
approach['time_per_target_seconds'] * target_count / 3600
)
cost_per_compromise = (
total_cost / expected_compromised
if expected_compromised > 0 else float('inf')
)
print(f"{approach['label']}:")
print(f" Total cost: ${total_cost:,.2f}")
print(f" Time: {total_time_hours:,.1f} hours")
print(f" Expected compromises: {expected_compromised}")
print(f" Cost per compromise: ${cost_per_compromise:,.2f}")
print()
compare_phishing_economics(500)
# Output:
# Bulk (one template):
# Total cost: $0.50
# Time: 0.0 hours
# Expected compromises: 10
# Cost per compromise: $0.05
#
# Manual spear phishing:
# Total cost: $100,000.00
# Time: 1,000.0 hours
# Expected compromises: 200
# Cost per compromise: $500.00
#
# AI-generated spear phishing:
# Total cost: $5.00
# Time: 0.7 hours
# Expected compromises: 175
# Cost per compromise: $0.03
Look at that last line. $0.03 per compromised account. Five dollars total to spear-phish an entire 500-person organization with personalized, context-aware emails that each reference real colleagues, real projects, and real technology. The economics are staggering. The cost of a high-quality, targeted social engineering campaign has dropped from "national intelligence agency budget" to "lunch money."
Detecting Deepfakes
So how do you spot this stuff? The honest answer: technical detection is an arms race that defenders will probably lose in the long run. But there are approaches that work today, and -- more importantly -- procedural defenses that work regardless of how good the deepfakes get.
#!/usr/bin/env python3
"""deepfake_detection_checklist.py -- what to look for"""
AUDIO_INDICATORS = [
{
'indicator': 'Unnatural breathing patterns',
'description': 'AI-generated speech often has perfectly '
'regular pauses or no breathing sounds at all. '
'Real speech has irregular micro-pauses, inhales '
'mid-sentence, and breathing artifacts.',
'reliability': 'MEDIUM -- newer models simulate breathing',
},
{
'indicator': 'Background noise consistency',
'description': 'Real phone calls have variable background '
'noise (shifting, fading, environmental changes). '
'Generated audio often has perfectly consistent '
'or completely absent background noise.',
'reliability': 'MEDIUM -- post-processing can add noise',
},
{
'indicator': 'Emotional micro-expressions in voice',
'description': 'Real speech has subtle emotional variations '
'that are hard to model -- slight tension when '
'discussing money, micro-hesitations on lies. '
'Cloned voices often sound emotionally "flat."',
'reliability': 'LOW -- next-gen models handle emotion well',
},
]
VIDEO_INDICATORS = [
{
'indicator': 'Face boundary artifacts',
'description': 'Blurring or color mismatch at the boundary '
'between the swapped face and the real head. '
'Especially visible along the jawline and '
'hairline.',
'reliability': 'MEDIUM -- visible at high resolution only',
},
{
'indicator': 'Eye reflection inconsistency',
'description': 'Reflections in both eyes should match. '
'Deepfakes sometimes generate different '
'reflections in each eye.',
'reliability': 'LOW -- requires very close inspection',
},
{
'indicator': 'Occlusion failure',
'description': 'Ask the person to hold their hand in front '
'of their face. Most face-swap models fail '
'when the face is partially covered -- the '
'swap glitches or the hand appears to "melt" '
'into the face.',
'reliability': 'HIGH -- this is the best active test',
},
{
'indicator': 'Profile view degradation',
'description': 'Ask the person to turn sideways. Real-time '
'face-swap models are trained primarily on '
'frontal faces. Profile views often show '
'significant quality drops or glitches.',
'reliability': 'MEDIUM-HIGH -- effective with current tools',
},
]
print("=== Audio Deepfake Detection ===")
for ind in AUDIO_INDICATORS:
print(f"\n[{ind['reliability']}] {ind['indicator']}")
print(f" {ind['description']}")
print("\n=== Video Deepfake Detection ===")
for ind in VIDEO_INDICATORS:
print(f"\n[{ind['reliability']}] {ind['indicator']}")
print(f" {ind['description']}")
print("\n=== Fundamental Problem ===")
print("Every technical indicator is temporary. Deepfake models")
print("are specifically trained to defeat known detection methods.")
print("Today's detector is tomorrow's training target.")
print("Procedural defenses are the only ones that scale.")
The occlusion test (asking someone to put their hand in front of their face) is the best active test available right now, because current real-time face-swap models handle occlusion poorly. But it's also socially awkward to ask your CFO to cover half their face during a call about a wire transfer. And by the time you read this, the next generation of models may handle occlusion just fine.
Procedural Detection -- The Only Defense That Ages Well
Since technical detection is an arms race, the real defense is procedural. Procedures don't care how good the deepfake is. They work regardless of technology:
1. Code words / challenge phrases
Pre-establish a shared secret phrase with key stakeholders.
"Before we process any transfer over $10,000, what is our
code word?"
A deepfake attacker does NOT know the code word. Period.
The voice can be perfect, the face can be perfect, but
without the shared secret the request is denied.
Implementation: each C-suite member has a unique code word
shared only with the finance team. Rotate quarterly.
Store in a secure vault, NOT in email or Slack.
2. Out-of-band verification
If someone contacts you requesting any action, hang up
and call them back on a KNOWN number (from your contacts,
the company directory, the number you've always used --
NOT the number that appeared on caller ID, NOT a number
from the email).
"I'll call you right back on your direct line to confirm."
This defeats voice cloning because the attacker cannot
answer the real person's phone. It defeats caller ID
spoofing because you are choosing the number.
3. Multi-channel confirmation
Verify the request through a DIFFERENT communication channel
than the one it arrived on.
- Phone request? Verify via Slack DM.
- Email request? Verify via phone call.
- Video call request? Verify via in-person walk to office.
The attacker controls one channel. They rarely control two.
4. Behavioral challenges
Ask something only the real person would know from recent
private interaction.
"What did we talk about at lunch yesterday?"
"What's the color of the mug on your desk?"
"What was the joke Tom told in standup this morning?"
Caution: if the answer is available via OSINT or social
media, the challenge is worthless. Choose questions whose
answers are ephemeral and private.
5. Process controls (most reliable of all)
"Wire transfers above $10,000 require two authorized
signers, one of whom must approve IN PERSON or via
FIDO2-authenticated channel. No exceptions."
The deepfake simply does not matter if the process
requires multi-person, multi-channel authorization with
cryptographic identity verification. You can deepfake a
face and a voice. You cannot deepfake a FIDO2 key.
Synthetic Identity Fraud
Deepfakes don't just impersonate real people. AI can create completely fictional people who pass identity verification systems that were designed to catch humans using fake documents:
Components of a modern synthetic identity:
1. Face: AI-generated (Stable Diffusion, Midjourney)
-- indistinguishable from a real photograph
-- generates infinite variations: different angles,
expressions, lighting, clothing, aging
-- no reverse image search matches (the person
does not exist, so no photos exist online)
2. Background: fabricated but consistent
-- AI-generated employment history matching real
companies and plausible career progression
-- AI-generated educational credentials
-- Purchased SSN (dark web, often belonging to
children, elderly, or deceased individuals --
credit bureaus have no existing file to compare)
3. Digital footprint: pre-built over months
-- Social media accounts with months of "organic" posts
-- LinkedIn profile with endorsements and connections
(from other synthetic identities or purchased follows)
-- GitHub profile with contributed code
-- Forum posts, blog comments, community participation
4. Biometric verification: AI-generated
-- Deepfake video for live KYC verification calls
-- Cloned voice for phone verification
-- AI-generated document photos (passport, ID)
These synthetic identities are used for:
-- Opening bank accounts and credit lines
-- Passing background checks for insider placement
-- Creating credible personas for long-con social engineering
-- Money laundering through synthetic account networks
-- Evading sanctions, blacklists, and watchlists
-- Building trust relationships that enable larger fraud
The "bust-out" pattern:
1. Create synthetic identity (month 1)
2. Open credit accounts, make small purchases, pay on time
(months 2-8 -- building credit history)
3. Request credit limit increases (months 9-10)
4. Max out all credit lines simultaneously (month 11)
5. Disappear (month 12)
6. The "person" never existed -- nobody to pursue
The bust-out pattern is particularly insidious because credit bureaus rely on historical behavior to assess risk. A synthetic identity that makes small purchases and pays on time for 8 months looks exactly like a responsible consumer. There is nothing in the behavioral data that distinguishes it from a real person. The fraud only becomes apparent after the disappearence, at which point the credit is already extended and the money is gone.
Defense: Surviving the Deepfake Era
#!/usr/bin/env python3
"""deepfake_defense_framework.py -- organizational defense model"""
ORGANIZATIONAL_DEFENSES = {
'immediate': [
{
'control': 'Code word protocol for financial authorization',
'cost': 'Free (policy change)',
'effectiveness': 'HIGH',
'defeats': 'Voice cloning, video deepfakes',
'implementation': 'C-suite + finance team, rotate quarterly',
},
{
'control': 'Multi-person approval for large transactions',
'cost': 'Free (policy change)',
'effectiveness': 'HIGH',
'defeats': 'Single-target deepfake impersonation',
'implementation': '>$10K requires two approvers, '
'>$50K requires in-person or FIDO2',
},
{
'control': 'Callback verification on known numbers',
'cost': 'Free (behavioral change)',
'effectiveness': 'HIGH',
'defeats': 'Voice cloning, caller ID spoofing',
'implementation': 'Any request for action -> hang up -> '
'call back on number from internal directory',
},
],
'short_term': [
{
'control': 'Employee training: voice/video not proof',
'cost': 'Low (training program update)',
'effectiveness': 'MEDIUM',
'defeats': 'Naive trust in voice/video',
'implementation': 'Update security awareness: "seeing and '
'hearing are no longer believing"',
},
{
'control': 'FIDO2 hardware keys for high-value approvals',
'cost': 'Low ($50/key x critical staff)',
'effectiveness': 'VERY HIGH',
'defeats': 'All impersonation attacks',
'implementation': 'Finance team + C-suite + IT admins',
},
],
'long_term': [
{
'control': 'AI detection tools (audio + video)',
'cost': 'Medium (enterprise subscription)',
'effectiveness': 'MEDIUM (arms race, degrades over time)',
'defeats': 'Current-generation deepfakes',
'implementation': 'Microsoft Video Authenticator, '
'Intel FakeCatcher, Sensity AI',
},
{
'control': 'Cryptographic message signing for all '
'internal communications',
'cost': 'High (infrastructure + training)',
'effectiveness': 'VERY HIGH',
'defeats': 'Email spoofing, message tampering',
'implementation': 'S/MIME or PGP for email, signed '
'messages in internal channels',
},
],
}
INDIVIDUAL_DEFENSES = [
'Establish code words with family members (prevents '
'"grandparent scam" -- attacker calls elderly relative '
'impersonating grandchild in distress)',
'Be skeptical of ANY unsolicited contact requesting '
'money, credentials, or urgent action',
'Verify through a separate channel before acting on '
'ANY request (even if voice/face look familiar)',
'Limit public audio/video exposure where possible -- '
'every public appearance is training data for cloning',
'Never use voice biometrics as sole authentication '
'(your bank\'s "voice is your password" is broken)',
]
print("=== Organizational Defense Framework ===\n")
for timeline, controls in ORGANIZATIONAL_DEFENSES.items():
print(f"--- {timeline.upper()} ---")
for c in controls:
print(f"\n Control: {c['control']}")
print(f" Cost: {c['cost']}")
print(f" Effectiveness: {c['effectiveness']}")
print(f" Defeats: {c['defeats']}")
print()
print("=== Individual Defenses ===")
for defense in INDIVIDUAL_DEFENSES:
print(f" - {defense}")
The pattern in that framework is worth noting: the free controls (code words, callback verification, multi-person approval) are the most effective. The expensive controls (AI detection tools, cryptographic infrastructure) are either temporary (detection is an arms race) or difficult to deploy (try getting an entire organization to adopt PGP email signing). The best defenses against deepfakes cost literally nothing. They just require policy changes and behavioral discipline.
The AI Slop Connection
This entire episode IS the AI slop connection, and it's the most direct one in the series. Generative AI has not merely accelerated social engineering -- it has fundamentally broken the trust model that human communication relied on since the beginning of civilization. The same neural network architectures that let a developer generate code from a text prompt also let an attacker generate a CEO's voice from a Youtube video. The same diffusion models that create art also create faces for fictitious people who pass KYC checks. The same language models that write marketing copy also write perfect spear phishing emails, personalised for every employee in an organization, for five dollars.
The tragedy is that there is no separation between "good AI" and "attack AI." They are the same technology, the same models, often the same open-source repositories. The voice cloning tool that helps a person with ALS communicate in their own voice is the same tool that enables wire fraud. The face generation model that powers entertainment is the same model that defeats video-based identity verification. You cannot ban the attack capability without banning the legitimate capability. They are inseperable.
The only answer -- and I genuinely belive this is the ONLY answer that works long-term -- is to stop trusting biometric signals entirely and shift to cryptographic and procedural verification. "I see your face" is not proof. "I hear your voice" is not proof. The only things that still constitute proof are: something only you KNOW (shared secret, code word), something only you HAVE (cryptographic key, hardware token), and verification through an independent channel the attacker does not control. Everything else is cosplay.
What Comes Next
With episode 49 we've reached a natural boundary in this series. We've spent 48 episodes on the attacker's perspective -- finding vulnerabilities, exploiting them, moving through networks, social engineering humans, escalating privileges, exfiltrating data, and now -- fabricating reality itself. The attacker's toolkit is comprehensive.
The next phase flips the perspective entirely. What happens when an organization decides to test all of these attacks against itself? How do you plan, execute, and report on a simulated attack that covers the full spectrum -- from OSINT and phishing through exploitation, lateral movement, and data exfiltration -- without breaking anything (or getting yourself arrested)? And when the real attack comes (not if, when), how does an organization actually respond in the first critical hours? The incident response and threat intelligence dimensions of security are where most of the hard problems live, and where the defender finally gets some structural advantages.
Exercises
Exercise 1: Research the Hong Kong deepfake video call heist ($25.6M, January 2024) in depth. Document: (a) how the attackers obtained source material for the deepfakes, (b) how many participants were faked on the call, (c) what the victim's verification steps were (and why they failed), (d) what procedural controls would have prevented the loss. Save to ~/lab-notes/deepfake-heist-analysis.md.
Exercise 2: Design a deepfake-resistant verification protocol for a finance department handling wire transfers over $50,000. The protocol must assume that: voice can be cloned, video can be faked, email can be spoofed, and phone numbers can be spoofed. Define: (a) the verification steps, (b) what communication channels are used, (c) what shared secrets or challenge-response mechanisms are employed, (d) the maximum dollar amount that can be authorized without in-person verification.
Exercise 3: Test an AI text detection tool (GPTZero, Originality.ai, or similar) against 3 types of text: (a) a paragraph you wrote yourself, (b) a paragraph generated by an LLM, (c) a paragraph generated by an LLM then lightly edited by you. Document the detection accuracy for each. Then consider: if a phishing email is AI-generated and lightly edited, would the detector catch it? What does this mean for email security?