mcpField
D
detecting-deepfake-audio-in-vishing-attacks

detecting-deepfake-audio-in-vishing-attacks

github.com/mukul975セキュリティ35.2k63 回インストール8 週間前に更新
リポジトリ

detecting-deepfake-audio-in-vishing-attacks について

セキュリティ運用、インシデント対応、詐欺調査向けの音声フォレンジックスキルです。音響特徴、分類、スペクトログラムの確認を組み合わせ、ビッシング音声における合成音声の兆候を調べて報告書にまとめます。

主な機能

  1. 01複数形式の音声を前処理
  2. 02MFCCとスペクトル特徴の抽出
  3. 03アンサンブルモデルによる音声分類
  4. 04ピッチジッターなど時間的特徴の分析
  5. 05目視確認用スペクトログラムの生成
  6. 06分析結果をフォレンジックレポートに集約

活用シーン

  1. 01経営幹部を装う通話の調査
  2. 02録音に合成音声が含まれるかの評価
  3. 03詐欺調査用の音声証拠の整理
  4. 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 と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
agent.py

詳細

ビッシング攻撃におけるディープフェイク音声の検出

使用する場面

  • ビッシングが疑われる電話で、AI によって複製された経営幹部の声を使って電信送金が承認された
  • セキュリティ運用チームが、CEO の声に聞こえるものの、話し方に違和感のあるボイスメールを受信した
  • インシデント対応チームが、録音された電話に合成音声が含まれているかどうかを判定する必要がある
  • 不正調査で、音声が AI によって生成されたことを示すフォレンジック証拠が必要である
  • レッドチーム演習で音声クローンを使用し、ブルーチームに検出能力が求められる

テキストベースのフィッシング(メール/SMS)には使用しないでください。代わりに、メールヘッダー分析または 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:MFCC、スペクトル特徴の抽出、スペクトログラムの生成に対応した音声分析用 Python ライブラリ
  • scikit-learn:ランダムフォレストや勾配ブースティングによる分類に使用される機械学習ライブラリ
  • Resemblyzer:既知の真正なサンプルと疑わしいサンプルの音声 ID を比較するための話者埋め込みライブラリ
  • Speechbrain:事前学習済みのディープフェイク検出モデルを備えた音声処理用ディープラーニングツールキット
  • Praat:音声サンプルのピッチ、ジッター、シマーを詳細に分析する音声学ソフトウェア
  • FFmpeg:librosa に必要な音声フォーマット変換および前処理ユーティリティ

よくあるシナリオ

シナリオ:役員になりすました電信送金詐欺

状況:CFO に CEO からの電話のように見える着信があり、230 万ドルの緊急電信送金を依頼されました。着信は不明な番号からでしたが、声は CEO とまったく同じに聞こえました。IT セキュリティ部門は電話システムから通話録音を入手できました。

対応方法:

  1. 電話システムの録音から音声を抽出し、16kHz の WAV に変換します
  2. 疑わしい音声に対して MFCC とスペクトル特徴の抽出を実行します
  3. 会議の録音から得られた、真正であることが確認済みの CEO の音声サンプルと比較します
  4. 人間の発話のベースラインと照らし合わせて、ピッチジッターとシマーを分析します
  5. 学習済みのアンサンブルモデルで分類し、信頼度スコアを生成します
  6. 法務およびコンプライアンス向けに、スペクトログラムの証拠を含むフォレンジックレポートを作成します

注意点:

  • 電話コーデックの圧縮(G.711、AMR)によって音質が劣化し、ディープフェイクの痕跡が隠れることがあります
  • 短い音声クリップ(3 秒未満)では、信頼性の低い特徴統計が得られます
  • 通話環境の背景ノイズによって、分類精度が低下することがあります
  • 高度な音声クローン(例:30 分以上の学習データでファインチューニングした VALL-E)は、基本的な特徴分析を回避する可能性があります
  • VoIP 経由で送信された真正な音声にも、ディープフェイクに似たスペクトル上の痕跡が現れる場合があります

コメント