The following is a lightly anonymised account of a real engagement. Identifiers have been altered. Technical findings are presented as they occurred. We are publishing it because voice cloning has crossed from research curiosity to a commodity criminal tool, and because the controls that stop it are not technical. They are procedural, and they are old.
The Engagement
At 15:52 on a Thursday, the company's financial controller, Helen, received a call on her desk phone. Caller ID showed the CEO's mobile number. The CEO, Dominic, was travelling to a trade show in Germany, and Helen knew this. The voice on the line was Dominic's. It was warm, slightly rushed, and apologetic.
He explained that an acquisition they had been quietly negotiating needed a deposit wired before close of business European time or the deal would collapse. He gave her a beneficiary name and a bank in Lithuania. He said the lawyers would send the paperwork tomorrow. He said, 'I know this is irregular, Helen, and I wouldn't ask if it wasn't important.'
Helen had a procedure for this. The procedure was a callback to the CEO's mobile. She called it. Dominic answered on the second ring, in the same voice, and confirmed. She released the wire: $1,140,000 CAD.
The following morning the real Dominic, in Hamburg, read her confirmation email and called the CFO. We were engaged by noon.
"The callback control worked exactly as designed. She called the CEO's number. The attacker answered it. That is the part nobody had planned for."
Finding 01: The Calls: Telecom and VoIP Records
- SIP INVITE headers carry
From,P-Asserted-Identity,Via. The presented caller ID is inFromand is trivially spoofed - Carrier CDRs show the true originating trunk, not the display number. Request them for both inbound and outbound legs
- For the callback: the outbound CDR shows where the call actually terminated. If not the CEO's handset, the number was forwarded or SIM-swapped
- Call duration, ring time, and answer timestamp are all in the CDR. Build the timeline from these, not from memory
# SIP From header spoofed; carrier CDR shows the callback was unconditionally forwarded to a Lithuanian mobile
# PBX SIP log - inbound call to Helen's extension (Asterisk full log, condensed)
grep -A6 'INVITE sip:2217@' /var/log/asterisk/full | grep -E 'From|P-Asserted|Via|Contact'
# [15:52:04] From: "Dominic ████" <sip:+1416████████@sip.trunk-provider.com> ← CEO mobile as caller ID
# [15:52:04] P-Asserted-Identity: <sip:+1416████████@sip.trunk-provider.com>
# [15:52:04] Via: SIP/2.0/UDP 185.53.██.██:5060;branch=z9hG4bK... ← NOT the carrier's Canadian POP
# [15:52:04] Contact: <sip:anon@185.53.██.██:5060>
# 185.53.xx.xx → Dutch VoIP wholesaler (ASN AS2████). Caller ID is an unverified attribute on this trunk.
# STIR/SHAKEN attestation header: ABSENT. The SIP trunk provider does not sign inbound international calls.
# Carrier CDR - Helen's OUTBOUND callback to CEO mobile at 15:58:41
# Dialed: +1416████████ (CEO mobile)
# Terminated at: +370 6██ ████ (Lithuania, mobile) ← CALL FORWARDED
# Forward reason: 'Unconditional Call Forward' active on CEO's number since 15:31 same day
# Duration: 00:01:47
The inbound call had been placed through a European VoIP wholesaler with Dominic's mobile number set as the caller ID, a field that costs nothing to populate and that the Canadian trunk provider did not validate. That part was expected.
The callback was the part that mattered. Helen's outbound call to Dominic's real mobile number had terminated in Lithuania, because unconditional call forwarding had been activated on his line 21 minutes before the first call.
Inbound Caller ID Spoofed via Dutch VoIP Wholesaler; Callback Defeated by Unconditional Call Forward Activated on CEO's Mobile 21 Minutes Prior
PBX SIP logs showed the inbound INVITE originated from a Dutch wholesale VoIP provider with the CEO's mobile number presented in the From header and no STIR/SHAKEN attestation. Carrier CDRs for Helen's callback showed the call to the CEO's genuine number was unconditionally forwarded to a Lithuanian mobile, with the forward activated at 15:31, before the first fraudulent call. The callback control was procedurally correct and technically defeated.
Finding 02: How the Forward Was Set: The Carrier Account
- Call forwarding can be set three ways: handset (
*21*), carrier self-service portal, or carrier customer service agent - Carrier account logs record the channel, the authenticating credential used, and the agent ID if human-assisted
- Social engineering of carrier support ('SIM swap lite') is the common path. The attacker answers security questions from OSINT
- The CEO's handset shows nothing: forwarding is a network-side setting, and the phone keeps working normally for outbound calls
# Carrier support social-engineered with OSINT security answers; forward active for 101 minutes
# Carrier account change log (produced under legal request) - CEO's mobile line
# Timestamp (ET) Channel Change Auth method Agent
# 2024-██-██ 15:29 Phone support Account PIN reset Security Qs (3/3 correct) ████
# 2024-██-██ 15:31 Phone support Call Forward Unconditional → +370 6██ ████ Account PIN ████
# 2024-██-██ 17:12 Phone support Call Forward Unconditional → OFF Account PIN ████
# Security questions on file: mother's maiden name, first car, city of birth
# All three answerable from: CEO's public LinkedIn, a 2019 podcast interview, a local newspaper profile of his mother
# Support call recording: caller spoke with an accent the agent described as 'maybe Dutch or German'; agent did not escalate
# Forward was switched OFF at 17:12 - after the wire confirmation.
# The CEO's phone missed calls for 101 minutes and he noticed nothing.
Nothing on Dominic's handset would ever have told him. Call forwarding lives in the carrier's network, not on the phone. His outbound calls, data, and messaging continued to work. For 101 minutes, every call to his number rang in Lithuania instead, and the attacker switched the forward off once the wire confirmation had landed.
Carrier Support Social-Engineered: Account PIN Reset via Three OSINT-Answerable Security Questions, Forward Active 101 Minutes
The carrier's account change log showed a human-assisted PIN reset at 15:29 using security questions whose answers were all available from the CEO's public profile, a podcast, and a newspaper article. Unconditional call forwarding was set two minutes later and removed 101 minutes later, after the wire was confirmed. The CEO's handset showed no indication. Carrier support did not escalate despite an accent inconsistent with the account holder.
Finding 03: The Voice: Spectral and Synthesis Analysis
- Compliance recording on the finance extension captured both calls at 8 kHz G.711: narrowband but usable
- Synthetic speech artefacts: unnaturally stable pitch contour, absent breath noise, phase discontinuities at phoneme boundaries, band-limited high-frequency energy
- Compare against a reference corpus of the real speaker: F0 distribution, formant dispersion, speaking-rate variance
- Tools: Praat (open), librosa (Python), and a trained synthetic-speech classifier. Treat classifier output as one signal, not proof
- Human listening still matters: ask people who know the speaker to identify what is 'off'
# Flat pitch variance, missing breath events, band-limited HF energy; idiolect mismatches flagged by colleagues
# Spectral comparison - call recording vs genuine CEO corpus (librosa / numpy, condensed)
import librosa, numpy as np
call, sr = librosa.load('ext2217_155204.wav', sr=8000)
ref, _ = librosa.load('ceo_townhall_2023_8k.wav', sr=8000)
def stats(y):
f0 = librosa.yin(y, fmin=70, fmax=300, sr=8000)
f0 = f0[np.isfinite(f0)]
return dict(f0_mean=f0.mean(), f0_std=f0.std(),
hf_ratio=(np.abs(librosa.stft(y))[200:,:].sum()/np.abs(librosa.stft(y)).sum()))
print('CALL:', stats(call))
print('REF :', stats(ref))
# CALL: {'f0_mean': 118.4, 'f0_std': 6.1, 'hf_ratio': 0.012}
# REF : {'f0_mean': 121.9, 'f0_std': 19.7, 'hf_ratio': 0.041}
# Pitch variance in the call is ~1/3 of the real speaker's - flat, 'read' prosody
# High-frequency energy (>3.2 kHz) is a quarter of the reference even at matched 8 kHz - synthesis band-limiting
# Breath events detected in reference: 41 in 4 min. In call: 2. Humans breathe.
# Phrase-level anomaly flagged by three staff independently:
# Synthetic voice closes with 'Great, thanks.' - Dominic says 'Cheers' or 'Appreciate it', never 'thanks'
# Pronunciation of 'Lithuania' - synthetic voice stresses the second syllable; Dominic (Scottish) stresses the third
# Source material match: 14-minute Q3 investor webcast (public, YouTube)
# Phoneme coverage sufficient for a commodity cloning service
The spectral signals pointed clearly to synthesis: pitch variance a third of the real speaker's, almost no breath events across four minutes of speech, and high-frequency energy consistent with a vocoder output rather than a telephone-band human voice.
But the most persuasive evidence for the people in the room was linguistic. Three colleagues, listening independently, said the same thing: Dominic does not say 'great, thanks.' He has never once said 'great, thanks.'
The cloning model had learned his timbre from a public webcast. It had not learned him.
Call Recording Shows Synthetic Speech Signature: F0 Variance 31% of Reference, 2 Breath Events vs 41, HF Energy Band-Limited; Idiolect Mismatches on Two Phrases
Spectral analysis of the compliance recording against a corpus of the CEO's genuine speech showed pitch variance a third of the real speaker's, near-absent breath noise, and band-limited high-frequency energy consistent with neural vocoder output. Three colleagues independently identified a closing phrase and a stress pattern the CEO never uses. The 14-minute public investor webcast provided sufficient phoneme coverage for commodity voice cloning.
Finding 04: Pretext Construction: What the Attacker Knew
- The pretext (an acquisition deposit, CEO abroad, deadline in European hours) was accurate. The acquisition was real and confidential
- Check for mailbox compromise first; if absent, check who else knew and what was public
- Trade-show attendance was on the CEO's public LinkedIn; the acquisition target had leaked via a sell-side advisor's deal-teaser email list
- Attackers assemble pretexts from many weak sources. A single confidential detail is often the one that convinces the victim
# No mailbox compromise - pretext assembled from a sell-side teaser list and a LinkedIn post
# M365 UAL - any foreign-IP access to CEO or EA mailboxes, 90 days?
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-90) -EndDate (Get-Date) `
-Operations MailItemsAccessed,UserLoggedIn -UserIds dominic.████@co.com,ea.████@co.com -ResultSize 5000 |
% { ($_.AuditData|ConvertFrom-Json).ClientIPAddress } | Sort -Unique
# Result: corporate egress, CEO home, EA home, two hotel IPs matching travel dates. Nothing foreign. No compromise.
# So where did the acquisition leak?
# Sell-side advisor's deal teaser (not under NDA until data room) was emailed to 212 recipients.
# One recipient domain: a PE 'firm' registered 6 weeks earlier with a Lithuanian director.
# Teaser named our client as the acquirer.
# Travel: CEO posted 'Hamburg-bound for ████ Messe' on LinkedIn 2 days prior.
# Time zone and unavailability handed to the attacker.
An accurate pretext usually prompts people to assume the mailbox was compromised. Here it had not been. The attacker needed only two things: a deal teaser that a sell-side advisor had sent to 212 recipients before any NDA was in place, and a LinkedIn post announcing the CEO's trip. One of the 212 recipients was a shell entity created for the purpose. Nothing in the client's tenant was touched.
No Mailbox Compromise: Pretext Assembled from Advisor Deal-Teaser Distribution (212 Recipients) and CEO's Public Travel Post
UAL review showed no unauthorised access to the CEO's or executive assistant's mailboxes. The confidential acquisition detail traced to a sell-side advisor's deal teaser distributed to 212 recipients, one of which was a shell 'private equity' entity registered six weeks earlier with a Lithuanian director. The CEO's travel and time zone came from his own LinkedIn post. The pretext required no intrusion.
Reconstructed Timeline
| Timestamp | Artifact Source | Event |
|---|---|---|
| T-6 weeks | Corporate registry (LT) | Shell 'PE firm' incorporated in Lithuania. Later appears on the sell-side advisor's teaser distribution list. |
| T-3 weeks | Advisor email (produced) | Deal teaser naming the client as acquirer sent to 212 recipients, including the shell entity. |
| T-2 days | LinkedIn (public) | CEO posts travel to Hamburg trade show. |
| T-0, 15:29 | Carrier account log | Carrier support PIN reset using OSINT security answers. |
| T-0, 15:31 | Carrier account log | Unconditional call forward set on CEO's mobile to a Lithuanian number. |
| T-0, 15:52 | PBX SIP log | Synthetic-voice call to controller from Dutch VoIP trunk, CEO mobile as caller ID. 4 min 12 s. |
| T-0, 15:58 | Carrier CDR | Controller calls back CEO mobile. Forwarded to Lithuania. Synthetic voice confirms. 1 min 47 s. |
| T-0, 16:21 | Bank records | $1,140,000 CAD wired to Lithuanian beneficiary. |
| T-0, 17:12 | Carrier account log | Call forward removed. |
| T+1, 08:40 | CEO email | Real CEO reads wire confirmation. Fraud discovered. Bank recall initiated; $214,000 frozen. |
| T+1 to T+5 | Mjolnir IR | SIP/CDR analysis, carrier records, audio forensics, UAL review. Referral to RCMP and Lithuanian authorities via bank fraud channels. |
How Each Control Was Defeated
Every control in place on the day did what it was designed to do. Each one rested on an assumption the attacker had already removed.
| Control | Assumption | How It Was Defeated | What Would Have Held |
|---|---|---|---|
| Caller ID | The displayed number identifies the caller | Spoofed in the SIP From header via a Dutch VoIP wholesaler; no STIR/SHAKEN attestation on the inbound trunk | Never treat caller ID as authentication |
| Voice recognition | A familiar voice is the person | Voice cloned from a 14-minute public investor webcast | Pre-agreed verbal passphrase |
| Callback to known number | The known number reaches the known person | Carrier support social-engineered; unconditional call forward to Lithuania set 21 minutes earlier | Carrier PIN + forward/port lock; second channel |
| Confidentiality of the deal | Only insiders know about the acquisition | Advisor teaser sent to 212 recipients, including a shell entity | NDA before teaser distribution; vetted recipient lists |
| Single approver | One trusted person can release a wire | The one approver was the one person deceived | Dual authorisation with independently reached second approver |
Related case files: For the email-borne version of this attack, where the impersonation happens inside a hijacked thread rather than on the phone, see The $2.3 Million Email Thread. For another engagement in which the attacker's knowledge came from people rather than systems, see Case #073: The Psychic Extortionist.
Lessons for Incident Responders
-
01
Pull carrier CDRs for both legs immediately. The PBX will show you the spoofed inbound; only the carrier's outbound CDR shows where a callback actually terminated. A callback that 'worked' is not a callback that reached the right person.
-
02
Treat the compliance call recording as primary evidence. Spectral features (pitch variance, breath events, HF energy) are strong signals, but corroborate them with people who know the speaker. Idiolect is the thing cloning models learn last.
-
03
Do not assume mailbox compromise because the pretext was accurate. Check the UAL, then go hunting for the leak outside the tenant. Advisor distribution lists and public social posts are the usual suspects.
-
04
Request the carrier's account change history on day one and preserve the support call recording. The social engineering of the carrier is often the most prosecutable act in the chain.
Lessons for Finance Leadership & Security Engineers
-
01
A callback is only a control if it cannot be redirected. Pair it with a second channel the attacker cannot forward: a pre-agreed verbal passphrase, a message to a second executive, or a video call. Voice alone no longer authenticates anyone.
-
02
Put a carrier account PIN and a port/forward lock on every executive mobile line. Replace knowledge-based security questions with something that cannot be derived from a podcast.
-
03
Executives should assume everything they have said on a public recording is training data. That is not a reason to stop speaking publicly. It is a reason to stop treating a familiar voice as proof of identity.
-
04
Dual authorisation for any wire over a threshold, with the second approver reached independently, is older than the internet and would have stopped this. Deepfakes are new. The control is not.
Mjolnir Security: Payment Fraud & Incident Response
Deepfake voice fraud does not leave malware behind. The evidence lives in carrier records, SIP logs, call recordings, and the procedures that were followed. If a wire has gone out on a voice you trusted, or you want to know whether your payment controls would survive a cloned executive and a forwarded phone line, we can help.
mjolnirsecurity.com ↗ · 24/7 Incident Line: +1 833 403 5875