关于 detecting-deepfake-audio-in-vishing-attacks
面向安全运营、事件响应和欺诈调查人员的音频取证技能,用于分析语音钓鱼录音中的合成语音迹象。它结合声学特征、分类与频谱图检查,并生成取证报告。
主要功能
- 01预处理多种格式的音频
- 02提取 MFCC 与频谱特征
- 03使用集成分类器判别音频
- 04分析音高抖动等时序特征
- 05生成频谱图供人工检查
- 06汇总分析结果为取证报告
适用场景
- 01调查疑似冒充高管的语音电话
- 02评估录音是否包含合成语音
- 03为欺诈调查整理音频取证证据
- 04在红蓝队演练中测试语音检测
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill detecting-deepfake-audio-in-vishing-attacks安装后在 Claude Code 中输入/detecting-deepfake-audio-in-vishing-attacks确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
检测语音钓鱼攻击中的深度伪造音频
何时使用
- 疑似语音钓鱼电话使用了 AI 克隆的高管声音来授权电汇
- 安全运营团队收到一条语音留言,听起来像 CEO,但语气似乎不对
- 事件响应需要确定一段录制的电话通话是否包含合成语音
- 欺诈调查需要音频为 AI 生成的取证证明
- 红队演练使用声音克隆,蓝队需要检测能力
不要使用于基于文本的网络钓鱼(电子邮件/短信);请改用电子邮件标头分析或 URL 引爆工具。
先决条件
- 已安装 librosa、numpy、scikit-learn 和 scipy 的 Python 3.9+
- WAV、MP3 或 FLAC 格式的音频样本(单声道或立体声,任意采样率)
- 目标个人的已知真实语音样本参考语料库(可选,但可提高准确率)
- 已安装 FFmpeg 用于音频格式转换(librosa 依赖项)
- 至少 3 秒音频以进行可靠的特征提取
工作流
步骤 1:音频预处理
归一化并准备音频样本以进行特征提取:
import librosa
import numpy as np
# Load audio, resample to 16kHz mono
y, sr = librosa.load("suspect_call.wav", sr=16000, mono=True)
# Trim silence from beginning and end
y_trimmed, _ = librosa.effects.trim(y, top_db=25)
# Normalize amplitude to [-1, 1]
y_norm = y_trimmed / np.max(np.abs(y_trimmed))
音频预处理确保在不同录音条件、麦克风和编解码器伪影下进行一致的特征提取。
步骤 2:提取频谱特征
提取区分真实语音与合成语音的特征集:
梅尔频率倒谱系数(MFCC):
# Extract 20 MFCCs + delta and delta-delta
mfccs = librosa.feature.mfcc(y=y_norm, sr=sr, n_mfcc=20)
mfcc_delta = librosa.feature.delta(mfccs)
mfcc_delta2 = librosa.feature.delta(mfccs, order=2)
MFCC 捕捉语音的频谱包络,表示声道如何塑造声音。深度伪造音频通常在高阶 MFCC 中表现出不自然的平滑度,因为神经声码器近似但不完美复现物理声道的声学共振。
频谱特征:
spectral_centroid = librosa.feature.spectral_centroid(y=y_norm, sr=sr)
spectral_bandwidth = librosa.feature.spectral_bandwidth(y=y_norm, sr=sr)
spectral_contrast = librosa.feature.spectral_contrast(y=y_norm, sr=sr)
spectral_rolloff = librosa.feature.spectral_rolloff(y=y_norm, sr=sr)
zero_crossing_rate = librosa.feature.zero_crossing_rate(y_norm)
深度伪造音频的关键指标:
- 4-8 kHz 范围内的频谱对比度降低(声码器压缩高频细节)
- 频谱质心随时间异常一致(真实语音具有自然变化)
- 过零率方差较低(合成语音缺乏微扰动)
- 辅音-元音边界处共振峰过渡缺失或衰减
步骤 3:构建特征向量并分类
将帧级特征聚合成固定长度向量并进行分类:
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.model_selection import cross_val_score
def build_feature_vector(y, sr):
features = []
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20)
for coeff in mfccs:
features.extend([np.mean(coeff), np.std(coeff), np.min(coeff), np.max(coeff)])
for feat_fn in [librosa.feature.spectral_centroid,
librosa.feature.spectral_bandwidth,
librosa.feature.spectral_rolloff,
librosa.feature.zero_crossing_rate]:
feat = feat_fn(y=y, sr=sr) if feat_fn != librosa.feature.zero_crossing_rate else feat_fn(y)
features.extend([np.mean(feat), np.std(feat), np.min(feat), np.max(feat)])
contrast = librosa.feature.spectral_contrast(y=y, sr=sr)
for band in contrast:
features.extend([np.mean(band), np.std(band)])
return np.array(features)
分类使用集成方法:随机森林提供稳健性,梯度提升提供准确率,并通过投票机制减少误报。
步骤 4:时间伪影分析
检查神经声码器留下的时域伪影:
# Pitch stability analysis - deepfakes often have unnaturally stable F0
f0, voiced_flag, voiced_probs = librosa.pyin(y_norm, fmin=50, fmax=500, sr=sr)
f0_clean = f0[~np.isnan(f0)]
pitch_std = np.std(f0_clean) if len(f0_clean) > 0 else 0
pitch_jitter = np.mean(np.abs(np.diff(f0_clean))) if len(f0_clean) > 1 else 0
真实人类语音表现出自然的音高抖动(基频的微变化)和振幅微扰(振幅扰动)。由 Tacotron 2、VALL-E 或 ElevenLabs 生成的深度伪造音频与真实语音相比通常表现出降低的抖动和微扰。
步骤 5:频谱图目视检查
生成频谱图以供人工取证审查:
import librosa.display
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
librosa.display.specshow(librosa.power_to_db(librosa.feature.melspectrogram(y=y_norm, sr=sr)),
sr=sr, ax=axes[0, 0], x_axis='time', y_axis='mel')
axes[0, 0].set_title('Mel Spectrogram')
librosa.display.specshow(mfccs, sr=sr, ax=axes[0, 1], x_axis='time')
axes[0, 1].set_title('MFCCs')
目视检查可揭示梅尔频谱图中的条带伪影、声码器频率上限以上的不自然能量截止,以及高频范围内神经语音合成特有的周期性噪声模式。
步骤 6:生成取证报告
将发现汇总为可操作的报告:
DEEPFAKE AUDIO ANALYSIS REPORT
================================
File: suspect_executive_call.wav
Duration: 47.3 seconds
Sample Rate: 16000 Hz
Analysis Date: 2026-03-19
CLASSIFICATION RESULT
Verdict: LIKELY DEEPFAKE (confidence: 94.2%)
Ensemble Score: RF=0.91, GBT=0.97, Avg=0.94
FEATURE ANOMALIES DETECTED
- MFCC variance in coefficients 13-20: 62% below genuine baseline
- Spectral contrast (4-8 kHz): 0.23 (genuine avg: 0.41)
- Pitch jitter: 0.8 Hz (genuine avg: 2.4 Hz)
- Zero-crossing rate std: 0.003 (genuine avg: 0.011)
SPECTROGRAM ARTIFACTS
- Energy cutoff above 7.8 kHz (consistent with neural vocoder ceiling)
- Banding pattern at 50ms intervals in mel spectrogram
- Missing formant transitions at 12.4s, 23.1s, 35.7s timestamps
RECOMMENDATION
High confidence of AI-generated audio. Recommend out-of-band
verification with the purported speaker. Preserve original audio
file with chain of custody documentation for potential legal action.
关键概念
| 术语 | 定义 |
|---|---|
| MFCC | 梅尔频率倒谱系数;在梅尔(感知)频率尺度上对短时功率谱的表示 |
| 频谱质心 | 信号中现有频率的加权平均值;表示声音的感知亮度 |
| 频谱对比度 | 频谱中各频率子带上峰值与谷值之间的幅度差 |
| 声码器 | 从声学特征合成音频波形的信号处理组件;用于 TTS 和声音克隆 |
| 音高抖动 | 基频的逐周期变化;在人类语音中自然存在,在合成语音中减少 |
| 语音钓鱼 | 通过电话进行的社交工程攻击,越来越多地使用 AI 克隆声音 |
| 共振峰 | 定义元音声音的声道共振频率;共振峰之间的过渡对 AI 来说难以完美复现 |
工具与系统
- librosa:用于音频分析的 Python 库,提供 MFCC、频谱特征提取和频谱图生成
- scikit-learn:用于随机森林和梯度提升分类的机器学习库
- Resemblyzer:用于比较已知真实样本和可疑样本之间声音身份的说话人嵌入库
- Speechbrain:用于语音处理的深度学习工具包,带有预训练的深度伪造检测模型
- Praat:用于对语音样本进行详细音高、抖动和微扰分析的语音学软件
- FFmpeg:librosa 所需的音频格式转换和预处理实用程序
常见场景
场景:高管冒充电汇欺诈
背景:CFO 接到一个看似来自 CEO 的电话,要求紧急电汇 $2.3M。电话来自未知号码,但声音听起来与 CEO 完全相同。IT 安全部门能够从电话系统获取通话录音。
方法:
- 从电话系统录音中提取音频并转换为 16kHz 的 WAV
- 对可疑音频运行 MFCC 和频谱特征提取
- 与来自录制会议的已知真实 CEO 声音样本进行比较
- 根据人类语音基线分析音高抖动和微扰
- 使用训练好的集成模型进行分类并生成置信度分数
- 生成带有频谱图证据的取证报告,用于法律/合规
陷阱:
- 电话编解码器压缩(G.711、AMR)会降低音频质量,并可能掩盖深度伪造痕迹
- 短音频片段(低于 3 秒)会产生不可靠的特征统计
- 通话环境中的背景噪声会降低分类准确性
- 高度复杂的声音克隆(例如,使用 30+ 分钟训练数据微调的 VALL-E)可能逃避基本特征分析
- 通过 VoIP 传输的真实语音可能表现出与深度伪造相似的频谱伪影