Poodle攻撃(2014-11-01)
シロガネーゼが飼い犬をけしかける攻撃手法。ウソ。
Padding Oracle On Downgraded Legacy Encryptionの略*1
パディングオラクル攻撃 †
ブロック暗号方式では、特定のサイズ単位でデータを暗号化します(例えば64bit単位とします)
このとき、送りたい原文サイズが50bitならば、残り14bitをダミーのデータで埋めた後に、64bitデータとして暗号化します。
暗号文の受信側は、暗号文を解析した結果を送信側に知らせるのですが
- 暗号文が正しく復号できた
- パディングが一致しなかった(送信データの処理に失敗した)
- パディングが一致したが、復号は失敗した
(送信データを処理したものの、暗号鍵の不一致などの認証不正と判定)
というように1はともかく、2~3のようにパディングの正否を送信側へお知らせ(神託)する場合があるそうです。
(ここから一気に端折りますが
)
- 攻撃者は正しいパディングを調べる
(上記3の応答を得るまでパディングを変えながら送信しまくる)
- パディングが分かると、暗号化途中の中間値が解析できる
- 中間値とパディングが分かると、暗号前の平文が解析できる
というステップで暗号文を解いてしまおう、というのがパディングオラクル攻撃の一例です。
あるいはパディングを変更することでサーバ側の処理速度(応答までのタイミング)を見極めて内部処理を推測したり、パディングを変更しながらサーバから情報を引き出す方法全般をパディングオラクル攻撃と呼ぶようです。
Poodle攻撃(Padding Oracle On Downgraded Legacy Encryption) †
SSL3.0で見つかった脆弱性、というかSSL3.0ならば前述のパディングオラクル攻撃が通る、という話っぽいです。
SSL3.0はhttps(SSL/TLS)通信の古いバージョンのプロトコルにあたります。
(2019末追記)
...とか当時書いていたら、いまはもうTLS1.1も脆弱性が。
下のメモは、SSL3.0とかTLS1.1とか2とか64とか、適宜読み替えてください
*2
以下、攻撃の手順
- まず、任意のWebサーバにhttps接続を行う
- Webサーバ側の暗号化プロトコルの要求に
「それには対応していないから、もっと古いバージョンで通信してくれ」と要求します。
(レガシーなEncryption(暗号化)方式に強引にダウングレードさせます)
つまり、
- Webサーバ側が、攻撃者にTLS 1.2での通信を要求する
- 攻撃者は「それには対応していないよ」と応答する
- Webサーバ側が、攻撃者にTLS 1.1での通信を要求する
- 攻撃者は「それには対応していないよ」と応答する
- Webサーバ側が、攻撃者にSSL 3.0での通信を要求する
- 攻撃者は「それなら良いよ
」と応答する
- ここから攻撃者はパディングオラクル攻撃を開始する。主にセッション情報(Cookie)を解析したりする。
対応策としては、SSL3.0の無効化。Apacheの httpdの例だと以下*3
SSLProtocol All -SSLv2 -SSLv3
(SSL2.0と3.0を無効化しています。これは極端な例ですが)