本記事は学習用です。作成には ChatGPT と GitHub Copilot を使用しています。
1. 導入:POODLE攻撃とは何か
POODLE攻撃(Padding Oracle On Downgraded Legacy Encryption)は、2014年にGoogleのセキュリティチームによって報告された暗号プロトコル攻撃である(CVE-2014-3566)。主にSSL 3.0に存在するパディング処理の仕様上の曖昧さを突き、暗号化通信の一部を解読する。さらに、一部のTLS 1.x実装でパディング検証が不適切な場合にも同様の攻撃が成立することが報告された(いわゆる「POODLE for TLS」、CVE-2014-8730)。
この攻撃の本質は、暗号アルゴリズム自体の破綻ではなく、後方互換性と実装上の妥協である。特に、ブラウザやサーバが通信エラー時に古いプロトコル(SSL 3.0)へフォールバックする仕組みが攻撃に悪用される。
2. 背景:SSL/TLSとCBCモードのパディング
SSL(Secure Sockets Layer)およびTLS(Transport Layer Security)は、インターネット上の通信を暗号化するプロトコルである。POODLE攻撃の理解には、CBC(Cipher Block Chaining)モードとパディングの概念が重要である。
CBCモードの基本
CBCモードはブロック暗号の動作モードの一つで、各平文ブロックに直前の暗号化ブロック(初回は初期化ベクトル(IV))をXORしてから暗号化する。メッセージの長さがブロックサイズの倍数でない場合、末尾にパディング(余分なバイト)を追加して長さを揃える。
問題の発端:パディング検証の曖昧さ
SSL 3.0ではパディングバイトの値が厳密に定義されておらず、受信側でパディング全体が厳密に検証されない場合がある。この性質とMAC(Message Authentication Code)検証の挙動が組み合わさることで、メッセージが受理されるか拒否されるかの差異から「パディングが正しいか」を推定でき、暗号文の一部を推測可能となる。
3. 攻撃の仕組み:Padding Oracleの動作原理
POODLE攻撃は、暗号ブロックの最後の1バイトから順に平文を推測するオラクル攻撃である。おおまかな手順は以下のとおり。
攻撃手順(概略)
- 攻撃者はHTTPS通信を中継し、TLSハンドシェイクを意図的に失敗させる。
- クライアントとサーバはフォールバック機能により、SSL 3.0で再通信を行う。
- 攻撃者は暗号ブロックの一部を改変して転送し、パディング検証の結果(受理/拒否)を観察する。
- 応答の差異により、1バイトずつ平文データ(Cookieなど)を復元する。
通信経路の例(Mermaidシーケンス図)
この過程を繰り返すことで、攻撃者はセッションCookieや認証トークンを解読可能となる。
4. 影響範囲と実際の事例
対象となる環境
- SSL 3.0をサポートしているブラウザとサーバ
- TLS 1.x実装でCBCモードのパディング検証が適切でない場合(CVE-2014-8730)
実例
2014年当時、主要なブラウザ(Chrome、Firefox、Internet Explorerなど)はSSL 3.0を有効化しており、多くのウェブサイトが影響を受けた。Google、Cloudflare、MozillaなどはSSL 3.0のサポート停止やフォールバック無効化を迅速に進めた。
5. 対策:フォールバック無効化と暗号スイート制限
POODLE攻撃の根本的な防止策は、SSL 3.0を完全に無効化することである。加えて、TLS接続では安全な暗号スイートを選定し、フォールバック攻撃を防ぐ仕組みを導入する。
推奨設定例(Apacheの場合)
SSLProtocol TLSv1.2 TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!RC4
SSLHonorCipherOrder on
注:上記はTLS 1.0/1.1を無効化し、CBCの代わりにAEAD(Authenticated Encryption with Associated Data:AES-GCM/ChaCha20-Poly1305)を優先する前提である。
推奨設定例(Nginxの場合)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'HIGH:!aNULL:!MD5:!3DES:!RC4';
ssl_prefer_server_ciphers on;
その他の対策
- TLS_FALLBACK_SCSV(Signaling Cipher Suite Value)の導入
→ プロトコルのダウングレード(フォールバック)攻撃を検出して拒否。 - AEADスイートを優先し、CBCスイートの優先度を下げる(または無効化)。
- セッション再開(Session Resumption/Session Tickets)時の暗号設定検証を厳格化。
- サーバログでプロトコル/スイート使用率を監視し、古いものを段階的に廃止。
6. 実装検証:テストツールと確認手順
自組織のサーバがPOODLE攻撃に対して脆弱か確認するには、以下のツールが有用である。
| ツール名 | 用途 | コマンド例 |
|---|---|---|
| OpenSSL | プロトコル検証 | openssl s_client -connect example.com:443 -ssl3(ビルドにより無効化されている場合あり) |
| testssl.sh | 暗号設定総合テスト | ./testssl.sh --protocols example.com |
| Qualys SSL Labs | オンライン診断 | https://www.ssllabs.com/ssltest/ |
7. 関連攻撃との比較
| 攻撃名 | 特徴 | 主な対象 | 発見年 |
|---|---|---|---|
| BEAST攻撃 | CBCのブロック連鎖/IVを悪用 | TLS 1.0 | 2011 |
| CRIME攻撃 | 圧縮機構による情報漏洩 | TLS, SPDY | 2012 |
| POODLE攻撃 | パディングオラクル+フォールバック | SSL 3.0 | 2014 |
| Lucky 13攻撃 | CBCのタイミング差攻撃 | TLS 1.0~1.2 | 2013 |
これらは、暗号アルゴリズム自体ではなく「仕様や実装の隙」を突く攻撃である。
8. まとめ
POODLE攻撃は、古い暗号プロトコルを維持したまま後方互換性を重視した設計が招いた典型例である。根本的な解決策は、SSL 3.0や古いTLSバージョンを完全に廃止し、TLS 1.3などの最新プロトコルへ移行することに尽きる。
セキュリティ確保は「何を使うか」以上に「使わないものを決めること」が重要である。POODLE事件は、暗号通信の設計思想を見直す契機となった。
A. 参考サイト
- Google Online Security Blog – This POODLE bites: exploiting the SSL 3.0 fallback(2014年10月)
- Mozilla Security Blog – The POODLE Attack and the End of SSL 3.0
- Qualys SSL Labs – SSL Test
- POODLE攻撃(Padding Oracle On Downgraded Legacy Encryption)

コメント